/* * * Copyright 2012 Luca Molino (molino.luca--AT--gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.orientechnologies.orient.core.serialization.serializer.object; import com.orientechnologies.orient.core.annotation.ODocumentInstance; import com.orientechnologies.orient.core.db.OUserObject2RecordHandler; import com.orientechnologies.orient.core.db.object.ODatabaseObject; import com.orientechnologies.orient.core.entity.OEntityManager; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.record.impl.ODocument; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.HashSet; import java.util.Set; /** * @author luca.molino * */ public class OObjectSerializerHelperDocument implements OObjectSerializerHelperInterface { private final Set<String> classes = new HashSet<String>(); private HashMap<Class<?>, Field> boundDocumentFields = new HashMap<Class<?>, Field>(); public ODocument toStream(Object iPojo, ODocument iRecord, OEntityManager iEntityManager, OClass schemaClass, OUserObject2RecordHandler iObj2RecHandler, ODatabaseObject db, boolean iSaveOnlyDirty) { return null; } public String getDocumentBoundField(Class<?> iClass) { getClassFields(iClass); final Field f = boundDocumentFields.get(iClass); return f != null ? f.getName() : null; } public Object getFieldValue(Object iPojo, String iProperty) { return null; } public void invokeCallback(Object iPojo, ODocument iDocument, Class<?> iAnnotation) { } private void getClassFields(final Class<?> iClass) { if (iClass.getName().startsWith("java.lang")) return; synchronized (classes) { if (classes.contains(iClass.getName())) return; analyzeClass(iClass); } } protected void analyzeClass(final Class<?> iClass) { classes.add(iClass.getName()); int fieldModifier; for (Class<?> currentClass = iClass; currentClass != Object.class; ) { for (Field f : currentClass.getDeclaredFields()) { fieldModifier = f.getModifiers(); if (Modifier.isStatic(fieldModifier) || Modifier.isNative(fieldModifier) || Modifier.isTransient(fieldModifier)) continue; if (f.getName().equals("this$0")) continue; // CHECK FOR AUTO-BINDING if (f.getAnnotation(ODocumentInstance.class) != null) // BOUND DOCUMENT ON IT boundDocumentFields.put(iClass, f); } currentClass = currentClass.getSuperclass(); if (currentClass.equals(ODocument.class)) // POJO EXTENDS ODOCUMENT: SPECIAL CASE: AVOID TO CONSIDER // ODOCUMENT FIELDS break; } } }