use of com.orientechnologies.orient.object.db.OObjectLazyList in project orientdb by orientechnologies.
the class OObjectProxyMethodHandler method manageCollectionSave.
@SuppressWarnings({ "unchecked", "rawtypes" })
protected Object manageCollectionSave(final Object self, final Field f, Collection<?> value, final boolean customSerialization, final boolean isFieldUpdate) {
final Class genericType = OReflectionHelper.getGenericMultivalueType(f);
if (customSerialization) {
if (value instanceof List<?>) {
final List<Object> list = new ArrayList<Object>();
setDocFieldValue(f.getName(), list, OType.EMBEDDEDLIST);
value = new OObjectCustomSerializerList(OObjectEntitySerializer.getSerializedType(f), doc, new ArrayList<Object>(), (List<Object>) value);
} else {
final Set<Object> set = new HashSet<Object>();
setDocFieldValue(f.getName(), set, OType.EMBEDDEDSET);
value = new OObjectCustomSerializerSet(OObjectEntitySerializer.getSerializedType(f), doc, set, (Set<Object>) value);
}
} else if (genericType != null && genericType.isEnum()) {
if (value instanceof List<?>) {
final List<Object> list = new ArrayList<Object>();
setDocFieldValue(f.getName(), list, OType.EMBEDDEDLIST);
value = new OObjectEnumLazyList(genericType, doc, list, (List<Object>) value);
} else {
final Set<Object> set = new HashSet<Object>();
setDocFieldValue(f.getName(), set, OType.EMBEDDEDSET);
value = new OObjectEnumLazySet(genericType, doc, set, (Set<Object>) value);
}
} else if (!(value instanceof OObjectLazyMultivalueElement)) {
boolean embedded = OObjectEntitySerializer.isEmbeddedField(self.getClass(), f.getName());
if (value instanceof List) {
OType type = embedded ? OType.EMBEDDEDLIST : OType.LINKLIST;
List<OIdentifiable> docList = doc.field(f.getName(), type);
if (docList == null) {
if (embedded)
docList = new OTrackedList<OIdentifiable>(doc);
else
docList = new ORecordLazyList(doc);
setDocFieldValue(f.getName(), docList, type);
} else if (isFieldUpdate) {
docList.clear();
}
value = new OObjectLazyList(self, docList, value, OObjectEntitySerializer.isCascadeDeleteField(self.getClass(), f.getName()));
} else if (value instanceof Set) {
OType type = embedded ? OType.EMBEDDEDSET : OType.LINKSET;
Set<OIdentifiable> docSet = doc.field(f.getName(), type);
if (docSet == null) {
if (embedded)
docSet = new OTrackedSet<OIdentifiable>(doc);
else
docSet = new ORecordLazySet(doc);
setDocFieldValue(f.getName(), docSet, type);
} else if (isFieldUpdate) {
docSet.clear();
}
value = new OObjectLazySet(self, docSet, (Set<?>) value, OObjectEntitySerializer.isCascadeDeleteField(self.getClass(), f.getName()));
}
}
if (!((ODatabaseObject) ODatabaseRecordThreadLocal.INSTANCE.get().getDatabaseOwner()).isLazyLoading())
((OObjectLazyMultivalueElement) value).detach(false);
return value;
}
use of com.orientechnologies.orient.object.db.OObjectLazyList in project orientdb by orientechnologies.
the class OObjectSerializerHelper method convertInObject.
public static Object convertInObject(final Object iPojo, final String iField, final Object iValue, final Class<?> parameterType) {
// New conversion method working with OLazyObjectList
if (!(iValue instanceof OObjectLazyList<?>))
return OType.convert(iValue, parameterType);
List<Object> aSubList = null;
try {
final Field aField = OObjectSerializerHelper.getField(iPojo, iField);
final Class<?> listClass = aField.getType();
final ParameterizedType aType = (ParameterizedType) aField.getGenericType();
final Class<?> objectClass = (Class<?>) aType.getActualTypeArguments()[0];
final OObjectLazyList<?> aList = (OObjectLazyList<?>) iValue;
// Instantiation of the list
if (listClass.isInterface()) {
aSubList = new ArrayList<Object>();
} else {
aSubList = (List<Object>) listClass.newInstance();
}
for (final Object value : aList) {
if (value instanceof ODocument) {
final ODocument aDocument = (ODocument) value;
aSubList.add(OObjectSerializerHelper.convertDocumentInType(aDocument, objectClass));
} else {
aSubList.add(value);
}
}
} catch (Exception e) {
OLogManager.instance().error(null, "Error on convertInObject()", e);
}
return aSubList;
}
Aggregations