migration and deep equality code. not working properly though
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/cc9eab25 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/cc9eab25 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/cc9eab25 Branch: refs/heads/master Commit: cc9eab25ea18c8c9382402c9b8ecfce6313f3c39 Parents: c18fa9f Author: fangzhen <[email protected]> Authored: Mon Jul 28 13:55:39 2014 +0800 Committer: fangzhen <[email protected]> Committed: Mon Jul 28 13:55:39 2014 +0800 ---------------------------------------------------------------------- Rakefile | 5 +- .../ode/bpel/compiler_2_0/MigrationTest.java | 52 +++++ .../src/test/resources/log4j.properties | 5 +- .../2.0/good/AsyncProcess/AsyncProcess2.cbp | Bin 0 -> 47691 bytes .../oldcbp/2.0/good/assign/Assign1-2.0.cbp | Bin 0 -> 32938 bytes .../oldcbp/2.0/good/assign/Assign2-2.0.cbp | Bin 0 -> 33547 bytes .../oldcbp/2.0/good/assign/Assign3-2.0.cbp | Bin 0 -> 37042 bytes .../oldcbp/2.0/good/assign/Assign5-2.0.cbp | Bin 0 -> 32619 bytes .../oldcbp/2.0/good/assign/Assign6-2.0.cbp | Bin 0 -> 32572 bytes .../oldcbp/2.0/good/assign/Assign7-2.0.cbp | Bin 0 -> 31372 bytes .../oldcbp/2.0/good/assign/Assign8-2.0.cbp | Bin 0 -> 31140 bytes .../oldcbp/2.0/good/assign/Assign9-2.0.cbp | Bin 0 -> 29510 bytes .../circularReference/CircularReference.cbp | Bin 0 -> 15596 bytes .../oldcbp/2.0/good/compensation/comp1-2.0.cbp | Bin 0 -> 40085 bytes .../oldcbp/2.0/good/compensation/comp2-2.0.cbp | Bin 0 -> 39765 bytes .../oldcbp/2.0/good/flow/flow2-2.0.cbp | Bin 0 -> 20248 bytes .../oldcbp/2.0/good/flow/flow3-2.0.cbp | Bin 0 -> 23864 bytes .../oldcbp/2.0/good/flow/flow4-2.0.cbp | Bin 0 -> 20767 bytes .../oldcbp/2.0/good/flow/flow5-2.0.cbp | Bin 0 -> 23015 bytes .../oldcbp/2.0/good/flow/flow6-2.0.cbp | Bin 0 -> 23322 bytes .../oldcbp/2.0/good/flow/flow7-2.0.cbp | Bin 0 -> 21305 bytes .../oldcbp/2.0/good/foreach/ForEach1-2.0.cbp | Bin 0 -> 23615 bytes .../oldcbp/2.0/good/foreach/ForEach2-2.0.cbp | Bin 0 -> 26486 bytes .../oldcbp/2.0/good/foreach/ForEach3-2.0.cbp | Bin 0 -> 24240 bytes .../resources/oldcbp/2.0/good/if/If1-2.0.cbp | Bin 0 -> 24970 bytes .../resources/oldcbp/2.0/good/if/If2-2.0.cbp | Bin 0 -> 24971 bytes .../resources/oldcbp/2.0/good/if/If3-2.0.cbp | Bin 0 -> 24971 bytes .../oldcbp/2.0/good/pick/Pick3-2.0.cbp | Bin 0 -> 18322 bytes .../oldcbp/2.0/good/pick/Pick4-2.0.cbp | Bin 0 -> 22962 bytes .../oldcbp/2.0/good/pick/Pick5-2.0.cbp | Bin 0 -> 20664 bytes .../oldcbp/2.0/good/pick/Pick6-2.0.cbp | Bin 0 -> 21014 bytes .../oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp | Bin 0 -> 25838 bytes .../oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp | Bin 0 -> 26251 bytes .../oldcbp/2.0/good/throw/Throw1-2.0.cbp | Bin 0 -> 23856 bytes .../oldcbp/2.0/good/throw/Throw2-2.0.cbp | Bin 0 -> 25526 bytes .../oldcbp/2.0/good/throw/Throw3-2.0.cbp | Bin 0 -> 26006 bytes .../oldcbp/2.0/good/throw/Throw4-2.0.cbp | Bin 0 -> 19872 bytes .../oldcbp/2.0/good/throw/Throw5-2.0.cbp | Bin 0 -> 28056 bytes .../oldcbp/2.0/good/throw/Throw6-2.0.cbp | Bin 0 -> 28014 bytes .../oldcbp/2.0/good/throw/Throw7-2.0.cbp | Bin 0 -> 23783 bytes .../oldcbp/2.0/good/wait/Wait1-2.0.cbp | Bin 0 -> 17327 bytes .../oldcbp/2.0/good/wait/Wait2-2.0.cbp | Bin 0 -> 17376 bytes .../oldcbp/2.0/good/while/While1-2.0.cbp | Bin 0 -> 19034 bytes .../good/xpath10-func/GetVariableData1-2.0.cbp | Bin 0 -> 31972 bytes .../good/xpath10-func/GetVariableData2-2.0.cbp | Bin 0 -> 31994 bytes .../good/xpath10-func/GetVariableData3-2.0.cbp | Bin 0 -> 31993 bytes .../good/xpath10-func/GetVariableData4-2.0.cbp | Bin 0 -> 31993 bytes .../xpath10-func/GetVariableProperty1-2.0.cbp | Bin 0 -> 32068 bytes .../xpath20-func/GetVariableData2-xp2.0.cbp | Bin 0 -> 31799 bytes .../xpath20-func/GetVariableData3-xp2.0.cbp | Bin 0 -> 31525 bytes .../xpath20-func/GetVariableData4-xp2.0.cbp | Bin 0 -> 31539 bytes .../xpath20-func/GetVariableProperty1-xp2.0.cbp | Bin 0 -> 31600 bytes .../2.0/good/xsd-import/helloworld-Server.cbp | Bin 0 -> 24838 bytes .../bpel/obj/migrate/AbstractObjectVisitor.java | 142 ++++++++++++ .../bpel/obj/migrate/EqualityComparator.java | 7 + .../ode/bpel/obj/migrate/EqualityVisitor.java | 222 +++++++++++++++++++ .../obj/migrate/ExtensibeImplEqualityComp.java | 30 +++ .../ode/bpel/obj/migrate/ObjectVisitor.java | 12 + .../apache/ode/bpel/obj/migrate/OmOld2new.java | 28 ++- .../ode/bpel/obj/migrate/TraverseObject.java | 166 ++++++++++++++ .../ode/bpel/obj/migrate/DeepEqualityTest.java | 92 ++++++++ .../ode/bpel/obj/migrate/MigrationTest.java | 11 +- bpel-nobj/src/test/resources/log4j.properties | 13 ++ 63 files changed, 775 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/Rakefile ---------------------------------------------------------------------- diff --git a/Rakefile b/Rakefile index 8877d94..da05f31 100644 --- a/Rakefile +++ b/Rakefile @@ -127,7 +127,7 @@ define "ode" do end end - test.using :testng, :forkmode=>'perTest', :properties=>{ "org.apache.commons.logging.LogFactory" => "org.apache.commons.logging.impl.LogFactoryImpl", "log4j.configuration"=>"test-log4j.properties", "test.ports" => ENV['TEST_PORTS'], "org.apache.ode.scheduler.deleteJobsOnStart" => "true", "org.apache.ode.autoRetireProcess"=>"true" } #, :java_args=>['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001', '-Xmx2048m', '-XX:MaxPermSize=256m'] + test.using :testng, :forkmode=>'perTest', :properties=>{ "org.apache.commons.logging.LogFactory" => "org.apache.commons.logging.impl.LogFactoryImpl", "log4j.configuration"=>"test-log4j.properties", "test.ports" => ENV['TEST_PORTS'], "org.apache.ode.scheduler.deleteJobsOnStart" => "true", "org.apache.ode.autoRetireProcess"=>"true" } , :java_args=>['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001', '-Xmx4g', '-XX:MaxPermSize=1g'] test.with projects("tools"), libs, AXIS2_MODULES.mods, AXIOM, JAVAX.servlet, Buildr::Jetty::REQUIRES, HIBERNATE, DOM4J, H2::REQUIRES, SPRING_TEST, JACKSON webapp_dir = "#{test.compile.target}/webapp" test.setup task(:prepare_webapp) do |task| @@ -178,7 +178,7 @@ define "ode" do compile.with projects("bpel-api", "bpel-nobj", "bpel-schemas", "utils"), JAVAX.stream, JAXEN, SAXON, WSDL4J, XALAN, XERCES, COMMONS.collections, SLF4J, LOG4J, JACKSON, OBJECT_DIFF test.resources { filter(project("bpel-scripts").path_to("src/main/resources")).into(test.resources.target).run } - test.with LOG4J + test.with LOG4J, projects("bpel-obj") package :jar end @@ -213,6 +213,7 @@ define "ode" do define "bpel-nobj" do compile.with projects("utils", "bpel-obj"), JACKSON, LOG4J, SAXON, WSDL4J, COMMONS.collections, COMMONS.logging, OBJECT_DIFF package :jar + test.with XERCES end desc "Helper to covert from old OModel to new OModel" http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..e389884 --- /dev/null +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java @@ -0,0 +1,52 @@ +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.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.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.junit.Assert; + +public class MigrationTest extends GoodCompileTest{ + private static final Log __log = LogFactory.getLog(MigrationTest.class); + + public void runTest(String bpel) throws Exception { + try { + Class testClass = getClass(); + URL url = testClass.getResource(bpel); + URI uri = url.toURI(); + String path = uri.getPath(); + File bpelFile = new File(path); + String cbpPath = bpel.substring(0, bpel.lastIndexOf(".")) + ".cbp"; + String oldCbpPath = "/oldcbp" + cbpPath; + File oldCbpFile = new File(testClass.getResource(oldCbpPath).getFile()); + + OProcess nu = _compiler.compile2OProcess(bpelFile, 0); + __log.debug("compiled new OProcess " + nu.getFieldContainer()); + org.apache.ode.bpel.o.OProcess old = new Serializer(new FileInputStream(oldCbpFile)).readOProcess(); + OmOld2new mig = new OmOld2new(); + OProcess migrated = (OProcess) mig.migrateFrom(old); + __log.debug("migrated new OProcess " + migrated.getFieldContainer()); + TraverseObject traverse = new TraverseObject(); + EqualityVisitor visitor = new EqualityVisitor(nu); + visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); + traverse.accept(visitor); + boolean res = (Boolean)traverse.traverseObject(migrated); + System.out.print(visitor.getFalseChain()); + 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/cc9eab25/bpel-compiler/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/log4j.properties b/bpel-compiler/src/test/resources/log4j.properties index 0f6f26d..8fa716e 100644 --- a/bpel-compiler/src/test/resources/log4j.properties +++ b/bpel-compiler/src/test/resources/log4j.properties @@ -21,7 +21,7 @@ # # The logging properties used during tests.. # -log4j.rootLogger=INFO, file +log4j.rootLogger=DEBUG, file log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=target/test/test.log @@ -31,6 +31,3 @@ log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) % log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n - -log4j.category.org.apache.ode=INFO - http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp new file mode 100644 index 0000000..03dadd2 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp new file mode 100644 index 0000000..32dcb06 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp new file mode 100644 index 0000000..e730773 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp new file mode 100644 index 0000000..c150e7b Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp new file mode 100644 index 0000000..31d68a7 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp new file mode 100644 index 0000000..a02b782 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp new file mode 100644 index 0000000..6946d49 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp new file mode 100644 index 0000000..dcd62fa Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp new file mode 100644 index 0000000..29a20cb Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp new file mode 100644 index 0000000..31ed937 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp new file mode 100644 index 0000000..24d7cb8 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp new file mode 100644 index 0000000..b863716 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp new file mode 100644 index 0000000..28ed143 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp new file mode 100644 index 0000000..14f741e Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp new file mode 100644 index 0000000..ff81305 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp new file mode 100644 index 0000000..9aa1331 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp new file mode 100644 index 0000000..ef9111d Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp new file mode 100644 index 0000000..b6c1e53 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp new file mode 100644 index 0000000..da94085 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp new file mode 100644 index 0000000..e52debc Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp new file mode 100644 index 0000000..5c9f942 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp new file mode 100644 index 0000000..4f2fe37 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp new file mode 100644 index 0000000..08cfb1f Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp new file mode 100644 index 0000000..7a681bc Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp new file mode 100644 index 0000000..e4574b2 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp new file mode 100644 index 0000000..639ecb9 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp new file mode 100644 index 0000000..fb14ad5 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp new file mode 100644 index 0000000..4115a86 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp new file mode 100644 index 0000000..a74b264 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp new file mode 100644 index 0000000..1a3f861 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp new file mode 100644 index 0000000..0b45602 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp new file mode 100644 index 0000000..95160c3 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp new file mode 100644 index 0000000..ca3c67a Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp new file mode 100644 index 0000000..351d335 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp new file mode 100644 index 0000000..e523dcc Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp new file mode 100644 index 0000000..a4c1fdb Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp new file mode 100644 index 0000000..0d5c825 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp new file mode 100644 index 0000000..fbd7ce2 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp new file mode 100644 index 0000000..e6c145f Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp new file mode 100644 index 0000000..dfb8547 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp new file mode 100644 index 0000000..eb94f8c Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp new file mode 100644 index 0000000..05bb1e6 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp new file mode 100644 index 0000000..9fbb2b2 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp new file mode 100644 index 0000000..a6c8608 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp new file mode 100644 index 0000000..778806a Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp new file mode 100644 index 0000000..6d1ac15 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp new file mode 100644 index 0000000..18e1fa4 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp new file mode 100644 index 0000000..e602562 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp new file mode 100644 index 0000000..599fdbb Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp new file mode 100644 index 0000000..64da336 Binary files /dev/null and b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp differ http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..e5bf224 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java @@ -0,0 +1,142 @@ +package org.apache.ode.bpel.obj.migrate; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.apache.ode.bpel.obj.migrate.TraverseObject.HandleTable; + + +public abstract class AbstractObjectVisitor implements ObjectVisitor{ + protected ReplaceTable rtab = new ReplaceTable(1000, 0.8f); + protected TraverseObject traverse; + protected Map<Class, ObjectVisitor> visitors = new HashMap<Class, ObjectVisitor>(); + + @Override + public Object visited(Object obj) { + if (visitors.get(obj.getClass()) != null){ + return visitors.get(obj.getClass()).visited(obj); + } + return rtab.lookup(obj); + } + + @Override + public Object visit(Object obj) { + ObjectVisitor customVisitor = visitors.get(obj.getClass()); + if (customVisitor != null){ + return customVisitor.visit(obj); + } + Object n; + if (isMap(obj)){ + n = visitMap(obj); + }else if (isSet(obj)){ + n = visitSet(obj); + } + else if (isCollection(obj)){ + n = visitCollection(obj); + }else if (isArray(obj)){ + n = visitArray(obj); + }else{ + n = visitPojo(obj); + } + rtab.assign(obj, n); + return n; + } + private boolean isSet(Object obj) { + return obj instanceof Set; + } + + protected boolean isArray(Object old) { + return old.getClass().isArray(); + } + + protected boolean isCollection(Object old) { + return (old instanceof Collection) && !isSet(old); + } + + protected boolean isMap(Object old) { + return old instanceof Map; + } + @Override + public void setTraverse(TraverseObject traverseObject) { + this.traverse = traverseObject; + } + + @Override + public void addCustomVisitor(Class cls, ObjectVisitor visitor){ + visitors.put(cls, visitor); + } + + 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 Boolean visitSet(Object obj); + + /** + * Lightweight identity hash table which maps objects to replacement + * objects. + */ + private static class ReplaceTable { + + /* maps object -> index */ + private final HandleTable htab; + /* maps index -> replacement object */ + private Object[] reps; + + /** + * Creates new ReplaceTable with given capacity and load factor. + */ + ReplaceTable(int initialCapacity, float loadFactor) { + htab = new HandleTable(initialCapacity, loadFactor); + reps = new Object[initialCapacity]; + } + + /** + * Enters mapping from object to replacement object. + */ + void assign(Object obj, Object rep) { + int index = htab.assign(obj); + while (index >= reps.length) { + grow(); + } + reps[index] = rep; + } + + /** + * Looks up and returns replacement for given object. If no + * replacement is found, returns the lookup object itself. + */ + Object lookup(Object obj) { + int index = htab.lookup(obj); + return (index >= 0) ? reps[index] : obj; + } + + /** + * Resets table to its initial (empty) state. + */ + void clear() { + Arrays.fill(reps, 0, htab.size(), null); + htab.clear(); + } + + /** + * Returns the number of mappings currently in table. + */ + int size() { + return htab.size(); + } + + /** + * Increases table capacity. + */ + private void grow() { + Object[] newReps = new Object[(reps.length << 1) + 1]; + System.arraycopy(reps, 0, newReps, 0, reps.length); + reps = newReps; + } + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java new file mode 100644 index 0000000..c9fb45d --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java @@ -0,0 +1,7 @@ +package org.apache.ode.bpel.obj.migrate; + +public interface EqualityComparator { + + Boolean objectsEqual(Object obj1, Object obj2); + Boolean canHanle(Object obj); +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..14fdb39 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java @@ -0,0 +1,222 @@ +package org.apache.ode.bpel.obj.migrate; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +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 List<EqualityComparator> comparators = new LinkedList<EqualityComparator>(); + private List<String> falseChain = new LinkedList<String>(); + + protected Object other; + + public EqualityVisitor(){ + + } + public EqualityVisitor(Object other){ + this.other = other; + } + + 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 + + " and " + other.getClass() + "@" + System.identityHashCode(other) + " " + other); + Boolean res = (Boolean)super.visit(obj); + if (!res){ + falseChain.add(0, obj.getClass().getSimpleName()); + } + return res; + } + @SuppressWarnings("rawtypes") + @Override + public Boolean visitMap(Object obj) { + if (obj == other) return true; + if (other == null) return false; + Map m1 = (Map)obj; + Map m2 = null; + try{ + m2 = (Map)other; + }catch (ClassCastException e){ + return false; + } + if (m1.size() != m2.size()) return false; + Set ks1 = m1.keySet(); + Set ks2 = m2.keySet(); + for (Object k1 : ks1){ + Object k2 = contains(ks2, k1); + if (k2 == null){ + return false; + } + Object o1 = m1.get(k1); + Object o2 = m2.get(k2); + if (o1 == null){ + if (!(o2 == null)){ + return false; + } + } + Object pre = other; + other = o2; + Boolean e = (Boolean)traverse.traverseObject(o1); + if (!e) return false; + other = pre; + } + return true; + } + + @Override + @SuppressWarnings("rawtypes") + public Boolean visitSet(Object obj){ + if (obj == other) return true; + if (other == null) return false; + + Collection c1 = (Collection)obj; + Collection c2 = null; + try { + c2 = (Collection)other; + }catch(ClassCastException e){ + return false; + } + if (c1.size() != c2.size()) return false; + Iterator i1 = c1.iterator(); + while (i1.hasNext()){ + if (contains(c2, i1.next()) == null) return false; + } + return true; + } + + private Object contains(Collection c, Object t1) { + Iterator itor = c.iterator(); + Object t2; + Object pre = other; + while (itor.hasNext()){ + t2 = itor.next(); + other = t2; + if ((Boolean)traverse.traverseObject(t1, false)) { + return t2; + } + } + traverse.getHtab().assign(t1); + other = pre; + return null; + } + + @SuppressWarnings("rawtypes") + @Override + public Boolean visitCollection(Object obj) { + if (obj == other) return true; + if (other == null) return false; + + Collection c = (Collection)obj; + Collection c2 = null; + try { + c2 = (Collection)other; + }catch(ClassCastException e){ + 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(); + Object pre = other; + other = o2; + Boolean e = (Boolean)traverse.traverseObject(o1); + if (!e) return false; + other = pre; + } + return true; + } + + @Override + public Boolean visitArray(Object obj) { + throw new UnsupportedOperationException(); + } + + @Override + public Boolean visitPojo(Object obj) { + EqualityComparator customComp = getCustomComparator(obj); + if (customComp != null){ + return customComp.objectsEqual(obj, other); + } + if (obj == other) return true; + if (other == null) return false; + if (obj.getClass() != other.getClass()) return false; + try{ + obj.getClass().getDeclaredMethod("equals", Object.class); + return obj.equals(other); + }catch (NoSuchMethodException e){ + return equalityByReflection(obj); + } + } + + private EqualityComparator getCustomComparator(Object obj) { + for (EqualityComparator c : comparators){ + if (c.canHanle(obj)){ + return c; + } + } + return null; + } + public Boolean equalityByReflection(Object obj) { + //TODO if it's sufficient to just compare public fields? + Field[] fields = obj.getClass().getFields(); + Field[] fields2 = other.getClass().getFields(); + if (! Arrays.equals(fields, fields2)){ + return false; + } + + for (Field f : fields){ + if ((Modifier.TRANSIENT & f.getModifiers()) != 0){ + continue; //skip transient fields + } + try { + Object v1 = f.get(obj); + Object v2 = f.get(other); + if (v1 == null && v2 == null){ + continue; + } + if (v1 == null || v2 == null){ + return false; + } + Object pre = other; + other = v2; + Boolean res = (Boolean)traverse.traverseObject(v1); + if (!res){ + falseChain.add(f.getName()); + return false; + } + other = pre; + } catch (Exception e) { + //should not get here + e.printStackTrace(); + } + } + return true; + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..0985ac2 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java @@ -0,0 +1,30 @@ +package org.apache.ode.bpel.obj.migrate; + +import org.apache.ode.bpel.obj.ExtensibleImpl; + +public class ExtensibeImplEqualityComp implements EqualityComparator{ + private EqualityVisitor visitor; + + public ExtensibeImplEqualityComp() { + } + public ExtensibeImplEqualityComp(EqualityVisitor visitor){ + this.visitor = visitor; + } + + @Override + public Boolean objectsEqual(Object obj1, Object obj2) { + ExtensibleImpl esi = (ExtensibleImpl)obj1; + ExtensibleImpl esio = null; + try{ + esio = (ExtensibleImpl)obj2; + }catch(ClassCastException e){ + return false; + } + visitor.setOther(esio.getFieldContainer()); + return visitor.visit(esi.getFieldContainer()); + } + @Override + public Boolean canHanle(Object obj) { + return obj instanceof ExtensibleImpl; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..b9caa12 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java @@ -0,0 +1,12 @@ +package org.apache.ode.bpel.obj.migrate; + +public interface ObjectVisitor { + + Object visited(Object obj); + + Object visit(Object obj); + + void setTraverse(TraverseObject traverseObject); + + void addCustomVisitor(Class cls, ObjectVisitor visitor); +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 3f918c5..2f55f4f 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,9 +1,12 @@ 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.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -12,6 +15,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ode.bpel.obj.ExtensibleImpl; +import com.sun.xml.internal.ws.api.pipe.Tube; + public class OmOld2new { private static final Log __log = LogFactory.getLog(OmOld2new.class); @@ -107,14 +112,20 @@ public class OmOld2new { Object tn = initiateNew(old); assert tn instanceof ExtensibleImpl; ExtensibleImpl n = (ExtensibleImpl) tn; - Field[] fields = old.getClass().getFields(); + List<Field> fields = getAllFields(old.getClass()); Map<String, Object> fieldMap = n.getFieldContainer(); for (Field f : fields){ + if ((f.getModifiers() & Modifier.STATIC) != 0){ + continue; //skip static fields + } + f.setAccessible(true); try{ String fname = f.getName(); Object fvalue = f.get(old); if (fvalue != null){ fieldMap.put(fname, migrateFrom(fvalue)); + }else{ + fieldMap.put(fname, null); } } catch (Exception e) { RuntimeException rte = new RuntimeException("Error when try to construct corresponding new Omodel class from old one:" @@ -123,8 +134,21 @@ public class OmOld2new { throw rte; } } - return null; + return n; + } + private List<Field> getAllFields(Class cls) { + return getAllFieldsRec(cls, new ArrayList<Field>()); } + + private List<Field> getAllFieldsRec(Class cls, ArrayList<Field> fields) { + Class par = cls.getSuperclass(); + if (par != null){ + getAllFieldsRec(par, fields); + } + fields.addAll(Arrays.asList(cls.getDeclaredFields())); + return fields; + } + private Object initiateNew(Object old) { String clsName = old.getClass().getName(); String qcls = clsName.replace(".o.", ".obj."); http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..260ce92 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java @@ -0,0 +1,166 @@ +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/cc9eab25/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 new file mode 100644 index 0000000..4509ed1 --- /dev/null +++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java @@ -0,0 +1,92 @@ +package org.apache.ode.bpel.obj.migrate; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.namespace.QName; + +import org.apache.ode.bpel.obj.DebugInfo; +import org.junit.Test; + +public class DeepEqualityTest { + @Test + public void simpleListTest(){ + List<String> ls1 = new ArrayList<String>(); + ls1.add("Hello"); + ls1.add("world"); + List<String> ls2 = new ArrayList<String>(); + ls2.add("Hello"); + ls2.add("world"); + TraverseObject traverse = new TraverseObject(); + EqualityVisitor visitor = new EqualityVisitor(ls2); + traverse.accept(visitor); + assertEquals(Boolean.TRUE, traverse.traverseObject(ls1)); + ls1.add(0, "!"); + ls2.add("!"); + visitor.setOther(ls2); + assertEquals(Boolean.TRUE, traverse.traverseObject(ls1)); + } + + @Test + public void simpleSetTest(){ + Set<String> s1 = new LinkedHashSet(); + s1.add("hello"); + s1.add("world"); + Set<String> s2 = new LinkedHashSet(); + s2.add("world"); + s2.add("hello"); + + TraverseObject traverse = new TraverseObject(); + EqualityVisitor visitor = new EqualityVisitor(s2); + traverse.accept(visitor); + assertEquals(Boolean.TRUE, traverse.traverseObject(s1)); + + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void simpleMapTest(){ + Map<String, Object> m1 = new HashMap(); + m1.put("item1", "string1"); + m1.put("item2", new ArrayList()); + Map<String, Object> m2 = new HashMap(); + m2.put("item1", "string1"); + m2.put("item2", new ArrayList()); + + TraverseObject traverse = new TraverseObject(); + EqualityVisitor visitor = new EqualityVisitor(m2); + traverse.accept(visitor); + assertEquals(Boolean.TRUE, traverse.traverseObject(m1)); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void simpleTest() throws Exception{ + Map m1 = new HashMap(); + QName n1 = new QName("localpart"); + URI u1 = new URI("urn://a/uri"); + m1.put(u1, n1); + DebugInfo d1 = new DebugInfo("/a/path", 0, 1, m1); + m1.put("cyclic", d1); + + Map m2 = new HashMap(); + QName n2 = new QName("localpart"); + URI u2 = new URI("urn://a/uri"); + m2.put(u2, n2); + DebugInfo d2 = new DebugInfo("/a/path", 0, 1, m2); + m2.put("cylic", d2); + + TraverseObject traverse = new TraverseObject(); + EqualityVisitor visitor = new EqualityVisitor(d2); + visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); + traverse.accept(visitor); + assertEquals(Boolean.TRUE, traverse.traverseObject(d1)); + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java index d7c3cc7..867da32 100644 --- a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java +++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java @@ -1,5 +1,7 @@ package org.apache.ode.bpel.obj.migrate; +import static org.junit.Assert.assertEquals; + import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; @@ -10,7 +12,6 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.ode.bpel.o.DebugInfo; import org.apache.ode.bpel.o.OProcess; import org.apache.ode.bpel.o.Serializer; import org.junit.Test; @@ -21,8 +22,14 @@ public class MigrationTest { public void runTest(File file) throws Exception{ OProcess old = new Serializer(new FileInputStream(file)).readOProcess(); +// OProcess old2 = new Serializer(new FileInputStream(file)).readOProcess(); +// TraverseObject traverse = new TraverseObject(); +// EqualityVisitor visitor = new EqualityVisitor(old); +// traverse.accept(visitor); +// assertEquals(Boolean.TRUE, traverse.traverseObject(old2)); + OmOld2new mig = new OmOld2new(); - mig.migrateFrom(old); + org.apache.ode.bpel.obj.OProcess migrated = (org.apache.ode.bpel.obj.OProcess)mig.migrateFrom(old); } @Test http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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 new file mode 100644 index 0000000..2b02abc --- /dev/null +++ b/bpel-nobj/src/test/resources/log4j.properties @@ -0,0 +1,13 @@ +log4j.rootLogger=DEBUG, file, stdout + +# Console appender +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.File=target/test/test.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n + +
