package com.androidrocks.bex.server.manager; 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.EntityNotFoundException; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.FetchOptions; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.jdo.Transaction; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Logger; public final class PMF { private static final Logger log = Logger.getLogger(PMF.class .getName()); private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); public static final int PAGING_LIMIT = 50; private PMF() { } public static PersistenceManagerFactory get() { return pmfInstance; } public static Set<Key> chopSetToPaging(Set<Key> src){ Set<Key> dest = new HashSet<Key>(PMF.PAGING_LIMIT); if (null != src && src.size() <= PMF.PAGING_LIMIT){ return src; } else if (null != src && src.size() > PMF.PAGING_LIMIT){ Iterator<Key> iter = src.iterator(); for (int i=0; i<=PMF.PAGING_LIMIT; i++){ dest.add(iter.next()); } return dest; } return src; } public static void delete(Object object) { PersistenceManager pm = get().getPersistenceManager(); Transaction tx = pm.currentTransaction(); try { tx.begin(); pm.deletePersistent(object); log.info("#delete: " + object); tx.commit(); } finally { if (tx.isActive()) { tx.rollback(); } pm.close(); } } public static void makePersistent(Object object) { PersistenceManager pm = get().getPersistenceManager(); Transaction tx = pm.currentTransaction(); try { tx.begin(); pm.makePersistent(object); log.info("#makePersistent: " + object); tx.commit(); } finally { if (tx.isActive()) { tx.rollback(); } pm.close(); } } public static Object loadObjectById(Class klass, Key key) { PersistenceManager pm = get().getPersistenceManager(); Object result = pm.getObjectById(klass, key); pm.close(); return result; } public static Entity get(Key key) throws EntityNotFoundException { DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); return datastoreService.get(key); } public static Map<Key,Entity> get(Set<Key> keys) { DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); return datastoreService.get(keys); } public static List<Key> put(Iterable<Entity> entities) { DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); return datastoreService.put(entities); } public static List<Entity> query (Query query){ DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); return datastoreService.prepare(query).asList(FetchOptions.Builder.withLimit(PAGING_LIMIT)); } }