Improve hibernate
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 15 Oct 2009 12:08:34 +0000 (12:08 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 15 Oct 2009 12:08:34 +0000 (12:08 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3037 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.hibernate/src/main/java/org/argeo/server/hibernate/LightDaoInterceptor.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/FilterSerializer.java [new file with mode: 0644]

index d664b658814ca0849c2776d578f7329dfd60b8a2..4d6f7d951f49416c854ff1f8c7603e1f2bcb68a8 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.server.hibernate;
 
+import java.beans.PropertyDescriptor;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -83,6 +84,48 @@ public class LightDaoInterceptor extends EmptyInterceptor {
                return super.onSave(entity, id, state, propertyNames, types);
        }
 
+       @Override
+       public boolean onLoad(Object entity, Serializable id, Object[] state,
+                       String[] propertyNames, Type[] types) {
+               Class<?> clss = entity.getClass();
+               Object source = null;
+               if (lightDaoSupport.getSupportedClasses().contains(clss)) {
+                       if (businessIdFields.containsKey(clss)) {
+                               String field = businessIdFields.get(clss);
+                               Object value = bidMappings.get(clss).get(id);
+                               source = lightDaoSupport.getByField(clss, field, value);
+                               if (log.isTraceEnabled())
+                                       log.debug("Loading entity " + clss + " (" + field + "="
+                                                       + value + ")");
+                       } else {
+                               source = lightDaoSupport.getByKey(clss, id);
+                               if (log.isTraceEnabled())
+                                       log.debug("Loading entity " + clss + " (id=" + id + ")");
+                       }
+               }
+
+               if (source != null) {
+                       BeanWrapper bwTarget = new BeanWrapperImpl(entity);
+                       BeanWrapper bwSource = new BeanWrapperImpl(source);
+                       for (PropertyDescriptor pd : bwTarget.getPropertyDescriptors()) {
+                               String propName = pd.getName();
+                               if (bwSource.isReadableProperty(propName)
+                                               && bwTarget.isWritableProperty(propName)) {
+                                       bwTarget.setPropertyValue(propName, bwSource
+                                                       .getPropertyValue(propName));
+                                       if (log.isTraceEnabled())
+                                               log.debug("Loaded property " + propName + " for class "
+                                                               + clss + " (id=" + id + ")");
+                               }
+                       }
+
+                       return true;
+               } else {
+                       // res = super.getEntity(entityName, id);
+                       return super.onLoad(entity, id, state, propertyNames, types);
+               }
+       }
+
        protected Boolean supports(Object object) {
                if (classes.contains(object.getClass()))
                        return lightDaoSupport.getSupportedClasses().contains(
diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/FilterSerializer.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/FilterSerializer.java
new file mode 100644 (file)
index 0000000..909158b
--- /dev/null
@@ -0,0 +1,20 @@
+package org.argeo.server.json;
+
+import java.io.IOException;
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.JsonProcessingException;
+import org.codehaus.jackson.map.JsonSerializer;
+import org.codehaus.jackson.map.SerializerProvider;
+
+public class FilterSerializer extends JsonSerializer {
+
+       @Override
+       public void serialize(Object value, JsonGenerator jgen,
+                       SerializerProvider provider) throws IOException,
+                       JsonProcessingException {
+               // TODO Auto-generated method stub
+
+       }
+
+}