Search in sources :

Example 41 with Entity

use of com.google.appengine.api.datastore.Entity in project siena by mandubian.

the class GaeMappingUtils method mapEntitiesKeysOnly.

public static <T> List<T> mapEntitiesKeysOnly(List<Entity> entities, Class<T> clazz) {
    Field id = ClassInfo.getIdField(clazz);
    List<T> list = new ArrayList<T>(entities.size());
    for (Entity entity : entities) {
        T obj;
        try {
            obj = Util.createObjectInstance(clazz);
            list.add(obj);
            setIdFromKey(id, obj, entity.getKey());
        } catch (SienaException e) {
            throw e;
        } catch (Exception e) {
            throw new SienaException(e);
        }
    }
    return list;
}
Also used : Field(java.lang.reflect.Field) Entity(com.google.appengine.api.datastore.Entity) ArrayList(java.util.ArrayList) SienaException(siena.SienaException) SienaException(siena.SienaException) IOException(java.io.IOException) SienaRestrictedApiException(siena.SienaRestrictedApiException)

Example 42 with Entity

use of com.google.appengine.api.datastore.Entity in project siena by mandubian.

the class GaeMappingUtils method createEntityInstance.

public static Entity createEntityInstance(Field idField, ClassInfo info, Object obj) {
    Entity entity = null;
    Id id = idField.getAnnotation(Id.class);
    Class<?> type = idField.getType();
    if (id != null) {
        switch(id.value()) {
            case NONE:
                Object idVal = null;
                idVal = Util.readField(obj, idField);
                if (idVal == null)
                    throw new SienaException("Id Field " + idField.getName() + " value null");
                String keyVal = Util.toString(idField, idVal);
                entity = new Entity(info.tableName, keyVal);
                break;
            case AUTO_INCREMENT:
                // manages String ID as not long!!!
                if (Long.TYPE == type || Long.class.isAssignableFrom(type)) {
                    entity = new Entity(info.tableName);
                } else {
                    Object idStringVal = null;
                    idStringVal = Util.readField(obj, idField);
                    if (idStringVal == null)
                        throw new SienaException("Id Field " + idField.getName() + " value null");
                    String keyStringVal = Util.toString(idField, idStringVal);
                    entity = new Entity(info.tableName, keyStringVal);
                }
                break;
            case UUID:
                entity = new Entity(info.tableName, UUID.randomUUID().toString());
                break;
            default:
                throw new SienaRestrictedApiException("DB", "createEntityInstance", "Id Generator " + id.value() + " not supported");
        }
    } else
        throw new SienaException("Field " + idField.getName() + " is not an @Id field");
    return entity;
}
Also used : Entity(com.google.appengine.api.datastore.Entity) SienaRestrictedApiException(siena.SienaRestrictedApiException) Id(siena.Id) SienaException(siena.SienaException)

Example 43 with Entity

use of com.google.appengine.api.datastore.Entity in project siena by mandubian.

the class GaeMappingUtils method mapEntities.

public static <T> List<T> mapEntities(Iterable<Entity> entities, Class<T> clazz) {
    Field id = ClassInfo.getIdField(clazz);
    List<T> list = new ArrayList<T>();
    for (Entity entity : entities) {
        T obj;
        try {
            obj = Util.createObjectInstance(clazz);
            fillModel(obj, entity);
            list.add(obj);
            setIdFromKey(id, obj, entity.getKey());
        } catch (SienaException e) {
            throw e;
        } catch (Exception e) {
            throw new SienaException(e);
        }
    }
    return list;
}
Also used : Field(java.lang.reflect.Field) Entity(com.google.appengine.api.datastore.Entity) ArrayList(java.util.ArrayList) SienaException(siena.SienaException) SienaException(siena.SienaException) IOException(java.io.IOException) SienaRestrictedApiException(siena.SienaRestrictedApiException)

Example 44 with Entity

use of com.google.appengine.api.datastore.Entity in project siena by mandubian.

the class GaeMappingUtils method createEntityInstanceForUpdateFromParent.

public static Entity createEntityInstanceForUpdateFromParent(ClassInfo info, Object obj, Key parentKey, ClassInfo parentInfo, Field parentField) {
    Key key = makeKeyFromParent(info, obj, parentKey, parentInfo, parentField);
    Entity entity = new Entity(key);
    return entity;
}
Also used : Entity(com.google.appengine.api.datastore.Entity) Key(com.google.appengine.api.datastore.Key)

Example 45 with Entity

use of com.google.appengine.api.datastore.Entity in project siena by mandubian.

the class GaePersistenceManagerAsync method save.

public SienaFuture<Integer> save(final Iterable<?> objects) {
    List<Entity> entities = new ArrayList<Entity>();
    for (Object obj : objects) {
        Class<?> clazz = obj.getClass();
        ClassInfo info = ClassInfo.getClassInfo(clazz);
        Field idField = info.getIdField();
        Entity entity;
        Object idVal = Util.readField(obj, idField);
        // id with null value means insert
        if (idVal == null) {
            entity = GaeMappingUtils.createEntityInstance(idField, info, obj);
        } else // id with not null value means update
        {
            entity = GaeMappingUtils.createEntityInstanceForUpdate(info, obj);
        }
        GaeMappingUtils.fillEntity(obj, entity);
        entities.add(entity);
    }
    Future<List<Key>> future = ds.put(entities);
    Future<Integer> wrapped = new SienaFutureWrapper<List<Key>, Integer>(future) {

        @Override
        protected Integer wrap(List<Key> keys) throws Exception {
            int i = 0;
            for (Object obj : objects) {
                Class<?> clazz = obj.getClass();
                ClassInfo info = ClassInfo.getClassInfo(clazz);
                Field idField = info.getIdField();
                Object idVal = Util.readField(obj, idField);
                if (idVal == null) {
                    GaeMappingUtils.setIdFromKey(idField, obj, keys.get(i++));
                }
            }
            return keys.size();
        }
    };
    return new SienaFutureContainer<Integer>(wrapped);
}
Also used : SienaFutureWrapper(siena.core.async.SienaFutureWrapper) Entity(com.google.appengine.api.datastore.Entity) SienaFutureContainer(siena.core.async.SienaFutureContainer) ArrayList(java.util.ArrayList) Field(java.lang.reflect.Field) QueryResultList(com.google.appengine.api.datastore.QueryResultList) ArrayList(java.util.ArrayList) List(java.util.List) Key(com.google.appengine.api.datastore.Key) ClassInfo(siena.ClassInfo)

Aggregations

Entity (com.google.appengine.api.datastore.Entity)50 Key (com.google.appengine.api.datastore.Key)34 ArrayList (java.util.ArrayList)25 Field (java.lang.reflect.Field)22 ClassInfo (siena.ClassInfo)17 SienaException (siena.SienaException)15 EntityNotFoundException (com.google.appengine.api.datastore.EntityNotFoundException)9 QueryResultList (com.google.appengine.api.datastore.QueryResultList)9 HashMap (java.util.HashMap)9 List (java.util.List)9 SienaFutureContainer (siena.core.async.SienaFutureContainer)9 SienaFutureWrapper (siena.core.async.SienaFutureWrapper)9 Map (java.util.Map)8 SienaRestrictedApiException (siena.SienaRestrictedApiException)6 DatastoreService (com.google.appengine.api.datastore.DatastoreService)5 IOException (java.io.IOException)5 Date (java.util.Date)4 Query (com.google.appengine.api.datastore.Query)3 ShortBlob (com.google.appengine.api.datastore.ShortBlob)3 NotImplementedException (org.apache.commons.lang.NotImplementedException)3