Package com.game.cloudymon.dal

Source Code of com.game.cloudymon.dal.EntityDAO

package com.game.cloudymon.dal;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;

import com.game.cloudymon.entity.AbstractEntity;
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.FetchOptions;
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.memcache.MemcacheService;
import com.google.appengine.api.memcache.MemcacheServiceFactory;

public class EntityDAO
{
  public static Logger logger = Logger.getLogger("EntityDAO");
  public static FetchOptions fetchOptions = FetchOptions.Builder.withLimit(1000);
 
  public static void addEntities(List<Entity> entities)
  {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.put(entities);
  }
 
  public static void addEntity(Entity entity)
  {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.put(entity);
  }
 
  public static void deleteEntity(Key key)
  {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.delete(key);
  }
 
  public static void deleteEntities(List<Key> keys)
  {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.delete(keys);
  }
 
  public static Entity getEntity(Query query)
  {
    DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
    PreparedQuery pq = ds.prepare(query);
   
    if (pq.countEntities(fetchOptions) == 1)
    {
      return pq.asSingleEntity();
    }
    else
    {
      return pq.asList(fetchOptions).get(0);
    }
  }
 
 
  public static List<Entity> getEntities(Query query)
  {
    DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
    PreparedQuery pq = ds.prepare(query);
   
    return pq.asList(FetchOptions.Builder.withDefaults());
  }
 
  public static int deleteAllEntityKind(String simpleClassName)
  {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query(simpleClassName);
    query.setKeysOnly();
    PreparedQuery pq = datastore.prepare(query);
    List<Key> keys = new ArrayList<Key>();
   
    int deletedCount = 0;
    while (true)
    {
      Iterator<Entity> items = pq.asIterator(FetchOptions.Builder.withLimit(1000));
      if (!items.hasNext())
        break;
      keys.clear();
      while (items.hasNext())
      {     
        keys.add(items.next().getKey());
      }
      datastore.delete(keys);
      deletedCount = deletedCount + keys.size();
    }
   
    return deletedCount;
  }
 
  @SuppressWarnings("rawtypes")
  public static Object getObjByQuery(Class cls, Query query, String msNamespace, String msName)
  {
    Object obj = null;
   
    if (msNamespace == null)
      msNamespace = "EntityDAO";
    if (msName == null)
      msName = cls.getSimpleName() + query.toString();
   
    MemcacheService ms = MemcacheServiceFactory.getMemcacheService(msNamespace);

    if (ms.get(msName) != null)
    {
      obj = ms.get(msName);
    }
    else
    {
      try
      {
        Class<?> classDef = Class.forName(cls.getName());
        obj = classDef.newInstance();

        Method method = classDef.getMethod("fromEntity", com.google.appengine.api.datastore.Entity.class);
        Entity entity = EntityDAO.getEntity(query);
        method.invoke(obj, entity);

        ms.put(msName, obj);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    return obj;
  }
 
  @SuppressWarnings("rawtypes")
  public static Object getObjByName(Class cls, String name, String msNamespace, String msName)
  {
    Object obj = null;
   
    if (msNamespace == null)
      msNamespace = "EntityDAO";
    if (msName == null)
      msName = cls.getSimpleName() + name;
   
    MemcacheService ms = MemcacheServiceFactory.getMemcacheService(msNamespace);

    if (ms.get(msName) != null)
    {
      obj = ms.get(msName);
    }
    else
    {
      try
      {
        Query query = new Query(cls.getSimpleName());
        query.addFilter("name", FilterOperator.EQUAL, name);

        Class<?> classDef = Class.forName(cls.getName());
        obj = classDef.newInstance();

        Method method = classDef.getMethod("fromEntity", com.google.appengine.api.datastore.Entity.class);
        Entity entity = EntityDAO.getEntity(query);
        method.invoke(obj, entity);

        ms.put(msName, obj);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    return obj;
  }
 
  @SuppressWarnings({ "rawtypes", "unchecked" })
  public static List getAllObj(Class cls, String msNamespace, String msName)
  {
    List objs = null;
   
    if (msNamespace == null)
      msNamespace = "EntityDAO";
    if (msName == null)
      msName = "All" + cls.getSimpleName();
   
    MemcacheService ms = MemcacheServiceFactory.getMemcacheService(msNamespace);

    if (ms.get(msName) != null)
    {
      objs = (List)ms.get(msName);
    }
    else
    {
      try
      {
        Query query = new Query(cls.getSimpleName());

        Class<?> classDef = Class.forName(cls.getName());

        Method method = classDef.getMethod("fromEntity", com.google.appengine.api.datastore.Entity.class);
        List<Entity> entities = EntityDAO.getEntities(query);
        objs = new ArrayList();

        for (Entity entity : entities)
        {
          Object obj = classDef.newInstance();
          method.invoke(obj, entity);
          objs.add(cls.cast(obj));
        }

        ms.put(msName, objs);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    return objs;
  }
 
  @SuppressWarnings({ "rawtypes", "unchecked" })
  public static List getObjsByQuery(Class cls, Query query, String msNamespace, String msName)
  {
    List objs = null;
   
    if (msNamespace == null)
      msNamespace = "EntityDAO";
    if (msName == null)
      msName = "List" + cls.getSimpleName() + query.toString();
   
    MemcacheService ms = MemcacheServiceFactory.getMemcacheService(msNamespace);

    if (ms.get(msName) != null)
    {
      objs = (List)ms.get(msName);
    }
    else
    {
      try
      {
        Class<?> classDef = Class.forName(cls.getName());

        Method method = classDef.getMethod("fromEntity", com.google.appengine.api.datastore.Entity.class);
        List<Entity> entities = EntityDAO.getEntities(query);
        objs = new ArrayList();

        for (Entity entity : entities)
        {
          Object obj = classDef.newInstance();
          method.invoke(obj, entity);
          objs.add(cls.cast(obj));
        }

        ms.put(msName, objs);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    return objs;
  }
 
  public static void addAbstractEntity(AbstractEntity abstractEntity)
  {
    Entity entity = abstractEntity.toEntity();
    addEntity(entity);
  }
 
  @SuppressWarnings("rawtypes")
  public static void addAbstractEntities(List abstractEntities)
  {
    List<Entity> entities = new ArrayList<Entity>();
    int len = abstractEntities.size();
    for (int i = 0; i < len; i++)
    {
      AbstractEntity abstractEntity = (AbstractEntity)abstractEntities.get(i);
      entities.add(abstractEntity.toEntity());
    }
    addEntities(entities);
  }
 

}
TOP

Related Classes of com.game.cloudymon.dal.EntityDAO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.