added some docs on migration code. a little beautify
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/a04b2e90 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/a04b2e90 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/a04b2e90 Branch: refs/heads/master Commit: a04b2e90462b67994ed15753c16ecfa672b6d0fb Parents: a499545 Author: fangzhen <[email protected]> Authored: Wed Jul 30 13:02:30 2014 +0800 Committer: fangzhen <[email protected]> Committed: Wed Jul 30 13:02:30 2014 +0800 ---------------------------------------------------------------------- .../ode/bpel/compiler_2_0/GoodCompileTest.java | 4 +- .../ode/bpel/compiler_2_0/MigrationTest.java | 9 +- .../org/apache/ode/bpel/obj/ExtensibleImpl.java | 6 - .../bpel/obj/migrate/AbstractObjectVisitor.java | 20 ++- .../ode/bpel/obj/migrate/EqualityVisitor.java | 19 +- .../ode/bpel/obj/migrate/OModelVisitor.java | 8 - .../ode/bpel/obj/migrate/ObjectTraverser.java | 175 +++++++++++++++++++ .../ode/bpel/obj/migrate/ObjectVisitor.java | 20 ++- .../apache/ode/bpel/obj/migrate/OmOld2new.java | 22 ++- .../ode/bpel/obj/migrate/TraverseObject.java | 166 ------------------ .../ode/bpel/obj/migrate/DeepEqualityTest.java | 8 +- bpel-nobj/src/test/resources/log4j.properties | 2 +- 12 files changed, 251 insertions(+), 208 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 10195f3..9f44e55 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 @@ -30,7 +30,7 @@ import org.apache.ode.bpel.compiler.api.CompileListener; import org.apache.ode.bpel.obj.OProcess; import org.apache.ode.bpel.obj.migrate.EqualityVisitor; import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp; -import org.apache.ode.bpel.obj.migrate.TraverseObject; +import org.apache.ode.bpel.obj.migrate.ObjectTraverser; import org.apache.ode.bpel.obj.serde.OmDeserializer; import org.apache.ode.bpel.obj.serde.OmSerdeFactory; import org.junit.Assert; @@ -56,7 +56,7 @@ public class GoodCompileTest extends AbstractCompileTestCase implements .createOmDeserializer(new FileInputStream(cbpPath)); OProcess desered = deserializer.deserialize(); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(desered); visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); traverse.accept(visitor); http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java index 2971d6b..e8cbc95 100644 --- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java @@ -14,12 +14,15 @@ import org.apache.ode.bpel.obj.OProcess; import org.apache.ode.bpel.obj.migrate.EqualityVisitor; import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp; import org.apache.ode.bpel.obj.migrate.OmOld2new; -import org.apache.ode.bpel.obj.migrate.TraverseObject; +import org.apache.ode.bpel.obj.migrate.ObjectTraverser; import org.junit.Assert; public class MigrationTest extends GoodCompileTest{ private static final Log __log = LogFactory.getLog(MigrationTest.class); + /** + * compare compiled OProcess with migrated ones. + */ public void runTest(String bpel) throws Exception { try { Class testClass = getClass(); @@ -35,12 +38,12 @@ public class MigrationTest extends GoodCompileTest{ __log.debug("compiled new OProcess " + nu.getFieldContainer()); org.apache.ode.bpel.o.OProcess old = new Serializer(new FileInputStream(oldCbpFile)).readOProcess(); OmOld2new mig = new OmOld2new(); - TraverseObject mtraverse = new TraverseObject(); + ObjectTraverser mtraverse = new ObjectTraverser(); mtraverse.accept(mig); OProcess migrated = (OProcess) mtraverse.traverseObject(old); __log.debug("migrated new OProcess " + migrated.getFieldContainer()); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(nu); visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); traverse.accept(visitor); http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 98ae216..489d6d2 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 @@ -7,8 +7,6 @@ import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; -import org.apache.ode.bpel.obj.migrate.OModelVisitor; - import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; @@ -51,10 +49,6 @@ public class ExtensibleImpl implements Extensible<Object>, Serializable{ return fieldContainer.remove(fieldName); } - public void accept(OModelVisitor visitor){ - visitor.visitExtensibleImpl(this); - } - @JsonIgnore public int getClassVersion() { Object o = fieldContainer.get(CLASS_VERSION); http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 5a8ce53..968aeeb 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 @@ -6,12 +6,11 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.apache.ode.bpel.obj.migrate.TraverseObject.HandleTable; - +import org.apache.ode.bpel.obj.migrate.ObjectTraverser.HandleTable; public abstract class AbstractObjectVisitor implements ObjectVisitor{ protected ReplaceTable rtab = new ReplaceTable(1000, 0.8f); - protected TraverseObject traverse; + protected ObjectTraverser traverse; protected Map<Class, ObjectVisitor> visitors = new HashMap<Class, ObjectVisitor>(); @Override @@ -23,7 +22,7 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{ } @Override - public TraverseObject getTraverse(){ + public ObjectTraverser getTraverse(){ return traverse; } @Override @@ -48,6 +47,12 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{ rtab.assign(obj, n); return n; } + + /** + * determine if obj is collections that order doesn't matter. + * @param obj + * @return + */ protected boolean isSet(Object obj) { return obj instanceof Set; } @@ -56,6 +61,11 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{ return old.getClass().isArray(); } + /** + * determine if obj is collections that order does matter. + * @param obj + * @return + */ protected boolean isCollection(Object old) { return (old instanceof Collection) && !isSet(old); } @@ -64,7 +74,7 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{ return old instanceof Map; } @Override - public void setTraverse(TraverseObject traverseObject) { + public void setTraverse(ObjectTraverser traverseObject) { this.traverse = traverseObject; } http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java index bfcbd15..9e419ba 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java @@ -14,16 +14,25 @@ import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +/** + * compare two object for equality. default strategy: + * for collections and maps, compare their contents + * for POJO, + * if any custom equality comparator can handle it, then use it; + * if it has an equals() method defined, use it. + * or compare their non-transient accessible fields by reflection. + * @author fangzhen + * + */ public class EqualityVisitor extends AbstractObjectVisitor{ - private static final Log __log = LogFactory.getLog(TraverseObject.class); + private static final Log __log = LogFactory.getLog(ObjectTraverser.class); private List<EqualityComparator> comparators = new LinkedList<EqualityComparator>(); + /**stack that holds current visit path */ private Stack<String> st = new Stack<String>(); - + /**object that compared to */ protected Object other; public boolean logFalseThrough = false; - public EqualityVisitor(){ - - } + public EqualityVisitor(Object other){ this.other = other; st.push(":" + other.getClass().getSimpleName()); http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java deleted file mode 100644 index a780837..0000000 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.apache.ode.bpel.obj.migrate; - -import org.apache.ode.bpel.obj.ExtensibleImpl; - -public interface OModelVisitor { - - void visitExtensibleImpl(ExtensibleImpl extensibleImpl); -} http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 new file mode 100644 index 0000000..6e48c59 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java @@ -0,0 +1,175 @@ +package org.apache.ode.bpel.obj.migrate; + +import java.util.Arrays; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Traverse an Object with help of an {@link ObjectVisitor}, taking into consideration of cyclic references. + * + */ +public class ObjectTraverser{ + private static final Log __log = LogFactory.getLog(ObjectTraverser.class); + + private HandleTable htab = new HandleTable(1000, 0.8f); + private ObjectVisitor visitor; + + public HandleTable getHtab() { + return htab; + } + + public void accept(ObjectVisitor visitor){ + this.visitor = visitor; + visitor.setTraverse(this); + } + public Object traverseObject(Object obj){ + return traverseObject(obj, true); + } + + /** + * + * @param obj current object + * @param assign should we record this visit. Usually, this should be true to avoid infinite loop of cyclic reference. + * Sometime set to false when we need visit an object more than once. + * @return anything the visitor returns. + */ + public Object traverseObject(Object obj, boolean assign){ + __log.debug("current object " + obj); + if (obj == null) return null; + if (htab.lookup(obj) != -1){ + return visitor.visited(obj); + } + if (assign) htab.assign(obj); + Object n; + n = visitor.visit(obj); + return n; + } + + /** + * Stole from openjdk ObjectOutputStream + * Lightweight identity hash table which maps objects to integer handles, + * assigned in ascending order. + */ + public static class HandleTable { + + /* number of mappings in table/next available handle */ + private int size; + /* size threshold determining when to expand hash spine */ + private int threshold; + /* factor for computing size threshold */ + private final float loadFactor; + /* maps hash value -> candidate handle value */ + private int[] spine; + /* maps handle value -> next candidate handle value */ + private int[] next; + /* maps handle value -> associated object */ + private Object[] objs; + + /** + * Creates new HandleTable with given capacity and load factor. + */ + HandleTable(int initialCapacity, float loadFactor) { + this.loadFactor = loadFactor; + spine = new int[initialCapacity]; + next = new int[initialCapacity]; + objs = new Object[initialCapacity]; + threshold = (int) (initialCapacity * loadFactor); + clear(); + } + + /** + * Assigns next available handle to given object, and returns handle + * value. Handles are assigned in ascending order starting at 0. + */ + int assign(Object obj) { + if (size >= next.length) { + growEntries(); + } + if (size >= threshold) { + growSpine(); + } + insert(obj, size); + return size++; + } + + /** + * Looks up and returns handle associated with given object, or -1 if + * no mapping found. + */ + int lookup(Object obj) { + if (size == 0) { + return -1; + } + int index = hash(obj) % spine.length; + for (int i = spine[index]; i >= 0; i = next[i]) { + if (objs[i] == obj) { + return i; + } + } + return -1; + } + + /** + * Resets table to its initial (empty) state. + */ + void clear() { + Arrays.fill(spine, -1); + Arrays.fill(objs, 0, size, null); + size = 0; + } + + /** + * Returns the number of mappings currently in table. + */ + int size() { + return size; + } + + /** + * Inserts mapping object -> handle mapping into table. Assumes table + * is large enough to accommodate new mapping. + */ + private void insert(Object obj, int handle) { + int index = hash(obj) % spine.length; + objs[handle] = obj; + next[handle] = spine[index]; + spine[index] = handle; + } + + /** + * Expands the hash "spine" -- equivalent to increasing the number of + * buckets in a conventional hash table. + */ + private void growSpine() { + spine = new int[(spine.length << 1) + 1]; + threshold = (int) (spine.length * loadFactor); + Arrays.fill(spine, -1); + for (int i = 0; i < size; i++) { + insert(objs[i], i); + } + } + + /** + * Increases hash table capacity by lengthening entry arrays. + */ + private void growEntries() { + int newLength = (next.length << 1) + 1; + int[] newNext = new int[newLength]; + System.arraycopy(next, 0, newNext, 0, size); + next = newNext; + + Object[] newObjs = new Object[newLength]; + System.arraycopy(objs, 0, newObjs, 0, size); + objs = newObjs; + } + + /** + * Returns hash value for given object. + */ + private int hash(Object obj) { + return System.identityHashCode(obj) & 0x7FFFFFFF; + } + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java index 972697f..fd18807 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java @@ -1,14 +1,24 @@ package org.apache.ode.bpel.obj.migrate; +/** + * Object visitor used when traverse an object. + * @author fangzhen + * + */ public interface ObjectVisitor { - + /** + * Operation if obj has been visited before + * @return we may need to return new object corresponding to the visiting object. + */ Object visited(Object obj); + /** + * Operation when obj is first visited or its former wasn't recorded. + * @return we may need to return new object corresponding to the visiting object. + */ Object visit(Object obj); - void setTraverse(TraverseObject traverseObject); - + void setTraverse(ObjectTraverser traverseObject); void addCustomVisitor(Class cls, ObjectVisitor visitor); - - TraverseObject getTraverse(); + ObjectTraverser getTraverse(); } http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java index 432e2df..418c2af 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java @@ -16,6 +16,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ode.bpel.obj.ExtensibleImpl; +/** + * Migrate from old Omodel classes to new ones. + * @author fangzhen + * + */ public class OmOld2new extends AbstractObjectVisitor{ private static final Log __log = LogFactory.getLog(OmOld2new.class); @@ -30,6 +35,13 @@ public class OmOld2new extends AbstractObjectVisitor{ public Object visit(Object obj){ __log.debug("migrating object: " + obj.getClass() + "@" + System.identityHashCode(obj)); Object n; + /* + * we use two category of visitXXX methods here. The first visitXXX(Object) + * return corresponding new object instance without fulfilling its contents, + * which avoids recursively call. And then assign the new object. then fill contents. + * other wise, on cyclic reference case, the object re-visited but hasn't prepared yet. + * However, this workaround assumes that the new object is mutable, which is true in our case. + */ if (isMap(obj)){ n = visitMap(obj); }else if (isCollection(obj)){ @@ -61,7 +73,8 @@ public class OmOld2new extends AbstractObjectVisitor{ private boolean isOmodelBean(Object old){ Class<?> cls = old.getClass(); - if (beanPkgMap.containsKey(cls.getPackage().getName()) && !cls.getSimpleName().equals("Serializer")){ + if (beanPkgMap.containsKey(cls.getPackage().getName()) && + !cls.getSimpleName().equals("Serializer")){ return true; } return false; @@ -158,7 +171,8 @@ public class OmOld2new extends AbstractObjectVisitor{ fieldMap.put(fname, null); } } catch (Exception e) { - RuntimeException rte = new RuntimeException("Error when try to construct corresponding new Omodel class from old one:" + RuntimeException rte = new RuntimeException( + "Error when try to construct corresponding new Omodel class from old one:" +old.getClass() + "; Failed on field:" + f.getName()); rte.initCause(e); throw rte; @@ -188,7 +202,9 @@ public class OmOld2new extends AbstractObjectVisitor{ cons.setAccessible(true); return cons.newInstance(); } catch (Exception e) { - RuntimeException rte = new RuntimeException("Error when try to initiate corresponding new Omodel class of old one:"+old.getClass()); + RuntimeException rte = new RuntimeException( + "Error when try to initiate corresponding new Omodel class of old one:" + + old.getClass()); rte.initCause(e); throw rte; } http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java deleted file mode 100644 index 260ce92..0000000 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.apache.ode.bpel.obj.migrate; - -import java.util.Arrays; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - - -public class TraverseObject{ - private static final Log __log = LogFactory.getLog(TraverseObject.class); - - private HandleTable htab = new HandleTable(1000, 0.8f); - private ObjectVisitor visitor; - - public HandleTable getHtab() { - return htab; - } - - public TraverseObject(){ - } - public void accept(ObjectVisitor visitor){ - this.visitor = visitor; - visitor.setTraverse(this); - } - public Object traverseObject(Object obj){ - return traverseObject(obj, true); - } - public Object traverseObject(Object obj, boolean assign){ - __log.debug("current object " + obj); - if (obj == null) return null; - if (htab.lookup(obj) != -1){ - return visitor.visited(obj); - } - if (assign) htab.assign(obj); - Object n; - n = visitor.visit(obj); - return n; - } - - /** - * Stole from openjdk OOS - * Lightweight identity hash table which maps objects to integer handles, - * assigned in ascending order. - */ - public static class HandleTable { - - /* number of mappings in table/next available handle */ - private int size; - /* size threshold determining when to expand hash spine */ - private int threshold; - /* factor for computing size threshold */ - private final float loadFactor; - /* maps hash value -> candidate handle value */ - private int[] spine; - /* maps handle value -> next candidate handle value */ - private int[] next; - /* maps handle value -> associated object */ - private Object[] objs; - - /** - * Creates new HandleTable with given capacity and load factor. - */ - HandleTable(int initialCapacity, float loadFactor) { - this.loadFactor = loadFactor; - spine = new int[initialCapacity]; - next = new int[initialCapacity]; - objs = new Object[initialCapacity]; - threshold = (int) (initialCapacity * loadFactor); - clear(); - } - - /** - * Assigns next available handle to given object, and returns handle - * value. Handles are assigned in ascending order starting at 0. - */ - int assign(Object obj) { - if (size >= next.length) { - growEntries(); - } - if (size >= threshold) { - growSpine(); - } - insert(obj, size); - return size++; - } - - /** - * Looks up and returns handle associated with given object, or -1 if - * no mapping found. - */ - int lookup(Object obj) { - if (size == 0) { - return -1; - } - int index = hash(obj) % spine.length; - for (int i = spine[index]; i >= 0; i = next[i]) { - if (objs[i] == obj) { - return i; - } - } - return -1; - } - - /** - * Resets table to its initial (empty) state. - */ - void clear() { - Arrays.fill(spine, -1); - Arrays.fill(objs, 0, size, null); - size = 0; - } - - /** - * Returns the number of mappings currently in table. - */ - int size() { - return size; - } - - /** - * Inserts mapping object -> handle mapping into table. Assumes table - * is large enough to accommodate new mapping. - */ - private void insert(Object obj, int handle) { - int index = hash(obj) % spine.length; - objs[handle] = obj; - next[handle] = spine[index]; - spine[index] = handle; - } - - /** - * Expands the hash "spine" -- equivalent to increasing the number of - * buckets in a conventional hash table. - */ - private void growSpine() { - spine = new int[(spine.length << 1) + 1]; - threshold = (int) (spine.length * loadFactor); - Arrays.fill(spine, -1); - for (int i = 0; i < size; i++) { - insert(objs[i], i); - } - } - - /** - * Increases hash table capacity by lengthening entry arrays. - */ - private void growEntries() { - int newLength = (next.length << 1) + 1; - int[] newNext = new int[newLength]; - System.arraycopy(next, 0, newNext, 0, size); - next = newNext; - - Object[] newObjs = new Object[newLength]; - System.arraycopy(objs, 0, newObjs, 0, size); - objs = newObjs; - } - - /** - * Returns hash value for given object. - */ - private int hash(Object obj) { - return System.identityHashCode(obj) & 0x7FFFFFFF; - } - } - -} http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java index 4509ed1..2b8bad6 100644 --- a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java +++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java @@ -24,7 +24,7 @@ public class DeepEqualityTest { List<String> ls2 = new ArrayList<String>(); ls2.add("Hello"); ls2.add("world"); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(ls2); traverse.accept(visitor); assertEquals(Boolean.TRUE, traverse.traverseObject(ls1)); @@ -43,7 +43,7 @@ public class DeepEqualityTest { s2.add("world"); s2.add("hello"); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(s2); traverse.accept(visitor); assertEquals(Boolean.TRUE, traverse.traverseObject(s1)); @@ -60,7 +60,7 @@ public class DeepEqualityTest { m2.put("item1", "string1"); m2.put("item2", new ArrayList()); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(m2); traverse.accept(visitor); assertEquals(Boolean.TRUE, traverse.traverseObject(m1)); @@ -83,7 +83,7 @@ public class DeepEqualityTest { DebugInfo d2 = new DebugInfo("/a/path", 0, 1, m2); m2.put("cylic", d2); - TraverseObject traverse = new TraverseObject(); + ObjectTraverser traverse = new ObjectTraverser(); EqualityVisitor visitor = new EqualityVisitor(d2); visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); traverse.accept(visitor); http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/test/resources/log4j.properties b/bpel-nobj/src/test/resources/log4j.properties index 2b02abc..f50576a 100644 --- a/bpel-nobj/src/test/resources/log4j.properties +++ b/bpel-nobj/src/test/resources/log4j.properties @@ -1,4 +1,4 @@ -log4j.rootLogger=DEBUG, file, stdout +log4j.rootLogger=DEBUG, file # Console appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender
