use of siena.ClassInfo in project siena by mandubian.
the class GaePersistenceManager method _updateSimpleMultiple.
private <T> void _updateSimpleMultiple(Iterable<T> objs, Key parentKey, ClassInfo parentInfo, Field parentField) {
List<Entity> entities = new ArrayList<Entity>();
ClassInfo info = null;
Field idField = null;
for (T obj : objs) {
if (info == null) {
info = ClassInfo.getClassInfo(obj.getClass());
idField = info.getIdField();
}
Entity entity;
Object idVal = Util.readField(obj, idField);
// id with null value means insert
if (idVal == null) {
if (parentKey == null) {
entity = GaeMappingUtils.createEntityInstance(idField, info, obj);
} else {
entity = GaeMappingUtils.createEntityInstanceFromParent(idField, info, obj, parentKey, parentInfo, parentField);
}
GaeMappingUtils.fillEntity(obj, entity);
} else {
if (parentKey == null) {
entity = GaeMappingUtils.createEntityInstanceForUpdate(info, obj);
} else {
entity = GaeMappingUtils.createEntityInstanceForUpdateFromParent(info, obj, parentKey, parentInfo, parentField);
}
GaeMappingUtils.fillEntity(obj, entity);
}
entities.add(entity);
}
if (!entities.isEmpty()) {
ds.put(entities);
}
}
use of siena.ClassInfo in project siena by mandubian.
the class GaePersistenceManagerAsync method save.
public SienaFuture<Integer> save(final Object... 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);
}
use of siena.ClassInfo in project siena by mandubian.
the class GaePersistenceManagerAsync method insert.
public SienaFuture<Integer> insert(final Object... objects) {
List<Entity> entities = new ArrayList<Entity>(objects.length);
for (int i = 0; i < objects.length; i++) {
Class<?> clazz = objects[i].getClass();
ClassInfo info = ClassInfo.getClassInfo(clazz);
Field idField = info.getIdField();
Entity entity = GaeMappingUtils.createEntityInstance(idField, info, objects[i]);
GaeMappingUtils.fillEntity(objects[i], 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> generatedKeys) throws Exception {
int i = 0;
for (Object obj : objects) {
Class<?> clazz = obj.getClass();
ClassInfo info = ClassInfo.getClassInfo(clazz);
Field idField = info.getIdField();
GaeMappingUtils.setIdFromKey(idField, obj, generatedKeys.get(i++));
}
return generatedKeys.size();
}
};
return new SienaFutureContainer<Integer>(wrapped);
}
Aggregations