Search in sources :

Example 11 with Entity

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

the class GaeMappingUtils method createEntityInstanceForUpdate.

public static Entity createEntityInstanceForUpdate(ClassInfo info, Object obj) {
    Key key = makeKey(info, obj);
    Entity entity = new Entity(key);
    return entity;
}
Also used : Entity(com.google.appengine.api.datastore.Entity) Key(com.google.appengine.api.datastore.Key)

Example 12 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(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);
            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 13 with Entity

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

the class GaePersistenceManager method _insertMultipleMapFromParent.

private int _insertMultipleMapFromParent(final Map<Key, Map<Field, List<Object>>> keyMap, final List<ClassInfo> parentInfos) {
    List<Entity> entities = new ArrayList<Entity>();
    int i = 0;
    for (Key key : keyMap.keySet()) {
        Map<Field, List<Object>> objectMap = keyMap.get(key);
        for (Field field : objectMap.keySet()) {
            for (Object obj : objectMap.get(field)) {
                Class<?> clazz = obj.getClass();
                ClassInfo info = ClassInfo.getClassInfo(clazz);
                Field idField = info.getIdField();
                Entity entity = GaeMappingUtils.createEntityInstanceFromParent(idField, info, obj, key, parentInfos.get(i), field);
                GaeMappingUtils.fillEntity(obj, entity);
                entities.add(entity);
            }
        }
        i++;
    }
    List<Key> generatedKeys = ds.put(entities);
    i = 0;
    Map<Key, Map<Field, List<Object>>> recKeyMap = new HashMap<Key, Map<Field, List<Object>>>();
    List<ClassInfo> recInfos = new ArrayList<ClassInfo>();
    for (Key key : keyMap.keySet()) {
        Map<Field, List<Object>> objectMap = keyMap.get(key);
        for (Field field : objectMap.keySet()) {
            for (Object obj : objectMap.get(field)) {
                Class<?> clazz = obj.getClass();
                ClassInfo info = ClassInfo.getClassInfo(clazz);
                Field idField = info.getIdField();
                GaeMappingUtils.setIdFromKey(idField, obj, generatedKeys.get(i));
                if (info.hasAggregatedFields) {
                    recInfos.add(info);
                    Map<Field, List<Object>> recObjectMap = new HashMap<Field, List<Object>>();
                    recKeyMap.put(generatedKeys.get(i), recObjectMap);
                    _populateAggregateFieldMap(recObjectMap, info, obj);
                }
                i++;
            }
        }
    }
    if (!recKeyMap.isEmpty()) {
        _insertMultipleMapFromParent(recKeyMap, recInfos);
    }
    return generatedKeys.size();
}
Also used : Entity(com.google.appengine.api.datastore.Entity) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Field(java.lang.reflect.Field) QueryResultList(com.google.appengine.api.datastore.QueryResultList) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) Key(com.google.appengine.api.datastore.Key) ClassInfo(siena.ClassInfo)

Example 14 with Entity

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

the class GaePersistenceManagerAsync method mapJoins.

protected <T> List<T> mapJoins(QueryAsync<T> query, List<T> models) {
    try {
        // join queries
        Map<Field, ArrayList<Key>> fieldMap = GaeQueryUtils.buildJoinFieldKeysMap(query);
        // creates the list of joined entity keys to extract 
        for (final T model : models) {
            for (Field field : fieldMap.keySet()) {
                Object objVal = Util.readField(model, field);
                // our object is not linked to another object...so it doesn't have any key
                if (objVal == null) {
                    continue;
                }
                Key key = GaeMappingUtils.getKey(objVal);
                List<Key> keys = fieldMap.get(field);
                if (!keys.contains(key))
                    keys.add(key);
            }
        }
        Map<Field, Map<Key, Entity>> entityMap = new HashMap<Field, Map<Key, Entity>>();
        try {
            // retrieves all joined entities per field
            for (Field field : fieldMap.keySet()) {
                Future<Map<Key, Entity>> entities = ds.get(fieldMap.get(field));
                // gets the future here because we need it so we wait for it
                entityMap.put(field, entities.get());
            }
        } catch (Exception ex) {
            throw new SienaException(ex);
        }
        // associates linked models to their models
        // linkedModels is just a map to contain entities already mapped
        Map<Key, Object> linkedModels = new HashMap<Key, Object>();
        Object linkedObj;
        Entity entity;
        for (final T model : models) {
            for (Field field : fieldMap.keySet()) {
                Object objVal = Util.readField(model, field);
                // our object is not linked to another object...so it doesn't have any key
                if (objVal == null) {
                    continue;
                }
                Key key = GaeMappingUtils.getKey(objVal);
                linkedObj = linkedModels.get(key);
                if (linkedObj == null) {
                    entity = entityMap.get(field).get(key);
                    linkedObj = objVal;
                    GaeMappingUtils.fillModel(linkedObj, entity);
                    linkedModels.put(key, linkedObj);
                }
                field.set(model, linkedObj);
            }
        }
        return models;
    } catch (IllegalAccessException ex) {
        throw new SienaException(ex);
    }
}
Also used : Entity(com.google.appengine.api.datastore.Entity) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) SienaException(siena.SienaException) NotImplementedException(org.apache.commons.lang.NotImplementedException) Field(java.lang.reflect.Field) SienaException(siena.SienaException) HashMap(java.util.HashMap) Map(java.util.Map) Key(com.google.appengine.api.datastore.Key)

Example 15 with Entity

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

the class GaePersistenceManager method mapJoins.

protected <T> T mapJoins(T model) {
    try {
        // join queries
        Map<Field, ArrayList<Key>> fieldMap = GaeQueryUtils.buildJoinFieldKeysMap(model);
        // creates the list of joined entity keys to extract 
        for (Field field : fieldMap.keySet()) {
            Key key = GaeMappingUtils.getKey(field.get(model));
            List<Key> keys = fieldMap.get(field);
            if (!keys.contains(key))
                keys.add(key);
        }
        Map<Field, Map<Key, Entity>> entityMap = new HashMap<Field, Map<Key, Entity>>();
        try {
            // retrieves all joined entities per field
            for (Field field : fieldMap.keySet()) {
                Map<Key, Entity> entities = ds.get(fieldMap.get(field));
                entityMap.put(field, entities);
            }
        } catch (Exception ex) {
            throw new SienaException(ex);
        }
        // associates linked models to their models
        // linkedModels is just a map to contain entities already mapped
        Map<Key, Object> linkedModels = new HashMap<Key, Object>();
        Object linkedObj;
        Entity entity;
        for (Field field : fieldMap.keySet()) {
            Object objVal = field.get(model);
            Key key = GaeMappingUtils.getKey(objVal);
            linkedObj = linkedModels.get(key);
            if (linkedObj == null) {
                entity = entityMap.get(field).get(key);
                linkedObj = objVal;
                GaeMappingUtils.fillModel(linkedObj, entity);
                linkedModels.put(key, linkedObj);
            }
            field.set(model, linkedObj);
        }
        return model;
    } catch (IllegalAccessException ex) {
        throw new SienaException(ex);
    }
}
Also used : Entity(com.google.appengine.api.datastore.Entity) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) SienaException(siena.SienaException) EntityNotFoundException(com.google.appengine.api.datastore.EntityNotFoundException) Field(java.lang.reflect.Field) SienaException(siena.SienaException) HashMap(java.util.HashMap) Map(java.util.Map) Key(com.google.appengine.api.datastore.Key)

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