unify upgrade logic of different serialization format

Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/0e5cf5b0
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/0e5cf5b0
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/0e5cf5b0

Branch: refs/heads/ODE-912
Commit: 0e5cf5b03cca53a6e67213d3e23ddea6303b6d14
Parents: 9e13387
Author: fangzhen <[email protected]>
Authored: Fri Aug 8 23:00:28 2014 +0800
Committer: fangzhen <[email protected]>
Committed: Fri Aug 8 23:01:21 2014 +0800

----------------------------------------------------------------------
 .../ode/bpel/compiler_2_0/GoodCompileTest.java  |  7 ---
 .../org/apache/ode/bpel/obj/ExtensibleImpl.java |  3 --
 .../bpel/obj/migrate/AbstractObjectVisitor.java | 39 +++++++++++++---
 .../bpel/obj/migrate/DeepEqualityHelper.java    | 27 +----------
 .../apache/ode/bpel/obj/migrate/MigUtils.java   | 33 +++++++++++++
 .../ode/bpel/obj/migrate/ObjectTraverser.java   |  4 ++
 .../ode/bpel/obj/migrate/OmUpgradeVisitor.java  | 49 ++++++++++++++++++++
 .../apache/ode/bpel/obj/serde/DeSerializer.java | 10 +++-
 .../bpel/obj/serde/JavaSerOmDeserializer.java   |  2 +
 .../ode/bpel/obj/serde/JsonOmDeserializer.java  |  4 +-
 10 files changed, 134 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
index 9a1d973..45e4be5 100644
--- 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
+++ 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
@@ -19,19 +19,12 @@
 
 package org.apache.ode.bpel.compiler_2_0;
 
-import static org.junit.Assert.assertEquals;
-
 import java.io.File;
-import java.io.FileInputStream;
 import java.net.URI;
 import java.net.URL;
 
 import org.apache.ode.bpel.compiler.api.CompileListener;
 import org.apache.ode.bpel.obj.OProcess;
-import org.apache.ode.bpel.obj.migrate.DeepEqualityHelper;
-import org.apache.ode.bpel.obj.migrate.DomElementComparator;
-import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
-import org.apache.ode.bpel.obj.serde.DeSerializer;
 import org.junit.Assert;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
index 2979340..a6f6f68 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
@@ -98,9 +98,6 @@ public class ExtensibleImpl  implements Extensible<Object>, 
Serializable{
                        Object value = ois.readObject();
                        fieldContainer.put(key, value);
                }
-               
-               //migrate to newest version
-               upgrade2Newest();
        }
        
        @Override

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
index 968aeeb..b5c2f13 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
@@ -1,10 +1,12 @@
 package org.apache.ode.bpel.obj.migrate;
 
+import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 
 import org.apache.ode.bpel.obj.migrate.ObjectTraverser.HandleTable;
 
@@ -78,17 +80,42 @@ public abstract class AbstractObjectVisitor implements 
ObjectVisitor{
                this.traverse = traverseObject;         
        }
        
-       @Override
        public void addCustomVisitor(Class cls, ObjectVisitor visitor){
                visitors.put(cls, visitor);
        }
+       public Object visitMap(Object obj) {
+               Map m = (Map)obj;
+               Set<Entry> entries = m.entrySet();
+               for (Entry e : entries){
+                       traverse.traverseObject(e.getKey());
+                       traverse.traverseObject(e.getValue());
+               }
+               return null;
+       }
+
+       public Object visitCollection(Object obj) {
+               Collection c = (Collection)obj;
+               for (Object item : c){
+                       traverse.traverseObject(item);
+               }
+               return null;
+       }
 
-       public abstract Object visitMap(Object obj);
-       public abstract Object visitCollection(Object obj);
-       public abstract Object visitArray(Object obj);
-       public abstract Object visitPojo(Object obj);
-       public abstract Object visitSet(Object obj);
+       public Object visitArray(Object obj) {
+               int len = Array.getLength(obj);
+               int i;
+               for (i = 0; i < len; i++){
+                       traverse.traverseObject(Array.get(obj, i));
+               }
+               return null;
+       }
        
+       public Object visitSet(Object obj) {
+               //nothing to do
+               return null;
+       }
+
+       public abstract Object visitPojo(Object obj);   
        /**
      * Lightweight identity hash table which maps objects to replacement
      * objects.

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
index 5982665..1872894 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DeepEqualityHelper.java
@@ -287,8 +287,8 @@ public class DeepEqualityHelper{
                return null;
        }
        public Boolean equalityByReflection(Object obj, Object other) {
-               List<Field> fields = getAllFields(obj.getClass());
-               List<Field> fields2 = getAllFields(other.getClass());
+               List<Field> fields = MigUtils.getAllFields(obj.getClass());
+               List<Field> fields2 = MigUtils.getAllFields(other.getClass());
                if (!fields.equals(fields2)){
                        if (!logFalseThrough){
                                __log.debug("Unequal: getFields() of two Object 
do not match " + st);
@@ -329,29 +329,6 @@ public class DeepEqualityHelper{
                }
                return true;
        }
-       private List<Field> getAllFields(Class cls) {
-               List<Field> fields = getFieldsRec(cls.getSuperclass(), new 
ArrayList<Field>());
-               fields.addAll(Arrays.asList(cls.getDeclaredFields()));
-               return fields;
-       }
-       /**
-        * get fields that are accessible to its sub-classes.
-        * @param cls
-        * @param fields
-        * @return
-        */
-       private List<Field> getFieldsRec(Class cls, ArrayList<Field> fields) {
-               if (cls != null){
-                       Field[] fs = cls.getDeclaredFields();
-                       for (Field f : fs){
-                               if ((f.getModifiers() & Modifier.PRIVATE) == 0){
-                                       fields.add(f);
-                               }
-                       }
-                       getFieldsRec(cls.getSuperclass(), fields);
-               }
-               return fields;
-       }
 
        /**
         * determine if obj is collections that order doesn't matter.

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/MigUtils.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/MigUtils.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/MigUtils.java
new file mode 100644
index 0000000..a44696b
--- /dev/null
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/MigUtils.java
@@ -0,0 +1,33 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class MigUtils {
+       public static List<Field> getAllFields(Class cls) {
+               List<Field> fields = getFieldsRec(cls.getSuperclass(), new 
ArrayList<Field>());
+               fields.addAll(Arrays.asList(cls.getDeclaredFields()));
+               return fields;
+       }
+       /**
+        * get fields that are accessible to its sub-classes.
+        * @param cls
+        * @param fields
+        * @return
+        */
+       private static List<Field> getFieldsRec(Class cls, ArrayList<Field> 
fields) {
+               if (cls != null){
+                       Field[] fs = cls.getDeclaredFields();
+                       for (Field f : fs){
+                               if ((f.getModifiers() & Modifier.PRIVATE) == 0){
+                                       fields.add(f);
+                               }
+                       }
+                       getFieldsRec(cls.getSuperclass(), fields);
+               }
+               return fields;
+       }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
index 6e48c59..30865dd 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
@@ -1,6 +1,10 @@
 package org.apache.ode.bpel.obj.migrate;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
new file mode 100644
index 0000000..75db83c
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
@@ -0,0 +1,49 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.ode.bpel.obj.Extensible;
+
+public class OmUpgradeVisitor extends AbstractObjectVisitor{
+
+       @Override
+       protected boolean isCollection(Object old) {
+               return old instanceof Collection;
+       }
+       @Override
+       protected boolean isSet(Object obj){
+               return false;
+       }
+
+       @Override
+       public Object visitPojo(Object obj) {
+               if (! (obj instanceof Extensible)){
+                       return null;
+               }
+               visitExtensible(obj);
+               return null;
+       }
+
+       private void visitExtensible(Object obj) {
+               ((Extensible)obj).upgrade2Newest();
+               List<Field> fields = MigUtils.getAllFields(obj.getClass());
+               for (Field f : fields){
+                       f.setAccessible(true);
+                       try {
+                               Object value = f.get(obj);
+                               if (value != null){
+                                       traverse.traverseObject(value);
+                               }
+                       } catch (Exception e){
+                               throw new RuntimeException(e);
+                       }
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
index db623fb..59b7a86 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
@@ -11,6 +11,8 @@ import javax.xml.namespace.QName;
 
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.OProcessWrapper;
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
+import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
 import org.apache.ode.bpel.obj.serde.OmSerdeFactory.SerializeFormat;
 
 public class DeSerializer {
@@ -71,7 +73,13 @@ public class DeSerializer {
                OmSerdeFactory factory = new OmSerdeFactory();
                factory.setFormat(wrapper.getFormat());
        OmDeserializer de = factory.createOmDeserializer(is);
-       return de.deserialize();
+       OProcess process = de.deserialize();
+               //upgrade
+               OmUpgradeVisitor upgrader = new OmUpgradeVisitor();
+               ObjectTraverser traverser = new ObjectTraverser();
+               traverser.accept(upgrader);
+               traverser.traverseObject(process);
+               return process;
        }
        
        public OProcessWrapper getWrapper() {

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JavaSerOmDeserializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JavaSerOmDeserializer.java
 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JavaSerOmDeserializer.java
index ce6a6e1..5f774c2 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JavaSerOmDeserializer.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JavaSerOmDeserializer.java
@@ -4,6 +4,8 @@ import java.io.InputStream;
 import java.io.ObjectInputStream;
 
 import org.apache.ode.bpel.obj.OProcess;
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
+import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
 
 public class JavaSerOmDeserializer implements OmDeserializer {
        private InputStream is;

http://git-wip-us.apache.org/repos/asf/ode/blob/0e5cf5b0/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
index 0c1b09a..9081d1d 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
@@ -8,14 +8,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
-import javax.wsdl.Message;
 import javax.wsdl.OperationType;
-import javax.wsdl.Part;
 import javax.xml.namespace.QName;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.obj.OProcess;
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
+import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
 import org.apache.ode.bpel.obj.serde.jacksonhack.TypeBeanSerializerFactory;
 import org.apache.ode.utils.NSContext;
 import org.w3c.dom.Element;

Reply via email to