You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2015/07/21 22:52:16 UTC
[19/50] ode git commit: Deep Equality worked;
passed some tests of migration from old to new.
Deep Equality worked; passed some tests of migration from old to new.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/349eacb9
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/349eacb9
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/349eacb9
Branch: refs/heads/ODE-912
Commit: 349eacb9c8ae3dc8e4c5a52fe049259a5bd577dc
Parents: 6e9b07d
Author: fangzhen <fa...@gmail.com>
Authored: Tue Jul 29 10:48:34 2014 +0800
Committer: fangzhen <fa...@gmail.com>
Committed: Tue Jul 29 10:48:34 2014 +0800
----------------------------------------------------------------------
.../ode/bpel/compiler_2_0/MigrationTest.java | 5 +-
.../elang/xpath10/obj/OXPath10Expression.java | 2 +-
.../java/org/apache/ode/bpel/obj/DebugInfo.java | 20 ++-
.../ode/bpel/obj/OConstantExpression.java | 6 +-
.../org/apache/ode/bpel/obj/OPartnerLink.java | 6 +-
.../bpel/obj/migrate/AbstractObjectVisitor.java | 6 +-
.../bpel/obj/migrate/DebugInfoComparator.java | 40 +++++
.../ode/bpel/obj/migrate/EqualityVisitor.java | 174 +++++++++++++++----
.../obj/migrate/ExtensibeImplEqualityComp.java | 53 +++++-
.../ode/bpel/obj/migrate/ObjectVisitor.java | 2 +
.../apache/ode/bpel/obj/migrate/OmOld2new.java | 5 +-
11 files changed, 270 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 6658931..314c036 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
@@ -11,6 +11,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.o.Serializer;
import org.apache.ode.bpel.obj.OProcess;
+import org.apache.ode.bpel.obj.migrate.DebugInfoComparator;
import org.apache.ode.bpel.obj.migrate.EqualityVisitor;
import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
import org.apache.ode.bpel.obj.migrate.OmOld2new;
@@ -43,10 +44,10 @@ public class MigrationTest extends GoodCompileTest{
TraverseObject traverse = new TraverseObject();
EqualityVisitor visitor = new EqualityVisitor(nu);
visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor));
+ visitor.addCustomComparator(new DebugInfoComparator(visitor));
traverse.accept(visitor);
boolean res = (Boolean)traverse.traverseObject(migrated);
- System.out.print(visitor.getFalseChain());
- assertEquals(Boolean.TRUE, res);
+ assertEquals(Boolean.TRUE, res);
} catch (Exception ex) {
ex.printStackTrace();
Assert.fail("Compilation did not succeed.");
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java
index 6620441..809c2d1 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java
@@ -309,7 +309,7 @@ public class OXPath10Expression extends OLValueExpression implements Serializabl
private final String LOCATION = "location";
@JsonCreator
- SigGetVariableData(){}
+ public SigGetVariableData(){}
private SigGetVariableData(String varname, String partname,
String location) {
setVarname(varname);
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java
index 584ed69..3135a74 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java
@@ -18,6 +18,8 @@
*/
package org.apache.ode.bpel.obj;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
@@ -114,5 +116,21 @@ public class DebugInfo extends ExtensibleImpl implements Serializable{
fieldContainer.put(STARTLINE, startLine);
}
- //TODO: check legacy OModel DebugInfo#readObject.
+ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
+ ois.defaultReadObject();
+ int size = ois.readInt();
+ String cls = (String)ois.readObject();
+ try {
+ fieldContainer = (Map<String, Object>)(Class.forName(cls).newInstance());
+ } catch (Exception e) {
+ //should never get here
+ e.printStackTrace();
+ }
+ for (int i = 0; i < size; i++){
+ String key = (String)ois.readObject();
+ Object value = ois.readObject();
+ if (!key.equals(DESCRIPTION))
+ fieldContainer.put(key, value);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java
index d240449..793922f 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
public class OConstantExpression extends OExpression implements Serializable{
public static final long serialVersionUID = -1L;
- private Object _val;
+ private static String VAL = "_val";
@JsonCreator
public OConstantExpression(){}
@@ -34,14 +34,14 @@ public class OConstantExpression extends OExpression implements Serializable{
}
public Object getVal() {
- return _val;
+ return fieldContainer.get(VAL);
}
public void setVal(Object val) {
if (val == null)
throw new IllegalArgumentException("OConstatExpression cannot be null.");
- _val = val;
+ fieldContainer.put(VAL, val);
}
public String toString() {
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java
index 1d61b29..7d302b0 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java
@@ -56,11 +56,11 @@ public class OPartnerLink extends OBase implements Serializable{
private static final String INITIALIZEPARTNERROLE = "initializePartnerRole";
/** The set of CorrelationSets that may be used as a match criteria, organized by {@link Operation} */
- private static final String NONINITIATINGCORRELATIONSETS = "nonIntitiatingCorrelationSets";
+ private static final String NONINITIATINGCORRELATIONSETS = "_nonIntitiatingCorrelationSets";
/** The set of joining CorrelationSets that may be used as a match criteria, organized by {@link Operation} */
- private static final String JOININGCORRELATIONSETS = "joiningCorrelationSets";
+ private static final String JOININGCORRELATIONSETS = "_joiningCorrelationSets";
/** The set of {@link Operation}s that can be used to create a process instance. */
- private static final String CREATEINSTANCEOPERATIONS = "createInstanceOperations";
+ private static final String CREATEINSTANCEOPERATIONS = "_createInstanceOperations";
@JsonCreator
public OPartnerLink(){
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 1a0dca2..5a8ce53 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
@@ -21,7 +21,11 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{
}
return rtab.lookup(obj);
}
-
+
+ @Override
+ public TraverseObject getTraverse(){
+ return traverse;
+ }
@Override
public Object visit(Object obj) {
ObjectVisitor customVisitor = visitors.get(obj.getClass());
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java
new file mode 100644
index 0000000..9d562ae
--- /dev/null
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java
@@ -0,0 +1,40 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.obj.DebugInfo;
+
+public class DebugInfoComparator implements EqualityComparator{
+ private static final Log __log = LogFactory.getLog(DebugInfoComparator.class);
+ private EqualityVisitor visitor;
+ public DebugInfoComparator(EqualityVisitor visitor){
+ this.visitor = visitor;
+ }
+
+ @Override
+ public Boolean objectsEqual(Object obj1, Object obj2) {
+ if (!(obj2 instanceof DebugInfo)){
+ if (!visitor.logFalseThrough){
+ __log.debug("Unequal in DebugInfo, object2 is not a DebugInfo");
+ }
+ return false;
+ }
+ DebugInfo o1 = (DebugInfo)obj1;
+ DebugInfo o2 = (DebugInfo)obj2;
+ boolean res = o1.getStartLine() == o2.getStartLine() &&
+ o1.getEndLine() == o2.getEndLine() &&
+ o1.getSourceURI().equals(o2.getSourceURI());
+ if (!res){
+ if (!visitor.logFalseThrough){
+ __log.info("Unequal in DebugInfo, " + o1 + " and " + o2);
+ }
+ }
+ return res;
+ }
+
+ @Override
+ public Boolean canHanle(Object obj) {
+ return obj instanceof DebugInfo;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 14fdb39..bfcbd15 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
@@ -9,79 +9,96 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.Stack;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class EqualityVisitor extends AbstractObjectVisitor{
- private static final Log __log = LogFactory.getLog(TraverseObject.class);
+ private static final Log __log = LogFactory.getLog(TraverseObject.class);
private List<EqualityComparator> comparators = new LinkedList<EqualityComparator>();
- private List<String> falseChain = new LinkedList<String>();
+ private Stack<String> st = new Stack<String>();
protected Object other;
-
+ public boolean logFalseThrough = false;
public EqualityVisitor(){
}
public EqualityVisitor(Object other){
this.other = other;
+ st.push(":" + other.getClass().getSimpleName());
}
- public void setOther(Object other){
- this.other = other;
- }
- public void addCustomComparator(EqualityComparator oe){
- comparators.add(0, oe);
- }
- public List<String> getFalseChain(){
- return falseChain;
- }
- @Override
- public Boolean visited(Object obj){
- return true;
- }
@Override
public Boolean visit(Object obj){
- __log.debug("comparing Object " + obj.getClass() + "@" + System.identityHashCode(obj) + " " + obj +
+ if (!logFalseThrough){
+ __log.debug("comparing Object " + obj.getClass() + "@" + System.identityHashCode(obj) + " " + obj +
" and " + other.getClass() + "@" + System.identityHashCode(other) + " " + other);
- Boolean res = (Boolean)super.visit(obj);
- if (!res){
- falseChain.add(0, obj.getClass().getSimpleName());
}
+ Boolean res = (Boolean)super.visit(obj);
return res;
}
@SuppressWarnings("rawtypes")
@Override
public Boolean visitMap(Object obj) {
if (obj == other) return true;
- if (other == null) return false;
+ if (other == null) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Map: Object2 is null. " + st);
+ }
+ return false;
+ }
Map m1 = (Map)obj;
Map m2 = null;
try{
m2 = (Map)other;
}catch (ClassCastException e){
+ if (!logFalseThrough){
+ __log.debug("Unequal in Map: Object2 is not a map, it's a" + other.getClass() + "\n" + st);
+ }
+ return false;
+ }
+ if (m1.size() != m2.size()) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Map: size mismatch. " + st +
+ "\n size: " + m1.size() + " and " + m2.size());
+ }
return false;
}
- if (m1.size() != m2.size()) return false;
Set ks1 = m1.keySet();
Set ks2 = m2.keySet();
for (Object k1 : ks1){
+ st.push(k1.toString());
Object k2 = contains(ks2, k1);
if (k2 == null){
+ if (!logFalseThrough){
+ __log.debug("Unequal in Map: cant find key. " + st + "\n missing key: " + k1);
+ }
return false;
}
Object o1 = m1.get(k1);
Object o2 = m2.get(k2);
if (o1 == null){
if (!(o2 == null)){
- return false;
+ if (!logFalseThrough){
+ __log.debug("Unequal in Map: mismatch, one is null" + st +
+ "\n When dealing with " + o1 + " and " + o2);
+ }
+ return false;
}
}
+
+ st.pop();
+ st.push(k1.toString() + ":" + o1.getClass().getSimpleName());
+
Object pre = other;
other = o2;
Boolean e = (Boolean)traverse.traverseObject(o1);
- if (!e) return false;
+ if (!e) {
+ return false;
+ }
other = pre;
+ st.pop();
}
return true;
}
@@ -90,19 +107,42 @@ public class EqualityVisitor extends AbstractObjectVisitor{
@SuppressWarnings("rawtypes")
public Boolean visitSet(Object obj){
if (obj == other) return true;
- if (other == null) return false;
+ if (other == null) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Set, Object2 is null. " + st);
+ }
+ return false;
+ }
Collection c1 = (Collection)obj;
Collection c2 = null;
try {
c2 = (Collection)other;
}catch(ClassCastException e){
+ if (!logFalseThrough){
+ __log.debug("Unequal in Set: Object2 is not a Set, it's a" + other.getClass() + "\n" + st);
+ }
+ return false;
+ }
+ if (c1.size() != c2.size()) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Set: size mismatch. " + st +
+ "\n. sizes are " + c1.size() + " and " + c2.size());
+ }
return false;
}
- if (c1.size() != c2.size()) return false;
Iterator i1 = c1.iterator();
while (i1.hasNext()){
- if (contains(c2, i1.next()) == null) return false;
+ Object o1 = i1.next();
+ st.push(":" + o1.getClass().getSimpleName());
+ if (contains(c2, o1) == null) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Set: Object mismatch. " + st +
+ "\n" + "cann't find" + o1);
+ }
+ return false;
+ }
+ st.pop();
}
return true;
}
@@ -111,15 +151,18 @@ public class EqualityVisitor extends AbstractObjectVisitor{
Iterator itor = c.iterator();
Object t2;
Object pre = other;
+ logFalseThrough = true;
while (itor.hasNext()){
t2 = itor.next();
other = t2;
if ((Boolean)traverse.traverseObject(t1, false)) {
+ logFalseThrough = false;
return t2;
}
}
traverse.getHtab().assign(t1);
other = pre;
+ logFalseThrough = false;
return null;
}
@@ -127,27 +170,45 @@ public class EqualityVisitor extends AbstractObjectVisitor{
@Override
public Boolean visitCollection(Object obj) {
if (obj == other) return true;
- if (other == null) return false;
+ if (other == null) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Collection, Object2 is null. " + st);
+ }
+ return false;
+ }
Collection c = (Collection)obj;
Collection c2 = null;
try {
c2 = (Collection)other;
}catch(ClassCastException e){
+ if (!logFalseThrough){
+ __log.debug("Unequal in Collection: Object2 is not a Collection, it's a" + other.getClass() + "\n" + st);
+ }
+ return false;
+ }
+ if (c.size() != c2.size()) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in Collection: size mismatch. " + st +
+ "\n. sizes are " + c.size() + " and " + c2.size());
+ }
return false;
}
- if (c.size() != c2.size()) return false;
Iterator i1 = c.iterator();
Iterator i2 = c2.iterator();
while (i1.hasNext()){
Object o1 = i1.next();
Object o2 = i2.next();
+ st.push(":" + o1.getClass().getSimpleName());
Object pre = other;
other = o2;
Boolean e = (Boolean)traverse.traverseObject(o1);
- if (!e) return false;
+ if (!e) {
+ return false;
+ }
other = pre;
+ st.pop();
}
return true;
}
@@ -164,11 +225,29 @@ public class EqualityVisitor extends AbstractObjectVisitor{
return customComp.objectsEqual(obj, other);
}
if (obj == other) return true;
- if (other == null) return false;
- if (obj.getClass() != other.getClass()) return false;
+ if (other == null) {
+ if (!logFalseThrough){
+ __log.debug("Unequal in POJO: Object2 is null." + st);
+ }
+ return false;
+ }
+ if (obj.getClass() != other.getClass()) {
+ if(!logFalseThrough){
+ __log.debug("Unequal in POJO: type mistach. " + st +
+ "\nmismatched types are: " + obj.getClass().getSimpleName() +
+ " and " + other.getClass().getSimpleName());
+ }
+ return false;
+ }
try{
obj.getClass().getDeclaredMethod("equals", Object.class);
- return obj.equals(other);
+ boolean e = obj.equals(other);
+ if (!e){
+ if (!logFalseThrough){
+ __log.debug("Unequal in POJO: not equal by equals() method" + st);
+ }
+ }
+ return e;
}catch (NoSuchMethodException e){
return equalityByReflection(obj);
}
@@ -187,6 +266,9 @@ public class EqualityVisitor extends AbstractObjectVisitor{
Field[] fields = obj.getClass().getFields();
Field[] fields2 = other.getClass().getFields();
if (! Arrays.equals(fields, fields2)){
+ if (!logFalseThrough){
+ __log.debug("Unequal: getFields() of two Object do not match " + st);
+ }
return false;
}
@@ -195,22 +277,31 @@ public class EqualityVisitor extends AbstractObjectVisitor{
continue; //skip transient fields
}
try {
+ st.push(f.getName()+ ":" + f.getType().getSimpleName());
Object v1 = f.get(obj);
Object v2 = f.get(other);
if (v1 == null && v2 == null){
continue;
}
if (v1 == null || v2 == null){
+ if (!logFalseThrough){
+ __log.debug("Unequal: one field is null" + st + ".\n When dealing with "
+ + v1 + " and " + v2);
+ }
return false;
}
Object pre = other;
other = v2;
Boolean res = (Boolean)traverse.traverseObject(v1);
if (!res){
- falseChain.add(f.getName());
+ if (!logFalseThrough){
+ __log.debug("Unequal:" + st + ".\n When dealing with "
+ + v1 + " and " + v2);
+ }
return false;
}
other = pre;
+ st.pop();
} catch (Exception e) {
//should not get here
e.printStackTrace();
@@ -218,5 +309,18 @@ public class EqualityVisitor extends AbstractObjectVisitor{
}
return true;
}
-
+
+ public void setOther(Object other){
+ this.other = other;
+ }
+ public void addCustomComparator(EqualityComparator oe){
+ comparators.add(0, oe);
+ }
+ @Override
+ public Boolean visited(Object obj){
+ return true;
+ }
+ public Stack<String> getSt() {
+ return st;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
index 0985ac2..14db7d8 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
@@ -1,8 +1,18 @@
package org.apache.ode.bpel.obj.migrate;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.obj.ExtensibleImpl;
+import org.apache.ode.bpel.obj.OProcess;
public class ExtensibeImplEqualityComp implements EqualityComparator{
+ private static final Log __log = LogFactory.getLog(DebugInfoComparator.class);
private EqualityVisitor visitor;
public ExtensibeImplEqualityComp() {
@@ -13,15 +23,54 @@ public class ExtensibeImplEqualityComp implements EqualityComparator{
@Override
public Boolean objectsEqual(Object obj1, Object obj2) {
+ if (obj2 == null) {
+ if (!visitor.logFalseThrough){
+ __log.debug("Unequal in ExtensibleImpl: Object2 is null. " +
+ visitor.getSt());
+ }
+ return false;
+ }
ExtensibleImpl esi = (ExtensibleImpl)obj1;
ExtensibleImpl esio = null;
+ if (obj1.getClass() != obj2.getClass()){
+ if (!visitor.logFalseThrough){
+ __log.debug("Unequal in ExtensibleImpl: Type mismatch. " + visitor.getSt() +
+ "\nmismatched type: " + obj1.getClass().getSimpleName() +
+ " and " + obj2.getClass().getSimpleName());
+ }
+ return false;
+ }
try{
esio = (ExtensibleImpl)obj2;
}catch(ClassCastException e){
+ //won't get here
return false;
}
- visitor.setOther(esio.getFieldContainer());
- return visitor.visit(esi.getFieldContainer());
+ Map m1 = new LinkedHashMap(esi.getFieldContainer());
+ Map m2 = new LinkedHashMap(esio.getFieldContainer());
+ dehydrate(m1);
+ dehydrate(m2);
+ if (obj1.getClass() == OProcess.class){
+ dehydrateOProcess(m1);
+ dehydrateOProcess(m2);
+ }
+ visitor.setOther(m2);
+ return (Boolean) visitor.getTraverse().traverseObject(m1);
+ }
+ private void dehydrateOProcess(Map m) {
+ m.remove("compileDate");
+ }
+ @SuppressWarnings("rawtypes")
+ private void dehydrate(Map map) {
+ if (map == null) return;
+ Set<Entry> entries = map.entrySet();
+ Iterator<Entry> itor = entries.iterator();
+ while (itor.hasNext()){
+ Entry entry = itor.next();
+ if (entry.getValue() == null){
+ itor.remove();
+ }
+ }
}
@Override
public Boolean canHanle(Object obj) {
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 b9caa12..972697f 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
@@ -9,4 +9,6 @@ public interface ObjectVisitor {
void setTraverse(TraverseObject traverseObject);
void addCustomVisitor(Class cls, ObjectVisitor visitor);
+
+ TraverseObject getTraverse();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 c7caa86..432e2df 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
@@ -1,5 +1,6 @@
package org.apache.ode.bpel.obj.migrate;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -183,7 +184,9 @@ public class OmOld2new extends AbstractObjectVisitor{
String clsName = old.getClass().getName();
String qcls = clsName.replace(".o.", ".obj.");
try {
- return Class.forName(qcls).newInstance();
+ Constructor cons = Class.forName(qcls).getConstructor();
+ 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());
rte.initCause(e);