package guestbook; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Logger; import org.mortbay.log.Log; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.PreparedQuery; import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.Query.FilterOperator; import com.google.appengine.api.datastore.Query.FilterPredicate; /** * This class defines the method related with datastore. * @author rakesh * */ public class DatastoreFactory { public static final String USER_INFO = "UserInfo"; public static final String DEVICE_REG_ID_PROPERTY = "regId"; public static final String MULTICAST_TYPE = "Multicast"; public static final String MULTICAST_REG_IDS_PROPERTY = "regIds"; private static final Logger log = Logger.getLogger(DatastoreFactory.class.getSimpleName()); private static final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); /** * This constructor will make sure no one can make object of this class. */ private DatastoreFactory() { throw new UnsupportedOperationException(); } /** * This is a helper method which creates UserInfo and store in datastore. * @param regId * @param emailId * @param name * @param regDate * @param unregDate * @return */ public static Entity createUserInfoEntity(String regId, String emailId, String name, Date regDate, Date unregDate){ Entity userInfo = new Entity(USER_INFO); userInfo.setProperty("name", name); userInfo.setProperty(DEVICE_REG_ID_PROPERTY, regId); userInfo.setProperty("emailId", emailId); userInfo.setProperty("RegDate", regDate); userInfo.setProperty("UnregDate",unregDate); return userInfo; } /** * This method Register the user and store user related information. * @param regId * @param emailId * @param phoneNo * @param name */ public static void registerUser(String regId, String emailId, String name){ Entity userInfo = createUserInfoEntity(regId, emailId, name, new Date(), null); Log.info("Rgistered : "+regId); datastore.put(userInfo); } /** * This method removes the registered user and removes its personal information from database. * @param regId */ public static void unregisterUser(String regId){ log.info("Unregistering " + regId); Entity entity = findDeviceByRegId(regId); Key key = entity.getKey(); datastore.delete(key); } /** * This method returns all the registration id which are stored in the datastore. * @return */ public static List<String> getRegIds() { Query query = new Query(USER_INFO); Iterable<Entity> entities = datastore.prepare(query).asIterable(); List<String> regIds = new ArrayList<String>(); for (Entity entity : entities) { String regId = (String) entity.getProperty(DEVICE_REG_ID_PROPERTY); regIds.add(regId); } return regIds; } /** * This method search userInfo based on the registration Id. * @param regId * @return */ private static Entity findDeviceByRegId(String regId) { Query query = new Query(USER_INFO) .setFilter(new FilterPredicate(DEVICE_REG_ID_PROPERTY, FilterOperator.EQUAL,regId)); PreparedQuery preparedQuery = datastore.prepare(query); Entity entity = preparedQuery.asSingleEntity(); return entity; } static Entity createMessageEntity(String fromAppId, String toEmailId, String fromEmailId, String subject, String message){ Entity messageEntity = new Entity("MessageEntity"); messageEntity.setProperty("toEmailId", toEmailId); messageEntity.setProperty("fromEmailId",fromEmailId); messageEntity.setProperty("subject", subject); messageEntity.setProperty("message", message); messageEntity.setProperty("date", new Date()); messageEntity.setProperty("delivered", false); return messageEntity; } }