/*
* Copyright 2014 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.samples.apps.iosched.server.gcm.db;
import static com.google.samples.apps.iosched.server.gcm.db.OfyService.ofy;
import com.google.samples.apps.iosched.server.gcm.db.models.Device;
import java.util.List;
import java.util.logging.Logger;
public class DeviceStore {
private static final Logger LOG = Logger.getLogger(DeviceStore.class.getName());
/**
* Registers a device.
*
* @param gcmId device's registration id.
*/
public static void register(String gcmId, String gcmGroupId) {
LOG.info("Registering device.\nGroup ID: " + gcmGroupId + "\nGCM ID: " + gcmId);
Device oldDevice = findDeviceByGcmId(gcmId);
if (oldDevice == null) {
// Existing device not found (as expected)
Device newDevice = new Device();
newDevice.setGcmId(gcmId);
newDevice.setGcmGroupId(gcmGroupId);
ofy().save().entity(newDevice);
} else {
// Existing device found
LOG.warning(gcmId + " is already registered");
if (!gcmGroupId.equals(oldDevice.getGcmGroupId())) {
LOG.info("GcmGroupId has changed from '" + oldDevice.getGcmGroupId() + "' to '"
+ gcmGroupId + "'");
oldDevice.setGcmGroupId(gcmGroupId);
ofy().save().entity(oldDevice);
}
}
}
/**
* Unregisters a device.
*
* @param gcmId device's registration id.
*/
public static void unregister(String gcmId) {
Device device = findDeviceByGcmId(gcmId);
if (device == null) {
LOG.warning("Device " + gcmId + " already unregistered");
return;
}
LOG.info("Unregistering " + gcmId);
ofy().delete().entity(device);
}
/**
* Updates the registration id of a device.
*/
public static void updateRegistration(String oldGcmId, String newGcmId) {
LOG.info("Updating " + oldGcmId + " to " + newGcmId);
Device oldDevice = findDeviceByGcmId(oldGcmId);
if (oldDevice == null) {
LOG.warning("No device for registration id " + oldGcmId);
return;
}
// Device exists. Since we use the GCM key as the (immutable) primary key,
// we must create a new entity.
Device newDevice = new Device();
newDevice.setGcmId(newGcmId);
newDevice.setGcmGroupId(oldDevice.getGcmGroupId());
ofy().save().entity(newDevice);
ofy().delete().entity(oldDevice);
}
/**
* Gets registered device count.
*/
public static int getDeviceCount() {
return ofy().load().type(Device.class).count();
}
public static List<Device> getAllDevices() {
return ofy().load().type(Device.class).list();
}
public static Device findDeviceByGcmId(String regId) {
return ofy().load().type(Device.class).id(regId).now();
}
public static List<Device> findDevicesByGcmGroupId(String target) {
return ofy().load().type(Device.class).filter("gPlusId", target).list();
}
}