diff --git a/3rdParty/com.google.guava/.classpath b/3rdParty/com.google.guava/.classpath
new file mode 100644
index 00000000..8195af2b
--- /dev/null
+++ b/3rdParty/com.google.guava/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/com.google.guava/.project b/3rdParty/com.google.guava/.project
new file mode 100644
index 00000000..1c8c4e3e
--- /dev/null
+++ b/3rdParty/com.google.guava/.project
@@ -0,0 +1,28 @@
+
+
+ com.google.guava
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/com.google.guava/.settings/org.eclipse.jdt.core.prefs b/3rdParty/com.google.guava/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f42de363
--- /dev/null
+++ b/3rdParty/com.google.guava/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/com.google.guava/META-INF/MANIFEST.MF b/3rdParty/com.google.guava/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..670284bf
--- /dev/null
+++ b/3rdParty/com.google.guava/META-INF/MANIFEST.MF
@@ -0,0 +1,60 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Guava: Google Core Libraries for Java
+Bundle-SymbolicName: com.google.guava
+Bundle-Version: 14.0.1
+Bundle-ClassPath: guava-14.0.1.jar
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: com.google.common.annotations;version="14.0.1",
+ com.google.common.base;version="14.0.1";uses:="javax.annotation",
+ com.google.common.cache;version="14.0.1";
+ uses:="com.google.common.collect,
+ com.google.common.util.concurrent,
+ javax.annotation,
+ com.google.common.base,
+ com.google.common.primitives,
+ sun.misc",
+ com.google.common.collect;version="14.0.1";
+ uses:="com.google.common.base,
+ javax.annotation,
+ com.google.common.primitives,
+ com.google.common.math",
+ com.google.common.eventbus;version="14.0.1";
+ uses:="com.google.common.collect,
+ com.google.common.cache,
+ com.google.common.util.concurrent,
+ com.google.common.base,
+ com.google.common.reflect,
+ javax.annotation",
+ com.google.common.hash;version="14.0.1";
+ uses:="com.google.common.primitives,
+ com.google.common.base,
+ javax.annotation,
+ com.google.common.math",
+ com.google.common.io;version="14.0.1";
+ uses:="javax.annotation,
+ com.google.common.base,
+ com.google.common.math,
+ com.google.common.hash,
+ com.google.common.collect,
+ com.google.common.primitives",
+ com.google.common.math;version="14.0.1";uses:="com.google.common.base,com.google.common.primitives,javax.annotation",
+ com.google.common.net;version="14.0.1";
+ uses:="javax.annotation,
+ com.google.common.base,
+ com.google.common.hash,
+ com.google.common.io,
+ com.google.common.primitives,
+ com.google.common.collect",
+ com.google.common.primitives;version="14.0.1";uses:="javax.annotation,com.google.common.base,sun.misc",
+ com.google.common.reflect;version="14.0.1";uses:="javax.annotation,com.google.common.base,com.google.common.collect",
+ com.google.common.util.concurrent;version="14.0.1";
+ uses:="com.google.common.base,
+ javax.annotation,
+ com.google.common.collect,
+ javax.inject,
+ com.google.common.primitives,
+ com.google.common.math"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Import-Package: javax.annotation;resolution:=optional,
+ javax.inject;resolution:=optional
diff --git a/3rdParty/com.google.guava/build.properties b/3rdParty/com.google.guava/build.properties
new file mode 100644
index 00000000..d1496600
--- /dev/null
+++ b/3rdParty/com.google.guava/build.properties
@@ -0,0 +1,2 @@
+bin.includes = META-INF/,\
+ guava-14.0.1.jar
diff --git a/3rdParty/com.google.guava/guava-14.0.1.jar b/3rdParty/com.google.guava/guava-14.0.1.jar
new file mode 100644
index 00000000..3a3d9258
Binary files /dev/null and b/3rdParty/com.google.guava/guava-14.0.1.jar differ
diff --git a/3rdParty/com.google.guava/pom.xml b/3rdParty/com.google.guava/pom.xml
new file mode 100644
index 00000000..c75dc6c9
--- /dev/null
+++ b/3rdParty/com.google.guava/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.4.0-SNAPSHOT
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ com.google.guava
+ 14.0.1
+
+ Google Guava Library
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.classpath b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.classpath
new file mode 100644
index 00000000..ad32c83a
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.project b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.project
new file mode 100644
index 00000000..b9e908c6
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.project
@@ -0,0 +1,28 @@
+
+
+ com.kdmanalytics.kdm.repositoryMerger
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.settings/org.eclipse.jdt.core.prefs b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..dc5af0dc
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Aug 31 09:56:20 EDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/META-INF/MANIFEST.MF b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..ab1aaee3
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Repository Merger
+Bundle-SymbolicName: com.kdmanalytics.kdm.repositoryMerger
+Bundle-Version: 1.16.0.qualifier
+Bundle-Activator: com.kdmanalytics.kdm.repositoryMerger.Activator
+Bundle-Vendor: KDM Analytics Inc.
+Require-Bundle: org.apache.commons.lang3;bundle-version="[3.0.0,4.0.0)",
+ net.sf.trove4j;bundle-version="3.0.3",
+ org.openrdf.sesame;bundle-version="[2.4.0,2.5.0)",
+ com.google.guava;bundle-version="[14.0.1,15.0.0)",
+ org.apache.log4j;bundle-version="[1.2.13,2.0.0)",
+ com.lexicalscope.jewelcli;bundle-version="[0.8.5,1.0.0)",
+ org.eclipse.ui,
+ org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Eclipse-RegisterBuddy: com.lexicalscope.jewelcli
+Bundle-ActivationPolicy: lazy
+Export-Package: com.kdmanalytics.kdm.repositoryMerger,com.kdmanalytics
+ .kdm.repositoryMerger.Utilities,com.kdmanalytics.kdm.repositoryMerger
+ .linkconfig,com.kdmanalytics.kdm.repositoryMerger.ranges
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Activator.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Activator.class
new file mode 100644
index 00000000..87e42a19
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Activator.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class
new file mode 100644
index 00000000..c9f55764
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class
new file mode 100644
index 00000000..0ad686d6
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodState.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodState.class
new file mode 100644
index 00000000..51c221fd
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/MethodState.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class
new file mode 100644
index 00000000..704a49c8
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class
new file mode 100644
index 00000000..a4c17e58
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class
new file mode 100644
index 00000000..23f9aa3d
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class
new file mode 100644
index 00000000..f689d914
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class
new file mode 100644
index 00000000..34fe65e2
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class
new file mode 100644
index 00000000..8ef8db04
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class
new file mode 100644
index 00000000..f3d002f7
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class
new file mode 100644
index 00000000..39daed60
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class
new file mode 100644
index 00000000..d02b9306
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class
new file mode 100644
index 00000000..6c6578fa
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class
new file mode 100644
index 00000000..273e5bac
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class
new file mode 100644
index 00000000..e188dca5
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class
new file mode 100644
index 00000000..3cb662c8
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class
new file mode 100644
index 00000000..244cc6db
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class
new file mode 100644
index 00000000..47449dc8
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class
new file mode 100644
index 00000000..e0c82678
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class
new file mode 100644
index 00000000..1250c763
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class
new file mode 100644
index 00000000..c0ae8557
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class
new file mode 100644
index 00000000..c68ff564
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class
new file mode 100644
index 00000000..d3b8e200
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/config/cxx.cfg b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/bin/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/build.properties b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/build.properties
new file mode 100644
index 00000000..34d2e4d2
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/pom.xml b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/pom.xml
new file mode 100644
index 00000000..5c859533
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/pom.xml
@@ -0,0 +1,19 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.toif
+ plugins
+ 1.16.0-SNAPSHOT
+
+
+ com.kdmanalytics.toif.compile
+ com.kdmanalytics.kdm.repositoryMerger
+
+ eclipse-plugin
+
+ Repository Merger
+
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Activator.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Activator.java
new file mode 100644
index 00000000..3884d727
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Activator.java
@@ -0,0 +1,50 @@
+package com.kdmanalytics.kdm.repositoryMerger;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "com.kdmanalytics.kdm.repositoryMerger"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.java
new file mode 100644
index 00000000..24c7a372
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.java
@@ -0,0 +1,95 @@
+package com.kdmanalytics.kdm.repositoryMerger;
+
+import gnu.trove.map.hash.THashMap;
+
+import java.util.Map;
+
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.MergerURI;
+
+
+/** The GlobalMap is used to store global information for the link/merge
+ * It is not complete KDM, but just a subset of data needed for the merge.
+ *
+ */
+public class GlobalMap
+{
+ /**
+ *
+ */
+ public static final int ROOTID = 0;
+
+ /**
+ *
+ */
+ private URI root = null;
+
+ private Map> map = null;
+
+ /**
+ *
+ */
+ public GlobalMap()
+ {
+ map = new THashMap>();
+ root = new MergerURI(MergerURI.KdmModelNS, ""+ROOTID);
+ //root = SimpleValueFactory.getSimpleValueFactory().createURI(RDFInterface.modelNS, ""+ROOTID);
+ Map values = new THashMap();
+ map.put(root, values);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public URI getRoot()
+ {
+ return root;
+ }
+
+ /**
+ *
+ * @param globalNode
+ * @param id
+ * @return
+ */
+ public boolean containsId(URI parentURI, Value id)
+ {
+ if(!map.containsKey(parentURI)) return false;
+ Map values = map.get(parentURI);
+ if(values.containsKey(id)) return true;
+ return false;
+ }
+
+ /** Add the child with the given id and globalID to the tree
+ *
+ * @param parentURI
+ * @param childID
+ * @param childURI
+ */
+ public void add(URI parentURI, Value childID, URI childURI)
+ {
+ Map values = map.get(parentURI);
+ if(values == null)
+ {
+ values = new THashMap();
+ map.put(parentURI, values);
+ }
+ values.put(childID, childURI);
+ }
+
+ /**
+ *
+ * @param parentURI
+ * @param id
+ * @return
+ */
+ public URI get(URI parentURI, Value id)
+ {
+ if(!map.containsKey(parentURI)) return null;
+ Map values = map.get(parentURI);
+ return values.get(id);
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.java
new file mode 100644
index 00000000..822bdfce
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.java
@@ -0,0 +1,1958 @@
+
+package com.kdmanalytics.kdm.repositoryMerger;
+
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.set.hash.THashSet;
+import info.aduna.iteration.CloseableIteration;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.Stack;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.log4j.Logger;
+import org.openrdf.model.Literal;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.StatementImpl;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.IntUtils;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants.KdmPredicate;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants.KdmType;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants.WorkbenchPredicate;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants.WorkbenchStereotype;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmLiteral;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.MergerURI;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.MergerUtilities;
+import com.kdmanalytics.kdm.repositoryMerger.linkconfig.MergeConfig;
+import com.kdmanalytics.kdm.repositoryMerger.ranges.Range;
+import com.kdmanalytics.kdm.repositoryMerger.ranges.RangeSet;
+
+/**
+ *
+ * @author Ken Duck
+ *
+ */
+class MethodOverrides
+{
+
+ private final String link;
+
+ private MethodState state;
+
+ public MethodOverrides(String link)
+ {
+ this.link = link;
+ state = MethodState.DECLARATION;
+ }
+
+ /**
+ *
+ * @return
+ */
+ public final String getLink()
+ {
+ return link;
+ }
+
+ /**
+ *
+ * @return
+ */
+ public final MethodState getState()
+ {
+ return state;
+ }
+
+ /**
+ *
+ * @param state
+ */
+ public final void setState(MethodState state)
+ {
+ this.state = state;
+ }
+
+}
+
+/**
+ * Used to indicate whether the IMPLEMENTATION of a method has been committed
+ * yet
+ *
+ * @author Ken Duck
+ *
+ */
+enum MethodState
+{
+ DECLARATION, IMPLEMENTATION
+};
+
+/**
+ * Merge multiple repositories into a common repository. The destination
+ * repository is actually a file target, not a memory or disk repository, which
+ * means all merging needs to be done on the fly, with a minimum of data kept in
+ * memory.
+ *
+ * The individual repositories being loaded are provided as KdmRepository
+ * instances.
+ *
+ * Output may be performed in two ways: * NTRIPLES format * MODIFIED_NTRIPLES
+ * which is a more compressed representation
+ *
+ */
+public class RepositoryMerger
+{
+
+ public static final int ACTION_ELEMENT_NAMES = 0x10;
+
+ private static final String LINK_ID = "link:id";
+
+ /**
+ * log4j logger.
+ */
+ private static final Logger LOG = Logger.getLogger(RepositoryMerger.class);
+
+ public static final int LOWMEM = 0x0C;
+
+ public static final int MODIFIED_NTRIPLES = 0x02;
+
+ public static final int NO_FLOWS = 0x04;
+
+ public static final int NO_LOCALS = 0x08;
+
+ // 0x20
+ // 0x40
+ // 0x80
+
+ public static final int NTRIPLES = 0x01;
+
+ /**
+ * A switch for testing purposes. Should be false for non test runs.
+ */
+ private static final boolean preserveIDs = false;
+
+ /**
+ * This switch is used to ensure an error message is written only once.
+ */
+ private static boolean preservingURIs = true;
+
+ public static final String UID_RANGES_ATTRIBUTE = "__KNT_UIDs";
+
+ /**
+ * The codeAssembly that all codeModel elements from the source repository
+ * will be written into.
+ */
+ private final URI assembly;
+
+ /**
+ * Case Sensitive KdmTypes
+ */
+ final EnumSet caseSensitive = EnumSet.of(KdmType.PACKAGE, KdmType.SHARED_UNIT, KdmType.BINARY_FILE, KdmType.CONFIGURATION,
+ KdmType.DEPENDS_ON, KdmType.DIRECTORY, KdmType.EXECUTABLE_FILE, KdmType.IMAGE, KdmType.INVENTORY_CONTAINER, KdmType.INVENTORY_ELEMENT,
+ KdmType.INVENTORY_ITEM, KdmType.PROJECT, KdmType.RESOURCE_DESCRIPTION, KdmType.SOURCE_FILE);
+
+ /**
+ * The codeModel that is created.
+ */
+ private final URI codeModel;
+
+ private final Pattern commaSplitter;
+
+ // // Disabled for C. May re-enable for C++
+ // private static final String CLASS_MODEL_NAME = "Class Structure";
+
+ /**
+ * Configuration file that defines how various elements are merged together.
+ */
+ private final MergeConfig config;
+
+ /**
+ * Reusable URI for the "contains" relationship
+ */
+ private final URI contains = new MergerURI(MergerURI.KdmNS, "contains");
+
+ /**
+ * Map of new ranges by URI
+ */
+ private final Map deferredRanges;
+
+ /**
+ * List of statements whose output is deferred until the URI "object" of the
+ * statement can be resolved to the "newURI" that will be assigned to it.
+ * This list is reset every .kdmo object file that is processed.
+ */
+ private List deferredStatements;
+
+ /**
+ * Factory with which to generate URIs
+ */
+ private ValueFactory factory;
+
+ private int format = 1;
+
+ /**
+ * This is a double key map, where the first key is the destination URI, and
+ * the second is a unique link:id within that destination. It is used in the
+ * merging process to locate existing elements in the target repository with
+ * which to merge. An example would be finding a SharedUnit that is already
+ * within the repository which we are merging the same SharedUnit from
+ * another object with.
+ *
+ */
+ private final GlobalMap globals;
+
+ /**
+ * Use this to mark elements that should remain hidden. This includes at
+ * least:
+ *
+ * * LanguageUnit * InventoryModel
+ *
+ */
+ private URI hiddenStereotype;
+
+ /**
+ * The new ID numbers are assigned from here. Start counting at 1 (one)
+ * because the root is id 0.
+ *
+ */
+ private long id = GlobalMap.ROOTID;
+
+ /**
+ * The localIdMap is a map of the URI contained within the kdmo file to the
+ * URI that it is translated to in the new linked file.
+ *
+ * The map is refreshed for every kdmo file being loaded.
+ */
+ private Map localIdMap;
+
+ /**
+ * Use this to mark the StructureModel as being updateable by Workbench
+ * probes.
+ *
+ */
+ private URI managedStereotype;
+
+ /**
+ * On a per-merge basis, what is the maximum UID found.
+ */
+ private long maxUID = 0;
+
+ /**
+ * Utilities for the repository (per .kdmo object)
+ */
+ private MergerUtilities mergerUtils;
+
+ /**
+ * A map of models by their type names to allow us to identify the models
+ * that need to be merged together.
+ *
+ */
+ private final Map modelByType;
+
+ /**
+ * Set of nodes that did not get link IDs (used for error messaging)
+ */
+ private Set noLinkId;
+
+ /**
+ * The StructureAssembly is a class which gathers the information required
+ * for generating a StructureModel for the binary. It then dumps the new
+ * Structure on shutdown.
+ */
+ // // Disabled for C. May re-enable for C++
+ // private StructureAssembly structure;
+
+ /**
+ */
+ private final StatementWriter output;
+
+ /**
+ * Path of the file being analysed
+ */
+ private String path;
+
+ /**
+ * Repository being merged FROM
+ */
+ private Repository repository;
+
+ // // Disabled for C. May re-enable for C++
+ // /** Set to true to generate an object oriented model
+ // */
+ // private boolean ooModel = true;
+ //
+ // /** Set to true to generate a file based model
+ // */
+ // private boolean fileModel = false;
+
+ private Map reverseLocalIdMap;
+
+ private URI segmentURI;
+
+ private final Pattern semiColonSplitter;
+
+ /**
+ * Indicate how much to offset UID values during integration.
+ */
+ private long uidOffset = 0;
+
+ /**
+ * Set to true to do extra data validation.
+ */
+ private boolean validate = false;
+
+ /**
+ * Store data used in validation stages
+ */
+ private ValidationData validationData;
+
+ /**
+ * Instantiate the merger. This causes some basic top level elements to be
+ * created, including the Segment, a CodeModel, and the CodeAssembly for the
+ * linked code (binary/library/etc.)
+ *
+ * Various lists and maps are instantiated that are to contain the minimal
+ * amount of data required to ensure linking is successful.
+ *
+ * @param mergeConfig
+ * @param out
+ * @param assemblyName
+ * The name of the CodeAssembly to "link" everything into
+ */
+ public RepositoryMerger(MergeConfig mergeConfig, PrintWriter out, int format, String assemblyName)
+ {
+ commaSplitter = Pattern.compile(",");
+ semiColonSplitter = Pattern.compile(";");
+
+ config = mergeConfig;
+
+ globals = new GlobalMap();
+ modelByType = new THashMap();
+ deferredRanges = new THashMap();
+ output = new StatementWriter(out, format);
+ this.format = format;
+
+ segmentURI = new MergerURI(MergerURI.KdmModelNS, 0 + "");
+ // Write the segment
+ ++id;
+ output.print(segmentURI, KdmPredicate.KDM_TYPE.toURI(), KdmType.SEGMENT.toLiteral());
+ output.print(segmentURI, KdmPredicate.NAME.toURI(), new KdmLiteral("root"));
+ // Set the UID for the node
+ output.print(segmentURI, WorkbenchPredicate.UID.toURI(), new KdmLiteral("" + uidOffset));
+ deferredRanges.put(segmentURI, new RangeSet((int) uidOffset));
+ ++uidOffset;
+
+ codeModel = getDestinationModel("code/CodeModel");
+
+ // Initialize the stereotypes required by the workbench
+ initializeWorkbenchStereotypes(segmentURI);
+
+ // Write the CodeAssembly
+ assembly = new MergerURI(MergerURI.KdmModelNS, "" + id);
+ ++id;
+ output.print(assembly, KdmPredicate.KDM_TYPE.toURI(), KdmType.CODE_ASSEMBLY.toLiteral());
+ output.print(assembly, KdmPredicate.NAME.toURI(), new KdmLiteral(assemblyName));
+ output.print(codeModel, KdmPredicate.CONTAINS.toURI(), assembly);
+ // Set the UID for the node
+ output.print(assembly, WorkbenchPredicate.UID.toURI(), new KdmLiteral("" + uidOffset));
+ deferredRanges.put(assembly, new RangeSet((int) uidOffset));
+ ++uidOffset;
+
+ // Substitute the CodeAssembly for the CodeModel
+ modelByType.put("code/CodeModel", assembly);
+ }
+
+ /**
+ * Add the specified range to all of the ancestors in the current ancestor
+ * path, which should go straight up to the segment.
+ *
+ * @param ancestors
+ * @param range
+ */
+ private void addDeferredRanges(Stack ancestors, Range range)
+ {
+ for (int i = ancestors.size() - 1; i >= 0; --i)
+ {
+ final URI parent = ancestors.get(i);
+ RangeSet ranges = null;
+ if (deferredRanges.containsKey(parent))
+ {
+ ranges = deferredRanges.get(parent);
+ }
+ else
+ {
+ ranges = new RangeSet();
+ deferredRanges.put(parent, ranges);
+ }
+ ranges.add(range);
+ }
+ }
+
+ /**
+ * Close the merge session. This will output some key information that was
+ * built from information from all merged objects, including:
+ *
+ * 1. Segment and CodeModel ranges. 2. Class model for c++ // Currently
+ * disabled 2. Link information
+ *
+ * This MUST be called to complete the output
+ */
+ public void close()
+ {
+ // Update the CodeModel ranges
+ final RangeSet cmRanges = deferredRanges.get(codeModel);
+ final RangeSet assRanges = deferredRanges.get(assembly);
+ cmRanges.addAll(assRanges);
+
+ // Update segment ranges
+ final RangeSet sRanges = deferredRanges.get(segmentURI);
+ sRanges.add(new Range(0, uidOffset));
+
+ // Write the deferred ranges
+ for (final Entry entry : deferredRanges.entrySet())
+ {
+ final URI element = entry.getKey();
+ final RangeSet ranges = entry.getValue();
+ // // Disabled for C. May re-enable for C++
+ // structure.addRanges(element, ranges);
+ output.print(element, WorkbenchPredicate.WORKBENCH_RANGES.toURI(), new KdmLiteral(ranges.toString()));
+ }
+ // // Disabled for C. May re-enable for C++
+ // // Write the structure
+ // // FIXME: Can only currently create one type of model. This should be
+ // updated
+ // // to allow generation of multiple model types.
+ // URI structureModel = null;
+ //
+ // // Override the default name for the structure model if it is object
+ // oriented
+ // if(ooModel) structureModel =
+ // getDestinationModel(KdmType.STRUCTURE_MODEL.toString(),
+ // CLASS_MODEL_NAME);
+ // else structureModel =
+ // getDestinationModel(KdmType.STRUCTURE_MODEL.toString());
+ //
+ // id = structure.generateStructure(structureModel, id);
+ output.close();
+ }
+
+ /**
+ * Copy the specified node and its children. Any non-containment implicit
+ * "relation" (where the object is a URI) should be deferred till all nodes
+ * have been transfered.
+ *
+ * Part of the copy method is assigning a new id to the node and note the
+ * translation so that "relations" may be redirected at the end of the
+ * merge.
+ *
+ * Also involved is applying the UID offset to all contained UIDs to ensure
+ * there is no collision with the UIDs of other elements.
+ *
+ * @param dst
+ * @param node
+ * @param remember
+ * is set to true if these nodes should be added to the globals
+ * (copy as a result of a merge). Remember is not set to true if
+ * we are writing a CompilationUnit, for example, but will be for
+ * a SharedUnit.
+ * @throws RepositoryException
+ */
+ private void copy(URI dst, URI node, boolean remember) throws RepositoryException
+ {
+ // If the element is already in the local map, then we have
+ // already handled the node. This will only happen if there
+ // is a problem with the input data.
+ if (localIdMap.containsKey(node))
+ {
+ LOG.error("Attempting to re-copy element " + node + " into parent " + dst);
+ debugPathToRoot(node);
+ throw new UnsupportedOperationException("Attempting to re-copy element " + node + " into parent " + dst);
+ }
+
+ // In order to successfully merge methods/functions, we need to track
+ // some particular
+ // information about the method.
+ final KdmType type = KdmType.valueOfKdmString(mergerUtils.getRDFAttribute(node, KdmPredicate.KDM_TYPE.toString()));
+
+ try
+ {
+ // Generate a new URI for the element. All elements get new URIs
+ // to ensure there is no overlap with existing URIs.
+ final URI newURI = generateLinkerURI(node);
+
+ // Add the mapping to the localIdMap. This data is only required
+ // in the local map, since different objects CANNOT directly
+ // reference each other. References between objects are resolved
+ // by the RelationshipLinker.
+ localIdMap.put(node, newURI);
+ reverseLocalIdMap.put(newURI, node);
+
+ // Record a set of all contained children.
+ final Set children = new THashSet();
+
+ // Remember the kdmType of this node. It will help determine how
+ // the data is handled.
+ String kdmType = null;
+
+ // Keep a list of statements found.
+ final List stmts = new ArrayList();
+
+ // // Disabled for C. May re-enable for C++
+ // // By default we hide a class in the StructureModel. If it has a
+ // UID then we know it
+ // // is not hidden for the purposes of the structure model.
+ // boolean hiddenClass = true;
+
+ // Get all triples with the node as the subject
+ final RepositoryConnection con = repository.getConnection();
+ final CloseableIteration statements = con.getStatements(node, null, null, true);
+ try
+ {
+ long validateOriginalUid = 0;
+ long validateOriginalLastUid = 0;
+ long validateUid = 0;
+ long validateLastUid = 0;
+
+ // Get all statements and handle them in the appropriate manner
+ while (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ final URI predicate = st.getPredicate();
+ final Value object = st.getObject();
+
+ // If the KDMType is not expected to be linked, then
+ // return from here.
+ if (skip(predicate, object))
+ {
+ return;
+ }
+
+ final String predicateName = predicate.getLocalName();
+ // If the object is a URI and is not a contains then we
+ // want to defer the writing until we know what the
+ // object ID is being rewritten to.
+ //
+ // Contains are written at the beginning of "copy"
+ if (object instanceof URI)
+ {
+ // Several predicates actually indicate a contains.
+ if ("contains".equals(predicateName))
+ {
+ if (!skipChild((URI) object))
+ {
+ children.add((URI) object);
+ }
+ }
+ else if ("__item".equals(predicateName))
+ {
+ children.add((URI) object);
+ }
+ else if ("__index".equals(predicateName))
+ {
+ children.add((URI) object);
+ }
+ else
+ {
+ // LOG.debug("Defer " + node + "(" + newURI + ") " +
+ // predicate + " " + object);
+ deferredStatements.add(new StatementImpl(newURI, predicate, object));
+
+ // Run this code for advanced data validation
+ if (validate)
+ {
+ if (KdmPredicate.FROM.toString().equals(predicateName))
+ {
+ validationData.setRelationshipFrom(node, (URI) object);
+ }
+ else if (KdmPredicate.TO.toString().equals(predicateName))
+ {
+ validationData.setRelationshipTo(node, (URI) object);
+ }
+ }
+
+ }
+ continue;
+ }
+
+ // Handle compressed representation data
+ if ("SourceRef".equals(predicateName))
+ {
+ deferredStatements.add(new StatementImpl(newURI, predicate, object));
+ continue;
+ }
+
+ // Only print ActionElement names if required
+ if (((format & ACTION_ELEMENT_NAMES) == 0) && KdmPredicate.NAME.toString().equals(predicateName)
+ && KdmConstants.KdmType.ACTION_ELEMENT.toString().equals(type))
+ {
+ continue;
+ }
+
+ // When merging, in most cases we are merely visiting
+ // children
+ // to see if they match up or new ones need copying.
+
+ // If there is a link:id try to add this to the global map.
+ // Don't write it to the file, though. This link:id
+ // will be used for future merges, so only needs to be
+ // done if we are going to merge with this node (check the
+ // remember boolean).
+ if (remember && LINK_ID.equals(predicateName))
+ {
+ globals.add(dst, getLinkId(node), newURI);
+ continue;
+ }
+
+ // Some element outputs depend on KDM type. Remember the
+ // type.
+ if (KdmPredicate.KDM_TYPE.toString().equals(predicateName))
+ {
+ kdmType = object.stringValue();
+ }
+
+ // If this is a UID related triple, add the offset
+ if (WorkbenchPredicate.UID.toString().equals(predicateName)
+ || WorkbenchPredicate.LAST_UID.toString().equals(predicateName))
+ {
+ // If this is the lastUID and it is redundant, then skip
+ // it
+ if (WorkbenchPredicate.LAST_UID.toString().equals(predicateName))
+ {
+ final long myLastUid = Long.parseLong(object.stringValue());
+ final long myUid = Long.parseLong(mergerUtils.getRDFAttribute((URI) st.getSubject(), WorkbenchPredicate.UID.toString()));
+ if (myUid == myLastUid)
+ {
+ continue;
+ }
+ if (myLastUid < myUid)
+ {
+ LOG.error("Invalid range for " + node + " (" + myUid + "-" + myLastUid + ")");
+ }
+ }
+
+ // // Disabled for C. May re-enable for C++
+ // hiddenClass = false; // There us a UID. If this is a
+ // class do not hide it.
+
+ // Get the uid/lastUid
+ long uid = Long.parseLong(object.stringValue());
+
+ // Remember the original values for validation
+ if (WorkbenchPredicate.UID.toString().equals(predicateName))
+ validateOriginalUid = uid;
+ else validateOriginalLastUid = uid;
+
+ // otherwise get the appropriate UID
+ if (uid <= 0)
+ {
+ LOG.error("Linked object contains node with an invalid UID <= 0");
+ }
+ uid += uidOffset;
+ if (uid > maxUID)
+ {
+ maxUID = uid;
+ }
+
+ // Remember the converted UIDs for validation purposes
+ if (WorkbenchPredicate.UID.toString().equals(predicateName))
+ validateUid = uid;
+ else validateLastUid = uid;
+
+ final Literal newUid = new KdmLiteral(Long.toString(uid));
+
+ stmts.add(new StatementImpl(newURI, predicate, newUid));
+
+ // If we are performing validation, we want to remember
+ // UIDs
+ if (validate)
+ {
+ validationData.setUid(node, object);
+ }
+ continue;
+ }
+
+ // Buffer the remaining statements for printing
+ stmts.add(new StatementImpl(newURI, predicate, object));
+ }
+
+ // Validate the UID, since they appear to be having troubles
+ if (validate)
+ {
+ if (validateLastUid > 0 && validateLastUid < validateUid)
+ {
+ if (validateOriginalLastUid < validateOriginalUid)
+ {
+ LOG.error("Invalid original range for " + node + " (" + validateOriginalUid + "-" + validateOriginalLastUid + ")");
+ }
+ else
+ {
+ LOG.error("Invalid converted range for " + node + " (" + validateUid + "-" + validateLastUid + ")");
+ }
+ }
+ }
+
+ }
+ finally
+ {
+ statements.close(); // make sure the result object is closed
+ // properly
+ con.close();
+ }
+
+ // At this point all statements have been loaded. We know the
+ // element type. Some triples are being deferred (implicit
+ // relationships).
+
+ // Set to hidden if required
+ if ("code/LanguageUnit".equals(kdmType))
+ {
+ output.print(newURI, KdmPredicate.STEREOTYPE.toURI(), hiddenStereotype);
+ }
+
+ // // Disabled for C. May re-enable for C++
+ // // Some elements need to be passed to the StructureAssembly
+ // // for successful generation of the StructureModel.
+ //
+ // // FIXME: Can only currently create one type of model. This
+ // should be updated
+ // // to allow generation of multiple model types.
+ //
+ // // OO models are based on classes
+ // if(ooModel)
+ // {
+ // if("code/ClassUnit".equals(kdmType))
+ // {
+ // if(!hiddenClass)
+ // {
+ // structure.add(newURI, stmts);
+ // }
+ // }
+ // }
+ //
+ // // File models are based on SharedUnits and CompilationUnits
+ // else if(fileModel)
+ // {
+ // if("code/CompilationUnit".equals(kdmType))
+ // structure.add(newURI, stmts);
+ // if("code/SharedUnit".equals(kdmType))
+ // structure.add(newURI, stmts);
+ // }
+ //
+ // // Both model types require the source path
+ // if("source/SourceFile".equals(kdmType))
+ // structure.add(newURI, stmts);
+
+ // Write the stored statements.
+ for (final Statement stmt : stmts)
+ {
+ output.print((URI) stmt.getSubject(), stmt.getPredicate(), stmt.getObject());
+ }
+
+ // Setup the contains. This call is here because we may have
+ // bailed out earlier if this is a node that is not being
+ // added to the linked repository.
+ //
+ // Also, we want the contains to be after anything else about
+ // the node.
+ output.print(dst, contains, newURI);
+
+ // Recursively copy the child nodes.
+ for (final URI child : children)
+ {
+ copy(newURI, child, remember);
+ }
+ }
+ finally
+ {
+ }
+ }
+
+ /**
+ * Copy the specified child into the target node, and merge the UID ranges.
+ * This is only done for the top level of a copy, since the range spread for
+ * these elements are already known absolutely.
+ *
+ * @param dst
+ * Destination URI the element is being added to
+ * @param node
+ * Source URI being added
+ * @param remember
+ * is set to true if these nodes should be added to the globals
+ * (copy as a result of a merge). Remember is not set to true if
+ * we are writing a CompilationUnit, for example, but will be for
+ * a SharedUnit.
+ *
+ * @throws RepositoryException
+ */
+ private void copyAndMergeRange(URI dst, URI node, boolean remember) throws RepositoryException
+ {
+ // First copy all of the elements. All of the ranges in a copy
+ // are offset by the same amount, which preserves the containment
+ // information provided by the ranges.
+ copy(dst, node, remember);
+
+ // Now get the ranges for the top element copied. Offset the ranges
+ // and add them to the destination (parent) ranges. This is a
+ // simple translation process, since the previous copy offset the
+ // copied ranges by the same amount.
+ try
+ {
+ final RangeSet childRanges = new RangeSet(repository, node);
+ childRanges.offsetAll(uidOffset);
+ if (validate)
+ {
+ if (!childRanges.isValid())
+ {
+ LOG.error("Invalid range for " + node + " (" + childRanges + ")");
+ }
+ }
+ final RangeSet parentRanges = deferredRanges.get(dst);
+ parentRanges.addAll(childRanges);
+ if (!parentRanges.isValid())
+ {
+ LOG.error("Invalid range for " + node + " (" + parentRanges + ")");
+ }
+ }
+ // If there is an exception, there are no ranges to merge. This may
+ // happen in the case of InventoryModel elements, at the very
+ // least.
+ catch (final RepositoryException e)
+ {
+ }
+ }
+
+ /**
+ * This code is only invoked on an error, and is used to provide a path to
+ * the root from a given URI.
+ *
+ * @param node
+ * @throws RepositoryException
+ */
+ private String debugPathToRoot(URI node) throws RepositoryException
+ {
+ final URI parent = mergerUtils.getOwner(node);
+ String indent = "";
+ if (parent != null)
+ {
+ indent = debugPathToRoot(parent);
+ }
+ final String linkId = mergerUtils.getRDFAttribute(node, LINK_ID);
+ LOG.warn(indent + node + " " + linkId);
+ return indent + " ";
+ }
+
+ /**
+ * Dump context information for the specified element id. This information
+ * is pulled from the *.kdmo repository, so the ID must be valid for there.
+ *
+ * If the element is a relationship, also dump information about the "from"
+ * side of the relationship.
+ *
+ * @param id
+ */
+ private void dumpContextLocation(String indent, URI id)
+ {
+ RepositoryConnection con = null;
+ CloseableIteration statements = null;
+ try
+ {
+ LOG.error(indent + "Subject: " + id);
+ if (id != null)
+ {
+ boolean found = false;
+ con = repository.getConnection();
+ statements = con.getStatements(id, null, null, true);
+ // Get all statements and handle them in the appropriate manner
+ while (statements.hasNext())
+ {
+ Statement stmt = statements.next();
+ if (stmt != null)
+ {
+ Value object = stmt.getObject();
+ URI predicate = stmt.getPredicate();
+
+ LOG.error(indent + " " + predicate + " " + object);
+ found = true;
+
+ // If this is a relationship, then get the "from" side
+ // for great justice.
+ if (object != null && predicate != null)
+ {
+ String pstring = predicate.getLocalName();
+ if (KdmPredicate.FROM.toString().equals(pstring) && (object instanceof URI))
+ {
+ dumpContextLocation(indent + " ", (URI) stmt.getObject());
+ }
+ if (KdmPredicate.SOURCEREF.toString().equals(pstring))
+ {
+ String ref = object.stringValue();
+ if (ref != null)
+ {
+ String[] tokens = ref.split(";");
+ final URI fid = new MergerURI(MergerURI.KdmModelNS, tokens[0]);
+ dumpContextLocation(indent + " ", fid);
+ }
+ }
+ }
+ }
+ }
+ // If we found no good statements, then this is a "dangling to"
+ // type problem+
+
+ if (!found)
+ {
+ LOG.error(indent + " No statements found");
+ }
+ }
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception gathering context information for " + id, e);
+ }
+ finally
+ {
+ if (statements != null)
+ {
+ try
+ {
+ statements.close();
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception closing statement", e);
+ }
+ }
+ if (con != null)
+ {
+ try
+ {
+ con.close();
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception closing connection", e);
+ }
+ }
+ }
+ }
+
+ /**
+ * Dump as an error contextual location useful for debugging purposes.
+ *
+ * @param src
+ * @param dst
+ */
+ private void dumpContextLocation(URI src, URI dst)
+ {
+ LOG.error(" Path: " + path);
+ // Need to use a reverse map to get the source ID for the kdmo
+ // repository
+ URI srcId = reverseLocalIdMap.get(src);
+ // LOG.error(" Source context (" + getSourceRef(src) + ")");
+ dumpContextLocation(" ", srcId);
+
+ // Dump information for the target if it exists
+ LOG.error(" Target context");
+ dumpContextLocation(" ", dst);
+ }
+
+ /**
+ * Generate a new URI for the linker. In production use this ID should be
+ * generated to ensure there is no overlap, but for testing purposes I may
+ * preserve existing values.
+ *
+ */
+ private URI generateLinkerURI(URI node)
+ {
+ // This should only run in debug situations
+ if (preserveIDs)
+ {
+ if (preservingURIs)
+ {
+ LOG.error("Preserving compiled URIs -- use only for debug purposes");
+ preservingURIs = false;
+ }
+ return node;
+ }
+ else
+ {
+ final URI newURI = factory.createURI(MergerURI.KdmModelNS + id);
+ ++id;
+ return newURI;
+ }
+ }
+
+ /**
+ * Get the destination model with the specified type. If it does not yet
+ * exist, then create it.
+ *
+ * @param type
+ * @return
+ */
+ private URI getDestinationModel(String type)
+ {
+ // Get the name. Fancy it up a little by adding spaces before capitol
+ // letters
+ final int start = type.indexOf('/') + 1;
+ final StringBuilder name = new StringBuilder();
+ for (int i = start; i < type.length(); i++)
+ {
+ final char c = type.charAt(i);
+ if ((c >= 'A') && (c <= 'Z') && (i > start))
+ {
+ name.append(' ');
+ }
+ name.append(c);
+ }
+
+ return getDestinationModel(type, name.toString());
+ }
+
+ /**
+ *
+ * @param type
+ * @param name
+ * @return
+ */
+ private URI getDestinationModel(String type, String name)
+ {
+ if (modelByType.containsKey(type))
+ {
+ return modelByType.get(type);
+ }
+
+ final URI model = new MergerURI(MergerURI.KdmModelNS, "" + id);
+ ++id;
+
+ // Write the Model
+ output.print(model, KdmPredicate.KDM_TYPE.toURI(), new KdmLiteral(type));
+
+ output.print(model, KdmPredicate.NAME.toURI(), new KdmLiteral(name));
+
+ output.print(segmentURI, KdmPredicate.CONTAINS.toURI(), model);
+
+ // Set to hidden if required
+ if (KdmConstants.KdmType.INVENTORY_MODEL.toString().equals(type))
+ {
+ output.print(model, KdmPredicate.STEREOTYPE.toURI(), hiddenStereotype);
+ }
+
+ // The StructureModel may be managed by Workbench probes
+ if (KdmType.STRUCTURE_MODEL.toString().equals(type))
+ {
+ output.print(model, KdmPredicate.STEREOTYPE.toURI(), managedStereotype);
+ }
+
+ // Set the UID for the node
+ output.print(model, WorkbenchPredicate.UID.toURI(), new KdmLiteral("" + uidOffset));
+ deferredRanges.put(model, new RangeSet((int) uidOffset));
+ ++uidOffset;
+
+ // Reuse other models
+ modelByType.put(type, model);
+ return model;
+ }
+
+ /**
+ *
+ * @param node
+ * @return
+ * @throws RepositoryException
+ */
+ private Value getLinkId(URI node) throws RepositoryException
+ {
+ Value id = mergerUtils.getRDFAttributeValue(node, LINK_ID);
+ if (id != null)
+ {
+ if (SystemUtils.IS_OS_WINDOWS)
+ {
+ KdmType kdmType = KdmType.valueOfKdmString(mergerUtils.getRDFAttribute(node, KdmPredicate.KDM_TYPE.toString()));
+ if (caseSensitive.contains(kdmType))
+ {
+ id = factory.createLiteral(id.stringValue().toLowerCase());
+ }
+ }
+ // if(id.stringValue().trim().isEmpty())
+ // {
+ // LOG.error("Invalid link:id " + id + " for element " + node);
+ // }
+ }
+ return id;
+ }
+
+ /**
+ * Return the maximum assigned subject ID at this point.
+ *
+ * @return
+ */
+ public long getMaxId()
+ {
+ return id;
+ }
+
+ /**
+ * Return the number of statements processed by the merger.
+ *
+ * @return
+ */
+ public long getStatementCount()
+ {
+ return output.getCount();
+ }
+
+ /**
+ * Used to determine whether the code has a UID or not.
+ *
+ * @param element
+ * element to check
+ * @return true if the element has a UID defined
+ * @throws RepositoryException
+ */
+ private boolean hasUID(URI element) throws RepositoryException
+ {
+ String result = mergerUtils.getRDFAttribute(element, "UID");
+ if (result == null || result.trim().isEmpty())
+ return false;
+ return true;
+ }
+
+ /**
+ * Initialize the stereotypes expected by workbench
+ *
+ * @param segment
+ * The segment to which this data is being written.
+ */
+ private void initializeWorkbenchStereotypes(URI segment)
+ {
+ final URI extensionFamily = new MergerURI(MergerURI.KdmModelNS, "" + id);
+ ++id;
+ output.print(extensionFamily, KdmPredicate.KDM_TYPE.toURI(), new KdmLiteral("kdm/ExtensionFamily"));
+ output.print(extensionFamily, KdmPredicate.NAME.toURI(), MergerURI.WORKBENCH_EXTENSION_LITERAL);
+ output.print(segment, KdmPredicate.CONTAINS.toURI(), extensionFamily);
+
+ hiddenStereotype = new MergerURI(MergerURI.KdmModelNS, "" + id);
+ ++id;
+ output.print(hiddenStereotype, KdmPredicate.KDM_TYPE.toURI(), new KdmLiteral("kdm/Stereotype"));
+ output.print(hiddenStereotype, KdmPredicate.NAME.toURI(), WorkbenchStereotype.HIDDEN.toLiteral());
+ output.print(extensionFamily, KdmPredicate.CONTAINS.toURI(), hiddenStereotype);
+
+ managedStereotype = new MergerURI(MergerURI.KdmModelNS, "" + id);
+ ++id;
+ output.print(managedStereotype, KdmPredicate.KDM_TYPE.toURI(), new KdmLiteral("kdm/Stereotype"));
+ output.print(managedStereotype, KdmPredicate.NAME.toURI(), WorkbenchStereotype.MANAGED_STRUCTURE_MODEL.toLiteral());
+ output.print(extensionFamily, KdmPredicate.CONTAINS.toURI(), managedStereotype);
+ }
+
+ /**
+ * Returns true if the subject is a local variable
+ *
+ * @param subject
+ * @return
+ * @throws RepositoryException
+ */
+ private boolean isLocalVariable(URI subject) throws RepositoryException
+ {
+ final String type = mergerUtils.getRDFAttribute(subject, KdmPredicate.KDM_TYPE.toString());
+ if (type == null)
+ {
+ return false;
+ }
+ if (type.equals(KdmType.STORABLE_UNIT.toString()))
+ {
+ final String kind = mergerUtils.getRDFAttribute(subject, KdmPredicate.KIND.toString());
+ if ("local".equals(kind) || "register".equals(kind))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Top level merge of the repository. This instantiates some utilities so
+ * that they know of the KdmRepository for the object being merged. It kicks
+ * off the model merge and performs final closing operations (writing
+ * deferred values and clearing utilities).
+ *
+ * @deprecated Use merge(String path, KdmRepository repository)
+ *
+ * @param repository
+ * @throws RepositoryException
+ */
+ @Deprecated
+ public void merge(Repository repository) throws RepositoryException
+ {
+ try
+ {
+ factory = repository.getValueFactory();
+ mergerUtils = new MergerUtilities(repository);
+ this.repository = repository;
+ deferredStatements = new ArrayList();
+ localIdMap = new THashMap();
+ reverseLocalIdMap = new THashMap();
+ noLinkId = new THashSet();
+
+ // Initialise the maximum uid
+ maxUID = uidOffset;
+
+ // This data is only initialised if we are performing advanced data
+ // validation
+ if (validate)
+ {
+ validationData = new ValidationData();
+ }
+
+ mergeModels();
+
+ // Identify and merge "bad" data with the invalid UID "-1". This is
+ // only
+ // intended
+ // as a temporary handling of some bad data.
+ if (validate)
+ {
+ mergeInvalid();
+ }
+
+ // Perform the merge/copy
+ // recursiveMerge(globals.getRoot(), segment, "kdm/Segment");
+
+ // Write any deferred data
+ writeDeferredStatements();
+
+ // Perform validation
+ if (validate)
+ {
+ validationData.validate(noLinkId);
+ }
+
+ // Clear some variables to help ensure the code is running correctly
+ factory = null;
+ mergerUtils = null;
+ this.repository = null;
+ deferredStatements = null;
+ localIdMap = null;
+ reverseLocalIdMap = null;
+ noLinkId = null;
+
+ // Set the new UID offset for next linked node.
+ uidOffset = maxUID;
+ }
+ finally
+ {
+ // Ensure we have cleared the file name
+ this.path = null;
+ }
+ }
+
+ /**
+ *
+ * @param file
+ * @param repository
+ * @throws RepositoryException
+ */
+ public void merge(String filePath, Repository repository) throws RepositoryException
+ {
+ this.path = filePath;
+ merge(repository);
+ this.path = null; // ensure the path is reset.
+ }
+
+ /**
+ * Identify and merge "bad" data with the invalid UID "-1". This is only
+ * intended as a temporary handling of some bad data.
+ *
+ * @throws RepositoryException
+ */
+ private void mergeInvalid() throws RepositoryException
+ {
+ final URI invalid = new MergerURI(MergerURI.KdmNS, "-1");
+ // Get the invalid children.
+ final List children = mergerUtils.getRelated(invalid, "contains");
+ for (final URI child : children)
+ {
+ final String typeString = mergerUtils.getRDFAttribute(child, KdmConstants.KdmPredicate.KDM_TYPE.toString());
+ final KdmType type = KdmType.valueOfKdmString(typeString);
+ switch (type)
+ {
+ case COMPILATION_UNIT:
+ case SHARED_UNIT:
+ LOG.error("Element has invalid parent " + child + " (" + type + ")");
+ LOG.error(" - Added to CodeAssembly");
+ // output.print(assembly, KdmPredicate.CONTAINS.toURI(),
+ // child);
+ mergeInvalid(assembly, child, config.getMergeType(type.toString()));
+ break;
+ case SOURCE_FILE:
+ LOG.error("Element has invalid parent " + child + " (" + type + ")");
+ final URI dstModel = getDestinationModel("source/InventoryModel");
+ // output.print(dstModel, KdmPredicate.CONTAINS.toURI(),
+ // child);
+ mergeInvalid(dstModel, child, config.getMergeType(type.toString()));
+ LOG.error(" - Added to InventoryModel");
+ break;
+ case CODE_MODEL:
+ case EXTENSION_FAMILY:
+ case INVENTORY_MODEL:
+ LOG.warn("Element has invalid parent " + child + " (" + type + ")");
+ break;
+ default:
+ LOG.error("Element has invalid parent " + child + " (" + type + ")");
+ break;
+ }
+ }
+ }
+
+ private void mergeInvalid(URI dst, URI child, int defaultMergeType) throws RepositoryException
+ {
+ final String type = mergerUtils.getRDFAttribute(child, "kdmType");
+ // String name = rdfUtils.getRDFAttribute(child, "name");
+
+ // If we are explicitly trying to copy, then copy
+ if ((defaultMergeType == MergeConfig.COPY) || (config.getMergeType(type) == MergeConfig.COPY))
+ {
+ // Copy, but do not "remember" the node IDs in the globals
+ // map, since we will not be merging with this data.
+ copyAndMergeRange(dst, child, false);
+ }
+ // Fallback is to merge if possible
+ else
+ {
+ // If the node exists in the target, then merge, otherwise
+ // copy it. This is done so we can error out on a merge
+ // that does not match.
+ // final Value linkID = rdfUtils.getRDFAttributeValue(child,
+ // "link:id");
+ final Value linkID = getLinkId(child);
+ if (linkID == null)
+ {
+ return;
+ }
+
+ // Is this id already within the global map?
+ // If it is then attempt to merge with it.
+ if (globals.containsId(dst, linkID))
+ {
+ final Stack ancestors = new Stack();
+ ancestors.push(dst);
+ mergeNode(ancestors, child);
+ }
+ // Otherwise just copy it in, updating the UID ranges of the
+ // destination.
+ else
+ {
+ // Copy, and "remember" the node IDs in the globals
+ // map since we may be merging with this data later.
+ copyAndMergeRange(dst, child, true);
+ }
+ }
+ }
+
+ /**
+ * We are provided the destination URI (dst), the source model URI (src),
+ * and a default merge type. For each of the children in the source,
+ * determine if the desired operation is to COPY the data in, or to attempt
+ * to MERGE it with some existing data.
+ *
+ * Some things we might want to always copy are CompilationUnits. There
+ * should be no overlap between these in objects. SharedUnits are likely
+ * overlapping between files.
+ *
+ * In the case of elements that are intended to be merged. If the element
+ * has NOT been added yet (first time the SharedUnit is encountered, for
+ * example) then it will be copied.
+ *
+ * The identity of mergable elements is determined by the "link:id"
+ * attribute, which needs to be added by this point in the operations. The
+ * "link:id" is unique within a particular parent, but should always be the
+ * same across different objects. An example might be a file name within a
+ * particular directory.
+ *
+ * When either merging or copying, the UID range of the target may need to
+ * be updated (a certainty in copying).
+ *
+ * @param dst
+ * @param child
+ * @param i
+ * @throws RepositoryException
+ */
+ private void mergeModelContents(URI dst, URI src, int defaultMergeType) throws RepositoryException
+ {
+ // Get the contained nodes
+ final List children = mergerUtils.getRelated(src, "contains");
+ for (final URI child : children)
+ {
+ final String type = mergerUtils.getRDFAttribute(child, "kdmType");
+ // String name = rdfUtils.getRDFAttribute(child, "name");
+
+ // If we are explicitly trying to copy, then copy
+ if ((defaultMergeType == MergeConfig.COPY) || (config.getMergeType(type) == MergeConfig.COPY))
+ {
+ // Copy, but do not "remember" the node IDs in the globals
+ // map, since we will not be merging with this data.
+ copyAndMergeRange(dst, child, false);
+ }
+ // Fallback is to merge if possible
+ else
+ {
+ // If the node exists in the target, then merge, otherwise
+ // copy it. This is done so we can error out on a merge
+ // that does not match.
+ // final Value linkID = rdfUtils.getRDFAttributeValue(child,
+ // "link:id");
+ final Value linkID = getLinkId(child);
+
+ if (linkID == null)
+ {
+ continue;
+ }
+
+ // Is this id already within the global map?
+ // If it is then attempt to merge with it.
+ if (globals.containsId(dst, linkID))
+ {
+ final Stack ancestors = new Stack();
+ ancestors.push(dst);
+ mergeNode(ancestors, child);
+ }
+ // Otherwise just copy it in, updating the UID ranges of the
+ // destination.
+ else
+ {
+ // Copy, and "remember" the node IDs in the globals
+ // map since we may be merging with this data later.
+ copyAndMergeRange(dst, child, true);
+ }
+ }
+ }
+ }
+
+ /**
+ * Merge the models from the working repository into correct location in the
+ * new repository. Depending on the model type we operate in different ways.
+ *
+ * o InventoryModel: All inventory models are merged into one inventory
+ * model. There are NO UIDs to offset, however. o CodeModel: The same model
+ * is used in each case, but instead of merging into the CodeModel itself,
+ * we merge into its contained CodeAssembly
+ *
+ * o ...?
+ *
+ * @param segment
+ * @throws RepositoryException
+ */
+ private void mergeModels() throws RepositoryException
+ {
+ // First get the top node.
+ final URI segment = (URI) mergerUtils.getRootId();
+
+ // Get the models
+ final List children = mergerUtils.getRelated(segment, "contains");
+ for (final URI child : children)
+ {
+ final String type = mergerUtils.getRDFAttribute(child, "kdmType");
+ if (type == null)
+ {
+ LOG.error("Corrupt KDM file. No KDM Type for element " + child + ". Skipping.");
+ continue;
+ }
+ LOG.debug("Merging " + type);
+
+ // Get the destination model (or CodeAssembly)
+ final URI dstModel = getDestinationModel(type);
+ mergeModelContents(dstModel, child, config.getMergeType(type));
+ }
+ }
+
+ /**
+ * Currently I have altered the compile phase to the "file oriented" view of
+ * the code, but as soon as the "object oriented" view is enabled this data
+ * will be lost.
+ *
+ * The complexity is that by merging new data, the UID offsets for elements
+ * will change. Since the offsets for nodes are currently written on the fly
+ * and there is no method for updating this data, we are left with a
+ * situation where the UID ranges are incorrect.
+ *
+ * @param node
+ * @return
+ * @throws RepositoryException
+ */
+ private void mergeNode(Stack ancestors, URI node) throws RepositoryException
+ {
+ final URI globalParent = ancestors.peek();
+ if (localIdMap.containsKey(node))
+ {
+ throw new UnsupportedOperationException("Attempting to re-merge element " + node + " into parent " + globalParent);
+ }
+
+ // Get the link:id
+ final Value id = getLinkId(node);
+ // final Value id = rdfUtils.getRDFAttributeValue(node, "link:id");
+
+ // final String type = rdfUtils.getRDFAttribute(node,
+ // KdmConstants.KdmPredicate.KDM_TYPE.toString());
+ // if (type)
+ //
+ //
+ // factory.createLiteral(arg0)
+
+ // If there is no ID, then no merging should take place. A special case
+ // is ActionElements
+ // in methods which DO have an id, which is handled below.
+ if (id == null)
+ {
+ noLinkId.add(node);
+ switch (config.getNoIdMergeType())
+ {
+ case MergeConfig.COPY:
+ copy(globalParent, node, false);
+ return;
+ case MergeConfig.IGNORE:
+ return;
+ case MergeConfig.SINGLETON:
+ return;
+ case MergeConfig.MERGE:
+ LOG.error("Element missing link:id, cannot merge " + node);
+ return;
+ }
+ }
+
+ // Is this id already within the global map? If it is not then
+ // it should be copied there.
+ if (!globals.containsId(globalParent, id))
+ {
+ copy(globalParent, node, true);
+
+ // Since we are merging with a parent which has already set a
+ // UID/lastUID combo, we need to record the new ranges
+ // for this element. Add the range to the deferred ranges.
+ if (hasUID(node))
+ {
+ // int uid = Integer.parseInt(rdfUtils.getRDFAttribute(node,
+ // "UID"));
+ int uid = IntUtils.parseInt(mergerUtils.getRDFAttribute(node, "UID"));
+ final String luid = mergerUtils.getRDFAttribute(node, "lastUID");
+ int lastUID = uid;
+ if (luid != null)
+ {
+ // lastUID = Integer.parseInt(luid);
+ lastUID = IntUtils.parseInt(luid);
+ }
+ uid += uidOffset;
+ lastUID += uidOffset;
+ if (uid > lastUID)
+ LOG.error("Invalid UID range found for " + node + " into parent " + globalParent);
+ if (lastUID < uid)
+ {
+ LOG.error("Invalid range for " + node + " (" + uid + "-" + lastUID + ")");
+ }
+
+ addDeferredRanges(ancestors, new Range(uid, lastUID));
+ }
+ }
+ // Otherwise proceed with the merge
+ else
+ {
+ final KdmType type = KdmType.valueOfKdmString(mergerUtils.getRDFAttribute(node, KdmConstants.KdmPredicate.KDM_TYPE.toString()));
+
+ // Record the global node ID in the localMap for lookups
+ // Required in both merge and singletons.
+ final URI globalNode = globals.get(globalParent, id);
+ localIdMap.put(node, globalNode);
+ reverseLocalIdMap.put(globalNode, node);
+
+ // If this is a singleton type then it should only exist ONCE in the
+ // system.
+ // Singletons are used when the contents cannot merge normally, for
+ // example
+ // with ActionElements.
+ if (config.getMergeType(type.toString()) == MergeConfig.SINGLETON)
+ {
+ // If we are performing validation, we want to remember UIDs
+ if (validate)
+ {
+ final Value uid = mergerUtils.getRDFAttributeValue(node, "UID");
+ if (uid != null)
+ {
+ validationData.setUid(node, uid);
+ }
+ }
+ return;
+ }
+
+ // Default case, not a method.
+ {
+ // When merging, in most cases we are merely visiting children
+ // to see if they match up or new ones need copying. There are
+ // some cases where the data for an element needs updating,
+ // however. In these cases we need to record the statements
+ // somewhere that allows them to me merged together.
+ // Add them to said lists here...
+ // FIXME: I said add them
+
+ // If we are performing validation, we want to remember UIDs
+ if (validate)
+ {
+ final Value uid = mergerUtils.getRDFAttributeValue(node, "UID");
+ if (uid != null)
+ {
+ validationData.setUid(node, uid);
+ }
+ }
+
+ // Get the children. Merge the child nodes with the global map.
+ final List children = mergerUtils.getRelated(node, "contains");
+ for (final URI child : children)
+ {
+ ancestors.push(globalNode);
+ // If we are explicitly trying to copy, then copy
+ if (config.getMergeType(type.toString()) == MergeConfig.COPY)
+ {
+ // Copy, but do not "remember" the node IDs in the
+ // globals
+ // map, since we will not be merging with this data.
+ copy(globalNode, child, false);
+ }
+ // Fallback is to merge if possible
+ else
+ {
+ mergeNode(ancestors, child);
+ }
+ ancestors.pop();
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ * @param roots
+ */
+ public void setRoots(List roots)
+ {
+ // // Disabled for C. May re-enable for C++
+ // structure.setRoots(roots);
+ }
+
+ /**
+ * Enable enhanced data validation. This can be used to ensure that the
+ * input KDM is well formed.
+ *
+ * @param b
+ */
+ public void setValidation(boolean b)
+ {
+ validate = b;
+ }
+
+ /**
+ * Return true if this predicate/object indicates that it should not be
+ * added to the link file. This is done to reduce the size of the link file
+ * to something more manageable.
+ *
+ * @param predicate
+ * @return
+ */
+ private boolean skip(URI predicate, Value object)
+ {
+ // If we are not writing the lightweight link file, then
+ // write everything.
+ if ((format & NO_FLOWS) == 0)
+ {
+ return false;
+ }
+ if (object instanceof URI)
+ {
+ return false;
+ }
+ final String pname = predicate.getLocalName();
+ if ("kdmType".equals(pname))
+ {
+ if (object.stringValue().contains("Flow"))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Are we running in a modified mode where we should skip this child?
+ *
+ * @param object
+ * @return
+ * @throws RepositoryException
+ */
+ private boolean skipChild(URI subject) throws RepositoryException
+ {
+ final String type = mergerUtils.getRDFAttribute(subject, KdmPredicate.KDM_TYPE.toString());
+ if (type == null)
+ {
+ // This is actually bad, but I make too much noise on old KDM at the
+ // moment. This is also
+ // likely fixed, so consider making it an error later.
+ LOG.debug("Contained element missing type " + subject);
+ return false;
+ }
+ // Skip flows?
+ if (((format & NO_FLOWS) != 0) && type.endsWith("Flow"))
+ {
+ return true;
+ }
+ // Skip local variables?
+ if ((format & NO_LOCALS) != 0)
+ {
+ // Is this a local variable?
+ if (isLocalVariable(subject))
+ {
+ return true;
+ }
+ // Is this a relationship to a local variable?
+ else
+ {
+ final URI to = mergerUtils.getRelatedValue(subject, KdmPredicate.TO.toString());
+ if (to != null)
+ {
+ if (isLocalVariable(to))
+ {
+ return true;
+ }
+
+ }
+ }
+ }
+
+ // System.err.println("Check: " + type + " " + subject);
+ return false;
+ }
+ /**
+ * Write the deferred SourceRef information.
+ *
+ * @param subject
+ * @param predicate
+ * @param object
+ */
+ private void writeDeferredSourceRef(URI subject, URI predicate, Value object)
+ {
+ final StringBuilder newref = new StringBuilder(100);
+ String ref = object.stringValue();
+ if (ref.trim().isEmpty())
+ {
+ return; // Don't write empty SourceRefs
+ }
+ final String[] elements = commaSplitter.split(ref);
+ // For each SourceRef element
+ for (int i = 0; i < elements.length; i++)
+ {
+ // Translate the file reference. Copy the rest
+ final String[] components = semiColonSplitter.split(elements[i]);
+ if (components[0].trim().isEmpty())
+ {
+ // Don't bother outputting source refs if there is no file
+ // reference AND no snippet
+ if ((components.length < 2) || !components[1].trim().isEmpty())
+ {
+ continue;
+ }
+
+ newref.append(elements[i]);
+ }
+ else
+ {
+ final URI o = new MergerURI(MergerURI.KdmModelNS, components[0]);
+ if (!localIdMap.containsKey(o))
+ {
+ LOG.error("Missing translation object for URI " + o);
+ dumpContextLocation(subject, (URI) object);
+ }
+ else
+ {
+ newref.append(localIdMap.get(o).getLocalName());
+ // Add the connection between the CompilationUnit/ClassUnit
+ // and the SourceFile
+ // // Disabled for C. May re-enable for C++
+ // if(structure.contains(subject))
+ // structure.addReference(subject, localIdMap.get(o));
+ }
+ for (int j = 1; j < components.length; ++j)
+ {
+ newref.append(";").append(components[j]);
+ }
+ }
+ if (i < elements.length - 1)
+ {
+ newref.append(",");
+ }
+ }
+ ref = newref.toString();
+ if (!ref.isEmpty())
+ {
+ output.print(subject, predicate, new KdmLiteral(ref));
+ }
+ }
+
+ /**
+ * Write statements that were deferred until the new "object" URI could be
+ * identified.
+ *
+ * If we deferred a SourceRef it needs to be decomposed, redirected, then
+ * written.
+ *
+ * Other cases are more simple where the object just needs to be redirected.
+ *
+ */
+ private void writeDeferredStatements()
+ {
+ for (final Statement stmt : deferredStatements)
+ {
+ final URI subject = (URI) stmt.getSubject();
+ final URI predicate = stmt.getPredicate();
+ final Value object = stmt.getObject();
+
+ final String pname = predicate.getLocalName();
+ // Translate the compressed SourceRef.
+ if (KdmPredicate.SOURCEREF.toString().equals(pname))
+ {
+ writeDeferredSourceRef(subject, predicate, object);
+ }
+ // Default handling, object should be translated
+ else
+ {
+ // Error out if the object cannot be translated
+ if (!localIdMap.containsKey(object))
+ {
+ LOG.error("Missing translation object " + stmt.getObject() + " [has link:id - " + !noLinkId.contains(object) + "]");
+ dumpContextLocation(subject, (URI) object);
+ }
+ else
+ {
+ output.print(subject, predicate, localIdMap.get(object));
+ }
+ }
+ }
+ }
+
+ public long getId() {
+ return id;
+ }
+}
+
+/**
+ * Perform some advanced validation of merged data.
+ *
+ * @author Ken Duck
+ *
+ */
+class ValidationData
+{
+
+ private static final Logger LOG = Logger.getLogger(RepositoryMerger.class);
+
+ private final Map validation_relationshipFrom;
+
+ /**
+ *
+ */
+ private final Set validation_relationships;
+
+ private final Map validation_relationshipTo;
+
+ /**
+ *
+ */
+ private final Map validation_uidMap;
+
+ public ValidationData()
+ {
+ validation_uidMap = new THashMap();
+ validation_relationships = new THashSet();
+ validation_relationshipFrom = new THashMap();
+ validation_relationshipTo = new THashMap();
+ }
+
+ private void addRelationship(URI rel)
+ {
+ validation_relationships.add(rel);
+ }
+
+ public void addRelationshipType(URI rel, KdmType type)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setRelationshipFrom(URI rel, URI from)
+ {
+ addRelationship(rel);
+ validation_relationshipFrom.put(rel, from);
+ }
+
+ public void setRelationshipTo(URI rel, URI from)
+ {
+ addRelationship(rel);
+ validation_relationshipTo.put(rel, from);
+ }
+
+ public void setUid(URI uri, Value uid)
+ {
+ validation_uidMap.put(uri, uid);
+ }
+
+ /**
+ * Run tests to ensure validate the results of the merge to ensure that
+ * there are no anomalies.
+ */
+ public void validate(Set noLinkId)
+ {
+ int relCount = 0;
+ // For each found relationship, ensure there are from and to sides, and
+ // that there are
+ // UIDs for each of these.
+ for (final URI rel : validation_relationships)
+ {
+ ++relCount;
+ if (validation_relationshipFrom.containsKey(rel))
+ {
+ final URI endpoint = validation_relationshipFrom.get(rel);
+ if (!validation_uidMap.containsKey(endpoint))
+ {
+ LOG.error("Missing UID for 'from' element " + endpoint + " [has link:id - " + !noLinkId.contains(endpoint) + "]");
+ LOG.error(" Relationship: " + rel);
+ }
+ }
+ else
+ {
+ LOG.error("Missing from element for relationship " + rel);
+ }
+ if (validation_relationshipTo.containsKey(rel))
+ {
+ final URI endpoint = validation_relationshipTo.get(rel);
+ if (!validation_uidMap.containsKey(endpoint))
+ {
+ LOG.error("Missing UID for 'to' element " + endpoint + " [has link:id - " + !noLinkId.contains(endpoint) + "]");
+ LOG.error(" Relationship: " + rel);
+ }
+ }
+ else
+ {
+ LOG.error("Missing to element for relationship " + rel);
+ }
+ }
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Relationships found: " + relCount);
+ }
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.java
new file mode 100644
index 00000000..0ba111c1
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.java
@@ -0,0 +1,214 @@
+
+package com.kdmanalytics.kdm.repositoryMerger;
+
+import java.io.PrintWriter;
+
+import org.apache.log4j.Logger;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.rio.ntriples.NTriplesUtil;
+
+/**
+ * This is a utility class used to provide output assistance for various KDM
+ * output formats.
+ *
+ * Supported formats includes:
+ *
+ * o NTRIPLES o MODIFIED_NTRIPLES o Direct to a repository
+ *
+ */
+public class StatementWriter
+{
+
+ private static final Logger LOG = Logger.getLogger(StatementWriter.class);
+
+ /**
+ * In the repository output solution, repository connection is stored here
+ */
+ private RepositoryConnection con;
+
+ /**
+ * In the file output solution, output stream is here
+ */
+ private PrintWriter output;
+
+ /**
+ * The format we are storing in
+ */
+ private int format;
+
+ /**
+ * Number of statements written.
+ */
+ long count = 0;
+
+ /**
+ *
+ * @param out
+ * @param format
+ */
+ public StatementWriter(PrintWriter out, int format)
+ {
+ this.output = out;
+ this.format = format;
+ }
+
+ /**
+ * Make a statement writer that writes directly to a repository.
+ *
+ * @param repository
+ */
+ public StatementWriter(Repository repository)
+ {
+ try
+ {
+ con = repository.getConnection();
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception writing repository", e);
+ }
+ }
+
+ /**
+ * Call to dispose of any resources that were created for the writer
+ * purposes. Does not close or shutdown underlying streams or repositories.
+ */
+ public void dispose()
+ {
+ if (con != null)
+ {
+ try
+ {
+ con.close();
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception disposing StatementWriter", e);
+ }
+ }
+
+ con = null;
+ output = null;
+ }
+
+ /**
+ *
+ * @param subject
+ * @param predicate
+ * @param object
+ */
+ public void print(URI subject, URI predicate, Value object)
+ {
+ ++count;
+ // DIRECT to repository
+ if (con != null)
+ {
+ try
+ {
+ con.add(subject, predicate, object);
+ }
+ catch (RepositoryException e)
+ {
+ LOG.error("Exception writing repository", e);
+ }
+ }
+ else
+ {
+ if (output == null)
+ {
+ LOG.error("Attempting to write to disposed StatementWriter");
+ return;
+ }
+ // NTRIPLES format
+ if ((format & RepositoryMerger.NTRIPLES) > 0)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<");
+ sb.append(subject);
+ sb.append("> ");
+ sb.append("<");
+ sb.append(predicate);
+ sb.append("> ");
+ if (object instanceof URI)
+ {
+ sb.append("<");
+ sb.append(object);
+ sb.append("> .");
+ }
+ else
+ {
+ sb.append("\"");
+ String str = object.stringValue();
+
+ // change all windows backslashes to forward slashes.
+ if ("path".equals(predicate.getLocalName()))
+ {
+ str = str.replace("\\", "/");
+ }
+
+
+ str = NTriplesUtil.escapeString(str);
+
+ sb.append(str);
+ sb.append("\" .");
+ }
+ output.println(sb.toString());
+ }
+ // COMPRESSED NTRIPLES format
+ else
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<");
+ sb.append(subject.getLocalName());
+ sb.append("> ");
+ sb.append("<");
+ sb.append(predicate.getLocalName());
+ sb.append("> ");
+ if (object instanceof URI)
+ {
+ sb.append("<");
+ sb.append(((URI) object).getLocalName());
+ sb.append("> .");
+ }
+ else
+ {
+ sb.append("\"");
+ String str = object.stringValue();
+
+ // change all windows backslashes to forward slashes.
+ if ("path".equals(predicate.getLocalName()))
+ {
+ str = str.replace("\\", "/");
+ }
+
+ str = NTriplesUtil.escapeString(str);
+
+ sb.append(str);
+ sb.append("\" .");
+ }
+ output.println(sb.toString());
+ }
+ }
+ }
+
+ /**
+ * Return the number of statements output at this point.
+ *
+ * @return
+ */
+ public long getCount()
+ {
+ return count;
+ }
+
+ public void close()
+ {
+ output.flush();
+ output.close();
+ }
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.java
new file mode 100644
index 00000000..305573cc
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.java
@@ -0,0 +1,115 @@
+/**
+ *
+ */
+
+
+
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * @author Kyle Girard
+ *
+ */
+public class IntUtils
+{
+
+ /**
+ * Parses the string argument as a signed decimal integer. Faster than
+ * Integer.parseInt since it assumes radix 10
+ *
+ * @param intString a String containing the int representation to be parsed
+ *
+ * @return the integer value represented by the argument in decimal.
+ */
+ public static int parseIntChecked(final String intString)
+ {
+ //Ensure that we have
+ checkNotNull(intString, "A null string cannot be parsed");
+
+ // Check for a sign.
+ int num = 0;
+ int sign = -1;
+ final int len = intString.length();
+ final char ch = intString.charAt(0);
+ if (ch == '-')
+ {
+ if (len == 1)
+ {
+ throw new NumberFormatException("Missing digits: " + intString);
+ }
+ sign = 1;
+ }
+ else
+ {
+ final int d = ch - '0';
+ if ((d < 0) || (d > 9))
+ {
+ throw new NumberFormatException("Malformed: " + intString);
+ }
+ num = -d;
+ }
+
+ // Build the number.
+ final int max = (sign == -1) ? -Integer.MAX_VALUE : Integer.MIN_VALUE;
+ final int multmax = max / 10;
+ int i = 1;
+ while (i < len)
+ {
+ final int d = intString.charAt(i++) - '0';
+ if ((d < 0) || (d > 9))
+ {
+ throw new NumberFormatException("Malformed: " + intString);
+ }
+ if (num < multmax)
+ {
+ throw new NumberFormatException("Over/underflow: " + intString);
+ }
+ num *= 10;
+ if (num < (max + d))
+ {
+ throw new NumberFormatException("Over/underflow: " + intString);
+ }
+ num -= d;
+ }
+
+ return sign * num;
+ }
+
+ /**
+ * Quick and dirt integer parsing. Faster than
+ * Integer.parseInt since it assumes radix 10. Use this function only when
+ * you know that your String really is an integer.
+ *
+ * @param intString a String containing the int representation to be parsed
+ *
+ * @return the integer value represented by the argument in decimal.
+ */
+ public static int parseInt(final String intString)
+ {
+ // Check for a sign.
+ int num = 0;
+ int sign = -1;
+ final int len = intString.length();
+ final char ch = intString.charAt(0);
+ if (ch == '-')
+ {
+ sign = 1;
+ }
+ else
+ {
+ num = '0' - ch;
+ }
+
+ // Build the number.
+ int i = 1;
+ while (i < len)
+ {
+ num = num * 10 + '0' - intString.charAt(i++);
+ }
+
+ return sign * num;
+ }
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.java
new file mode 100644
index 00000000..2be0901f
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.java
@@ -0,0 +1,579 @@
+/**
+ *
+ */
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+
+
+/**
+ * @author adam
+ *
+ */
+public class KdmConstants
+{
+
+ public enum KdmPredicate
+ {
+ STEREOTYPE("stereotype"), //$NON-NLS-1$
+ CONTAINS("contains"), //$NON-NLS-1$
+ KDM_TYPE("kdmType"), //$NON-NLS-1$
+ NAME("name"), //$NON-NLS-1$
+ TYPE("type"), //$NON-NLS-1$
+ PATH("path"), //$NON-NLS-1$
+ GROUP("__group"), //$NON-NLS-1$
+ SOURCEREF("SourceRef"), //$NON-NLS-1$
+ FROM("from"), //$NON-NLS-1$
+ TO("to"), //$NON-NLS-1$
+ FILE("file"), //$NON-NLS-1$
+ ITEM("__item"), //$NON-NLS-1$
+ INDEX("__index"), //$NON-NLS-1$
+ SNIPPET("snippet"), //$NON-NLS-1$
+ KIND("kind"), //$NON-NLS-1$
+ EXPORT("export"), UUID("UUID"); //$NON-NLS-1$
+
+ private final String predicateString;
+
+ private final URI predicateUri;
+
+ KdmPredicate(String predicateName)
+ {
+ predicateString = predicateName;
+
+ predicateUri = new MergerURI(MergerURI.KdmNS, predicateName);
+ }
+
+ @Override
+ public String toString()
+ {
+ return predicateString;
+ }
+
+ public URI toURI()
+ {
+ return predicateUri;
+ }
+ }
+
+ public enum KdmType
+ {
+ // Models
+ BUILD_MODEL("build/BuildModel"), //$NON-NLS-1$
+ CODE_MODEL("code/CodeModel"), //$NON-NLS-1$
+ DATA_MODEL("data/DataModel"), //$NON-NLS-1$
+ INVENTORY_MODEL("source/InventoryModel"), //$NON-NLS-1$
+ PLATFORM_MODEL("platform/PlatformModel"), //$NON-NLS-1$
+ STRUCTURE_MODEL("structure/StructureModel"), //$NON-NLS-1$
+ CONCEPTUAL_MODEL("conceptual/ConceptualModel"), //$NON-NLS-1$
+ EVENT_MODEL("event/EventModel"), //$NON-NLS-1$
+ UI_MODEL("ui/UIModel"), //$NON-NLS-1$
+
+ // Core
+ ELEMENT("core/Element"), //$NON-NLS-1$
+ KDM_ENTITY("core/KDMEntity"), //$NON-NLS-1$
+ KDM_RELATIONSHIP("core/KDMRelationship"), //$NON-NLS-1$
+ MODEL_ELEMENT("core/ModelElement"), //$NON-NLS-1$
+
+ // Kdm
+ ANNOTATION("kdm/Annotation"), //$NON-NLS-1$
+ ATTRIBUTE("kdm/Attribute"), //$NON-NLS-1$
+ AUDIT("kdm/Audit"), //$NON-NLS-1$
+ EXTENDED_VALUE("kdm/ExtendedValue"), //$NON-NLS-1$
+ EXTENSION_FAMILY("kdm/ExtensionFamily"), //$NON-NLS-1$
+ SEGMENT("kdm/Segment"), //$NON-NLS-1$
+ STEREOTYPE("kdm/Stereotype"), //$NON-NLS-1$
+ TAG_DEFINITION("kdm/TagDefinition"), //$NON-NLS-1$
+ TAGGED_REF("kdm/TaggedRef"), //$NON-NLS-1$
+ TAGGED_VALUE("kdm/TaggedValue"), //$NON-NLS-1$
+
+ // Action
+ ACTION_ELEMENT("action/ActionElement"), //$NON-NLS-1$
+ ACTION_RELATIONSHIP("action/ActionRelationship"), //$NON-NLS-1$
+ ADDRESSES("action/Addresses"), //$NON-NLS-1$
+ BLOCK_UNIT("action/BlockUnit"), //$NON-NLS-1$
+ CALLS("action/Calls"), //$NON-NLS-1$
+ CATCH_UNIT("action/CatchUnit"), //$NON-NLS-1$
+ COMPLIES_TO("action/CompliesTo"), //$NON-NLS-1$
+ CONTROL_FLOW("action/ControlFlow"), //$NON-NLS-1$
+ CREATES("action/Creates"), //$NON-NLS-1$
+ DISPATCHES("action/Dispatches"), //$NON-NLS-1$
+ ENTRY_FLOW("action/EntryFlow"), //$NON-NLS-1$
+ EXCEPTION_FLOW("action/ExceptionFlow"), //$NON-NLS-1$
+ EXIT_FLOW("action/ExitFlow"), //$NON-NLS-1$
+ FALSE_FLOW("action/FalseFlow"), //$NON-NLS-1$
+ FINALLY_FLOW("action/FinallyFlow"), //$NON-NLS-1$
+ FLOW("action/Flow"), //$NON-NLS-1$
+ GUARDED_FLOW("action/GuardedFlow"), //$NON-NLS-1$
+ READS("action/Reads"), //$NON-NLS-1$
+ THROWS("action/Throws"), //$NON-NLS-1$
+ TRUE_FLOW("action/TrueFlow"), //$NON-NLS-1$
+ TRY_UNIT("action/TryUnit"), //$NON-NLS-1$
+ USES_TYPE("action/UsesType"), //$NON-NLS-1$
+ WRITES("action/Writes"), //$NON-NLS-1$
+
+ // Code
+ ARRAY_TYPE("code/ArrayType"), //$NON-NLS-1$
+ BAG_TYPE("code/BagType"), //$NON-NLS-1$
+ BITSTRING_TYPE("code/BitstringType"), //$NON-NLS-1$
+ BIT_TYPE("code/BitType"), //$NON-NLS-1$
+ BOOLEAN_TYPE("code/BooleanType"), //$NON-NLS-1$
+ CALLABLE_KIND("code/CallableKind"), //$NON-NLS-1$
+ CALLABLE_UNIT("code/CallableUnit"), //$NON-NLS-1$
+ CHAR_TYPE("code/CharType"), //$NON-NLS-1$
+ CHOICE_TYPE("code/ChoiceType"), //$NON-NLS-1$
+ CLASS_UNIT("code/ClassUnit"), //$NON-NLS-1$
+ CODE_ASSEMBLY("code/CodeAssembly"), //$NON-NLS-1$
+ CODE_ELEMENT("code/CodeElement"), //$NON-NLS-1$
+ CODE_ITEM("code/CodeItem"), //$NON-NLS-1$
+ CODE_RELATIONSHIP("code/CodeRelationship"), //$NON-NLS-1$
+ COMMENT_UNIT("code/CommentUnit"), //$NON-NLS-1$
+ COMPILATION_UNIT("code/CompilationUnit"), //$NON-NLS-1$
+ COMPOSITE_TYPE("code/CompositeType"), //$NON-NLS-1$
+ COMPUTATIONAL_OBJECT("code/ComputationalObject"), //$NON-NLS-1$
+ CONDITIONAL_DIRECTIVE("code/ConditionalDirective"), //$NON-NLS-1$
+ CONTROL_ELEMENT("code/ControlElement"), //$NON-NLS-1$
+ DATA_ELEMENT("code/DataElement"), //$NON-NLS-1$
+ DATATYPE("code/Datatype"), //$NON-NLS-1$
+ DATE_TYPE("code/DateType"), //$NON-NLS-1$
+ DECIMAL_TYPE("code/DecimalType"), //$NON-NLS-1$
+ DEFINED_TYPE("code/DefinedType"), //$NON-NLS-1$
+ DERIVED_TYPE("code/DerivedType"), //$NON-NLS-1$
+ ENUMERATED_TYPE("code/EnumeratedType"), //$NON-NLS-1$
+ EXPANDS("code/Expands"), //$NON-NLS-1$
+ EXPORT_KIND("code/ExportKind"), //$NON-NLS-1$
+ EXTENDS("code/Extends"), //$NON-NLS-1$
+ FLOAT_TYPE("code/FloatType"), //$NON-NLS-1$
+ GENERATED_FROM("code/GeneratedFrom"), //$NON-NLS-1$
+ HAS_TYPE("code/HasType"), //$NON-NLS-1$
+ HAS_VALUE("code/HasValue"), //$NON-NLS-1$
+ IMPLEMENTATION_OF("code/ImplementationOf"), //$NON-NLS-1$
+ IMPLEMENTS("code/Implements"), //$NON-NLS-1$
+ IMPORTS("code/Imports"), //$NON-NLS-1$
+ INCLUDE_DIRECTIVE("code/IncludeDirective"), //$NON-NLS-1$
+ INCLUDES("code/Includes"), //$NON-NLS-1$
+ INDEX_UNIT("code/IndexUnit"), //$NON-NLS-1$
+ INSTANCE_OF("code/InstanceOf"), //$NON-NLS-1$
+ INTEGER_TYPE("code/IntegerType"), //$NON-NLS-1$
+ INTERFACE_UNIT("code/InterfaceUnit"), //$NON-NLS-1$
+ ITEM_UNIT("code/ItemUnit"), //$NON-NLS-1$
+ LANGUAGE_UNIT("code/LanguageUnit"), //$NON-NLS-1$
+ MACRO_DIRECTIVE("code/MacroDirective"), //$NON-NLS-1$
+ MACRO_KIND("code/MacroKind"), //$NON-NLS-1$
+ MACRO_UNIT("code/MacroUnit"), //$NON-NLS-1$
+ MEMBER_UNIT("code/MemberUnit"), //$NON-NLS-1$
+ METHOD_KIND("code/MethodKind"), //$NON-NLS-1$
+ METHOD_UNIT("code/MethodUnit"), //$NON-NLS-1$
+ MODULE("code/Module"), //$NON-NLS-1$
+ NAMESPACE_UNIT("code/NamespaceUnit"), //$NON-NLS-1$
+ OCTETSTRING_TYPE("code/OctetstringType"), //$NON-NLS-1$
+ OCTET_TYPE("code/OctetType"), //$NON-NLS-1$
+ ORDINAL_TYPE("code/OrdinalType"), //$NON-NLS-1$
+ PACKAGE("code/Package"), //$NON-NLS-1$
+ PARAMETER_KIND("code/ParameterKind"), //$NON-NLS-1$
+ PARAMETER_TO("code/ParameterTo"), //$NON-NLS-1$
+ PARAMETER_UNIT("code/ParameterUnit"), //$NON-NLS-1$
+ POINTER_TYPE("code/PointerType"), //$NON-NLS-1$
+ PREPROCESSOR_DIRECTIVE("code/PreprocessorDirective"), //$NON-NLS-1$
+ PRIMITIVE_TYPE("code/PrimitiveType"), //$NON-NLS-1$
+ RANGE_TYPE("code/RangeType"), //$NON-NLS-1$
+ RECORD_TYPE("code/RecordType"), //$NON-NLS-1$
+ REDEFINES("code/Redefines"), //$NON-NLS-1$
+ SCALED_TYPE("code/ScaledType"), //$NON-NLS-1$
+ SEQUENCE_TYPE("code/SequenceType"), //$NON-NLS-1$
+ SET_TYPE("code/SetType"), //$NON-NLS-1$
+ SHARED_UNIT("code/SharedUnit"), //$NON-NLS-1$
+ SIGNATURE("code/Signature"), //$NON-NLS-1$
+ STORABLE_KIND("code/StorableKind"), //$NON-NLS-1$
+ STORABLE_UNIT("code/StorableUnit"), //$NON-NLS-1$
+ STRING_TYPE("code/StringType"), //$NON-NLS-1$
+ SYNONYM_TYPE("code/SynonymType"), //$NON-NLS-1$
+ TEMPLATE_PARAMETER("code/TemplateParameter"), //$NON-NLS-1$
+ TEMPLATE_TYPE("code/TemplateType"), //$NON-NLS-1$
+ TEMPLATE_UNIT("code/TemplateUnit"), //$NON-NLS-1$
+ TIME_TYPE("code/TimeType"), //$NON-NLS-1$
+ TYPE_UNIT("code/TypeUnit"), //$NON-NLS-1$
+ VALUE("code/Value"), //$NON-NLS-1$
+ VALUE_ELEMENT("code/ValueElement"), //$NON-NLS-1$
+ VALUE_LIST("code/ValueList"), //$NON-NLS-1$
+ VARIANT_TO("code/VariantTo"), //$NON-NLS-1$
+ VISIBLE_IN("code/VisibleIn"), //$NON-NLS-1$
+ VOID_TYPE("code/VoidType"), //$NON-NLS-1$
+
+ // Source
+ BINARY_FILE("source/BinaryFile"), //$NON-NLS-1$
+ CONFIGURATION("source/Configuration"), //$NON-NLS-1$
+ DEPENDS_ON("source/DependsOn"), //$NON-NLS-1$
+ DIRECTORY("source/Directory"), //$NON-NLS-1$
+ EXECUTABLE_FILE("source/ExecutableFile"), //$NON-NLS-1$
+ IMAGE("source/Image"), //$NON-NLS-1$
+ INVENTORY_CONTAINER("source/InventoryContainer"), //$NON-NLS-1$
+ INVENTORY_ELEMENT("source/InventoryElement"), //$NON-NLS-1$
+ INVENTORY_ITEM("source/InventoryItem"), //$NON-NLS-1$
+ INVENTORY_RELATIONSHIP("source/InventoryRelationship"), //$NON-NLS-1$
+ PROJECT("source/Project"), //$NON-NLS-1$
+ RESOURCE_DESCRIPTION("source/ResourceDescription"), //$NON-NLS-1$
+ SOURCE_FILE("source/SourceFile"), //$NON-NLS-1$
+ SOURCE_REF("source/SourceRef"), //$NON-NLS-1$
+ SOURCE_REGION("source/SourceRegion"), //$NON-NLS-1$
+
+ // Data
+ ALL_CONTENT("data/AllContent"), //$NON-NLS-1$
+ ANY_CONTENT("data/AnyContent"), //$NON-NLS-1$
+ CATALOG("data/Catalog"), //$NON-NLS-1$
+ CHOICE_CONTENT("data/ChoiceContent"), //$NON-NLS-1$
+ COLUMN_SET("data/ColumnSet"), //$NON-NLS-1$
+ COMPLEX_CONTENT_TYPE("data/ComplexContentType"), //$NON-NLS-1$
+ CONTENT_ATTRIBUTE("data/ContentAttribute"), //$NON-NLS-1$
+ CONTENT_ELEMENT("data/ContentElement"), //$NON-NLS-1$
+ CONTENT_ITEM("data/ContentItem"), //$NON-NLS-1$
+ CONTENT_REFERENCE("data/ContentReference"), //$NON-NLS-1$
+ CONTENT_RESTRICTION("data/ContentRestriction"), //$NON-NLS-1$
+ DATA_ACTION("data/DataAction"), //$NON-NLS-1$
+ DATA_CONTAINER("data/DataContainer"), //$NON-NLS-1$
+ DATA_EVENT("data/DataEvent"), //$NON-NLS-1$
+ DATA_RELATIONSHIP("data/DataRelationship"), //$NON-NLS-1$
+ DATA_RESOURCE("data/DataResource"), //$NON-NLS-1$
+ DATA_SEGMENT("data/DataSegment"), //$NON-NLS-1$
+ DATATYPE_OF("data/DatatypeOf"), //$NON-NLS-1$
+ EXTENDED_DATA_ELEMENT("data/ExtendedDataElement"), //$NON-NLS-1$
+ EXTENSION_TO("data/ExtensionTo"), //$NON-NLS-1$
+ GROUP_CONTENT("data/GroupContent"), //$NON-NLS-1$
+ HAS_CONTENT("data/HasContent"), //$NON-NLS-1$
+ INDEX("data/Index"), //$NON-NLS-1$
+ INDEX_ELEMENT("data/IndexElement"), //$NON-NLS-1$
+ KEY_RELATION("data/KeyRelation"), //$NON-NLS-1$
+ MANAGES_DATA("data/ManagesData"), //$NON-NLS-1$
+ MIXED_CONTENT("data/MixedContent"), //$NON-NLS-1$
+ PRODUCES_DATA_ELEMENT("data/ProducesDataElement"), //$NON-NLS-1$
+ READS_COLUMN_SET("data/ReadsColumnSet"), //$NON-NLS-1$
+ RECORD_FILE("data/RecordFile"), //$NON-NLS-1$
+ REFERENCE_KEY("data/ReferenceKey"), //$NON-NLS-1$
+ REFERENCE_TO("data/ReferenceTo"), //$NON-NLS-1$
+ RELATIONAL_SCHEMA("data/RelationalSchema"), //$NON-NLS-1$
+ RELATIONAL_TABLE("data/RelationalTable"), //$NON-NLS-1$
+ RELATIONAL_VIEW("data/RelationalView"), //$NON-NLS-1$
+ RESTRICTION_OF("data/RestrictionOf"), //$NON-NLS-1$
+ SEQ_CONTENT("data/SeqContent"), //$NON-NLS-1$
+ SIMPLE_CONTENT_TYPE("data/SimpleContentType"), //$NON-NLS-1$
+ TRIGGER("data/Trigger"), //$NON-NLS-1$
+ TYPED_BY("data/TypedBy"), //$NON-NLS-1$
+ UNIQUE_KEY("data/UniqueKey"), //$NON-NLS-1$
+ WRITES_COLUMN_SET("data/WritesColumnSet"), //$NON-NLS-1$
+ XML_SCHEMA("data/XMLSchema"), //$NON-NLS-1$
+
+ // Structure
+ ARCHITECTURE_VIEW("structure/ArchitectureView"), //$NON-NLS-1$
+ COMPONENT("structure/Component"), //$NON-NLS-1$
+ LAYER("structure/Layer"), //$NON-NLS-1$
+ SOFTWARE_SYSTEM("structure/SoftwareSystem"), //$NON-NLS-1$
+ STRUCTURE_ELEMENT("structure/StructureElement"), //$NON-NLS-1$
+ STRUCTURE_RELATIONSHIP("structure/StructureRelationship"), //$NON-NLS-1$
+ SUBSYSTEM("structure/Subsystem"), //$NON-NLS-1$
+
+ // Build
+ BUILD_COMPONENT("build/BuildComponent"), //$NON-NLS-1$
+ BUILD_DESCRIPTION("build/BuildDescription"), //$NON-NLS-1$
+ BUILD_ELEMENT("build/BuildElement"), //$NON-NLS-1$
+ BUILD_PRODUCT("build/BuildProduct"), //$NON-NLS-1$
+ BUILD_RELATIONSHIP("build/BuildRelationship"), //$NON-NLS-1$
+ BUILD_RESOURCE("build/BuildResource"), //$NON-NLS-1$
+ BUILD_STEP("build/BuildStep"), //$NON-NLS-1$
+ CONSUMES("build/Consumes"), //$NON-NLS-1$
+ DESCRIBED_BY("build/DescribedBy"), //$NON-NLS-1$
+ LIBRARY("build/Library"), //$NON-NLS-1$
+ LINKS_TO("build/LinksTo"), //$NON-NLS-1$
+ PRODUCES("build/Produces"), //$NON-NLS-1$
+ SUPPLIED_BY("build/SuppliedBy"), //$NON-NLS-1$
+ SUPPLIER("build/Supplier"), //$NON-NLS-1$
+ SUPPORTED_BY("build/SupportedBy"), //$NON-NLS-1$
+ SYMBOLIC_LINK("build/SymbolicLink"), //$NON-NLS-1$
+ TOOL("build/Tool"), //$NON-NLS-1$
+
+ // Conceptual
+ BEHAVIOR_UNIT("conceptual/BehaviorUnit"), //$NON-NLS-1$
+ CONCEPTUAL_CONTAINER("conceptual/ConceptualContainer"), //$NON-NLS-1$
+ CONCEPTUAL_ELEMENT("conceptual/ConceptualElement"), //$NON-NLS-1$
+ CONCEPTUAL_FLOW("conceptual/ConceptualFlow"), //$NON-NLS-1$
+ CONCEPTUAL_RELATIONSHIP("conceptual/ConceptualRelationship"), //$NON-NLS-1$
+ CONCEPTUAL_ROLE("conceptual/ConceptualRole"), //$NON-NLS-1$
+ FACT_UNIT("conceptual/FactUnit"), //$NON-NLS-1$
+ RULE_UNIT("conceptual/RuleUnit"), //$NON-NLS-1$
+ SCENARIO_UNIT("conceptual/ScenarioUnit"), //$NON-NLS-1$
+ TERM_UNIT("conceptual/TermUnit"), //$NON-NLS-1$
+
+ // Event
+ CONSUMES_EVENT("event/ConsumesEvent"), //$NON-NLS-1$
+ EVENT("event/Event"), //$NON-NLS-1$
+ EVENT_ACTION("event/EventAction"), //$NON-NLS-1$
+ EVENT_ELEMENT("event/EventElement"), //$NON-NLS-1$
+ EVENT_RELATIONSHIP("event/EventRelationship"), //$NON-NLS-1$
+ EVENT_RESOURCE("event/EventResource"), //$NON-NLS-1$
+ HAS_STATE("event/HasState"), //$NON-NLS-1$
+ INITIAL_STATE("event/InitialState"), //$NON-NLS-1$
+ NEXT_STATE("event/NextState"), //$NON-NLS-1$
+ ON_ENTRY("event/OnEntry"), //$NON-NLS-1$
+ ON_EXIT("event/OnExit"), //$NON-NLS-1$
+ PRODUCES_EVENT("event/ProducesEvent"), //$NON-NLS-1$
+ READS_STATE("event/ReadsState"), //$NON-NLS-1$
+ STATE("event/State"), //$NON-NLS-1$
+ TRANSITION("event/Transition"), //$NON-NLS-1$
+
+ // Platform
+ BINDS_TO("platform/BindsTo"), //$NON-NLS-1$
+ DATA_MANAGER("platform/DataManager"), //$NON-NLS-1$
+ DEFINED_BY("platform/DefinedBy"), //$NON-NLS-1$
+ DEPLOYED_COMPONENT("platform/DeployedComponent"), //$NON-NLS-1$
+ DEPLOYED_RESOURCE("platform/DeployedResource"), //$NON-NLS-1$
+ DEPLOYED_SOFTWARE_SYSTEM("platform/DeployedSoftwareSystem"), //$NON-NLS-1$
+ EXECUTION_RESOURCE("platform/ExecutionResource"), //$NON-NLS-1$
+ EXTERNAL_ACTOR("platform/ExternalActor"), //$NON-NLS-1$
+ FILE_RESOURCE("platform/FileResource"), //$NON-NLS-1$
+ LOADS("platform/Loads"), //$NON-NLS-1$
+ LOCK_RESOURCE("platform/LockResource"), //$NON-NLS-1$
+ MACHINE("platform/Machine"), //$NON-NLS-1$
+ MANAGES_RESOURCE("platform/ManagesResource"), //$NON-NLS-1$
+ MARSHALLED_RESOURCE("platform/MarshalledResource"), //$NON-NLS-1$
+ MESSAGING_RESOURCE("platform/MessagingResource"), //$NON-NLS-1$
+ NAMING_RESOURCE("platform/NamingResource"), //$NON-NLS-1$
+ PLATFORM_ACTION("platform/PlatformAction"), //$NON-NLS-1$
+ PLATFORM_ELEMENT("platform/PlatformElement"), //$NON-NLS-1$
+ PLATFORM_EVENT("platform/PlatformEvent"), //$NON-NLS-1$
+ PLATFORM_RELATIONSHIP("platform/PlatformRelationship"), //$NON-NLS-1$
+ PROCESS("platform/Process"), //$NON-NLS-1$
+ READS_RESOURCE("platform/ReadsResource"), //$NON-NLS-1$
+ REQUIRES("platform/Requires"), //$NON-NLS-1$
+ RESOURCE_TYPE("platform/ResourceType"), //$NON-NLS-1$
+ RUNTIME_RESOURCE("platform/RuntimeResource"), //$NON-NLS-1$
+ SPAWNS("platform/Spawns"), //$NON-NLS-1$
+ STREAM_RESOURCE("platform/StreamResource"), //$NON-NLS-1$
+ THREAD("platform/Thread"), //$NON-NLS-1$
+ WRITES_RESOURCE("platform/WritesResource"), //$NON-NLS-1$
+
+ // UI
+ DISPLAYS("ui/Displays"), //$NON-NLS-1$
+ DISPLAYS_IMAGE("ui/DisplaysImage"), //$NON-NLS-1$
+ MANAGES_UI("ui/ManagesUI"), //$NON-NLS-1$
+ READS_UI("ui/ReadsUI"), //$NON-NLS-1$
+ REPORT("ui/Report"), //$NON-NLS-1$
+ SCREEN("ui/Screen"), //$NON-NLS-1$
+ UI_ACTION("ui/UIAction"), //$NON-NLS-1$
+ UI_DISPLAY("ui/UIDisplay"), //$NON-NLS-1$
+ UI_ELEMENT("ui/UIElement"), //$NON-NLS-1$
+ UI_EVENT("ui/UIEvent"), //$NON-NLS-1$
+ UI_FIELD("ui/UIField"), //$NON-NLS-1$
+ UI_FLOW("ui/UIFlow"), //$NON-NLS-1$
+ UI_LAYOUT("ui/UILayout"), //$NON-NLS-1$
+ UI_RELATIONSHIP("ui/UIRelationship"), //$NON-NLS-1$
+ UI_RESOURCE("ui/UIResource"), //$NON-NLS-1$
+ WRITES_UI("ui/WritesUI"); //$NON-NLS-1$
+
+ private static final Map defaultTypeMap = new HashMap();
+
+ static
+ {
+ for (KdmType t : KdmType.values())
+ {
+ defaultTypeMap.put(t.toString(), t);
+ }
+ }
+
+ private final String typeString;
+
+ private Literal typeLiteral;
+
+ KdmType(String aTypename)
+ {
+ typeString = aTypename;
+ typeLiteral = new KdmLiteral(aTypename);
+ }
+
+ public static KdmType valueOfKdmString(String kdmTypeString)
+ {
+ return defaultTypeMap.get(kdmTypeString);
+ }
+
+ public Literal toLiteral()
+ {
+ return typeLiteral;
+
+ }
+
+ @Override
+ public String toString()
+ {
+ return typeString;
+ }
+ }
+
+ public enum WorkbenchPredicate
+ {
+ UID("UID"), LAST_UID("lastUID"), WORKBENCH_RANGES("__KNT_UIDs"), LINK_ID("link:id"), LINK_SRC("link:src"), LINK_SNK("link:snk");
+
+ private final String predicateString;
+
+ private final URI predicateUri;
+
+ WorkbenchPredicate(String predicateName)
+ {
+ predicateString = predicateName;
+ predicateUri = new MergerURI(MergerURI.KdmNS, predicateName);
+ // predicateUri =
+ // SimpleValueFactory.getSimpleValueFactory().createURI(SimpleURI.kdmNS,
+ // predicateName);
+ }
+
+ @Override
+ public String toString()
+ {
+ return predicateString;
+ }
+
+ public URI toURI()
+ {
+ return predicateUri;
+ }
+
+ }
+
+ public enum WorkbenchStereotype
+ {
+ /**
+ * Elements that the Workbench should not display are stereotyped as
+ * hidden.
+ */
+ HIDDEN("__HIDDEN__"),
+ /**
+ * KDM's specially managed Structure Models should be stereotyped in a
+ * special way. This allows us to know which models we should do
+ * additional processing for inside the various probes.
+ */
+ MANAGED_STRUCTURE_MODEL("__MANAGED__"),
+
+ /**
+ * Elements that the Workbench should not delete are stereotyped as
+ * undeletable
+ */
+ CANNOT_DELETE_MODEL("__UNDELETABLE__"),
+ /**
+ * User created models are marked because they have some special
+ * functionality, such as special persistence into future builds.
+ */
+ USER_MODEL("__USER_MODEL__"),
+ /**
+ * Mark a node as containing user data. This is required for proper
+ * persistence between builds.
+ */
+ USER_DATA("__USER_DATA__"),
+ /**
+ * Indicate the model was created by the API agent
+ */
+ API_AGENT_MODEL("__API_AGENT_MODEL__"),
+ /**
+ * Set to indicate we are overriding the UID. On load of such a model,
+ * the target UID is discovered through various heuristics.
+ */
+ UID_OVERRIDE("__UID_OVERRIDE__"),
+ /**
+ * Indicate the model was created by the Overview agent
+ */
+ OVERVIEW_AGENT_MODEL("__OVERVIEW_AGENT_MODEL__"),
+
+ /**
+ * Indicates that the aggregated relationships have been pre-calculated
+ * for this diagram
+ */
+ CACHED_AGGREGATES("__CACHED_AGGREGATED_RELATIONSHIPS__"),
+
+ /**
+ * Indicates that this is a generated model such as an Overview or API
+ * model.
+ */
+ GENERATED_MODEL("__GENERATED_MODEL__"),
+
+ /**
+ *
+ */
+ REFERS_TO("__REFERS_TO__"),
+
+ COMPILE("COMPILE"), ARCHIVE("ARCHIVE"), LINK("LINK"),
+
+ /**
+ * Indicates that the UIDs have been refined (specified) below this
+ * level, where normally they would not.
+ */
+ REFINED("__REFINED__"),
+
+ /**
+ * Indicates that the specified platform resource has content defined by
+ * the specified data resource.
+ */
+ HAS_CONTENT("__HAS_CONTENT__"),
+
+ /**
+ * The default context indicates to workbench which model is the
+ * preferred owner model for elements that do not have a prescribed
+ * context.
+ */
+ DEFAULT_CONTEXT("__DEFAULT_CONTEXT__");
+
+ private String stereoTypeName;
+
+ private Literal stereoTypeLiteral;
+
+ /**
+ * A map with which we can get matching Stereotypes for strings.
+ */
+ private static final Map defaultTypeMap = new HashMap();
+
+ /**
+ * Initialise the lookup table.
+ */
+ static
+ {
+ for (WorkbenchStereotype t : WorkbenchStereotype.values())
+ {
+ defaultTypeMap.put(t.toString(), t);
+ }
+ }
+
+ /**
+ *
+ * @param name
+ */
+ WorkbenchStereotype(String name)
+ {
+ stereoTypeName = name;
+ stereoTypeLiteral = new KdmLiteral(name);
+ }
+
+ /**
+ * Get the stereotype that matches the string
+ *
+ * @param kdmTypeString
+ * @return
+ */
+ public static WorkbenchStereotype valueOfKdmString(String kdmTypeString)
+ {
+ return defaultTypeMap.get(kdmTypeString);
+ }
+
+ public Literal toLiteral()
+ {
+ return stereoTypeLiteral;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String toString()
+ {
+ return stereoTypeName;
+ }
+
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.java
new file mode 100644
index 00000000..87ef9aa8
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.java
@@ -0,0 +1,164 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+
+/**
+ * @author adam
+ *
+ */
+public class KdmLiteral implements Literal, Value, Comparable, Serializable
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ protected String buf = null;
+
+ /**
+ *
+ * @param value
+ */
+ public KdmLiteral(String value)
+ {
+ // Use the canonical version to save space -- but costs time
+ // this.buf = value.intern();
+ this.buf = value;
+ }
+
+ @Override
+ public boolean booleanValue()
+ {
+ return Boolean.parseBoolean(buf);
+ }
+
+ @Override
+ public byte byteValue()
+ {
+ return Byte.parseByte(buf);
+ }
+
+ @Override
+ public XMLGregorianCalendar calendarValue()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public BigDecimal decimalValue()
+ {
+ return new BigDecimal(buf);
+ }
+
+ @Override
+ public double doubleValue()
+ {
+ return Double.parseDouble(buf);
+ }
+
+ @Override
+ public float floatValue()
+ {
+ return Float.parseFloat(buf);
+ }
+
+ @Override
+ public URI getDatatype()
+ {
+ return null;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return buf;
+ }
+
+ @Override
+ public String getLanguage()
+ {
+ return null;
+ }
+
+ @Override
+ public int intValue()
+ {
+ // return Integer.parseInt(buf);
+ return IntUtils.parseInt(buf);
+ }
+
+ @Override
+ public BigInteger integerValue()
+ {
+ return new BigInteger(buf);
+ }
+
+ @Override
+ public long longValue()
+ {
+ return Long.parseLong(buf);
+ }
+
+ @Override
+ public short shortValue()
+ {
+ return Short.parseShort(buf);
+ }
+
+ @Override
+ public String stringValue()
+ {
+ return buf;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return buf.hashCode();
+ }
+
+ /**
+ * Assume we are sent a value to compare with. If not then this will fail
+ * most grievously.
+ *
+ */
+ @Override
+ public boolean equals(Object o)
+ {
+ Value val = (Value) o;
+ return buf.equals(val.stringValue());
+ }
+
+ /**
+ * Assume we are sent a value to compare with. If not then this will fail
+ * most grievously.
+ *
+ */
+ @Override
+ public int compareTo(Value val)
+ {
+ return buf.compareTo(val.stringValue());
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String toString()
+ {
+ return "\"" + buf + "\"";
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.java
new file mode 100644
index 00000000..4ffba5f1
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.java
@@ -0,0 +1,126 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+
+/**
+ * @author adam
+ *
+ */
+public class MergerURI implements URI
+{
+
+ private static final long serialVersionUID = 350068407482600064L;
+
+ public static String KdmNS = "http://org.omg.kdm/";
+
+ public static String KdmModelNS = "http://kdmanalytics.com/";
+
+ public static final String WORKBENCH_EXTENSION = "__WORKBENCH__";
+
+ public static final Literal WORKBENCH_EXTENSION_LITERAL = getLiteral(WORKBENCH_EXTENSION);
+
+ private String name;
+
+ private String nameSpace;
+
+ /**
+ *
+ * @param ns
+ * @param name
+ */
+ public MergerURI(String ns, String name)
+ {
+ this.name = name;
+ this.nameSpace = ns;
+
+ }
+
+ /**
+ * Generate a URI for the specified name
+ *
+ * @param name
+ * @return
+ */
+ private static Literal getLiteral(String name)
+ {
+ return new KdmLiteral(name);
+ }
+
+ /**
+ * Big assumption: In KDM, currently, the namespace is not important so I am
+ * not using it in my comparisons.
+ *
+ */
+ @Override
+ public boolean equals(Object o)
+ {
+ if (o instanceof MergerURI)
+ {
+ final MergerURI other = (MergerURI) o;
+ return other.getLocalName().equals(name);
+ }
+
+ if (o instanceof URI)
+ {
+ return ((URI) o).getLocalName().equals(name);
+ }
+
+ return false;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.openrdf.model.URI#getLocalName()
+ */
+ @Override
+ public String getLocalName()
+ {
+ return name;
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.openrdf.model.URI#getNamespace()
+ */
+ @Override
+ public String getNamespace()
+ {
+ return nameSpace;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public final int hashCode()
+ {
+ return toString().hashCode();
+ }
+
+ /**
+ * (non-Javadoc)
+ *
+ * @see org.openrdf.model.Value#stringValue()
+ */
+ @Override
+ public String stringValue()
+ {
+ return nameSpace + name;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String toString()
+ {
+ return stringValue();
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.java
new file mode 100644
index 00000000..3d023b4a
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.java
@@ -0,0 +1,320 @@
+
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+public class MergerUtilities
+{
+
+ private Repository repository;
+
+ /**
+ *
+ * @param repository
+ */
+ public MergerUtilities(Repository repository)
+ {
+ this.repository = repository;
+
+ }
+
+ /**
+ *
+ * @param
+ * @param
+ * @param iter
+ */
+ private void closeQuietly(CloseableIteration iter)
+ {
+ try
+ {
+ if (iter != null)
+ {
+ iter.close();
+ }
+ }
+ catch (final Exception e)
+ {
+ // TODO: Log
+ }
+
+ }
+
+ /**
+ *
+ * @param con
+ */
+ private void closeQuietly(RepositoryConnection con)
+ {
+ try
+ {
+ if (con != null)
+ {
+ con.close();
+ }
+ }
+ catch (final RepositoryException e)
+ {
+ // TODO:Log
+ }
+ }
+
+ /**
+ *
+ * @param
+ * @param
+ * @param con
+ * @param statements
+ */
+ private void closeQuietly(RepositoryConnection con, CloseableIteration statements)
+ {
+ closeQuietly(statements);
+ closeQuietly(con);
+ }
+
+ /**
+ * Return the URI for the owner of the specified element.
+ *
+ * @param uri
+ * @return First found parent URI, or null if no parent found. An error is
+ * written to stderr if there is more then one parent found.
+ * @throws RepositoryException
+ */
+ public URI getOwner(URI uri) throws RepositoryException
+ {
+ final ValueFactory f = repository.getValueFactory();
+ final URI predicate = f.createURI(MergerURI.KdmNS + "contains");
+
+ CloseableIteration statements = null;
+ RepositoryConnection con = null;
+
+ try
+ {
+ con = repository.getConnection();
+ statements = con.getStatements(null, predicate, uri, false);
+
+ URI result = null;
+ while (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ if (result == null)
+ {
+ result = (URI) st.getSubject();
+ }
+ else
+ {
+ // TODO:LOG.error("Element has more then one parent (" + uri
+ // + ", " + result + "," + st.getSubject() + ")");
+ }
+ return (URI) st.getSubject();
+
+ }
+ return result;
+ }
+ finally
+ {
+ closeQuietly(con, statements);
+ }
+ }
+
+ /**
+ * Simple function that creates a predicate based on the provided string
+ * predicate name.
+ *
+ * @param pred
+ * @return
+ */
+ protected URI getPredicate(String pred)
+ {
+ final ValueFactory f = repository.getValueFactory();
+ return f.createURI(MergerURI.KdmNS, pred);
+ }
+
+ /**
+ * Returns the requested RDF Attribute as a string value.
+ *
+ * @param id
+ * @param name
+ * @return
+ * @throws RepositoryException
+ */
+ public String getRDFAttribute(URI id, String name) throws RepositoryException
+ {
+ return getRDFAttribute(id, name, null);
+ }
+
+ /**
+ * Returns the requested RDF Attribute as a string value. This version is
+ * used for the rare cases when a context is used.
+ *
+ * @param id
+ * @param name
+ * @param context
+ * @return
+ * @throws RepositoryException
+ */
+ public String getRDFAttribute(URI id, String name, Value context) throws RepositoryException
+ {
+ final Value value = getRDFAttributeValue(id, name);
+ if (value == null)
+ {
+ return null;
+ }
+ return value.stringValue();
+ }
+
+ /**
+ * Same as getRDFAttribute, but returns the result as a "Value" as opposed
+ * to a "String".
+ *
+ * @param name
+ * @param name
+ * @return
+ * @throws RepositoryException
+ */
+ public Value getRDFAttributeValue(URI source, String name) throws RepositoryException
+ {
+ if (source == null)
+ {
+ // TODO: log
+ return null;
+ }
+ final ValueFactory f = repository.getValueFactory();
+ final URI predicate = f.createURI(MergerURI.KdmNS, name);
+ RepositoryConnection con = null;
+ CloseableIteration statements = null;
+
+ try
+ {
+ con = repository.getConnection();
+ statements = con.getStatements(source, predicate, null, false);
+
+ if (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ return st.getObject();
+ }
+ }
+ finally
+ {
+ closeQuietly(con, statements);
+ }
+ return null;
+ }
+
+ /**
+ * Return the entities that are related in any way
+ *
+ * @param id
+ * @param predicate
+ * @return
+ */
+ public CloseableIteration getRelated(Value id) throws RepositoryException
+ {
+
+ RepositoryConnection con = null;
+ try
+ {
+ con = repository.getConnection();
+ return con.getStatements((Resource) id, null, null, false);
+ }
+ finally
+ {
+ closeQuietly(con);
+ }
+ }
+
+ /**
+ * Return the entities that are related in the specified manner
+ *
+ * @param id
+ * @param predicate
+ * @return
+ */
+ public List getRelated(Value id, String predicate) throws RepositoryException
+ {
+ final ArrayList results = new ArrayList();
+ CloseableIteration statements = null;
+
+ RepositoryConnection con = null;
+ try
+ {
+ con = repository.getConnection();
+
+ URI predicate2 = getPredicate(predicate);
+ statements = con.getStatements((Resource) id, predicate2, null, true, (Resource) null);
+ while (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ final URI result = (URI) st.getObject();
+ results.add(result);
+ }
+ }
+ finally
+ {
+ closeQuietly(con, statements);
+ }
+
+ return results;
+ }
+
+ /**
+ * Return the entities that are related in the specified manner
+ *
+ * @param id
+ * @param predicate
+ * @return
+ */
+ public URI getRelatedValue(Value id, String predicate) throws RepositoryException
+ {
+ CloseableIteration statements = null;
+ RepositoryConnection con = null;
+ try
+ {
+ con = repository.getConnection();
+ statements = con.getStatements((Resource) id, getPredicate(predicate), null, false);
+ if (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ final Value val = st.getObject();
+ if (val instanceof URI)
+ {
+ return (URI) st.getObject();
+ }
+ // TODO: Log
+ }
+ }
+ finally
+ {
+ closeQuietly(con, statements);
+ }
+ return null;
+ }
+
+ /**
+ * Get the root element for the specified context
+ *
+ * @param context
+ * @return
+ * @throws RepositoryException
+ */
+ public Value getRootId() throws RepositoryException
+ {
+ ValueFactory f = repository.getValueFactory();
+ Value segmentURI = f.createURI("http://kdmanalytics.com/", Long.toString(0));
+ return segmentURI;
+ }
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.java
new file mode 100644
index 00000000..6c310283
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.java
@@ -0,0 +1,26 @@
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+
+/**
+ * Simple subclass of IllegalArguemntException
+ *
+ * Gives a little more info than the standards IllegalArgumentException
+ *
+ * @author Kyle Girard
+ *
+ */
+public class NullArgumentException extends IllegalArgumentException
+{
+ /**
+ * Required for serialization support.
+ *
+ * @see java.io.Serializable
+ */
+ private static final long serialVersionUID = 1174360235354917591L;
+
+
+ public NullArgumentException(String argName)
+ {
+ super((argName == null ? "Argument" : argName) + " must not be null.");
+ }
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.java
new file mode 100644
index 00000000..2babfd53
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.java
@@ -0,0 +1,110 @@
+package com.kdmanalytics.kdm.repositoryMerger.Utilities;
+import java.util.Iterator;
+/**
+ * Extremely simple StringTokenizer. Tokenizes a string on a single character.
+ *
+ * You can set a boolean to true preserve all tokens or false to skip empty
+ * tokens
+ *
+ * @author Kyle Girard
+ *
+ */
+public class StringTokenIterator implements Iterable, Iterator
+{
+ private char delim;
+
+ private String srcString;
+
+ int srcStringLength;
+
+ int startIndex;
+
+ int endIndex;
+
+ boolean match;
+
+ boolean lastMatch;
+
+ boolean preserveTokens;
+
+ /** Create a StringTokenIterator
+ *
+ * @param sourceString String to be tokenized
+ * @param delimiter
+ * @param preserveAllTokens Should the delimeter be preserved
+ */
+ public StringTokenIterator(String sourceString, char delimiter, boolean preserveAllTokens)
+ {
+ if (sourceString == null)
+ {
+ throw new NullArgumentException("aString");
+ }
+
+ if (sourceString.isEmpty())
+ {
+ throw new IllegalArgumentException("'sourceString' cannot be an empty String");
+ }
+
+ lastMatch = false;
+ match = false;
+ startIndex = 0;
+ endIndex = 0;
+ srcString = sourceString;
+ srcStringLength = srcString.length();
+ delim = delimiter;
+ preserveTokens = preserveAllTokens;
+ }
+
+ @Override
+ public Iterator iterator()
+ {
+ return this;
+ }
+
+ @Override
+ public boolean hasNext()
+ {
+ if (endIndex > srcStringLength)
+ {
+ return false;
+ }
+
+ while (endIndex < srcStringLength)
+ {
+ if (srcString.charAt(endIndex) == delim)
+ {
+ if (match || preserveTokens)
+ {
+ return true;
+ }
+ startIndex = ++endIndex;
+ continue;
+ }
+ match = true;
+ lastMatch = false;
+ ++endIndex;
+ }
+ return (match || (preserveTokens && lastMatch));
+ }
+
+ @Override
+ public String next()
+ {
+ String retStr;
+ if (startIndex == 0 && endIndex == 0)
+ {
+ hasNext();
+ }
+ retStr = srcString.substring(startIndex, endIndex);
+ match = false;
+ lastMatch = true;
+ startIndex = ++endIndex;
+ return retStr;
+ }
+
+ @Override
+ public void remove()
+ {
+ throw new UnsupportedOperationException("Remove not supported");
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.java
new file mode 100644
index 00000000..e96e238c
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.java
@@ -0,0 +1,44 @@
+package com.kdmanalytics.kdm.repositoryMerger.linkconfig;
+
+
+
+/**
+ * This class refers back to the LinkConfig class which handles both the Merge
+ * and Link configuration files in one.
+ *
+ */
+public class FileMergeConfig extends MergeConfig
+{
+
+ private LinkConfig linkConfig;
+
+ /**
+ * Load configuration information from the file.
+ *
+ * @param in
+ */
+ public FileMergeConfig(LinkConfig linkConfig)
+ {
+ this.linkConfig = linkConfig;
+ }
+
+ /**
+ * Return the merge type based on the KDM type.
+ *
+ */
+ @Override
+ public int getMergeType(String kdmType)
+ {
+ return linkConfig.getMergeType(kdmType);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.kdmanalytics.kdm.link.linker.MergeConfig#getNoIdMergeType()
+ */
+ @Override
+ public int getNoIdMergeType()
+ {
+ return linkConfig.getNoIdMergeType();
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.java
new file mode 100644
index 00000000..6395e8f2
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.java
@@ -0,0 +1,326 @@
+
+package com.kdmanalytics.kdm.repositoryMerger.linkconfig;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * Load the configuration file and provide access to the contents through the
+ * specified interfaces.
+ *
+ */
+public class LinkConfig
+{
+
+ // private static final Logger LOG =
+ // Logger.getLogger(LinkConfig.class);//getLogger(LinkConfig.class);
+
+ /**
+ * This class provides access to the merge specific components of the file
+ *
+ */
+ private FileMergeConfig mergeConfig = null;
+
+ /**
+ *
+ */
+ private Map mergeMap = null;
+
+ /**
+ * By default, what is done when an element has no id
+ */
+ private int noIdMergeType = MergeConfig.IGNORE;
+
+ /**
+ *
+ */
+ private List mergeRegex = null;
+
+// /**
+// *
+// */
+// private Map types = null;
+
+ /**
+ *
+ */
+ public LinkConfig()
+ {
+ init();
+ }
+
+ /**
+ * Parse the configuration file and setup the required data structures.
+ * Instantiate the interface classes that will be requested.
+ *
+ * @param file
+ */
+ public LinkConfig(File file)
+ {
+ init();
+ load(file);
+ }
+
+ /**
+ * Parse the configuration stream and setup the required data structures.
+ * Instantiate the interface classes that will be requested.
+ *
+ * @param is
+ */
+ public LinkConfig(InputStream is)
+ {
+ init();
+ load(is);
+ }
+
+ /**
+ * Load the specified config file into the linker configuration.
+ *
+ * @param file
+ */
+ public void load(File file)
+ {
+ try
+ {
+ InputStream is = new FileInputStream(file);
+ load(is);
+ is.close();
+ }
+ catch (FileNotFoundException e)
+ {
+ // LOG.error("Exception loading config file", e);
+ }
+ catch (IOException e)
+ {
+ // LOG.error("Exception loading config file", e);
+ }
+ }
+
+ /**
+ * Load configuration information from the specified stream into the linker
+ * configuration.
+ *
+ * @param is
+ */
+ public void load(InputStream is)
+ {
+ try
+ {
+ BufferedReader in = new BufferedReader(new InputStreamReader(is));
+ String line = in.readLine();
+ int lineCount = 0;
+ while (line != null)
+ {
+ lineCount++;
+ line = line.trim();
+ if (line.isEmpty())
+ {
+ line = in.readLine();
+ continue;
+ }
+ if (line.startsWith("#"))
+ {
+ line = in.readLine();
+ continue;
+ }
+ if (line.startsWith("action,"))
+ loadMergeDefinition(line.substring(7));
+ else if (line.startsWith("noid,"))
+ loadNoIdDefinition(line.substring(5));
+ else System.err.println("Parse error on line " + lineCount);// LOG.error("Parse error on line "
+ // +
+ // lineCount);
+ line = in.readLine();
+ }
+ }
+ catch (IOException e)
+ {
+ // LOG.error("Exception loading config file", e);
+ }
+ }
+
+ /**
+ *
+ * @param is
+ */
+ private void init()
+ {
+ mergeConfig = new FileMergeConfig(this);
+
+ mergeMap = new HashMap();
+ mergeRegex = new ArrayList();
+
+// types = new HashMap();
+ }
+
+ /**
+ *
+ * @param substring
+ */
+ private void loadNoIdDefinition(String def)
+ {
+ StringTokenizer st = new StringTokenizer(def, ",");
+ if (!st.hasMoreElements())
+ {
+ // LOG.error("Bad noid definition");
+ return;
+ }
+ String type = st.nextToken();
+ if ("COPY".equals(type))
+ {
+ noIdMergeType = MergeConfig.COPY;
+ }
+ else if ("MERGE".equals(type))
+ {
+ noIdMergeType = MergeConfig.MERGE;
+ }
+ else if ("IGNORE".equals(type))
+ {
+ noIdMergeType = MergeConfig.IGNORE;
+ }
+ else if ("SINGLETON".equals(type))
+ {
+ noIdMergeType = MergeConfig.SINGLETON;
+ }
+ else
+ {
+ // LOG.error("Invalid link type " + type);
+ return;
+ }
+ }
+
+ /**
+ * Load the merge definition map
+ *
+ * @param substring
+ */
+ private void loadMergeDefinition(String def)
+ {
+ StringTokenizer st = new StringTokenizer(def, ",");
+ if (!st.hasMoreElements())
+ {
+ // LOG.error("Bad action definition");
+ return;
+ }
+ String kdmType = st.nextToken();
+ if (!st.hasMoreElements())
+ {
+ // LOG.error("Bad action definition");
+ return;
+ }
+ String actionType = st.nextToken();
+ try
+ {
+ Field field = MergeConfig.class.getField(actionType);
+ int value = field.getInt(null);
+ if (isRegex(kdmType))
+ mergeRegex.add(kdmType);
+
+ // Even regexes are placed here, since they will never match
+ // without coercion.
+ mergeMap.put(kdmType, value);
+ }
+ catch (SecurityException e)
+ {
+ // LOG.error("Exception loading definitions", e);
+ }
+ catch (NoSuchFieldException e)
+ {
+ // LOG.error("Exception loading definitions", e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // LOG.error("Exception loading definitions", e);
+ }
+ catch (IllegalAccessException e)
+ {
+ // LOG.error("Exception loading definitions", e);
+ }
+ }
+
+ /**
+ * Ugly hack to identify regular expressions. This only works since we know
+ * the limitations of the string names we are expecting.
+ *
+ * @param kdmType
+ * @return
+ */
+ private boolean isRegex(String s)
+ {
+ if (s.contains("."))
+ return true;
+ if (s.contains("?"))
+ return true;
+ if (s.contains("*"))
+ return true;
+ if (s.contains("["))
+ return true;
+ if (s.contains("("))
+ return true;
+ if (s.contains("^"))
+ return true;
+ if (s.contains("$"))
+ return true;
+ return false;
+ }
+
+ /**
+ * Get the interface used to retrieve merge specific data
+ *
+ * @return
+ */
+ public MergeConfig getMergeConfig()
+ {
+ return mergeConfig;
+ }
+
+ /**
+ * Return the merge type based on the KDM type.
+ *
+ */
+ public int getMergeType(String kdmType)
+ {
+ Integer result = mergeMap.get(kdmType);
+ if (result == null)
+ {
+ for (Iterator it = mergeRegex.iterator(); it.hasNext();)
+ {
+ String regex = it.next();
+ if (kdmType.matches(regex))
+ {
+ result = mergeMap.get(regex);
+ break;
+ }
+ }
+
+ // FALLBACK, anything else is ignored.
+ if (result == null)
+ result = MergeConfig.IGNORE;
+ }
+ return result.intValue();
+ }
+
+ /**
+ * Where there are no link:ids, how should the elements be handled
+ *
+ * @return
+ */
+ public int getNoIdMergeType()
+ {
+ return noIdMergeType;
+ }
+
+
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.java
new file mode 100644
index 00000000..35656230
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.java
@@ -0,0 +1,52 @@
+package com.kdmanalytics.kdm.repositoryMerger.linkconfig;
+
+/**
+ * Merge configuration interface. Provides an API through which the merge tool
+ * can determine how to handle various situations. Also tells the Linker proper
+ * what id generators to use.
+ *
+ * Subclass this to provide the data required to work.
+ *
+ */
+public abstract class MergeConfig
+{
+
+ public static final int IGNORE = 0;
+
+ public static final int MERGE = 1;
+
+ public static final int COPY = 2;
+
+ public static final int SINGLETON = 3;
+
+ public static final int DEFAULT = IGNORE;
+
+ public MergeConfig()
+ {
+ }
+
+// /**
+// * Get the merge type for the provided element
+// *
+// * @param element
+// * @return
+// */
+// public int getMergeType(Element element)
+// {
+// return getMergeType(element.getClass().getSimpleName());
+// }
+
+ /**
+ * Given the string type name, return the type of merge to engage in.
+ *
+ * @param simpleName
+ * @return
+ */
+ public abstract int getMergeType(String kdmType);
+
+ /**
+ * If there is no link ID, how should the elements be handled?
+ * @return
+ */
+ public abstract int getNoIdMergeType();
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.java
new file mode 100644
index 00000000..04c365c6
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.java
@@ -0,0 +1,187 @@
+/**
+ *
+ * @author Ken Duck
+ *
+ */
+package com.kdmanalytics.kdm.repositoryMerger.ranges;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Range implements Cloneable
+{
+ protected int from;
+ protected int to;
+
+ public Range(int from, int to)
+ {
+ this.from = from;
+ this.to = to;
+ }
+
+ public Range(long uidBefore, long uidAfter)
+ {
+ from = (int) uidBefore;
+ to = (int) uidAfter;
+ }
+
+ public int getFrom() {return from;}
+ public int getTo() {return to;}
+
+ public void setFrom(int from) {this.from = from;}
+ public void setTo(int to) {this.to = to;}
+
+ /**
+ *
+ */
+ @Override
+ public final int hashCode()
+ {
+ return (from + "," + to).hashCode();
+ }
+
+ /** Returns true if the ranges are equal
+ *
+ */
+ @Override
+ public final boolean equals(Object o)
+ {
+ if(!(o instanceof Range))
+ return false;
+
+ Range r = (Range)o;
+ return (r.from == from && r.to == to);
+ }
+
+ /** Returns true if the specified range is contained within this
+ * range.
+ *
+ * @param r
+ * @return
+ */
+ public final boolean contains(Range r)
+ {
+ if(r.from >= from && r.to <= to) return true;
+ return false;
+ }
+
+ /** Returns true if the specified range is contained within this
+ * range.
+ *
+ * @param r
+ * @return
+ */
+ public final boolean contains(long id)
+ {
+ if(id < from) return false;
+ if(id > to) return false;
+ return true;
+ }
+
+ /**
+ *
+ * @param r
+ * @return
+ */
+ public boolean intersects(Range r)
+ {
+ if(r.from >= from && r.from <= to) return true;
+ if(r.to >= from && r.to <= to) return true;
+
+ if(from >= r.from && from <= r.to) return true;
+ if(to >= r.from && to <= r.to) return true;
+ return false;
+ }
+
+ /** Return the intersection between two ranges
+ *
+ * @param testRange
+ * @return
+ */
+ public Range getIntersection(Range r)
+ {
+ if(!intersects(r)) return null;
+
+ int f = r.from;
+ int t = r.to;
+ if(from > f) f = from;
+ if(to < t) t = to;
+
+ return new Range(f, t);
+ }
+
+ /** Return a list of ranges that indicates the difference between this
+ * range and the specified range
+ *
+ * Consider the situation where we have a range from 1 to 6 (inclusive)
+ * 1 2 3 4 5 6
+ *
+ * There are 4 situations of overlapping ranges. One where the range is
+ * completely contained, one where it overlaps the beginning of the
+ * range, one where it overlaps the end, and one where the range is
+ * completely covered.
+ *
+ * a. 1 2 - - 5 6
+ * b. - - 3 4 5 6
+ * c. 1 2 3 4 - -
+ * d. - - - - - -
+ *
+ * @param r
+ * @return
+ */
+ public final List minus(Range r)
+ {
+ List results = new ArrayList();
+ if(r.from <= from) // case b or case d
+ {
+ if(r.to >= to) // case d -- all deleted
+ {
+ return results;
+ }
+ else // case b -- beginning removed
+ {
+ results.add(new Range(r.to + 1, to));
+ }
+ }
+ else if(r.to >= to) // case c
+ {
+ results.add(new Range(from, r.from - 1));
+ }
+ else // case a
+ {
+ results.add(new Range(from, r.from - 1));
+ results.add(new Range(r.to + 1, to));
+ }
+
+ return results;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public final String toString()
+ {
+ return "Range: " + from + "-" + to;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ @Override
+ public final Range clone()
+ {
+ return new Range(from, to);
+ }
+
+ /** Get the size of the range.
+ *
+ * @return
+ */
+ public int getSize()
+ {
+ return to - from + 1;
+ }
+}
\ No newline at end of file
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.java b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.java
new file mode 100644
index 00000000..1c2285d4
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.java
@@ -0,0 +1,1249 @@
+
+package com.kdmanalytics.kdm.repositoryMerger.ranges;
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.apache.log4j.Logger;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.IntUtils;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.KdmConstants.WorkbenchPredicate;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.MergerURI;
+import com.kdmanalytics.kdm.repositoryMerger.Utilities.StringTokenIterator;
+
+
+/**
+ * Class that tracks a list of ranges, providing operations to add and remove
+ * ranges from the contained list.
+ *
+ * The operations of this list are a little different from a standard list.
+ * Since it is working with ranges, a range can be "contained" in this list by
+ * being "contained" in any of the stored ranges. For example if the list
+ * consists of a single element (1-5) it can be said to contain the element
+ * (2-3)
+ *
+ * This list *may* be backed by a repository specified by a particular URI
+ * (subject). In this case the initial list should be initialised from the
+ * repository and any edits should be written to the repository.
+ *
+ */
+public class RangeSet implements List
+{
+
+ private static final Logger LOG = Logger.getLogger(RangeSet.class);
+
+ /**
+ *
+ */
+ private static URI UID;
+
+ private static URI lastUID;
+
+ private static final int INFINITY = Integer.MAX_VALUE;
+
+ /**
+ *
+ */
+ private final List ranges = new ArrayList();
+
+ /**
+ * If the list is backed by a repository, store that information here.
+ *
+ */
+ private Repository repository;
+
+ private URI subject;
+
+ /**
+ * Indicates whether edits should be committed or not
+ */
+ private boolean commit = true;
+
+ /**
+ * Cache the result of the test for a particular ID. I do this since tests
+ * are in partial order it is quite possible the same test will occur
+ * multiple times in a row.
+ */
+ private long cacheContainsId = -1;
+
+ private boolean cacheContainsResult;
+
+ /**
+ * More advanced caching. IDs near each other (an in order search) are more
+ * likely to be in the same range.
+ *
+ * FIXME: Currently I do not use this value for extra sophistimicated
+ * performance improvements, since it appears the simpler caching and binary
+ * search are currently sufficient. There is no reason currently to mess
+ * with the code to remove this yet, though, and it is always possible I
+ * will want to add additional caching.
+ */
+ // private Range cacheContainsRange;
+
+ /**
+ * Instantiate a new set of ranges, initially containing only a single range
+ * containing a single value.
+ *
+ * @param uid
+ */
+ public RangeSet(int uid)
+ {
+ addImpl(new Range(uid, uid));
+ }
+
+ /**
+ * I want to remove all references to Point, which is why this constructor
+ * is deprecated.
+ *
+ *
+ * @param containedRanges
+ * @deprecated No longer for public use, The Point class is not to be used
+ */
+ @Deprecated
+ public RangeSet(List containedRanges)
+ {
+ for (final Point p : containedRanges)
+ {
+ addImpl(new Range(p.x, p.y));
+ }
+ }
+
+ /**
+ *
+ * @param range
+ */
+ public RangeSet(Range range)
+ {
+ add(range);
+ }
+
+ /**
+ * Instantiate a new ranges set based on the information found in the
+ * specified repository.
+ *
+ * @param element
+ * @throws RepositoryException
+ */
+ public RangeSet(Repository repository, URI subject) throws RepositoryException
+ {
+ this.repository = repository;
+ this.subject = subject;
+
+ commit = false;
+
+ final RepositoryConnection con = repository.getConnection();
+
+ try
+ {
+ // Add any other ranges found listed in the repository
+ initRanges(con, subject);
+
+ // Get the natural range
+ final int uid = getUID(con, subject);
+ // In some cases an element does not have ranges.
+ if (uid < 0)
+ {
+ return;
+ }
+
+ final int lastUID = getLastUID(con, subject);
+
+ // Always ensure the natural range is included
+ addImpl(new Range(uid, lastUID));
+ }
+ finally
+ {
+ commit = true;
+ if (con != null)
+ {
+ con.close();
+ }
+ }
+ }
+
+ public RangeSet()
+ {
+ }
+
+ /**
+ * Generate a range given the text range description.
+ *
+ * @param txt
+ * @return
+ */
+ public static RangeSet parse(String txt)
+ {
+ final RangeSet ranges = new RangeSet();
+ ranges.parseString(txt);
+ return ranges;
+ }
+
+ /**
+ * Initialize more ranges from the __KNT_UIDs attribute.
+ *
+ * @param con
+ * @param subject
+ * @throws RepositoryException
+ */
+ private final void initRanges(RepositoryConnection con, URI subject) throws RepositoryException
+ {
+ final CloseableIteration results = con.getStatements(subject, WorkbenchPredicate.WORKBENCH_RANGES.toURI(), null, false);
+ while (results.hasNext())
+ {
+ final Statement stmt = results.next();
+ final Value object = stmt.getObject();
+ final String rangesString = object.stringValue();
+ if ((rangesString != null) && !rangesString.isEmpty())
+ {
+ parseString(rangesString);
+ }
+ }
+ }
+
+ /**
+ * This method makes the assumption that the rangeString is produced by a
+ * clean RangeSet which is minimal and in order. If it detects that this is
+ * not the case, it calls a much less efficient version.
+ *
+ * @param rangesString
+ */
+ private final void parseString(String rangesString)
+ {
+ int max = 0;
+ if ((rangesString == null) || rangesString.isEmpty())
+ {
+ return;
+ }
+ for (final String token : new StringTokenIterator(rangesString, ',', false))
+ {
+ final int index = token.indexOf("-");
+ if (index <= 0)
+ {
+ LOG.error("Bad ranges found in " + rangesString + " (" + token + ")");
+ continue;
+ }
+ final String x = token.substring(0, index);
+ final String y = token.substring(index + 1);
+ try
+ {
+// final int from = Integer.parseInt(x);
+ final int from = IntUtils.parseIntChecked(x);
+// final int to = Integer.parseInt(y);
+ final int to = IntUtils.parseIntChecked(y);
+
+ // If an error is detected, use the slow method.
+ if (from < max)
+ {
+ LOG.error("Range string not in order or overlapping");
+ ranges.clear();
+ correctingParseString(rangesString);
+ return;
+ }
+ final Range range = new Range(from, to);
+ // addImpl(range);
+ ranges.add(range);
+ max = to;
+ }
+ catch (final NumberFormatException ex)
+ {
+ LOG.error("Invalid ranges found in " + rangesString + " (" + token + ")");
+ continue;
+ }
+ }
+ }
+
+ /**
+ * This parses the string and corrects any errors along the way (overlapping
+ * ranges, out of order, etc.)
+ *
+ * @param rangesString
+ */
+ private final void correctingParseString(String rangesString)
+ {
+ if ((rangesString == null) || rangesString.isEmpty())
+ {
+ return;
+ }
+ for (final String token : new StringTokenIterator(rangesString, ',', false))
+ {
+ final int index = token.indexOf("-");
+ if (index <= 0)
+ {
+ LOG.error("Bad ranges found in " + rangesString + " (" + token + ")");
+ continue;
+ }
+ final String x = token.substring(0, index);
+ final String y = token.substring(index + 1);
+ try
+ {
+// final Range range = new Range(Integer.parseInt(x), Integer.parseInt(y));
+ final Range range = new Range(IntUtils.parseIntChecked(x), IntUtils.parseIntChecked(y));
+ addImpl(range);
+ }
+ catch (final NumberFormatException ex)
+ {
+ LOG.error("Invalid ranges found in " + rangesString + " (" + token + ")");
+ continue;
+ }
+ }
+ }
+
+ /**
+ * Get the UID for the specified node.
+ *
+ * @param con
+ * @param subject
+ * @return
+ * @throws RepositoryException
+ */
+ private final int getUID(RepositoryConnection con, URI subject) throws RepositoryException
+ {
+ if (UID == null)
+ {
+ UID = con.getValueFactory().createURI(MergerURI.KdmNS, "UID");
+ }
+ final CloseableIteration results = con.getStatements(subject, UID, null, false);
+ if (!results.hasNext())
+ {
+ // There are some cases where we are happy to not have a UID.
+ // In these cases we will just have empty ranges.
+
+ // I used to error out in cases where I didn't expect this,
+ // but this is tough to keep up to date (no one will
+ // remember). Therefore assume it is correct that there
+ // is no UID in this situation.
+ return -1;
+ }
+
+ final Statement stmt = results.next();
+ final Value object = stmt.getObject();
+// final int uid = Integer.parseInt(object.stringValue());
+ final int uid = IntUtils.parseInt(object.stringValue());
+ return uid;
+ }
+
+ /**
+ *
+ * @param con
+ * @param subject
+ * @return
+ * @throws RepositoryException
+ */
+ private final int getLastUID(RepositoryConnection con, URI subject) throws RepositoryException
+ {
+ if (lastUID == null)
+ {
+ lastUID = con.getValueFactory().createURI(MergerURI.KdmNS, "lastUID");
+ }
+ final CloseableIteration results = con.getStatements(subject, lastUID, null, false);
+ if (!results.hasNext())
+ {
+ return getUID(con, subject);
+ }
+
+ final Statement stmt = results.next();
+ final Value object = stmt.getObject();
+// final int uid = Integer.parseInt(object.stringValue());
+ final int uid = IntUtils.parseInt(object.stringValue());
+ return uid;
+ }
+
+ /*
+ * The public add method ensures that the Range does not belong to another
+ * RangeSet by cloning the passed in range. This MAY add some extra time to
+ * the process since it takes time to construct and de-construct the
+ * objects, but is the only way we can be sure the data is consistent.
+ *
+ * (non-Javadoc)
+ *
+ * @see java.util.List#add(java.lang.Object)
+ */
+ @Override
+ public final boolean add(Range e)
+ {
+ if(e == null) return true;
+ // To ensure we are not sharing ranges with other RangeSets only
+ // add clones.
+ return addImpl(e.clone());
+ }
+
+ /**
+ *
+ * @param newRange
+ * @return
+ */
+ private final boolean addImpl(Range newRange)
+ {
+ return addImpl(0, newRange) >= 0;
+ }
+
+ /**
+ * FIXME: This is not efficient
+ *
+ * This version of the "add" method DOES NOT clone the range, so we must be
+ * sure that this is the only RangeSet that contains the specified range.
+ *
+ */
+ private final int addImpl(int start, Range newRange)
+ {
+ boolean result = false;
+ int i;
+ // Add the new range, merging if applicable
+ for (i = start; i < ranges.size(); ++i)
+ {
+ final Range range = ranges.get(i);
+ // If the range is contained, then bail out
+ if (range.contains(newRange))
+ {
+ result = true;
+ break;
+ }
+
+ // pre
+ if (newRange.from < range.from)
+ {
+ // join
+ if (newRange.to >= range.from - 1)
+ {
+ range.from = newRange.from;
+ // Does the new range completely overlap the current range?
+ if (newRange.to > range.to)
+ {
+ range.to = newRange.to;
+ // It is possible we overlap further ranges. Merge any
+ // overlapped ranges.
+ final int j = i + 1;
+ while (j < ranges.size()) // The size gets smaller with
+ // each iteration due to the
+ // merge
+ {
+ final Range nextRange = ranges.get(j);
+ // Overlap!
+ if (newRange.intersects(nextRange))
+ {
+ if (nextRange.to > newRange.to)
+ {
+ newRange.to = nextRange.to; // Merge
+ }
+ ranges.remove(j); // Remove the merged next
+ }
+ // No more overlaps
+ else
+ {
+ break;
+ }
+ }
+ }
+ result = true;
+ break;
+ }
+
+ // insert
+ ranges.add(i, newRange.clone());
+ result = true;
+ break;
+ }
+
+ // post
+ // merge
+ if (range.to >= newRange.from - 1)
+ {
+ range.to = newRange.to;
+ result = true;
+ // Can we join with the next?
+ if (i < ranges.size() - 1)
+ {
+ mergeRanges(range, i);
+ }
+ break;
+ }
+ }
+
+ // If we couldn't add in by now, just append to the list
+ if (!result)
+ {
+ result = ranges.add(newRange.clone());
+ }
+
+ if (commit && (repository != null))
+ {
+ try
+ {
+ updateRanges();
+ }
+ catch (final RepositoryException e1)
+ {
+ e1.printStackTrace();
+ return -1;
+ }
+ }
+ if (result)
+ {
+ return i;
+ }
+ else
+ {
+ return -1;
+ }
+
+ }
+
+ /**
+ * The specified range may span multiple subsequent ranges.
+ *
+ * @param range
+ * The range to keep
+ * @param index
+ * The index of the range to keep, possibly merge subsequent
+ * ranges
+ */
+ private void mergeRanges(Range range, int index)
+ {
+ final int i = index + 1;
+
+ // Keep going until we run out of ranges. We will break
+ // the loop if merges are no longer possible (before we run out
+ // of ranges in the set).
+ while (i < ranges.size())
+ {
+ final Range next = ranges.get(i);
+
+ // If the next "from" is equal to or less than the previous "to"
+ // then the
+ // ranges should be merged.
+ if (next.from <= range.to + 1)
+ {
+ range.to = next.to;
+
+ // Now that the merge is done, remove the next.
+ ranges.remove(i);
+ }
+ // If there is no intersection between the nodes, then there are no
+ // merges
+ // remaining.
+ else
+ {
+ break;
+ }
+
+ // Don't increment i, since the size is getting smaller due to
+ // removing elements from the list.
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#add(int, java.lang.Object)
+ */
+ @Override
+ public final void add(int index, Range element)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#addAll(java.util.Collection)
+ */
+ @Override
+ public final boolean addAll(Collection extends Range> c)
+ {
+ if (c == null)
+ {
+ return true; // We can successfully add nothing
+ }
+ int start = 0;
+ boolean result = true;
+ commit = false; // Hold off commit until all adds are complete
+
+ try
+ {
+ if (c instanceof RangeSet)
+ {
+ for (final Range range : c)
+ {
+ start = addImpl(start, range);
+ if (start < 0)
+ {
+ result = false;
+ break;
+ }
+ }
+ }
+ else
+ {
+ for (final Range range : c)
+ {
+ result &= add(range);
+ }
+ }
+ if (repository != null)
+ {
+ try
+ {
+ updateRanges();
+ }
+ catch (final RepositoryException e1)
+ {
+ e1.printStackTrace();
+ return false;
+ }
+ }
+ return result;
+ }
+ finally
+ {
+ commit = true;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#addAll(int, java.util.Collection)
+ */
+ @Override
+ public final boolean addAll(int index, Collection extends Range> c)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#clear()
+ */
+ @Override
+ public final void clear()
+ {
+ ranges.clear();
+ }
+
+ /**
+ * Do any of the component ranges contain the passed in range?
+ *
+ * WARNING: There are some conditions on the use of this method to compare
+ * two RangeSets. This test is a quick and dirty check to see what the
+ * chances are that one range contains the other. Only the first element of
+ * the "child" is checked. If it is contained we will assume (for now) that
+ * the rest are too. This may have to be revisited if we want to use this
+ * method in a more generally applicable way.
+ */
+ @Override
+ public final boolean contains(Object o)
+ {
+ if (o instanceof Range)
+ {
+ for (final Range range : ranges)
+ {
+ if (range.contains((Range) o))
+ {
+ return true;
+ }
+ }
+ }
+
+ // This test is a quick and dirty check to see what the chances
+ // are that one range contains the other. Only the first
+ // element of the "child" is checked. If it is contained we
+ // will assume (for now) that the rest are too. This may have
+ // to be revisited if we want to use this method in a more
+ // generally applicable way.
+ if (o instanceof RangeSet)
+ {
+ final RangeSet child = (RangeSet) o;
+ if (child.size() > 0)
+ {
+ return contains(child.get(0)) && !equals(child);
+ }
+ }
+ return false;
+ }
+
+ /**
+ *
+ * @param id
+ * @return
+ */
+ public final boolean contains(long id)
+ {
+ // If the id is cached, then return the cached result
+ if (id == cacheContainsId)
+ {
+ return cacheContainsResult;
+ }
+
+ // Make the new cached id the specified id
+ cacheContainsId = id;
+
+ final int val = Collections.binarySearch(ranges, new Range(id, id), new Comparator() {
+
+ @Override
+ public final int compare(Range arg0, Range arg1)
+ {
+ int result = 0;
+ if (arg1.from < arg0.from)
+ {
+ result = 1;
+ }
+ if (arg1.from > arg0.to)
+ {
+ result = -1;
+ }
+ return result;
+ }
+
+ });
+
+ cacheContainsResult = val >= 0;
+
+ return cacheContainsResult;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#containsAll(java.util.Collection)
+ */
+ @Override
+ public final boolean containsAll(Collection> c)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#get(int)
+ */
+ @Override
+ public final Range get(int index)
+ {
+ return ranges.get(index);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#indexOf(java.lang.Object)
+ */
+ @Override
+ public final int indexOf(Object o)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#isEmpty()
+ */
+ @Override
+ public final boolean isEmpty()
+ {
+ return ranges.isEmpty();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#iterator()
+ */
+ @Override
+ public final Iterator iterator()
+ {
+ return ranges.iterator();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#lastIndexOf(java.lang.Object)
+ */
+ @Override
+ public final int lastIndexOf(Object o)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#listIterator()
+ */
+ @Override
+ public final ListIterator listIterator()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#listIterator(int)
+ */
+ @Override
+ public final ListIterator listIterator(int index)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Remove the specified range from the contained set of ranges.
+ *
+ */
+ @Override
+ public final boolean remove(Object o)
+ {
+ return remove(0, o) >= 0;
+ }
+
+ /**
+ * Optimized range for use when removing many ranges (from a range set).
+ * This allows us to perform the remove operation for multiple ranges in one
+ * pass through this RangeSet
+ *
+ * @param index
+ * @param o
+ * @return
+ */
+ private final int remove(int index, Object o)
+ {
+ if (!(o instanceof Range))
+ {
+ throw new UnsupportedOperationException("Cannot remove class " + o.getClass() + " from ranges");
+ }
+
+ final Range r = (Range) o;
+
+ final List buf = new ArrayList();
+
+ final int size = ranges.size();
+ for (int i = index; i < size; i++)
+ {
+ final Range range = ranges.get(i);
+ if (range.intersects(r))
+ {
+ final List tmp = range.minus(r);
+ buf.addAll(tmp);
+ if (tmp.size() == 0) // completely remove a range
+ {
+ ranges.remove(i);
+ return i;
+ }
+ if (tmp.size() == 1) // Removed one side or the other
+ {
+ final Range newRange = tmp.get(0);
+ range.from = newRange.from;
+ range.to = newRange.to;
+ return i;
+ }
+ if (tmp.size() == 2) // Split range
+ {
+ Range newRange = tmp.get(0);
+ range.from = newRange.from;
+ range.to = newRange.to;
+ newRange = tmp.get(1);
+ ++i;
+ ranges.add(i, newRange);
+ return i;
+ }
+ LOG.error("Range 'minus' results in 3 ranges");
+ }
+ }
+
+ // Write changes to the repository
+ if (commit && (repository != null))
+ {
+ try
+ {
+ updateRanges();
+ }
+ catch (final RepositoryException e)
+ {
+ LOG.error(e.getLocalizedMessage(), e);
+ return -1;
+ }
+ }
+
+ return index;
+ }
+
+ @Override
+ public final Range remove(int index)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * FIXME: Only apply changes after ALL removes
+ *
+ */
+ @Override
+ public final boolean removeAll(Collection> c)
+ {
+ boolean result = true;
+ commit = false; // Don't commit removes till all complete
+ try
+ {
+ if (c instanceof RangeSet)
+ {
+ // Special optimized remove
+ int index = 0;
+ for (final Range range : (RangeSet) c)
+ {
+ index = remove(index, range);
+ }
+ }
+ else
+ {
+ for (final Object o : c)
+ {
+ result &= remove(o);
+ }
+ }
+ if (repository != null)
+ {
+ try
+ {
+ updateRanges();
+ }
+ catch (final RepositoryException e1)
+ {
+ e1.printStackTrace();
+ return false;
+ }
+ }
+ return result;
+ }
+ finally
+ {
+ commit = true;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#retainAll(java.util.Collection)
+ */
+ @Override
+ public final boolean retainAll(Collection> c)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#set(int, java.lang.Object)
+ */
+ @Override
+ public final Range set(int index, Range element)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#size()
+ */
+ @Override
+ public final int size()
+ {
+ return ranges.size();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#subList(int, int)
+ */
+ @Override
+ public final List subList(int fromIndex, int toIndex)
+ {
+ return ranges.subList(fromIndex, toIndex);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#toArray()
+ */
+ @Override
+ public final Object[] toArray()
+ {
+ return ranges.toArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.List#toArray(T[])
+ */
+ @Override
+ public final T[] toArray(T[] a)
+ {
+ return ranges.toArray(a);
+ }
+
+ /**
+ * Write any changes to the list to the repository.
+ *
+ * @throws RepositoryException
+ *
+ */
+ private final void updateRanges() throws RepositoryException
+ {
+ if (repository == null)
+ {
+ return;
+ }
+
+ final RepositoryConnection con = repository.getConnection();
+
+ // Keep in mind the RangeSet includes the range between UID and lastUID.
+ // Keep the stored data minimal by not reproducing that data if not
+ // required.
+ // Get the natural range
+ if (ranges.size() == 1)
+ {
+ final int uid = getUID(con, subject);
+ // In some cases an element does not have ranges.
+ if (uid >= 0)
+ {
+ final int lastUID = getLastUID(con, subject);
+ final Range range = new Range(uid, lastUID);
+ // If these ranges are equal, then remove the range from the
+ // repository,
+ // or just don't write it.
+ if (range.equals(ranges.get(0)))
+ {
+ if (con.hasStatement(subject, WorkbenchPredicate.WORKBENCH_RANGES.toURI(), null, false))
+ {
+ con.remove(subject, WorkbenchPredicate.WORKBENCH_RANGES.toURI(), null);
+ }
+ return;
+ }
+ }
+ }
+
+ try
+ {
+ con.add(subject, WorkbenchPredicate.WORKBENCH_RANGES.toURI(), con.getValueFactory().createLiteral(toString()));
+ }
+ finally
+ {
+ if (con != null)
+ {
+ con.close();
+ }
+ }
+ }
+
+ /**
+ * Return the string in a format suitable for writing to the repository.
+ *
+ */
+ @Override
+ public final String toString()
+ {
+ // Update the ranges in the repository
+ final Iterator it = ranges.iterator();
+ // Record the rest
+ final StringBuilder sb = new StringBuilder();
+ while (it.hasNext())
+ {
+ final Range range = it.next();
+ sb.append(range.from + "-" + range.to);
+ if (it.hasNext())
+ {
+ sb.append(",");
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Return the inverted range. Do not edit this range set.
+ *
+ * @return
+ */
+ public final RangeSet getInvertedRange()
+ {
+ final Range range = new Range(0, INFINITY);
+ final RangeSet results = new RangeSet(range);
+ results.removeAll(this);
+ return results;
+ }
+
+ /**
+ *
+ * @param offset
+ */
+ public final void offsetAll(long offset)
+ {
+ for (final Range r : ranges)
+ {
+ r.to += offset;
+ r.from += offset;
+ }
+ }
+
+ /**
+ * Determine if the two ranges intersect
+ *
+ * @param test
+ * @return
+ */
+ public boolean intersects(RangeSet test)
+ {
+ for (final Range range : ranges)
+ {
+ for (final Range testRange : test)
+ {
+ if (range.intersects(testRange))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /** Return the full intersection between the two ranges
+ *
+ * FIXME: Not efficient.
+ *
+ * @param elementRanges
+ * @return
+ */
+ public RangeSet getIntersection(RangeSet test)
+ {
+ RangeSet results = new RangeSet();
+
+ for (final Range range : ranges)
+ {
+ for (final Range testRange : test)
+ {
+ if (range.intersects(testRange))
+ {
+ results.add(range.getIntersection(testRange));
+ }
+ }
+ }
+ return results;
+ }
+
+ /**
+ * Validate the contained ranges to ensure this RangeSet is correct. This is
+ * only used for testing purposes.
+ *
+ * Ensure none of the internal ranges overlap
+ *
+ */
+ public boolean isValid()
+ {
+ for (final Range range : ranges)
+ {
+ for (final Range testRange : ranges)
+ {
+ // Of course ranges overlap themselves
+ if (range == testRange)
+ {
+ continue;
+ }
+
+ // But they should not overlap others
+ if (range.intersects(testRange))
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object o)
+ {
+ if (!(o instanceof RangeSet))
+ {
+ return false;
+ }
+
+ final RangeSet oSet = (RangeSet) o;
+ if (oSet.size() != size())
+ {
+ return false;
+ }
+
+ for (int i = size() - 1; i >= 0; --i)
+ {
+ if (!get(i).equals(oSet.get(i)))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Range X completely contains range Y if and only if: * X intersects with Y
+ * AND * The inverse of X does not intersect with Y
+ *
+ * @param linkRange
+ * @return
+ */
+ public boolean containsRanges(RangeSet ranges)
+ {
+ if (!intersects(ranges))
+ {
+ return false;
+ }
+ final RangeSet inv = getInvertedRange();
+ if (inv.intersects(ranges))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Get the sum of the contained ranges sizes
+ *
+ * @return
+ */
+ public int getCoverageSize()
+ {
+ int size = 0;
+ for (final Range range : ranges)
+ {
+ size += range.getSize();
+ }
+ return size;
+ }
+}
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/config/cxx.cfg b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/src/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/MANIFEST.MF b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/MANIFEST.MF
new file mode 100644
index 00000000..51201dd6
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Export-Package: com.kdmanalytics.kdm.repositoryMerger,com.kdmanalytics
+ .kdm.repositoryMerger.Utilities,com.kdmanalytics.kdm.repositoryMerger
+ .linkconfig,com.kdmanalytics.kdm.repositoryMerger.ranges
+Require-Bundle: org.apache.commons.lang3;bundle-version="[3.0.0,4.0.0)
+ ",net.sf.trove4j;bundle-version="3.0.3",org.openrdf.sesame;bundle-ver
+ sion="[2.4.0,2.5.0)",com.google.guava;bundle-version="[14.0.1,15.0.0)
+ ",org.apache.log4j;bundle-version="[1.2.13,2.0.0)",com.lexicalscope.j
+ ewelcli;bundle-version="[0.8.5,1.0.0)",org.eclipse.ui,org.eclipse.cor
+ e.runtime
+Bundle-Vendor: KDM Analytics Inc.
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.15.5
+Bundle-Name: Repository Merger
+Bundle-Activator: com.kdmanalytics.kdm.repositoryMerger.Activator
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: com.kdmanalytics.kdm.repositoryMerger
+Eclipse-RegisterBuddy: com.lexicalscope.jewelcli
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Activator.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Activator.class
new file mode 100644
index 00000000..87e42a19
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Activator.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class
new file mode 100644
index 00000000..c9f55764
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/GlobalMap.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class
new file mode 100644
index 00000000..0ad686d6
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodOverrides.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodState.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodState.class
new file mode 100644
index 00000000..51c221fd
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/MethodState.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class
new file mode 100644
index 00000000..0213a807
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/RepositoryMerger.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class
new file mode 100644
index 00000000..a114954e
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/StatementWriter.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class
new file mode 100644
index 00000000..23f9aa3d
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/IntUtils.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class
new file mode 100644
index 00000000..f689d914
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmPredicate.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class
new file mode 100644
index 00000000..34fe65e2
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$KdmType.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class
new file mode 100644
index 00000000..8ef8db04
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchPredicate.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class
new file mode 100644
index 00000000..f3d002f7
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants$WorkbenchStereotype.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class
new file mode 100644
index 00000000..39daed60
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmConstants.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class
new file mode 100644
index 00000000..d02b9306
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/KdmLiteral.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class
new file mode 100644
index 00000000..6c6578fa
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerURI.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class
new file mode 100644
index 00000000..9929e494
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/MergerUtilities.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class
new file mode 100644
index 00000000..e188dca5
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/NullArgumentException.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class
new file mode 100644
index 00000000..3cb662c8
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/Utilities/StringTokenIterator.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class
new file mode 100644
index 00000000..6812efe6
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ValidationData.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class
new file mode 100644
index 00000000..47449dc8
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/FileMergeConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class
new file mode 100644
index 00000000..5d1fd56b
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/LinkConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class
new file mode 100644
index 00000000..1250c763
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/linkconfig/MergeConfig.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class
new file mode 100644
index 00000000..c0ae8557
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/Range.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class
new file mode 100644
index 00000000..c68ff564
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet$1.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class
new file mode 100644
index 00000000..f8b08f22
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/com/kdmanalytics/kdm/repositoryMerger/ranges/RangeSet.class differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/config/cxx.cfg b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/classes/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/com.kdmanalytics.kdm.repositoryMerger-1.15.5.jar b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/com.kdmanalytics.kdm.repositoryMerger-1.15.5.jar
new file mode 100644
index 00000000..e23b7b4c
Binary files /dev/null and b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/com.kdmanalytics.kdm.repositoryMerger-1.15.5.jar differ
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/local-artifacts.properties b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/local-artifacts.properties
new file mode 100644
index 00000000..265c8bc6
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/local-artifacts.properties
@@ -0,0 +1,4 @@
+#Thu May 29 09:56:04 EDT 2014
+artifact.attached.p2metadata=/home/adam/git/toif/plugins/com.kdmanalytics.kdm.repositoryMerger/target/p2content.xml
+artifact.main=/home/adam/git/toif/plugins/com.kdmanalytics.kdm.repositoryMerger/target/com.kdmanalytics.kdm.repositoryMerger-1.15.5.jar
+artifact.attached.p2artifacts=/home/adam/git/toif/plugins/com.kdmanalytics.kdm.repositoryMerger/target/p2artifacts.xml
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/maven-archiver/pom.properties b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/maven-archiver/pom.properties
new file mode 100644
index 00000000..8e4bdb5e
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu May 29 09:56:04 EDT 2014
+version=1.15.5
+groupId=com.kdmanalytics.toif.compile
+artifactId=com.kdmanalytics.kdm.repositoryMerger
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2artifacts.xml b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2artifacts.xml
new file mode 100644
index 00000000..6e4621f2
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2artifacts.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2content.xml b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2content.xml
new file mode 100644
index 00000000..78f60ec7
--- /dev/null
+++ b/3rdParty/com.kdmanalytics.kdm.repositoryMerger/target/p2content.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bundle-SymbolicName: com.kdmanalytics.kdm.repositoryMerger
Bundle-Version: 1.15.5
+
+
+
+
+
diff --git a/3rdParty/com.lexicalscope.jewelcli/.classpath b/3rdParty/com.lexicalscope.jewelcli/.classpath
new file mode 100644
index 00000000..16278668
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/com.lexicalscope.jewelcli/.project b/3rdParty/com.lexicalscope.jewelcli/.project
new file mode 100644
index 00000000..60b6d3c1
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/.project
@@ -0,0 +1,28 @@
+
+
+ com.lexicalscope.jewelcli
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/com.lexicalscope.jewelcli/.settings/org.eclipse.jdt.core.prefs b/3rdParty/com.lexicalscope.jewelcli/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/com.lexicalscope.jewelcli/LICENSE b/3rdParty/com.lexicalscope.jewelcli/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/com.lexicalscope.jewelcli/LICENSE.txt b/3rdParty/com.lexicalscope.jewelcli/LICENSE.txt
new file mode 100644
index 00000000..5ebe92c5
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/LICENSE.txt
@@ -0,0 +1,27 @@
+BSD License
+
+Copyright (c) 2000-2006, www.hamcrest.org
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of
+conditions and the following disclaimer. Redistributions in binary form must reproduce
+the above copyright notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the distribution.
+
+Neither the name of Hamcrest nor the names of its contributors may be used to endorse
+or promote products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/3rdParty/com.lexicalscope.jewelcli/META-INF/DEPENDENCIES b/3rdParty/com.lexicalscope.jewelcli/META-INF/DEPENDENCIES
new file mode 100644
index 00000000..70d6e798
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/META-INF/DEPENDENCIES
@@ -0,0 +1,23 @@
+// ------------------------------------------------------------------
+// Transitive dependencies of this project determined from the
+// maven pom organized by organization.
+// ------------------------------------------------------------------
+
+Google Guice - Core Library
+
+
+From: 'an unknown organization'
+ - AOP alliance (http://aopalliance.sourceforge.net) aopalliance:aopalliance:jar:1.0
+ License: Public Domain
+ - javax.inject (http://code.google.com/p/atinject/) javax.inject:javax.inject:jar:1
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - CGLIB (http://sourceforge.net/projects/cglib/) org.sonatype.sisu.inject:cglib:jar:2.2.1-v20090111
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+From: 'ObjectWeb' (http://www.objectweb.org/)
+ - ASM Core (http://asm.objectweb.org/asm/) asm:asm:jar:3.1
+
+
+
+
+
diff --git a/3rdParty/com.lexicalscope.jewelcli/META-INF/MANIFEST.MF b/3rdParty/com.lexicalscope.jewelcli/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..b171f49c
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/META-INF/MANIFEST.MF
@@ -0,0 +1,50 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JewelCLI
+Bundle-SymbolicName: com.lexicalscope.jewelcli
+Bundle-Version: 0.8.5
+Bundle-ClassPath: com.lexicalscope.jewelcli_0.8.5.jar
+Bundle-Vendor: KDM Analytics Inc
+Export-Package: com.lexicalscope.jewel,
+ com.lexicalscope.jewel.cli,
+ com.lexicalscope.jewel.cli.parser,
+ com.lexicalscope.jewel.cli.specification,
+ com.lexicalscope.jewel.cli.validation,
+ com.lexicalscope.jewelcli.internal.cglib.asm,
+ com.lexicalscope.jewelcli.internal.cglib.core,
+ com.lexicalscope.jewelcli.internal.cglib.proxy,
+ com.lexicalscope.jewelcli.internal.fluentcollections,
+ com.lexicalscope.jewelcli.internal.fluentcollectionsadapters,
+ com.lexicalscope.jewelcli.internal.fluentcollectionsfunctions,
+ com.lexicalscope.jewelcli.internal.fluentcollectionsiterator,
+ com.lexicalscope.jewelcli.internal.fluentcollectionslist,
+ com.lexicalscope.jewelcli.internal.fluentcollectionsmap,
+ com.lexicalscope.jewelcli.internal.fluentcollectionsmap.transforms,
+ com.lexicalscope.jewelcli.internal.fluentreflection,
+ com.lexicalscope.jewelcli.internal.fluentreflection.bean,
+ com.lexicalscope.jewelcli.internal.fluentreflection.dynamicproxy,
+ com.lexicalscope.jewelcli.internal.guava.base,
+ com.lexicalscope.jewelcli.internal.guava.collect,
+ com.lexicalscope.jewelcli.internal.guava.primitives,
+ com.lexicalscope.jewelcli.internal.guice,
+ com.lexicalscope.jewelcli.internal.guice.internal,
+ com.lexicalscope.jewelcli.internal.guice.internal.util,
+ com.lexicalscope.jewelcli.internal.guice.util,
+ com.lexicalscope.jewelcli.internal.hamcrest,
+ com.lexicalscope.jewelcli.internal.hamcrest.collection,
+ com.lexicalscope.jewelcli.internal.hamcrest.core,
+ com.lexicalscope.jewelcli.internal.hamcrest.internal,
+ com.lexicalscope.jewelcli.internal.lamdaj,
+ com.lexicalscope.jewelcli.internal.lamdaj.collection,
+ com.lexicalscope.jewelcli.internal.lamdaj.function.aggregate,
+ com.lexicalscope.jewelcli.internal.lamdaj.function.convert,
+ com.lexicalscope.jewelcli.internal.lamdaj.proxy,
+ com.lexicalscope.jewelcli.internal.lamdaj.util,
+ com.lexicalscope.jewelcli.internal.lamdaj.util.iterator,
+ com.lexicalscope.jewelcli.internal.lang3.builder
+Created-By: Apache Maven
+Archiver-Version: Plexus Archiver
+Eclipse-BuddyPolicy: registered
+Built-By: jenkins
+Build-Jdk: 1.7.0_25
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.properties b/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.properties
new file mode 100644
index 00000000..0df42ca8
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:08:54 EDT 2013
+version=0.8.5
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=com.lexicalscope.jewelcli
diff --git a/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.xml b/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.xml
new file mode 100644
index 00000000..70833b1a
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/com.lexicalscope.jewelcli/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ com.lexicalscope.jewelcli
+ 0.8.5
+
+ Lexical Scope JewelCLI Library
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/com.lexicalscope.jewelcli/NOTICE b/3rdParty/com.lexicalscope.jewelcli/NOTICE
new file mode 100644
index 00000000..3f59805c
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/3rdParty/com.lexicalscope.jewelcli/asm-license.txt b/3rdParty/com.lexicalscope.jewelcli/asm-license.txt
new file mode 100644
index 00000000..bfc17890
--- /dev/null
+++ b/3rdParty/com.lexicalscope.jewelcli/asm-license.txt
@@ -0,0 +1,27 @@
+ASM: a very small and fast Java bytecode manipulation framework
+Copyright (c) 2000,2002,2003 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdParty/com.lexicalscope.jewelcli/com.lexicalscope.jewelcli_0.8.5.jar b/3rdParty/com.lexicalscope.jewelcli/com.lexicalscope.jewelcli_0.8.5.jar
new file mode 100644
index 00000000..caf84f04
Binary files /dev/null and b/3rdParty/com.lexicalscope.jewelcli/com.lexicalscope.jewelcli_0.8.5.jar differ
diff --git a/3rdParty/javax.xml/.classpath b/3rdParty/javax.xml/.classpath
new file mode 100644
index 00000000..259e6d13
--- /dev/null
+++ b/3rdParty/javax.xml/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/javax.xml/.project b/3rdParty/javax.xml/.project
new file mode 100644
index 00000000..191237fd
--- /dev/null
+++ b/3rdParty/javax.xml/.project
@@ -0,0 +1,28 @@
+
+
+ javax.xml
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/javax.xml/.settings/org.eclipse.jdt.core.prefs b/3rdParty/javax.xml/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f42de363
--- /dev/null
+++ b/3rdParty/javax.xml/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/javax.xml/META-INF/MANIFEST.MF b/3rdParty/javax.xml/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..af29d54e
--- /dev/null
+++ b/3rdParty/javax.xml/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Xerces-J
+Bundle-SymbolicName: javax.xml
+Require-Bundle: system.bundle
+Bundle-Version: 1.4.0.qualifier
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: javax.xml;version="1.4",
+ javax.xml.datatype;version="1.4",
+ javax.xml.namespace;version="1.4",
+ javax.xml.parsers;version="1.4",
+ javax.xml.transform;version="1.4",
+ javax.xml.transform.dom;version="1.4",
+ javax.xml.transform.sax;version="1.4",
+ javax.xml.transform.stream;version="1.4",
+ javax.xml.validation;version="1.4",
+ javax.xml.xpath;version="1.4",
+ org.apache.xmlcommons;version="1.4.1",
+ org.w3c.dom;version="3.0",
+ org.w3c.dom.bootstrap;version="3.0",
+ org.w3c.dom.css;version="2.0",
+ org.w3c.dom.events;version="2.0",
+ org.w3c.dom.html;version="2.0",
+ org.w3c.dom.ls;version="2.0",
+ org.w3c.dom.ranges;version="2.0",
+ org.w3c.dom.stylesheets;version="2.0",
+ org.w3c.dom.traversal;version="2.0",
+ org.w3c.dom.views;version="2.0",
+ org.w3c.dom.xpath;version="3.0",
+ org.xml.sax;version="2.0.2",
+ org.xml.sax.ext;version="2.0.2",
+ org.xml.sax.helpers;version="2.0.2"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/3rdParty/javax.xml/build.properties b/3rdParty/javax.xml/build.properties
new file mode 100644
index 00000000..b7d67620
--- /dev/null
+++ b/3rdParty/javax.xml/build.properties
@@ -0,0 +1,5 @@
+output.. = .
+bin.includes = META-INF/,\
+ javax/,\
+ license/,\
+ org/
diff --git a/3rdParty/javax.xml/javax/xml/XMLConstants.class b/3rdParty/javax.xml/javax/xml/XMLConstants.class
new file mode 100644
index 00000000..58b4a065
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/XMLConstants.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/DatatypeConfigurationException.class b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConfigurationException.class
new file mode 100644
index 00000000..b829e4da
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConfigurationException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$1.class b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$1.class
new file mode 100644
index 00000000..a599ff1c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$Field.class b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$Field.class
new file mode 100644
index 00000000..4ce08bb4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants$Field.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants.class b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants.class
new file mode 100644
index 00000000..f4e8e349
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/DatatypeConstants.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/DatatypeFactory.class b/3rdParty/javax.xml/javax/xml/datatype/DatatypeFactory.class
new file mode 100644
index 00000000..bd77cf02
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/DatatypeFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/Duration.class b/3rdParty/javax.xml/javax/xml/datatype/Duration.class
new file mode 100644
index 00000000..7a80f455
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/Duration.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder$ConfigurationError.class b/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder$ConfigurationError.class
new file mode 100644
index 00000000..c73052cc
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder$ConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder.class b/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder.class
new file mode 100644
index 00000000..949052a5
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/FactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$1.class
new file mode 100644
index 00000000..2268124d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$2.class
new file mode 100644
index 00000000..ce62ba97
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$3.class
new file mode 100644
index 00000000..080ed79a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$4.class
new file mode 100644
index 00000000..a1cb2608
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$5.class
new file mode 100644
index 00000000..d739df9d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport.class
new file mode 100644
index 00000000..75b59cc3
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/datatype/XMLGregorianCalendar.class b/3rdParty/javax.xml/javax/xml/datatype/XMLGregorianCalendar.class
new file mode 100644
index 00000000..e16c2fa5
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/datatype/XMLGregorianCalendar.class differ
diff --git a/3rdParty/javax.xml/javax/xml/namespace/NamespaceContext.class b/3rdParty/javax.xml/javax/xml/namespace/NamespaceContext.class
new file mode 100644
index 00000000..db2ef45b
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/namespace/NamespaceContext.class differ
diff --git a/3rdParty/javax.xml/javax/xml/namespace/QName$1.class b/3rdParty/javax.xml/javax/xml/namespace/QName$1.class
new file mode 100644
index 00000000..fefdd9ed
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/namespace/QName$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/namespace/QName.class b/3rdParty/javax.xml/javax/xml/namespace/QName.class
new file mode 100644
index 00000000..5f5feb64
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/namespace/QName.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilder.class b/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilder.class
new file mode 100644
index 00000000..b799a7db
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilderFactory.class b/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilderFactory.class
new file mode 100644
index 00000000..6a8d6eff
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/DocumentBuilderFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/FactoryConfigurationError.class b/3rdParty/javax.xml/javax/xml/parsers/FactoryConfigurationError.class
new file mode 100644
index 00000000..cb0254b0
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/FactoryConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder$ConfigurationError.class b/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder$ConfigurationError.class
new file mode 100644
index 00000000..ff408d42
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder$ConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder.class b/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder.class
new file mode 100644
index 00000000..16205cd8
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/FactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/FilePathToURI.class b/3rdParty/javax.xml/javax/xml/parsers/FilePathToURI.class
new file mode 100644
index 00000000..89cf2c8d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/FilePathToURI.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/ParserConfigurationException.class b/3rdParty/javax.xml/javax/xml/parsers/ParserConfigurationException.class
new file mode 100644
index 00000000..97756711
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/ParserConfigurationException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SAXParser.class b/3rdParty/javax.xml/javax/xml/parsers/SAXParser.class
new file mode 100644
index 00000000..0519009a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SAXParser.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SAXParserFactory.class b/3rdParty/javax.xml/javax/xml/parsers/SAXParserFactory.class
new file mode 100644
index 00000000..f8bceb8d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SAXParserFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$1.class
new file mode 100644
index 00000000..982b261d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$2.class
new file mode 100644
index 00000000..983ce016
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$3.class
new file mode 100644
index 00000000..002736e0
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$4.class
new file mode 100644
index 00000000..0343e377
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$5.class
new file mode 100644
index 00000000..2b5d3dee
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport.class
new file mode 100644
index 00000000..79799c3c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/parsers/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/EventFilter.class b/3rdParty/javax.xml/javax/xml/stream/EventFilter.class
new file mode 100644
index 00000000..7620f7b4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/EventFilter.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/FactoryConfigurationError.class b/3rdParty/javax.xml/javax/xml/stream/FactoryConfigurationError.class
new file mode 100644
index 00000000..68707658
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/FactoryConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/FactoryFinder$ConfigurationError.class b/3rdParty/javax.xml/javax/xml/stream/FactoryFinder$ConfigurationError.class
new file mode 100644
index 00000000..2ad8d0b9
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/FactoryFinder$ConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/FactoryFinder.class b/3rdParty/javax.xml/javax/xml/stream/FactoryFinder.class
new file mode 100644
index 00000000..bae33c01
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/FactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/Location.class b/3rdParty/javax.xml/javax/xml/stream/Location.class
new file mode 100644
index 00000000..d0b3a2a4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/Location.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$1.class
new file mode 100644
index 00000000..2e02f087
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$2.class
new file mode 100644
index 00000000..bb20bb7f
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$3.class
new file mode 100644
index 00000000..7c6fdbe7
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$4.class
new file mode 100644
index 00000000..b4f70f64
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$5.class
new file mode 100644
index 00000000..f21d97ff
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport.class
new file mode 100644
index 00000000..3722cd16
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/StreamFilter.class b/3rdParty/javax.xml/javax/xml/stream/StreamFilter.class
new file mode 100644
index 00000000..8cbad666
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/StreamFilter.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLEventFactory.class b/3rdParty/javax.xml/javax/xml/stream/XMLEventFactory.class
new file mode 100644
index 00000000..6a050e23
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLEventFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLEventReader.class b/3rdParty/javax.xml/javax/xml/stream/XMLEventReader.class
new file mode 100644
index 00000000..50999ca8
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLEventReader.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLEventWriter.class b/3rdParty/javax.xml/javax/xml/stream/XMLEventWriter.class
new file mode 100644
index 00000000..c1262ebc
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLEventWriter.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLInputFactory.class b/3rdParty/javax.xml/javax/xml/stream/XMLInputFactory.class
new file mode 100644
index 00000000..978c78f9
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLInputFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLOutputFactory.class b/3rdParty/javax.xml/javax/xml/stream/XMLOutputFactory.class
new file mode 100644
index 00000000..181590f6
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLOutputFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLReporter.class b/3rdParty/javax.xml/javax/xml/stream/XMLReporter.class
new file mode 100644
index 00000000..491e8f55
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLReporter.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLResolver.class b/3rdParty/javax.xml/javax/xml/stream/XMLResolver.class
new file mode 100644
index 00000000..607315ee
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLResolver.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLStreamConstants.class b/3rdParty/javax.xml/javax/xml/stream/XMLStreamConstants.class
new file mode 100644
index 00000000..3aadadc0
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLStreamConstants.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLStreamException.class b/3rdParty/javax.xml/javax/xml/stream/XMLStreamException.class
new file mode 100644
index 00000000..695d9ad3
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLStreamException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLStreamReader.class b/3rdParty/javax.xml/javax/xml/stream/XMLStreamReader.class
new file mode 100644
index 00000000..ae63e4e6
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLStreamReader.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/XMLStreamWriter.class b/3rdParty/javax.xml/javax/xml/stream/XMLStreamWriter.class
new file mode 100644
index 00000000..ea9cf49b
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/XMLStreamWriter.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/Attribute.class b/3rdParty/javax.xml/javax/xml/stream/events/Attribute.class
new file mode 100644
index 00000000..32bd467f
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/Attribute.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/Characters.class b/3rdParty/javax.xml/javax/xml/stream/events/Characters.class
new file mode 100644
index 00000000..10a31a8c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/Characters.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/Comment.class b/3rdParty/javax.xml/javax/xml/stream/events/Comment.class
new file mode 100644
index 00000000..bd8b31da
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/Comment.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/DTD.class b/3rdParty/javax.xml/javax/xml/stream/events/DTD.class
new file mode 100644
index 00000000..85b4c1a1
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/DTD.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/EndDocument.class b/3rdParty/javax.xml/javax/xml/stream/events/EndDocument.class
new file mode 100644
index 00000000..a34251fd
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/EndDocument.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/EndElement.class b/3rdParty/javax.xml/javax/xml/stream/events/EndElement.class
new file mode 100644
index 00000000..7896b741
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/EndElement.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/EntityDeclaration.class b/3rdParty/javax.xml/javax/xml/stream/events/EntityDeclaration.class
new file mode 100644
index 00000000..ea183b09
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/EntityDeclaration.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/EntityReference.class b/3rdParty/javax.xml/javax/xml/stream/events/EntityReference.class
new file mode 100644
index 00000000..1b08a98e
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/EntityReference.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/Namespace.class b/3rdParty/javax.xml/javax/xml/stream/events/Namespace.class
new file mode 100644
index 00000000..a407484a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/Namespace.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/NotationDeclaration.class b/3rdParty/javax.xml/javax/xml/stream/events/NotationDeclaration.class
new file mode 100644
index 00000000..9c96769c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/NotationDeclaration.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/ProcessingInstruction.class b/3rdParty/javax.xml/javax/xml/stream/events/ProcessingInstruction.class
new file mode 100644
index 00000000..be3051b2
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/ProcessingInstruction.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/StartDocument.class b/3rdParty/javax.xml/javax/xml/stream/events/StartDocument.class
new file mode 100644
index 00000000..bbc961e6
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/StartDocument.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/StartElement.class b/3rdParty/javax.xml/javax/xml/stream/events/StartElement.class
new file mode 100644
index 00000000..32612ad5
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/StartElement.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/events/XMLEvent.class b/3rdParty/javax.xml/javax/xml/stream/events/XMLEvent.class
new file mode 100644
index 00000000..5e149b0c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/events/XMLEvent.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/util/EventReaderDelegate.class b/3rdParty/javax.xml/javax/xml/stream/util/EventReaderDelegate.class
new file mode 100644
index 00000000..b7a577d2
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/util/EventReaderDelegate.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/util/StreamReaderDelegate.class b/3rdParty/javax.xml/javax/xml/stream/util/StreamReaderDelegate.class
new file mode 100644
index 00000000..c6173414
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/util/StreamReaderDelegate.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/util/XMLEventAllocator.class b/3rdParty/javax.xml/javax/xml/stream/util/XMLEventAllocator.class
new file mode 100644
index 00000000..ffe11698
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/util/XMLEventAllocator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/stream/util/XMLEventConsumer.class b/3rdParty/javax.xml/javax/xml/stream/util/XMLEventConsumer.class
new file mode 100644
index 00000000..5c52b401
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/stream/util/XMLEventConsumer.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/ErrorListener.class b/3rdParty/javax.xml/javax/xml/transform/ErrorListener.class
new file mode 100644
index 00000000..a6f9a1a0
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/ErrorListener.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/FactoryFinder$ConfigurationError.class b/3rdParty/javax.xml/javax/xml/transform/FactoryFinder$ConfigurationError.class
new file mode 100644
index 00000000..4bd0c841
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/FactoryFinder$ConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/FactoryFinder.class b/3rdParty/javax.xml/javax/xml/transform/FactoryFinder.class
new file mode 100644
index 00000000..2c8e4494
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/FactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/OutputKeys.class b/3rdParty/javax.xml/javax/xml/transform/OutputKeys.class
new file mode 100644
index 00000000..def821de
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/OutputKeys.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/Result.class b/3rdParty/javax.xml/javax/xml/transform/Result.class
new file mode 100644
index 00000000..7a946701
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/Result.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$1.class
new file mode 100644
index 00000000..b774a66d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$2.class
new file mode 100644
index 00000000..952ea57b
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$3.class
new file mode 100644
index 00000000..cda77761
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$4.class
new file mode 100644
index 00000000..febce4eb
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$5.class
new file mode 100644
index 00000000..344b4427
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport.class
new file mode 100644
index 00000000..4e5acc7c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/Source.class b/3rdParty/javax.xml/javax/xml/transform/Source.class
new file mode 100644
index 00000000..41186323
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/Source.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/SourceLocator.class b/3rdParty/javax.xml/javax/xml/transform/SourceLocator.class
new file mode 100644
index 00000000..acc1b676
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/SourceLocator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/Templates.class b/3rdParty/javax.xml/javax/xml/transform/Templates.class
new file mode 100644
index 00000000..aefba9dc
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/Templates.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/Transformer.class b/3rdParty/javax.xml/javax/xml/transform/Transformer.class
new file mode 100644
index 00000000..a32a69a3
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/Transformer.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/TransformerConfigurationException.class b/3rdParty/javax.xml/javax/xml/transform/TransformerConfigurationException.class
new file mode 100644
index 00000000..eaf05c8a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/TransformerConfigurationException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/TransformerException.class b/3rdParty/javax.xml/javax/xml/transform/TransformerException.class
new file mode 100644
index 00000000..2c8228cb
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/TransformerException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/TransformerFactory.class b/3rdParty/javax.xml/javax/xml/transform/TransformerFactory.class
new file mode 100644
index 00000000..2f88fba2
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/TransformerFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/TransformerFactoryConfigurationError.class b/3rdParty/javax.xml/javax/xml/transform/TransformerFactoryConfigurationError.class
new file mode 100644
index 00000000..70770a08
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/TransformerFactoryConfigurationError.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/URIResolver.class b/3rdParty/javax.xml/javax/xml/transform/URIResolver.class
new file mode 100644
index 00000000..98d21d42
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/URIResolver.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/dom/DOMLocator.class b/3rdParty/javax.xml/javax/xml/transform/dom/DOMLocator.class
new file mode 100644
index 00000000..852a7eba
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/dom/DOMLocator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/dom/DOMResult.class b/3rdParty/javax.xml/javax/xml/transform/dom/DOMResult.class
new file mode 100644
index 00000000..93fa4ff7
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/dom/DOMResult.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/dom/DOMSource.class b/3rdParty/javax.xml/javax/xml/transform/dom/DOMSource.class
new file mode 100644
index 00000000..b064dc6d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/dom/DOMSource.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/sax/SAXResult.class b/3rdParty/javax.xml/javax/xml/transform/sax/SAXResult.class
new file mode 100644
index 00000000..680d02bc
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/sax/SAXResult.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/sax/SAXSource.class b/3rdParty/javax.xml/javax/xml/transform/sax/SAXSource.class
new file mode 100644
index 00000000..6bfa8c72
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/sax/SAXSource.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/sax/SAXTransformerFactory.class b/3rdParty/javax.xml/javax/xml/transform/sax/SAXTransformerFactory.class
new file mode 100644
index 00000000..57819c20
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/sax/SAXTransformerFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/sax/TemplatesHandler.class b/3rdParty/javax.xml/javax/xml/transform/sax/TemplatesHandler.class
new file mode 100644
index 00000000..dc8143be
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/sax/TemplatesHandler.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/sax/TransformerHandler.class b/3rdParty/javax.xml/javax/xml/transform/sax/TransformerHandler.class
new file mode 100644
index 00000000..1d3139e4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/sax/TransformerHandler.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/stax/StAXResult.class b/3rdParty/javax.xml/javax/xml/transform/stax/StAXResult.class
new file mode 100644
index 00000000..9b780718
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/stax/StAXResult.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/stax/StAXSource.class b/3rdParty/javax.xml/javax/xml/transform/stax/StAXSource.class
new file mode 100644
index 00000000..367463f6
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/stax/StAXSource.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/stream/FilePathToURI.class b/3rdParty/javax.xml/javax/xml/transform/stream/FilePathToURI.class
new file mode 100644
index 00000000..4a53d242
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/stream/FilePathToURI.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/stream/StreamResult.class b/3rdParty/javax.xml/javax/xml/transform/stream/StreamResult.class
new file mode 100644
index 00000000..cace6617
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/stream/StreamResult.class differ
diff --git a/3rdParty/javax.xml/javax/xml/transform/stream/StreamSource.class b/3rdParty/javax.xml/javax/xml/transform/stream/StreamSource.class
new file mode 100644
index 00000000..f0ef82e3
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/transform/stream/StreamSource.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/Schema.class b/3rdParty/javax.xml/javax/xml/validation/Schema.class
new file mode 100644
index 00000000..1dd7429f
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/Schema.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactory.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactory.class
new file mode 100644
index 00000000..e124f20c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$1.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$1.class
new file mode 100644
index 00000000..108f59b4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$2.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$2.class
new file mode 100644
index 00000000..89fc025a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$SingleIterator.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$SingleIterator.class
new file mode 100644
index 00000000..0f447742
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder$SingleIterator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder.class
new file mode 100644
index 00000000..7145ed05
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryLoader.class b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryLoader.class
new file mode 100644
index 00000000..13e0c0ba
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SchemaFactoryLoader.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$1.class
new file mode 100644
index 00000000..1f623b46
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$2.class
new file mode 100644
index 00000000..d1cc4531
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$3.class
new file mode 100644
index 00000000..9e47714a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$4.class
new file mode 100644
index 00000000..9463ae42
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$5.class
new file mode 100644
index 00000000..82807641
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$6.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$6.class
new file mode 100644
index 00000000..7ee69277
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$6.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$7.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$7.class
new file mode 100644
index 00000000..d0f7eff6
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$7.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$8.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$8.class
new file mode 100644
index 00000000..7ab4df9f
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport$8.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport.class
new file mode 100644
index 00000000..72b5c41a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/TypeInfoProvider.class b/3rdParty/javax.xml/javax/xml/validation/TypeInfoProvider.class
new file mode 100644
index 00000000..fcea0a55
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/TypeInfoProvider.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/Validator.class b/3rdParty/javax.xml/javax/xml/validation/Validator.class
new file mode 100644
index 00000000..a0b20ec5
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/Validator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/validation/ValidatorHandler.class b/3rdParty/javax.xml/javax/xml/validation/ValidatorHandler.class
new file mode 100644
index 00000000..e36cc939
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/validation/ValidatorHandler.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$1.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$1.class
new file mode 100644
index 00000000..954bb297
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$2.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$2.class
new file mode 100644
index 00000000..58ced7e7
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$3.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$3.class
new file mode 100644
index 00000000..3cbf66b2
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$4.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$4.class
new file mode 100644
index 00000000..8297f851
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$5.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$5.class
new file mode 100644
index 00000000..187af257
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$5.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$6.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$6.class
new file mode 100644
index 00000000..0d4befdb
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$6.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$7.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$7.class
new file mode 100644
index 00000000..ae665a46
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$7.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$8.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$8.class
new file mode 100644
index 00000000..af71dfcc
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport$8.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport.class b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport.class
new file mode 100644
index 00000000..02f35fc8
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPath.class b/3rdParty/javax.xml/javax/xml/xpath/XPath.class
new file mode 100644
index 00000000..16593402
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPath.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathConstants.class b/3rdParty/javax.xml/javax/xml/xpath/XPathConstants.class
new file mode 100644
index 00000000..1adaf154
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathConstants.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathException.class b/3rdParty/javax.xml/javax/xml/xpath/XPathException.class
new file mode 100644
index 00000000..06c79480
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathExpression.class b/3rdParty/javax.xml/javax/xml/xpath/XPathExpression.class
new file mode 100644
index 00000000..2887b00e
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathExpression.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathExpressionException.class b/3rdParty/javax.xml/javax/xml/xpath/XPathExpressionException.class
new file mode 100644
index 00000000..d42de23c
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathExpressionException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactory.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactory.class
new file mode 100644
index 00000000..752e6c77
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactory.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryConfigurationException.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryConfigurationException.class
new file mode 100644
index 00000000..b732fcce
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryConfigurationException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$1.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$1.class
new file mode 100644
index 00000000..d5cb107d
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$1.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$2.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$2.class
new file mode 100644
index 00000000..c1f131e2
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$2.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$SingleIterator.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$SingleIterator.class
new file mode 100644
index 00000000..d708360b
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder$SingleIterator.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder.class
new file mode 100644
index 00000000..d58ccbf4
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFactoryFinder.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFunction.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFunction.class
new file mode 100644
index 00000000..861c4f9e
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFunction.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionException.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionException.class
new file mode 100644
index 00000000..da96ad0a
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionException.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionResolver.class b/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionResolver.class
new file mode 100644
index 00000000..4f445a58
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathFunctionResolver.class differ
diff --git a/3rdParty/javax.xml/javax/xml/xpath/XPathVariableResolver.class b/3rdParty/javax.xml/javax/xml/xpath/XPathVariableResolver.class
new file mode 100644
index 00000000..3a16628f
Binary files /dev/null and b/3rdParty/javax.xml/javax/xml/xpath/XPathVariableResolver.class differ
diff --git a/3rdParty/javax.xml/license/LICENSE b/3rdParty/javax.xml/license/LICENSE
new file mode 100644
index 00000000..75b52484
--- /dev/null
+++ b/3rdParty/javax.xml/license/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/javax.xml/license/LICENSE.dom-documentation.txt b/3rdParty/javax.xml/license/LICENSE.dom-documentation.txt
new file mode 100644
index 00000000..e4226c71
--- /dev/null
+++ b/3rdParty/javax.xml/license/LICENSE.dom-documentation.txt
@@ -0,0 +1,73 @@
+xml-commons/java/external/LICENSE.dom-documentation.txt $Id: LICENSE.dom-documentation.txt 226215 2005-06-03 22:49:13Z mrglavas $
+
+
+This license came from: http://www.w3.org/Consortium/Legal/copyright-documents-20021231
+
+
+W3C® DOCUMENT LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
+
+Public documents on the W3C site are provided by the copyright holders under
+the following license. By using and/or copying this document, or the W3C
+document from which this statement is linked, you (the licensee) agree that
+you have read, understood, and will comply with the following terms and
+conditions:
+
+Permission to copy, and distribute the contents of this document, or the W3C
+document from which this statement is linked, in any medium for any purpose
+and without fee or royalty is hereby granted, provided that you include the
+following on ALL copies of the document, or portions thereof, that you use:
+
+ 1. A link or URL to the original W3C document.
+ 2. The pre-existing copyright notice of the original author, or if it
+ doesn't exist, a notice (hypertext is preferred, but a textual
+ representation is permitted) of the form: "Copyright © [$date-of-document]
+ World Wide Web Consortium, (Massachusetts Institute of Technology,
+ European Research Consortium for Informatics and Mathematics, Keio
+ University). All Rights Reserved.
+ http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231"
+ 3. If it exists, the STATUS of the W3C document.
+
+When space permits, inclusion of the full text of this NOTICE should be
+provided. We request that authorship attribution be provided in any software,
+documents, or other items or products that you create pursuant to the
+implementation of the contents of this document, or any portion thereof.
+
+No right to create modifications or derivatives of W3C documents is granted
+pursuant to this license. However, if additional requirements (documented in
+the Copyright FAQ) are satisfied, the right to create modifications or
+derivatives is sometimes granted by the W3C to individuals complying with
+those requirements.
+
+THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
+REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
+NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE
+FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT
+INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE
+PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
+
+The name and trademarks of copyright holders may NOT be used in advertising
+or publicity pertaining to this document or its contents without specific,
+written prior permission. Title to copyright in this document will at all
+times remain with copyright holders.
+
+----------------------------------------------------------------------------
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, moves information on
+style sheets, DTDs, and schemas to the Copyright FAQ, reflects that ERCIM is
+now a host of the W3C, includes references to this specific dated version of
+the license, and removes the ambiguous grant of "use". See the older
+formulation for the policy prior to this date. Please see our Copyright FAQ for
+common questions about using materials from our site, such as the translating
+or annotating specifications. Other questions about this notice can be directed
+to site-policy@w3.org.
+
+Joseph Reagle
+
+Last revised by Reagle $Date: 2005-06-03 18:49:13 -0400 (Fri, 03 Jun 2005) $
diff --git a/3rdParty/javax.xml/license/LICENSE.dom-software.txt b/3rdParty/javax.xml/license/LICENSE.dom-software.txt
new file mode 100644
index 00000000..81125fe5
--- /dev/null
+++ b/3rdParty/javax.xml/license/LICENSE.dom-software.txt
@@ -0,0 +1,54 @@
+xml-commons/java/external/LICENSE.dom-software.txt $Id: LICENSE.dom-software.txt 734314 2009-01-14 03:33:27Z mrglavas $
+
+This license came from: http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/java-binding.zip (COPYRIGHT.html)
+
+W3C® SOFTWARE NOTICE AND LICENSE
+Copyright © 2004 World Wide Web Consortium, (Massachusetts Institute of Technology,
+European Research Consortium for Informatics and Mathematics, Keio University).
+All Rights Reserved.
+
+The DOM bindings are published under the W3C Software Copyright Notice and
+License. The software license requires "Notice of any changes or modifications
+to the W3C files, including the date changes were made." Consequently, modified
+versions of the DOM bindings must document that they do not conform to the W3C
+standard; in the case of the IDL definitions, the pragma prefix can no longer
+be 'w3c.org'; in the case of the Java language binding, the package names can no
+longer be in the 'org.w3c' package.
+
+Note: The original version of the W3C Software Copyright Notice and License could
+be found at http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee) agree
+that you have read, understood, and will comply with the following terms and
+conditions.
+
+Permission to copy, modify, and distribute this software and its documentation,
+with or without modification, for any purpose and without fee or royalty is
+hereby granted, provided that you include the following on ALL copies of the
+software and documentation or portions thereof, including modifications:
+
+ 1. The full text of this NOTICE in a location viewable to users of the
+ redistributed or derivative work.
+ 2. Any pre-existing intellectual property disclaimers, notices, or terms
+ and conditions. If none exist, the W3C Software Short Notice should be
+ included (hypertext is preferred, text is permitted) within the body
+ of any redistributed or derivative code.
+ 3. Notice of any changes or modifications to the files, including the date
+ changes were made. (We recommend you provide URIs to the location from
+ which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior permission.
+Title to copyright in this software and any associated documentation will at
+all times remain with copyright holders.
\ No newline at end of file
diff --git a/3rdParty/javax.xml/license/LICENSE.sax.txt b/3rdParty/javax.xml/license/LICENSE.sax.txt
new file mode 100644
index 00000000..0738c247
--- /dev/null
+++ b/3rdParty/javax.xml/license/LICENSE.sax.txt
@@ -0,0 +1,23 @@
+xml-commons/java/external/LICENSE.sax.txt $Id: LICENSE.sax.txt 225954 2002-01-31 23:26:48Z curcuru $
+
+
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+
+This page is now out of date -- see the new SAX site at
+http://www.saxproject.org/ for more up-to-date
+releases and other information. Please change your bookmarks.
+
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
\ No newline at end of file
diff --git a/3rdParty/javax.xml/license/NOTICE b/3rdParty/javax.xml/license/NOTICE
new file mode 100644
index 00000000..9a05f3cb
--- /dev/null
+++ b/3rdParty/javax.xml/license/NOTICE
@@ -0,0 +1,16 @@
+ =========================================================================
+ == NOTICE file corresponding to section 4(d) of the Apache License, ==
+ == Version 2.0, in this case for the Apache xml-commons xml-apis ==
+ == distribution. ==
+ =========================================================================
+
+ Apache XML Commons XML APIs
+ Copyright 1999-2009 The Apache Software Foundation.
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+ - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+ - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
diff --git a/3rdParty/javax.xml/license/README.dom.txt b/3rdParty/javax.xml/license/README.dom.txt
new file mode 100644
index 00000000..4f6fb31d
--- /dev/null
+++ b/3rdParty/javax.xml/license/README.dom.txt
@@ -0,0 +1,56 @@
+xml-commons/java/external/README.dom.txt $Id: README.dom.txt 477038 2006-11-20 04:40:36Z mrglavas $
+
+
+HEAR YE, HEAR YE!
+
+
+All of the .java software and associated documentation about
+the DOM in this repository are distributed under the license
+from the W3C, which is provided herein.
+
+
+LICENSE.dom-software.txt covers all software from the W3C
+including the following items in the xml-commons project:
+
+ xml-commons/java/external/src/org/w3c
+ and all subdirectories
+
+(Note: SAC (The Simple API for CSS) has been published under an older
+version of the W3C license. The original license file is LICENSE.sac.html.)
+
+LICENSE.dom-documentation.txt covers all documentation from the W3C
+including the following items in the xml-commons project:
+
+ xml-commons/java/external/xdocs/dom
+ and all subdirectories
+
+The actual DOM Java Language Binding classes in xml-commons came from:
+ http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/java-binding.html
+
+The specification of DOM Level 3's various parts is at:
+ http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
+ http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/
+ http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/
+
+The specification of DOM Level 2's various parts is at:
+ http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/
+ http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/
+ http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/
+ http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113/
+
+The specification of DOM Level 1's various parts is at:
+ http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html
+
+Links to all available W3C DOM Java Bindings can be found at:
+ http://www.w3.org/DOM/DOMTR
+
+The actual classes of The Simple API for CSS (SAC) came from:
+ http://www.w3.org/Style/CSS/SAC/
+ http://www.w3.org/2002/06/sacjava-1.3.zip
+
+The actual DOM Java Language Binding classes for SMIL came from:
+ http://dev.w3.org/cvsweb/java/classes/org/w3c/dom/smil/
+ (both ElementTimeControl.java and TimeEvent.java were taken at revision 1.1)
+
+The actual DOM Java Language Binding classes for SVG 1.1 came from:
+ http://www.w3.org/TR/SVG11/java.html
\ No newline at end of file
diff --git a/3rdParty/javax.xml/license/README.sax.txt b/3rdParty/javax.xml/license/README.sax.txt
new file mode 100644
index 00000000..fd878768
--- /dev/null
+++ b/3rdParty/javax.xml/license/README.sax.txt
@@ -0,0 +1,24 @@
+xml-commons/java/external/README.sax.txt $Id: README.sax.txt 225954 2002-01-31 23:26:48Z curcuru $
+
+
+HEAR YE, HEAR YE!
+
+
+All of the .java software and associated documentation about
+SAX in this repository are distributed freely in the
+public domain.
+
+
+LICENSE.sax.txt covers all software and documentation from the
+megginson.com including the following in the xml-commons project:
+
+ xml-commons/java/external/src/org/xml/sax
+ and all subdirectories
+ xml-commons/java/external/xdocs/sax
+ and all subdirectories
+
+
+The actual SAX classes in xml-commons came from:
+ http://www.megginson.com/Software/index.html
+ The original versions are tagged 'SAX-2_0-r2-prerelease'
+
diff --git a/3rdParty/javax.xml/org/apache/xmlcommons/Version.class b/3rdParty/javax.xml/org/apache/xmlcommons/Version.class
new file mode 100644
index 00000000..5f48c66e
Binary files /dev/null and b/3rdParty/javax.xml/org/apache/xmlcommons/Version.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Attr.class b/3rdParty/javax.xml/org/w3c/dom/Attr.class
new file mode 100644
index 00000000..d04a837c
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Attr.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/CDATASection.class b/3rdParty/javax.xml/org/w3c/dom/CDATASection.class
new file mode 100644
index 00000000..34fa50b5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/CDATASection.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/CharacterData.class b/3rdParty/javax.xml/org/w3c/dom/CharacterData.class
new file mode 100644
index 00000000..22e545d9
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/CharacterData.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Comment.class b/3rdParty/javax.xml/org/w3c/dom/Comment.class
new file mode 100644
index 00000000..5184dbdb
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Comment.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMConfiguration.class b/3rdParty/javax.xml/org/w3c/dom/DOMConfiguration.class
new file mode 100644
index 00000000..563a5910
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMConfiguration.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMError.class b/3rdParty/javax.xml/org/w3c/dom/DOMError.class
new file mode 100644
index 00000000..8ac444ad
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMError.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMErrorHandler.class b/3rdParty/javax.xml/org/w3c/dom/DOMErrorHandler.class
new file mode 100644
index 00000000..f6d28a93
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMErrorHandler.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMException.class b/3rdParty/javax.xml/org/w3c/dom/DOMException.class
new file mode 100644
index 00000000..d6ebb30a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMException.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMImplementation.class b/3rdParty/javax.xml/org/w3c/dom/DOMImplementation.class
new file mode 100644
index 00000000..5eb341cf
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMImplementation.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMImplementationList.class b/3rdParty/javax.xml/org/w3c/dom/DOMImplementationList.class
new file mode 100644
index 00000000..d23edc01
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMImplementationList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMImplementationSource.class b/3rdParty/javax.xml/org/w3c/dom/DOMImplementationSource.class
new file mode 100644
index 00000000..2b6778a9
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMImplementationSource.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMLocator.class b/3rdParty/javax.xml/org/w3c/dom/DOMLocator.class
new file mode 100644
index 00000000..78ad20d3
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMLocator.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DOMStringList.class b/3rdParty/javax.xml/org/w3c/dom/DOMStringList.class
new file mode 100644
index 00000000..eea5f8be
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DOMStringList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Document.class b/3rdParty/javax.xml/org/w3c/dom/Document.class
new file mode 100644
index 00000000..b18c59db
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Document.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DocumentFragment.class b/3rdParty/javax.xml/org/w3c/dom/DocumentFragment.class
new file mode 100644
index 00000000..ec431dd7
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DocumentFragment.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/DocumentType.class b/3rdParty/javax.xml/org/w3c/dom/DocumentType.class
new file mode 100644
index 00000000..cbf1e1d5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/DocumentType.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Element.class b/3rdParty/javax.xml/org/w3c/dom/Element.class
new file mode 100644
index 00000000..5bc8348e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Element.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ElementTraversal.class b/3rdParty/javax.xml/org/w3c/dom/ElementTraversal.class
new file mode 100644
index 00000000..400ff53e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ElementTraversal.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Entity.class b/3rdParty/javax.xml/org/w3c/dom/Entity.class
new file mode 100644
index 00000000..39f79ba6
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Entity.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/EntityReference.class b/3rdParty/javax.xml/org/w3c/dom/EntityReference.class
new file mode 100644
index 00000000..b64160b8
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/EntityReference.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/NameList.class b/3rdParty/javax.xml/org/w3c/dom/NameList.class
new file mode 100644
index 00000000..d34da0e6
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/NameList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/NamedNodeMap.class b/3rdParty/javax.xml/org/w3c/dom/NamedNodeMap.class
new file mode 100644
index 00000000..6fcb4fb9
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/NamedNodeMap.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Node.class b/3rdParty/javax.xml/org/w3c/dom/Node.class
new file mode 100644
index 00000000..ce25d8ca
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Node.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/NodeList.class b/3rdParty/javax.xml/org/w3c/dom/NodeList.class
new file mode 100644
index 00000000..03374ffd
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/NodeList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Notation.class b/3rdParty/javax.xml/org/w3c/dom/Notation.class
new file mode 100644
index 00000000..a1fbebd7
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Notation.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ProcessingInstruction.class b/3rdParty/javax.xml/org/w3c/dom/ProcessingInstruction.class
new file mode 100644
index 00000000..edcd545f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ProcessingInstruction.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/Text.class b/3rdParty/javax.xml/org/w3c/dom/Text.class
new file mode 100644
index 00000000..b01d4f72
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/Text.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/TypeInfo.class b/3rdParty/javax.xml/org/w3c/dom/TypeInfo.class
new file mode 100644
index 00000000..aabf4b24
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/TypeInfo.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/UserDataHandler.class b/3rdParty/javax.xml/org/w3c/dom/UserDataHandler.class
new file mode 100644
index 00000000..f09dc64b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/UserDataHandler.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$1.class b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$1.class
new file mode 100644
index 00000000..56a51216
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$1.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$2.class b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$2.class
new file mode 100644
index 00000000..f87f2725
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$2.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$3.class b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$3.class
new file mode 100644
index 00000000..168ca353
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$3.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$4.class b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$4.class
new file mode 100644
index 00000000..3368977e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry$4.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry.class b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry.class
new file mode 100644
index 00000000..ca7cdccf
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/bootstrap/DOMImplementationRegistry.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSS2Properties.class b/3rdParty/javax.xml/org/w3c/dom/css/CSS2Properties.class
new file mode 100644
index 00000000..4863242d
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSS2Properties.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSCharsetRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSCharsetRule.class
new file mode 100644
index 00000000..b757af81
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSCharsetRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSFontFaceRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSFontFaceRule.class
new file mode 100644
index 00000000..8fb2c560
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSFontFaceRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSImportRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSImportRule.class
new file mode 100644
index 00000000..29826fdd
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSImportRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSMediaRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSMediaRule.class
new file mode 100644
index 00000000..66f796cb
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSMediaRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSPageRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSPageRule.class
new file mode 100644
index 00000000..d606f6f4
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSPageRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSPrimitiveValue.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSPrimitiveValue.class
new file mode 100644
index 00000000..27693329
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSPrimitiveValue.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSRule.class
new file mode 100644
index 00000000..003eb054
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSRuleList.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSRuleList.class
new file mode 100644
index 00000000..6df66943
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSRuleList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleDeclaration.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleDeclaration.class
new file mode 100644
index 00000000..3facaa42
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleDeclaration.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleRule.class
new file mode 100644
index 00000000..9735ec89
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleSheet.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleSheet.class
new file mode 100644
index 00000000..2534ea55
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSStyleSheet.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSUnknownRule.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSUnknownRule.class
new file mode 100644
index 00000000..74f81f82
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSUnknownRule.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSValue.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSValue.class
new file mode 100644
index 00000000..ee6bf8c3
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSValue.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/CSSValueList.class b/3rdParty/javax.xml/org/w3c/dom/css/CSSValueList.class
new file mode 100644
index 00000000..1576db42
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/CSSValueList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/Counter.class b/3rdParty/javax.xml/org/w3c/dom/css/Counter.class
new file mode 100644
index 00000000..7d409c9b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/Counter.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/DOMImplementationCSS.class b/3rdParty/javax.xml/org/w3c/dom/css/DOMImplementationCSS.class
new file mode 100644
index 00000000..d052230b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/DOMImplementationCSS.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/DocumentCSS.class b/3rdParty/javax.xml/org/w3c/dom/css/DocumentCSS.class
new file mode 100644
index 00000000..3c993f3e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/DocumentCSS.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/ElementCSSInlineStyle.class b/3rdParty/javax.xml/org/w3c/dom/css/ElementCSSInlineStyle.class
new file mode 100644
index 00000000..55465c3f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/ElementCSSInlineStyle.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/RGBColor.class b/3rdParty/javax.xml/org/w3c/dom/css/RGBColor.class
new file mode 100644
index 00000000..9a933ee1
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/RGBColor.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/Rect.class b/3rdParty/javax.xml/org/w3c/dom/css/Rect.class
new file mode 100644
index 00000000..af461561
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/Rect.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/css/ViewCSS.class b/3rdParty/javax.xml/org/w3c/dom/css/ViewCSS.class
new file mode 100644
index 00000000..72a70276
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/css/ViewCSS.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/DocumentEvent.class b/3rdParty/javax.xml/org/w3c/dom/events/DocumentEvent.class
new file mode 100644
index 00000000..28000cb0
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/DocumentEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/Event.class b/3rdParty/javax.xml/org/w3c/dom/events/Event.class
new file mode 100644
index 00000000..4e0d51db
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/Event.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/EventException.class b/3rdParty/javax.xml/org/w3c/dom/events/EventException.class
new file mode 100644
index 00000000..8207573a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/EventException.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/EventListener.class b/3rdParty/javax.xml/org/w3c/dom/events/EventListener.class
new file mode 100644
index 00000000..95ca0a59
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/EventListener.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/EventTarget.class b/3rdParty/javax.xml/org/w3c/dom/events/EventTarget.class
new file mode 100644
index 00000000..1b80b77d
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/EventTarget.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/MouseEvent.class b/3rdParty/javax.xml/org/w3c/dom/events/MouseEvent.class
new file mode 100644
index 00000000..bee754a8
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/MouseEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/MutationEvent.class b/3rdParty/javax.xml/org/w3c/dom/events/MutationEvent.class
new file mode 100644
index 00000000..e06d445f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/MutationEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/events/UIEvent.class b/3rdParty/javax.xml/org/w3c/dom/events/UIEvent.class
new file mode 100644
index 00000000..44c19dee
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/events/UIEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLAnchorElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAnchorElement.class
new file mode 100644
index 00000000..852d40ca
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAnchorElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLAppletElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAppletElement.class
new file mode 100644
index 00000000..0acc3f65
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAppletElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLAreaElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAreaElement.class
new file mode 100644
index 00000000..2203e969
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLAreaElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLBRElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBRElement.class
new file mode 100644
index 00000000..526f8d9e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBRElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseElement.class
new file mode 100644
index 00000000..89a19f2a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseFontElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseFontElement.class
new file mode 100644
index 00000000..f64db8d3
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBaseFontElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLBodyElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBodyElement.class
new file mode 100644
index 00000000..1d341607
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLBodyElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLButtonElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLButtonElement.class
new file mode 100644
index 00000000..43c2604a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLButtonElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLCollection.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLCollection.class
new file mode 100644
index 00000000..3cd342d5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLCollection.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLDListElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDListElement.class
new file mode 100644
index 00000000..463ab7b5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDListElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLDirectoryElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDirectoryElement.class
new file mode 100644
index 00000000..e81d498b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDirectoryElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLDivElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDivElement.class
new file mode 100644
index 00000000..9694261f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDivElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLDocument.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDocument.class
new file mode 100644
index 00000000..2a1b853b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLDocument.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLElement.class
new file mode 100644
index 00000000..c0e772db
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLFieldSetElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFieldSetElement.class
new file mode 100644
index 00000000..a51a69ab
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFieldSetElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLFontElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFontElement.class
new file mode 100644
index 00000000..35828a66
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFontElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLFormElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFormElement.class
new file mode 100644
index 00000000..155c6c55
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFormElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameElement.class
new file mode 100644
index 00000000..2b381450
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameSetElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameSetElement.class
new file mode 100644
index 00000000..6621f85d
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLFrameSetElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLHRElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHRElement.class
new file mode 100644
index 00000000..acfebfb0
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHRElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadElement.class
new file mode 100644
index 00000000..ec19df3e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadingElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadingElement.class
new file mode 100644
index 00000000..ad7af928
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHeadingElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLHtmlElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHtmlElement.class
new file mode 100644
index 00000000..388c101f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLHtmlElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLIFrameElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLIFrameElement.class
new file mode 100644
index 00000000..1d143dc2
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLIFrameElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLImageElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLImageElement.class
new file mode 100644
index 00000000..ed004fb4
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLImageElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLInputElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLInputElement.class
new file mode 100644
index 00000000..fbb2a5af
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLInputElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLIsIndexElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLIsIndexElement.class
new file mode 100644
index 00000000..d1b94fbd
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLIsIndexElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLLIElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLIElement.class
new file mode 100644
index 00000000..d8e9e6d2
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLIElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLLabelElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLabelElement.class
new file mode 100644
index 00000000..f1b4b4eb
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLabelElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLLegendElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLegendElement.class
new file mode 100644
index 00000000..4aff8b90
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLegendElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLLinkElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLinkElement.class
new file mode 100644
index 00000000..9ed05aab
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLLinkElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLMapElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMapElement.class
new file mode 100644
index 00000000..b2ccf6ae
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMapElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLMenuElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMenuElement.class
new file mode 100644
index 00000000..31b64ffc
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMenuElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLMetaElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMetaElement.class
new file mode 100644
index 00000000..a04ea515
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLMetaElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLModElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLModElement.class
new file mode 100644
index 00000000..d35ce3d4
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLModElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLOListElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOListElement.class
new file mode 100644
index 00000000..cce2c85b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOListElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLObjectElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLObjectElement.class
new file mode 100644
index 00000000..8333a5f6
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLObjectElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptGroupElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptGroupElement.class
new file mode 100644
index 00000000..e8718abc
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptGroupElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptionElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptionElement.class
new file mode 100644
index 00000000..cb5f57d0
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLOptionElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLParagraphElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLParagraphElement.class
new file mode 100644
index 00000000..aad584a1
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLParagraphElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLParamElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLParamElement.class
new file mode 100644
index 00000000..0768773e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLParamElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLPreElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLPreElement.class
new file mode 100644
index 00000000..671da0ff
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLPreElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLQuoteElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLQuoteElement.class
new file mode 100644
index 00000000..fb270531
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLQuoteElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLScriptElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLScriptElement.class
new file mode 100644
index 00000000..97becbae
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLScriptElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLSelectElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLSelectElement.class
new file mode 100644
index 00000000..47f3171c
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLSelectElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLStyleElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLStyleElement.class
new file mode 100644
index 00000000..fec46a11
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLStyleElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCaptionElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCaptionElement.class
new file mode 100644
index 00000000..b9580a45
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCaptionElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCellElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCellElement.class
new file mode 100644
index 00000000..fbbfb350
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableCellElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableColElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableColElement.class
new file mode 100644
index 00000000..df7afef2
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableColElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableElement.class
new file mode 100644
index 00000000..87c96d7b
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableRowElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableRowElement.class
new file mode 100644
index 00000000..12d63ead
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableRowElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableSectionElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableSectionElement.class
new file mode 100644
index 00000000..805a358c
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTableSectionElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTextAreaElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTextAreaElement.class
new file mode 100644
index 00000000..760ce399
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTextAreaElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLTitleElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTitleElement.class
new file mode 100644
index 00000000..28158eb3
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLTitleElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/html/HTMLUListElement.class b/3rdParty/javax.xml/org/w3c/dom/html/HTMLUListElement.class
new file mode 100644
index 00000000..c3c8bcab
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/html/HTMLUListElement.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/DOMImplementationLS.class b/3rdParty/javax.xml/org/w3c/dom/ls/DOMImplementationLS.class
new file mode 100644
index 00000000..11dca812
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/DOMImplementationLS.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSException.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSException.class
new file mode 100644
index 00000000..90677a62
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSException.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSInput.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSInput.class
new file mode 100644
index 00000000..6cdac64f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSInput.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSLoadEvent.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSLoadEvent.class
new file mode 100644
index 00000000..d22b61ff
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSLoadEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSOutput.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSOutput.class
new file mode 100644
index 00000000..715aed3f
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSOutput.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSParser.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSParser.class
new file mode 100644
index 00000000..6c744bd4
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSParser.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSParserFilter.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSParserFilter.class
new file mode 100644
index 00000000..80eb89ce
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSParserFilter.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSProgressEvent.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSProgressEvent.class
new file mode 100644
index 00000000..d2fa1dbb
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSProgressEvent.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSResourceResolver.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSResourceResolver.class
new file mode 100644
index 00000000..a75a5e7e
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSResourceResolver.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializer.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializer.class
new file mode 100644
index 00000000..35d2ab9a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializer.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializerFilter.class b/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializerFilter.class
new file mode 100644
index 00000000..6cede8bc
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ls/LSSerializerFilter.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ranges/DocumentRange.class b/3rdParty/javax.xml/org/w3c/dom/ranges/DocumentRange.class
new file mode 100644
index 00000000..379cd1ff
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ranges/DocumentRange.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ranges/Range.class b/3rdParty/javax.xml/org/w3c/dom/ranges/Range.class
new file mode 100644
index 00000000..2404a53d
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ranges/Range.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/ranges/RangeException.class b/3rdParty/javax.xml/org/w3c/dom/ranges/RangeException.class
new file mode 100644
index 00000000..77a75a74
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/ranges/RangeException.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/stylesheets/DocumentStyle.class b/3rdParty/javax.xml/org/w3c/dom/stylesheets/DocumentStyle.class
new file mode 100644
index 00000000..1e116bc7
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/stylesheets/DocumentStyle.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/stylesheets/LinkStyle.class b/3rdParty/javax.xml/org/w3c/dom/stylesheets/LinkStyle.class
new file mode 100644
index 00000000..e0fc7bc0
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/stylesheets/LinkStyle.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/stylesheets/MediaList.class b/3rdParty/javax.xml/org/w3c/dom/stylesheets/MediaList.class
new file mode 100644
index 00000000..801c6305
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/stylesheets/MediaList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheet.class b/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheet.class
new file mode 100644
index 00000000..834689b5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheet.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheetList.class b/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheetList.class
new file mode 100644
index 00000000..3d0ee038
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/stylesheets/StyleSheetList.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/traversal/DocumentTraversal.class b/3rdParty/javax.xml/org/w3c/dom/traversal/DocumentTraversal.class
new file mode 100644
index 00000000..60d00017
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/traversal/DocumentTraversal.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/traversal/NodeFilter.class b/3rdParty/javax.xml/org/w3c/dom/traversal/NodeFilter.class
new file mode 100644
index 00000000..5abec1a1
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/traversal/NodeFilter.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/traversal/NodeIterator.class b/3rdParty/javax.xml/org/w3c/dom/traversal/NodeIterator.class
new file mode 100644
index 00000000..85797f93
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/traversal/NodeIterator.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/traversal/TreeWalker.class b/3rdParty/javax.xml/org/w3c/dom/traversal/TreeWalker.class
new file mode 100644
index 00000000..6016f126
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/traversal/TreeWalker.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/views/AbstractView.class b/3rdParty/javax.xml/org/w3c/dom/views/AbstractView.class
new file mode 100644
index 00000000..734a1350
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/views/AbstractView.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/views/DocumentView.class b/3rdParty/javax.xml/org/w3c/dom/views/DocumentView.class
new file mode 100644
index 00000000..1761fd47
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/views/DocumentView.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathEvaluator.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathEvaluator.class
new file mode 100644
index 00000000..f62db787
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathEvaluator.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathException.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathException.class
new file mode 100644
index 00000000..894516d5
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathException.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathExpression.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathExpression.class
new file mode 100644
index 00000000..70f44896
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathExpression.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNSResolver.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNSResolver.class
new file mode 100644
index 00000000..ac4c2de3
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNSResolver.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNamespace.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNamespace.class
new file mode 100644
index 00000000..d8912e57
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathNamespace.class differ
diff --git a/3rdParty/javax.xml/org/w3c/dom/xpath/XPathResult.class b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathResult.class
new file mode 100644
index 00000000..020dcd0a
Binary files /dev/null and b/3rdParty/javax.xml/org/w3c/dom/xpath/XPathResult.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/AttributeList.class b/3rdParty/javax.xml/org/xml/sax/AttributeList.class
new file mode 100644
index 00000000..d277f9d8
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/AttributeList.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/Attributes.class b/3rdParty/javax.xml/org/xml/sax/Attributes.class
new file mode 100644
index 00000000..e147515f
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/Attributes.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ContentHandler.class b/3rdParty/javax.xml/org/xml/sax/ContentHandler.class
new file mode 100644
index 00000000..54ed4b0f
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ContentHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/DTDHandler.class b/3rdParty/javax.xml/org/xml/sax/DTDHandler.class
new file mode 100644
index 00000000..73e74d1e
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/DTDHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/DocumentHandler.class b/3rdParty/javax.xml/org/xml/sax/DocumentHandler.class
new file mode 100644
index 00000000..01198d09
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/DocumentHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/EntityResolver.class b/3rdParty/javax.xml/org/xml/sax/EntityResolver.class
new file mode 100644
index 00000000..564b38d5
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/EntityResolver.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ErrorHandler.class b/3rdParty/javax.xml/org/xml/sax/ErrorHandler.class
new file mode 100644
index 00000000..42504a87
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ErrorHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/HandlerBase.class b/3rdParty/javax.xml/org/xml/sax/HandlerBase.class
new file mode 100644
index 00000000..4c19f03d
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/HandlerBase.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/InputSource.class b/3rdParty/javax.xml/org/xml/sax/InputSource.class
new file mode 100644
index 00000000..cf41554e
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/InputSource.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/Locator.class b/3rdParty/javax.xml/org/xml/sax/Locator.class
new file mode 100644
index 00000000..a21def19
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/Locator.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/Parser.class b/3rdParty/javax.xml/org/xml/sax/Parser.class
new file mode 100644
index 00000000..93a54152
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/Parser.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/SAXException.class b/3rdParty/javax.xml/org/xml/sax/SAXException.class
new file mode 100644
index 00000000..7cdf6707
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/SAXException.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/SAXNotRecognizedException.class b/3rdParty/javax.xml/org/xml/sax/SAXNotRecognizedException.class
new file mode 100644
index 00000000..41b5ec58
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/SAXNotRecognizedException.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/SAXNotSupportedException.class b/3rdParty/javax.xml/org/xml/sax/SAXNotSupportedException.class
new file mode 100644
index 00000000..7bcce96e
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/SAXNotSupportedException.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/SAXParseException.class b/3rdParty/javax.xml/org/xml/sax/SAXParseException.class
new file mode 100644
index 00000000..23a9807c
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/SAXParseException.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/XMLFilter.class b/3rdParty/javax.xml/org/xml/sax/XMLFilter.class
new file mode 100644
index 00000000..b08db3be
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/XMLFilter.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/XMLReader.class b/3rdParty/javax.xml/org/xml/sax/XMLReader.class
new file mode 100644
index 00000000..d02c40e0
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/XMLReader.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/Attributes2.class b/3rdParty/javax.xml/org/xml/sax/ext/Attributes2.class
new file mode 100644
index 00000000..36f8321b
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/Attributes2.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/Attributes2Impl.class b/3rdParty/javax.xml/org/xml/sax/ext/Attributes2Impl.class
new file mode 100644
index 00000000..7484a7df
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/Attributes2Impl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/DeclHandler.class b/3rdParty/javax.xml/org/xml/sax/ext/DeclHandler.class
new file mode 100644
index 00000000..aba93134
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/DeclHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/DefaultHandler2.class b/3rdParty/javax.xml/org/xml/sax/ext/DefaultHandler2.class
new file mode 100644
index 00000000..43bf0051
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/DefaultHandler2.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/EntityResolver2.class b/3rdParty/javax.xml/org/xml/sax/ext/EntityResolver2.class
new file mode 100644
index 00000000..d40319a9
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/EntityResolver2.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/LexicalHandler.class b/3rdParty/javax.xml/org/xml/sax/ext/LexicalHandler.class
new file mode 100644
index 00000000..45788640
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/LexicalHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/Locator2.class b/3rdParty/javax.xml/org/xml/sax/ext/Locator2.class
new file mode 100644
index 00000000..ef7887c0
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/Locator2.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/ext/Locator2Impl.class b/3rdParty/javax.xml/org/xml/sax/ext/Locator2Impl.class
new file mode 100644
index 00000000..fd2ddc0b
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/ext/Locator2Impl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/AttributeListImpl.class b/3rdParty/javax.xml/org/xml/sax/helpers/AttributeListImpl.class
new file mode 100644
index 00000000..36c2a71a
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/AttributeListImpl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/AttributesImpl.class b/3rdParty/javax.xml/org/xml/sax/helpers/AttributesImpl.class
new file mode 100644
index 00000000..b5834cd9
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/AttributesImpl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/DefaultHandler.class b/3rdParty/javax.xml/org/xml/sax/helpers/DefaultHandler.class
new file mode 100644
index 00000000..8a8c7398
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/DefaultHandler.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/LocatorImpl.class b/3rdParty/javax.xml/org/xml/sax/helpers/LocatorImpl.class
new file mode 100644
index 00000000..5c2c00fa
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/LocatorImpl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport$Context.class b/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport$Context.class
new file mode 100644
index 00000000..285c5b7f
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport$Context.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport.class b/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport.class
new file mode 100644
index 00000000..0a88a90d
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/NamespaceSupport.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/NewInstance.class b/3rdParty/javax.xml/org/xml/sax/helpers/NewInstance.class
new file mode 100644
index 00000000..2f471fd3
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/NewInstance.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter$AttributeListAdapter.class b/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter$AttributeListAdapter.class
new file mode 100644
index 00000000..d82f7e8d
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter$AttributeListAdapter.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter.class b/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter.class
new file mode 100644
index 00000000..eb63b26a
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/ParserAdapter.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/ParserFactory.class b/3rdParty/javax.xml/org/xml/sax/helpers/ParserFactory.class
new file mode 100644
index 00000000..9285824d
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/ParserFactory.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$1.class b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$1.class
new file mode 100644
index 00000000..5b41d88d
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$1.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$2.class b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$2.class
new file mode 100644
index 00000000..31dc84fc
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$2.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$3.class b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$3.class
new file mode 100644
index 00000000..fa696f0e
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$3.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$4.class b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$4.class
new file mode 100644
index 00000000..6fa76343
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport$4.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport.class b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport.class
new file mode 100644
index 00000000..57d497ab
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/SecuritySupport.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/XMLFilterImpl.class b/3rdParty/javax.xml/org/xml/sax/helpers/XMLFilterImpl.class
new file mode 100644
index 00000000..5ee1710b
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/XMLFilterImpl.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter.class b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter.class
new file mode 100644
index 00000000..8879afaa
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter.class b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter.class
new file mode 100644
index 00000000..00b3373e
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderAdapter.class differ
diff --git a/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderFactory.class b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderFactory.class
new file mode 100644
index 00000000..8f94d4fb
Binary files /dev/null and b/3rdParty/javax.xml/org/xml/sax/helpers/XMLReaderFactory.class differ
diff --git a/3rdParty/javax.xml/pom.xml b/3rdParty/javax.xml/pom.xml
new file mode 100644
index 00000000..862de841
--- /dev/null
+++ b/3rdParty/javax.xml/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.4.0-SNAPSHOT
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ javax.xml
+ 1.4.0-SNAPSHOT
+
+ JAXP XML
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/net.sf.trove4j/.classpath b/3rdParty/net.sf.trove4j/.classpath
new file mode 100644
index 00000000..8669931a
--- /dev/null
+++ b/3rdParty/net.sf.trove4j/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/net.sf.trove4j/.project b/3rdParty/net.sf.trove4j/.project
new file mode 100644
index 00000000..1376f23b
--- /dev/null
+++ b/3rdParty/net.sf.trove4j/.project
@@ -0,0 +1,28 @@
+
+
+ net.sf.trove4j
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/net.sf.trove4j/.settings/org.eclipse.jdt.core.prefs b/3rdParty/net.sf.trove4j/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/net.sf.trove4j/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/net.sf.trove4j/META-INF/MANIFEST.MF b/3rdParty/net.sf.trove4j/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..a137395f
--- /dev/null
+++ b/3rdParty/net.sf.trove4j/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trove4j
+Bundle-SymbolicName: net.sf.trove4j
+Bundle-Version: 3.0.3
+Bundle-ClassPath: net.sf.trove4j_3.0.3.jar
+Bundle-Vendor: Google
+Export-Package: gnu.trove,
+ gnu.trove.decorator,
+ gnu.trove.function,
+ gnu.trove.impl,
+ gnu.trove.impl.hash,
+ gnu.trove.impl.sync,
+ gnu.trove.impl.unmodifiable,
+ gnu.trove.iterator,
+ gnu.trove.iterator.hash,
+ gnu.trove.list,
+ gnu.trove.list.array,
+ gnu.trove.list.linked,
+ gnu.trove.map,
+ gnu.trove.map.custom_hash,
+ gnu.trove.map.hash,
+ gnu.trove.procedure,
+ gnu.trove.procedure.array,
+ gnu.trove.queue,
+ gnu.trove.set,
+ gnu.trove.set.hash,
+ gnu.trove.stack,
+ gnu.trove.stack.array,
+ gnu.trove.strategy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/3rdParty/net.sf.trove4j/build.properties b/3rdParty/net.sf.trove4j/build.properties
new file mode 100644
index 00000000..0bc4580e
--- /dev/null
+++ b/3rdParty/net.sf.trove4j/build.properties
@@ -0,0 +1,2 @@
+bin.includes = META-INF/,\
+ net.sf.trove4j_3.0.3.jar
diff --git a/3rdParty/net.sf.trove4j/net.sf.trove4j_3.0.3.jar b/3rdParty/net.sf.trove4j/net.sf.trove4j_3.0.3.jar
new file mode 100644
index 00000000..3d2af9d4
Binary files /dev/null and b/3rdParty/net.sf.trove4j/net.sf.trove4j_3.0.3.jar differ
diff --git a/3rdParty/org.apache.commons.io/.classpath b/3rdParty/org.apache.commons.io/.classpath
new file mode 100644
index 00000000..b34b76fc
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.commons.io/.project b/3rdParty/org.apache.commons.io/.project
new file mode 100644
index 00000000..8323cfda
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/.project
@@ -0,0 +1,28 @@
+
+
+ org.apache.commons.io
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.apache.commons.io/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.apache.commons.io/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/org.apache.commons.io/META-INF/LICENSE.txt b/3rdParty/org.apache.commons.io/META-INF/LICENSE.txt
new file mode 100644
index 00000000..43e91eb0
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/3rdParty/org.apache.commons.io/META-INF/MANIFEST.MF b/3rdParty/org.apache.commons.io/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..d093aaa0
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Commons Io
+Bundle-SymbolicName: org.apache.commons.io
+Bundle-Version: 2.4.0
+Bundle-ClassPath: org.apache.commons.io_2.4.0.jar
+Bundle-Vendor: Kdm Analytics Inc.
+Export-Package: org.apache.commons.io,
+ org.apache.commons.io.comparator,
+ org.apache.commons.io.filefilter,
+ org.apache.commons.io.input,
+ org.apache.commons.io.monitor,
+ org.apache.commons.io.output
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Created-By: Apache Maven
+Build-Jdk: 1.7.0_25
+Archiver-Version: Plexus Archiver
+Built-By: jenkins
diff --git a/3rdParty/org.apache.commons.io/META-INF/NOTICE.txt b/3rdParty/org.apache.commons.io/META-INF/NOTICE.txt
new file mode 100644
index 00000000..7632eb8e
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/NOTICE.txt
@@ -0,0 +1,6 @@
+Apache Commons IO
+Copyright 2002-2012 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.properties b/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.properties
new file mode 100644
index 00000000..80a21b50
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:09:00 EDT 2013
+version=2.4.0
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.apache.commons.io
diff --git a/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.xml b/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.xml
new file mode 100644
index 00000000..173614d2
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.io/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.apache.commons.io
+ 2.4.0
+
+ Apache Commons IO
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.properties b/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.properties
new file mode 100644
index 00000000..b306d111
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Tue Jun 12 18:19:43 EDT 2012
+version=2.4
+groupId=commons-io
+artifactId=commons-io
diff --git a/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.xml b/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.xml
new file mode 100644
index 00000000..f6c1def6
--- /dev/null
+++ b/3rdParty/org.apache.commons.io/META-INF/maven/commons-io/commons-io/pom.xml
@@ -0,0 +1,323 @@
+
+
+
+
+ org.apache.commons
+ commons-parent
+ 25
+
+ 4.0.0
+ commons-io
+ commons-io
+ 2.4
+ Commons IO
+
+ 2002
+
+The Commons IO library contains utility classes, stream implementations, file filters,
+file comparators, endian transformation classes, and much more.
+
+
+ http://commons.apache.org/io/
+
+
+ jira
+ http://issues.apache.org/jira/browse/IO
+
+
+
+
+ apache.website
+ Apache Commons IO Site
+ ${commons.deployment.protocol}://people.apache.org/www/commons.apache.org/${commons.componentid}
+
+
+
+
+ scm:svn:http://svn.apache.org/repos/asf/commons/proper/io/trunk
+ scm:svn:https://svn.apache.org/repos/asf/commons/proper/io/trunk
+ http://svn.apache.org/viewvc/commons/proper/io/trunk
+
+
+
+
+ Scott Sanders
+ sanders
+ sanders@apache.org
+
+
+ Java Developer
+
+
+
+ dIon Gillard
+ dion
+ dion@apache.org
+
+
+ Java Developer
+
+
+
+ Nicola Ken Barozzi
+ nicolaken
+ nicolaken@apache.org
+
+
+ Java Developer
+
+
+
+ Henri Yandell
+ bayard
+ bayard@apache.org
+
+
+ Java Developer
+
+
+
+ Stephen Colebourne
+ scolebourne
+
+
+ Java Developer
+
+ 0
+
+
+ Jeremias Maerki
+ jeremias
+ jeremias@apache.org
+
+
+ Java Developer
+
+ +1
+
+
+ Matthew Hawthorne
+ matth
+ matth@apache.org
+
+
+ Java Developer
+
+
+
+ Martin Cooper
+ martinc
+ martinc@apache.org
+
+
+ Java Developer
+
+
+
+ Rob Oxspring
+ roxspring
+ roxspring@apache.org
+
+
+ Java Developer
+
+
+
+ Jochen Wiedmann
+ jochen
+ jochen.wiedmann@gmail.com
+
+
+ Niall Pemberton
+ niallp
+
+ Java Developer
+
+
+
+ Jukka Zitting
+ jukka
+
+ Java Developer
+
+
+
+ Gary Gregory
+ ggregory
+ ggregory@apache.org
+ http://www.garygregory.com
+ -5
+
+
+
+
+
+ Rahul Akolkar
+
+
+ Jason Anderson
+
+
+ Nathan Beyer
+
+
+ Emmanuel Bourg
+
+
+ Chris Eldredge
+
+
+ Magnus Grimsell
+
+
+ Jim Harrington
+
+
+ Thomas Ledoux
+
+
+ Andy Lehane
+
+
+ Marcelo Liberato
+
+
+ Alban Peignier
+ alban.peignier at free.fr
+
+
+ Ian Springer
+
+
+ Masato Tezuka
+
+
+ James Urie
+
+
+ Frank W. Zammetti
+
+
+
+
+
+ junit
+ junit
+ 4.10
+ test
+
+
+
+
+ 1.6
+ 1.6
+ io
+ RC1
+ 2.4
+ (requires JDK 1.6+)
+ 2.2
+ (requires JDK 1.5+)
+ IO
+ 12310477
+
+
+ org.apache.commons.io;
+ org.apache.commons.io.comparator;
+ org.apache.commons.io.filefilter;
+ org.apache.commons.io.input;
+ org.apache.commons.io.output;version=1.4.9999;-noimport:=true,
+
+ org.apache.commons.io;
+ org.apache.commons.io.comparator;
+ org.apache.commons.io.filefilter;
+ org.apache.commons.io.input;
+ org.apache.commons.io.output;
+ org.apache.commons.io.*;version=${project.version};-noimport:=true
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ pertest
+
+ -Xmx25M
+
+
+ **/*Test*.class
+
+
+ **/*AbstractTestCase*
+ **/testtools/**
+
+ **/*$*
+
+
+
+
+ maven-assembly-plugin
+
+
+ src/main/assembly/bin.xml
+ src/main/assembly/src.xml
+
+ gnu
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 2.9.1
+
+ ${basedir}/checkstyle.xml
+ false
+
+
+
+ org.codehaus.mojo
+ findbugs-maven-plugin
+ 2.4.0
+
+ Normal
+ Default
+ ${basedir}/findbugs-exclude-filter.xml
+
+
+
+ org.apache.rat
+ apache-rat-plugin
+
+
+ src/test/resources/**/*.bin
+ .pmd
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.commons.io/org.apache.commons.io_2.4.0.jar b/3rdParty/org.apache.commons.io/org.apache.commons.io_2.4.0.jar
new file mode 100644
index 00000000..6a485b0a
Binary files /dev/null and b/3rdParty/org.apache.commons.io/org.apache.commons.io_2.4.0.jar differ
diff --git a/3rdParty/org.apache.commons.lang3/.classpath b/3rdParty/org.apache.commons.lang3/.classpath
new file mode 100644
index 00000000..e599dc45
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.commons.lang3/.project b/3rdParty/org.apache.commons.lang3/.project
new file mode 100644
index 00000000..df8d236b
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/.project
@@ -0,0 +1,28 @@
+
+
+ org.apache.commons.lang3
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.apache.commons.lang3/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.apache.commons.lang3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/LICENSE.txt b/3rdParty/org.apache.commons.lang3/META-INF/LICENSE.txt
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/MANIFEST.MF b/3rdParty/org.apache.commons.lang3/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..1a605157
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Commons Lang3
+Bundle-SymbolicName: org.apache.commons.lang3
+Bundle-Version: 3.1.0
+Bundle-ClassPath: org.apache.commons.lang3_3.1.0.jar
+Bundle-Vendor: Kdm Analytics Inc.c
+Export-Package: org.apache.commons.lang3,
+ org.apache.commons.lang3.builder,
+ org.apache.commons.lang3.concurrent,
+ org.apache.commons.lang3.event,
+ org.apache.commons.lang3.exception,
+ org.apache.commons.lang3.math,
+ org.apache.commons.lang3.mutable,
+ org.apache.commons.lang3.reflect,
+ org.apache.commons.lang3.text,
+ org.apache.commons.lang3.text.translate,
+ org.apache.commons.lang3.time,
+ org.apache.commons.lang3.tuple
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Created-By: Apache Maven
+Build-Jdk: 1.7.0_25
+Archiver-Version: Plexus Archiver
+Built-By: jenkins
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/NOTICE.txt b/3rdParty/org.apache.commons.lang3/META-INF/NOTICE.txt
new file mode 100644
index 00000000..2f0ca384
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/NOTICE.txt
@@ -0,0 +1,8 @@
+Apache Commons Lang
+Copyright 2001-2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software from the Spring Framework,
+under the Apache License 2.0 (see: StringUtils.containsWhitespace())
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.properties b/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.properties
new file mode 100644
index 00000000..acd43058
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:09:01 EDT 2013
+version=3.1.0
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.apache.commons.lang3
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.xml b/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.xml
new file mode 100644
index 00000000..2ac57798
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.commons.lang3/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.apache.commons.lang3
+ 3.1.0
+
+ Apache Commons Lang3 Library
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.properties b/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.properties
new file mode 100644
index 00000000..6ed41682
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Wed Nov 09 23:00:26 GMT-08:00 2011
+version=3.1
+groupId=org.apache.commons
+artifactId=commons-lang3
diff --git a/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.xml b/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.xml
new file mode 100644
index 00000000..cd281f84
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/META-INF/maven/org.apache.commons/commons-lang3/pom.xml
@@ -0,0 +1,596 @@
+
+
+
+
+ org.apache.commons
+ commons-parent
+ 22
+
+ 4.0.0
+ org.apache.commons
+ commons-lang3
+ 3.1
+ Commons Lang
+
+ 2001
+
+ Commons Lang, a package of Java utility classes for the
+ classes that are in java.lang's hierarchy, or are considered to be so
+ standard as to justify existence in java.lang.
+
+
+ http://commons.apache.org/lang/
+
+
+ jira
+ http://issues.apache.org/jira/browse/LANG
+
+
+
+ scm:svn:http://svn.apache.org/repos/asf/commons/proper/lang/trunk
+ scm:svn:https://svn.apache.org/repos/asf/commons/proper/lang/trunk
+ http://svn.apache.org/viewvc/commons/proper/lang/trunk
+
+
+
+
+ Daniel Rall
+ dlr
+ dlr@finemaltcoding.com
+ CollabNet, Inc.
+
+ Java Developer
+
+
+
+ Stephen Colebourne
+ scolebourne
+ scolebourne@joda.org
+ SITA ATS Ltd
+ 0
+
+ Java Developer
+
+
+
+ Henri Yandell
+ bayard
+ bayard@apache.org
+
+
+ Java Developer
+
+
+
+ Steven Caswell
+ scaswell
+ stevencaswell@apache.org
+
+
+ Java Developer
+
+ -5
+
+
+ Robert Burrell Donkin
+ rdonkin
+ rdonkin@apache.org
+
+
+ Java Developer
+
+
+
+ Gary D. Gregory
+ ggregory
+ ggregory@apache.org
+ -5
+
+ Java Developer
+
+
+
+ Phil Steitz
+ psteitz
+
+
+ Java Developer
+
+
+
+ Fredrik Westermarck
+ fredrik
+
+
+
+ Java Developer
+
+
+
+ James Carman
+ jcarman
+ jcarman@apache.org
+ Carman Consulting, Inc.
+
+ Java Developer
+
+
+
+ Niall Pemberton
+ niallp
+
+ Java Developer
+
+
+
+ Matt Benson
+ mbenson
+
+ Java Developer
+
+
+
+ Joerg Schaible
+ joehni
+ joerg.schaible@gmx.de
+
+ Java Developer
+
+ +1
+
+
+ Oliver Heger
+ oheger
+ oheger@apache.org
+ +1
+
+ Java Developer
+
+
+
+ Paul Benedict
+ pbenedict
+ pbenedict@apache.org
+
+ Java Developer
+
+
+
+
+
+ C. Scott Ananian
+
+
+ Chris Audley
+
+
+ Stephane Bailliez
+
+
+ Michael Becke
+
+
+ Benjamin Bentmann
+
+
+ Ola Berg
+
+
+ Nathan Beyer
+
+
+ Stefan Bodewig
+
+
+ Janek Bogucki
+
+
+ Mike Bowler
+
+
+ Sean Brown
+
+
+ Alexander Day Chaffee
+
+
+ Al Chou
+
+
+ Greg Coladonato
+
+
+ Maarten Coene
+
+
+ Justin Couch
+
+
+ Michael Davey
+
+
+ Norm Deane
+
+
+ Morgan Delagrange
+
+
+ Ringo De Smet
+
+
+ Russel Dittmar
+
+
+ Steve Downey
+
+
+ Matthias Eichel
+
+
+ Christopher Elkins
+
+
+ Chris Feldhacker
+
+
+ Roland Foerther
+
+
+ Pete Gieser
+
+
+ Jason Gritman
+
+
+ Matthew Hawthorne
+
+
+ Michael Heuer
+
+
+ Chris Hyzer
+
+
+ Paul Jack
+
+
+ Marc Johnson
+
+
+ Shaun Kalley
+
+
+ Tetsuya Kaneuchi
+
+
+ Nissim Karpenstein
+
+
+ Ed Korthof
+
+
+ Holger Krauth
+
+
+ Rafal Krupinski
+
+
+ Rafal Krzewski
+
+
+ David Leppik
+
+
+ Eli Lindsey
+
+
+ Sven Ludwig
+
+
+ Craig R. McClanahan
+
+
+ Rand McNeely
+
+
+ Hendrik Maryns
+
+
+ Dave Meikle
+
+
+ Nikolay Metchev
+
+
+ Kasper Nielsen
+
+
+ Tim O'Brien
+
+
+ Brian S O'Neill
+
+
+ Andrew C. Oliver
+
+
+ Alban Peignier
+
+
+ Moritz Petersen
+
+
+ Dmitri Plotnikov
+
+
+ Neeme Praks
+
+
+ Eric Pugh
+
+
+ Stephen Putman
+
+
+ Travis Reeder
+
+
+ Antony Riley
+
+
+ Valentin Rocher
+
+
+ Scott Sanders
+
+
+ Ralph Schaer
+
+
+ Henning P. Schmiedehausen
+
+
+ Sean Schofield
+
+
+ Robert Scholte
+
+
+ Reuben Sivan
+
+
+ Ville Skytta
+
+
+ David M. Sledge
+
+
+ Michael A. Smith
+
+
+ Jan Sorensen
+
+
+ Glen Stampoultzis
+
+
+ Scott Stanchfield
+
+
+ Jon S. Stevens
+
+
+ Sean C. Sullivan
+
+
+ Ashwin Suresh
+
+
+ Helge Tesgaard
+
+
+ Arun Mammen Thomas
+
+
+ Masato Tezuka
+
+
+ Jeff Varszegi
+
+
+ Chris Webb
+
+
+ Mario Winterer
+
+
+ Stepan Koltsov
+
+
+ Holger Hoffstatte
+
+
+ Derek C. Ashmore
+
+
+
+
+
+
+ junit
+ junit
+ 4.10
+ test
+
+
+
+ commons-io
+ commons-io
+ 2.1
+ test
+
+
+
+ org.easymock
+ easymock
+ 3.0
+ test
+
+
+
+
+ ISO-8859-1
+ UTF-8
+ 1.5
+ 1.5
+ lang3
+ 3.1
+ (Java 5.0+)
+ LANG
+ 12310481
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ plain
+
+
+ **/*Test.java
+
+
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ src/assembly/bin.xml
+ src/assembly/src.xml
+
+ gnu
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ test-jar
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-changes-plugin
+ 2.6
+
+ ${basedir}/src/site/changes/changes.xml
+
+ %URL%/%ISSUE%
+
+ release-notes.vm
+ templates
+
+ RELEASE-NOTES.txt
+
+
+
+
+ changes-report
+
+
+
+
+
+ maven-checkstyle-plugin
+ 2.7
+
+ ${basedir}/checkstyle.xml
+ false
+
+
+
+
+ org.codehaus.mojo
+ findbugs-maven-plugin
+ 2.3.2
+
+ Normal
+ Default
+ ${basedir}/findbugs-exclude-filter.xml
+
+
+
+ org.codehaus.mojo
+ cobertura-maven-plugin
+ 2.5.1
+
+
+ org.codehaus.mojo
+ clirr-maven-plugin
+ 2.3
+
+ info
+
+
+
+ maven-pmd-plugin
+ 2.5
+
+ ${maven.compile.target}
+
+
+
+
+ pmd
+ cpd
+
+
+
+
+
+ org.codehaus.mojo
+ taglist-maven-plugin
+ 2.4
+
+
+ TODO
+ NOPMD
+ NOTE
+
+
+
+
+ org.codehaus.mojo
+ javancss-maven-plugin
+ 2.0
+
+
+
+
+
diff --git a/3rdParty/org.apache.commons.lang3/org.apache.commons.lang3_3.1.0.jar b/3rdParty/org.apache.commons.lang3/org.apache.commons.lang3_3.1.0.jar
new file mode 100644
index 00000000..aa17fb5d
Binary files /dev/null and b/3rdParty/org.apache.commons.lang3/org.apache.commons.lang3_3.1.0.jar differ
diff --git a/3rdParty/org.apache.commons.lang3/templates/release-notes.vm b/3rdParty/org.apache.commons.lang3/templates/release-notes.vm
new file mode 100644
index 00000000..51b0da26
--- /dev/null
+++ b/3rdParty/org.apache.commons.lang3/templates/release-notes.vm
@@ -0,0 +1,136 @@
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements. See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership. The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied. See the License for the
+## specific language governing permissions and limitations
+## under the License.
+
+ Apache ${project.name} Package
+ Version ${version}
+ Release Notes
+
+
+INTRODUCTION:
+
+This document contains the release notes for the 3.0.1 version of Apache Commons Lang.
+Commons Lang is a set of utility functions and reusable components that should be of use in any
+Java environment.
+
+Lang 3.0 and onwards now targets Java 5.0, making use of features that arrived with Java 5.0 such as generics,
+variable arguments, autoboxing, concurrency and formatted output.
+
+For the advice on upgrading from 2.x to 3.x, see the following page:
+
+ http://commons.apache.org/lang/article3_0.html
+
+## Hack to improve layout: replace all pairs of spaces with a single new-line
+##$release.description.replaceAll(" ", "
+##")
+
+#if ($release.getActions().size() == 0)
+No changes defined in this version.
+#else
+Changes in this version include:
+
+#if ($release.getActions('add').size() !=0)
+New features:
+#foreach($actionItem in $release.getActions('add'))
+#set($action=$actionItem.getAction())
+#if ($actionItem.getIssue())
+#set($issue=$actionItem.getIssue())
+#else
+#set($issue="")
+#end
+#if ($actionItem.getDueTo())
+#set($dueto=$actionItem.getDueTo())
+#else
+#set($dueto="")
+#end
+o#if($!issue != "") $issue: #end ${action} #if($!dueto != "")Thanks to $dueto. #end
+
+#set($issue="")
+#set($dueto="")
+#end
+#end
+
+#if ($release.getActions('fix').size() !=0)
+Fixed Bugs:
+#foreach($actionItem in $release.getActions('fix'))
+#set($action=$actionItem.getAction())
+#if ($actionItem.getIssue())
+#set($issue=$actionItem.getIssue())
+#else
+#set($issue="")
+#end
+#if ($actionItem.getDueTo())
+#set($dueto=$actionItem.getDueTo())
+#else
+#set($dueto="")
+#end
+o#if($!issue != "") $issue: #end ${action} #if($!dueto != "")Thanks to $dueto. #end
+
+#set($issue="")
+#set($dueto="")
+#end
+#end
+
+#if ($release.getActions('update').size() !=0)
+Changes:
+#foreach($actionItem in $release.getActions('update'))
+#set($action=$actionItem.getAction())
+#if ($actionItem.getIssue())
+#set($issue=$actionItem.getIssue())
+#else
+#set($issue="")
+#end
+#if ($actionItem.getDueTo())
+#set($dueto=$actionItem.getDueTo())
+#else
+#set($dueto="")
+#end
+o#if($!issue != "") $issue: #end ${action} #if($!dueto != "")Thanks to $dueto. #end
+
+#set($issue="")
+#set($dueto="")
+#end
+#end
+
+#if ($release.getActions('remove').size() !=0)
+Removed:
+#foreach($actionItem in $release.getActions('remove'))
+#set($action=$actionItem.getAction())
+#if ($actionItem.getIssue())
+#set($issue=$actionItem.getIssue())
+#else
+#set($issue="")
+#end
+#if ($actionItem.getDueTo())
+#set($dueto=$actionItem.getDueTo())
+#else
+#set($dueto="")
+#end
+o#if($!issue != "") $issue: #end ${action} #if($!dueto != "")Thanks to $dueto. #end
+
+#set($issue="")
+#set($dueto="")
+#end
+#end
+## End of main loop
+#end
+
+For complete information on ${project.name}, including instructions on how to submit bug reports,
+patches, or suggestions for improvement, see the Apache ${project.name} website:
+
+${project.url}
+
+
diff --git a/3rdParty/org.apache.log4j/.classpath b/3rdParty/org.apache.log4j/.classpath
new file mode 100644
index 00000000..5cf8279b
--- /dev/null
+++ b/3rdParty/org.apache.log4j/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.log4j/.project b/3rdParty/org.apache.log4j/.project
new file mode 100644
index 00000000..55612ab2
--- /dev/null
+++ b/3rdParty/org.apache.log4j/.project
@@ -0,0 +1,28 @@
+
+
+ org.apache.log4j
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.apache.log4j/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.apache.log4j/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f287d53c
--- /dev/null
+++ b/3rdParty/org.apache.log4j/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/org.apache.log4j/META-INF/LICENSE b/3rdParty/org.apache.log4j/META-INF/LICENSE
new file mode 100644
index 00000000..6279e520
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 1999-2005 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/org.apache.log4j/META-INF/MANIFEST.MF b/3rdParty/org.apache.log4j/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..b6d5eaf8
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Log4j Code Library Plugin
+Bundle-SymbolicName: org.apache.log4j
+Bundle-Version: 1.2.16
+Bundle-ClassPath: org.apache.log4j_1.2.16.jar
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: org.apache.log4j;version="1.2.16",
+ org.apache.log4j.chainsaw;version="1.2.16",
+ org.apache.log4j.config;version="1.2.16",
+ org.apache.log4j.helpers;version="1.2.16",
+ org.apache.log4j.jdbc;version="1.2.16",
+ org.apache.log4j.jmx;version="1.2.16",
+ org.apache.log4j.lf5;version="1.2.16",
+ org.apache.log4j.lf5.util;version="1.2.16",
+ org.apache.log4j.lf5.viewer;version="1.2.16",
+ org.apache.log4j.lf5.viewer.categoryexplorer;version="1.2.16",
+ org.apache.log4j.lf5.viewer.configure;version="1.2.16",
+ org.apache.log4j.net;version="1.2.16",
+ org.apache.log4j.nt;version="1.2.16",
+ org.apache.log4j.or;version="1.2.16",
+ org.apache.log4j.or.jms;version="1.2.16",
+ org.apache.log4j.or.sax;version="1.2.16",
+ org.apache.log4j.pattern;version="1.2.16",
+ org.apache.log4j.spi;version="1.2.16",
+ org.apache.log4j.varia;version="1.2.16",
+ org.apache.log4j.xml;version="1.2.16"
+Created-By: Apache Maven
+Archiver-Version: Plexus Archiver
+Eclipse-BuddyPolicy: registered
+Built-By: kgirard
+Build-Jdk: 1.6.0_26
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/3rdParty/org.apache.log4j/META-INF/NOTICE b/3rdParty/org.apache.log4j/META-INF/NOTICE
new file mode 100644
index 00000000..03757323
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache log4j
+Copyright 2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file
diff --git a/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.properties b/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.properties
new file mode 100644
index 00000000..27f64c7b
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Nov 22 18:23:14 EST 2012
+version=1.2.16
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.apache.log4j
diff --git a/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.xml b/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.xml
new file mode 100644
index 00000000..2974b0f5
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.apache.log4j/pom.xml
@@ -0,0 +1,19 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.0.5
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.apache.log4j
+ 1.2.16
+ KDM Analytics Apache Commons Log4j Plugin
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.properties b/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.properties
new file mode 100644
index 00000000..2abb0987
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Tue Mar 30 23:16:23 CDT 2010
+version=1.2.16
+groupId=log4j
+artifactId=log4j
diff --git a/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.xml b/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.xml
new file mode 100644
index 00000000..977ca834
--- /dev/null
+++ b/3rdParty/org.apache.log4j/META-INF/maven/log4j/log4j/pom.xml
@@ -0,0 +1,545 @@
+
+
+
+ 4.0.0
+ log4j
+ log4j
+ bundle
+ Apache Log4j
+ 1.2.16
+ Apache Log4j 1.2
+ http://logging.apache.org/log4j/1.2/
+
+ Bugzilla
+ http://issues.apache.org/bugzilla/
+
+
+ Gump
+ http://vmgump.apache.org/gump/public/logging-log4j-12/logging-log4j-12/index.html
+
+ 1999
+
+
+ log4j-user
+ log4j-user-subscribe@logging.apache.org
+ log4j-user-unsubscribe@logging.apache.org
+ log4j-user@logging.apache.org
+ http://mail-archives.apache.org/mod_mbox/logging-log4j-user/
+
+ http://marc.info/?l=log4j-user
+ http://dir.gmane.org/gmane.comp.jakarta.log4j.user
+
+
+
+ log4j-dev
+ log4j-dev-subscribe@logging.apache.org
+ log4j-dev-unsubscribe@logging.apache.org
+ log4j-dev@logging.apache.org
+ http://mail-archives.apache.org/mod_mbox/logging-log4j-dev/
+
+ http://marc.info/?l=log4j-dev
+ http://dir.gmane.org/gmane.comp.jakarta.log4j.devel
+
+
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+ scm:svn:http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_16
+ scm:svn:https://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_16
+ http://svn.apache.org/viewvc/logging/log4j/tags/v1_2_16
+
+
+ Apache Software Foundation
+ http://www.apache.org
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+ UTF-8
+
+
+
+ maven-surefire-plugin
+ 2.5
+
+ tests
+ plain
+ pertest
+ true
+
+ org/apache/log4j/LevelTest.java
+ org/apache/log4j/PriorityTest.java
+ org/apache/log4j/CategoryTest.java
+ org/apache/log4j/FileAppenderTest.java
+ org/apache/log4j/LogManagerTest.java
+ org/apache/log4j/helpers.LogLogTest.java
+ org/apache/log4j/LayoutTest.java
+ org/apache/log4j/helpers.DateLayoutTest.java
+ org/apache/log4j/TTCCLayoutTest.java
+ org/apache/log4j/xml.XMLLayoutTest.java
+ org/apache/log4j/HTMLLayoutTest.java
+ org/apache/log4j/PatternLayoutTest.java
+ org/apache/log4j/spi.LoggingEventTest.java
+ org/apache/log4j/spi.ThrowableInformationTest.java
+ org/apache/log4j/spi.LocationInfoTest.java
+ org/apache/log4j/PropertyConfiguratorTest.java
+ org/apache/log4j/MinimumTestCase.java
+ org/apache/log4j/LoggerTestCase.java
+ org/apache/log4j/PatternLayoutTestCase.java
+ org/apache/log4j/HierarchyThresholdTestCase.java
+ org/apache/log4j/xml/DOMTestCase.java
+ org/apache/log4j/xml/CustomLevelTestCase.java
+ org/apache/log4j/customLogger/XLoggerTestCase.java
+
+
+ org/apache/log4j/xml/XMLLayoutTestCase.java
+ org/apache/log4j/xml/AsyncAppenderTestCase.java
+ org/apache/log4j/varia/LevelMatchFilterTestCase.java
+
+
+ org/apache/log4j/helpers/BoundedFIFOTestCase.java
+ org/apache/log4j/helpers/CyclicBufferTestCase.java
+ org/apache/log4j/helpers/PatternParserTestCase.java
+ org/apache/log4j/or/ORTestCase.java
+ org/apache/log4j/DRFATestCase.java
+ org/apache/log4j/RFATestCase.java
+ org/apache/log4j/varia/ERFATestCase.java
+ org/apache/log4j/net/SyslogAppenderTest
+ org/apache/log4j/nt/NTEventLogAppenderTest
+ org/apache/log4j/net/SocketAppenderTest
+
+
+
+
+ maven-compiler-plugin
+ 2.1
+
+ 1.3
+ 1.1
+ UTF-8
+
+
+
+ maven-jar-plugin
+ 2.3
+
+
+
+
+ org.apache.log4j
+
+ log4j
+ ${project.version}
+ "Apache Software Foundation"
+
+
+
+
+
+
+
+ maven-antrun-plugin
+ 1.2
+
+
+
+ process-classes
+ ntdll
+
+
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+ test-compile
+ mkdir_tests_output
+
+
+
+
+
+
+ run
+
+
+
+ clean
+ rmdir_tests_output
+
+
+
+
+
+
+
+ run
+
+
+
+ test
+ runAll
+
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+ site
+ untag-site
+
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+ post-site
+ post-site
+
+
+
+
+
+
+ run
+
+
+
+ site-deploy
+ site-deploy
+
+
+
+
+
+
+ run
+
+
+
+
+
+ ant
+ ant-nodeps
+ 1.6.5
+
+
+ ant-contrib
+ ant-contrib
+ 1.0b2
+
+
+ ant
+ ant-junit
+ 1.6.5
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ sun.jdk
+ tools
+ 1.4.2
+ system
+ ${tools.jar}
+
+
+
+
+
+
+ maven-assembly-plugin
+ 2.2-beta-5
+
+
+ src/assembly/bin.xml
+
+ false
+
+
+
+
+ assembly
+
+
+
+
+
+ maven-javadoc-plugin
+ 2.6.1
+
+ true
+ UTF-8
+
+
+
+
+ jar
+ javadoc
+
+
+
+ site
+ pre-site
+
+ javadoc
+
+
+
+
+
+ maven-release-plugin
+ 2.0-beta-9
+
+
+ package site-deploy assembly:attached deploy
+
+
+
+ maven-source-plugin
+ 2.1.1
+
+
+
+ jar
+
+
+
+
+
+
+ org.codehaus.mojo
+ clirr-maven-plugin
+ 2.2.2
+
+ 1.2.15
+
+
+
+ org.codehaus.mojo
+ rat-maven-plugin
+ 1.0-alpha-3
+
+
+ tests/witness/**
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ 2.0.1
+ true
+
+
+
+ !org.apache.log4j.lf5.*,!org.apache.log4j.chainsaw.*,org.apache.log4j.*
+ com.sun.jdmk.comm;resolution:=optional,
+ javax.jms;resolution:=optional,
+ javax.mail.*;resolution:=optional,
+ javax.management;resolution:=optional,
+ javax.naming;resolution:=optional,
+ com.sun.jdmk.comm;resolution:=optional,
+ com.ibm.uvm.tools;resolution:=optional,
+ javax.swing.*;resolution:=optional,
+ *
+ http://logging.apache.org/log4j/1.2
+
+
+
+
+ tests/src/java
+
+
+ tests/resources
+
+
+
+
+
+ mac
+
+
+ mac
+
+
+
+ ${java.home}/../Classes/classes.jar
+ ${user.home}/.m2/repository
+ build
+
+
+
+ default
+
+ true
+
+
+ ${java.home}/../lib/tools.jar
+ ${user.home}/.m2/repository
+ build
+
+
+
+
+
+
+
+ javax.mail
+ mail
+ 1.4.1
+ true
+
+
+
+ oro
+ oro
+ 2.0.8
+ test
+
+
+ junit
+ junit
+ 3.8.2
+ test
+
+
+ org.apache.geronimo.specs
+ geronimo-jms_1.1_spec
+ 1.0
+ true
+
+
+
+ true
+
+
+ maven-project-info-reports-plugin
+ 2.1.2
+
+
+
+ scm
+ dependencies
+ cim
+ issue-tracking
+ mailing-list
+ license
+
+
+
+
+
+ maven-jxr-plugin
+ 2.1
+
+
+ maven-changes-plugin
+ 2.3
+
+
+
+ changes-report
+
+
+
+
+ %URL%/show_bug.cgi?id=%ISSUE%
+
+
+
+
+
+
+ logging.repo
+ scp://people.apache.org/www/people.apache.org/builds/logging/repo/
+
+
+ logging.site
+ scp://localhost/${user.dir}/target/site-deploy
+
+
+
+
diff --git a/3rdParty/org.apache.log4j/org.apache.log4j_1.2.16.jar b/3rdParty/org.apache.log4j/org.apache.log4j_1.2.16.jar
new file mode 100644
index 00000000..772bc56c
Binary files /dev/null and b/3rdParty/org.apache.log4j/org.apache.log4j_1.2.16.jar differ
diff --git a/3rdParty/org.apache.xml.resolver/.classpath b/3rdParty/org.apache.xml.resolver/.classpath
new file mode 100644
index 00000000..f2d41466
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.resolver/.project b/3rdParty/org.apache.xml.resolver/.project
new file mode 100644
index 00000000..5773173f
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/.project
@@ -0,0 +1,28 @@
+
+
+ org.apache.xml.resolver
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.apache.xml.resolver/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.apache.xml.resolver/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..442ef9ce
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Aug 26 10:31:10 EDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/org.apache.xml.resolver/META-INF/INDEX.LIST b/3rdParty/org.apache.xml.resolver/META-INF/INDEX.LIST
new file mode 100644
index 00000000..07ff324f
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/META-INF/INDEX.LIST
@@ -0,0 +1,14 @@
+JarIndex-Version: 1.0
+
+resolver.jar
+org
+org/apache
+org/apache/env
+org/apache/xml
+org/apache/xml/resolver
+org/apache/xml/resolver/apps
+org/apache/xml/resolver/etc
+org/apache/xml/resolver/helpers
+org/apache/xml/resolver/readers
+org/apache/xml/resolver/tools
+
diff --git a/3rdParty/org.apache.xml.resolver/META-INF/LICENSE.txt b/3rdParty/org.apache.xml.resolver/META-INF/LICENSE.txt
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/META-INF/LICENSE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/org.apache.xml.resolver/META-INF/MANIFEST.MF b/3rdParty/org.apache.xml.resolver/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..5292aa91
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Xerces XML Resolver Plugin
+Bundle-SymbolicName: org.apache.xml.resolver
+Bundle-Version: 1.2.0
+Bundle-ClassPath: org.apache.xml.resolver
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: org.apache.env;version="1.2.0",
+ org.apache.xml.resolver;version="1.2.0",
+ org.apache.xml.resolver.apps;version="1.2.0",
+ org.apache.xml.resolver.etc;version="1.2.0",
+ org.apache.xml.resolver.helpers;version="1.2.0",
+ org.apache.xml.resolver.readers;version="1.2.0",
+ org.apache.xml.resolver.tools;version="1.2.0"
+Require-Bundle: system.bundle
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/3rdParty/org.apache.xml.resolver/META-INF/NOTICE.txt b/3rdParty/org.apache.xml.resolver/META-INF/NOTICE.txt
new file mode 100644
index 00000000..cf064e38
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/META-INF/NOTICE.txt
@@ -0,0 +1,9 @@
+Apache XML Commons Resolver
+Copyright 2006 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation http://www.apache.org/
+
+Portions of this code are derived from classes placed in the
+public domain by Arbortext on 10 Apr 2000. See:
+http://www.arbortext.com/customer_support/updates_and_technical_notes/catalogs/docs/README.htm
diff --git a/3rdParty/org.apache.xml.resolver/build.properties b/3rdParty/org.apache.xml.resolver/build.properties
new file mode 100644
index 00000000..1ac73bad
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/build.properties
@@ -0,0 +1,3 @@
+output.. = .
+bin.includes = META-INF/,\
+ org/
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/env/WhichFactory.properties b/3rdParty/org.apache.xml.resolver/org/apache/env/WhichFactory.properties
new file mode 100644
index 00000000..6803778d
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/env/WhichFactory.properties
@@ -0,0 +1,31 @@
+# Used by org.apache.env.WhichFactory
+# Maps a simple name to a FQCN of a WhichProject implementation
+
+# xml.apache.org common projects
+commons=org.apache.env.WhichXmlCommons
+Commons=org.apache.env.WhichXmlCommons
+xml-commons=org.apache.env.WhichXmlCommons
+XmlCommons=org.apache.env.WhichXmlCommons
+
+xalan=org.apache.env.WhichXalan
+Xalan=org.apache.env.WhichXalan
+xml-xalan=org.apache.env.WhichXalan
+
+xerces=org.apache.env.WhichXerces
+Xerces=org.apache.env.WhichXerces
+xml-xerces=org.apache.env.WhichXerces
+
+crimson=org.apache.env.WhichCrimson
+Crimson=org.apache.env.WhichCrimson
+xml-crimson=org.apache.env.WhichCrimson
+
+
+# jakarta.apache.org common projects
+ant=org.apache.env.WhichAnt
+Ant=org.apache.env.WhichAnt
+jakarta-ant=org.apache.env.WhichAnt
+
+
+# External projects
+saxon=org.apache.env.WhichSaxon
+Saxon=org.apache.env.WhichSaxon
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/env/WhichJar.properties b/3rdParty/org.apache.xml.resolver/org/apache/env/WhichJar.properties
new file mode 100644
index 00000000..1fafd2fe
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/env/WhichJar.properties
@@ -0,0 +1,148 @@
+# Used by org.apache.env.WhichJar
+# Format: NNNN.jarname.jar=description
+# Where: NNNN is actual size in bytes of jarname.jar
+# from an *officially shipped* version
+
+# xml-xalan releases
+857192.xalan.jar=from xalan-j_1_1
+440237.xalan.jar=from xalan-j_1_2
+436094.xalan.jar=from xalan-j_1_2_1
+426249.xalan.jar=from xalan-j_1_2_2
+702536.xalan.jar=from xalan-j_2_0_0
+720930.xalan.jar=from xalan-j_2_0_1
+732330.xalan.jar=from xalan-j_2_1_0
+872241.xalan.jar=from xalan-j_2_2_D10
+882739.xalan.jar=from xalan-j_2_2_D11
+892188.xalan.jar=from xalan-j_2_2_D13
+897409.xalan.jar=from xalan-j_2_2_D14
+923866.xalan.jar=from xalan-j_2_2_0
+905872.xalan.jar=from xalan-j_2_3_D1
+906122.xalan.jar=from xalan-j_2_3_0
+983377.xalan.jar=from xalan-j_2_4_D1
+906248.xalan.jar=from xalan-j_2_3_1-bin
+997276.xalan.jar=from xalan-j_2_4_0-bin
+1031036.xalan.jar=from xalan-j_2_4_1-bin
+2645149.xalan.jar=from xalan-j_2_5_0-bin (singlejar)
+2907319.xalan.jar=from xalan-j_2_5_1-bin (singlejar)
+
+596540.xsltc.jar=from xalan-j_2_2_0
+590247.xsltc.jar=from xalan-j_2_3_D1
+589914.xsltc.jar=from xalan-j_2_3_0
+1268634.xsltc.jar=from xalan-j_2_3_0 (bundled version)
+1306667.xsltc.jar=from xalan-j_2_4_D1
+589915.xsltc.jar=from xalan-j_2_3_1-bin
+1328227.xsltc.jar=from xalan-j_2_4_0-bin
+1344009.xsltc.jar=from xalan-j_2_4_1-bin
+# Separate xsltc.jar not supported in normal releases after 2.4.1
+
+857171.xalan.jar=from lotusxsl-j_1_0_1
+802165.xalan.jar=from lotusxsl-j_2_0_0
+857692.xalan.jar=from lotusxsl-j_2_2
+424490.xalan.jar=from Xerces Tools releases - ERROR.DO NOT USE!
+
+92409.xml-apis.jar=from xalan-j_2_2_D13
+93717.xml-apis.jar=from xalan-j_2_2_D14
+100196.xml-apis.jar=from xalan-j_2_2_0 or xalan-j_2_3_D1
+108484.xml-apis.jar=from xalan-j_2_3_x,2_4_x from xml-commons-1.0.b2
+109049.xml-apis.jar=from xalan-j_2_4_0-bin
+113749.xml-apis.jar=from xalan-j_2_4_1-bin
+124720.xml-apis.jar=from xalan-j_2_5_x-bin
+
+# xml-xerces releases
+1591855.xerces.jar=from xalan-j_1_1 from xerces-1...
+1498679.xerces.jar=from xalan-j_1_2 from xerces-1_2_0.bin
+1484896.xerces.jar=from xalan-j_1_2_1 from xerces-1_2_1.bin
+804460.xerces.jar=from xalan-j_1_2_2 from xerces-1_2_2.bin
+1499244.xerces.jar=from xalan-j_2_0_0 from xerces-1_2_3.bin
+1605266.xerces.jar=from xalan-j_2_0_1 from xerces-1_3_0.bin
+904030.xerces.jar=from xalan-j_2_1_0 from xerces-1_4.bin
+1190776.xerces.jar=from lotusxsl_1_0_1 apparently-from xerces-1_0_3.bin
+1489400.xerces.jar=from lotusxsl-j_2_0_0 from XML4J-3_1_1
+1787796.xerces.jar=from lotusxsl-j_2_2 or xerces-1_4_1.bin
+904030.xerces.jar=from xerces-1_4_0.bin
+1802885.xerces.jar=from xerces-1_4_2.bin
+1808883.xerces.jar=from xalan-j_2_2_D10,D11,D12 or xerces-1_4_3.bin
+1803877.xerces.jar=from XML4J-3_2_1
+1812019.xerces.jar=from xalan-j_2_2_D14 or xerces-1_4_4.bin
+1734594.xerces.jar=from Xerces-J-bin.2.0.0.beta3
+1845256.xercesImpl.jar=from Xerces-J-bin.2.0.0.beta4
+1861586.xerces.jar=from deprecatedXerces-J-bin.2.0.0
+1730053.xercesImpl.jar=from Xerces-J-bin.2.0.0
+1860418.xerces.jar=from deprecatedXerces-J-bin.2.0.1
+1728861.xercesImpl.jar=from Xerces-J-bin.2.0.1
+1011677.xerces.jar=from deprecatedXerces-J-bin.2.0.2
+933730.xercesImpl.jar=from Xerces-J-bin.2.0.2
+3387328.xerces.jar=from deprecatedXML4J-bin.4.0.4
+3244060.xercesImpl.jar=from XML4J-bin.4.0.4
+972027.xercesImpl.jar=from Xerces-J-bin.2.1.0
+831587.xercesImpl.jar=from Xerces-J-bin.2.2.0
+834966.xercesImpl.jar=from Xerces-J-bin.2.2.1
+885362.xercesImpl.jar=from Xerces-J-bin.2.3.0
+895924.xercesImpl.jar=from Xerces-J-bin.2.4.0
+927669.xercesImpl.jar=from Xerces-J-bin.2.5.0
+
+# xml-crimson and JAXP or related releases
+5618.jaxp.jar=from jaxp1.0.1
+136133.parser.jar=from jaxp1.0.1
+28404.jaxp.jar=from jaxp-1.1
+187162.crimson.jar=from jaxp-1.1
+801714.xalan.jar=from jaxp-1.1
+196399.crimson.jar=from crimson-1.1.1
+33323.jaxp.jar=from crimson-1.1.1 or jakarta-ant-1.4.1b1
+152717.crimson.jar=from crimson-1.1.2beta2
+206384.crimson.jar=from crimson-1.1.3 or jakarta-ant-1.4.1b1
+136198.parser.jar=from jakarta-ant-1.3 or 1.2
+5537.jaxp.jar=from jakarta-ant-1.3 or 1.2
+88143.xml-apis.jar=from crimson-1.1.2beta2
+
+
+# lotusxsl releases (from xml-xalan releases)
+120274.lotusxsl.jar=from lotusxsl-0_16_4
+120293.lotusxsl.jar=from lotusxsl-0_16_5
+283777.lotusxsl.jar=from lotusxsl-0_17_2
+305577.lotusxsl.jar=from lotusxsl-0_17_3
+304500.lotusxsl.jar=from lotusxsl-0_17_4
+714959.lotusxsl.jar=from lotusxsl-0_18_1
+717674.lotusxsl.jar=from lotusxsl-0_18_2
+752343.lotusxsl.jar=from lotusxsl-0_18_3
+907101.lotusxsl.jar=from lotusxsl-0_18_4
+
+
+# jakarta-ant releases
+330479.ant.jar=from jakarta-ant-1.2-bin
+295934.ant.jar=from jakarta-ant-1.3-bin
+417114.ant.jar=from jakarta-ant-1.4.1b1-bin
+704665.ant.jar=from jakarta-ant-1.5Beta1-bin
+642472.ant.jar=from jakarta-ant-1.5Beta2-bin
+716139.ant.jar=from jakarta-ant-1.5-bin
+717666.ant.jar=from jakarta-ant-1.5.1-bin
+732490.ant.jar=from apache-ant-1.5.2-bin
+737884.ant.jar=from apache-ant-1.5.3-1-bin
+736810.ant.jar=from apache-ant-1.5.4-bin
+
+
+
+# Sun releases of JAXP or JDK 1.4.x
+26710.dom.jar=from java_xml_pack-summer-02
+27052.jaxp-api.jar=from java_xml_pack-summer-02
+26206.sax.jar=from java_xml_pack-summer-02
+906806.xalan.jar=from java_xml_pack-summer-02 or jwsdp-1_0-windows-i586
+974690.xercesImpl.jar=from java_xml_pack-summer-02 or jwsdp-1_0-windows-i586 or jwsdp-1_0_01-windows-i586
+1277537.xsltc.jar=from java_xml_pack-summer-02 or jwsdp-1_0-windows-i586 WARNING! NEEDS PATCH FROM xsltc-1_0
+1280284.xsltc.jar=from java_xml_pack-summer-02 patched from xsltc-1_0
+
+906847.xalan.jar=from jwsdp-1_0_01-windows-i586
+1308721.xsltc.jar=from jwsdp-1_0_01-windows-i586
+27052.jaxp-api.jar=from jwsdp-1_0_01-windows-i586
+
+1267125.xalan.jar=from jwsdp-1_1-windows-i586
+1129554.xercesImpl.jar=from jwsdp-1_1-windows-i586
+1344022.xsltc.jar=from jwsdp-1_1-windows-i586
+27073.jaxp-api.jar=from jwsdp-1_1-windows-i586
+
+1271111.xalan.jar=from jwsdp-1_2-windows-i586
+1202684.xercesImpl.jar=from jwsdp-1_2-windows-i586
+1347371.xsltc.jar=from jwsdp-1_2-windows-i586
+27049.jaxp-api.jar=from jwsdp-1_2-windows-i586
+
+# other projects/releases
\ No newline at end of file
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Catalog.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Catalog.class
new file mode 100644
index 00000000..1a631eda
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Catalog.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogEntry.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogEntry.class
new file mode 100644
index 00000000..fd26f70c
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogEntry.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogException.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogException.class
new file mode 100644
index 00000000..cbd169e3
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogException.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogManager.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogManager.class
new file mode 100644
index 00000000..2cf09088
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/CatalogManager.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Resolver.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Resolver.class
new file mode 100644
index 00000000..3f5a9cfe
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Resolver.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Version.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Version.class
new file mode 100644
index 00000000..00c2fd9a
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/Version.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/XParseError.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/XParseError.class
new file mode 100644
index 00000000..a2cc12eb
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/XParseError.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/resolver.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/resolver.class
new file mode 100644
index 00000000..9221fea1
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/resolver.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xparse.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xparse.class
new file mode 100644
index 00000000..5f3e2c9d
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xparse.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xread.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xread.class
new file mode 100644
index 00000000..e359d9a4
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/apps/xread.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.dtd b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.dtd
new file mode 100644
index 00000000..620c1fa0
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.dtd
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.rng b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.rng
new file mode 100644
index 00000000..9c19eb29
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.rng
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [a-zA-Z0-9-'()+,./:=?;!*#@$_%]*
+
+
+
+
+
+
+
+
+
+
+
+
+
+ system
+ public
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.xsd b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.xsd
new file mode 100644
index 00000000..0a37330a
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/catalog.xsd
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/xcatalog.dtd b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/xcatalog.dtd
new file mode 100644
index 00000000..d229b724
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/etc/xcatalog.dtd
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/BootstrapResolver.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/BootstrapResolver.class
new file mode 100644
index 00000000..77ba2eca
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/BootstrapResolver.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Debug.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Debug.class
new file mode 100644
index 00000000..36d30b59
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Debug.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/FileURL.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/FileURL.class
new file mode 100644
index 00000000..4a14726e
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/FileURL.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Namespaces.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Namespaces.class
new file mode 100644
index 00000000..b96ed138
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/Namespaces.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/PublicId.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/PublicId.class
new file mode 100644
index 00000000..a794677a
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/helpers/PublicId.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/CatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/CatalogReader.class
new file mode 100644
index 00000000..be59a44e
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/CatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogParser.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogParser.class
new file mode 100644
index 00000000..b50e2967
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogParser.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogReader.class
new file mode 100644
index 00000000..b33e0aea
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/DOMCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.class
new file mode 100644
index 00000000..f719a4b0
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/OASISXMLCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/OASISXMLCatalogReader.class
new file mode 100644
index 00000000..0faadc0f
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/OASISXMLCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogParser.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogParser.class
new file mode 100644
index 00000000..ba122183
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogParser.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogReader.class
new file mode 100644
index 00000000..78c3a775
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXParserHandler.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXParserHandler.class
new file mode 100644
index 00000000..c64894ee
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/SAXParserHandler.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TR9401CatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TR9401CatalogReader.class
new file mode 100644
index 00000000..91edb771
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TR9401CatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TextCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TextCatalogReader.class
new file mode 100644
index 00000000..ea185215
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/TextCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/XCatalogReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/XCatalogReader.class
new file mode 100644
index 00000000..6392a2c0
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/readers/XCatalogReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/CatalogResolver.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/CatalogResolver.class
new file mode 100644
index 00000000..e4d4ff53
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/CatalogResolver.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingParser.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingParser.class
new file mode 100644
index 00000000..4923a65b
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingParser.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLFilter.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLFilter.class
new file mode 100644
index 00000000..9b3fe060
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLFilter.class differ
diff --git a/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLReader.class b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLReader.class
new file mode 100644
index 00000000..51d7a14c
Binary files /dev/null and b/3rdParty/org.apache.xml.resolver/org/apache/xml/resolver/tools/ResolvingXMLReader.class differ
diff --git a/3rdParty/org.apache.xml.resolver/pom.xml b/3rdParty/org.apache.xml.resolver/pom.xml
new file mode 100644
index 00000000..ea05413e
--- /dev/null
+++ b/3rdParty/org.apache.xml.resolver/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.0.5-SNAPSHOT
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.apache.xml.resolver
+ 1.2.0
+
+ KDM Analytics Apache Xerces-J Resolver Plugin
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.apache.xml.serializer/.classpath b/3rdParty/org.apache.xml.serializer/.classpath
new file mode 100644
index 00000000..439a599f
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/.classpath
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdParty/org.apache.xml.serializer/.project b/3rdParty/org.apache.xml.serializer/.project
new file mode 100644
index 00000000..4ba95cc0
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/.project
@@ -0,0 +1,28 @@
+
+
+ org.apache.xml.serializer
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.apache.xml.serializer/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.apache.xml.serializer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..322fc67e
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Aug 26 10:32:25 EDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/org.apache.xml.serializer/META-INF/LICENSE.txt b/3rdParty/org.apache.xml.serializer/META-INF/LICENSE.txt
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/META-INF/LICENSE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/3rdParty/org.apache.xml.serializer/META-INF/MANIFEST.MF b/3rdParty/org.apache.xml.serializer/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..6f42ccc7
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Xerces XML Serializer
+Bundle-SymbolicName: org.apache.xml.serializer
+Bundle-Version: 2.7.1
+Bundle-ClassPath: org.apache.xml.serializer
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: org.apache.xml.serializer;version="2.7.1",
+ org.apache.xml.serializer.dom3;version="2.7.1"
+Require-Bundle: system.bundle
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/3rdParty/org.apache.xml.serializer/META-INF/NOTICE.txt b/3rdParty/org.apache.xml.serializer/META-INF/NOTICE.txt
new file mode 100644
index 00000000..c4458581
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/META-INF/NOTICE.txt
@@ -0,0 +1,18 @@
+ =========================================================================
+ == NOTICE file corresponding to section 4(d) of the Apache License, ==
+ == Version 2.0, in this case for the Apache Xalan Java distribution. ==
+ =========================================================================
+
+ Apache Xalan (Xalan serializer)
+ Copyright 1999-2006 The Apache Software Foundation
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of this software was originally based on the following:
+ - software copyright (c) 1999-2002, Lotus Development Corporation.,
+ http://www.lotus.com.
+ - software copyright (c) 2001-2002, Sun Microsystems.,
+ http://www.sun.com.
+ - software copyright (c) 2003, IBM Corporation.,
+ http://www.ibm.com.
diff --git a/3rdParty/org.apache.xml.serializer/build.properties b/3rdParty/org.apache.xml.serializer/build.properties
new file mode 100644
index 00000000..876835f3
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/build.properties
@@ -0,0 +1,4 @@
+source.. = .
+output.. = .
+bin.includes = META-INF/,\
+ org/
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/AttributesImplSerializer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/AttributesImplSerializer.class
new file mode 100644
index 00000000..5ef56fe9
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/AttributesImplSerializer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$1.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$1.class
new file mode 100644
index 00000000..2870ccd8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$1.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$CharKey.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$CharKey.class
new file mode 100644
index 00000000..8b3fbbd5
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo$CharKey.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo.class
new file mode 100644
index 00000000..82c31ae1
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/CharInfo.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOM3Serializer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOM3Serializer.class
new file mode 100644
index 00000000..05cabb5e
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOM3Serializer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOMSerializer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOMSerializer.class
new file mode 100644
index 00000000..3459957c
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/DOMSerializer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemContext.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemContext.class
new file mode 100644
index 00000000..5ae25ba4
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemContext.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemDesc.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemDesc.class
new file mode 100644
index 00000000..4a9b7487
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ElemDesc.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EmptySerializer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EmptySerializer.class
new file mode 100644
index 00000000..fab1067a
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EmptySerializer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$1.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$1.class
new file mode 100644
index 00000000..fbd7cded
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$1.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$EncodingImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$EncodingImpl.class
new file mode 100644
index 00000000..96ad9ccd
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$EncodingImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$InEncoding.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$InEncoding.class
new file mode 100644
index 00000000..e2bb6212
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo$InEncoding.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo.class
new file mode 100644
index 00000000..e79cdaa4
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/EncodingInfo.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.class
new file mode 100644
index 00000000..4dfa8605
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.properties
new file mode 100644
index 00000000..6094d834
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Encodings.properties
@@ -0,0 +1,260 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: Encodings.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# Each entry in this properties file is:
+# 1) The Java name for the encoding
+# 2) A comma separated list of the MIME names for the encoding,
+# with the first one being the preferred MIME name.
+# 3) An optional high char. Characters at or below this value are
+# definately in the encoding, but characters above it may or may not be.
+# This value is given only for performance reasons.
+# A value of zero is the same as no value at all.
+#
+# For example this line in this file:
+# ASCII ASCII,US-ASCII 0x007F
+# Means the Java name for the encoding is "ASCII". The MIME names for this
+# encoding which may appear in a stylesheet are "ASCII" or "US-ASCII"
+# and the optional high code point value is given, and it is 0X007F
+# which means that the contiguous block of chars from
+# 0x0001 to 0x007F ( 127 in base 10) are all in the encoding.
+# Higher values above this char might be in the encoding, although in the
+# case of this particular encoding there are no higher chars.
+#
+#
+# ,
+#
+#
+ASCII ASCII,US-ASCII 0x007F
+#
+# Big5, Traditional Chinese
+Big5 BIG5,csBig5 0x007F
+#Big5 with Hong Kong extensions, Traditional Chinese (incorporating 2001 revision)
+Big5_HKSCS BIG5-HKSCS 0x007F
+# USA, Canada (Bilingual, French), Netherlands, Portugal, Brazil, Australia
+Cp037 EBCDIC-CP-US,EBCDIC-CP-CA,EBCDIC-CP-WT,EBCDIC-CP-NL,IBM037 0x0019
+# IBM Austria, Germany
+Cp273 IBM273,csIBM273 0x0019
+Cp274 csIBM274,EBCDIC-BE
+Cp275 csIBM275,EBCDIC-BR
+# IBM Denmark, Norway
+Cp277 EBCDIC-CP-DK,EBCDIC-CP-NO,IBM277,csIBM277 0x0019
+# IBM Finland, Sweden
+Cp278 EBCDIC-CP-FI,EBCDIC-CP-SE,IBM278,csIBM278 0x0019
+# IBM Italy
+Cp280 EBCDIC-CP-IT,IBM280,csIBM280 0x0019
+Cp281 EBCDIC-JP-E,csIBM281
+# IBM Catalan/Spain, Spanish Latin America
+Cp284 EBCDIC-CP-ES,IBM284,csIBM284 0x0019
+# IBM United Kingdom, Ireland
+Cp285 EBCDIC-CP-GB,IBM284,csIBM285 0x0019
+Cp290 EBCDIC-JP-kana,IBM290,csIBM290 0x0019
+# IBM France
+Cp297 EBCDIC-CP-FR,IBM297,csIBM297 0x0019
+# IBM Arabic
+Cp420 EBCDIC-CP-AR1,IBM420,csIBM420 0x0019
+Cp423 EBCDIC-CP-GR,IBM423,csIBM423
+# IBM Hebrew
+Cp424 EBCDIC-CP-HE,IBM424,csIBM424 0x0019
+Cp437 437,IBM437,csPC8CodePage437 0x007F
+# EBCDIC 500V1
+Cp500 EBCDIC-CP-CH,EBCDIC-CP-BE,IBM500,csIBM500 0x0019
+# PC Baltic
+Cp775 IBM775,csPC775Baltic 0x007F
+# IBM Thailand extended SBCS
+Cp838 IBM-Thai,838,csIBMThai 0x0019
+# MS-DOS Latin-1
+Cp850 850,csPC850Multilingual,IBM850 0x007F
+Cp851 851,IBM851,csIBM851
+# MS-DOS Latin-2
+Cp852 IBM852,852,csPCp852 0x007F
+# IBM Cyrillic
+Cp855 IBM855,855,csIBM855 0x007F
+# IBM Turkish
+Cp857 IBM857,857,csIBM857 0x007F
+# Variant of Cp850 with Euro character
+Cp858 IBM00858 0x007F
+# MS-DOS Portuguese
+Cp860 860,csIBM860,IBM860 0x007F
+# MS-DOS Icelandic
+Cp861 IBM861,861,csIBM861,cp-is 0x007F
+#
+Cp862 IBM862,862,csPCi62LatinHebrew 0x007F
+# MS-DOS Canadian French
+Cp863 IBM863,863,csIBM863 0x007F
+# PC Arabic
+Cp864 IBM864,864,csIBM864 0x007F
+# MS-DOS Nordic
+Cp865 IBM865,865,csIBM865 0x007F
+# MS-DOS Russian
+Cp866 IBM866,866,csIBM866 0x007F
+# MS-DOS Pakistan
+Cp868 IBM868,cp-ar,csIBM868 0x007F
+# IBM Modern Greek
+Cp869 IBM869,869,cp-gr,csIBM869 0x007F
+# IBM Multilingual Latin-2
+Cp870 EBCDIC-CP-ROECE,EBCDIC-CP-YU,IBM870,csIBM870 0x0019
+# IBM Iceland
+Cp871 EBCDIC-CP-IS,IBM871,csIBM871 0x0019
+Cp880 EBCDIC-Cyrillic,IBM880,csIBM880
+Cp891 IBM891,csIBM891
+Cp903 IBM903,csIBM903
+Cp904 IBM904,csIBM904
+Cp905 IBM905,csIBM905,EBCDIC-CP-TR
+# IBM Pakistan (Urdu)
+Cp918 EBCDIC-CP-AR2,IBM918,csIBM918 0x0019
+# GBK, Simplified Chinese
+Cp936 GBK,MS936,WINDOWS-936
+# IBM Latin-5, Turkey
+Cp1026 IBM1026,csIBM1026 0x0019
+# Latin-1 character set for EBCDIC hosts
+Cp1047 IBM1047,IBM-1047 0x0019
+# Variant of Cp037 with Euro character
+Cp1140 IBM01140 0x0019
+# Variant of Cp273 with Euro character
+Cp1141 IBM01141 0x0019
+# Variant of Cp277 with Euro character
+Cp1142 IBM01142 0x0019
+# Variant of Cp278 with Euro character
+Cp1143 IBM01143 0x0019
+# Variant of Cp280 with Euro character
+Cp1144 IBM01144 0x0019
+# Variant of Cp284 with Euro character
+Cp1145 IBM01145 0x0019
+# Variant of Cp285 with Euro character
+Cp1146 IBM01146 0x0019
+# Variant of Cp297 with Euro character
+Cp1147 IBM01147 0x0019
+# Variant of Cp500 with Euro character
+Cp1148 IBM01148 0x0019
+# Variant of Cp871 with Euro character
+Cp1149 IBM01149 0x0019
+Cp1250 WINDOWS-1250 0x007F
+Cp1251 WINDOWS-1251 0x007F
+Cp1252 WINDOWS-1252 0x007F
+Cp1253 WINDOWS-1253 0x007F
+Cp1254 WINDOWS-1254 0x007F
+# Windows Hebrew
+Cp1255 WINDOWS-1255 0x007F
+# Windows Arabic
+Cp1256 WINDOWS-1256 0x007F
+Cp1257 WINDOWS-1257 0x007F
+# Windows Vietnamese
+Cp1258 WINDOWS-1258 0x007F
+EUC-CN EUC-CN 0x007F
+EUC_CN EUC-CN 0x007F
+#
+#JISX 0201, 0208 and 0212, EUC encoding Japanese
+EUC-JP EUC-JP 0x007F
+EUC_JP EUC-JP 0x007F
+# KS C 5601, EUC encoding, Korean
+EUC-KR EUC-KR 0x007F
+EUC_KR EUC-KR 0x007F
+# CNS11643 (Plane 1-7,15), EUC encoding, Traditional Chinese
+EUC-TW EUC-TW 0x007F
+EUC_TW EUC-TW,x-EUC-TW 0x007F
+EUCJIS EUC-JP 0x007F
+#
+# GB2312, EUC encoding, Simplified Chinese
+GB2312 GB2312 0x007F
+
+# GB2312 and CNS11643 in ISO 2022 CN form, Simplified and Traditional Chinese (conversion to Unicode only)
+ISO2022CN ISO-2022-CN
+# JIS X 0201, 0208, in ISO 2022 form, Japanese
+ISO2022JP ISO-2022-JP
+# ISO 2022 KR, Korean
+ISO2022KR ISO-2022-KR 0x007F
+#
+#
+ISO8859-1 ISO-8859-1 0x00FF
+ISO8859_1 ISO-8859-1 0x00FF
+8859-1 ISO-8859-1 0x00FF
+8859_1 ISO-8859-1 0x00FF
+#
+ISO8859-2 ISO-8859-2 0x00A0
+ISO8859_2 ISO-8859-2 0x00A0
+8859-2 ISO-8859-2 0x00A0
+8859_2 ISO-8859-2 0x00A0
+#
+# Latin Alphabet No. 3
+ISO8859-3 ISO-8859-3 0x00A0
+ISO8859_3 ISO-8859-3 0x00A0
+8859-3 ISO-8859-3 0x00A0
+8859_3 ISO-8859-3 0x00A0
+#
+ISO8859-4 ISO-8859-4 0x00A0
+ISO8859_4 ISO-8859-4 0x00A0
+8859-4 ISO-8859-4 0x00A0
+8859_4 ISO-8859-4 0x00A0
+#
+ISO8859-5 ISO-8859-5 0x00A0
+ISO8859_5 ISO-8859-5 0x00A0
+8859-5 ISO-8859-5 0x00A0
+8859_5 ISO-8859-5 0x00A0
+#
+# Latin/Arabic Alphabet
+ISO8859-6 ISO-8859-6 0x00A0
+ISO8859_6 ISO-8859-6 0x00A0
+8859-6 ISO-8859-6 0x00A0
+8859_6 ISO-8859-6 0x00A0
+#
+ISO8859-7 ISO-8859-7 0x00A0
+ISO8859_7 ISO-8859-7 0x00A0
+8859-7 ISO-8859-7 0x00A0
+8859_7 ISO-8859-7 0x00A0
+#
+ISO8859-8 ISO-8859-8 0x00A0
+ISO8859_8 ISO-8859-8 0x00A0
+8859-8 ISO-8859-8 0x00A0
+8859_8 ISO-8859-8 0x00A0
+#
+ISO8859-9 ISO-8859-9 0x00CF
+ISO8859_9 ISO-8859-9 0x00CF
+8859-9 ISO-8859-9 0x00CF
+8859_9 ISO-8859-9 0x00CF
+#
+ISO8859-10 ISO-8859-10 0x007E
+ISO8859_10 ISO-8859-10 0x007E
+ISO8859-11 ISO-8859-11 0x007E
+ISO8859_11 ISO-8859-11 0x007E
+ISO8859-12 ISO-8859-12 0x007F
+ISO8859_12 ISO-8859-12 0x007F
+ISO8859-13 ISO-8859-13 0x00A0
+ISO8859_13 ISO-8859-13 0x00A0
+ISO8859-14 ISO-8859-14 0x007E
+ISO8859_14 ISO-8859-14 0x007E
+ISO8859-15 ISO-8859-15 0x00A3
+ISO8859_15 ISO-8859-15 0x00A3
+JIS ISO-2022-JP 0x007F
+KOI8_R KOI8-R 0x007F
+KSC5601 EUC-KR 0x007F
+KS_C_5601-1987 KS_C_5601-1987,iso-ir-149,KS_C_5601-1989,KSC_5601,csKSC56011987 0x007F
+MacTEC MacRoman
+# Windows Japanese
+MS932 windows-31j
+# Shift-JIS, Japanese
+SJIS SHIFT_JIS 0x007F
+# TIS620, Thai
+TIS620 TIS-620
+UTF8 UTF-8 0xFFFF
+Unicode UNICODE,UTF-16 0xFFFF
+
+# note that more character set names and their aliases
+# can be found at http://www.iana.org/assignments/character-sets
+
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedContentHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedContentHandler.class
new file mode 100644
index 00000000..64e79f35
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedContentHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedLexicalHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedLexicalHandler.class
new file mode 100644
index 00000000..3e9f5c52
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ExtendedLexicalHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/HTMLEntities.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/HTMLEntities.properties
new file mode 100644
index 00000000..1987e8a6
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/HTMLEntities.properties
@@ -0,0 +1,311 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: HTMLEntities.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# @version $Revision: 468654 $ $Date: 2006-10-28 03:09:23 -0400 (Sat, 28 Oct 2006) $
+# This file must be encoded in UTF-8; see CharInfo.java
+#
+# Character entity references for markup-significant
+#
+quot=34
+amp=38
+lt=60
+gt=62
+nbsp=160
+#
+# Character entity references for ISO 8859-1 characters
+#
+iexcl=161
+cent=162
+pound=163
+curren=164
+yen=165
+brvbar=166
+sect=167
+uml=168
+copy=169
+ordf=170
+laquo=171
+not=172
+shy=173
+reg=174
+macr=175
+deg=176
+plusmn=177
+sup2=178
+sup3=179
+acute=180
+micro=181
+para=182
+middot=183
+cedil=184
+sup1=185
+ordm=186
+raquo=187
+frac14=188
+frac12=189
+frac34=190
+iquest=191
+Agrave=192
+Aacute=193
+Acirc=194
+Atilde=195
+Auml=196
+Aring=197
+AElig=198
+Ccedil=199
+Egrave=200
+Eacute=201
+Ecirc=202
+Euml=203
+Igrave=204
+Iacute=205
+Icirc=206
+Iuml=207
+ETH=208
+Ntilde=209
+Ograve=210
+Oacute=211
+Ocirc=212
+Otilde=213
+Ouml=214
+times=215
+Oslash=216
+Ugrave=217
+Uacute=218
+Ucirc=219
+Uuml=220
+Yacute=221
+THORN=222
+szlig=223
+agrave=224
+aacute=225
+acirc=226
+atilde=227
+auml=228
+aring=229
+aelig=230
+ccedil=231
+egrave=232
+eacute=233
+ecirc=234
+euml=235
+igrave=236
+iacute=237
+icirc=238
+iuml=239
+eth=240
+ntilde=241
+ograve=242
+oacute=243
+ocirc=244
+otilde=245
+ouml=246
+divide=247
+oslash=248
+ugrave=249
+uacute=250
+ucirc=251
+uuml=252
+yacute=253
+thorn=254
+yuml=255
+#
+# Character entity references for symbols, mathematical symbols, and Greek letters
+#
+# Latin Extended -- Netscape can't handle
+# fnof 402
+#
+# Greek - Netscape can't handle these
+# Alpha 913
+# Beta 914
+# Gamma 915
+# Delta 916
+# Epsilon 917
+# Zeta 918
+# Eta 919
+# Theta 920
+# Iota 921
+# Kappa 922
+# Lambda 923
+# Mu 924
+# Nu 925
+# Xi 926
+# Omicron 927
+# Pi 928
+# Rho 929
+# Sigma 931
+# Tau 932
+# Upsilon 933
+# Phi 934
+# Chi 935
+# Psi 936
+# Omega 937
+# alpha 945
+# beta 946
+# gamma 947
+# delta 948
+# epsilon 949
+# zeta 950
+# eta 951
+# theta 952
+# iota 953
+# kappa 954
+# lambda 955
+# mu 956
+# nu 957
+# xi 958
+# omicron 959
+# pi 960
+# rho 961
+# sigmaf 962
+# sigma 963
+# tau 964
+# upsilon 965
+# phi 966
+# chi 967
+# psi 968
+# omega 969
+# thetasym 977
+# upsih 978
+# piv 982
+#
+# General Punctuation
+bull=8226
+hellip=8230
+prime=8242
+Prime=8243
+oline=8254
+frasl=8260
+#
+# Letterlike Symbols
+weierp=8472
+image=8465
+real=8476
+trade=8482
+alefsym=8501
+#
+# Arrows
+larr=8592
+uarr=8593
+rarr=8594
+darr=8595
+harr=8596
+crarr=8629
+lArr=8656
+uArr=8657
+rArr=8658
+dArr=8659
+hArr=8660
+#
+# Mathematical Operators
+forall=8704
+part=8706
+exist=8707
+empty=8709
+nabla=8711
+isin=8712
+notin=8713
+ni=8715
+prod=8719
+sum=8721
+minus=8722
+lowast=8727
+radic=8730
+prop=8733
+infin=8734
+ang=8736
+and=8743
+or=8744
+cap=8745
+cup=8746
+int=8747
+there4=8756
+sim=8764
+cong=8773
+asymp=8776
+ne=8800
+equiv=8801
+le=8804
+ge=8805
+sub=8834
+sup=8835
+nsub=8836
+sube=8838
+supe=8839
+oplus=8853
+otimes=8855
+perp=8869
+sdot=8901
+#
+# Miscellaneous Technical
+lceil=8968
+rceil=8969
+lfloor=8970
+rfloor=8971
+lang=9001
+rang=9002
+#
+# Geometric Shapes
+loz=9674
+#
+# Miscellaneous Symbols
+spades=9824
+clubs=9827
+hearts=9829
+diams=9830
+#
+# Character entity references for internationalization characters
+#
+# Latin Extended-A
+# Netscape can't handle!
+# OElig 338
+# oelig 339
+
+#-- NN 4.7 does not seem to support these, so they might ought to be commented.
+# Scaron 352
+# scaron 353
+# Yuml 376
+#
+# Spacing Modifier Letters -- Netscape can't handle
+# circ 710
+# tilde 732
+#
+# General Punctuation
+ensp=8194
+emsp=8195
+thinsp=8201
+zwnj=8204
+zwj=8205
+lrm=8206
+rlm=8207
+ndash=8211
+mdash=8212
+lsquo=8216
+rsquo=8217
+sbquo=8218
+ldquo=8220
+rdquo=8221
+bdquo=8222
+dagger=8224
+Dagger=8225
+permil=8240
+lsaquo=8249
+rsaquo=8250
+euro=8364
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Method.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Method.class
new file mode 100644
index 00000000..72774000
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Method.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$MappingRecord.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$MappingRecord.class
new file mode 100644
index 00000000..d26c1aa8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$MappingRecord.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$Stack.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$Stack.class
new file mode 100644
index 00000000..da639b62
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings$Stack.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings.class
new file mode 100644
index 00000000..25e66d88
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/NamespaceMappings.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory$ConfigurationError.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory$ConfigurationError.class
new file mode 100644
index 00000000..da084559
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory$ConfigurationError.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory.class
new file mode 100644
index 00000000..cb881342
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ObjectFactory.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory$1.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory$1.class
new file mode 100644
index 00000000..04a6deb2
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory$1.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory.class
new file mode 100644
index 00000000..33b901d6
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertiesFactory.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertyUtils.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertyUtils.class
new file mode 100644
index 00000000..7985d354
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/OutputPropertyUtils.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport.class
new file mode 100644
index 00000000..b3a5b05a
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$1.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$1.class
new file mode 100644
index 00000000..f4ff2bc6
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$1.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$2.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$2.class
new file mode 100644
index 00000000..87627d28
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$2.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$3.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$3.class
new file mode 100644
index 00000000..6b82d72c
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$3.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$4.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$4.class
new file mode 100644
index 00000000..6ea6ada7
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$4.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$5.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$5.class
new file mode 100644
index 00000000..0837eb9e
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$5.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$6.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$6.class
new file mode 100644
index 00000000..0b1bb4da
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$6.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$7.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$7.class
new file mode 100644
index 00000000..8fdce28d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$7.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$8.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$8.class
new file mode 100644
index 00000000..6e57da10
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12$8.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12.class
new file mode 100644
index 00000000..e768e9ea
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SecuritySupport12.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializationHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializationHandler.class
new file mode 100644
index 00000000..670ad7ab
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializationHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Serializer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Serializer.class
new file mode 100644
index 00000000..8d96bd1b
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Serializer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerBase.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerBase.class
new file mode 100644
index 00000000..039681f7
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerBase.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerConstants.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerConstants.class
new file mode 100644
index 00000000..8c67625b
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerConstants.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerFactory.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerFactory.class
new file mode 100644
index 00000000..cb75e970
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerFactory.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTrace.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTrace.class
new file mode 100644
index 00000000..6c055944
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTrace.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTraceWriter.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTraceWriter.class
new file mode 100644
index 00000000..b1cce7b3
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/SerializerTraceWriter.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLSAXHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLSAXHandler.class
new file mode 100644
index 00000000..78a99e48
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLSAXHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie$Node.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie$Node.class
new file mode 100644
index 00000000..0a8d999d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie$Node.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie.class
new file mode 100644
index 00000000..fb16d396
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream$Trie.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream.class
new file mode 100644
index 00000000..601d5a3d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToHTMLStream.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToSAXHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToSAXHandler.class
new file mode 100644
index 00000000..10a299a8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToSAXHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$BoolStack.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$BoolStack.class
new file mode 100644
index 00000000..71ec4c1c
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$BoolStack.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$WritertoStringBuffer.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$WritertoStringBuffer.class
new file mode 100644
index 00000000..b1bdd66d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream$WritertoStringBuffer.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream.class
new file mode 100644
index 00000000..ef833326
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToStream.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextSAXHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextSAXHandler.class
new file mode 100644
index 00000000..b7c1babd
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextSAXHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextStream.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextStream.class
new file mode 100644
index 00000000..9fb12037
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToTextStream.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToUnknownStream.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToUnknownStream.class
new file mode 100644
index 00000000..5c7e2541
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToUnknownStream.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLSAXHandler.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLSAXHandler.class
new file mode 100644
index 00000000..c927fde0
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLSAXHandler.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLStream.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLStream.class
new file mode 100644
index 00000000..f313869e
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/ToXMLStream.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TransformStateSetter.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TransformStateSetter.class
new file mode 100644
index 00000000..6e62caf8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TransformStateSetter.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TreeWalker.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TreeWalker.class
new file mode 100644
index 00000000..4f622a35
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/TreeWalker.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Version.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Version.class
new file mode 100644
index 00000000..c238bb76
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/Version.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterChain.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterChain.class
new file mode 100644
index 00000000..904f71e2
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterChain.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToASCI.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToASCI.class
new file mode 100644
index 00000000..113c4a87
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToASCI.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToUTF8Buffered.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToUTF8Buffered.class
new file mode 100644
index 00000000..81c89933
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/WriterToUTF8Buffered.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XMLEntities.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XMLEntities.properties
new file mode 100644
index 00000000..23d0a64e
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XMLEntities.properties
@@ -0,0 +1,30 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: XMLEntities.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# @version $Revision: 468654 $ $Date: 2006-10-28 03:09:23 -0400 (Sat, 28 Oct 2006) $
+# This file must be encoded in UTF-8; see CharInfo.java
+#
+# Character entity references for markup-significant
+#
+quot=34
+amp=38
+lt=60
+gt=62
+
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XSLOutputAttributes.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XSLOutputAttributes.class
new file mode 100644
index 00000000..ffaf5480
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/XSLOutputAttributes.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3SerializerImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3SerializerImpl.class
new file mode 100644
index 00000000..d14cec2f
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3SerializerImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3TreeWalker.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3TreeWalker.class
new file mode 100644
index 00000000..3995626a
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOM3TreeWalker.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMConstants.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMConstants.class
new file mode 100644
index 00000000..45da1fb0
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMConstants.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorHandlerImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorHandlerImpl.class
new file mode 100644
index 00000000..5e7b54b5
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorHandlerImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorImpl.class
new file mode 100644
index 00000000..fdd2605e
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMErrorImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMLocatorImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMLocatorImpl.class
new file mode 100644
index 00000000..85c28971
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMLocatorImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMOutputImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMOutputImpl.class
new file mode 100644
index 00000000..0d4ecf53
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMOutputImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMStringListImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMStringListImpl.class
new file mode 100644
index 00000000..4ce66e3d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/DOMStringListImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$1.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$1.class
new file mode 100644
index 00000000..473ce93b
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$1.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$ThrowableMethods.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$ThrowableMethods.class
new file mode 100644
index 00000000..2c40d715
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl$ThrowableMethods.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl.class
new file mode 100644
index 00000000..e3f08ec7
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/LSSerializerImpl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport$Prefixes.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport$Prefixes.class
new file mode 100644
index 00000000..2d06636d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport$Prefixes.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport.class
new file mode 100644
index 00000000..7d7716b8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/dom3/NamespaceSupport.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_html.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_html.properties
new file mode 100644
index 00000000..43724e4e
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_html.properties
@@ -0,0 +1,44 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: output_html.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# Specify defaults when method="html". These defaults use output_xml.properties
+# as a base.
+#
+
+# XSLT properties do not need namespace qualification.
+method=html
+indent=yes
+media-type=text/html
+version=4.0
+
+# Xalan-specific output properties. These can be overridden in the stylesheet
+# assigning a xalan namespace. For example:
+#
+#
+# ...
+# Note that the colon after the protocol needs to be escaped.
+{http\u003a//xml.apache.org/xalan}indent-amount=0
+{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToHTMLStream
+{http\u003a//xml.apache.org/xalan}entities=org/apache/xml/serializer/HTMLEntities
+{http\u003a//xml.apache.org/xalan}use-url-escaping=yes
+{http\u003a//xml.apache.org/xalan}omit-meta-tag=no
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_text.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_text.properties
new file mode 100644
index 00000000..ed0ed86a
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_text.properties
@@ -0,0 +1,37 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: output_text.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# Specify defaults when method="text".
+#
+
+# XSLT properties do not need namespace qualification.
+method=text
+media-type=text/plain
+
+# Xalan-specific output properties. These can be overridden in the stylesheet
+# assigning a xalan namespace. For example:
+#
+#
+# ...
+# Note that the colon after the protocol needs to be escaped.
+{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToTextStream
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_unknown.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_unknown.properties
new file mode 100644
index 00000000..3f7cea19
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_unknown.properties
@@ -0,0 +1,46 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: output_unknown.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# Specify defaults when no method="..." is specified.
+# This type of output will quickly switch to "xml" or "html"
+# depending on the first element name.
+#
+
+# XSLT properties do not need namespace qualification.
+method=xml
+version=1.0
+encoding=UTF-8
+indent=no
+omit-xml-declaration=no
+standalone=no
+media-type=text/xml
+
+# Xalan-specific output properties. These can be overridden in the stylesheet
+# assigning a xalan namespace. For example:
+#
+#
+# ...
+# Note that the colon after the protocol needs to be escaped.
+{http\u003a//xml.apache.org/xalan}indent-amount=0
+{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToUnknownStream
+
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_xml.properties b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_xml.properties
new file mode 100644
index 00000000..24696c87
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/output_xml.properties
@@ -0,0 +1,46 @@
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+#
+# $Id: output_xml.properties 468654 2006-10-28 07:09:23Z minchau $
+#
+# Specify defaults when method="xml". These defaults serve as a base for
+# other defaults, such as output_html and output_text.
+#
+
+# XSLT properties do not need namespace qualification.
+method=xml
+version=1.0
+encoding=UTF-8
+indent=no
+omit-xml-declaration=no
+standalone=no
+media-type=text/xml
+
+# Xalan-specific output properties. These can be overridden in the stylesheet
+# assigning a xalan namespace. For example:
+#
+#
+# ...
+# Note that the colon after the protocol needs to be escaped.
+{http\u003a//xml.apache.org/xalan}indent-amount=0
+{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToXMLStream
+{http\u003a//xml.apache.org/xalan}entities=org/apache/xml/serializer/XMLEntities
+
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/AttList.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/AttList.class
new file mode 100644
index 00000000..3550ca26
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/AttList.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/BoolStack.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/BoolStack.class
new file mode 100644
index 00000000..8a28d6e3
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/BoolStack.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/DOM2Helper.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/DOM2Helper.class
new file mode 100644
index 00000000..1ffce586
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/DOM2Helper.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Messages.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Messages.class
new file mode 100644
index 00000000..fdc4eebe
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Messages.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/MsgKey.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/MsgKey.class
new file mode 100644
index 00000000..d2a2a5ad
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/MsgKey.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages.class
new file mode 100644
index 00000000..cc7495ba
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ca.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ca.class
new file mode 100644
index 00000000..88bb8955
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ca.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_cs.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_cs.class
new file mode 100644
index 00000000..6e4e23f4
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_cs.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_de.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_de.class
new file mode 100644
index 00000000..43819fb8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_de.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_en.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_en.class
new file mode 100644
index 00000000..bd90b6e0
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_en.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_es.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_es.class
new file mode 100644
index 00000000..b4101272
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_es.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_fr.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_fr.class
new file mode 100644
index 00000000..1d7359cf
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_fr.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_hu.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_hu.class
new file mode 100644
index 00000000..7d4fd552
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_hu.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_it.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_it.class
new file mode 100644
index 00000000..4f991273
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_it.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ja.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ja.class
new file mode 100644
index 00000000..41aff459
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ja.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ko.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ko.class
new file mode 100644
index 00000000..980d6fe5
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ko.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pl.class
new file mode 100644
index 00000000..14c0d7d9
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.class
new file mode 100644
index 00000000..20777faa
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ru.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ru.class
new file mode 100644
index 00000000..72af220d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_ru.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sk.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sk.class
new file mode 100644
index 00000000..d6119081
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sk.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sl.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sl.class
new file mode 100644
index 00000000..3c93b5fe
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sl.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sv.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sv.class
new file mode 100644
index 00000000..68447c77
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_sv.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_tr.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_tr.class
new file mode 100644
index 00000000..bf50621b
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_tr.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh.class
new file mode 100644
index 00000000..5a015b64
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.class
new file mode 100644
index 00000000..f9b35f0d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.class
new file mode 100644
index 00000000..7ff29908
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/StringToIntTable.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/StringToIntTable.class
new file mode 100644
index 00000000..ef334214
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/StringToIntTable.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SystemIDResolver.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SystemIDResolver.class
new file mode 100644
index 00000000..7c7dd46d
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/SystemIDResolver.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI$MalformedURIException.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI$MalformedURIException.class
new file mode 100644
index 00000000..00b3d97b
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI$MalformedURIException.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI.class
new file mode 100644
index 00000000..bb493f99
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/URI.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Utils.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Utils.class
new file mode 100644
index 00000000..44274155
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/Utils.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/WrappedRuntimeException.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/WrappedRuntimeException.class
new file mode 100644
index 00000000..7999d45e
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/WrappedRuntimeException.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XML11Char.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XML11Char.class
new file mode 100644
index 00000000..86b81747
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XML11Char.class differ
diff --git a/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XMLChar.class b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XMLChar.class
new file mode 100644
index 00000000..0cad44f8
Binary files /dev/null and b/3rdParty/org.apache.xml.serializer/org/apache/xml/serializer/utils/XMLChar.class differ
diff --git a/3rdParty/org.apache.xml.serializer/pom.xml b/3rdParty/org.apache.xml.serializer/pom.xml
new file mode 100644
index 00000000..9d8078bf
--- /dev/null
+++ b/3rdParty/org.apache.xml.serializer/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.0.5-SNAPSHOT
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.apache.xml.serializer
+ 2.7.1
+
+ KDM Analytics Apache Xerces-J Serilizer Plugin
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.openrdf.sesame/.classpath b/3rdParty/org.openrdf.sesame/.classpath
new file mode 100644
index 00000000..69a2cdc7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/.project b/3rdParty/org.openrdf.sesame/.project
new file mode 100644
index 00000000..359014b4
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/.project
@@ -0,0 +1,28 @@
+
+
+ org.openrdf.sesame
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.openrdf.sesame/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.openrdf.sesame/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/org.openrdf.sesame/META-INF/MANIFEST.MF b/3rdParty/org.openrdf.sesame/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..b4919c8f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/MANIFEST.MF
@@ -0,0 +1,129 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Open RDF Sesame
+Bundle-SymbolicName: org.openrdf.sesame
+Bundle-Version: 2.4.2
+Bundle-ClassPath: openrdf-sesame-2.4.2-onejar.jar
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: info.aduna.collections,
+ info.aduna.collections.iterators,
+ info.aduna.concurrent,
+ info.aduna.concurrent.locks,
+ info.aduna.i18n.languagetag,
+ info.aduna.io,
+ info.aduna.iteration,
+ info.aduna.lang,
+ info.aduna.lang.reflect,
+ info.aduna.lang.service,
+ info.aduna.net,
+ info.aduna.net.http,
+ info.aduna.platform,
+ info.aduna.platform.support,
+ info.aduna.text,
+ info.aduna.webapp.filters,
+ info.aduna.webapp.util,
+ info.aduna.xml,
+ org.openrdf,
+ org.openrdf.console,
+ org.openrdf.http.client,
+ org.openrdf.http.protocol,
+ org.openrdf.http.protocol.error,
+ org.openrdf.http.protocol.transaction,
+ org.openrdf.http.protocol.transaction.operations,
+ org.openrdf.http.server,
+ org.openrdf.http.server.protocol,
+ org.openrdf.http.server.repository,
+ org.openrdf.http.server.repository.contexts,
+ org.openrdf.http.server.repository.namespaces,
+ org.openrdf.http.server.repository.size,
+ org.openrdf.http.server.repository.statements,
+ org.openrdf.model,
+ org.openrdf.model.datatypes,
+ org.openrdf.model.impl,
+ org.openrdf.model.util,
+ org.openrdf.model.vocabulary,
+ org.openrdf.query,
+ org.openrdf.query.algebra,
+ org.openrdf.query.algebra.evaluation,
+ org.openrdf.query.algebra.evaluation.function,
+ org.openrdf.query.algebra.evaluation.impl,
+ org.openrdf.query.algebra.evaluation.iterator,
+ org.openrdf.query.algebra.evaluation.util,
+ org.openrdf.query.algebra.helpers,
+ org.openrdf.query.dawg,
+ org.openrdf.query.impl,
+ org.openrdf.query.parser,
+ org.openrdf.query.parser.serql,
+ org.openrdf.query.parser.serql.ast,
+ org.openrdf.query.parser.sparql,
+ org.openrdf.query.parser.sparql.ast,
+ org.openrdf.query.resultio,
+ org.openrdf.query.resultio.binary,
+ org.openrdf.query.resultio.sparqljson,
+ org.openrdf.query.resultio.sparqlxml,
+ org.openrdf.query.resultio.text,
+ org.openrdf.repository,
+ org.openrdf.repository.base,
+ org.openrdf.repository.config,
+ org.openrdf.repository.contextaware,
+ org.openrdf.repository.contextaware.config,
+ org.openrdf.repository.dataset,
+ org.openrdf.repository.dataset.config,
+ org.openrdf.repository.event,
+ org.openrdf.repository.event.base,
+ org.openrdf.repository.event.util,
+ org.openrdf.repository.http,
+ org.openrdf.repository.http.config,
+ org.openrdf.repository.manager,
+ org.openrdf.repository.manager.util,
+ org.openrdf.repository.sail,
+ org.openrdf.repository.sail.config,
+ org.openrdf.repository.util,
+ org.openrdf.rio,
+ org.openrdf.rio.helpers,
+ org.openrdf.rio.n3,
+ org.openrdf.rio.ntriples,
+ org.openrdf.rio.rdfxml,
+ org.openrdf.rio.rdfxml.util,
+ org.openrdf.rio.trig,
+ org.openrdf.rio.trix,
+ org.openrdf.rio.turtle,
+ org.openrdf.sail,
+ org.openrdf.sail.config,
+ org.openrdf.sail.helpers,
+ org.openrdf.sail.inferencer,
+ org.openrdf.sail.inferencer.fc,
+ org.openrdf.sail.inferencer.fc.config,
+ org.openrdf.sail.memory,
+ org.openrdf.sail.memory.config,
+ org.openrdf.sail.memory.model,
+ org.openrdf.sail.nativerdf,
+ org.openrdf.sail.nativerdf.btree,
+ org.openrdf.sail.nativerdf.config,
+ org.openrdf.sail.nativerdf.datastore,
+ org.openrdf.sail.nativerdf.model,
+ org.openrdf.sail.rdbms,
+ org.openrdf.sail.rdbms.algebra,
+ org.openrdf.sail.rdbms.algebra.base,
+ org.openrdf.sail.rdbms.algebra.factories,
+ org.openrdf.sail.rdbms.config,
+ org.openrdf.sail.rdbms.evaluation,
+ org.openrdf.sail.rdbms.exceptions,
+ org.openrdf.sail.rdbms.iteration,
+ org.openrdf.sail.rdbms.iteration.base,
+ org.openrdf.sail.rdbms.managers,
+ org.openrdf.sail.rdbms.managers.base,
+ org.openrdf.sail.rdbms.managers.helpers,
+ org.openrdf.sail.rdbms.model,
+ org.openrdf.sail.rdbms.mysql,
+ org.openrdf.sail.rdbms.optimizers,
+ org.openrdf.sail.rdbms.postgresql,
+ org.openrdf.sail.rdbms.schema,
+ org.openrdf.sail.rdbms.util
+Require-Bundle: org.slf4j.api;bundle-version="1.7.5";visibility:=reexport,
+ org.slf4j.log4j;bundle-version="1.7.5";visibility:=reexport
+Created-By: Apache Maven
+Archiver-Version: Plexus Archiver
+Built-By: jenkins
+Build-Jdk: 1.7.0_25
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.properties
new file mode 100644
index 00000000..eee4a1b7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:09:25 EDT 2013
+version=2.4.2
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.openrdf.sesame
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.xml
new file mode 100644
index 00000000..72180864
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.openrdf.sesame/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.openrdf.sesame
+ 2.4.2
+
+ OpenRDF Sesame Library
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.properties
new file mode 100644
index 00000000..8c0f223d
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 10:40:43 CET 2010
+version=2.7.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-collections
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.xml
new file mode 100644
index 00000000..10d74fd0
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-collections/pom.xml
@@ -0,0 +1,69 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-collections
+ 2.7.0
+
+ Aduna Commons: Collections
+ Extensions to the Java Collections Framework.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+ 2.6.0
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.collections,info.aduna.collections.iterators
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/collections/tags/2.7.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/collections/tags/2.7.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/collections/branches/2.7?repname=aduna&path=/info.aduna/commons/collections/tags/2.7.0?repname=aduna&path=/info.aduna/commons/collections/branches/2.7?repname=aduna&path=/info.aduna/commons/collections/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.properties
new file mode 100644
index 00000000..cecbd41b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 10:37:09 CET 2010
+version=2.6.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-concurrent
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.xml
new file mode 100644
index 00000000..7d0091f9
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-concurrent/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-concurrent
+ 2.6.0
+
+ Aduna Commons: Concurrent
+ Extensions to the Java Concurrency package
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.concurrent,info.aduna.concurrent.locks
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/concurrent/tags/2.6.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/concurrent/tags/2.6.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/concurrent/branches/2.6?repname=aduna&path=/info.aduna/commons/concurrent/tags/2.6.0?repname=aduna&path=/info.aduna/commons/concurrent/branches/2.6?repname=aduna&path=/info.aduna/commons/concurrent/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.properties
new file mode 100644
index 00000000..de81b14e
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:36:20 CET 2010
+version=1.3.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-i18n
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.xml
new file mode 100644
index 00000000..6b5d1737
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-i18n/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-i18n
+ 1.3.0
+
+ Aduna Commons: i18n
+ Internationalization and localization utilities.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ junit
+ junit
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.i18n.languagetag
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/i18n/tags/1.3.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/i18n/tags/1.3.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/i18n/branches/1.3?repname=aduna&path=/info.aduna/commons/i18n/tags/1.3.0?repname=aduna&path=/info.aduna/commons/i18n/branches/1.3?repname=aduna&path=/info.aduna/commons/i18n/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.properties
new file mode 100644
index 00000000..99f223f7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:39:26 CET 2010
+version=2.8.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-io
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.xml
new file mode 100644
index 00000000..27df7c6c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-io/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-io
+ 2.8.0
+
+ Aduna Commons: IO
+ Extensions to the Java IO functionality.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.io
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/io/tags/2.8.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/io/tags/2.8.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/io/branches/2.8?repname=aduna&path=/info.aduna/commons/io/tags/2.8.0?repname=aduna&path=/info.aduna/commons/io/branches/2.8?repname=aduna&path=/info.aduna/commons/io/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.properties
new file mode 100644
index 00000000..f3f3568e
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:42:51 CET 2010
+version=2.7.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-iteration
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.xml
new file mode 100644
index 00000000..62e41985
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-iteration/pom.xml
@@ -0,0 +1,86 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-iteration
+ 2.7.0
+
+ Aduna Commons: Iteration
+ Iterations and iterators for various purposes.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+ 2.6.0
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ org.slf4j
+ slf4j-simple
+ test
+ true
+
+
+
+ junit
+ junit
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.iteration
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/iteration/tags/2.7.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/iteration/tags/2.7.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/iteration/branches/2.7?repname=aduna&path=/info.aduna/commons/iteration/tags/2.7.0?repname=aduna&path=/info.aduna/commons/iteration/branches/2.7?repname=aduna&path=/info.aduna/commons/iteration/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.properties
new file mode 100644
index 00000000..8fcf9d31
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:44:53 CET 2010
+version=2.8.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-lang
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.xml
new file mode 100644
index 00000000..55cfe180
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-lang/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-lang
+ 2.8.0
+
+ Aduna Commons: Lang
+ Extensions to the Java lang package.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.lang,info.aduna.lang.reflect,info.aduna.lang.service
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/lang/tags/2.8.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/lang/tags/2.8.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/lang/branches/2.8?repname=aduna&path=/info.aduna/commons/lang/tags/2.8.0?repname=aduna&path=/info.aduna/commons/lang/branches/2.8?repname=aduna&path=/info.aduna/commons/lang/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.properties
new file mode 100644
index 00000000..a0f2c1fa
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:52:22 CET 2010
+version=2.6.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-net
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.xml
new file mode 100644
index 00000000..da461771
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-net/pom.xml
@@ -0,0 +1,69 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-net
+ 2.6.0
+
+ Aduna Commons: Net
+ Extensions to the Java networking functionality.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ info.aduna.commons
+ aduna-commons-text
+ 2.6.0
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.net,info.aduna.net.http
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/net/tags/2.6.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/net/tags/2.6.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/net/branches/2.6?repname=aduna&path=/info.aduna/commons/net/tags/2.6.0?repname=aduna&path=/info.aduna/commons/net/branches/2.6?repname=aduna&path=/info.aduna/commons/net/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.properties
new file mode 100644
index 00000000..c1370539
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 13:27:44 CET 2010
+version=2.8.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-platform-info
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.xml
new file mode 100644
index 00000000..fc78afe1
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-platform-info/pom.xml
@@ -0,0 +1,60 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons-platform
+ 2.8.0
+
+
+ aduna-commons-platform-info
+
+ Aduna Commons: Platform - Info
+ Platform information functionality.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.platform,info.aduna.platform.support
+
+
+
+
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.properties
new file mode 100644
index 00000000..ca76102c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 11:49:27 CET 2010
+version=2.6.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-text
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.xml
new file mode 100644
index 00000000..ed523774
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-text/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-text
+ 2.6.0
+
+ Aduna Commons: Text
+ Manipulate/transform/parse text in various ways.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.text
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/text/tags/2.6.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/text/tags/2.6.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/text/branches/2.6?repname=aduna&path=/info.aduna/commons/text/tags/2.6.0?repname=aduna&path=/info.aduna/commons/text/branches/2.6?repname=aduna&path=/info.aduna/commons/text/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.properties
new file mode 100644
index 00000000..3cc74d80
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 13:33:42 CET 2010
+version=2.8.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-webapp-core
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.xml
new file mode 100644
index 00000000..3a71a4ed
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-webapp-core/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons-webapp
+ 2.8.0
+
+
+ aduna-commons-webapp-core
+
+ Aduna Commons: Webapp - Core
+ Core webapp functionality.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+ info.aduna.commons
+ aduna-commons-net
+
+
+
+ javax.servlet
+ servlet-api
+
+
+ javax.activation
+ activation
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.webapp.*
+
+
+
+
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.properties
new file mode 100644
index 00000000..73c59891
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.properties
@@ -0,0 +1,5 @@
+#Generated by org.apache.felix.bundleplugin
+#Fri Jan 29 12:45:01 CET 2010
+version=2.6.0
+groupId=info.aduna.commons
+artifactId=aduna-commons-xml
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.xml
new file mode 100644
index 00000000..3444942a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/info.aduna.commons/aduna-commons-xml/pom.xml
@@ -0,0 +1,74 @@
+
+
+ 4.0.0
+
+
+ info.aduna.commons
+ aduna-commons
+ 16
+ ../../pom.xml
+
+
+ aduna-commons-xml
+ 2.6.0
+
+ Aduna Commons: XML
+ Extensions to the Java XML functionality.
+
+
+ Aduna
+ http://www.aduna-software.com/
+
+
+
+
+ Aduna BSD license
+ http://repo.aduna-software.org/legal/aduna-bsd.txt
+ repo
+ A BSD-style OSS license
+
+
+
+
+
+ info.aduna.commons
+ aduna-commons-text
+ 2.6.0
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ info.aduna.xml
+
+
+
+
+
+
+
+ scm:svn:http://repo.aduna-software.org/svn/info.aduna/commons/xml/tags/2.6.0
+ scm:svn:https://repo.aduna-software.org/svn/info.aduna/commons/xml/tags/2.6.0
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/info.aduna/commons/xml/branches/2.6?repname=aduna&path=/info.aduna/commons/xml/tags/2.6.0?repname=aduna&path=/info.aduna/commons/xml/branches/2.6?repname=aduna&path=/info.aduna/commons/xml/trunk/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.properties
new file mode 100644
index 00000000..8d7dae99
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:39 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-console
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.xml
new file mode 100644
index 00000000..d5e8b133
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-console/pom.xml
@@ -0,0 +1,98 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-core
+ 2.3.1
+
+
+ sesame-console
+
+ OpenRDF Sesame: Console
+ Command line user interface to Sesame repositories.
+
+
+
+ org.openrdf.sesame
+ sesame-runtime
+
+
+
+ org.openrdf.sesame
+ sesame-queryparser-serql
+
+
+ org.openrdf.sesame
+ sesame-queryparser-sparql
+
+
+ org.openrdf.sesame
+ sesame-rio-ntriples
+
+
+
+ info.aduna.appbase
+ aduna-appbase-core
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+ commons-cli
+ commons-cli
+
+
+
+ org.slf4j
+ slf4j-jdk14
+ runtime
+ true
+
+
+ org.slf4j
+ jcl-over-slf4j
+ runtime
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ org.openrdf.console.Console
+ org.openrdf.console
+ true
+
+
+
+
+
+
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/console
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/console
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/console?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/console/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.properties
new file mode 100644
index 00000000..54b40900
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:08 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-http-client
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.xml
new file mode 100644
index 00000000..279aa34a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-client/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-http
+ 2.3.1
+
+
+ sesame-http-client
+
+ OpenRDF Sesame: HTTP client
+ Client functionality for communicating with an OpenRDF server over HTTP.
+
+
+
+ org.openrdf.sesame
+ sesame-http-protocol
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-net
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ commons-httpclient
+ commons-httpclient
+
+
+
+ commons-codec
+ commons-codec
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/client
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/client
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/http/client?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/http/client/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.properties
new file mode 100644
index 00000000..7433b988
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:06 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-http-protocol
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.xml
new file mode 100644
index 00000000..f09e6866
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-protocol/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-http
+ 2.3.1
+
+
+ sesame-http-protocol
+
+ OpenRDF Sesame: HTTP protocol
+ HTTP protocol (REST-style)
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-rio-ntriples
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+ info.aduna.commons
+ aduna-commons-xml
+
+
+
+ junit
+ junit
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/protocol
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/protocol
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/http/protocol?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/http/protocol/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.properties
new file mode 100644
index 00000000..11fa00c9
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:41 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-http-server-spring
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.xml
new file mode 100644
index 00000000..46feaf7d
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-http-server-spring/pom.xml
@@ -0,0 +1,76 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-http
+ 2.3.1
+
+
+ sesame-http-server-spring
+
+ OpenRDF Sesame: HTTP server - core
+ HTTP server implementing a REST-style protocol
+
+
+
+ org.openrdf.sesame
+ sesame-runtime
+
+
+
+ info.aduna.appbase
+ aduna-appbase-webapp-base-core
+
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-webapp-core
+
+
+
+ javax.servlet
+ servlet-api
+
+
+
+ org.springframework
+ spring-aop
+ runtime
+
+
+ org.springframework
+ spring-webmvc
+
+
+
+ cglib
+ cglib
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/server-spring
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/http/server-spring
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/http/server-spring?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/http/server-spring/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.properties
new file mode 100644
index 00000000..597dd91f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:24 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-model
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.xml
new file mode 100644
index 00000000..fdd1adbe
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-model/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-core
+ 2.3.1
+
+
+ sesame-model
+
+ OpenRDF Sesame: Model
+ RDF model interfaces and implementations.
+
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+ info.aduna.commons
+ aduna-commons-i18n
+
+
+
+ junit
+ junit
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/model
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/model
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/model?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/model/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.properties
new file mode 100644
index 00000000..91cfeea0
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:27 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-query
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.xml
new file mode 100644
index 00000000..4e6a4336
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-query/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-core
+ 2.3.1
+
+
+ sesame-query
+
+ OpenRDF Sesame: Query
+ Query interfaces and implementations
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+
+ junit
+ junit
+
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/query
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/query
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/query?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/query/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.properties
new file mode 100644
index 00000000..ccc88f0d
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:00 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryalgebra-evaluation
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.xml
new file mode 100644
index 00000000..8ec9077f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-evaluation/pom.xml
@@ -0,0 +1,65 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra
+ 2.3.1
+
+
+ sesame-queryalgebra-evaluation
+
+ OpenRDF Sesame: Query algebra - evaluation
+ Evaluation strategy API and implementations for the query algebra model.
+
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+ junit
+ junit
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/evaluation
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/evaluation
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/evaluation?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryalgebra/evaluation/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.properties
new file mode 100644
index 00000000..9aef143a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:30 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryalgebra-model
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.xml
new file mode 100644
index 00000000..a1aaa7a5
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryalgebra-model/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-core
+ 2.3.1
+
+
+ sesame-queryalgebra-model
+
+ OpenRDF Sesame: Query algebra - model
+ A generic query algebra for RDF queries.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/model
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/model
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryalgebra/model?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryalgebra/model/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.properties
new file mode 100644
index 00000000..3bee8843
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:31 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryparser-api
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.xml
new file mode 100644
index 00000000..e9a2cff8
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-api/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryparser
+ 2.3.1
+
+
+ sesame-queryparser-api
+
+ OpenRDF Sesame: Query parser - API
+ Query language parsers API.
+
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/api
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/api
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryparser/api?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryparser/api/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.properties
new file mode 100644
index 00000000..50b9f081
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:33 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryparser-serql
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.xml
new file mode 100644
index 00000000..e598d0d6
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-serql/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryparser
+ 2.3.1
+
+
+ sesame-queryparser-serql
+
+ OpenRDF Sesame: Query parser - SeRQL
+ Query language parser implementation for SeRQL.
+
+
+
+ org.openrdf.sesame
+ sesame-queryparser-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/serql
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/serql
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryparser/serql?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryparser/serql/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.properties
new file mode 100644
index 00000000..576f1d28
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:35 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryparser-sparql
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.xml
new file mode 100644
index 00000000..18b5b8fc
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryparser-sparql/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryparser
+ 2.3.1
+
+
+ sesame-queryparser-sparql
+
+ OpenRDF Sesame: Query parser - SPARQL
+ Query language parser implementation for SPARQL.
+
+
+
+ org.openrdf.sesame
+ sesame-queryparser-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-net
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/sparql
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryparser/sparql
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryparser/sparql?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryparser/sparql/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.properties
new file mode 100644
index 00000000..6cea2e9c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:37 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryresultio-api
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.xml
new file mode 100644
index 00000000..df882a60
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-api/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryresultio
+ 2.3.1
+
+
+ sesame-queryresultio-api
+
+ OpenRDF Sesame: Query result IO - API
+ Query result IO API
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/api
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/api
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryresultio/api?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryresultio/api/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.properties
new file mode 100644
index 00000000..82c2307b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:39 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryresultio-binary
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.xml
new file mode 100644
index 00000000..7836ce06
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-binary/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryresultio
+ 2.3.1
+
+
+ sesame-queryresultio-binary
+
+ OpenRDF Sesame: Query result IO - binary
+ Query result parser and writer implementation for OpenRDF's binary query results format.
+
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ junit
+ junit
+ test
+
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/binary
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/binary
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryresultio/binary?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryresultio/binary/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.properties
new file mode 100644
index 00000000..b3e41697
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:40 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryresultio-sparqljson
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.xml
new file mode 100644
index 00000000..2997822b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqljson/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryresultio
+ 2.3.1
+
+
+ sesame-queryresultio-sparqljson
+
+ OpenRDF Sesame: Query result IO - SPARQL/JSON
+ Query result writer implementation for the SPARQL Query Results JSON Format.
+
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqljson
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqljson
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqljson?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryresultio/sparqljson/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.properties
new file mode 100644
index 00000000..698ad7b0
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:43 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryresultio-sparqlxml
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.xml
new file mode 100644
index 00000000..9eeaf883
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-sparqlxml/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryresultio
+ 2.3.1
+
+
+ sesame-queryresultio-sparqlxml
+
+ OpenRDF Sesame: Query result IO - SPARQL/XML
+ Query result parser and writer implementation for the SPARQL Query Results XML Format.
+
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-xml
+
+
+
+ junit
+ junit
+ test
+
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqlxml
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqlxml
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryresultio/sparqlxml?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryresultio/sparqlxml/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.properties
new file mode 100644
index 00000000..387896a9
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:45 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-queryresultio-text
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.xml
new file mode 100644
index 00000000..d5d02874
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-queryresultio-text/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-queryresultio
+ 2.3.1
+
+
+ sesame-queryresultio-text
+
+ OpenRDF Sesame: Query result IO - plain text booleans
+ Query result parser and writer implementation for OpenRDF's plain text boolean query results format.
+
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ junit
+ junit
+ test
+
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/text
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/queryresultio/text
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/queryresultio/text?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/queryresultio/text/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.properties
new file mode 100644
index 00000000..8e52fca3
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:47 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-api
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.xml
new file mode 100644
index 00000000..2b321289
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-api/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-api
+
+ OpenRDF Sesame: Repository - API
+ API for interacting with repositories of RDF data.
+
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/api
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/api
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/api?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/api/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.properties
new file mode 100644
index 00000000..3f1ac9e0
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:14 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-contextaware
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.xml
new file mode 100644
index 00000000..909f1f1e
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-contextaware/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-contextaware
+
+ OpenRDF Sesame: Repository - context aware (wrapper)
+ Implementation that allows default values to be set on a wrapped repository
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+
+ junit
+ junit
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/contextaware
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/contextaware
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/contextaware?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/contextaware/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.properties
new file mode 100644
index 00000000..02e9a5d7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:12 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-dataset
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.xml
new file mode 100644
index 00000000..4ee25a75
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-dataset/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-dataset
+
+ OpenRDF Sesame: DatasetRepository (wrapper)
+ Implementation that loads all referenced datasets into a wrapped repository
+
+
+
+ org.openrdf.sesame
+ sesame-repository-sail
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/dataset
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/dataset
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/dataset?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/dataset/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.properties
new file mode 100644
index 00000000..62f27979
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:48 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-event
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.xml
new file mode 100644
index 00000000..d3da08b3
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-event/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-event
+
+ OpenRDF Sesame: Repository - event (wrapper)
+ Implementation that notifies listeners of events on a wrapped repository
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/event
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/event
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/event?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/event/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.properties
new file mode 100644
index 00000000..55ceabd1
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:09 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-http
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.xml
new file mode 100644
index 00000000..ba22af42
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-http/pom.xml
@@ -0,0 +1,63 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-http
+
+ OpenRDF Sesame: HTTPRepository
+ "Virtual" repository that communicates with a (remote) repository over the HTTP protocol.
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-http-client
+
+
+ org.openrdf.sesame
+ sesame-http-protocol
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/http
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/http
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/http?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/http/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.properties
new file mode 100644
index 00000000..7258557a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:10 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-manager
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.xml
new file mode 100644
index 00000000..966753b0
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-manager/pom.xml
@@ -0,0 +1,75 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-manager
+
+ OpenRDF Sesame: Repository manager
+ Repository manager
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-repository-event
+
+
+ org.openrdf.sesame
+ sesame-repository-sail
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-sail-memory
+
+
+ org.openrdf.sesame
+ sesame-repository-http
+
+
+ org.openrdf.sesame
+ sesame-http-client
+
+
+ org.openrdf.sesame
+ sesame-http-protocol
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/manager
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/manager
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/manager?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/manager/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.properties
new file mode 100644
index 00000000..9915f693
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:51 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-repository-sail
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.xml
new file mode 100644
index 00000000..53b42656
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-repository-sail/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-repository
+ 2.3.1
+
+
+ sesame-repository-sail
+
+ OpenRDF Sesame: SailRepository
+ Repository that uses a Sail stack.
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-queryparser-api
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/sail
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/repository/sail
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/repository/sail?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/repository/sail/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.properties
new file mode 100644
index 00000000..e15faee3
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:25 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-api
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.xml
new file mode 100644
index 00000000..ce54c27c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-api/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-api
+
+ OpenRDF Sesame: Rio - API
+ Rio API.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+ info.aduna.commons
+ aduna-commons-net
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/api
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/api
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/api?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/api/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.properties
new file mode 100644
index 00000000..0215c223
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:16 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-n3
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.xml
new file mode 100644
index 00000000..496ad861
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-n3/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-n3
+
+ OpenRDF Sesame: Rio - N3 (writer-only)
+ Rio writer implementation for the N3 file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-turtle
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/n3
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/n3
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/n3?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/n3/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.properties
new file mode 100644
index 00000000..a3c7e68c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:04 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-ntriples
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.xml
new file mode 100644
index 00000000..7c7b8a1b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-ntriples/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-ntriples
+
+ OpenRDF Sesame: Rio - N-Triples
+ Rio parser and writer implementation for the N-Triples file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/ntriples
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/ntriples
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/ntriples?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/ntriples/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.properties
new file mode 100644
index 00000000..fe3d0e3f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:18 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-rdfxml
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.xml
new file mode 100644
index 00000000..3f998800
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-rdfxml/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-rdfxml
+
+ OpenRDF Sesame: Rio - RDF/XML
+ Rio parser and writer implementation for the RDF/XML file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+ info.aduna.commons
+ aduna-commons-net
+
+
+ info.aduna.commons
+ aduna-commons-xml
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/rdfxml
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/rdfxml
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/rdfxml?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/rdfxml/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.properties
new file mode 100644
index 00000000..4e6a609a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:20 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-trig
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.xml
new file mode 100644
index 00000000..6a7ec39b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trig/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-trig
+
+ OpenRDF Sesame: Rio - TriG
+ Rio parser and writer implementation for the TriG file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-turtle
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/trig
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/trig
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/trig?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/trig/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.properties
new file mode 100644
index 00000000..1bdfb6c7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:19 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-trix
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.xml
new file mode 100644
index 00000000..4cf42e08
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-trix/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-trix
+
+ OpenRDF Sesame: Rio - TriX
+ Rio parser and writer implementation for the TriX file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+ info.aduna.commons
+ aduna-commons-xml
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/trix
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/trix
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/trix?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/trix/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.properties
new file mode 100644
index 00000000..88903e4c
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:15 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-rio-turtle
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.xml
new file mode 100644
index 00000000..196e7300
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-rio
+ 2.3.1
+
+
+ sesame-rio-turtle
+
+ OpenRDF Sesame: Rio - Turtle
+ Rio parser and writer implementation for the Turtle file format.
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/turtle
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/rio/turtle
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/rio/turtle?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/rio/turtle/
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.properties
new file mode 100644
index 00000000..11901c0d
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:37 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-runtime
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.xml
new file mode 100644
index 00000000..96704ae2
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-runtime/pom.xml
@@ -0,0 +1,182 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-core
+ 2.3.1
+
+
+ sesame-runtime
+
+ OpenRDF Sesame: Runtime
+ Runtime dependencies for an OpenRDF application
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+
+ org.openrdf.sesame
+ sesame-queryparser-api
+
+
+ org.openrdf.sesame
+ sesame-queryparser-serql
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-queryparser-sparql
+ runtime
+
+
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-api
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-binary
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-sparqljson
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-sparqlxml
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-queryresultio-text
+ runtime
+
+
+
+ org.openrdf.sesame
+ sesame-repository-api
+
+
+ org.openrdf.sesame
+ sesame-repository-manager
+
+
+ org.openrdf.sesame
+ sesame-repository-http
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-repository-sail
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-repository-dataset
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-repository-contextaware
+
+
+
+ org.openrdf.sesame
+ sesame-http-protocol
+
+
+ org.openrdf.sesame
+ sesame-http-client
+ runtime
+
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-rio-ntriples
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-n3
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-rdfxml
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-trix
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-turtle
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-trig
+ runtime
+
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-sail-inferencer
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-sail-memory
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-sail-nativerdf
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-sail-rdbms
+ runtime
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/runtime
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/runtime
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/runtime?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/runtime/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.properties
new file mode 100644
index 00000000..540f1981
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:49 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-sail-api
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.xml
new file mode 100644
index 00000000..8a7b86c1
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-api/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-sail
+ 2.3.1
+
+
+ sesame-sail-api
+
+ OpenRDF Sesame: Sail API
+ RDF Storage And Inference Layer ("Sail") API.
+
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/api
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/api
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/sail/api?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/sail/api/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.properties
new file mode 100644
index 00000000..0e4e1dd3
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:27:52 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-sail-inferencer
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.xml
new file mode 100644
index 00000000..7a3560ff
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-inferencer/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-sail
+ 2.3.1
+
+
+ sesame-sail-inferencer
+
+ OpenRDF Sesame: Inferencer Sails
+ Stackable Sail implementation that adds RDF Schema inferencing to an RDF store.
+
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-queryparser-api
+
+
+ org.openrdf.sesame
+ sesame-queryparser-serql
+ runtime
+
+
+ org.openrdf.sesame
+ sesame-rio-api
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-text
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/inferencer
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/inferencer
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/sail/inferencer?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/sail/inferencer/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.properties
new file mode 100644
index 00000000..d089641e
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:03 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-sail-memory
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.xml
new file mode 100644
index 00000000..dda54720
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-memory/pom.xml
@@ -0,0 +1,76 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-sail
+ 2.3.1
+
+
+ sesame-sail-memory
+
+ OpenRDF Sesame: MemoryStore
+ Sail implementation that stores data in main memory, optionally using a dump-restore file for persistence.
+
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-sail-inferencer
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-evaluation
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-lang
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ junit
+ junit
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/memory
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/memory
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/sail/memory?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/sail/memory/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.properties
new file mode 100644
index 00000000..c79887c7
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:23 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-sail-nativerdf
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.xml
new file mode 100644
index 00000000..78bee3d8
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-nativerdf/pom.xml
@@ -0,0 +1,78 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-sail
+ 2.3.1
+
+
+ sesame-sail-nativerdf
+
+ OpenRDF Sesame: NativeStore
+ Sail implementation that stores data directly to disk in dedicated file formats.
+
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+ org.openrdf.sesame
+ sesame-sail-inferencer
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-evaluation
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-io
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ ch.qos.logback
+ logback-classic
+ test
+
+
+
+ junit
+ junit
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/nativerdf
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/nativerdf
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/sail/nativerdf?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/sail/nativerdf/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.properties b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.properties
new file mode 100644
index 00000000..e0eab3e5
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Fri Jan 29 20:28:36 CET 2010
+version=2.3.1
+groupId=org.openrdf.sesame
+artifactId=sesame-sail-rdbms
diff --git a/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.xml b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.xml
new file mode 100644
index 00000000..e9b1103a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/maven/org.openrdf.sesame/sesame-sail-rdbms/pom.xml
@@ -0,0 +1,87 @@
+
+
+ 4.0.0
+
+
+ org.openrdf.sesame
+ sesame-sail
+ 2.3.1
+
+
+ sesame-sail-rdbms
+
+ OpenRDF Sesame: RDBMS Sail
+ Sail implementation that stores data in a relational database.
+
+
+
+ org.openrdf.sesame
+ sesame-sail-api
+
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-evaluation
+
+
+ org.openrdf.sesame
+ sesame-queryalgebra-model
+
+
+ org.openrdf.sesame
+ sesame-query
+
+
+
+ org.openrdf.sesame
+ sesame-model
+
+
+
+ info.aduna.commons
+ aduna-commons-collections
+
+
+ info.aduna.commons
+ aduna-commons-iteration
+
+
+ info.aduna.commons
+ aduna-commons-concurrent
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-dbcp
+ commons-dbcp
+
+
+
+ junit
+ junit
+
+
+
+ postgresql
+ postgresql
+ provided
+
+
+
+ mysql
+ mysql-connector-java
+ provided
+
+
+
+
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/rdbms
+ scm:svn:https://repo.aduna-software.org/svn/org.openrdf/sesame/tags/2.3.1/core/sail/rdbms
+ http://repo.aduna-software.org/websvn/listing.php?repname=aduna&path=/org.openrdf/sesame/tags/2.3.1/core/sail/rdbms?repname=aduna&path=/org.openrdf/sesame/branches/2.3/core/sail/rdbms/
+
+
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
new file mode 100644
index 00000000..4a2d12fe
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
@@ -0,0 +1,7 @@
+org.openrdf.query.algebra.evaluation.function.StringCast
+org.openrdf.query.algebra.evaluation.function.FloatCast
+org.openrdf.query.algebra.evaluation.function.DoubleCast
+org.openrdf.query.algebra.evaluation.function.DecimalCast
+org.openrdf.query.algebra.evaluation.function.IntegerCast
+org.openrdf.query.algebra.evaluation.function.BooleanCast
+org.openrdf.query.algebra.evaluation.function.DateTimeCast
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.parser.QueryParserFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.parser.QueryParserFactory
new file mode 100644
index 00000000..67ded36b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.parser.QueryParserFactory
@@ -0,0 +1,4 @@
+org.openrdf.query.parser.serql.SeRQLParserFactory
+
+org.openrdf.query.parser.sparql.SPARQLParserFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultParserFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultParserFactory
new file mode 100644
index 00000000..1f93cac9
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultParserFactory
@@ -0,0 +1,4 @@
+org.openrdf.query.resultio.sparqlxml.SPARQLBooleanXMLParserFactory
+
+org.openrdf.query.resultio.text.BooleanTextParserFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultWriterFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultWriterFactory
new file mode 100644
index 00000000..dd8f0f81
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.BooleanQueryResultWriterFactory
@@ -0,0 +1,4 @@
+org.openrdf.query.resultio.sparqlxml.SPARQLBooleanXMLWriterFactory
+
+org.openrdf.query.resultio.text.BooleanTextWriterFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultParserFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultParserFactory
new file mode 100644
index 00000000..88e3db1f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultParserFactory
@@ -0,0 +1,4 @@
+org.openrdf.query.resultio.binary.BinaryQueryResultParserFactory
+
+org.openrdf.query.resultio.sparqlxml.SPARQLResultsXMLParserFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultWriterFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultWriterFactory
new file mode 100644
index 00000000..275d6a3f
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.query.resultio.TupleQueryResultWriterFactory
@@ -0,0 +1,6 @@
+org.openrdf.query.resultio.binary.BinaryQueryResultWriterFactory
+
+org.openrdf.query.resultio.sparqljson.SPARQLResultsJSONWriterFactory
+
+org.openrdf.query.resultio.sparqlxml.SPARQLResultsXMLWriterFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.repository.config.RepositoryFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.repository.config.RepositoryFactory
new file mode 100644
index 00000000..c1960dba
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.repository.config.RepositoryFactory
@@ -0,0 +1,8 @@
+org.openrdf.repository.contextaware.config.ContextAwareFactory
+
+org.openrdf.repository.dataset.config.DatasetRepositoryFactory
+
+org.openrdf.repository.http.config.HTTPRepositoryFactory
+
+org.openrdf.repository.sail.config.SailRepositoryFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFParserFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFParserFactory
new file mode 100644
index 00000000..a06f472a
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFParserFactory
@@ -0,0 +1,12 @@
+org.openrdf.rio.n3.N3ParserFactory
+
+org.openrdf.rio.ntriples.NTriplesParserFactory
+
+org.openrdf.rio.rdfxml.RDFXMLParserFactory
+
+org.openrdf.rio.trig.TriGParserFactory
+
+org.openrdf.rio.trix.TriXParserFactory
+
+org.openrdf.rio.turtle.TurtleParserFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFWriterFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFWriterFactory
new file mode 100644
index 00000000..d1aa3037
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.rio.RDFWriterFactory
@@ -0,0 +1,12 @@
+org.openrdf.rio.n3.N3WriterFactory
+
+org.openrdf.rio.ntriples.NTriplesWriterFactory
+
+org.openrdf.rio.rdfxml.RDFXMLWriterFactory
+
+org.openrdf.rio.trig.TriGWriterFactory
+
+org.openrdf.rio.trix.TriXWriterFactory
+
+org.openrdf.rio.turtle.TurtleWriterFactory
+
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.config.SailFactory b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.config.SailFactory
new file mode 100644
index 00000000..6ea91f3b
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.config.SailFactory
@@ -0,0 +1,6 @@
+org.openrdf.sail.inferencer.fc.config.ForwardChainingRDFSInferencerFactory
+org.openrdf.sail.inferencer.fc.config.DirectTypeHierarchyInferencerFactory
+org.openrdf.sail.memory.config.MemoryStoreFactory
+org.openrdf.sail.nativerdf.config.NativeStoreFactory
+
+org.openrdf.sail.rdbms.config.RdbmsStoreFactory
diff --git a/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.rdbms.RdbmsProvider b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.rdbms.RdbmsProvider
new file mode 100644
index 00000000..107174dc
--- /dev/null
+++ b/3rdParty/org.openrdf.sesame/META-INF/services/org.openrdf.sail.rdbms.RdbmsProvider
@@ -0,0 +1,2 @@
+org.openrdf.sail.rdbms.postgresql.PgSqlProvider
+org.openrdf.sail.rdbms.mysql.MySqlProvider
\ No newline at end of file
diff --git a/3rdParty/org.openrdf.sesame/openrdf-sesame-2.4.2-onejar.jar b/3rdParty/org.openrdf.sesame/openrdf-sesame-2.4.2-onejar.jar
new file mode 100644
index 00000000..324bf93b
Binary files /dev/null and b/3rdParty/org.openrdf.sesame/openrdf-sesame-2.4.2-onejar.jar differ
diff --git a/3rdParty/org.openrdf.sesame/org.openrdf.sesame_2.4.2.jar b/3rdParty/org.openrdf.sesame/org.openrdf.sesame_2.4.2.jar
new file mode 100644
index 00000000..edff902d
Binary files /dev/null and b/3rdParty/org.openrdf.sesame/org.openrdf.sesame_2.4.2.jar differ
diff --git a/3rdParty/org.slf4j.api/.classpath b/3rdParty/org.slf4j.api/.classpath
new file mode 100644
index 00000000..9d73ca56
--- /dev/null
+++ b/3rdParty/org.slf4j.api/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.slf4j.api/.project b/3rdParty/org.slf4j.api/.project
new file mode 100644
index 00000000..aa907905
--- /dev/null
+++ b/3rdParty/org.slf4j.api/.project
@@ -0,0 +1,28 @@
+
+
+ org.slf4j.api
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.slf4j.api/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.slf4j.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/org.slf4j.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/org.slf4j.api/META-INF/MANIFEST.MF b/3rdParty/org.slf4j.api/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..acecf2b3
--- /dev/null
+++ b/3rdParty/org.slf4j.api/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: SlF4J Api
+Bundle-SymbolicName: org.slf4j.api
+Bundle-Version: 1.7.5
+Bundle-ClassPath: org.slf4j.api_1.7.5.jar
+Bundle-Vendor: KDM Analytics
+Export-Package: org.slf4j,
+ org.slf4j.helpers,
+ org.slf4j.spi
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Created-By: Apache Maven
+Build-Jdk: 1.7.0_25
+Archiver-Version: Plexus Archiver
+Built-By: jenkins
diff --git a/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.properties b/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.properties
new file mode 100644
index 00000000..76e8a858
--- /dev/null
+++ b/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:09:24 EDT 2013
+version=1.7.5
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.slf4j.api
diff --git a/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.xml b/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.xml
new file mode 100644
index 00000000..1e8b0e1d
--- /dev/null
+++ b/3rdParty/org.slf4j.api/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.api/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.slf4j.api
+ 1.7.5
+
+ SLF4j API
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.properties b/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.properties
new file mode 100644
index 00000000..843f637c
--- /dev/null
+++ b/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Mar 25 21:49:23 CET 2013
+version=1.7.5
+groupId=org.slf4j
+artifactId=slf4j-api
diff --git a/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.xml b/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.xml
new file mode 100644
index 00000000..3ea5231a
--- /dev/null
+++ b/3rdParty/org.slf4j.api/META-INF/maven/org.slf4j/slf4j-api/pom.xml
@@ -0,0 +1,89 @@
+
+
+
+ org.slf4j
+ slf4j-parent
+ 1.7.5
+
+
+ 4.0.0
+
+ org.slf4j
+ slf4j-api
+ jar
+ SLF4J API Module
+ The slf4j API
+
+ http://www.slf4j.org
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ once
+ plain
+ false
+
+ **/AllTest.java
+ **/PackageTest.java
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ ${parsedVersion.osgiVersion}
+ ${project.description}
+ ${project.version}
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ bundle-test-jar
+ package
+
+ jar
+ test-jar
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ process-classes
+
+ run
+
+
+
+
+
+ Removing slf4j-api's dummy StaticLoggerBinder and StaticMarkerBinder
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.slf4j.api/org.slf4j.api_1.7.5.jar b/3rdParty/org.slf4j.api/org.slf4j.api_1.7.5.jar
new file mode 100644
index 00000000..ce34617c
Binary files /dev/null and b/3rdParty/org.slf4j.api/org.slf4j.api_1.7.5.jar differ
diff --git a/3rdParty/org.slf4j.log4j/.classpath b/3rdParty/org.slf4j.log4j/.classpath
new file mode 100644
index 00000000..31871d83
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.slf4j.log4j/.project b/3rdParty/org.slf4j.log4j/.project
new file mode 100644
index 00000000..0c64169a
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/.project
@@ -0,0 +1,28 @@
+
+
+ org.slf4j.log4j
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.slf4j.log4j/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.slf4j.log4j/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..11f6e462
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/3rdParty/org.slf4j.log4j/META-INF/MANIFEST.MF b/3rdParty/org.slf4j.log4j/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..38d22259
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: SLF4J Log4j Integration
+Bundle-SymbolicName: org.slf4j.log4j
+Bundle-Version: 1.7.5
+Bundle-ClassPath: org.slf4j.log4j_1.7.5.jar
+Bundle-Vendor: KDM Analytics Inc.
+Export-Package: org.slf4j.impl;version="1.7.5"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Created-By: Apache Maven
+Build-Jdk: 1.7.0_25
+Archiver-Version: Plexus Archiver
+Built-By: jenkins
diff --git a/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.properties b/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.properties
new file mode 100644
index 00000000..4550689e
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Sep 12 11:09:24 EDT 2013
+version=1.7.5
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.slf4j.log4j
diff --git a/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.xml b/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.xml
new file mode 100644
index 00000000..273c4afe
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.3.1
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.slf4j.log4j
+ 1.7.5
+
+ SLF4J Log4j
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties b/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties
new file mode 100644
index 00000000..4caa0dc9
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Mar 25 21:49:28 CET 2013
+version=1.7.5
+groupId=org.slf4j
+artifactId=slf4j-log4j12
diff --git a/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml b/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml
new file mode 100644
index 00000000..70d6d3e5
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml
@@ -0,0 +1,53 @@
+
+
+
+ org.slf4j
+ slf4j-parent
+ 1.7.5
+
+
+ 4.0.0
+
+ org.slf4j
+ slf4j-log4j12
+ jar
+ SLF4J LOG4J-12 Binding
+ SLF4J LOG4J-12 Binding
+ http://www.slf4j.org
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ log4j
+ log4j
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ ${parsedVersion.osgiVersion}
+ ${project.description}
+ ${project.version}
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.slf4j.log4j/org.slf4j.log4j_1.7.5.jar b/3rdParty/org.slf4j.log4j/org.slf4j.log4j_1.7.5.jar
new file mode 100644
index 00000000..9ef432cc
Binary files /dev/null and b/3rdParty/org.slf4j.log4j/org.slf4j.log4j_1.7.5.jar differ
diff --git a/3rdParty/org.slf4j.log4j12/.classpath b/3rdParty/org.slf4j.log4j12/.classpath
new file mode 100644
index 00000000..4b1a7a67
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.slf4j.log4j12/.project b/3rdParty/org.slf4j.log4j12/.project
new file mode 100644
index 00000000..37e75d8f
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/.project
@@ -0,0 +1,28 @@
+
+
+ org.slf4j.log4j12
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.slf4j.log4j12/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.slf4j.log4j12/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f287d53c
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/org.slf4j.log4j12/META-INF/MANIFEST.MF b/3rdParty/org.slf4j.log4j12/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..38ed1eb5
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Log4j12
+Bundle-SymbolicName: org.slf4j.log4j12
+Bundle-Version: 1.6.4
+Bundle-ClassPath: org.slf4j.log4j12_1.6.4.jar
+Bundle-Vendor: kdm anlaytics
+Export-Package: org.slf4j.impl;version="1.6.4"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Created-By: Apache Maven
+Build-Jdk: 1.6.0_26
+Archiver-Version: Plexus Archiver
+Built-By: kgirard
diff --git a/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.properties b/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.properties
new file mode 100644
index 00000000..e6ed84e6
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Nov 22 18:23:36 EST 2012
+version=1.6.4
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.slf4j.log4j12
diff --git a/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.xml b/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.xml
new file mode 100644
index 00000000..ae52d515
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j.log4j12/pom.xml
@@ -0,0 +1,19 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.0.5
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.slf4j.log4j12
+ 1.6.4
+
+ KDM Analytics SLF4J Log4J Plugin
+
+ eclipse-plugin
+
diff --git a/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties b/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties
new file mode 100644
index 00000000..076cc0c0
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Oct 31 23:40:13 CET 2011
+version=1.6.4
+groupId=org.slf4j
+artifactId=slf4j-log4j12
diff --git a/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml b/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml
new file mode 100644
index 00000000..33cec073
--- /dev/null
+++ b/3rdParty/org.slf4j.log4j12/META-INF/maven/org.slf4j/slf4j-log4j12/pom.xml
@@ -0,0 +1,56 @@
+
+
+
+ org.slf4j
+ slf4j-parent
+ 1.6.4
+
+
+ 4.0.0
+
+ org.slf4j
+ slf4j-log4j12
+ jar
+ SLF4J LOG4J-12 Binding
+
+ http://www.slf4j.org
+
+
+ The slf4j log4j-12 binding
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ log4j
+ log4j
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ ${parsedVersion.osgiVersion}
+ ${project.description}
+ ${project.version}
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.slf4j.log4j12/org.slf4j.log4j12_1.6.4.jar b/3rdParty/org.slf4j.log4j12/org.slf4j.log4j12_1.6.4.jar
new file mode 100644
index 00000000..8f0f322a
Binary files /dev/null and b/3rdParty/org.slf4j.log4j12/org.slf4j.log4j12_1.6.4.jar differ
diff --git a/3rdParty/org.slf4j/.classpath b/3rdParty/org.slf4j/.classpath
new file mode 100644
index 00000000..540521d7
--- /dev/null
+++ b/3rdParty/org.slf4j/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/3rdParty/org.slf4j/.project b/3rdParty/org.slf4j/.project
new file mode 100644
index 00000000..9a7d6716
--- /dev/null
+++ b/3rdParty/org.slf4j/.project
@@ -0,0 +1,28 @@
+
+
+ org.slf4j
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/3rdParty/org.slf4j/.settings/org.eclipse.jdt.core.prefs b/3rdParty/org.slf4j/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f287d53c
--- /dev/null
+++ b/3rdParty/org.slf4j/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/3rdParty/org.slf4j/META-INF/MANIFEST.MF b/3rdParty/org.slf4j/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..200a1fee
--- /dev/null
+++ b/3rdParty/org.slf4j/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Slf4j
+Bundle-SymbolicName: org.slf4j
+Bundle-Version: 1.6.4
+Bundle-ClassPath: org.slf4j_1.6.4.jar
+Bundle-Vendor: kdm analytics
+Export-Package: org.slf4j,
+ org.slf4j.helpers,
+ org.slf4j.spi
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Created-By: Apache Maven
+Build-Jdk: 1.6.0_26
+Archiver-Version: Plexus Archiver
+Built-By: kgirard
diff --git a/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.properties b/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.properties
new file mode 100644
index 00000000..8a6e5396
--- /dev/null
+++ b/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Nov 22 18:23:32 EST 2012
+version=1.6.4
+groupId=com.kdmanalytics.libs.libsjava.plugins
+artifactId=org.slf4j
diff --git a/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.xml b/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.xml
new file mode 100644
index 00000000..7d177b38
--- /dev/null
+++ b/3rdParty/org.slf4j/META-INF/maven/com.kdmanalytics.libs.libsjava.plugins/org.slf4j/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.libs.libsjava
+ plugins
+ 2.0.5
+
+
+ com.kdmanalytics.libs.libsjava.plugins
+ org.slf4j
+ 1.6.4
+
+ KDM Analytics SLF4J Plugin
+
+ eclipse-plugin
+
+
diff --git a/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.properties b/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.properties
new file mode 100644
index 00000000..2aa84cb4
--- /dev/null
+++ b/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Oct 31 23:40:09 CET 2011
+version=1.6.4
+groupId=org.slf4j
+artifactId=slf4j-api
diff --git a/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.xml b/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.xml
new file mode 100644
index 00000000..0be770bd
--- /dev/null
+++ b/3rdParty/org.slf4j/META-INF/maven/org.slf4j/slf4j-api/pom.xml
@@ -0,0 +1,89 @@
+
+
+
+ org.slf4j
+ slf4j-parent
+ 1.6.4
+
+
+ 4.0.0
+
+ org.slf4j
+ slf4j-api
+ jar
+ SLF4J API Module
+
+ http://www.slf4j.org
+ The slf4j API
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ once
+ plain
+ false
+
+ **/AllTest.java
+ **/PackageTest.java
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ ${parsedVersion.osgiVersion}
+ ${project.description}
+ ${project.version}
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+
+ bundle-test-jar
+ package
+
+ jar
+ test-jar
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ process-classes
+
+ run
+
+
+
+
+
+ Removing slf4j-api's dummy StaticLoggerBinder and StaticMarkerBinder
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3rdParty/org.slf4j/build.properties b/3rdParty/org.slf4j/build.properties
new file mode 100644
index 00000000..2d931d03
--- /dev/null
+++ b/3rdParty/org.slf4j/build.properties
@@ -0,0 +1,3 @@
+bin.includes = META-INF/,\
+ guava-14.0.1.jar,\
+ org.slf4j_1.6.4.jar
diff --git a/3rdParty/org.slf4j/org.slf4j_1.6.4.jar b/3rdParty/org.slf4j/org.slf4j_1.6.4.jar
new file mode 100644
index 00000000..b74753d8
Binary files /dev/null and b/3rdParty/org.slf4j/org.slf4j_1.6.4.jar differ
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..0013f682
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,116 @@
+Open Software License v. 3.0 (OSL-3.0)
+This Open Software License (the "License") applies to any original work of authorship (the
+"Original Work") whose owner (the "Licensor") has placed the following licensing notice
+adjacent to the copyright notice for the Original Work:
+Licensed under the Open Software License version 3.0
+1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive,
+sublicensable license, for the duration of the copyright, to do the following:
+a) to reproduce the Original Work in copies, either alone or as part of a collective work;
+b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating
+derivative works ("Derivative Works") based upon the Original Work;
+c) to distribute or communicate copies of the Original Work and Derivative Works to the public,
+with the proviso that copies of Original Work or Derivative Works that You distribute or
+communicate shall be licensed under this Open Software License;
+d) to perform the Original Work publicly; and
+e) to display the Original Work publicly.
+2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive,
+sublicensable license, under patent claims owned or controlled by the Licensor that are embodied
+in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use,
+sell, offer for sale, have made, and import the Original Work and Derivative Works.
+3) Grant of Source Code License. The term "Source Code" means the preferred form of the
+Original Work for making modifications to it and all available documentation describing how to
+modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source
+Code of the Original Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the
+Source Code in an information repository reasonably calculated to permit inexpensive and
+convenient access by You for as long as Licensor continues to distribute the Original Work.
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any
+contributors to the Original Work, nor any of their trademarks or service marks, may be used to
+endorse or promote products derived from this Original Work without express prior permission
+of the Licensor. Except as expressly stated herein, nothing in this License grants any license to
+Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No
+patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of
+any patent claims other than the licensed claims defined in Section 2. No license is granted to the
+trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this
+License any Original Work that Licensor otherwise would have a right to license.
+5) External Deployment. The term "External Deployment" means the use, distribution, or
+communication of the Original Work or Derivative Works in any way such that the Original
+Work or Derivative Works may be used by anyone other than You, whether those works are
+distributed or communicated to those persons or made available as an application intended for
+use over a network. As an express condition for the grants of license hereunder, You must treat
+any External Deployment by You of the Original Work or a Derivative Work as a distribution
+under section 1(c).
+6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You
+create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as
+well as any notices of licensing and any descriptive text identified therein as an "Attribution
+Notice." You must cause the Source Code for any Derivative Works that You create to carry a
+prominent Attribution Notice reasonably calculated to inform recipients that You have modified
+the Original Work.
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the
+copyright in and to the Original Work and the patent rights granted herein by Licensor are owned
+by the Licensor or are sublicensed to You under the terms of this License with the permission of
+the contributor(s) of those copyrights and patent rights. Except as expressly stated in the
+immediately preceding sentence, the Original Work is provided under this License on an "AS IS"
+BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of non-infringement, merchantability or fitness for a particular purpose. THE
+ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This
+DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the
+Original Work is granted by this License except under this disclaimer.
+8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort
+(including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any
+indirect, special, incidental, or consequential damages of any character arising as a result of this
+License or the use of the Original Work including, without limitation, damages for loss of
+goodwill, work stoppage, computer failure or malfunction, or any and all other commercial
+damages or losses. This limitation of liability shall not apply to the extent applicable law
+prohibits such limitation.
+9) Acceptance and Termination. If, at any time, You expressly assented to this License, that
+assent indicates your clear and irrevocable acceptance of this License and all of its terms and
+conditions. If You distribute or communicate copies of the Original Work or a Derivative Work,
+You must make a reasonable effort under the circumstances to obtain the express assent of
+recipients to the terms of this License. This License conditions your rights to undertake the
+activities listed in Section 1, including your right to create Derivative Works based upon the
+Original Work, and doing so without honoring these terms and conditions is prohibited by
+copyright law and international treaty. Nothing in this License is intended to affect copyright
+exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License
+upon your failure to honor the conditions in Section 1(c).
+10) Termination for Patent Action. This License shall terminate automatically and You may no
+longer exercise any of the rights granted to You by this License as of the date You commence an
+action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the
+Original Work infringes a patent. This termination provision shall not apply for an action
+alleging patent infringement by combinations of the Original Work with other software or
+hardware.
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be
+brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor
+conducts its primary business, and under the laws of that jurisdiction excluding its conflict-oflaw provisions. The application of the United Nations Convention on Contracts for the
+International Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the requirements and penalties of
+copyright or patent law in the appropriate jurisdiction. This section shall survive the termination
+of this License.
+12) Attorneys' Fees. In any action to enforce the terms of this License or seeking damages
+relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including,
+without limitation, reasonable attorneys' fees and costs incurred in connection with such action,
+including any appeal of such action. This section shall survive the termination of this License.
+13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision
+shall be reformed only to the extent necessary to make it enforceable.
+14) Definition of "You" in This License. "You" throughout this License, whether in upper or
+lower case, means an individual or a legal entity exercising rights under, and complying with all
+of the terms of, this License. For legal entities, "You" includes any entity that controls, is
+controlled by, or is under common control with you. For purposes of this definition, "control"
+means (i) the power, direct or indirect, to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+15) Right to Use. You may use the Original Work in all ways not otherwise restricted or
+conditioned by this License or by law, and Licensor promises not to interfere with or be
+responsible for such uses by You.
+16) Modification of This License. This License is Copyright © 2005 Lawrence Rosen.
+Permission is granted to copy, distribute, or communicate this License without modification.
+Nothing in this License permits You to modify this License as applied to the Original Work or to
+Derivative Works. However, You may modify the text of this License and copy, distribute or
+communicate your modified version (the "Modified License") and apply it to other original
+works of authorship subject to the following conditions: (i) You may not indicate in any way that
+your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the
+first paragraph above with the notice "Licensed under " or with a
+notice of your own that is not confusingly similar to the notice in this License; and (iii) You may
+not claim that your original works are open source software unless your Modified License has
+been approved by Open Source Initiative (OSI) and You comply with its license review and
+certification process.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 00000000..daa7d8b0
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,176 @@
+//////////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2013 KDM Analytics, Inc. All rights reserved. This program and the
+// accompanying materials are made available under the terms of the Open Source
+// Initiative OSI - Open Software License v3.0 which accompanies this
+// distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+//////////////////////////////////////////////////////////////////////////////////
+
+http://kdmanalytics.com
+adam@kdmanalytics.com
+
+
+ADAPTORS
+============
+
+Required Generator Versions:
+ Cppcheck 1.40
+ Findbugs 1.3.9
+ Jlint 3.0
+ Rats 2.3
+ Splint 3.1.2
+
+--------------------------------------------------------------------------------------------------------------------
+
+Configuration:
+In order to run the adaptors, there is some configuration that will be required. It is essential that the required vulnerability detection tools are pre-installed and have been added to path. Ensure that you are using an adaptor that is compatible with the version of your generator. Using a more recent generator than the adaptor is designed for, may result in missing CWE's, SFP's, and Clusters.
+
+House Keeping:
+Because the TOIF output provides information relating to the parties and tools involved in the analysis of a project, this information must be entered into a file and handed to the Adaptor as an argument. The text file is a map of keys and values. The keys relate to facts and entities used in the project, while the values are information about that particular fact or entity. It is imperitive that this information is included. It is recomended that you follow this example.
+
+House Keeping Example:
+
+ ###########################
+ # Facts
+ ###########################
+
+ TOIFSegmentIsRelatedToProject=project1
+ TOIFSegmentIsProducedByOrganization=org1
+ TOIFSegmentIsOwnedByOrganization=org1
+ TOIFSegmentIsGeneratedByPerson=person1
+ TOIFSegmentIsSupervisedByPerson=person1
+
+ PersonIsInvolvedInProjectAsRole=person1;project1;role1
+ OrganizationIsInvolvedInProjectAsRole=org1;project1;role2
+ OrganizationIsPartOfOrganizationAsRole=org1;org2;role2
+ PersonIsEmployedByOrganizationAsRole=person1;org1;role1
+
+ ###########################
+ # Entities
+ ###########################
+
+ SegmentDescription=Segment relating to the findings on the wireshark project.
+
+ #projectId=name;description
+ project1=Wireshark;Using Wireshark to test the TOIF tool chain.
+
+ #personId=name;email;phone
+ person1=Adam Nunn;adam@kdmanalytics.com;555-1234
+ #person2=Joe Bloggs;blogs@kdmanalytics.com;555-1234
+
+ #organizationId=name;description;address;phone;email
+ org1=KDM;Kdm Analytics;Richmond Road;555-5555;kdm@kdmanalytics.com
+
+ #organizationId=name;description;address;phone;email
+ org2=Acme Corporation;Acme Corporation;blah;555-5555;thingamy@thingamy.com
+
+ #roleId=name;description
+ role1=Software Developer;Developer on the TOIF Adaptors project
+ role2=company;employer
+
+--------------------------------------------------------------------------------------------------------------------
+
+Running the Adaptor from command line:
+The adaptor is run from the command line. Which adaptor to use with the framework is included in the arguments.
+
+ toif --adaptor= --inputfile= --outputdirectory= --houseKeeping= [Additional arguments]
+
+“--adaptor”
+ The name of the adaptor class. This is usually the name of the adaptor jar file without the version number. This is the adaptor that is to be used with the input source file. From this class, the framework is able to discover house keeping facts about the adaptor as well as which generator to call and what options to use.
+
+“--inputFile”
+ The full path to the input source file. In order for the adaptors to create all the facts for this file, a full path must be provided
+
+“--outputDirectory”
+ The path to the output directory. This is the directory where the subdirectories containing the TOIF XML file will be written.
+
+“--houseKeeping”
+ The path to the file containing the facts about the project's house keeping. This file is specific to each adaptor and each project. This is because it is down to the user to provide the project details as well as which generator (scan tool) is running on the system.
+
+Any additional arguments may be entered after the ToifAdaptor's required arguments. These may be included files or compilation options, they will vary from generator to generator.
+
+eg splint takes -I and -D options:
+ java -cp "/home/user/adaptors/*" ToifAdaptor -a SplintAdaptor -i /home/user/foo.c -o /home/user/output -h housekeepingFile.txt -I./includes -D_U_=
+
+--------------------------------------------------------------------------------------------------------------------
+
+Integrating with a C project's build:
+The best way to integrate the adaptors into the build, is by wrapping the compiler and the adaptors into a script. When the compiler is called, the adaptors will be run for every source file used. To get the build process to use this wrapper instead of the compiler on its own, the compiler flag needs to be set during configuration of the make:
+
+ ./configure CC=myGccWrapper
+
+The make can then be continued as normal:
+
+ make
+ make install
+
+--------------------------------------------------------------------------------------------------------------------
+
+Integrating with Java project build:
+It may be possible to integrate into a Java project's build by modifying Apache Ant's “build.xml” file. Create a new target which will find all the “.class” files in the destination directory of the project. For each file, the javaAdaptors script will be run with the arguments that are specified:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+To run the adaptors and compile the project, the following command should be given:
+
+ ant check
+
+--------------------------------------------------------------------------------------------------------------------
+
+Validation:
+
+Validation of the ouput of the TOIF tool can be performed with xmllint.
+
+ xmllint --noout --schema
+
+Note: xmllint accepts the "*" to validate more than one file at a time.
+
+--------------------------------------------------------------------------------------------------------------------
+
+ASSIMILATOR
+============
+
+The assimilator merges TOIF findings into a common fact-orientated repository or file.
+
+--------------------------------------------------------------------------------------------------------------------
+
+To run the assimilator, execute the assimilator script on the command line, specifying the repository location and the files to merge.
+
+assimilator.sh -k
+
+ -k used to specify a output .kdm file.
+
+
+
+--------------------------------------------------------------------------------------------------------------------
+
+REPORT VIEW
+============
+
+Report views allow you to view the toif findings in eclipse.
+
+--------------------------------------------------------------------------------------------------------------------
+
+The UpdateSite.zip file can be used like a regular updatesite in eclipse. When installing new software from the help menu, "Add" the UpdateSite.zip as an archive and follow the regular eclipse-plugin process.
+Kdm files should be imported via right clicking on the project, selecting "Import" -> "SFP/CWE" -> "Import integrated SFP/CWE File". The project will then need to be selected and the kdm file choosen from the browse buton.
+You can then go "Project" -> "SFP/CWE" -> "(Re)Build Defect model".
+
+Known Issuse:
+ The trace back currently shows numbers as reported by the toif adaptors unlike the code locations in the views list (which are normalized to kdm locations).
+
+ Before "(Re)Build Defect Model" is used on a different project, the toif view should be closed.
diff --git a/README b/README
new file mode 100644
index 00000000..4fe1228e
--- /dev/null
+++ b/README
@@ -0,0 +1,4 @@
+toif
+====
+
+The Tool Output Integration Framework (TOIF) is a powerful composite vulnerability detection platform that automatically combines results from separate code defect scanner tools into one common reporting format and defect management platform. TOIF normalizes and analyzes the results of each tool to add weighting to defect reports, remove duplicates and assign consistent Common Weakness Enumeration (CWE) codes. The management platform provides the list of defects, along with sorting by defect type and tool, weighting and action status (defect citing).
diff --git a/com.kdmanalytics.standAlone.toif.report/.classpath b/com.kdmanalytics.standAlone.toif.report/.classpath
new file mode 100644
index 00000000..ad32c83a
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/com.kdmanalytics.standAlone.toif.report/.project b/com.kdmanalytics.standAlone.toif.report/.project
new file mode 100644
index 00000000..2d63abd6
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/.project
@@ -0,0 +1,28 @@
+
+
+ com.kdmanalytics.standAlone.toif.report
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/com.kdmanalytics.standAlone.toif.report/.settings/org.eclipse.jdt.core.prefs b/com.kdmanalytics.standAlone.toif.report/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..56e50dde
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Apr 25 14:35:50 EDT 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.kdmanalytics.standAlone.toif.report/META-INF/MANIFEST.MF b/com.kdmanalytics.standAlone.toif.report/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..92e28de4
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TOIF Report
+Bundle-SymbolicName: com.kdmanalytics.standAlone.toif.report;singleton:=true
+Bundle-Version: 1.16.0.qualifier
+Bundle-Activator: com.kdmanalytics.standalone.toif.report.Activator
+Bundle-Vendor: KDM Analytics Inc.
+Require-Bundle: org.eclipse.ui;bundle-version="[3.7.0,5.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,5.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.7.0,5.0.0)",
+ org.openrdf.sesame;bundle-version="[2.4.0,2.5.0)",
+ com.kdmanalytics.toif.report;bundle-version="[1.6.0,2.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
diff --git a/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/Activator.class b/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/Activator.class
new file mode 100644
index 00000000..9889779e
Binary files /dev/null and b/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/Activator.class differ
diff --git a/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.class b/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.class
new file mode 100644
index 00000000..323939dc
Binary files /dev/null and b/com.kdmanalytics.standAlone.toif.report/bin/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.class differ
diff --git a/com.kdmanalytics.standAlone.toif.report/build.properties b/com.kdmanalytics.standAlone.toif.report/build.properties
new file mode 100644
index 00000000..e9863e28
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/com.kdmanalytics.standAlone.toif.report/plugin.xml b/com.kdmanalytics.standAlone.toif.report/plugin.xml
new file mode 100644
index 00000000..f23f1f55
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/plugin.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
diff --git a/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/Activator.java b/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/Activator.java
new file mode 100644
index 00000000..d7d14c63
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/Activator.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Open Source
+ * Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+package com.kdmanalytics.standalone.toif.report;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "com.kdmanalytics.standalone.toif.report"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.java b/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.java
new file mode 100644
index 00000000..dfac0bd0
--- /dev/null
+++ b/com.kdmanalytics.standAlone.toif.report/src/com/kdmanalytics/standalone/toif/report/repositoryMaker/RepositoryMaker.java
@@ -0,0 +1,67 @@
+/**
+ * KDM Analytics Inc - (2012)
+ *
+ * @Author Adam Nunn
+ * @Date Mar 27, 2012
+ */
+package com.kdmanalytics.standalone.toif.report.repositoryMaker;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IFolder;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.sail.nativerdf.NativeStore;
+
+import com.kdmanalytics.toif.report.util.IRepositoryMaker;
+
+/**
+ * @author adam
+ *
+ */
+public class RepositoryMaker implements IRepositoryMaker
+{
+
+ private IFolder folder;
+
+ private Repository repository;
+
+ public RepositoryMaker()
+ {
+ }
+
+ /**
+ * @param folder
+ */
+ public RepositoryMaker(IFolder folder)
+ {
+ this.folder = folder;
+ createRepository();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public void createRepository()
+ {
+ File file = new File(folder.getLocationURI());
+ NativeStore nativeStore = new NativeStore(file);
+ repository = new SailRepository(nativeStore);
+ }
+
+ /**
+ * @return
+ */
+ @Override
+ public Repository getRepository()
+ {
+ return repository;
+ }
+
+ @Override
+ public void setFolder(IFolder folder) {
+ this.folder = folder;
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/.classpath b/com.kdmanalytics.toif.assimilator/.classpath
new file mode 100644
index 00000000..098194ca
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/com.kdmanalytics.toif.assimilator/.project b/com.kdmanalytics.toif.assimilator/.project
new file mode 100644
index 00000000..601cd5d6
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/.project
@@ -0,0 +1,28 @@
+
+
+ com.kdmanalytics.toif.assimilator
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.core.prefs b/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..7341ab16
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.ui.prefs b/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000..9bf9b5f0
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Wed Mar 07 11:57:17 EST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.text.custom_code_templates=/**\n * @return the ${bare_field_name}\n *//**\n * @param ${param} the ${bare_field_name} to set\n *//**\n * ${tags}\n *//**\n * KDM Analytics Inc (${year})\n *\n * @Author Adam Nunn\n * @Date ${date}\n *//**\n * @author ${user}\n *\n * ${tags}\n *//**\n * \n *//**\n * ${tags}\n *//* (non-Javadoc)\n * ${see_to_overridden}\n *//**\n * ${tags}\n * ${see_to_target}\n */${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}\n\n\n\n// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();// ${todo} Auto-generated method stub\n${body_statement}${body_statement}\n// ${todo} Auto-generated constructor stubreturn ${field};${field} \= ${param};
diff --git a/com.kdmanalytics.toif.assimilator/META-INF/MANIFEST.MF b/com.kdmanalytics.toif.assimilator/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..4c282abb
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TOIF Assimilator
+Bundle-SymbolicName: com.kdmanalytics.toif.assimilator;singleton:=true
+Bundle-Version: 1.16.0.qualifier
+Bundle-Activator: com.kdmanalytics.toif.assimilator.Activator
+Bundle-Vendor: KDM Analytics Inc.
+Require-Bundle: org.apache.xerces;bundle-version="[2.11.0,3.0.0)",
+ org.apache.log4j;bundle-version="[1.2.15,1.3.0)",
+ org.apache.commons.lang3;bundle-version="[3.1.0,4.0.0)",
+ org.apache.commons.io;bundle-version="[2.4.0,3.0.0)",
+ org.openrdf.sesame;bundle-version="[2.4.0,2.5.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
+ com.kdmanalytics.kdm.repositoryMerger;bundle-version="[1.0.0,2.0.0)",
+ com.google.guava;bundle-version="[14.0.1,15.0.0)",
+ com.kdmanalytics.toif.common;bundle-version="[1.14.0,2.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Export-Package: com.kdmanalytics.toif.assimilator; uses:="com.kdmanaly
+ tics.toif.mergers, org.apache.log4j, org.eclipse.ui.plugin, org.os
+ gi.framework, org.openrdf.repository, com.kdmanalytics.kdm.reposito
+ ryMerger, org.openrdf.model",com.kdmanalytics.toif.assimilator.confi
+ g,com.kdmanalytics.toif.assimilator.exceptions,com.kdmanalytics.toif.
+ assimilator.toifRdfTypes;uses:="org.w3c.dom,org.openrdf.model",com.kd
+ manalytics.toif.mergers;uses:="org.openrdf.model,org.w3c.dom"
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Activator.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Activator.class
new file mode 100644
index 00000000..518e5ac0
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Activator.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$1.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$1.class
new file mode 100644
index 00000000..38e7edb9
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$1.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$2.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$2.class
new file mode 100644
index 00000000..037f676c
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$2.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$3.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$3.class
new file mode 100644
index 00000000..8a848c3c
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$3.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$4.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$4.class
new file mode 100644
index 00000000..8b102803
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$4.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$5.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$5.class
new file mode 100644
index 00000000..ad0173e8
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$5.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class
new file mode 100644
index 00000000..38471789
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator.class
new file mode 100644
index 00000000..1f3250e5
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/Assimilator.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/AttributeUtilities.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/AttributeUtilities.class
new file mode 100644
index 00000000..074999cf
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/AttributeUtilities.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/DelayedRelation.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/DelayedRelation.class
new file mode 100644
index 00000000..1d082c66
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/DelayedRelation.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class
new file mode 100644
index 00000000..0d4e0465
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree.class
new file mode 100644
index 00000000..42ffb03d
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTree.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class
new file mode 100644
index 00000000..f0e24a34
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie.class
new file mode 100644
index 00000000..bd4330ff
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/FilePathTrie.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class
new file mode 100644
index 00000000..8c6b8227
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class
new file mode 100644
index 00000000..d9f981ca
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class
new file mode 100644
index 00000000..6bc13fc7
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/UniqueID.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/UniqueID.class
new file mode 100644
index 00000000..e9fc7cba
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/UniqueID.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/XMLNode.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/XMLNode.class
new file mode 100644
index 00000000..e02db5b3
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/XMLNode.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/config/cxx.cfg b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class
new file mode 100644
index 00000000..39a292f5
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class
new file mode 100644
index 00000000..b24cd309
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class
new file mode 100644
index 00000000..b46f7c9f
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class
new file mode 100644
index 00000000..d94e35ac
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class
new file mode 100644
index 00000000..2cbe97d7
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class
new file mode 100644
index 00000000..fe33aa2e
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class
new file mode 100644
index 00000000..1dee27fa
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/StatementMapping.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/StatementMapping.class
new file mode 100644
index 00000000..0612fe2f
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/StatementMapping.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/ToifMerger.class b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/ToifMerger.class
new file mode 100644
index 00000000..83b0db7c
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/bin/com/kdmanalytics/toif/mergers/ToifMerger.class differ
diff --git a/com.kdmanalytics.toif.assimilator/bin/log4j.properties b/com.kdmanalytics.toif.assimilator/bin/log4j.properties
new file mode 100644
index 00000000..6474c8fe
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/bin/log4j.properties
@@ -0,0 +1,7 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+# accompanying materials are made available under the terms of the Open Source
+# Initiative OSI - Open Software License v3.0 which accompanies this
+# distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+#-------------------------------------------------------------------------------
+log4j.rootCategory=OFF
diff --git a/com.kdmanalytics.toif.assimilator/build.properties b/com.kdmanalytics.toif.assimilator/build.properties
new file mode 100644
index 00000000..99752de7
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
+src.includes = bin/
diff --git a/com.kdmanalytics.toif.assimilator/pom.xml b/com.kdmanalytics.toif.assimilator/pom.xml
new file mode 100644
index 00000000..437f5459
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/pom.xml
@@ -0,0 +1,21 @@
+
+
+
+ 4.0.0
+
+
+ com.kdmanalytics.toif
+ plugins
+ 1.16.0-SNAPSHOT
+
+
+ com.kdmanalytics.toif.compile
+ com.kdmanalytics.toif.assimilator
+
+
+ eclipse-plugin
+
+ TOIF Assimilator
+
\ No newline at end of file
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Activator.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Activator.java
new file mode 100644
index 00000000..d2c1d993
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Activator.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Open Source
+ * Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+package com.kdmanalytics.toif.assimilator;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Assimilator.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Assimilator.java
new file mode 100644
index 00000000..ea200760
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/Assimilator.java
@@ -0,0 +1,2326 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and
+ * the accompanying materials are made available under the terms of the Open
+ * Source Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at
+ * http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+
+package com.kdmanalytics.toif.assimilator;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.commons.io.filefilter.TrueFileFilter;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.log4j.Logger;
+import org.openrdf.model.Literal;
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.StatementImpl;
+import org.openrdf.query.MalformedQueryException;
+import org.openrdf.query.QueryEvaluationException;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.sail.memory.MemoryStore;
+import org.openrdf.sail.nativerdf.NativeStore;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.google.common.io.Files;
+import com.kdmanalytics.kdm.repositoryMerger.RepositoryMerger;
+import com.kdmanalytics.kdm.repositoryMerger.linkconfig.LinkConfig;
+import com.kdmanalytics.kdm.repositoryMerger.linkconfig.MergeConfig;
+import com.kdmanalytics.toif.assimilator.FilePathTrie.Node;
+import com.kdmanalytics.toif.assimilator.exceptions.AssimilatorArgumentException;
+import com.kdmanalytics.toif.common.exception.ToifException;
+import com.kdmanalytics.toif.mergers.ToifMerger;
+
+/**
+ * This class takes a number of tkdm and toif files and integrates them into one
+ * repository. Each domain is merged with its self first, then integrated with
+ * each other.
+ *
+ * @author adam
+ *
+ */
+public class Assimilator
+{
+
+ public static void debug(Logger logger, Object message)
+ {
+ logger.debug(message);
+ }
+
+ static public void deleteDirectory(File path)
+ {
+ if (path.exists())
+ {
+ File[] files = path.listFiles();
+ for (int i = 0; i < files.length; i++)
+ {
+ if (files[i].isDirectory())
+ {
+ deleteDirectory(files[i]);
+ }
+ else
+ {
+ files[i].delete();
+ }
+ }
+ }
+ return;
+ }
+
+ /**
+ * Entry point for the assimilator. Takes an array of strings. These are the
+ * repository options -r , and the unparsed options
+ * (files) that need to be assimilated.
+ *
+ * @param args
+ * the repository option and location, and the files to be
+ * assimilated. TODO: remove main since we are now using RCP app
+ * and can be a security hole/ public static void main(String[]
+ * args) { Assimilator assimilator = new Assimilator(); //
+ * assimilate the files. assimilator.assimilate(args);
+ *
+ * }
+ *
+ * /** do we continue if exceptions are found.
+ */
+ private final boolean force = true;
+
+ /**
+ * KDM name space
+ */
+ private static final String KDM_NS_HOST = "http://org.omg.kdm/";
+
+ /**
+ * the logger.
+ */
+ private static Logger LOG = Logger.getLogger(Assimilator.class);
+
+ /**
+ * the model namespace.
+ */
+ private static final String MODEL_NS = "http://kdmanalytics.com/";
+
+ /**
+ * tkdm extension
+ */
+ private static final String TKDM_EXTENSION = ".tkdm";
+
+ /**
+ * kdmo file extension.
+ */
+ private static final String KDMO_EXTENSION = ".kdmo";
+
+ /**
+ * The kdm extension for the kdm xml file.
+ */
+ private static final String KDM_EXTENSION = ".kdm";
+
+ /**
+ * The kdm extension for the kdm keep file.
+ */
+ private static final String KDM_KEEP_EXTENSION = ".keep";
+
+ /**
+ * toif extension.
+ */
+ private static final String TOIF_EXTENSION = ".toif.xml";
+
+ private static final boolean debug = false;
+
+ /**
+ * the main repository for this assimilation. This repository contains both
+ * the tkdm and the toif data together.
+ */
+ private Repository repository;
+
+ private RepositoryConnection con;
+
+ private ValueFactory factory;
+
+ /**
+ * A map of all the known sourcefiles for this project.
+ */
+ private final Map sourceFiles;
+
+ private File outputLocation = null;
+
+ private Long offset;
+
+ private Long nextId = 0L;
+
+ private Long smallestBigNumber = Long.MAX_VALUE;
+
+ private Set toifPaths = new HashSet();
+
+ private HashMap lineNumbers = new HashMap();
+
+ private Map sourceRefStatements = new HashMap();
+
+ private Map kdmContains = new HashMap();
+
+ /**
+ * the repository option. -r, -m, or -k. [R]epository output, repository
+ * [M]igration, and [K]DM ouput respectively.
+ */
+ private String rOption;
+
+ private ZipOutputStream zos;
+
+ private PrintWriter writer = null;
+
+ private boolean createZip = false;
+
+ // private FileOutputStream fos;
+
+ /**
+ * constructor for the assimilator.
+ */
+ public Assimilator()
+ {
+ sourceFiles = new HashMap();
+ }
+
+ /**
+ * @param createZip2
+ */
+ public Assimilator(boolean createZip)
+ {
+ this.createZip = createZip;
+ sourceFiles = new HashMap();
+ }
+
+ /**
+ *
+ * @param statement
+ * @throws RepositoryException
+ */
+ public void addStatement(Statement statement) throws RepositoryException
+ {
+ if (outputLocation.isFile())
+ {
+ addToFile(statement);
+ }
+ else if (repository != null)
+ {
+ addToRepository(statement);
+ }
+
+ }
+
+ /**
+ * add the statement to the specified kdm file. this is instead of adding to
+ * the repository.
+ *
+ * @param statement
+ * the statement to add to the kdm file.
+ */
+ private void addToFile(Statement statement)
+ {
+ // BufferedWriter writer = new BufferedWriter(new
+ // FileWriter(outputLocation.getAbsolutePath(), true));
+ Resource subject = statement.getSubject();
+ String subjectString = subject.toString();
+ if ("-m".equals(rOption))
+ {
+ subjectString = subjectString.replace("http://kdmanalytics.com/", "");
+ subjectString = subjectString.replace("http://toif/", "");
+ }
+
+ writer.write("<" + subjectString + "> ");
+
+ URI predicate = statement.getPredicate();
+ String predicateString = predicate.toString();
+ if ("-m".equals(rOption))
+ {
+ predicateString = predicateString.replace("http://org.omg.kdm/", "");
+ predicateString = predicateString.replace("http://toif/", "");
+ }
+
+ writer.write("<" + predicateString + "> ");
+
+ String object = statement.getObject().toString();
+ if ("-m".equals(rOption))
+ {
+ object = object.replace("http://kdmanalytics.com/", "");
+ object = object.replace("http://toif/", "");
+ }
+ if (!object.startsWith("\""))
+ {
+ object = "<" + object + ">";
+ }
+ writer.write(object + " ");
+ writer.write(" .\n");
+ writer.flush();
+
+ }
+
+ /**
+ * Ultimately add the statement to the repository. However, if the statement
+ * is a codeLocation then try to bind it to the source-ref in the kdm model.
+ * The binding will look like this:
+ *
+ * [KDM SourceRef] <---> [Common Node] <---> [TOIF CodeLocation]
+ *
+ * First we need to find the correct source file. We do this by: -Get all
+ * the sourcefiles in the kdm model -get their path statements -compare
+ * paths using Trie. -find best fit.
+ *
+ * We then find all sourceRefs with this sourcefile ID.
+ *
+ * Then, create the binding between this codeLocation and the sourceRef
+ * using the common node.
+ *
+ * @param statement
+ * @throws RepositoryException
+ */
+ private void addToRepository(Statement statement) throws RepositoryException
+ {
+ if (con == null)
+ {
+ con = repository.getConnection();
+ }
+
+ if (debug)
+ {
+ System.err.println("repository: " + con.getRepository());
+ }
+
+ con.add(statement, (Resource) null);
+ }
+
+ /**
+ * main entry point mainly to aid in testing. tytpial use would be via the
+ * RPC.
+ *
+ * @param args
+ */
+ public static void main(String[] args)
+ {
+ Assimilator ass = new Assimilator();
+ try
+ {
+ ass.assimilate(args);
+ }
+ catch (Exception e)
+ {
+ System.err.println("running in stand alone context, exception occured.");
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Assimilate the files into one repository.
+ *
+ * -k kdmoutputfile toiffiles.
+ *
+ * @param args
+ * the arguments passed to main. These include the repository
+ * location and tkdm/toif file locations.
+ * @throws ToifException
+ * @throws IOException
+ *
+ */
+ public boolean assimilate(String[] args) throws ToifException, IOException
+ {
+ System.out.println("Running, this may take some time...");
+ try
+ {
+ outputLocation = getOutputLocation(args);
+
+ // get the tkdm files and the toif files.
+ final List kdmFiles = getFiles(args, KDM_EXTENSION, KDM_KEEP_EXTENSION);
+ final List tkdmFiles = getFiles(args, TKDM_EXTENSION, KDMO_EXTENSION);
+ final List toifFiles = getFiles(args, TOIF_EXTENSION);
+
+ repository = createRepository(outputLocation);
+
+ if (createZip)
+ {
+ createZipWriter();
+ }
+ else
+ {
+ createFileWriter();
+ }
+
+ if ("-m".equals(rOption))
+ {
+
+ if (!kdmFiles.isEmpty())
+ {
+ InputStream is = new FileInputStream(kdmFiles.get(0));
+
+ byte buf[] = new byte[1000];
+ int count = is.read(buf);
+ is.close();
+
+ // If the file is empty, handle it special
+ if (count <= 0)
+ {
+ return false;
+ }
+
+ // If it is a zip importer there is further processing that
+ // is done on the return to determine what type of data
+ // is contained within the zip file.
+ if (buf[0] == 'P' && buf[1] == 'K' && buf[2] == 3)
+ {
+ processKdmZip(kdmFiles);
+ }
+ else
+ {
+ processkdm(kdmFiles);
+ }
+ }
+ else
+ {
+ LOG.error("There are no input kdm files");
+ }
+
+ }
+
+ if (debug)
+ {
+ System.err.println("repository is: " + repository);
+ }
+
+ // if the migrate option has not been set. (future functionality)
+ if (!"-m".equals(rOption))
+ {
+ // get the kdm file this writes directly to the repository.
+ processkdm(kdmFiles);
+
+ /*
+ * run the tkdm merger and pipe its output to the
+ * writeStatementLine() method.
+ */
+ final RepositoryMerger kdmMerger = processTkdmFiles(tkdmFiles);
+ setNextId(kdmMerger.getId());
+
+ }
+ else
+ {
+
+ }
+
+ String blacklistPath = getBlackListPath(args);
+
+ /*
+ * run the toif merger and pipe its output to the
+ * writeStatementLine() method.
+ */
+ nextId++;
+ processToifFiles(toifFiles, nextId, smallestBigNumber, blacklistPath);
+
+ compareLocations();
+
+ }
+ catch (final AssimilatorArgumentException e)
+ {
+ final String msg = "Bad argument:";
+ LOG.error(msg, e);
+ throw new IllegalArgumentException(msg, e);
+ }
+ catch (RepositoryException e)
+ {
+ e.printStackTrace();
+ }
+ /*
+ * catch (IOException e) { e.printStackTrace(); }
+ */
+ finally
+ {
+ try
+ {
+
+ con.close();
+ repository.shutDown();
+ if (writer != null)
+ {
+ writer.close();
+ }
+ outputLocation = null;
+ }
+ catch (RepositoryException e)
+ {
+ System.err.println("There was a problem closing the connection to the repository. " + e);
+ }
+
+ System.out.println("\nComplete.");
+
+ }
+ return true;
+ }
+
+ /**
+ * process the kdm files. decides if its xml or triples.
+ *
+ * @param kdmFiles
+ * @throws ToifException
+ */
+ private void processkdm(List kdmFiles) throws ToifException
+ {
+ if (kdmFiles.size() == 0)
+ {
+ return;
+ }
+
+ File kdmFile = kdmFiles.get(0);
+
+ FileInputStream is = null;
+ DataInputStream din = null;
+ BufferedReader br = null;
+ try
+ {
+ is = new FileInputStream(kdmFile);
+ din = new DataInputStream(is);
+ br = new BufferedReader(new InputStreamReader(din));
+
+ String firstLine = br.readLine();
+
+ if (firstLine.isEmpty())
+ {
+ return;
+ }
+ else if (firstLine.startsWith(" kdmFiles) throws ToifException
+ {
+ FileInputStream fis = null;
+ File file = null;
+ try
+ {
+ file = kdmFiles.get(0);
+
+ fis = new FileInputStream(file);
+ // Read from the ZipInputStream as you would normally from any other
+ // input stream
+ System.out.println("\n" + file.getAbsolutePath());
+ streamStatementsToRepo(fis);
+ }
+ catch (FileNotFoundException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ finally
+ {
+ try
+ {
+ if (fis != null)
+ {
+ fis.close();
+ }
+ }
+ catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ /**
+ *
+ */
+ private void createFileWriter()
+ {
+ try
+ {
+ writer = new PrintWriter(outputLocation);
+
+ }
+ catch (FileNotFoundException e)
+ {
+ LOG.error("The file " + outputLocation + " has not been found.");
+
+ }
+
+ }
+
+ /**
+ * try to find matching locations in the toif and the kdm namespaces.
+ *
+ * @return
+ *
+ * @throws RepositoryException
+ */
+ private boolean compareLocations() throws RepositoryException
+ {
+ HashMap bestFitMap = new HashMap();
+
+ int statements = 0;
+ Map tries = new HashMap();
+ // for all the toif statements that are a path
+ for (Statement toifStatement : toifPaths)
+ {
+ Resource bestFitResource = bestFitMap.get(toifStatement.getSubject().stringValue());
+ if (bestFitResource != null)
+ {
+ createCommonNode(toifStatement.getSubject(), bestFitResource);
+ continue;
+ }
+
+ statements++;
+
+ float fraction = 100f / toifPaths.size();
+ int percent = (int) Math.ceil(fraction * statements);
+
+ if (percent > 100)
+ {
+ percent = 100;
+ }
+
+ System.out.print("\rAssimilating TOIF and KDM Locations... " + percent + "%");
+
+ // given a toif statement
+ Resource kdmResourceFile = findBestFitSourceFile(tries, toifStatement);
+
+ if (kdmResourceFile == null)
+ {
+ continue;
+ }
+
+ int reductionAmount = 0;
+
+ while (bestFitResource == null)
+ {
+ // we tried, dont want an endless loop.
+ if (reductionAmount == 100)
+ {
+ findBestKdmElementForToifStatement(toifStatement, kdmResourceFile, reductionAmount, true);
+ break;
+ }
+
+ bestFitResource = findBestKdmElementForToifStatement(toifStatement, kdmResourceFile, reductionAmount, false);
+
+ // if (bestFitResource == null)
+ // {
+ // findBestKdmElementForToifStatement(toifStatement,
+ // kdmResourceFile, reductionAmount * -1, false);
+ // }
+
+ reductionAmount++;
+ }
+
+ if (bestFitResource == null)
+ {
+ bestFitResource = kdmResourceFile;
+ }
+
+ Resource toifSubject = toifStatement.getSubject();
+ createCommonNode(toifSubject, bestFitResource);
+
+ }
+
+ return false;
+
+ }
+
+ /**
+ * create the common node which is a blank node. this is doubly linked to
+ * both the kdm blockunit and the toif code location.
+ *
+ * @param sourceFile
+ * @param blockUnit
+ * @throws RepositoryException
+ */
+ private void createCommonNode(Resource toifSubject, Resource blockUnit) throws RepositoryException
+ {
+
+ URI bnodeURI = factory.createURI("http://toif/", (offset++).toString());
+ Literal typeLiteral = factory.createLiteral("CommonNode");
+
+ // create the blank common node.
+ addStatement(new StatementImpl(bnodeURI, factory.createURI(KDM_NS_HOST + "Type"), typeLiteral));
+
+ // link the toif to it
+ addStatement(new StatementImpl(toifSubject, factory.createURI(KDM_NS_HOST + "CommonView"), bnodeURI));
+ // link the toif from it.
+ addStatement(new StatementImpl(bnodeURI, factory.createURI(KDM_NS_HOST + "ToifView"), toifSubject));
+
+ // link the kdm to it
+ addStatement(new StatementImpl(blockUnit, factory.createURI(KDM_NS_HOST + "CommonView"), bnodeURI));
+ // link the kdm from it.
+ addStatement(new StatementImpl(bnodeURI, factory.createURI(KDM_NS_HOST + "KdmView"), blockUnit));
+
+ }
+
+ /**
+ * create the disk repository which the files will be merged into.
+ *
+ * @param repositoryLocation
+ *
+ * @return the repository in its initialized state.
+ */
+ Repository createRepository(File repositoryLocation)
+ {
+ Repository repository = null;
+ if (repositoryLocation.isDirectory())
+ {
+ // create the disk repository.
+ repository = new SailRepository(new NativeStore(repositoryLocation));
+ }
+ else
+ {
+ try
+ {
+ MemoryStore memoryStore = new MemoryStore();
+ repository = new SailRepository(memoryStore);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ }
+
+ try
+ {
+ // initialize the repository.
+ if (repository == null)
+ {
+ throw new RepositoryException("Repository is null");
+ }
+ repository.initialize();
+ Assimilator.debug(LOG, "Repository initialized in " + repositoryLocation.getAbsolutePath());
+
+ con = repository.getConnection();
+ // con.clear((Resource)null);
+ factory = repository.getValueFactory();
+ }
+ catch (final RepositoryException e)
+ {
+ LOG.error("Repository could not be initialized. " + e);
+ e.printStackTrace();
+ }
+
+ // return the repository.
+ return repository;
+ }
+
+ /**
+ * addToFile
+ *
+ */
+ private void createZipWriter()
+ {
+ FileOutputStream fos;
+ try
+ {
+ fos = new FileOutputStream(outputLocation);
+ zos = new ZipOutputStream(fos);
+ ZipEntry ze = new ZipEntry(outputLocation.getName());
+ zos.putNextEntry(ze);
+ writer = new PrintWriter(new OutputStreamWriter(zos));
+
+ }
+ catch (FileNotFoundException e)
+ {
+ System.err.println("The file " + outputLocation + " has not been found.");
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ System.err.println("There has been a IO exception while creating the zip file.");
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * get the value of the object.
+ *
+ * @param elements
+ * the subject predicate and object
+ * @return the value of the object.
+ */
+ private Value determineObjectValue(String[] elements)
+ {
+
+ Value object = null;
+
+ if (elements.length < 2)
+ return object;
+
+ try
+ {
+ String objectString = trimForStatement(elements[2]);
+ if (elements[2].startsWith("<"))
+ {
+ if (!objectString.startsWith("http"))
+ {
+ objectString = "http://kdmanalytics.com/" + objectString;
+ }
+ object = factory.createURI(objectString);
+ }
+ else
+ {
+ object = factory.createLiteral(objectString);
+ }
+ }
+ catch (ArrayIndexOutOfBoundsException e)
+ {
+ System.err.println("index out of bouds " + e);
+ System.err.println(elements);
+ }
+
+ return object;
+ }
+
+ /**
+ * Creates a trie (note: trie not tree) of all the known source files. The
+ * toif path is matched against the tries. the tries return the longest path
+ * that they can for each kdm resource, the resource with the longest path
+ * is the resource which is returned.
+ *
+ * @param tries
+ * the map of tries for all the kdm resources. the tries each
+ * start with a file as the root and parent directories extending
+ * from that.
+ * @param st
+ * the toif statement. this is the statement which contains the
+ * path.
+ * @return returns the kdm resource with the best fit.
+ */
+ private Resource findBestFitSourceFile(Map tries, final Statement st)
+ {
+ Resource bestFit = null;
+ int bestFitCount = 0;
+
+ // get the OBJECT string value
+ String toifPath = st.getObject().stringValue();
+
+ // get rid of quotes and make a list.
+ toifPath = toifPath.replace("\"", "");
+ List toifPathArray = Arrays.asList(toifPath.replace("\\", "/").split("/"));
+
+ // we need the path array starting with the file.
+ Collections.reverse(toifPathArray);
+
+ // get the toif file name. which is the first element now.
+ String toifFileName = toifPathArray.get(0);
+ toifPathArray.set(0, getSourceFile(toifFileName));
+
+ // work with all the kdm entries in the sourcefiles, reverse their
+ // contents and create a mapping of the file as key and the Trie as
+ // the value. Basically making the trie for each source file.
+ for (String kdmPath : sourceFiles.keySet())
+ {
+
+ // reverse the kdm path so that it starts with the file.
+ List kdmPathArray = Arrays.asList(kdmPath.replace("\\", "/").split("/"));
+ Collections.reverse(kdmPathArray);
+
+ // there should be something in the path!!!
+ if (kdmPathArray.isEmpty())
+ {
+ continue;
+ }
+
+ // the filename.
+ String kdmFileName = kdmPathArray.get(0);
+ Node currentKdmNode = null;
+
+ // get the kdm resource based on its path.
+ Resource kdmResource = sourceFiles.get(kdmPath);
+
+ // if the filename doesn't exist, create a new trie for it.
+ if (!tries.containsKey(kdmResource))
+ {
+ FilePathTrie filePathTrie = new FilePathTrie(kdmFileName);
+ tries.put(kdmResource, filePathTrie);
+ }
+
+ // set the node as the sourcefile we are working with.
+ currentKdmNode = tries.get(kdmResource).getFile();
+
+ // for all the directories in this sourcefile's path, add them to
+ // the trie.
+ for (int i = 1; i < kdmPathArray.size(); i++)
+ {
+ // get the correct trie based on the resource.
+ FilePathTrie trie = tries.get(kdmResource);
+ // add the parent to the current kdm node. currentKdm Node gets
+ // replaced with the parent once this is done.
+ currentKdmNode = trie.addParentDirectory(currentKdmNode, kdmPathArray.get(i));
+ }
+ }
+
+ for (Resource file : tries.keySet())
+ {
+ FilePathTrie trie = tries.get(file);
+ // get the longest kdm path that we can find from the tries.
+ List path = trie.getBestPath(toifPathArray);
+
+ // if this path is longer than the previous longest then set the
+ // current resource (file) as the best fit.
+ if (path.size() >= bestFitCount)
+ {
+ bestFit = file;
+ bestFitCount = path.size();
+ }
+ }
+
+ // return the best fit.
+ return bestFit;
+
+ }
+
+ /**
+ * Findind the best fitting source reference.
+ *
+ * @param st
+ * @param bestFit
+ * @return the kdm element that best fits the toif resource
+ * @throws RepositoryException
+ * @throws MalformedQueryException
+ * @throws QueryEvaluationException
+ */
+ private Resource findBestKdmElementForToifStatement(Statement st, Resource bestFit, int reductionAmount, boolean searchForParent)
+ {
+
+ if (st == null || bestFit == null)
+ {
+ return null;
+ }
+
+ String lineNumber = "";
+
+ // figure out the reference for the source ref. Extract the id.
+ String sourceFileRef = bestFit.stringValue().replace("http://kdmanalytics.com/", "");
+
+ Statement lineNumberStatement = lineNumbers.get(st.getSubject().stringValue());
+
+ lineNumber = lineNumberStatement.getObject().stringValue();
+
+ int tempLineNumber = Integer.parseInt(lineNumber) - reductionAmount;
+
+ if (tempLineNumber <= 1)
+ {
+ tempLineNumber = 1;
+ }
+
+ lineNumber = tempLineNumber + "";
+
+ // make the literal for the sourceRef.
+ String sourceRef = sourceFileRef + ";" + lineNumber;
+
+ Statement statmentWithSourceRef = sourceRefStatements.get(sourceRef);
+
+ if (searchForParent)
+ {
+ return getParent(sourceFileRef);
+ }
+ else if (statmentWithSourceRef == null)
+ {
+ return null;
+ }
+ else
+ {
+ Resource subject = statmentWithSourceRef.getSubject();
+ return subject;
+ }
+
+ }
+
+ /**
+ * Get the blacklist string from the args. The string is the name of the top
+ * of the project.
+ *
+ * @param args
+ * arguments from the command line
+ * @return the directory name of the root of the project
+ */
+ private String getBlackListPath(String[] args)
+ {
+ int indexOfblacklistPath = 0;
+
+ for (int i = 0; i < args.length; i++)
+ {
+ if ("-p".equals(args[i]))
+ {
+ indexOfblacklistPath = i;
+
+ String blacklist = args[indexOfblacklistPath + 1];
+ blacklist = blacklist.trim();
+
+ return blacklist;
+ }
+ }
+
+ return "";
+ }
+
+ /**
+ * get all the files from the argument list.
+ *
+ * @param args
+ * the arguments handed to main.
+ * @return the list of files in the argument array with the given extension.
+ * @throws ToifException
+ */
+ List getFiles(String[] args, final String... extensions) throws ToifException
+ {
+ checkNotNull(args);
+ checkNotNull(extensions);
+
+ // set up a file filter.
+ IOFileFilter fileFilter = new IOFileFilter() {
+
+ @Override
+ public boolean accept(File arg0)
+ {
+ for (String extension : extensions)
+ {
+ if (arg0.getName().endsWith(extension))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean accept(File arg0, String arg1)
+ {
+ for (String extension : extensions)
+ {
+ if (arg1.endsWith(extension))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ };
+
+ // the files of the specific extension
+ final List files = new ArrayList();
+
+ // int startIndex = 2;
+ // for (String string : args)
+ // {
+ // if ("-p".equals(string))
+ // {
+ // startIndex = 4;
+ // }
+ // }
+
+ // starting at the unparsed options, ie the files in the arguments.
+ for (int i = 2; i < args.length; i++)
+ {
+
+ if ("-p".equals(args[i]))
+ {
+ i = i += 2;
+ }
+
+ final String path = args[i];
+
+ final File file = new File(path);
+
+ // if the file does not exist, bail.
+ if (!file.exists())
+ {
+ final String msg = "File does not exist: " + file.getName();
+ LOG.error(msg);
+ throw new ToifException(msg);
+
+ }
+
+ if (file.isDirectory())
+ {
+ files.addAll(FileUtils.listFiles(file, fileFilter, TrueFileFilter.INSTANCE));
+ }
+ else
+ {
+
+ /*
+ * only add the file to the results list if the file has the
+ * extension and is a file.
+ */
+ for (String extension : extensions)
+ {
+ if (file.getAbsolutePath().endsWith(extension))
+ {
+ files.add(file);
+ Assimilator.debug(LOG, file.getName() + " added to the " + extension + " list");
+ }
+ }
+ }
+
+ }
+
+ if (debug)
+ {
+ for (File file : files)
+ {
+ System.err.println(file.getName());
+ }
+ }
+ // return the list of files.
+ return files;
+ }
+
+ /**
+ * return the file that represents this repository location
+ *
+ * @param args
+ * the command line arguments
+ * @return the output location.
+ */
+ File getOutputLocation(String[] args) throws AssimilatorArgumentException
+ {
+ checkNotNull(args);
+
+ // the location of the repository, this will be a directory.
+ File location = null;
+
+ int indexOfROption = 0;
+
+ for (int i = 0; i < args.length; i++)
+ {
+ if ("-r".equals(args[i]) || "-k".equals(args[i]))
+ {
+ indexOfROption = i;
+ }
+ }
+
+ rOption = args[indexOfROption];
+
+ if ("-m".equals(rOption))
+ {
+ if (args.length < 3)
+ {
+ throw new AssimilatorArgumentException("There are not enough arguments.");
+ }
+ }
+ else
+ {
+ if (args.length < 3)
+ {
+ throw new AssimilatorArgumentException("There are not enough arguments.");
+ }
+ }
+
+ // the repository location, following the '-r' option
+ final String locationParameter = args[indexOfROption + 1];
+
+ if ((!rOption.equals("-r")) && (!rOption.equals("-k")) && (!rOption.equals("-m")))
+ {
+ throw new AssimilatorArgumentException("There should be an argument which should be the '-r' or the '-k' option.");
+ }
+
+ // if the option is merge but location is null.
+ if ((locationParameter == null) && (!rOption.equals("-m")))
+ {
+ throw new AssimilatorArgumentException("The second argument which should be the workbench repository is null.");
+ }
+
+ // else if just the location is null.
+ else if (locationParameter == null)
+ {
+ throw new AssimilatorArgumentException("The argument after the repository option, which should be the output location, is null.");
+ }
+
+ // check to make sure that there is an -r option
+ if ("-r".equals(rOption))
+ {
+ // make sure the location of the repository is valid.
+ location = getValidRepositoryLocation(locationParameter);
+ }
+ else if ("-k".equals(rOption))
+ {
+ location = getValidFileLocation(locationParameter);
+ }
+ else if ("-m".equals(rOption))
+ {
+ location = getValidFileLocation(locationParameter);
+ }
+
+ // return the location.
+ return location;
+ }
+
+ /**
+ * get the parent of the kdm element.
+ *
+ * @param sourceFileRef
+ * element
+ * @return the parent of the kdm element.
+ */
+ private Resource getParent(String sourceFileRef)
+ {
+ return (Resource) factory.createURI("http://kdmanalytics.com/" + sourceFileRef);
+ // String result = kdmContains.get(KdmElementWithSourceRef);
+ //
+ // if (result != null)
+ // {
+ // return (Resource) factory.createURI(result);
+ // }
+ // else
+ // {
+ // return null;
+ // }
+ // for (Statement containsStatement : kdmContains)
+ // {
+ // String containedObjectString =
+ // containsStatement.getObject().stringValue();
+ //
+ // // if the contained element is the element with the source ref.
+ // if (containedObjectString.equals(KdmElementWithSourceRef))
+ // {
+ // // return the element that contains the element with sourceRef.
+ // return (Resource)
+ // factory.createURI(containsStatement.getSubject().stringValue());
+ // }
+ // }
+ // return null;
+ }
+
+ /**
+ * The names need to be corrected to be able to find the source file.
+ *
+ * @param name
+ * @return
+ */
+ private String getSourceFile(String name)
+ {
+ String newName = name.replaceAll("$.*class", ".java");
+ newName = name.replace(".class", ".java");
+ return newName;
+ }
+
+ /**
+ * create the kdm repository merger
+ *
+ * @param out
+ * the print writer for the output.
+ * @return the repository merger
+ */
+ RepositoryMerger getTkdmMerger(PrintWriter out, String assemblyName)
+ {
+ if (assemblyName == null)
+ {
+ assemblyName = "Assembly";
+ }
+
+ final InputStream is = Assimilator.class.getResourceAsStream("config/cxx.cfg");
+
+ final LinkConfig config = new LinkConfig(is);
+
+ final MergeConfig mergeConfig = config.getMergeConfig();
+
+ final RepositoryMerger merger = new RepositoryMerger(mergeConfig, out, RepositoryMerger.NTRIPLES, assemblyName);
+
+ return merger;
+ }
+
+ /**
+ * get the merger to merge the toif data.
+ *
+ * @param printWriter
+ * the output print writer
+ * @param startID
+ * the id to start from after the kdm
+ * @param smallestBigNumber2
+ * the smallest number when starting from the other end of the
+ * long scale. (for the bnodes)
+ *
+ * @return the toif merger instance.
+ */
+ ToifMerger getToifMerger(PrintWriter printWriter, Long startID, Long smallestBigNumber2, String blacklistPath)
+ {
+ return new ToifMerger(printWriter, force, startID, smallestBigNumber2, blacklistPath);
+ }
+
+ /**
+ * get a valid location for this kdm file. the method checks to see if the
+ * location can be used as a kdm file and then creates the file.
+ *
+ * @param location
+ * path of the output file.
+ * @return the output file
+ * @throws AssimilatorArgumentException
+ * @throws IOException
+ */
+ private File getValidFileLocation(String location) throws AssimilatorArgumentException
+ {
+ if (location == null)
+ {
+ throw new AssimilatorArgumentException("Kdm file location is null");
+ }
+
+ final File file = new File(location);
+ // make the directory.
+ if (!file.exists())
+ {
+ try
+ {
+ file.createNewFile();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ throw new AssimilatorArgumentException("Kdm file could not be created");
+
+ }
+ Assimilator.debug(LOG, "Kdm File has been created.");
+ }
+
+ // if the file is a directory then it is good
+ if (file.isFile())
+ {
+ return file;
+ }
+ else if (file.getName().toLowerCase().endsWith(".kdm"))
+ {
+ throw new AssimilatorArgumentException("This location is not a valid '.kdm' file");
+ }
+ else
+ {
+ /*
+ * if the file is not a directory then it cant be used as a
+ * repository location.
+ */
+ throw new AssimilatorArgumentException("This location is not a valid file");
+
+ }
+ }
+
+ /**
+ * check to make sure that this is a valid repository location.
+ *
+ * @param location
+ * the location of the output repository.
+ *
+ * @return the output file.
+ * @throws AssimilatorArgumentException
+ */
+ File getValidRepositoryLocation(String location) throws AssimilatorArgumentException
+ {
+ if (location == null)
+ {
+ throw new AssimilatorArgumentException("Repository location is null");
+ }
+
+ final File file = new File(location);
+ // make the direcotry
+ if (file.mkdirs())
+ {
+ Assimilator.debug(LOG, "repository directory has been created.");
+ }
+ else
+ {
+ Assimilator.debug(LOG, "repository directory has already been created and will be used.");
+ }
+
+ // if the file is a directory then it is good
+ if (file.isDirectory())
+ {
+ return file;
+ }
+ else
+ {
+ /*
+ * if the file is not a directory then it cant be used as a
+ * repository location.
+ */
+ throw new AssimilatorArgumentException("This location is not a valid directory");
+
+ }
+
+ }
+
+ /**
+ * Load the kdm file. parse the input file.
+ *
+ * @param xmlFile
+ * the input file
+ * @param out
+ * output stream
+ * @return the xml handler for the kdm data.
+ * @throws IOException
+ * @throws ToifInternalException
+ */
+ public KdmXmlHandler load(File xmlFile, PipedOutputStream out) throws IOException, RepositoryException, ToifException
+ {
+ RepositoryConnection tempCon = null;
+ KdmXmlHandler kdmXmlHandler = null;
+ PrintWriter pw = null;
+ try
+ {
+ File tempFile = new File(System.getProperty("java.io.tmpdir") + File.separator + "KDMRepository");
+
+ deleteDirectory(tempFile);
+
+ tempFile.deleteOnExit();
+ Repository tempRepository = new SailRepository(new NativeStore(tempFile));
+ tempRepository.initialize();
+
+ tempCon = tempRepository.getConnection();
+ /**
+ * The factory used to drive the parsing process.
+ *
+ */
+ SAXParserFactory factory = null;
+ // Use the default (non-validating) parser
+ factory = SAXParserFactory.newInstance();
+
+ SAXParser saxParser;
+ saxParser = factory.newSAXParser();
+
+ // Have to parse the file once to determine the maximum id;
+ KdmXmiIdHandler idHandler = new KdmXmiIdHandler();
+
+ // Need to set the stream to UTF-8 ti ensure that we correctly
+ // handle
+ // characters in Strings
+ InputStream inputStream = new FileInputStream(xmlFile);
+ InputStreamReader inputReader = new InputStreamReader(inputStream, "UTF-8");
+ InputSource inputSource = new InputSource(inputReader);
+ inputSource.setEncoding("UTF-8");
+
+ saxParser.parse(inputSource, idHandler);
+
+ tempCon.setAutoCommit(false); // Control commit for speed
+
+ pw = new PrintWriter(out);
+ kdmXmlHandler = new KdmXmlHandler(pw, repository, idHandler.getMaxId());
+
+ // Parse the input
+ saxParser.parse(xmlFile, kdmXmlHandler);
+
+ // Commit postLoad data
+ kdmXmlHandler.postLoad();
+
+ tempCon.commit();
+ tempCon.clear();
+ }
+
+ catch (ParserConfigurationException | SAXException ex)
+ {
+ final String msg = "Parser exception encountered:";
+ LOG.error(msg, ex);
+ throw new ToifException(msg, ex);
+ }
+ finally
+ {
+ if (pw != null)
+ {
+ pw.flush();
+ pw.close();
+ }
+ if (null != tempCon)
+ {
+ tempCon.close();
+ }
+
+ }
+ return kdmXmlHandler;
+
+ }
+
+ /**
+ * load the rdf file into repository.
+ *
+ * @param repository
+ * the repository
+ * @param is
+ * the input stream from file
+ * @throws IOException
+ * @throws RepositoryException
+ */
+ public void load(Repository repository, InputStream is) throws IOException, RepositoryException
+ {
+ int count = 0;
+ final ValueFactory factory = repository.getValueFactory();
+ final RepositoryConnection con = repository.getConnection();
+ con.setAutoCommit(false);
+
+ final BufferedReader in = new BufferedReader(new InputStreamReader(is));
+ String line = in.readLine();
+ URI lastSubject = null;
+
+ while (line != null)
+ {
+ count++;
+
+ if (line.length() <= 0)
+ {
+ line = in.readLine();
+ continue;
+ }
+
+ if (line.charAt(0) == '#')
+ {
+ line = in.readLine();
+ continue;
+ }
+
+ if (count == 1)
+ {
+ if (line.startsWith("KDM_Triple"))
+ {
+ line = in.readLine();
+ continue;
+ }
+ }
+
+ URI subject = null;
+ URI predicate = null;
+ Value object = null;
+
+ try
+ {
+ final char bytes[] = line.toCharArray();
+
+ // Skip the initial <
+ int start = 1;
+ int i = 1;
+
+ // If the line starts with a space (indent) then reuse the last
+ // subject,
+ // otherwise parse the subject.
+ if (bytes[0] == ' ')
+ {
+ subject = lastSubject;
+ }
+ else
+ {
+ // Parse the subject
+ while ((i < bytes.length) && (bytes[i] != '>'))
+ {
+ ++i;
+ }
+ if (i >= bytes.length)
+ {
+ LOG.error("Invalid subject URI on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+
+ subject = factory.createURI(MODEL_NS + new String(line.substring(start, i)));
+
+ // Buffer the subject in case we need it next time
+ lastSubject = subject;
+ ++i; // Skip the >
+ }
+
+ while ((i < bytes.length) && (bytes[i] != '<'))
+ {
+ ++i;
+ }
+ if (i >= bytes.length)
+ {
+ LOG.error("Invalid subject URI on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+ ++i; // Skip the >
+ start = i;
+
+ // Parse the predicate
+ while ((i < bytes.length) && (bytes[i] != '>'))
+ {
+ ++i;
+ }
+ if (i >= bytes.length)
+ {
+ LOG.error("Invalid predicate URI on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+
+ predicate = factory.createURI(KDM_NS_HOST + new String(line.substring(start, i)));
+
+ ++i; // Skip the >
+ while ((i < bytes.length) && (bytes[i] != '<') && (bytes[i] != '\"'))
+ {
+ ++i;
+ }
+ if (i >= bytes.length)
+ {
+ LOG.error("Invalid predicate URI on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+
+ // Parse a URI
+ if (bytes[i] == '<')
+ {
+ ++i; // Skip the >
+ start = i;
+ while ((i < bytes.length) && (bytes[i] != '>'))
+ {
+ ++i;
+ }
+ if (i >= bytes.length)
+ {
+ LOG.error("Invalid object URI on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+
+ object = factory.createURI(MODEL_NS + new String(line.substring(start, i)));
+
+ }
+ // Parse a literal
+ else
+ {
+ final int lastIndex = line.lastIndexOf('"');
+ if ((lastIndex < 0) || (lastIndex <= i))
+ {
+ LOG.error("Invalid literal object on ntriples line " + count);
+ line = in.readLine();
+ continue;
+ }
+ String string = new String(line.substring(++i, lastIndex));
+ string = string.replace("\\", "\\\\");
+ object = factory.createLiteral(StringEscapeUtils.unescapeJava(string));
+
+ }
+
+ // In non-lowmem mode everything gets loaded into the
+ // database
+ // KdmXmlHandler.addOrWrite(con, subject, predicate, object);
+ con.add(subject, predicate, object);
+ }
+ catch (final ArrayIndexOutOfBoundsException e)
+ {
+ LOG.error("Parse error on ntriples line " + count, e);
+ e.printStackTrace();
+ }
+ line = in.readLine();
+ }
+
+ con.commit();
+ con.close();
+
+ }
+
+ /**
+ * Merge the tkdm files. with the kdm merger
+ *
+ * @param kdmMerger
+ * the kdm merger
+ * @param tkdmFiles
+ * the list of tkdm files collected from the commanline.
+ */
+ public void mergeTkdm(RepositoryMerger kdmMerger, List tkdmFiles)
+ {
+ int fileNum = 0;
+ int listSize = tkdmFiles.size();
+
+ /*
+ * for each tkdm file collected, load it into the temporary repository
+ * and merge that repository.
+ */
+ for (final File file : tkdmFiles)
+ {
+ fileNum++;
+
+ float fraction = 100f / listSize;
+ int percent = (int) Math.ceil(fraction * fileNum);
+
+ if (percent > 100)
+ {
+ percent = 100;
+ }
+
+ System.out.print("\r" + file);
+ System.out.print("\nprocessing TKDM... " + percent + "%");
+
+ try
+ {
+ File temp = Files.createTempDir();
+
+ SailRepository tempRepository = new SailRepository(new NativeStore(temp));
+
+ tempRepository.initialize();
+
+ // load the data into the repository
+ FileInputStream istream = new FileInputStream(file);
+ load(tempRepository, istream);
+ istream.close();
+
+ // merge the repository.
+ kdmMerger.merge(file.getAbsolutePath(), tempRepository);
+ tempRepository.shutDown();
+ FileUtils.deleteDirectory(temp);
+ }
+ catch (final RepositoryException e)
+ {
+ LOG.error("There was an exception when merging the tkdmFiles. " + e);
+ e.printStackTrace();
+ }
+ catch (final FileNotFoundException e)
+ {
+ LOG.error("The Kdm file has not been found. " + e);
+ e.printStackTrace();
+ }
+ catch (final IOException e)
+ {
+ LOG.error("There was an IO Exception when trying to merge the KDM files. " + e);
+ e.printStackTrace();
+ }
+ }
+
+ System.out.println("");
+ }
+
+ /**
+ * merge the toif files using the toif merger
+ *
+ * @param toifMerger
+ * the toif merger
+ * @param toifFiles
+ * the toif files collected from the command line.
+ * @param startID
+ * @return
+ */
+ Long mergeToif(ToifMerger toifMerger, List toifFiles)
+ {
+ return toifMerger.merge(toifFiles);
+ }
+
+ /**
+ * prints the contents of the repository. mainly for debug purposes.
+ *
+ * @param repository
+ * the repository to print.
+ */
+ void printDB(Repository rep)
+ {
+
+ try
+ {
+ RepositoryConnection connection = rep.getConnection();
+ // get all statements.
+ final RepositoryResult statements = connection.getStatements(null, null, null, true);
+
+ // for all the statements.
+ while (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ // print statements.
+ System.out.println(st.toString());
+
+ }
+
+ statements.close();
+ }
+ catch (final RepositoryException e)
+ {
+ LOG.error("There was a repository error while printing the database. " + e);
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * process the kdm files.
+ *
+ * @param kdmFiles
+ * the list of kdm files to process
+ * @throws FileNotFoundException
+ * @throws IOException
+ * @throws RepositoryException
+ */
+
+ class ThreadStatus
+ {
+
+ protected Exception exception;
+
+ ThreadStatus()
+ {
+ exception = null;
+ }
+ }
+
+ private void processKdmXmlFile(final List kdmFiles) throws FileNotFoundException, IOException, RepositoryException, ToifException
+ {
+ if (debug)
+ {
+ System.err.println("processing kdm file...");
+ }
+
+ PipedInputStream in = new PipedInputStream();
+ final PipedOutputStream out = new PipedOutputStream(in);
+ final ThreadStatus status = new ThreadStatus();
+
+ Thread t = new Thread(new Runnable() {
+
+ @Override
+ public void run()
+ {
+ KdmXmlHandler handler = null;
+ try
+ {
+ if (kdmFiles.size() > 1)
+ {
+ final String msg = "There should only be one .kdm file.";
+ LOG.error(msg);
+ throw new ToifException(msg);
+ }
+ else if (kdmFiles.size() == 1)
+ {
+ File kdmFile = kdmFiles.get(0); // get the head of
+ // thelist.
+ handler = load(kdmFile, out);
+ }
+ out.flush();
+ out.close();
+
+ if (handler == null)
+ {
+ return;
+ }
+ setNextId(handler.getNextId());
+ setSmallestBigNumber(handler.getSmallestBigNumber());
+ // increase
+ }
+ catch (IOException e)
+ {
+ final String msg = "IO exception whilst processing kdm file. " + ". Possibly an existing kdm file is in your input path!";
+
+ LOG.error(msg, e);
+ status.exception = new ToifException(msg, e);
+ }
+ catch (RepositoryException e)
+ {
+ final String msg = "Repository Exception whilst processing kdm file. " + ". Possibly an existing kdm file is in your input path!";
+
+ LOG.error(msg, e);
+ status.exception = new ToifException(msg, e);
+ }
+ catch (ToifException e)
+ {
+ // RJF final String msg =
+ // "Processing Exception whilst processing kdm file. "
+ // + ". Possibly that input file is invalid XML!";
+
+ // LOG.error(msg, e);
+ status.exception = e;
+ }
+ finally
+ {
+ if (out != null)
+ try
+ {
+ out.close();
+ }
+ catch (IOException e)
+ {
+ // Just leave it alone
+ LOG.error("unable to close stream");
+ }
+ }
+ }
+ });
+
+ // ---------------------------------------------------------
+ // Unable to change logic within the short time frame given so
+ // adding a means to catch unknown exceptions in thread
+ // ----------------------------------------------------------
+ Thread.UncaughtExceptionHandler tueh = new Thread.UncaughtExceptionHandler() {
+
+ public void uncaughtException(Thread th, Throwable ex)
+ {
+ LOG.error("Uncaught exception: " + ex);
+ status.exception = (Exception) ex;
+ }
+ };
+
+ t.setUncaughtExceptionHandler(tueh);
+ t.start();
+
+ streamStatementsToRepo(in);
+ try
+ {
+ t.join();
+
+ // Check if we enoutered exception during processing and
+ // proxy throw if we have one
+ if (status.exception != null)
+ {
+ // Leave alone if already a ToifException
+ if (status.exception instanceof ToifException)
+ throw (ToifException) status.exception;
+ else throw new ToifException(status.exception);
+
+ }
+ }
+ catch (InterruptedException e)
+ {
+ LOG.error("Interrupted");
+ throw new ToifException("Interrupted");
+ }
+ }
+
+ /**
+ * @param kdmFiles2
+ * @throws IOException
+ * @throws ToifException
+ */
+ private void processKdmZip(List kdmFiles2) throws IOException, ToifException
+ {
+ ZipInputStream zip = null;
+ File file = null;
+ try
+ {
+ file = kdmFiles2.get(0);
+ zip = new ZipInputStream(new FileInputStream(file));
+ zip.getNextEntry();
+
+ // Read from the ZipInputStream as you would normally from any other
+ // input stream
+ System.out.println("\n" + file.getAbsolutePath());
+ streamStatementsToRepo(zip);
+ }
+
+ finally
+ {
+ try
+ {
+ if (zip != null)
+ {
+ zip.close();
+ }
+ }
+ catch (IOException e)
+ {
+ // just leave it alone
+ if (file == null)
+ file = new File(""); // just to be sure
+ LOG.error("unable to close zip stream" + file.getAbsolutePath());
+ }
+ }
+ }
+
+ /**
+ * process the tkdm files
+ *
+ * @param tkdmFiles
+ * the list of tkdm files to process.
+ * @return
+ * @throws IOException
+ * @throws ToifException
+ */
+ private RepositoryMerger processTkdmFiles(final List tkdmFiles) throws IOException, ToifException
+ {
+ final PipedInputStream in = new PipedInputStream();
+ final PipedOutputStream out = new PipedOutputStream(in);
+
+ String assemblyName = "Assembly";
+ int possition = outputLocation.getName().lastIndexOf(".");
+ if (possition != -1)
+ {
+ assemblyName = outputLocation.getName().substring(0, possition);
+ }
+
+ final RepositoryMerger kdmMerger = getTkdmMerger(new PrintWriter(out), assemblyName);
+ new Thread(new Runnable() {
+
+ @Override
+ public void run()
+ {
+ mergeTkdm(kdmMerger, tkdmFiles);
+ kdmMerger.close();
+ try
+ {
+ out.close();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+
+ streamStatementsToRepo(in);
+ return kdmMerger;
+ }
+
+ /**
+ * process the toif files.
+ *
+ * @param toifFiles
+ * list of toif files to process.
+ * @param smallestBigNumber2
+ * the smallest number from the end of the long scale. used for
+ * the bnodes at the end of the repository
+ * @param blacklistPath
+ * string that is the name of the directory of the project root.
+ * @return
+ * @throws IOException
+ * @throws ToifException
+ */
+ private void processToifFiles(final List toifFiles, Long id, Long smallestBigNumber2, String blacklistPath) throws IOException,
+ ToifException
+ {
+ PipedInputStream toifIn = new PipedInputStream();
+ final PipedOutputStream toifOut = new PipedOutputStream(toifIn);
+
+ // final ToifMerger toifMerger = getToifMerger(new PrintWriter(toifOut),
+ // id, smallestBigNumber2, blacklistPath);
+
+ PrintWriter w = new PrintWriter(toifOut);
+ final ToifMerger toifMerger = getToifMerger(w, id, smallestBigNumber2, blacklistPath);
+ new Thread(new Runnable() {
+
+ @Override
+ public void run()
+ {
+ Long offset = mergeToif(toifMerger, toifFiles);
+
+ setOffset(offset);
+ try
+ {
+ toifOut.close();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ }).start();
+
+ streamStatementsToRepo(toifIn);
+ }
+
+ /**
+ * stores the next id
+ *
+ * @param newId
+ * the new id
+ */
+ private void setNextId(Long newId)
+ {
+ if (newId > nextId)
+ {
+ nextId = newId;
+ }
+
+ }
+
+ /**
+ * sets the offset
+ *
+ * @param offset
+ * the offset from the local id to be the global id.
+ */
+ private void setOffset(Long offset)
+ {
+ this.offset = offset;
+
+ }
+
+ /**
+ * sets the smallest number near the end of the long scale.
+ *
+ * @param smallest
+ * the smallest number when counting down from the end of the
+ * long scale.
+ */
+ private void setSmallestBigNumber(Long smallest)
+ {
+ if (smallest < smallestBigNumber)
+ {
+ smallestBigNumber = smallest;
+ }
+
+ }
+
+ /**
+ * trims the string for use with creating a url.
+ *
+ * @param string
+ * string to trim.
+ * @return
+ */
+ private String trimForStatement(String string)
+ {
+ string = string.replace(" .", "");
+ string = string.replaceAll("<|>", "");
+
+ if (string.startsWith("\""))
+ {
+ string = new String(string.substring(1).intern());
+ }
+ if (string.endsWith("\""))
+ {
+ string = new String(string.substring(0, string.length() - 1).intern());
+ }
+ return string;
+ }
+
+ /*********************************************************
+ * Writes the stream of statements to the repository.
+ *
+ * @param in
+ * the stream of statements for the repository.
+ * @throws IOException
+ * @throws ToifException
+ **********************************************************/
+ private void streamStatementsToRepo(InputStream in) throws IOException, ToifException
+ {
+ try
+ {
+ // Scanner scanner = new Scanner(in);
+ // scanner.useDelimiter(" \\.\r?\n");
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+
+ Long count = 0L;
+ String line = null;
+
+ Set containers = new HashSet();
+
+ // Read File Line By Line
+ // while (scanner.hasNext())
+ while ((line = br.readLine()) != null)
+ {
+
+ if ("".equals(line))
+ {
+ continue;
+ }
+
+ if (line.startsWith("#"))
+ {
+ writer.write(line + "\n");
+ continue;
+ }
+ if (line.startsWith("KDM_Triple"))
+ {
+ writer.write(line + "\n");
+ continue;
+ }
+
+ // line = scanner.next();
+ line = line.trim();
+ // System.err.println(line);
+
+ if ("-m".equals(rOption) && (count % 10000 == 0))
+ {
+ System.out.print("\rprocessing KDM file... statement: " + count + " ");
+ }
+ count++;
+
+ String[] elements = line.split(" ", 3);
+ String subjectString = trimForStatement(elements[0]);
+
+ String number = subjectString.replaceAll("\\D+", "");
+
+ if (!number.isEmpty())
+ {
+ Long id = Long.parseLong(number);
+ if (id > nextId)
+ {
+ nextId = id;
+ }
+ }
+
+ if (!subjectString.startsWith("http"))
+ {
+ subjectString = "http://kdmanalytics.com/" + subjectString;
+ }
+
+ Resource subject = factory.createURI(subjectString);
+
+ // ** Add guard in case we do have element
+ if (elements.length < 2)
+ continue;
+
+ String predicateString = trimForStatement(elements[1]);
+
+ if (!predicateString.startsWith("http"))
+ {
+ predicateString = "http://org.omg.kdm/" + predicateString;
+ }
+
+ URI predicate = factory.createURI(predicateString);
+
+ Value object = determineObjectValue(elements);
+
+ if (object == null)
+ {
+ continue;
+ }
+
+ Statement statement = new StatementImpl(subject, predicate, object);
+
+ addStatement(statement);
+
+ // turn on storage if the type is correct. this is so that we
+ // dont store more than we need.
+ if ("http://org.omg.kdm/kdmType".equals(predicate.stringValue()))
+ {
+ if ("code/SharedUnit".equals(object.stringValue()))
+ {
+ containers.add(subjectString);
+ }
+ if ("code/CompilationUnit".equals(object.stringValue()))
+ {
+ containers.add(subjectString);
+ }
+ if ("code/CallableUnit".equals(object.stringValue()))
+ {
+ containers.add(subjectString);
+ }
+ if ("code/MethodUnit".equals(object.stringValue()))
+ {
+ containers.add(subjectString);
+ }
+ if ("code/ClassUnit".equals(object.stringValue()))
+ {
+ containers.add(subjectString);
+ }
+ }
+
+ // capture the toif points of interest.
+ if ("http://toif/path".equals(predicate.stringValue()))
+ {
+ toifPaths.add(statement);
+ }
+ if ("http://toif/lineNumber".equals(predicate.stringValue()))
+ {
+ lineNumbers.put(statement.getSubject().stringValue(), statement);
+ }
+
+ // have to capture the kdm points of interest
+ String stringValue = statement.getObject().stringValue();
+ if ("http://org.omg.kdm/SourceRef".equals(predicate.stringValue()))
+ {
+ stringValue = stringValue.replace(";;||java", "");
+ sourceRefStatements.put(stringValue, statement);
+ }
+ if ("http://org.omg.kdm/contains".equals(predicate.stringValue()) && containers.contains(subjectString))
+ {
+ kdmContains.put(object.stringValue(), subject.stringValue());
+ }
+ // attempt to add the statement to the sourcefiles (this checks
+ // to see if it is indeed a sourcefile).
+ if ("http://org.omg.kdm/path".equals(statement.getPredicate().stringValue()))
+ {
+ sourceFiles.put(stringValue, statement.getSubject());
+ }
+
+ }
+
+ // Close file to free resource
+ if (br != null)
+ br.close();
+
+ }
+ catch (RepositoryException e)
+ {
+ final String msg = "Repository exception while writing the statement to the repository.";
+ LOG.error(msg, e);
+ throw new ToifException(msg, e);
+ }
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/AttributeUtilities.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/AttributeUtilities.java
new file mode 100644
index 00000000..5049f288
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/AttributeUtilities.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Open Source
+ * Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+package com.kdmanalytics.toif.assimilator;
+
+import java.util.HashSet;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+
+public class AttributeUtilities
+{
+
+ static HashSet notAttributes = initLookup();
+
+ static HashSet references = initReferenceLookup();
+
+ /**
+ * The elements in this set are KDM/RDF pre-defined elements and should not
+ * be listed as attributes.
+ *
+ * @return
+ */
+ private static HashSet initLookup()
+ {
+ HashSet lookup = new HashSet();
+
+ lookup.add("name");
+ lookup.add("size");
+ lookup.add("kind");
+ lookup.add("pos");
+ lookup.add("contains");
+ lookup.add("snippet");
+ lookup.add("language");
+ lookup.add("kdmType");
+ lookup.add("path");
+ lookup.add("text");
+ lookup.add("__index");
+ lookup.add("__item");
+ lookup.add("external");
+
+ // Internally used by navigator
+ // lookup.add("lastUID");
+ // lookup.add("UID");
+
+ // Names used to indicate references
+ lookup.addAll(initReferenceLookup());
+ return lookup;
+ }
+
+ /**
+ *
+ * @return
+ */
+ private static HashSet initReferenceLookup()
+ {
+ HashSet lookup = new HashSet();
+ // Names used to indicate references
+ lookup.add("stereotype");
+ lookup.add("__group");
+ lookup.add("implementation");
+ lookup.add("__type");
+ lookup.add("__groupedCode");
+ lookup.add("__groupedBuild");
+ lookup.add("__groupedComponent");
+ lookup.add("__KDM_RELATION");
+ lookup.add("type");
+ lookup.add("to");
+ lookup.add("from");
+ lookup.add("file");
+ return lookup;
+ }
+
+ public static boolean isReference(String value)
+ {
+ return references.contains(value);
+ }
+
+ public static boolean isAttribute(String value)
+ {
+ return !notAttributes.contains(value);
+ }
+
+ public static boolean isAttribute(URI tag, Value value)
+ {
+ if (!(value instanceof Literal))
+ return false;
+ return !notAttributes.contains(tag.getLocalName());
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/DelayedRelation.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/DelayedRelation.java
new file mode 100644
index 00000000..ae4dc548
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/DelayedRelation.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Open Source
+ * Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+package com.kdmanalytics.toif.assimilator;
+
+import java.io.PrintWriter;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.apache.log4j.Logger;
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+class DelayedRelation
+{
+
+ private static final Logger LOG = Logger.getLogger(DelayedRelation.class);
+
+ URI subject = null;
+
+ URI predicate = null;
+
+ URI object = null;
+
+ String src = null;
+
+ String snk = null;
+
+ private boolean debug = false;
+
+ public DelayedRelation(URI subject, URI predicate, String snk)
+ {
+ this.subject = subject;
+ this.predicate = predicate;
+ this.snk = snk;
+ }
+
+ /**
+ *
+ * @param repository
+ * @param con
+ * @param nodeNames
+ * @throws RepositoryException
+ */
+ public void commit(PrintWriter out, Repository repository, RepositoryConnection con, XMLNode root, Map nodeNames) throws RepositoryException
+ {
+ if (debug)
+ {
+ System.err.println("============================================");
+ System.err.println("delayed relation commit...");
+ System.err.println("connection: " + con);
+ System.err.println("subject: " + subject);
+ System.err.println("object: " + object);
+ System.err.println("src: " + src);
+ System.err.println("snk: " + snk);
+ System.err.println("============================================");
+ }
+
+ if (subject == null && src == null)
+ {
+ LOG.error("Cannot commit delayed relation " + this);
+ return;
+ }
+ if (object == null && snk == null)
+ {
+ LOG.error("Cannot commit delayed relation " + this);
+ return;
+ }
+ if (subject == null)
+ {
+ LOG.error("Cannot commit delayed relation (null source) " + this);
+ return;
+ }
+ if (object == null)
+ {
+ for (StringTokenizer st = new StringTokenizer(snk); st.hasMoreTokens();)
+ {
+ String token = st.nextToken();
+ String target = nodeNames.get(token);
+ if (target == null)
+ {
+ // Is this using the gross node identification method? If so
+ // then
+ // try to find the target node.
+ if (root != null)
+ target = root.getURIByPath(token);
+ if (target == null)
+ {
+ LOG.error("Cannot commit delayed relation " + this);
+ continue;
+ }
+ }
+ ValueFactory f = repository.getValueFactory();
+ object = f.createURI(target);
+
+ if (debug)
+ {
+ System.err.println("adding statement... subject:" + subject + " predicate: " + predicate + " object: " + object);
+ System.err.println("repository: " + con.getRepository());
+ }
+
+ TripleStatementWriter.addOrWrite(out, con, subject, predicate, object);
+ }
+ }
+ }
+
+ public String toString()
+ {
+ return "DelayedRelation: " + subject + "(" + src + ")," + predicate + "," + object + "(" + snk + ")";
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTree.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTree.java
new file mode 100644
index 00000000..e6d34cd9
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTree.java
@@ -0,0 +1,306 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author adam
+ *
+ */
+public class FilePathTree
+{
+
+ /**
+ * The root node. this will always be the file name.
+ */
+ private Node file;
+
+ /**
+ * Create a new tree with the fileName as the roots information.
+ *
+ * @param fileName
+ * the name to give the root.
+ */
+ public FilePathTree(String fileName)
+ {
+ checkNotNull(fileName);
+ this.file = new Node(fileName);
+
+ }
+
+ /**
+ * match files based on a best path fit.
+ *
+ * @param path
+ * @return
+ */
+ public List getBestPath(List path)
+ {
+ List resultPath = new ArrayList();
+ Node node = null;
+
+ // null paths get an empty list
+ if (path == null)
+ {
+ return resultPath;
+ }
+ // empty paths also get an empty list.
+ else if (path.isEmpty())
+ {
+ return resultPath;
+ }
+ else
+ {
+ // the name of the file (the root of this tree).
+ String rootFile = file.getName();
+
+ // if the file names dont match, then return an empty list.
+ if (!path.get(0).equals(rootFile))
+ {
+ return resultPath;
+ }
+ // if the files do match then set the first node as the file,
+ // because we're gonna start here!
+ else
+ {
+ node = file;
+ resultPath.add(rootFile);
+ }
+ }
+
+ // for each of the directories in the path that we are trying to find.
+ // notice that we are starting from 1. this is the first directory.
+ for (int i = 1; i < path.size(); i++)
+ {
+ String directory = path.get(i);
+
+ // if the file has a parent that matches this directory, add it to
+ // the results and use it as the next file to search from.
+ if (node.hasParent(directory))
+ {
+ // move to the next directory.
+ node = node.getParent(directory);
+ // add it to the results.
+ resultPath.add(directory);
+ }
+ // if there is no match for the next directory, return with what we
+ // have.
+ else
+ {
+ return resultPath;
+ }
+
+ }
+
+ return resultPath;
+ }
+
+ /**
+ * @return the root
+ */
+ public Node getFile()
+ {
+ return file;
+ }
+
+ /**
+ * Add a parent-directory to the directory. Remember that we are working
+ * from the file, up the directories.
+ *
+ * @param dir
+ * The directory that we want to add the parent to.
+ * @param parentDirectory
+ * The parent of dir that we want to add to the path.
+ * @return The parent, as a node, which we've just added to the path.
+ */
+ public Node addParentDirectory(Node dir, String parentDirectory)
+ {
+ Node parent = new Node(parentDirectory);
+ dir.addParentDirectory(parent);
+ return parent;
+ }
+
+ /**
+ * The node for each of the directories/file in the tree.
+ *
+ * @author adam
+ *
+ */
+ public class Node
+ {
+
+ /**
+ * the name of this node. This will most likely be the directory name.
+ */
+ private String name;
+
+ /**
+ * A set of the nodes children.
+ */
+ private List parents = new ArrayList();
+
+ /**
+ * Create a new node which represents a directory/file.
+ *
+ * @param name
+ * the name of the directory or file.
+ */
+ public Node(String name)
+ {
+ this.name = name;
+ }
+
+ /**
+ * Add a parent to this directory. It sounds count-intuitive that this
+ * directory might have many parents. However, we must remember that it
+ * is not a directory but a directory-name. This means that there may be
+ * more then one directory with the same name, but they are contained in
+ * different directories.
+ *
+ * @param node
+ */
+ public void addParentDirectory(Node node)
+ {
+ if (!hasParent(node.getName()))
+ {
+ parents.add(node);
+ }
+ }
+
+ /**
+ * check to see if this node has a perent with the given name.
+ *
+ * @param parentName
+ * the name to search for in the set of parents.
+ * @return true if a parent is found with this name.
+ */
+ public boolean hasParent(String parentName)
+ {
+ return parentsContains(parentName);
+ }
+
+ /**
+ * @param parentName
+ * @return
+ */
+ private boolean parentsContains(String parentName)
+ {
+ for (Node node : parents)
+ {
+ if (parentName.equals(node.getName()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * get the parent from this file's parents which has the same name as
+ * parentName
+ *
+ * @param parentName
+ * the name of the parent that we are trying to find.
+ * @return the matching parent node. null if none is found.
+ */
+ public Node getParent(String parentName)
+ {
+ Iterator nodes = parents.iterator();
+
+ while (nodes.hasNext())
+ {
+ FilePathTree.Node node = (FilePathTree.Node) nodes.next();
+
+ if (parentName.equals(node.getName()))
+ {
+ return node;
+ }
+
+ }
+
+ return null;
+ }
+
+ /**
+ * Get the name of this node.
+ *
+ * @return the name The string name of this node.
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * set the name of this node.
+ *
+ * @param name
+ * the name to set
+ */
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj == null)
+ {
+ return false;
+ }
+ if (!(obj instanceof Node) && !(obj instanceof String))
+ {
+ return false;
+ }
+
+ String name2 = null;
+ if (obj instanceof Node)
+ {
+ Node other = (Node) obj;
+
+ name2 = other.name;
+ }
+
+ if (obj instanceof String)
+ {
+ name2 = (String) obj;
+ }
+
+ if (name == null)
+ {
+ if (name2 != null)
+ {
+ return false;
+ }
+ }
+ else if (!name.equals(name2))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTrie.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTrie.java
new file mode 100644
index 00000000..1c28bf91
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/FilePathTrie.java
@@ -0,0 +1,314 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Trie representing the file paths.
+ *
+ * @author adam
+ *
+ */
+public class FilePathTrie
+{
+
+ /**
+ * The root node. this will always be the file name.
+ */
+ private Node file;
+
+ /**
+ * Create a new tree with the fileName as the roots information.
+ *
+ * @param fileName
+ * the name to give the root.
+ */
+ public FilePathTrie(String fileName)
+ {
+ checkNotNull(fileName);
+ this.file = new Node(fileName);
+
+ }
+
+ /**
+ * find the best fitting path
+ *
+ * @param path
+ * the path for which to find the best fit for.
+ * @return the resulting best fit path.
+ */
+ public List getBestPath(List path)
+ {
+ List resultPath = new ArrayList();
+ Node node = null;
+
+ // null paths get an empty list
+ if (path == null)
+ {
+ return resultPath;
+ }
+ // empty paths also get an empty list.
+ else if (path.isEmpty())
+ {
+ return resultPath;
+ }
+ else
+ {
+ // the name of the file (the root of this tree).
+ String rootFile = file.getName();
+
+ // if the file names dont match, then return an empty list.
+ if (!path.get(0).equals(rootFile))
+ {
+ return resultPath;
+ }
+ // if the files do match then set the first node as the file,
+ // because we're gonna start here!
+ else
+ {
+ node = file;
+ resultPath.add(rootFile);
+ }
+ }
+
+ // for each of the directories in the path that we are trying to find.
+ // notice that we are starting from 1. this is the first directory.
+ for (int i = 1; i < path.size(); i++)
+ {
+ String directory = path.get(i);
+
+ // if the file has a parent that matches this directory, add it to
+ // the results and use it as the next file to search from.
+ if (node.hasParent(directory))
+ {
+ // move to the next directory.
+ node = node.getParent(directory);
+ // add it to the results.
+ resultPath.add(directory);
+ }
+ // if there is no match for the next directory, return with what we
+ // have.
+ else
+ {
+ return resultPath;
+ }
+
+ }
+
+ return resultPath;
+ }
+
+ /**
+ * returns the root file.
+ *
+ * @return the root
+ */
+ public Node getFile()
+ {
+ return file;
+ }
+
+ /**
+ * Add a parent-directory to the directory. Remember that we are working
+ * from the file, up the directories.
+ *
+ * @param dir
+ * The directory that we want to add the parent to.
+ * @param parentDirectory
+ * The parent of dir that we want to add to the path.
+ * @return The parent, as a node, which we've just added to the path.
+ */
+ public Node addParentDirectory(Node dir, String parentDirectory)
+ {
+ Node parent = new Node(parentDirectory);
+ dir.addParentDirectory(parent);
+ return parent;
+ }
+
+ /**
+ * The node for each of the directories/file in the tree.
+ *
+ * @author adam
+ *
+ */
+ public class Node
+ {
+
+ /**
+ * the name of this node. This will most likely be the directory name.
+ */
+ private String name;
+
+ /**
+ * A set of the nodes children.
+ */
+ private List parents = new ArrayList();
+
+ /**
+ * Create a new node which represents a directory/file.
+ *
+ * @param name
+ * the name of the directory or file.
+ */
+ public Node(String name)
+ {
+ this.name = name;
+ }
+
+ /**
+ * Add a parent to this directory. It sounds count-intuitive that this
+ * directory might have many parents. However, we must remember that it
+ * is not a directory but a directory-name. This means that there may be
+ * more then one directory with the same name, but they are contained in
+ * different directories.
+ *
+ * @param node
+ */
+ public void addParentDirectory(Node node)
+ {
+ if (!hasParent(node.getName()))
+ {
+ parents.add(node);
+ }
+ }
+
+ /**
+ * check to see if this node has a perent with the given name.
+ *
+ * @param parentName
+ * the name to search for in the set of parents.
+ * @return true if a parent is found with this name.
+ */
+ public boolean hasParent(String parentName)
+ {
+ return parentsContains(parentName);
+ }
+
+ /**
+ * is there a node within this node with the name ...
+ *
+ * @param parentName
+ * the name to try to find.
+ * @return returns true if a node with the same name as parent name.
+ */
+ private boolean parentsContains(String parentName)
+ {
+ for (Node node : parents)
+ {
+ if (parentName.equals(node.getName()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * get the parent from this file's parents which has the same name as
+ * parentName
+ *
+ * @param parentName
+ * the name of the parent that we are trying to find.
+ * @return the matching parent node. null if none is found.
+ */
+ public Node getParent(String parentName)
+ {
+ Iterator nodes = parents.iterator();
+
+ while (nodes.hasNext())
+ {
+ FilePathTrie.Node node = (FilePathTrie.Node) nodes.next();
+
+ if (parentName.equals(node.getName()))
+ {
+ return node;
+ }
+
+ }
+
+ return null;
+ }
+
+ /**
+ * Get the name of this node.
+ *
+ * @return the name The string name of this node.
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * set the name of this node.
+ *
+ * @param name
+ * the name to set
+ */
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj == null)
+ {
+ return false;
+ }
+ if (!(obj instanceof Node) && !(obj instanceof String))
+ {
+ return false;
+ }
+
+ String name2 = null;
+ if (obj instanceof Node)
+ {
+ Node other = (Node) obj;
+
+ name2 = other.name;
+ }
+
+ if (obj instanceof String)
+ {
+ name2 = (String) obj;
+ }
+
+ if (name == null)
+ {
+ if (name2 != null)
+ {
+ return false;
+ }
+ }
+ else if (!name.equals(name2))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.java
new file mode 100644
index 00000000..1fefed51
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.java
@@ -0,0 +1,55 @@
+/**
+ * KDM Analytics Inc (2014)
+ *
+ * @Author Adam Nunn
+ * @Date Mar 24, 2014
+ */
+
+package com.kdmanalytics.toif.assimilator;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Records the maximum xmi:id encountered while parsing a KDM file
+ *
+ * @author Kyle Girard
+ */
+public class KdmXmiIdHandler extends DefaultHandler {
+
+ /** The current maximum xmi:id. */
+ private long maxId = 0;
+
+ /**
+ * If this element has an xmi:id, if it has an id check against the current
+ * maximum id and record a new max if required.
+ *
+ * @throws SAXException if the id is malformed
+ */
+ @Override
+ public void startElement(final String namespaceURI,
+ final String sName,
+ final String qName,
+ final Attributes attrs) throws SAXException {
+ XMLNode node = new XMLNode(namespaceURI, sName, qName, attrs);
+ String stringId = node.getAttribute("xmi:id");
+ if (stringId != null) {
+ try {
+ long id = Long.parseLong(stringId);
+ maxId = Math.max(id, maxId);
+ } catch (NumberFormatException e) {
+ throw new SAXException(e);
+ }
+ }
+ }
+
+ /**
+ * Return the maximum xmi:id. Note this value only valid once parsing has completed
+ *
+ * @return
+ */
+ public long getMaxId() {
+ return maxId;
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmlHandler.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmlHandler.java
new file mode 100644
index 00000000..cf66e6a7
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/KdmXmlHandler.java
@@ -0,0 +1,426 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the accompanying
+ * materials are made available under the terms of the Open Source Initiative OSI - Open Software
+ * License v3.0 which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+
+package com.kdmanalytics.toif.assimilator;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+import org.apache.log4j.Logger;
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ *
+ * @author Adam Nunn
+ *
+ */
+public class KdmXmlHandler extends DefaultHandler {
+
+ private static final String kdmNSHost = "org.omg.kdm";
+
+ private static final String kdmNS = "http://" + kdmNSHost + "/";
+
+ /** Logger for the KdmXmlHandler class. */
+ private static final Logger LOG = Logger.getLogger(KdmXmlHandler.class);
+
+ private Repository repository = null;
+
+ private RepositoryConnection con = null;
+
+ private XMLNode root = null;
+
+ private final Map nodeNames = new HashMap();
+
+ private final List postLoad = new ArrayList();
+
+ private final Stack nodes = new Stack();
+
+ private final boolean storeHierarchy = false;
+
+ private final boolean debug = false;
+
+ //private Long nextId = 0L;
+ private long initialId;
+ private long nextId;
+
+ private long smallestBigNumber = Long.MAX_VALUE;
+
+ private PrintWriter out;
+
+ public KdmXmlHandler(Repository repository) {
+ this.repository = repository;
+ }
+
+ /**
+ * Construct KdmXmlHandler
+ *
+ * @param initialMaxId the maximum id in the file to be parsed. Used as an
+ * initial subject id for those elements that are
+ * missing xmi:id's
+ */
+ public KdmXmlHandler(PrintWriter out, Repository repository, long initialMaxId) {
+ this.out = out;
+ this.repository = repository;
+ nextId = initialMaxId + 1;
+ initialId = nextId;
+ }
+
+
+ /**
+ * Add the specified child to the specified parent
+ *
+ * @param parent
+ * @param child
+ * @throws RepositoryException
+ */
+ protected void addChild(XMLNode parent, XMLNode child) throws RepositoryException {
+ // I need the nested nodes to remember as well, for finding XMI path
+ // information.
+ // Only do this if we need to.
+ if (storeHierarchy) {
+ parent.add(child);
+ }
+
+ // Do not output attributes as children. They are being output as
+ // direct rdf tuplets.
+ // Since the node has not already been commited, the attribute is
+ // added here.
+
+ if ("attribute".equals(child.getName())) {
+ ValueFactory f = repository.getValueFactory();
+ URI key = f.createURI(kdmNS, child.getAttribute("tag"));
+ Literal value = f.createLiteral(child.getAttribute("value"));
+ TripleStatementWriter.addOrWrite(out, con, f.createURI(parent.getURIString()), key, value);
+ return;
+ }
+
+ // Standard contained node
+
+ ValueFactory f = repository.getValueFactory();
+ URI predicate = f.createURI(kdmNS, "contains");
+
+ TripleStatementWriter.addOrWrite(out, con, f.createURI(parent.getURIString()), predicate,
+ f.createURI(child.getURIString()));
+ doCommit();
+
+ }
+
+ /**
+ * Write the XMLNode into the RDF database
+ *
+ * @param source
+ * @throws RepositoryException
+ */
+ protected void commitNode(XMLNode source) throws RepositoryException {
+ // Attributes are handled differently to conserve space
+ if ("attribute".equals(source.getName())) { return; }
+
+ // This is a standard node, not an attribute.
+ setRDFAttribute(source, "kdmType", source.getKDMType());
+
+ Map attrs = source.getAttributes();
+ if (attrs != null) {
+ for (Iterator it = attrs.keySet().iterator(); it.hasNext();) {
+ String key = it.next();
+ // Ignore the special xmi values
+ if (key.contains(":")) {
+ continue;
+ }
+ String value = attrs.get(key);
+
+ setRDFAttribute(source, key, value);
+ }
+ }
+
+ // Add the references
+ Set referenceTypes = source.getReferenceTypes();
+ if (referenceTypes != null) {
+ for (Iterator it = referenceTypes.iterator(); it.hasNext();) {
+ String key = it.next();
+ List references = source.getReferences(key);
+ for (Iterator rit = references.iterator(); rit.hasNext();) {
+ String ref = rit.next();
+ ValueFactory f = repository.getValueFactory();
+ URI subject = f.createURI(source.getURIString());
+ URI predicate = f.createURI(kdmNS, key);
+
+ postLoad.add(new DelayedRelation(subject, predicate, ref));
+ }
+ }
+ // con.commit();
+ }
+ }
+
+ /**
+ * do the commit.
+ *
+ * @throws RepositoryException
+ */
+ private void doCommit() throws RepositoryException {
+ LOG.debug("commiting...");
+ con.commit();
+ }
+
+ /**
+ * Element ended. Pop the XMLNode off of the stack.
+ *
+ */
+ @Override
+ public void endElement(String namespaceURI, String sName, String qName) throws SAXException {
+ XMLNode node = nodes.pop();
+
+ // Some nodes are represented by a special compressed format,
+ // add these to the repository in a special way.
+ // These nodes (and their children) are prevented from writing
+ // in the conventional way in the "startElement" method.
+ //
+ // file;startline:startpos-endline:endpos;language;path|snippet|language
+ if ("source/SourceRef".equals(node.getKDMType())) {
+ List regions = node.children;
+ StringBuilder sb = new StringBuilder();
+ for (XMLNode region : regions) {
+ String type = region.getKDMType();
+ if (!"source/SourceRegion".equals(type)) {
+ continue;
+ }
+ List file = region.getReferences("file");
+ String startLine = region.getAttribute("startLine");
+ String startPos = region.getAttribute("startPos");
+ String endLine = region.getAttribute("endLine");
+ String endPos = region.getAttribute("endPos");
+ String language = region.getAttribute("language");
+ String path = region.getAttribute("path");
+ if (file != null && file.size() > 0) {
+ sb.append(file.get(0));
+ }
+ sb.append(";");
+ if (startLine != null) {
+ sb.append(startLine);
+ if (startPos != null) {
+ sb.append(":").append(startPos);
+ }
+ if (endLine != null) {
+ sb.append("-").append(endLine);
+ if (endPos != null) {
+ sb.append(":").append(endPos);
+ }
+ }
+ }
+ sb.append(";");
+ if (language != null) {
+ sb.append(language);
+ }
+ sb.append(";");
+ if (path != null) {
+ sb.append(path);
+ }
+ }
+ String snippet = node.getAttribute("snippet");
+ String language = node.getAttribute("language");
+ sb.append("|");
+ if (snippet != null) {
+ sb.append(snippet.replaceAll(",", ",").replaceAll("\\|", "&pipe;"));
+ }
+ sb.append("|");
+ if (language != null) {
+ sb.append(language);
+ }
+
+ if (!nodes.isEmpty()) {
+ XMLNode parent = nodes.peek();
+ try {
+ setRDFAttribute(parent, "SourceRef", sb.toString());
+ } catch (RepositoryException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * get the next id
+ *
+ * @return the next id
+ */
+ public Long getNextId() {
+ return nextId;
+ }
+
+ /**
+ * get the smallest available number at the end of the long scale.
+ *
+ * @return the smallest number available at the end of the long scale.
+ */
+ public long getSmallestBigNumber() {
+ return smallestBigNumber;
+ }
+
+ /**
+ * Commit postload data
+ *
+ */
+ public void postLoad() throws RepositoryException {
+ try {
+ con = repository.getConnection();
+
+ // Commit postLoad data
+ for (Iterator it = postLoad.iterator(); it.hasNext();) {
+ DelayedRelation rel = it.next();
+
+ rel.commit(out, repository, con, root, nodeNames);
+ doCommit();
+ }
+ } finally {
+ con.commit();
+ con.close();
+ }
+
+ }
+
+ /**
+ * Add the specified RDF tuple
+ *
+ * @param key
+ * attribute key
+ * @param value
+ * attribute value
+ */
+ public void setRDFAttribute(XMLNode source, String name, String value) throws RepositoryException {
+
+ ValueFactory f = repository.getValueFactory();
+ Literal literal = f.createLiteral(value);
+ URI predicate = f.createURI(kdmNS, name);
+
+ if (con == null) {
+ con = repository.getConnection();
+ }
+
+ if (debug) {
+ System.err.println("==========================================================");
+ System.err.println("the connection is: " + con);
+ System.err.println("the source is: " + source);
+ System.err.println("the predicate is: " + predicate);
+ System.err.println("the literal is: " + literal);
+ System.err.println("==========================================================");
+ }
+
+ TripleStatementWriter.addOrWrite(out, con, f.createURI(source.getURIString()), predicate, literal);
+ doCommit();
+ }
+
+ /**
+ * Beginning of the document.
+ *
+ */
+ @Override
+ public void startDocument() throws SAXException {
+ }
+
+ /**
+ * New element found.
+ *
+ */
+ @Override
+ public void startElement(String namespaceURI, String sName, String qName, Attributes attrs)
+ throws SAXException {
+
+ XMLNode node = new XMLNode(namespaceURI, sName, qName, attrs);
+ String stringId = node.getAttribute("xmi:id");
+
+
+ if (stringId == null) {
+ node.setId(++nextId);
+ } else {
+ try {
+ long id = Long.parseLong(stringId);
+ if (id > initialId) {
+ throw new SAXException("ID Overlap:" + id);
+ }
+ } catch (NumberFormatException e){
+ throw new SAXException(e);
+ }
+ }
+
+// else {
+// try {
+// long id = Long.parseLong(stringId);
+// if (id > nextId) {
+// nextId = id;
+// } else if (id == nextId) {
+// ++nextId;
+// }
+// } catch (NumberFormatException e) {
+// throw new SAXException(e);
+// }
+// }
+
+ if ("source/SourceRef".equals(node.getKDMType())
+ || "source/SourceRegion".equals(node.getKDMType())) {
+ // These elements are represented in the repository in
+ // a special "compressed" format and should not be output
+ // using the conventional methods.
+ if (!nodes.isEmpty()) {
+ XMLNode parent = nodes.lastElement();
+ parent.add(node);
+ }
+ nodes.push(node);
+ return;
+ }
+
+ // KDM Type needs to be output before any more information about the
+ // node.
+ try {
+ commitNode(node);
+ } catch (RepositoryException ex) {
+ throw new SAXException(ex);
+ }
+
+ // Process the node
+ XMLNode parent = null;
+ if (!nodes.isEmpty()) {
+ parent = nodes.lastElement();
+ }
+ nodes.push(node);
+
+ try {
+ if (parent != null) {
+ addChild(parent, node);
+ }
+ } catch (RepositoryException ex) {
+ throw new SAXException(ex);
+ }
+
+ // Remember IDs for postload and non xmi:id files (barf)
+ if (stringId != null) {
+ String uri = node.getURIString();
+ nodeNames.put(stringId, uri);
+ }
+ }
+
+ /**
+ * End of the document. Write all postLoad elements
+ *
+ */
+ public void stopDocument() throws SAXException {
+ //Nothing to do
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/TripleStatementWriter.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/TripleStatementWriter.java
new file mode 100644
index 00000000..a18eadcb
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/TripleStatementWriter.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2014 KDM Analytics, Inc. All rights reserved. This program and the accompanying
+ * materials are made available under the terms of the Open Source Initiative OSI - Open Software
+ * License v3.0 which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+
+
+package com.kdmanalytics.toif.assimilator;
+
+import java.io.PrintWriter;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.Resource;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+import com.kdmanalytics.kdm.repositoryMerger.RepositoryMerger;
+import com.kdmanalytics.kdm.repositoryMerger.StatementWriter;
+
+
+/**
+ * Triple statement writer utility
+ *
+ * @author Kyle Girard
+ * @Date Mar 20, 2014
+ *
+ */
+public final class TripleStatementWriter {
+
+ /**
+ * @param repositoryConnection
+ * @param arg0
+ * @param arg1
+ * @param arg2
+ * @param arg3
+ * @throws RepositoryException
+ */
+ public static void addOrWrite(PrintWriter writer, RepositoryConnection repositoryConnection,
+ Resource arg0, URI arg1, Value arg2, Resource... arg3) throws RepositoryException {
+ if (writer == null) {
+ repositoryConnection.add(arg0, arg1, arg2, arg3);
+ } else {
+ ValueFactory f = repositoryConnection.getValueFactory();
+
+ if (arg2 instanceof Literal) {
+ StatementWriter sw = new StatementWriter(writer, RepositoryMerger.NTRIPLES);
+ sw.print(f.createURI(arg0.stringValue()), f.createURI(arg1.stringValue()),
+ f.createLiteral(arg2.stringValue()));
+ } else {
+ StatementWriter sw = new StatementWriter(writer, RepositoryMerger.NTRIPLES);
+ sw.print(f.createURI(arg0.stringValue()), f.createURI(arg1.stringValue()),
+ f.createURI(arg2.stringValue()));
+ }
+
+ }
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/XMLNode.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/XMLNode.java
new file mode 100644
index 00000000..5a59d0b2
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/XMLNode.java
@@ -0,0 +1,651 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and
+ * the accompanying materials are made available under the terms of the Open
+ * Source Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at
+ * http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+
+package com.kdmanalytics.toif.assimilator;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.log4j.Logger;
+import org.xml.sax.Attributes;
+
+public class XMLNode
+{
+
+ private static final Logger LOG = Logger.getLogger(XMLNode.class);
+
+ /**
+ * Init size for hashmaps, done for optimization reasons
+ *
+ */
+ private static final int HASHMAP_SIZE = 30;
+
+ public static final String modelNSHost = "kdmanalytics.com";
+
+ public static final String modelNS = "http://" + modelNSHost + "/";
+
+ /**
+ * simple name
+ */
+ private String sName;
+
+ /**
+ * Contains
+ *
+ */
+ List children = null;
+
+ /**
+ * XML Attributes that indicate literal values
+ *
+ */
+ private Map attributes = null;
+
+ /**
+ * Multiple references
+ *
+ */
+ Map> references = null;
+
+ private String id = null;
+
+ /**
+ * Map of sName to xmi:types
+ *
+ */
+ static Map kdmTypes = new HashMap(HASHMAP_SIZE);
+
+ static Set stringFields = new HashSet();
+
+ {
+ kdmTypes.put("kdm:Segment", "kdm/Segment");
+ kdmTypes.put("itemUnit", "code/ItemUnit");
+ kdmTypes.put("indexUnit", "code/IndexUnit");
+ kdmTypes.put("entryFlow", "action/EntryFlow");
+ kdmTypes.put("attribute", "kdm/Attribute");
+ kdmTypes.put("source", "source/SourceRef");
+ kdmTypes.put("region", "source/SourceRegion");
+ kdmTypes.put("parameterUnit", "code/ParameterUnit");
+ kdmTypes.put("audit", "kdm/Audit");
+ kdmTypes.put("abstraction", "action/ActionElement");
+ kdmTypes.put("extensionFamily", "kdm/ExtensionFamily");
+ kdmTypes.put("stereotype", "kdm/Stereotype");
+ kdmTypes.put("tag", "kdm/TagDefinition");
+ kdmTypes.put("dataElement", "data/DataEvent");
+ kdmTypes.put("platformElement", "platform/PlatformElement");
+
+ stringFields.add("name");
+ stringFields.add("snippet");
+ }
+
+ public XMLNode()
+ {
+ id = "" + UniqueID.get();
+ }
+
+ /**
+ * Parse the node information. Note that the "Attributes" here are XML
+ * Attributes, not KDM attributes.
+ *
+ * @param ns
+ * @param sName
+ * @param qName
+ * @param attrs
+ */
+ public XMLNode(String ns, String sName, String qName, Attributes attrs)
+ {
+
+ children = new ArrayList();
+ this.sName = sName;
+ if ("".equals(sName))
+ this.sName = qName; // Not namespace aware
+
+ int size = attrs.getLength();
+ for (int i = 0; i < size; i++)
+ {
+ String key = attrs.getLocalName(i); // Attr name
+ if ("".equals(key))
+ key = attrs.getQName(i);
+
+ // Special cases
+ // Stereotype/tag "type" is an attribute, not a reference
+ if ("stereotype".equals(this.sName) && "type".equals(key))
+ addAttribute(key, attrs.getValue(key));
+ else if ("tag".equals(this.sName) && "type".equals(key))
+ addAttribute(key, attrs.getValue(key));
+
+ // Some attributes are really references
+ else if (AttributeUtilities.isReference(key))
+ addReference(key, attrs.getValue(key));
+
+ // Unescape the fields which likely contain escaped HTML
+ else if (stringFields.contains(key))
+ {
+ String value = attrs.getValue(key);
+ try
+ {
+ // value = StringEscapeUtils.unescapeHtml4(value);
+ // value = StringEscapeUtils.unescapeXml(value);
+ value = StringEscapeUtils.unescapeHtml3(value);
+ }
+ catch (StringIndexOutOfBoundsException e)
+ {
+ // String was most likely '&' which causes commons.lang3 to
+ // throw... ignore it
+ if (!value.contains("&"))
+ {
+ throw e;
+ }
+ }
+ addAttribute(key, value);
+ }
+ // Normal attribute
+ else
+ {
+ addAttribute(key, attrs.getValue(key));
+ }
+ }
+
+ // Use the xmiLid if it exists
+ id = getAttribute("xmi:id");
+ if (id == null)
+ id = "" + UniqueID.get();
+ }
+
+ /**
+ * Return the index of the specified child.
+ *
+ */
+ public int indexOf(XMLNode node)
+ {
+ return children.indexOf(node);
+ }
+
+ /**
+ * Return the index of the specified child, only counting nodes of the same
+ * kind ahead of it.
+ *
+ */
+ public int indexOfByType(XMLNode node)
+ {
+ if (node == null)
+ return -1;
+
+ int count = 0;
+ String type = node.getName();
+
+ for (Iterator it = children.iterator(); it.hasNext();)
+ {
+ XMLNode nextNode = it.next();
+ if (nextNode.equals(node))
+ return count;
+ // If a node of the same type is found then increment the counter.
+ if (nextNode.getName().equals(type))
+ count++;
+ }
+ return -1;
+ }
+
+ /**
+ * Return the number of contained children
+ *
+ * @return
+ */
+ public int size()
+ {
+ return children.size();
+ }
+
+ /**
+ * Add the reference to the appropriate list
+ *
+ * @param key
+ * @param value
+ */
+ private void addReference(String key, String value)
+ {
+ if (references == null)
+ references = new HashMap>(HASHMAP_SIZE);
+ if (!references.containsKey(key))
+ references.put(key, new ArrayList());
+ List list = references.get(key);
+ list.add(value);
+ }
+
+ /**
+ * Get a list of the various reference types we found.
+ *
+ * @return
+ */
+ public Set getReferenceTypes()
+ {
+ if (references == null)
+ return null;
+ return references.keySet();
+ }
+
+ /**
+ * Return the list of references of the specified type
+ *
+ * @param type
+ * @return
+ */
+ public List getReferences(String type)
+ {
+ if (references == null)
+ return null;
+ return references.get(type);
+ }
+
+ /**
+ * Add the specified attribute to the list of attributes
+ *
+ * @param key
+ * @param value
+ */
+ private void addAttribute(String key, String value)
+ {
+ if (attributes == null)
+ attributes = new HashMap(HASHMAP_SIZE);
+ attributes.put(key, value);
+ }
+
+ /**
+ * set the id.
+ *
+ * @param id
+ * the id to set.
+ */
+ public void setId(Long id)
+ {
+ this.id = id.toString();
+ }
+
+ /**
+ * get the simple name
+ *
+ * @return the simple name
+ */
+ public String getName()
+ {
+ return sName;
+ }
+
+ /**
+ * check if the simple name matches name
+ *
+ * @param name
+ * the name to check
+ * @return true if simple name matches name
+ */
+ public boolean isType(String name)
+ {
+ if (sName == name)
+ return true;
+ if (sName == null)
+ return false;
+ return sName.equals(name);
+ }
+
+ /**
+ * get the type.
+ *
+ * @return the simple name
+ */
+ public String getType()
+ {
+ return sName;
+ }
+
+ /**
+ * get the attributes
+ *
+ * @return the attributes.
+ */
+ public Map getAttributes()
+ {
+ return attributes;
+ }
+
+ /**
+ * get attribute based on key
+ *
+ * @param key
+ * the key of the attribute whos value you want
+ * @return the value of the attribute.
+ */
+ public String getAttribute(String key)
+ {
+ if (attributes == null)
+ return null;
+ return attributes.get(key);
+ }
+
+ /**
+ * does the attribute have the value ...
+ *
+ * @param key
+ * the attribute key
+ * @param value
+ * the attribute value.
+ * @return true if the attribute is contained.
+ */
+ public boolean hasAttribute(String key, String value)
+ {
+ if (attributes == null)
+ return false;
+ String myValue = attributes.get(key);
+ return myValue.equals(value);
+ }
+
+ /**
+ * Assemble the URI string for the node
+ *
+ * @return
+ */
+ public String getURIString()
+ {
+ return modelNS + id;
+ }
+
+ /**
+ * Return the detected KDM type
+ *
+ * @return
+ */
+ protected String getKDMType()
+ {
+ String type = getAttribute("xmi:type");
+ if (type == null)
+ type = getAttribute("xsi:type");
+ if (type != null)
+ return type.replace(':', '/');
+
+ type = kdmTypes.get(sName);
+ if (type != null)
+ return type;
+
+ return "unknown";
+ }
+
+ /**
+ * return as string.
+ */
+ public String toString()
+ {
+ return getStartString() + getEndString();
+ }
+
+ /**
+ * Return the starting string. This is often used when we are echoing
+ * straight to output and do not want to store the data.
+ *
+ * @return
+ */
+ public String getStartString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<");
+ sb.append(sName);
+ if (attributes != null)
+ {
+ for (Iterator it = attributes.keySet().iterator(); it.hasNext();)
+ {
+ String key = it.next();
+ String value = attributes.get(key);
+ sb.append(" " + key + "=\"" + value + "\"");
+ }
+ }
+ sb.append(">");
+ return sb.toString();
+ }
+
+ /**
+ * Return the ending string. This is often used when we are echoing straight
+ * to output and do not want to store the data.
+ *
+ * @return
+ */
+ public String getEndString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("");
+ sb.append(sName);
+ sb.append(">");
+ return sb.toString();
+ }
+
+ /**
+ * add a child
+ *
+ * @param child
+ * the node to add
+ */
+ public void add(XMLNode child)
+ {
+ children.add(child);
+ }
+
+ public int hashCode()
+ {
+ return getURIString().hashCode();
+ }
+
+ public boolean equals(Object o)
+ {
+ if (!(o instanceof XMLNode))
+ return false;
+ if (o.hashCode() == hashCode())
+ return true;
+ return false;
+ }
+
+ /**
+ * print the children.
+ *
+ * @param out
+ * the writer for output.
+ */
+ public void printChildrenRDF(PrintWriter out)
+ {
+ for (Iterator it = children.iterator(); it.hasNext();)
+ {
+ XMLNode child = it.next();
+ out.println("");
+ }
+ }
+
+ /**
+ * Using the XMI path string, find the referenced node and return its URI.
+ *
+ * @param token
+ * @return
+ */
+ public String getURIByPath(String iPath)
+ {
+ // System.err.println(" * " + iPath);
+ // Strip the preceding slashes.
+ String path = iPath;
+ while (path.startsWith("/"))
+ path = path.substring(1);
+
+ String token = null;
+ int index = path.indexOf("/");
+ if (index >= 0)
+ {
+ token = path.substring(0, index);
+ path = path.substring(index + 1);
+ }
+ else
+ {
+ token = path;
+ path = null;
+ }
+
+ index = token.indexOf(".");
+ String type = null;
+ // form: name.
+ if (index >= 0)
+ {
+ type = token.substring(0, index);
+ String displacement = token.substring(index + 1);
+ try
+ {
+ // index = Integer.parseInt(displacement);
+ index = parseIntChecked(displacement);
+ }
+ catch (NumberFormatException ex)
+ {
+ LOG.error("Cannot parse fragment from (" + iPath + ")");
+ LOG.error(ex.getLocalizedMessage(), ex);
+ return null;
+ }
+ }
+ // form: // or /0/
+ else
+ {
+ if (token.equals("*"))
+ index = 0;
+ else
+ {
+ try
+ {
+ index = Integer.parseInt(token);
+ LOG.warn("Cannot find node with id/path " + iPath);
+ }
+ catch (NumberFormatException ex)
+ {
+ }
+ index = 0;
+ }
+ }
+
+ int count = -1;
+ for (Iterator it = children.iterator(); it.hasNext();)
+ {
+ XMLNode node = it.next();
+ if (type == null)
+ count++;
+ else if (type.equals("@" + node.getType()))
+ count++;
+ if (count == index)
+ {
+ if (path == null)
+ return node.getURIString();
+ return node.getURIByPath(path);
+ }
+ }
+ LOG.error("could not get element by URI path " + iPath);
+ return null;
+ }
+
+ /**
+ * Parses the string argument as a signed decimal integer. Faster than
+ * Integer.parseInt since it assumes radix 10
+ *
+ * @param intString
+ * a String containing the int representation to be parsed
+ *
+ * @return the integer value represented by the argument in decimal.
+ */
+ public static int parseIntChecked(final String intString)
+ {
+ // Ensure that we have
+ checkNotNull(intString, "A null string cannot be parsed");
+
+ // Check for a sign.
+ int num = 0;
+ int sign = -1;
+ final int len = intString.length();
+ final char ch = intString.charAt(0);
+ if (ch == '-')
+ {
+ if (len == 1)
+ {
+ throw new NumberFormatException("Missing digits: " + intString);
+ }
+ sign = 1;
+ }
+ else
+ {
+ final int d = ch - '0';
+ if ((d < 0) || (d > 9))
+ {
+ throw new NumberFormatException("Malformed: " + intString);
+ }
+ num = -d;
+ }
+
+ // Build the number.
+ final int max = (sign == -1) ? -Integer.MAX_VALUE : Integer.MIN_VALUE;
+ final int multmax = max / 10;
+ int i = 1;
+ while (i < len)
+ {
+ final int d = intString.charAt(i++) - '0';
+ if ((d < 0) || (d > 9))
+ {
+ throw new NumberFormatException("Malformed: " + intString);
+ }
+ if (num < multmax)
+ {
+ throw new NumberFormatException("Over/underflow: " + intString);
+ }
+ num *= 10;
+ if (num < (max + d))
+ {
+ throw new NumberFormatException("Over/underflow: " + intString);
+ }
+ num -= d;
+ }
+
+ return sign * num;
+ }
+}
+
+/**
+ * A class used to generate unique IDs. This is required on import into the RDF
+ * database, and is VERY nice to have in the XML output as opposed to the nasty
+ * position dependent naming conventions that EMF appears to use otherwise.
+ *
+ * Not that I use EMF really anymore.
+ *
+ */
+
+class UniqueID
+{
+
+ /**
+ * This is the initial id number. All IDs are assigned sequentially from
+ * here.
+ *
+ * Set the initial value to a known number for debugging (so numbers are
+ * consistent.
+ *
+ */
+ static long current = System.currentTimeMillis();
+
+ /**
+ * Get the next ID number in sequence.
+ *
+ * @return
+ */
+ static public synchronized long get()
+ {
+ return current++;
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/config/cxx.cfg b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.java
new file mode 100644
index 00000000..7b13b3e2
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Open Source
+ * Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+package com.kdmanalytics.toif.assimilator.exceptions;
+
+/**
+ * an exception for when the arguments given to the running process are bad.
+ *
+ * @author adam
+ *
+ */
+public class AssimilatorArgumentException extends Exception
+{
+
+ private static final long serialVersionUID = 1L;
+
+ String message = null;
+
+ /**
+ * constructor with a message.
+ *
+ * @param message
+ * the exception message.
+ */
+ public AssimilatorArgumentException(String message)
+ {
+ super(message);
+ this.message = message;
+ }
+
+ /**
+ * constructor no arguments. makes an unknown exception.
+ */
+ public AssimilatorArgumentException()
+ {
+ this.message = "unknown";
+ }
+
+ /**
+ * return the message for this exception.
+ */
+ public String getMessage()
+ {
+ return message;
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.java
new file mode 100644
index 00000000..eb38a5dc
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.java
@@ -0,0 +1,88 @@
+/**
+ * KDM Analytics Inc (2012)
+ *
+ * @Author Adam Nunn
+ * @Date Jul 10, 2012
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+/**
+ * Class to store values about the statements. these values are used in the
+ * equality to determine if the statement has been seen.
+ *
+ * @author adam
+ *
+ */
+public class SeenStatement
+{
+
+ private String subjectURI;
+
+ private String predicateURI;
+
+ private String objectURI;
+
+ /**
+ * create a new statement.
+ *
+ * @param subjectURI
+ * the subject of the statement
+ * @param predicateURI
+ * the predicate of the statement
+ * @param objectURI
+ * the object of the statement.
+ */
+ public SeenStatement(String subjectURI, String predicateURI, String objectURI)
+ {
+ this.subjectURI = subjectURI;
+ this.predicateURI = predicateURI;
+ this.objectURI = objectURI;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((objectURI == null) ? 0 : objectURI.hashCode());
+ result = prime * result + ((predicateURI == null) ? 0 : predicateURI.hashCode());
+ result = prime * result + ((subjectURI == null) ? 0 : subjectURI.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ SeenStatement other = (SeenStatement) obj;
+ if (objectURI == null)
+ {
+ if (other.objectURI != null)
+ return false;
+ }
+ else if (!objectURI.equals(other.objectURI))
+ return false;
+ if (predicateURI == null)
+ {
+ if (other.predicateURI != null)
+ return false;
+ }
+ else if (!predicateURI.equals(other.predicateURI))
+ return false;
+ if (subjectURI == null)
+ {
+ if (other.subjectURI != null)
+ return false;
+ }
+ else if (!subjectURI.equals(other.subjectURI))
+ return false;
+ return true;
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.java
new file mode 100644
index 00000000..9b97c903
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.java
@@ -0,0 +1,59 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openrdf.model.BNode;
+
+/**
+ * class representing an anonymous bnode.
+ *
+ * @author adam
+ *
+ */
+public class ToifRdfBnode extends ToifRdfResource
+{
+
+ private BNode object;
+
+ /**
+ * create a toif bnode object.
+ *
+ * @param createBNode
+ * the rdf bnode
+ * @param currentFile
+ * the current file.
+ */
+ public ToifRdfBnode(BNode bnode, File currentFile)
+ {
+
+ this.file = currentFile;
+ this.object = bnode;
+ }
+
+ /**
+ * get the bnode.
+ *
+ * @return the object
+ */
+ public BNode getObject()
+ {
+ return object;
+ }
+
+ /**
+ * get the details for this object.
+ */
+ @Override
+ public List getDetails()
+ {
+ List list = new ArrayList();
+ list.add(object.toString());
+ return list;
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.java
new file mode 100644
index 00000000..e1aa9b35
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.java
@@ -0,0 +1,198 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Class representing a toif rdf file/directory.
+ *
+ * @author adam
+ *
+ */
+public class ToifRdfFile extends ToifRdfResource
+{
+
+ /**
+ * directory structure of the file
+ */
+ private String directoryStructure = "";
+
+ /**
+ * the next file/directory in the path
+ */
+ private ToifRdfFile nextFile;
+
+ /**
+ * create a new rdf file/directory
+ *
+ * @param subjectElement
+ * @param currentFile
+ */
+ public ToifRdfFile(Element resourceElement, File currentFile)
+ {
+ super(resourceElement, currentFile);
+ }
+
+ /**
+ * get the details for this node
+ *
+ * @return the details
+ */
+ public List getDetails()
+ {
+ String dirCopy = directoryStructure;
+
+ // trim the last directory off so that the path is the same as the name
+ // of the directory (not going down to the child.)
+ if ("toif:Directory".equals(getType()) && !dirCopy.equals(""))
+ {
+
+ // correct any windows mojo that might occur.
+ final int lastIndexOf = dirCopy.lastIndexOf("/") == -1 ? dirCopy.lastIndexOf("\\") : dirCopy.lastIndexOf("/");
+
+ dirCopy = dirCopy.substring(0, lastIndexOf);
+ }
+
+ List result = new ArrayList(details);
+ result.add(dirCopy);
+ return result;
+ }
+
+ /**
+ * sets the child of this element.
+ *
+ * @param toifFile
+ */
+ public void setNextNode(ToifRdfFile toifFile)
+ {
+ nextFile = toifFile;
+ String name = getFileName(toifFile);
+
+ if (name != null)
+ {
+ propagateFile(name);
+ }
+ }
+
+ private void propagateFile(String name)
+ {
+ // sandwich the name between a root and the existing directory.
+ directoryStructure = "/" + name.concat(directoryStructure);
+
+ if (nextFile != null)
+ {
+ nextFile.propagateFile(name);
+ }
+ }
+
+ /**
+ * get the file name for the file
+ *
+ * @param toifNode
+ * the node for which to get the name
+ * @return the file name
+ */
+ public String getFileName(ToifRdfFile toifNode)
+ {
+
+ Element element = toifNode.getElement();
+ NodeList list = element.getChildNodes();
+ String name = null;
+
+ for (int i = 0; i < list.getLength(); i++)
+ {
+ Node child = list.item(i);
+
+ if ("name".equals(child.getNodeName()))
+ {
+ name = child.getAttributes().getNamedItem("name").getTextContent();
+ break;
+ }
+
+ }
+
+ if (name == null)
+ {
+ return null;
+ }
+
+ return name;
+
+ }
+
+ /**
+ * get the directory structure.
+ *
+ * @param projectRoot
+ * the root name of the project
+ * @return the directoryStructure the directory structure of the file.
+ * (shortened if the project root has been set.)
+ */
+ public String getDirectoryStructure(String projectRoot)
+ {
+ String dirCopy = directoryStructure;
+
+ // trim the last directory off so that the path is the same as the name
+ // of the directory (not going down to the child.)
+ if ("toif:Directory".equals(getType()) && !dirCopy.equals(""))
+ {
+
+ // correct any windows mojo that might occur.
+ final int lastIndexOf = dirCopy.lastIndexOf("/") == -1 ? dirCopy.lastIndexOf("\\") : dirCopy.lastIndexOf("/");
+
+ dirCopy = dirCopy.substring(0, lastIndexOf);
+ }
+
+ if (projectRoot != null && !projectRoot.isEmpty())
+ {
+ int start = dirCopy.indexOf(projectRoot);
+ dirCopy = dirCopy.substring(start);
+ }
+
+ String path = dirCopy;
+ String modPath = path.replaceAll("\\$[^\\.]*", "");
+ modPath = modPath.replace(".class",".java");
+ //return dirCopy;
+ return modPath;
+ }
+
+ /**
+ * set the directory structure.
+ *
+ * @param name
+ */
+ public void setDirectoryStructure(String name)
+ {
+ directoryStructure = "/" + name;
+ }
+
+ /**
+ * returns the name of this "file".
+ *
+ * @return returns the name of this file.
+ */
+ public String getName()
+ {
+ for (String detail : getDetails())
+ {
+ if (detail.startsWith("name="))
+ {
+ String name = detail.replace("name=", "");
+ name = name.replace("\"", "");
+ return name;
+ }
+ }
+
+ return "";
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.java
new file mode 100644
index 00000000..9e4e9b87
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.java
@@ -0,0 +1,307 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.openrdf.model.ValueFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * represents the toif resource.
+ *
+ * @author adam
+ *
+ */
+public class ToifRdfResource
+{
+
+ /**
+ * the rdf element
+ */
+ protected Element element;
+
+ /**
+ * current file
+ */
+ protected File file;
+
+ /**
+ * resource id
+ */
+ protected String id;
+
+ /**
+ * list of details about this element. used for unique identification.
+ */
+ protected List details = new ArrayList();
+
+ /**
+ * the type of resource.
+ */
+ private String toifType;
+
+ public ToifRdfResource()
+ {
+ }
+
+ /**
+ * create a new resource
+ *
+ * @param element
+ * the rdf element this resource is based on.
+ * @param currentFile
+ * the current file this element is in.
+ */
+ public ToifRdfResource(Element element, File currentFile)
+ {
+ this.element = element;
+ file = currentFile;
+ setDetails(extractElementDetails(element));
+ }
+
+ public String getType()
+ {
+ return toifType;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((details == null) ? 0 : details.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj == null)
+ {
+ return false;
+ }
+ if (!(obj instanceof ToifRdfResource))
+ {
+ return false;
+ }
+ ToifRdfResource other = (ToifRdfResource) obj;
+ if (getDetails() == null)
+ {
+ if (other.getDetails() != null)
+ {
+ return false;
+ }
+ }
+ else if (!getDetails().equals(other.getDetails()))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * get the details for this node
+ *
+ * @return the details
+ */
+ public List getDetails()
+ {
+ List result = details;
+ // result.add(directoryStructure);
+ return result;
+ }
+
+ /**
+ * set the details for this node.
+ *
+ * @param details
+ * the details to set
+ */
+ public void setDetails(List details)
+ {
+ this.details = details;
+ }
+
+ /**
+ * @return the element
+ */
+ public Element getElement()
+ {
+ return element;
+ }
+
+ /**
+ * gets the local id for this resource
+ *
+ * @return the local id.
+ */
+ public Long getLocalId()
+ {
+ if (element == null)
+ {
+ return 0L;
+ }
+ // String id = element.getAttribute("id");
+ return Long.parseLong(id);
+ }
+
+ /**
+ * the file for this resource.
+ *
+ * @return the file
+ */
+ public File getFile()
+ {
+ return file;
+ }
+
+ /**
+ * set the element for this resource.
+ *
+ * @param element
+ * the element to set
+ */
+ public void setElement(Element element)
+ {
+ this.element = element;
+ }
+
+ /**
+ * set the file for this resource.
+ *
+ * @param file
+ * the file to set
+ */
+ public void setFile(File file)
+ {
+ this.file = file;
+ }
+
+ /**
+ * extract all the interesting data from this node. Put it in a list and
+ * sort it so that other lists with the same data can be equal to it.
+ *
+ * @param node
+ * the node that we are trying to extract the details from
+ * @return return the sorted list of details.
+ */
+ protected List extractElementDetails(Element node)
+ {
+ if (node == null)
+ {
+ return null;
+ }
+
+ final List results = new ArrayList();
+
+ final NodeList children = node.getChildNodes();
+
+ String type = node.getAttribute("xsi:type");
+ id = node.getAttribute("id");
+
+ if ((type.equals("toif:Finding")) || (type.equals("toif:Statement")))
+ {
+
+ // use the file path as an attribute to make it unique.
+ String absolutePath = file.getAbsolutePath();
+
+ absolutePath = absolutePath.replace("\\", "/");
+
+ String[] split = absolutePath.split("/");
+
+ String ident = split[split.length - 2] + "/" + split[split.length - 1];
+
+ node.setAttribute("file", ident);
+ results.add(node.getAttribute("file"));
+
+ results.add("id=" + id);
+ }
+
+ if (type.equals("toif:TOIFSegment"))
+ {
+ results.add(node.getAttribute("parent"));
+ results.add("id=" + id);
+ }
+
+ if ("toif:WeaknessDescription".equals(type))
+ {
+ results.add(node.getAttribute("text"));
+ }
+
+ // for all the children of this node, add them to the results.
+ for (int i = 0; i < children.getLength(); i++)
+ {
+ final Node child = children.item(i);
+
+ final String nodeName = child.getNodeName();
+
+ final NamedNodeMap attributes = child.getAttributes();
+
+ if ("description".equals(nodeName))
+ {
+ results.add((attributes.getNamedItem("text").toString()));
+ }
+ if ("checksum".equals(nodeName))
+ {
+ continue;
+ }
+ else
+ {
+ if (attributes != null)
+ {
+ results.add((attributes.getNamedItem(nodeName) + ""));
+ }
+
+ }
+
+ }
+
+ toifType = type;
+
+ results.add(type);
+
+ Collections.sort(results);
+
+ return results;
+
+ }
+
+ /**
+ * the element to string.
+ *
+ * @param factory
+ * the chosen value factory
+ * @return the string value.
+ */
+ public String getStringValue(ValueFactory factory)
+ {
+ if (getElement() == null)
+ {
+ return "testing testing testing";
+ }
+ return factory.createLiteral(getElement().toString()).toString();
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.java
new file mode 100644
index 00000000..26481362
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.java
@@ -0,0 +1,95 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+import java.io.File;
+
+import org.w3c.dom.Element;
+
+/**
+ * represents an rdf value for toif.
+ *
+ * @author adam
+ *
+ */
+public class ToifRdfValue extends ToifRdfResource
+{
+
+ private String value;
+
+ public ToifRdfValue()
+ {
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((value == null) ? 0 : value.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ToifRdfValue other = (ToifRdfValue) obj;
+ if (value == null)
+ {
+ if (other.value != null)
+ return false;
+ }
+ else if (!value.equals(other.value))
+ return false;
+ return true;
+ }
+
+ /**
+ * create a new value
+ *
+ * @param element
+ * the rdf element that this value will be based from
+ * @param currentFile
+ * the current file this element is in.
+ */
+ public ToifRdfValue(Element element, File currentFile)
+ {
+ super(element, currentFile);
+ }
+
+ /**
+ * create a new value
+ *
+ * @param value
+ * the value ot set
+ * @param element
+ * the rdf element this value will be based on
+ * @param currentFile
+ * the file the element is in.
+ */
+ public ToifRdfValue(String value, Element element, File currentFile)
+ {
+ super(element, currentFile);
+
+ this.value = value;
+ }
+
+ /**
+ * get the value.
+ *
+ * @return the value.
+ */
+ public String getValue()
+ {
+ return value;
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.java
new file mode 100644
index 00000000..e750d429
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.java
@@ -0,0 +1,112 @@
+/**
+ *
+ */
+
+package com.kdmanalytics.toif.assimilator.toifRdfTypes;
+
+import org.openrdf.model.URI;
+
+/**
+ * representing the rdf statements
+ *
+ * @author adam
+ *
+ */
+public class ToifStatement
+{
+
+ private ToifRdfResource subject;
+
+ private URI predicate;
+
+ private ToifRdfResource object;
+
+ /**
+ * create a new statement
+ *
+ * @param subjectResource
+ * the subject
+ * @param predicateURI
+ * the predicate
+ * @param objectResource
+ * the object
+ */
+ public ToifStatement(ToifRdfResource subjectResource, URI predicateURI, ToifRdfResource objectResource)
+ {
+ this.subject = subjectResource;
+ this.predicate = predicateURI;
+ this.object = objectResource;
+ }
+
+ /**
+ * get the subject
+ *
+ * @return the subject
+ */
+ public ToifRdfResource getSubject()
+ {
+ return subject;
+ }
+
+ /**
+ * set the subject
+ *
+ * @param subject
+ * the subject to set
+ */
+ public void setSubject(ToifRdfResource subject)
+ {
+ this.subject = subject;
+ }
+
+ /**
+ * get the predicate
+ *
+ * @return the predicate
+ */
+ public URI getPredicate()
+ {
+ return predicate;
+ }
+
+ /**
+ * set the predicate
+ *
+ * @param predicate
+ * the predicate to set
+ */
+ public void setPredicate(URI predicate)
+ {
+ this.predicate = predicate;
+ }
+
+ /**
+ * get the object
+ *
+ * @return the object
+ */
+ public ToifRdfResource getObject()
+ {
+ return object;
+ }
+
+ /**
+ * set the object
+ *
+ * @param object
+ * the object to set
+ */
+ public void setObject(ToifRdfResource object)
+ {
+ this.object = object;
+ }
+
+ /**
+ * return this statement as a string.
+ */
+ public String toString()
+ {
+ return subject.getElement().getAttribute("id") + " " + predicate.stringValue() + " " + object.getElement().getAttribute("id");
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/StatementMapping.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/StatementMapping.java
new file mode 100644
index 00000000..467591ba
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/StatementMapping.java
@@ -0,0 +1,78 @@
+
+package com.kdmanalytics.toif.mergers;
+
+import java.util.HashMap;
+
+/**
+ *
+ * Statements that have the same codeLocation are the same statements. this
+ * class carries a mapping of these local statements to global codeLocations.
+ *
+ * @author Adam Nunn
+ *
+ */
+public class StatementMapping
+{
+
+ HashMap localStatementToLocalCodeLocation = new HashMap();
+
+ HashMap localCodeLocationToGlobalCodeLocation = new HashMap();
+
+ HashMap globalCodeLocationToGlobalStatement = new HashMap();
+
+ /**
+ * get the global statement for this local resource
+ *
+ * @param statementLocal
+ * the local resource id
+ * @return the global resource id
+ */
+ public Long getGlobalStatement(Long statementLocal)
+ {
+ Long clLocal = localStatementToLocalCodeLocation.get(statementLocal);
+
+ Long clGlobal = localCodeLocationToGlobalCodeLocation.get(clLocal);
+
+ Long SGlobal = globalCodeLocationToGlobalStatement.get(clGlobal);
+
+ return SGlobal;
+ }
+
+ /**
+ * call this every time that a codelocation is mapped to a global.
+ *
+ * @param clLocal
+ * the local id of the codelocation
+ * @param clGlobal
+ * the global id of the code location.
+ */
+ public void setNewCodeLocation(Long clLocal, Long clGlobal)
+ {
+ localCodeLocationToGlobalCodeLocation.put(clLocal, clGlobal);
+ }
+
+ /**
+ * call this every time that a statement resource is made.
+ *
+ * @param sLocal
+ * the local id of the statement
+ * @param clLocal
+ * the local id of the code location for the statement.
+ */
+ public void setNewLocalStatement(Long sLocal, Long clLocal)
+ {
+ localStatementToLocalCodeLocation.put(sLocal, clLocal);
+ }
+
+ /**
+ * called when a statement is made global
+ *
+ * @param clGlobal
+ * @param sGlobal
+ */
+ public void setNewGlobalStatement(Long clGlobal, Long sGlobal)
+ {
+ globalCodeLocationToGlobalStatement.put(clGlobal, sGlobal);
+ }
+
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/ToifMerger.java b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/ToifMerger.java
new file mode 100644
index 00000000..218b118b
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/com/kdmanalytics/toif/mergers/ToifMerger.java
@@ -0,0 +1,1351 @@
+/*******************************************************************************
+ * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and
+ * the accompanying materials are made available under the terms of the Open
+ * Source Initiative OSI - Open Software License v3.0 which accompanies this
+ * distribution, and is available at
+ * http://www.opensource.org/licenses/osl-3.0.php/
+ ******************************************************************************/
+
+package com.kdmanalytics.toif.mergers;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.log4j.Logger;
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.Repository;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.rio.RDFHandlerException;
+import org.openrdf.rio.ntriples.NTriplesWriter;
+import org.openrdf.sail.memory.MemoryStore;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import com.kdmanalytics.toif.assimilator.TripleStatementWriter;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.SeenStatement;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.ToifRdfBnode;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.ToifRdfFile;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.ToifRdfResource;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.ToifRdfValue;
+import com.kdmanalytics.toif.assimilator.toifRdfTypes.ToifStatement;
+
+/**
+ * Class used to merge the toif data together. Merging integrates multiple
+ * equivalent elements into one single element.
+ *
+ * @author adam
+ *
+ */
+public class ToifMerger
+{
+
+ private static final String HTTP_TOIF = "http://toif/";
+
+ private static final boolean DEBUG = false;
+
+ /**
+ * The logger for this class.
+ */
+ private static Logger LOG = Logger.getLogger(ToifMerger.class);
+
+ private File currentFile;
+
+ private Document doc;
+
+ /**
+ * factory to create new objects for the repository.
+ */
+ private ValueFactory factory;
+
+ /**
+ * whether to continue the merge when a file fails.
+ */
+ private final boolean force;
+
+ /**
+ * This is a map of ids and their values as a string. This should enable us
+ * to find equivalent elements an use their ids.
+ */
+ private final HashMap globalResources;
+
+ private HashMap localResources;
+
+ /**
+ * The offset makes sure that the next file's IDs continue where the
+ * previous file left off. It is incremented every time a new toif element
+ * is created.
+ */
+ private Long offset;
+
+ /**
+ * the repository in which to output the completed statements.
+ */
+ private final Repository repository;
+
+ /**
+ * list of all the statements before being deposited.
+ */
+ private List statements;
+
+ /**
+ * the method of output.
+ */
+ private final PrintWriter output;
+
+ /**
+ * the connection to the repository.
+ */
+ private RepositoryConnection con;
+
+ private String currentToolName;
+
+ private final HashMap segments;
+
+ private Element currentSegment;
+
+ private int noName;
+
+ /**
+ * the lowest available number in the long scale when counting from the end.
+ * this is used for bnodes.
+ */
+ private Long smallestBigNumber = Long.MAX_VALUE;
+
+ /**
+ * the statements that have been seen.
+ */
+ private Set seenStatements = new HashSet();
+
+ /**
+ * the map of the path elements that are to be removed.
+ */
+ private String blacklist;
+
+ /**
+ * mapping of the local statement to a global statement
+ */
+ private StatementMapping statementMapping;
+
+ /**
+ * creates a new toif merger. outputs to the output-printwriter as a stream.
+ *
+ * @param output
+ * the output printwriter for the output stream.
+ * @param force
+ * force the continuation of the parse, even if there is a
+ * failure on one of the files.
+ * @param startID
+ * @param smallestBigNumber2
+ */
+ public ToifMerger(PrintWriter output, boolean force, Long startID, Long smallestBigNumber2, String blacklistPath)
+ {
+ statementMapping = new StatementMapping();
+ blacklist = blacklistPath;
+
+ // farce the parse to continue even on a failed file?
+ this.force = force;
+
+ this.output = output;
+ this.smallestBigNumber = smallestBigNumber2;
+
+ // initialize the elements map and the types map.
+ globalResources = new HashMap();
+
+ segments = new HashMap();
+
+ // make sure that the offset is set
+ offset = startID;
+
+ repository = new SailRepository(new MemoryStore());
+
+ }
+
+ /**
+ * get the repository
+ *
+ * @return returns the repository.
+ */
+ public Repository getRepository()
+ {
+ return repository;
+ }
+
+ /**
+ * create a complext fact and add it to the repository.
+ *
+ * @param fact
+ * the fact we are using to create the statements
+ * @param doc
+ * the doc that the fact belongs to .
+ * @param predicate
+ * the initial prediacte for the first statement, this is
+ * probably the type.
+ * @param statement1
+ * the attribute name for the first element
+ * @param statement2
+ * the attribute name for the second element
+ * @param statement3
+ * the attribute name for the third element
+ */
+ private void createComplexFact(Element fact, Document doc, String predicate, String statement1, String statement2, String statement3)
+ {
+
+ /*
+ * create the initial statement. this is the one that sets up the blank
+ * node as the main subject of the fact.
+ */
+ ToifRdfResource subject = createResource(statement1, doc, fact);
+ createElementFacts(subject);
+
+ URI predicateURI = factory.createURI(HTTP_TOIF + predicate);
+
+ ToifRdfBnode bnode = new ToifRdfBnode(factory.createBNode(), currentFile);
+
+ ToifStatement toifStatement1 = new ToifStatement(subject, predicateURI, bnode);
+ statements.add(toifStatement1);
+
+ // create statement2
+ ToifRdfResource object1 = createResource(statement2, doc, fact);
+ createElementFacts(object1);
+ URI predicateURI2 = factory.createURI(HTTP_TOIF + trimNumber(statement2));
+
+ ToifStatement toifStatement2 = new ToifStatement(bnode, predicateURI2, object1);
+ statements.add(toifStatement2);
+
+ // create statement3
+ ToifRdfResource object2 = createResource(statement3, doc, fact);
+ createElementFacts(object2);
+ URI predicateURI3 = factory.createURI(HTTP_TOIF + trimNumber(statement3));
+
+ ToifStatement toifStatement3 = new ToifStatement(bnode, predicateURI3, object2);
+ statements.add(toifStatement3);
+ }
+
+ /**
+ * I consider facts with references to more then 2 elements complex. These
+ * need to use a blank node.
+ *
+ * @param doc
+ * the document that contains this fact.
+ * @param fact
+ * the fact that we wish to analyse.
+ */
+ private void createComplexFacts(Document doc, Element fact)
+ {
+ final Node predicateNode = fact.getAttributeNode("xsi:type");
+ String predicate = null;
+
+ if (predicateNode != null)
+ {
+ predicate = predicateNode.getTextContent();
+ predicate = trimNumber(predicate);
+ }
+ else
+ {
+ return;
+ }
+
+ if ("toif:OrganizationIsPartOfOrganizationAsRole".equals(predicate))
+ {
+ createComplexFact(fact, doc, predicate, "organization1", "organization2", "role");
+
+ }
+ if ("toif:PersonIsEmployedByOrganizationAsRole".equals(predicate))
+ {
+ createComplexFact(fact, doc, predicate, "person", "organization", "role");
+
+ }
+ if ("toif:PersonIsInvolvedInProjectAsRole".equals(predicate))
+ {
+ createComplexFact(fact, doc, predicate, "person", "project", "role");
+
+ }
+ if ("toif:OrganizationIsInvolvedInProjectAsRole".equals(predicate))
+ {
+ createComplexFact(fact, doc, predicate, "organization", "project", "role");
+
+ }
+
+ }
+
+ /**
+ * create all the facts regarding this resource
+ *
+ * @param subjectResource
+ * the resource for which to create facts about.
+ * @return the local resource.
+ */
+ private ToifRdfResource createElementFacts(ToifRdfResource resource)
+ {
+
+ if (resource == null)
+ {
+ return null;
+ }
+
+ Long localId = resource.getLocalId();
+
+ if (localResources.containsKey(localId))
+ {
+
+ return localResources.get(localId);
+ }
+ else
+ {
+ localResources.put(localId, resource);
+ }
+
+ Element resourceElement = resource.getElement();
+
+ // get the makings to construct a type statement.
+ // ToifRdfResource resource = resource;
+ URI predicateURI = factory.createURI(HTTP_TOIF + "type");
+ String typeAttribute = resourceElement.getAttribute("xsi:type");
+ ToifRdfValue objectResource = new ToifRdfValue(typeAttribute, resourceElement, currentFile);
+
+ // this element has type...
+ ToifStatement type = new ToifStatement(resource, predicateURI, objectResource);
+
+ // do the segment contains this element.
+ statements.add(new ToifStatement(new ToifRdfResource(currentSegment, currentFile), factory.createURI(HTTP_TOIF + "contains"), resource));
+
+ // ///////////////////// Now to make the children///////////////////
+ NodeList children = resourceElement.getChildNodes();
+
+ if ("toif:Date".equals(typeAttribute))
+ {
+ String value = resourceElement.getAttribute("date");
+ ToifRdfValue statementValue = new ToifRdfValue(value, resourceElement, currentFile);
+ URI typeURI = factory.createURI(HTTP_TOIF + "date");
+ ToifStatement statement = new ToifStatement(resource, typeURI, statementValue);
+ statements.add(statement);
+ }
+
+ if ("toif:WeaknessDescription".equals(typeAttribute))
+ {
+ String value = resourceElement.getAttribute("text");
+ ToifRdfValue statementValue = new ToifRdfValue(value, resourceElement, currentFile);
+ URI typeURI = factory.createURI(HTTP_TOIF + "description");
+ ToifStatement statement = new ToifStatement(resource, typeURI, statementValue);
+ statements.add(statement);
+ }
+
+ // for each of the children of the node
+ for (int i = 0; i < children.getLength(); i++)
+ {
+ Node child = children.item(i);
+
+ String nodeName = child.getNodeName();
+
+ if ("#text".equals(nodeName))
+ {
+ continue;
+ }
+
+ NamedNodeMap childAtributes = child.getAttributes();
+ String value = null;
+
+ if ("description".equals(nodeName))
+ {
+ value = childAtributes.getNamedItem("text").getTextContent();
+ }
+ else if ("toif:Date".equals(typeAttribute))
+ {
+ value = resourceElement.getAttribute("date");
+ }
+ else
+ {
+
+ Node namedItem = childAtributes.getNamedItem(nodeName);
+ if (namedItem == null)
+ {
+ System.err.println("No named element found: " + nodeName + " " + noName++);
+ value = "none";
+ }
+ else if (namedItem.getTextContent() == null)
+ {
+ System.err.println("No named element found: " + nodeName + " " + noName++);
+ value = "none";
+
+ }
+ else
+ {
+ value = namedItem.getTextContent();
+ }
+ }
+
+ URI typeURI = factory.createURI(HTTP_TOIF + nodeName);
+ ToifRdfValue statementValue = new ToifRdfValue(value, resourceElement, currentFile);
+ ToifStatement statement = new ToifStatement(resource, typeURI, statementValue);
+ statements.add(statement);
+ }
+
+ statements.add(type);
+
+ return resource;
+
+ }
+
+ /**
+ * create a fact that only has 2 elements in its attributes.
+ *
+ * @param subject
+ * the subject attribute name
+ * @param predicate
+ * the predicate attribute name
+ * @param object
+ * the object attribute name
+ * @param doc
+ * the facts document
+ * @param element
+ * the fact.
+ */
+ private void createFact(String subject, String predicate, String object, Document doc, Element element)
+ {
+ // ///////////////////// subject /////////////////////////////////
+
+ // get the id value
+ ToifRdfResource subjectResource = createResource(subject, doc, element);
+
+ // //////////////////////// predicate ///////////////////////////////
+ final URI predicateURI = factory.createURI(HTTP_TOIF + predicate);
+
+ // //////////////////////// object //////////////////////////////////
+ // this follows a similar approach to the subject above.
+ ToifRdfResource objectResource = createResource(object, doc, element);
+
+ // Add a path to the code location.
+ if ("http://toif/toif:CodeLocationReferencesFile".equals(predicateURI.stringValue()))
+ {
+ if (objectResource instanceof ToifRdfFile)
+ {
+ ToifRdfFile file = (ToifRdfFile) objectResource;
+
+ List details = subjectResource.getDetails();
+
+ String directoryStructure = file.getDirectoryStructure(blacklist);
+
+ details.add("path=" + directoryStructure);
+ subjectResource.setDetails(details);
+
+ }
+ }
+
+ if ("http://toif/toif:StatementHasCodeLocation".equals(predicateURI.stringValue()))
+ {
+ statementMapping.setNewLocalStatement(subjectResource.getLocalId(), objectResource.getLocalId());
+ }
+
+ /*
+ * if the resource is to do with the files and directories, set the
+ * object's next-node as the subject. this allows newly found
+ * directories to be propagated back through all the files and
+ * directories. creating paths for each one.
+ *
+ * next node is the objects child. dir nextnode file.
+ *
+ * remember: subject - predicate -object file containedin dir
+ */
+ if ((subjectResource instanceof ToifRdfFile) && (objectResource instanceof ToifRdfFile) && (predicate.contains("IsContainedIn")))
+ {
+
+ ((ToifRdfFile) objectResource).setNextNode((ToifRdfFile) subjectResource);
+
+ // just some debug.
+ if (DEBUG)
+ {
+ System.err.println(objectResource.getLocalId() + ": " + ((ToifRdfFile) objectResource).getDirectoryStructure(null)
+ + " -> setting next node -> " + subjectResource.getLocalId() + ": "
+ + ((ToifRdfFile) subjectResource).getDirectoryStructure(null));
+ }
+ }
+
+ // put statement in the statements list
+ ToifStatement toifStatement = new ToifStatement(subjectResource, predicateURI, objectResource);
+ statements.add(toifStatement);
+
+ }
+
+ /**
+ * create the regular facts.
+ *
+ * @param doc
+ * the ducument the fact is in
+ * @param element
+ * the fact.
+ */
+ private void createFacts(Document doc, Element element)
+ {
+
+ final String predicate = element.getAttributeNode("xsi:type").getTextContent();
+
+ // for each of the fact types.
+ if ("toif:TOIFSegmentIsCreatedAtDate".equals(predicate))
+ {
+ createFact("segment", predicate, "date", doc, element);
+ }
+ if ("toif:TOIFSegmentIsRelatedToProject".equals(predicate))
+ {
+ createFact("segment", predicate, "project", doc, element);
+ }
+ if ("toif:FileIsContainedInDirectory".equals(predicate))
+ {
+ createFact("file", predicate, "directory", doc, element);
+ }
+ if ("toif:DirectoryIsContainedInDirectory".equals(predicate))
+ {
+ createFact("directory1", predicate, "directory2", doc, element);
+ }
+ if ("toif:FindingIsDescribedByWeaknessDescription".equals(predicate))
+ {
+ createFact("finding", predicate, "description", doc, element);
+ }
+ if ("toif:FindingHasCWEIdentifier".equals(predicate))
+ {
+ createFact("finding", predicate, "cwe", doc, element);
+ }
+ if ("toif:FindingHasSFPIdentifier".equals(predicate))
+ {
+ createFact("finding", predicate, "sfp", doc, element);
+ }
+ if ("toif:FindingHasClusterIdentifier".equals(predicate))
+ {
+ createFact("finding", predicate, "cluster", doc, element);
+ }
+ if ("toif:CodeLocationReferencesFile".equals(predicate))
+ {
+ createFact("codeLocation", predicate, "file", doc, element);
+ }
+ if ("toif:FindingHasCodeLocation".equals(predicate))
+ {
+ createFact("finding", predicate, "location", doc, element);
+ }
+ if ("toif:StatementIsInvolvedInFinding".equals(predicate))
+ {
+ createFact("statement", predicate, "finding", doc, element);
+ }
+ if ("toif:StatementIsSinkInFinding".equals(predicate))
+ {
+ createFact("statement", predicate, "finding", doc, element);
+ }
+ if ("toif:StatementHasCodeLocation".equals(predicate))
+ {
+ createFact("statement", predicate, "location", doc, element);
+ }
+ if ("toif:StatementIsProceededByStatement".equals(predicate))
+ {
+ createFact("statement1", predicate, "statement2", doc, element);
+ }
+ if ("toif:DataElementIsInvolvedInFinding".equals(predicate))
+ {
+ createFact("data", predicate, "finding", doc, element);
+ }
+ if ("toif:FindingIsDescribedByWeaknessDescription".equals(predicate))
+ {
+ createFact("finding", predicate, "description", doc, element);
+ }
+
+ // general housekeeping
+ if ("toif:TOIFSegmentIsProducedByOrganization".equals(predicate))
+ {
+ createFact("segment", predicate, "organization", doc, element);
+ }
+ if ("toif:TOIFSegmentIsSupervisedByPerson".equals(predicate))
+ {
+ createFact("segment", predicate, "person", doc, element);
+ }
+ if ("toif:GeneratorIsSuppliedByVendor".equals(predicate))
+ {
+ createFact("generator", predicate, "vendor", doc, element);
+ }
+ if ("toif:AdaptorSupportsGenerator".equals(predicate))
+ {
+ createFact("adaptor", predicate, "vendor", doc, element);
+ }
+ if ("toif:TOIFSegmentIsRelatedToProject".equals(predicate))
+ {
+ createFact("segment", predicate, "project", doc, element);
+ }
+ if ("toif:TOIFSegmentIsGeneratedByGenerator".equals(predicate))
+ {
+ createFact("segment", predicate, "generator", doc, element);
+ }
+ if ("toif:TOIFSegmentIsProcessedByAdaptor".equals(predicate))
+ {
+ createFact("segment", predicate, "adaptor", doc, element);
+ }
+ if ("toif:TOIFSegmentIsOwnedByOrganization".equals(predicate))
+ {
+ createFact("segment", predicate, "organization", doc, element);
+ }
+ if ("toif:AdaptorIsSuppliedByVendor".equals(predicate))
+ {
+ createFact("adaptor", predicate, "vendor", doc, element);
+ }
+ if ("toif:TOIFSegmentIsGeneratedByPerson".equals(predicate))
+ {
+ createFact("segment", predicate, "person", doc, element);
+ }
+
+ }
+
+ /**
+ * Create the resource that is referenced by the fact. this also creates the
+ * child elements for this resource.
+ *
+ * @param resourceAttributeName
+ * the name of the attribute as it appears in the fact.
+ * @param doc
+ * the document that these elements belong to
+ * @param element
+ * the fact.
+ * @return
+ */
+ private ToifRdfResource createResource(String resourceAttributeName, Document doc, Element element)
+ {
+ // get the id value.
+ String subjectId = element.getAttribute(resourceAttributeName);
+ // get the element that has this value for its id.
+ Element subjectElement = getElementById(doc, subjectId);
+
+ // element is probably the segment if it cannot be obtained by its id.
+ if (subjectElement == null)
+ {
+ subjectElement = generateSegment(doc);
+ currentSegment = subjectElement;
+ }
+
+ /*
+ * the resource will either be a toifRdfFile or ToifRdfResource. The
+ * resources will be stored the same way either way.
+ */
+ ToifRdfResource subjectResource = null;
+
+ /*
+ * if the subject is some form of file, use the toifRdfFile. this is so
+ * that we can create a directory structure for it later.
+ */
+ if (resourceAttributeName.contains("file") || resourceAttributeName.contains("directory"))
+ {
+ subjectResource = new ToifRdfFile(subjectElement, currentFile);
+ }
+ // otherwise, create a straight-up ToifRdfResource.
+ else
+ {
+ subjectResource = new ToifRdfResource(subjectElement, currentFile);
+ }
+
+ /*
+ * create the elements that are children of this resource. this also
+ * returns the actual subject-resource object that we should be using.
+ * IE the one that is already in the localResources.
+ */
+ subjectResource = createElementFacts(subjectResource);
+
+ return subjectResource;
+ }
+
+ /**
+ * Deposit the resources into the repository.
+ */
+ private void depositResources()
+ {
+ try
+ {
+ con = repository.getConnection();
+
+ /*
+ * write all the local resources and statements to the repository.
+ * make sure that you use global resources if possible.
+ */
+ for (ToifStatement statement : statements)
+ {
+ // subject
+ ToifRdfResource subject = statement.getSubject();
+
+ // predicate.
+ URI predicate = statement.getPredicate();
+
+ // object
+ ToifRdfResource object = statement.getObject();
+
+ // Add a path to the code location.
+ if ("http://toif/toif:CodeLocationReferencesFile".equals(predicate.stringValue()))
+ {
+ if (object instanceof ToifRdfFile)
+ {
+ ToifRdfFile file = (ToifRdfFile) object;
+ writeFact(subject, factory.createURI(HTTP_TOIF + "path"),
+ new ToifRdfValue(file.getDirectoryStructure(blacklist), object.getElement(), currentFile));
+ }
+ else
+ {
+ System.err.println("This should have not happened.");
+ }
+ }
+
+ // write statement
+ writeFact(subject, predicate, object);
+ }
+ // export the toif repositoty as a stream.
+ con.export(new NTriplesWriter(output), (Resource) null);
+
+ con.clear((Resource) null);
+
+ con.close();
+ }
+ catch (RepositoryException e)
+ {
+ e.printStackTrace();
+ }
+ catch (RDFHandlerException e)
+ {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Filter the elements out of the parent element.
+ *
+ * @param parent
+ * the node containing the elements that you wish to filter
+ * @param filter
+ * the tag that you wish to filter.
+ */
+ private void filterElements(Node parent, String filter)
+ {
+ final NodeList children = parent.getChildNodes();
+
+ for (int i = 0; i < children.getLength(); i++)
+ {
+ final Node child = children.item(i);
+
+ // only interested in elements
+ if (child.getNodeType() == Node.ELEMENT_NODE)
+ {
+
+ // remove elements whose tag name = filter
+ // otherwise check its children for filtering with a recursive
+ // call
+ if (child.getNodeName().equals(filter))
+ {
+ parent.removeChild(child);
+ }
+ else
+ {
+ filterElements(child, filter);
+ }
+ }
+ }
+ }
+
+ /**
+ * Get the Segment from the document and its description. These get placed
+ * in the hashmap of all the collected elements.
+ *
+ * @param doc
+ * the document from which to get the segment.
+ */
+ private Element generateSegment(Document doc)
+ {
+
+ // don't want to affect the original doc at this stage.
+ final Document clonedDoc = (Document) doc.cloneNode(true);
+
+ // get the root element.
+ Element segment = clonedDoc.getDocumentElement();
+
+ filterElements(segment, "fact");
+
+ segment.setAttribute("id", Long.toString(0));
+ // segment.setAttribute("parent", currentParent);
+
+ String fileName = currentFile.getName();
+ fileName = fileName.replace(".toif.xml", "");
+ String[] nameArray = fileName.split("[.]");
+ currentToolName = nameArray[nameArray.length - 1];
+
+ segment.setAttribute("parent", currentToolName);
+
+ clonedDoc.normalize();
+
+ ToifRdfResource resource = new ToifRdfResource(segment, currentFile);
+
+ if (!segments.containsKey(currentToolName))
+ {
+ segments.put(currentToolName, resource);
+ }
+
+ resource = segments.get(currentToolName);
+
+ makeGlobal(resource);
+
+ return resource.getElement();
+
+ }
+
+ /**
+ * return the dom document for this file
+ *
+ * @param file
+ * the file to be parsed
+ * @return the dom document
+ * @throws ParserConfigurationException
+ * @throws SAXException
+ * @throws IOException
+ */
+ private Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException
+ {
+ final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+ final DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+ final Document doc = docBuilder.parse(file);
+
+ doc.getDocumentElement().normalize();
+ return doc;
+ }
+
+ /**
+ * Get the element with the required id from the node.
+ *
+ * @param node
+ * The node which contains the elements with ids.
+ * @param id
+ * the id value to search for.
+ * @return the element with the required id value.
+ */
+ private Element getElementById(Node node, String id)
+ {
+ try
+ {
+ final XPathFactory xPathfactory = XPathFactory.newInstance();
+ final XPath xpath = xPathfactory.newXPath();
+
+ final XPathExpression xPathexpression = xpath.compile("//*[@id = '" + id + "']");
+
+ final Element result = (Element) xPathexpression.evaluate(node, XPathConstants.NODE);
+
+ return result;
+ }
+ catch (final XPathExpressionException ex)
+ {
+ ex.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * makeGlobal must check to make sure that if the element is already in the
+ * global resources map, that it is the existing element that is returned.
+ *
+ * @param subject
+ * @return
+ */
+ private Long makeGlobal(ToifRdfResource resource)
+ {
+
+ // if the resource has already been seen (its in the globalResources).
+ // Use it!
+ if (globalResources.containsKey(resource))
+ {
+ // System.err.println("contained: "+resource.getDetails());
+ return globalResources.get(resource);
+ }
+ // otherwise make it a global resource.
+ else
+ {
+ // System.err.println("added: " + resource.getDetails());
+ long globalId = resource.getLocalId() + offset;
+
+ globalResources.put(resource, globalId);
+ // return globalResources.get(resource);
+ return globalId;
+ }
+ }
+
+ /**
+ * Attempt to merge the toif files.
+ *
+ * @param toifFiles
+ * The List of toif files to merge.
+ * @param startID
+ * @return
+ */
+ public Long merge(List toifFiles)
+ {
+
+ int fileNum = 0;
+ int listSize = toifFiles.size();
+ try
+ {
+ repository.initialize();
+ con = repository.getConnection();
+ factory = repository.getValueFactory();
+ }
+ catch (final RepositoryException e)
+ {
+ LOG.error("There was a repository exception when trying to merge the TOIF data. Cannot continue!");
+ e.printStackTrace();
+ }
+
+ // for each file in the list of toif files, parse it.
+ for (final File file : toifFiles)
+ {
+
+ fileNum++;
+
+ float fraction = 100f / listSize;
+ int percent = (int) Math.ceil(fraction * fileNum);
+
+ if (percent > 100)
+ {
+ percent = 100;
+ }
+
+ System.out.print("\r" + file);
+ System.out.print("\nprocessing TOIF... " + percent + "%");
+
+ currentFile = file;
+
+ String fileName = currentFile.getName();
+ fileName = fileName.replace(".toif.xml", "");
+ String[] nameArray = fileName.split("[.]");
+ currentToolName = nameArray[nameArray.length - 1];
+ //currentToolName = currentFile.getParent();
+
+ // initialize the local structures that only relate to this file.
+ statements = new ArrayList();
+
+ localResources = new HashMap();
+
+ try
+ {
+ // parse the file.
+ parseFile(file);
+ }
+ /*
+ * catch possible exceptions. try to continue the parse if force has
+ * been set.
+ */
+ catch (final ParserConfigurationException e)
+ {
+ if (force)
+ {
+ e.printStackTrace();
+ LOG.error("File: " + file.getAbsolutePath()
+ + " has encountered a parserConfigurationException but the other files will be attempted");
+ continue;
+ }
+ else
+ {
+ LOG.error("File: " + file.getAbsolutePath()
+ + " has encountered a parserConfigurationException no further files will be processd.");
+ return null;
+ }
+ }
+ catch (final SAXException e)
+ {
+ if (force)
+ {
+ e.printStackTrace();
+ LOG.error("File: " + file.getAbsolutePath() + " has encountered a SAXException but the other files will be attempted");
+ continue;
+ }
+ else
+ {
+ e.printStackTrace();
+ LOG.error("File: " + file.getAbsolutePath() + " has encountered a SAXException no further files will be processd.");
+ return null;
+ }
+ }
+ catch (final IOException e)
+ {
+ if (force)
+ {
+ e.printStackTrace();
+ LOG.error("File: " + file.getAbsolutePath() + " has encountered a IOException but the other files will be attempted");
+ continue;
+ }
+ else
+ {
+ e.printStackTrace();
+ LOG.error("File: " + file.getAbsolutePath() + " has encountered a IOException no further files will be processd.");
+ return null;
+ }
+ }
+
+ ArrayList keys = new ArrayList(globalResources.values());
+ if (keys.isEmpty())
+ {
+ continue;
+ }
+ Collections.sort(keys);
+ Collections.reverse(keys);
+ offset = keys.get(0) + 1;
+ depositResources();
+
+ if (DEBUG)
+ {
+ System.err.println("End of file: " + file);
+
+ }
+ // end of file.
+ }
+ System.out.println("");
+
+ try
+ {
+ con.close();
+ }
+ catch (RepositoryException e)
+ {
+ System.err.println("Repository exception during merge. " + e);
+ }
+
+ return offset;
+ // after files
+ }
+
+ /**
+ * parse each file and extract the elements from it.
+ *
+ * @param file
+ * the file which is to be parsed.
+ * @throws IOException
+ * @throws SAXException
+ * @throws ParserConfigurationException
+ */
+ private void parseFile(File file) throws ParserConfigurationException, SAXException, IOException
+ {
+ if (DEBUG)
+ {
+ System.err
+ .println("-----------------------------------------------------------------------------------------------------------------------------------");
+ System.err.println("Parsing: " + file.getAbsolutePath());
+ System.err.println("Offset: " + offset);
+ System.err.println("Current Segment: " + new ToifRdfResource(currentSegment, currentFile).getDetails());
+ System.err.println("Current File: " + currentFile.getName());
+ System.err.println("Current Tool Name: " + currentToolName + "\n");
+ }
+
+ doc = getDocument(file);
+
+ // just get all the elements.
+ final NodeList nodeList = doc.getElementsByTagName("*");
+
+ /*
+ * for each of the elements in the document, find the facts relating to
+ * the relationships between the other entities. ie:
+ * "toif:FileIsContainedInDirectory".
+ */
+ for (int i = 0; i < nodeList.getLength(); i++)
+ {
+ // element is a subinterface of node.
+ final Element element = (Element) nodeList.item(i);
+
+ /*
+ * figure out if this is a fact that relates multiple entities.
+ * These kinds of facts have 4 attributes. It would be nice if the
+ * spec differentiated between these two kinds of elements.
+ */
+ final int attributesLength = element.getAttributes().getLength();
+
+ /*
+ * if the attribute length is not 4 then just continue until we find
+ * one.
+ */
+ if (attributesLength > 4)
+ {
+ createComplexFacts(doc, element);
+ }
+
+ /*
+ * if the attribute length is 4 then we can just use the xsi:type as
+ * the predicate.
+ */
+ if (attributesLength == 4)
+ {
+ createFacts(doc, element);
+ }
+
+ }
+ }
+
+ /**
+ * prints the contents of the repository. mainly for debug purposes.
+ *
+ * @param repository
+ * the repository to print.
+ */
+ void printDB()
+ {
+ RepositoryConnection con;
+
+ try
+ {
+ con = repository.getConnection();
+ // get all statements.
+ final RepositoryResult statements = con.getStatements(null, null, null, true);
+
+ // for all the statements.
+ while (statements.hasNext())
+ {
+ final Statement st = statements.next();
+ // print statements.
+ System.err.println(st.toString());
+ }
+
+ statements.close();
+ }
+ catch (final RepositoryException e)
+ {
+ e.printStackTrace();
+ LOG.error("There was a repository error while printing the database. " + e);
+ }
+
+ }
+
+ /**
+ * print the document (useful for debug)
+ *
+ * @param doc
+ * the XML document to print
+ * @throws TransformerFactoryConfigurationError
+ */
+ @SuppressWarnings("unused")
+ private void printXML(Document doc) throws TransformerFactoryConfigurationError
+ {
+ final Source source = new DOMSource(doc);
+ final Result dest = new StreamResult(System.err);
+ final TransformerFactory tFactory = TransformerFactory.newInstance();
+ Transformer tFormer;
+ try
+ {
+ tFormer = tFactory.newTransformer();
+ tFormer.transform(source, dest);
+ }
+ catch (final TransformerConfigurationException e)
+ {
+ e.printStackTrace();
+ }
+ catch (final TransformerException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * trim the number off the string if it is there
+ *
+ * @param string
+ * the string to trim
+ * @return the trimmed string
+ */
+ private String trimNumber(String string)
+ {
+ String end = string.substring(string.length() - 1);
+
+ try
+ {
+ Integer.parseInt(end);
+ return string.substring(0, string.length() - 1);
+ }
+ catch (NumberFormatException e)
+ {
+ return string;
+ }
+ }
+
+ /**
+ * write the statement to the repository.
+ *
+ * @param subject
+ * the subject of the statement
+ * @param predicateURI
+ * the predicate of the statement
+ * @param object
+ * the object of the statement.
+ */
+ private void writeFact(ToifRdfResource subject, URI predicateURI, ToifRdfResource object)
+ {
+
+ if (subject instanceof ToifRdfFile)
+ {
+
+ ToifRdfFile file = (ToifRdfFile) subject;
+
+ if (subject.getType().equals("toif:Directory"))
+ {
+ if (!file.getDirectoryStructure(null).contains(blacklist))
+ {
+ return;
+ }
+ }
+
+ }
+
+ if (object instanceof ToifRdfFile)
+ {
+ ToifRdfFile file = (ToifRdfFile) object;
+
+ final String directoryStructure = file.getDirectoryStructure(null);
+ if (!directoryStructure.contains(blacklist))
+ {
+ return;
+ }
+
+ }
+
+ try
+ {
+ Long subjectId = (long) 0;
+
+ if ("toif:Statement".equals(subject.getType()))
+ {
+ final Long globalStatement = statementMapping.getGlobalStatement(subject.getLocalId());
+ if (globalStatement != null)
+ {
+ subjectId = globalStatement;
+ }
+ else
+ {
+ subjectId = makeGlobal(subject);
+ }
+ }
+ else
+ {
+ subjectId = makeGlobal(subject);
+
+ }
+
+ URI subjectURI = factory.createURI(HTTP_TOIF + subjectId);
+ if ((object instanceof ToifRdfBnode))
+ {
+
+ Long objectId = makeGlobal(object);
+
+ URI objectURI = factory.createURI(HTTP_TOIF + (smallestBigNumber - objectId));
+
+ // returns true if the statement has been seen.
+ boolean seen = seenStatement(subjectURI.stringValue(), predicateURI.stringValue(), objectURI.stringValue());
+
+ // if it has not been seen.
+ if (!seen)
+ {
+ TripleStatementWriter.addOrWrite(output, con, subjectURI, predicateURI, objectURI);
+ }
+
+ }
+ else if (object instanceof ToifRdfValue)
+ {
+ Value valueURI = factory.createLiteral(((ToifRdfValue) object).getValue());
+ boolean seen = seenStatement(subjectURI.stringValue(), predicateURI.stringValue(), valueURI.stringValue());
+ if (!seen)
+ {
+ TripleStatementWriter.addOrWrite(output, con, subjectURI, predicateURI, valueURI);
+ }
+
+ }
+
+ else if ((subject instanceof ToifRdfBnode))
+ {
+ subjectId = makeGlobal(subject);
+ subjectURI = factory.createURI(HTTP_TOIF + (smallestBigNumber - subjectId));
+ Long objectId = makeGlobal(object);
+ URI objectURI = factory.createURI(HTTP_TOIF + objectId);
+
+ boolean seen = seenStatement(subjectURI.stringValue(), predicateURI.stringValue(), objectURI.stringValue());
+
+ if (!seen)
+ {
+
+ TripleStatementWriter.addOrWrite(output, con, subjectURI, predicateURI, objectURI);
+ }
+
+ }
+ else
+ {
+ Long objectId = makeGlobal(object);
+
+ if ("toif:CodeLocation".equals(object.getType()))
+ {
+ statementMapping.setNewCodeLocation(object.getLocalId(), objectId);
+ }
+
+ if ("toif:CodeLocation".equals(object.getType()) && "toif:Statement".equals(subject.getType()))
+ {
+ statementMapping.setNewGlobalStatement(objectId, subjectId);
+ }
+
+ URI objectURI = factory.createURI(HTTP_TOIF + objectId);
+
+ boolean seen = seenStatement(subjectURI.stringValue(), predicateURI.stringValue(), objectURI.stringValue());
+
+ if (!seen)
+ {
+ TripleStatementWriter.addOrWrite(output, con, subjectURI, predicateURI, objectURI);
+ }
+
+ }
+
+ }
+ catch (final RepositoryException e)
+ {
+ System.err.println("Repository exception while writing the fact to the repository. " + e);
+ }
+
+ }
+
+ /**
+ * checks to see if this statement
+ *
+ * @param subject
+ * @param predicate
+ * @param object
+ * @return
+ */
+ private boolean seenStatement(String subject, String predicate, String object)
+ {
+ SeenStatement seenStatement = new SeenStatement(subject, predicate, object);
+
+ // returns true if the statement has been seen
+ final boolean seen = !seenStatements.add(seenStatement);
+ return seen;
+ }
+}
diff --git a/com.kdmanalytics.toif.assimilator/src/log4j.properties b/com.kdmanalytics.toif.assimilator/src/log4j.properties
new file mode 100644
index 00000000..6474c8fe
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/src/log4j.properties
@@ -0,0 +1,7 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+# accompanying materials are made available under the terms of the Open Source
+# Initiative OSI - Open Software License v3.0 which accompanies this
+# distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+#-------------------------------------------------------------------------------
+log4j.rootCategory=OFF
diff --git a/com.kdmanalytics.toif.assimilator/target/MANIFEST.MF b/com.kdmanalytics.toif.assimilator/target/MANIFEST.MF
new file mode 100644
index 00000000..0bdf15de
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Export-Package: com.kdmanalytics.toif.assimilator; uses:="com.kdmanaly
+ tics.toif.mergers, org.apache.log4j, org.eclipse.ui.plugin, org.os
+ gi.framework, org.openrdf.repository, com.kdmanalytics.kdm.reposito
+ ryMerger, org.openrdf.model",com.kdmanalytics.toif.assimilator.confi
+ g,com.kdmanalytics.toif.assimilator.exceptions,com.kdmanalytics.toif.
+ assimilator.toifRdfTypes;uses:="org.w3c.dom,org.openrdf.model",com.kd
+ manalytics.toif.mergers;uses:="org.openrdf.model,org.w3c.dom"
+Require-Bundle: org.apache.xerces;bundle-version="[2.11.0,3.0.0)",org.
+ apache.log4j;bundle-version="[1.2.15,1.3.0)",org.apache.commons.lang3
+ ;bundle-version="[3.1.0,4.0.0)",org.apache.commons.io;bundle-version=
+ "[2.4.0,3.0.0)",org.openrdf.sesame;bundle-version="[2.4.0,2.5.0)",org
+ .eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",com.kdmanalytics
+ .kdm.repositoryMerger;bundle-version="[1.0.0,2.0.0)",com.google.guava
+ ;bundle-version="[14.0.1,15.0.0)",com.kdmanalytics.toif.common;bundle
+ -version="[1.14.0,2.0.0)"
+Bundle-Vendor: KDM Analytics Inc.
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.15.5
+Bundle-Name: TOIF Assimilator
+Bundle-Activator: com.kdmanalytics.toif.assimilator.Activator
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: com.kdmanalytics.toif.assimilator;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Activator.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Activator.class
new file mode 100644
index 00000000..518e5ac0
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Activator.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$1.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$1.class
new file mode 100644
index 00000000..38e7edb9
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$1.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$2.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$2.class
new file mode 100644
index 00000000..fc48da7a
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$2.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$3.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$3.class
new file mode 100644
index 00000000..8a848c3c
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$3.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$4.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$4.class
new file mode 100644
index 00000000..8b102803
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$4.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$5.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$5.class
new file mode 100644
index 00000000..ad0173e8
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$5.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class
new file mode 100644
index 00000000..38471789
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator$ThreadStatus.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator.class
new file mode 100644
index 00000000..2d1cbcd4
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/Assimilator.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/AttributeUtilities.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/AttributeUtilities.class
new file mode 100644
index 00000000..074999cf
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/AttributeUtilities.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/DelayedRelation.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/DelayedRelation.class
new file mode 100644
index 00000000..1d082c66
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/DelayedRelation.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class
new file mode 100644
index 00000000..0d4e0465
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree$Node.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree.class
new file mode 100644
index 00000000..42ffb03d
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTree.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class
new file mode 100644
index 00000000..f0e24a34
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie$Node.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie.class
new file mode 100644
index 00000000..bd4330ff
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/FilePathTrie.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class
new file mode 100644
index 00000000..8c6b8227
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmiIdHandler.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class
new file mode 100644
index 00000000..c4a2d0f4
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/KdmXmlHandler.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class
new file mode 100644
index 00000000..6bc13fc7
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/TripleStatementWriter.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/UniqueID.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/UniqueID.class
new file mode 100644
index 00000000..e9fc7cba
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/UniqueID.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/XMLNode.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/XMLNode.class
new file mode 100644
index 00000000..e9758a0f
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/XMLNode.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/config/cxx.cfg b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/config/cxx.cfg
new file mode 100644
index 00000000..01fd647d
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/config/cxx.cfg
@@ -0,0 +1,39 @@
+# Actions define the merge behaviour for various element KDM types. This specifies
+# how two files are merged together.
+#
+# MERGE Merges the contents of like IDed nodes together
+# COPY Copies the information in the node even if the ID is already represented
+# IGNORE Does not specifically merge or copy data, but recurses down the tree and
+# let the children specify for themselves.
+#
+# To match multiple elements you may use regular expressions.
+#
+# The default behaviour is specified by using catch all regex ".*". Ensure that this
+# is the LAST element or it will mask any other regex entries.
+#
+# When identifying a merge type for an element, first an exact match is attempted,
+# then regular expressions are evaluated in the order in which they appear in the
+# file.
+#
+action,code/Package,MERGE
+action,code/LanguageUnit,MERGE
+action,code/SharedUnit,MERGE
+action,code/CodeAssembly,MERGE
+action,code/CompilationUnit,MERGE
+action,code/CompilationUnit,MERGE
+action,source/StorableUnit,MERGE
+action,source/Directory,MERGE
+action,code/MethodUnit,SINGLETON
+action,code/CallableUnit,SINGLETON
+action,action/BlockUnit,SINGLETON
+action,.*Model,MERGE
+action,kdm/ExtensionFamily,MERGE
+action,data/DataContainer,MERGE
+
+# This regex matches everything else. Note that the default behaviour in the linker
+# is currently to ignore, but since this could change it is probably a good idea to
+# actively code this behaviour.
+action,.*,IGNORE
+
+# When elements have no IDs, how should they be handled?
+noid,COPY
\ No newline at end of file
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class
new file mode 100644
index 00000000..39a292f5
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/exceptions/AssimilatorArgumentException.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class
new file mode 100644
index 00000000..1ac2d05e
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/SeenStatement.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class
new file mode 100644
index 00000000..b46f7c9f
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfBnode.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class
new file mode 100644
index 00000000..d94e35ac
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfFile.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class
new file mode 100644
index 00000000..cbc2c823
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfResource.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class
new file mode 100644
index 00000000..f224d79a
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifRdfValue.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class
new file mode 100644
index 00000000..1dee27fa
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/assimilator/toifRdfTypes/ToifStatement.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/StatementMapping.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/StatementMapping.class
new file mode 100644
index 00000000..0612fe2f
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/StatementMapping.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/ToifMerger.class b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/ToifMerger.class
new file mode 100644
index 00000000..9945fd62
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/classes/com/kdmanalytics/toif/mergers/ToifMerger.class differ
diff --git a/com.kdmanalytics.toif.assimilator/target/classes/log4j.properties b/com.kdmanalytics.toif.assimilator/target/classes/log4j.properties
new file mode 100644
index 00000000..6474c8fe
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/classes/log4j.properties
@@ -0,0 +1,7 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and the
+# accompanying materials are made available under the terms of the Open Source
+# Initiative OSI - Open Software License v3.0 which accompanies this
+# distribution, and is available at http://www.opensource.org/licenses/osl-3.0.php/
+#-------------------------------------------------------------------------------
+log4j.rootCategory=OFF
diff --git a/com.kdmanalytics.toif.assimilator/target/com.kdmanalytics.toif.assimilator-1.15.5.jar b/com.kdmanalytics.toif.assimilator/target/com.kdmanalytics.toif.assimilator-1.15.5.jar
new file mode 100644
index 00000000..7e3a05c7
Binary files /dev/null and b/com.kdmanalytics.toif.assimilator/target/com.kdmanalytics.toif.assimilator-1.15.5.jar differ
diff --git a/com.kdmanalytics.toif.assimilator/target/local-artifacts.properties b/com.kdmanalytics.toif.assimilator/target/local-artifacts.properties
new file mode 100644
index 00000000..7b14ac13
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/local-artifacts.properties
@@ -0,0 +1,4 @@
+#Thu May 29 09:56:09 EDT 2014
+artifact.attached.p2metadata=/home/adam/git/toif/plugins/com.kdmanalytics.toif.assimilator/target/p2content.xml
+artifact.main=/home/adam/git/toif/plugins/com.kdmanalytics.toif.assimilator/target/com.kdmanalytics.toif.assimilator-1.15.5.jar
+artifact.attached.p2artifacts=/home/adam/git/toif/plugins/com.kdmanalytics.toif.assimilator/target/p2artifacts.xml
diff --git a/com.kdmanalytics.toif.assimilator/target/maven-archiver/pom.properties b/com.kdmanalytics.toif.assimilator/target/maven-archiver/pom.properties
new file mode 100644
index 00000000..554f9a9d
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu May 29 09:56:09 EDT 2014
+version=1.15.5
+groupId=com.kdmanalytics.toif.compile
+artifactId=com.kdmanalytics.toif.assimilator
diff --git a/com.kdmanalytics.toif.assimilator/target/p2artifacts.xml b/com.kdmanalytics.toif.assimilator/target/p2artifacts.xml
new file mode 100644
index 00000000..3b7edfe3
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/p2artifacts.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/com.kdmanalytics.toif.assimilator/target/p2content.xml b/com.kdmanalytics.toif.assimilator/target/p2content.xml
new file mode 100644
index 00000000..a747a742
--- /dev/null
+++ b/com.kdmanalytics.toif.assimilator/target/p2content.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bundle-SymbolicName: com.kdmanalytics.toif.assimilator;singleton:=true
Bundle-Version: 1.15.5
+
+
+
+
+
diff --git a/com.kdmanalytics.toif.ccr/.classpath b/com.kdmanalytics.toif.ccr/.classpath
new file mode 100644
index 00000000..ad32c83a
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/com.kdmanalytics.toif.ccr/.project b/com.kdmanalytics.toif.ccr/.project
new file mode 100644
index 00000000..9da639ee
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/.project
@@ -0,0 +1,28 @@
+
+
+ com.kdmanalytics.toif.ccr
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/com.kdmanalytics.toif.ccr/.settings/org.eclipse.jdt.core.prefs b/com.kdmanalytics.toif.ccr/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..fd7710eb
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Sun Apr 01 11:13:07 EDT 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/com.kdmanalytics.toif.ccr/META-INF/MANIFEST.MF b/com.kdmanalytics.toif.ccr/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..905aea38
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TOIF Code Coverage report
+Bundle-SymbolicName: com.kdmanalytics.toif.ccr;singleton:=true
+Bundle-Version: 1.16.0.qualifier
+Bundle-Activator: com.kdmanalytics.toif.ccr.Activator
+Bundle-Vendor: KDM Analytics Inc.
+Require-Bundle: org.eclipse.ui;bundle-version="[3.7.0,4.2.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.2.0)",
+ org.openrdf.sesame;bundle-version="[2.4.0,2.5.0)",
+ org.apache.log4j;bundle-version="[1.2.0,1.3.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Export-Package: com.kdmanalytics.toif.ccr
diff --git a/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/Activator.class b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/Activator.class
new file mode 100644
index 00000000..7633a465
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/Activator.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CoverageClaimGenerator.class b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CoverageClaimGenerator.class
new file mode 100644
index 00000000..a436e1dd
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CoverageClaimGenerator.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CweToName.class b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CweToName.class
new file mode 100644
index 00000000..6b3d1eb6
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/com/kdmanalytics/toif/ccr/CweToName.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/config/CweIdToName b/com.kdmanalytics.toif.ccr/bin/config/CweIdToName
new file mode 100644
index 00000000..1ba83074
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/bin/config/CweIdToName
@@ -0,0 +1,886 @@
+1=Location
+2=Environment
+3=Technology-specific Environment Issues
+4=J2EE Environment Issues
+5=J2EE Misconfiguration: Data Transmission Without Encryption
+6=J2EE Misconfiguration: Insufficient Session-ID Length
+7=J2EE Misconfiguration: Missing Custom Error Page
+8=J2EE Misconfiguration: Entity Bean Declared Remote
+9=J2EE Misconfiguration: Weak Access Permissions for EJB Methods
+10=ASP.NET Environment Issues
+11=ASP.NET Misconfiguration: Creating Debug Binary
+12=ASP.NET Misconfiguration: Missing Custom Error Page
+13=ASP.NET Misconfiguration: Password in Configuration File
+14=Compiler Removal of Code to Clear Buffers
+15=External Control of System or Configuration Setting
+16=Configuration
+17=Code
+18=Source Code
+19=Data Handling
+20=Improper Input Validation
+21=Pathname Traversal and Equivalence Errors
+22=Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
+23=Relative Path Traversal
+24=Path Traversal: '../filedir'
+25=Path Traversal: '/../filedir'
+26=Path Traversal: '/dir/../filename'
+27=Path Traversal: 'dir/../../filename'
+28=Path Traversal: '..\filedir'
+29=Path Traversal: '\..\filename'
+30=Path Traversal: '\dir\..\filename'
+31=Path Traversal: 'dir\..\..\filename'
+32=Path Traversal: '...' (Triple Dot)
+33=Path Traversal: '....' (Multiple Dot)
+34=Path Traversal: '....//'
+35=Path Traversal: '.../...//'
+36=Absolute Path Traversal
+37=Path Traversal: '/absolute/pathname/here'
+38=Path Traversal: '\absolute\pathname\here'
+39=Path Traversal: 'C:dirname'
+40=Path Traversal: '\\UNC\share\name\' (Windows UNC Share)
+41=Improper Resolution of Path Equivalence
+42=Path Equivalence: 'filename.' (Trailing Dot)
+43=Path Equivalence: 'filename....' (Multiple Trailing Dot)
+44=Path Equivalence: 'file.name' (Internal Dot)
+45=Path Equivalence: 'file...name' (Multiple Internal Dot)
+46=Path Equivalence: 'filename ' (Trailing Space)
+47=Path Equivalence: ' filename' (Leading Space)
+48=Path Equivalence: 'file name' (Internal Whitespace)
+49=Path Equivalence: 'filename/' (Trailing Slash)
+50=Path Equivalence: '//multiple/leading/slash'
+51=Path Equivalence: '/multiple//internal/slash'
+52=Path Equivalence: '/multiple/trailing/slash//'
+53=Path Equivalence: '\multiple\\internal\backslash'
+54=Path Equivalence: 'filedir\' (Trailing Backslash)
+55=Path Equivalence: '/./' (Single Dot Directory)
+56=Path Equivalence: 'filedir*' (Wildcard)
+57=Path Equivalence: 'fakedir/../realdir/filename'
+58=Path Equivalence: Windows 8.3 Filename
+59=Improper Link Resolution Before File Access ('Link Following')
+60=UNIX Path Link Problems
+61=UNIX Symbolic Link (Symlink) Following
+62=UNIX Hard Link
+63=Windows Path Link Problems
+64=Windows Shortcut Following (.LNK)
+65=Windows Hard Link
+66=Improper Handling of File Names that Identify Virtual Resources
+67=Improper Handling of Windows Device Names
+68=Windows Virtual File Problems
+69=Improper Handling of Windows ::DATA Alternate Data Stream
+70=Mac Virtual File Problems
+71=Apple '.DS_Store'
+72=Improper Handling of Apple HFS+ Alternate Data Stream Path
+73=External Control of File Name or Path
+74=Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection')
+75=Failure to Sanitize Special Elements into a Different Plane (Special Element Injection)
+76=Improper Neutralization of Equivalent Special Elements
+77=Improper Neutralization of Special Elements used in a Command ('Command Injection')
+78=Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
+79=Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
+80=Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)
+81=Improper Neutralization of Script in an Error Message Web Page
+82=Improper Neutralization of Script in Attributes of IMG Tags in a Web Page
+83=Improper Neutralization of Script in Attributes in a Web Page
+84=Improper Neutralization of Encoded URI Schemes in a Web Page
+85=Doubled Character XSS Manipulations
+86=Improper Neutralization of Invalid Characters in Identifiers in Web Pages
+87=Improper Neutralization of Alternate XSS Syntax
+88=Argument Injection or Modification
+89=Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
+90=Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')
+91=XML Injection (aka Blind XPath Injection)
+92=DEPRECATED: Improper Sanitization of Custom Special Characters
+93=Improper Neutralization of CRLF Sequences ('CRLF Injection')
+94=Improper Control of Generation of Code ('Code Injection')
+95=Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')
+96=Improper Neutralization of Directives in Statically Saved Code ('Static Code Injection')
+97=Improper Neutralization of Server-Side Includes (SSI) Within a Web Page
+98=Improper Control of Filename for Include/Require Statement in PHP Program ('PHP File Inclusion')
+99=Improper Control of Resource Identifiers ('Resource Injection')
+100=Technology-Specific Input Validation Problems
+101=Struts Validation Problems
+102=Struts: Duplicate Validation Forms
+103=Struts: Incomplete validate() Method Definition
+104=Struts: Form Bean Does Not Extend Validation Class
+105=Struts: Form Field Without Validator
+106=Struts: Plug-in Framework not in Use
+107=Struts: Unused Validation Form
+108=Struts: Unvalidated Action Form
+109=Struts: Validator Turned Off
+110=Struts: Validator Without Form Field
+111=Direct Use of Unsafe JNI
+112=Missing XML Validation
+113=Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')
+114=Process Control
+115=Misinterpretation of Input
+116=Improper Encoding or Escaping of Output
+117=Improper Output Neutralization for Logs
+118=Improper Access of Indexable Resource ('Range Error')
+119=Improper Restriction of Operations within the Bounds of a Memory Buffer
+120=Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')
+121=Stack-based Buffer Overflow
+122=Heap-based Buffer Overflow
+123=Write-what-where Condition
+124=Buffer Underwrite ('Buffer Underflow')
+125=Out-of-bounds Read
+126=Buffer Over-read
+127=Buffer Under-read
+128=Wrap-around Error
+129=Improper Validation of Array Index
+130=Improper Handling of Length Parameter Inconsistency
+131=Incorrect Calculation of Buffer Size
+132=DEPRECATED (Duplicate): Miscalculated Null Termination
+133=String Errors
+134=Uncontrolled Format String
+135=Incorrect Calculation of Multi-Byte String Length
+136=Type Errors
+137=Representation Errors
+138=Improper Neutralization of Special Elements
+139=DEPRECATED: General Special Element Problems
+140=Improper Neutralization of Delimiters
+141=Improper Neutralization of Parameter/Argument Delimiters
+142=Improper Neutralization of Value Delimiters
+143=Improper Neutralization of Record Delimiters
+144=Improper Neutralization of Line Delimiters
+145=Improper Neutralization of Section Delimiters
+146=Improper Neutralization of Expression/Command Delimiters
+147=Improper Neutralization of Input Terminators
+148=Improper Neutralization of Input Leaders
+149=Improper Neutralization of Quoting Syntax
+150=Improper Neutralization of Escape, Meta, or Control Sequences
+151=Improper Neutralization of Comment Delimiters
+152=Improper Neutralization of Macro Symbols
+153=Improper Neutralization of Substitution Characters
+154=Improper Neutralization of Variable Name Delimiters
+155=Improper Neutralization of Wildcards or Matching Symbols
+156=Improper Neutralization of Whitespace
+157=Failure to Sanitize Paired Delimiters
+158=Improper Neutralization of Null Byte or NUL Character
+159=Failure to Sanitize Special Element
+160=Improper Neutralization of Leading Special Elements
+161=Improper Neutralization of Multiple Leading Special Elements
+162=Improper Neutralization of Trailing Special Elements
+163=Improper Neutralization of Multiple Trailing Special Elements
+164=Improper Neutralization of Internal Special Elements
+165=Improper Neutralization of Multiple Internal Special Elements
+166=Improper Handling of Missing Special Element
+167=Improper Handling of Additional Special Element
+168=Improper Handling of Inconsistent Special Elements
+169=Technology-Specific Special Elements
+170=Improper Null Termination
+171=Cleansing, Canonicalization, and Comparison Errors
+172=Encoding Error
+173=Improper Handling of Alternate Encoding
+174=Double Decoding of the Same Data
+175=Improper Handling of Mixed Encoding
+176=Improper Handling of Unicode Encoding
+177=Improper Handling of URL Encoding (Hex Encoding)
+178=Improper Handling of Case Sensitivity
+179=Incorrect Behavior Order: Early Validation
+180=Incorrect Behavior Order: Validate Before Canonicalize
+181=Incorrect Behavior Order: Validate Before Filter
+182=Collapse of Data into Unsafe Value
+183=Permissive Whitelist
+184=Incomplete Blacklist
+185=Incorrect Regular Expression
+186=Overly Restrictive Regular Expression
+187=Partial Comparison
+188=Reliance on Data/Memory Layout
+189=Numeric Errors
+190=Integer Overflow or Wraparound
+191=Integer Underflow (Wrap or Wraparound)
+192=Integer Coercion Error
+193=Off-by-one Error
+194=Unexpected Sign Extension
+195=Signed to Unsigned Conversion Error
+196=Unsigned to Signed Conversion Error
+197=Numeric Truncation Error
+198=Use of Incorrect Byte Ordering
+199=Information Management Errors
+200=Information Exposure
+201=Information Exposure Through Sent Data
+202=Exposure of Sensitive Data Through Data Queries
+203=Information Exposure Through Discrepancy
+204=Response Discrepancy Information Exposure
+205=Information Exposure Through Behavioral Discrepancy
+206=Information Exposure of Internal State Through Behavioral Inconsistency
+207=Information Exposure Through an External Behavioral Inconsistency
+208=Information Exposure Through Timing Discrepancy
+209=Information Exposure Through an Error Message
+210=Information Exposure Through Generated Error Message
+211=Information Exposure Through External Error Message
+212=Improper Cross-boundary Removal of Sensitive Data
+213=Intentional Information Exposure
+214=Information Exposure Through Process Environment
+215=Information Exposure Through Debug Information
+216=Containment Errors (Container Errors)
+217=DEPRECATED: Failure to Protect Stored Data from Modification
+218=DEPRECATED (Duplicate): Failure to provide confidentiality for stored data
+219=Sensitive Data Under Web Root
+220=Sensitive Data Under FTP Root
+221=Information Loss or Omission
+222=Truncation of Security-relevant Information
+223=Omission of Security-relevant Information
+224=Obscured Security-relevant Information by Alternate Name
+225=DEPRECATED (Duplicate): General Information Management Problems
+226=Sensitive Information Uncleared Before Release
+227=Improper Fulfillment of API Contract ('API Abuse')
+228=Improper Handling of Syntactically Invalid Structure
+229=Improper Handling of Values
+230=Improper Handling of Missing Values
+231=Improper Handling of Extra Values
+232=Improper Handling of Undefined Values
+233=Parameter Problems
+234=Failure to Handle Missing Parameter
+235=Improper Handling of Extra Parameters
+236=Improper Handling of Undefined Parameters
+237=Improper Handling of Structural Elements
+238=Improper Handling of Incomplete Structural Elements
+239=Failure to Handle Incomplete Element
+240=Improper Handling of Inconsistent Structural Elements
+241=Improper Handling of Unexpected Data Type
+242=Use of Inherently Dangerous Function
+243=Creation of chroot Jail Without Changing Working Directory
+244=Improper Clearing of Heap Memory Before Release ('Heap Inspection')
+245=J2EE Bad Practices: Direct Management of Connections
+246=J2EE Bad Practices: Direct Use of Sockets
+247=Reliance on DNS Lookups in a Security Decision
+248=Uncaught Exception
+249=DEPRECATED: Often Misused: Path Manipulation
+250=Execution with Unnecessary Privileges
+251=Often Misused: String Management
+252=Unchecked Return Value
+253=Incorrect Check of Function Return Value
+254=Security Features
+255=Credentials Management
+256=Plaintext Storage of a Password
+257=Storing Passwords in a Recoverable Format
+258=Empty Password in Configuration File
+259=Use of Hard-coded Password
+260=Password in Configuration File
+261=Weak Cryptography for Passwords
+262=Not Using Password Aging
+263=Password Aging with Long Expiration
+264=Permissions, Privileges, and Access Controls
+265=Privilege / Sandbox Issues
+266=Incorrect Privilege Assignment
+267=Privilege Defined With Unsafe Actions
+268=Privilege Chaining
+269=Improper Privilege Management
+270=Privilege Context Switching Error
+271=Privilege Dropping / Lowering Errors
+272=Least Privilege Violation
+273=Improper Check for Dropped Privileges
+274=Improper Handling of Insufficient Privileges
+275=Permission Issues
+276=Incorrect Default Permissions
+277=Insecure Inherited Permissions
+278=Insecure Preserved Inherited Permissions
+279=Incorrect Execution-Assigned Permissions
+280=Improper Handling of Insufficient Permissions or Privileges
+281=Improper Preservation of Permissions
+282=Improper Ownership Management
+283=Unverified Ownership
+284=Improper Access Control
+285=Improper Authorization
+286=Incorrect User Management
+287=Improper Authentication
+288=Authentication Bypass Using an Alternate Path or Channel
+289=Authentication Bypass by Alternate Name
+290=Authentication Bypass by Spoofing
+291=Trusting Self-reported IP Address
+292=Trusting Self-reported DNS Name
+293=Using Referer Field for Authentication
+294=Authentication Bypass by Capture-replay
+295=Certificate Issues
+296=Improper Following of Chain of Trust for Certificate Validation
+297=Improper Validation of Host-specific Certificate Data
+298=Improper Validation of Certificate Expiration
+299=Improper Check for Certificate Revocation
+300=Channel Accessible by Non-Endpoint ('Man-in-the-Middle')
+301=Reflection Attack in an Authentication Protocol
+302=Authentication Bypass by Assumed-Immutable Data
+303=Incorrect Implementation of Authentication Algorithm
+304=Missing Critical Step in Authentication
+305=Authentication Bypass by Primary Weakness
+306=Missing Authentication for Critical Function
+307=Improper Restriction of Excessive Authentication Attempts
+308=Use of Single-factor Authentication
+309=Use of Password System for Primary Authentication
+310=Cryptographic Issues
+311=Missing Encryption of Sensitive Data
+312=Cleartext Storage of Sensitive Information
+313=Plaintext Storage in a File or on Disk
+314=Plaintext Storage in the Registry
+315=Plaintext Storage in a Cookie
+316=Plaintext Storage in Memory
+317=Plaintext Storage in GUI
+318=Plaintext Storage in Executable
+319=Cleartext Transmission of Sensitive Information
+320=Key Management Errors
+321=Use of Hard-coded Cryptographic Key
+322=Key Exchange without Entity Authentication
+323=Reusing a Nonce, Key Pair in Encryption
+324=Use of a Key Past its Expiration Date
+325=Missing Required Cryptographic Step
+326=Inadequate Encryption Strength
+327=Use of a Broken or Risky Cryptographic Algorithm
+328=Reversible One-Way Hash
+329=Not Using a Random IV with CBC Mode
+330=Use of Insufficiently Random Values
+331=Insufficient Entropy
+332=Insufficient Entropy in PRNG
+333=Improper Handling of Insufficient Entropy in TRNG
+334=Small Space of Random Values
+335=PRNG Seed Error
+336=Same Seed in PRNG
+337=Predictable Seed in PRNG
+338=Use of Cryptographically Weak PRNG
+339=Small Seed Space in PRNG
+340=Predictability Problems
+341=Predictable from Observable State
+342=Predictable Exact Value from Previous Values
+343=Predictable Value Range from Previous Values
+344=Use of Invariant Value in Dynamically Changing Context
+345=Insufficient Verification of Data Authenticity
+346=Origin Validation Error
+347=Improper Verification of Cryptographic Signature
+348=Use of Less Trusted Source
+349=Acceptance of Extraneous Untrusted Data With Trusted Data
+350=Improperly Trusted Reverse DNS
+351=Insufficient Type Distinction
+352=Cross-Site Request Forgery (CSRF)
+353=Missing Support for Integrity Check
+354=Improper Validation of Integrity Check Value
+355=User Interface Security Issues
+356=Product UI does not Warn User of Unsafe Actions
+357=Insufficient UI Warning of Dangerous Operations
+358=Improperly Implemented Security Check for Standard
+359=Privacy Violation
+360=Trust of System Event Data
+361=Time and State
+362=Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
+363=Race Condition Enabling Link Following
+364=Signal Handler Race Condition
+365=Race Condition in Switch
+366=Race Condition within a Thread
+367=Time-of-check Time-of-use (TOCTOU) Race Condition
+368=Context Switching Race Condition
+369=Divide By Zero
+370=Missing Check for Certificate Revocation after Initial Check
+371=State Issues
+372=Incomplete Internal State Distinction
+373=DEPRECATED: State Synchronization Error
+374=Passing Mutable Objects to an Untrusted Method
+375=Returning a Mutable Object to an Untrusted Caller
+376=Temporary File Issues
+377=Insecure Temporary File
+378=Creation of Temporary File With Insecure Permissions
+379=Creation of Temporary File in Directory with Incorrect Permissions
+380=Technology-Specific Time and State Issues
+381=J2EE Time and State Issues
+382=J2EE Bad Practices: Use of System.exit()
+383=J2EE Bad Practices: Direct Use of Threads
+384=Session Fixation
+385=Covert Timing Channel
+386=Symbolic Name not Mapping to Correct Object
+387=Signal Errors
+388=Error Handling
+389=Error Conditions, Return Values, Status Codes
+390=Detection of Error Condition Without Action
+391=Unchecked Error Condition
+392=Missing Report of Error Condition
+393=Return of Wrong Status Code
+394=Unexpected Status Code or Return Value
+395=Use of NullPointerException Catch to Detect NULL Pointer Dereference
+396=Declaration of Catch for Generic Exception
+397=Declaration of Throws for Generic Exception
+398=Indicator of Poor Code Quality
+399=Resource Management Errors
+400=Uncontrolled Resource Consumption ('Resource Exhaustion')
+401=Improper Release of Memory Before Removing Last Reference ('Memory Leak')
+402=Transmission of Private Resources into a New Sphere ('Resource Leak')
+403=Exposure of File Descriptor to Unintended Control Sphere
+404=Improper Resource Shutdown or Release
+405=Asymmetric Resource Consumption (Amplification)
+406=Insufficient Control of Network Message Volume (Network Amplification)
+407=Algorithmic Complexity
+408=Incorrect Behavior Order: Early Amplification
+409=Improper Handling of Highly Compressed Data (Data Amplification)
+410=Insufficient Resource Pool
+411=Resource Locking Problems
+412=Unrestricted Externally Accessible Lock
+413=Improper Resource Locking
+414=Missing Lock Check
+415=Double Free
+416=Use After Free
+417=Channel and Path Errors
+418=Channel Errors
+419=Unprotected Primary Channel
+420=Unprotected Alternate Channel
+421=Race Condition During Access to Alternate Channel
+422=Unprotected Windows Messaging Channel ('Shatter')
+423=DEPRECATED (Duplicate): Proxied Trusted Channel
+424=Improper Protection of Alternate Path
+425=Direct Request ('Forced Browsing')
+426=Untrusted Search Path
+427=Uncontrolled Search Path Element
+428=Unquoted Search Path or Element
+429=Handler Errors
+430=Deployment of Wrong Handler
+431=Missing Handler
+432=Dangerous Signal Handler not Disabled During Sensitive Operations
+433=Unparsed Raw Web Content Delivery
+434=Unrestricted Upload of File with Dangerous Type
+435=Interaction Error
+436=Interpretation Conflict
+437=Incomplete Model of Endpoint Features
+438=Behavioral Problems
+439=Behavioral Change in New Version or Environment
+440=Expected Behavior Violation
+441=Unintended Proxy/Intermediary
+442=Web Problems
+443=DEPRECATED (Duplicate): HTTP response splitting
+444=Inconsistent Interpretation of HTTP Requests ('HTTP Request Smuggling')
+445=User Interface Errors
+446=UI Discrepancy for Security Feature
+447=Unimplemented or Unsupported Feature in UI
+448=Obsolete Feature in UI
+449=The UI Performs the Wrong Action
+450=Multiple Interpretations of UI Input
+451=UI Misrepresentation of Critical Information
+452=Initialization and Cleanup Errors
+453=Insecure Default Variable Initialization
+454=External Initialization of Trusted Variables or Data Stores
+455=Non-exit on Failed Initialization
+456=Missing Initialization
+457=Use of Uninitialized Variable
+458=DEPRECATED: Incorrect Initialization
+459=Incomplete Cleanup
+460=Improper Cleanup on Thrown Exception
+461=Data Structure Issues
+462=Duplicate Key in Associative List (Alist)
+463=Deletion of Data Structure Sentinel
+464=Addition of Data Structure Sentinel
+465=Pointer Issues
+466=Return of Pointer Value Outside of Expected Range
+467=Use of sizeof() on a Pointer Type
+468=Incorrect Pointer Scaling
+469=Use of Pointer Subtraction to Determine Size
+470=Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection')
+471=Modification of Assumed-Immutable Data (MAID)
+472=External Control of Assumed-Immutable Web Parameter
+473=PHP External Variable Modification
+474=Use of Function with Inconsistent Implementations
+475=Undefined Behavior for Input to API
+476=NULL Pointer Dereference
+477=Use of Obsolete Functions
+478=Missing Default Case in Switch Statement
+479=Signal Handler Use of a Non-reentrant Function
+480=Use of Incorrect Operator
+481=Assigning instead of Comparing
+482=Comparing instead of Assigning
+483=Incorrect Block Delimitation
+484=Omitted Break Statement in Switch
+485=Insufficient Encapsulation
+486=Comparison of Classes by Name
+487=Reliance on Package-level Scope
+488=Exposure of Data Element to Wrong Session
+489=Leftover Debug Code
+490=Mobile Code Issues
+491=Public cloneable() Method Without Final ('Object Hijack')
+492=Use of Inner Class Containing Sensitive Data
+493=Critical Public Variable Without Final Modifier
+494=Download of Code Without Integrity Check
+495=Private Array-Typed Field Returned From A Public Method
+496=Public Data Assigned to Private Array-Typed Field
+497=Exposure of System Data to an Unauthorized Control Sphere
+498=Cloneable Class Containing Sensitive Information
+499=Serializable Class Containing Sensitive Data
+500=Public Static Field Not Marked Final
+501=Trust Boundary Violation
+502=Deserialization of Untrusted Data
+503=Byte/Object Code
+504=Motivation/Intent
+505=Intentionally Introduced Weakness
+506=Embedded Malicious Code
+507=Trojan Horse
+508=Non-Replicating Malicious Code
+509=Replicating Malicious Code (Virus or Worm)
+510=Trapdoor
+511=Logic/Time Bomb
+512=Spyware
+513=Intentionally Introduced Nonmalicious Weakness
+514=Covert Channel
+515=Covert Storage Channel
+516=DEPRECATED (Duplicate): Covert Timing Channel
+517=Other Intentional, Nonmalicious Weakness
+518=Inadvertently Introduced Weakness
+519=.NET Environment Issues
+520=.NET Misconfiguration: Use of Impersonation
+521=Weak Password Requirements
+522=Insufficiently Protected Credentials
+523=Unprotected Transport of Credentials
+524=Information Exposure Through Caching
+525=Information Exposure Through Browser Caching
+526=Information Exposure Through Environmental Variables
+527=Exposure of CVS Repository to an Unauthorized Control Sphere
+528=Exposure of Core Dump File to an Unauthorized Control Sphere
+529=Exposure of Access Control List Files to an Unauthorized Control Sphere
+530=Exposure of Backup File to an Unauthorized Control Sphere
+531=Information Exposure Through Test Code
+532=Information Exposure Through Log Files
+533=Information Exposure Through Server Log Files
+534=Information Exposure Through Debug Log Files
+535=Information Exposure Through Shell Error Message
+536=Information Exposure Through Servlet Runtime Error Message
+537=Information Exposure Through Java Runtime Error Message
+538=File and Directory Information Exposure
+539=Information Exposure Through Persistent Cookies
+540=Information Exposure Through Source Code
+541=Information Exposure Through Include Source Code
+542=Information Exposure Through Cleanup Log Files
+543=Use of Singleton Pattern Without Synchronization in a Multithreaded Context
+544=Missing Standardized Error Handling Mechanism
+545=Use of Dynamic Class Loading
+546=Suspicious Comment
+547=Use of Hard-coded, Security-relevant Constants
+548=Information Exposure Through Directory Listing
+549=Missing Password Field Masking
+550=Information Exposure Through Server Error Message
+551=Incorrect Behavior Order: Authorization Before Parsing and Canonicalization
+552=Files or Directories Accessible to External Parties
+553=Command Shell in Externally Accessible Directory
+554=ASP.NET Misconfiguration: Not Using Input Validation Framework
+555=J2EE Misconfiguration: Plaintext Password in Configuration File
+556=ASP.NET Misconfiguration: Use of Identity Impersonation
+557=Concurrency Issues
+558=Use of getlogin() in Multithreaded Application
+559=Often Misused: Arguments and Parameters
+560=Use of umask() with chmod-style Argument
+561=Dead Code
+562=Return of Stack Variable Address
+563=Unused Variable
+564=SQL Injection: Hibernate
+565=Reliance on Cookies without Validation and Integrity Checking
+566=Authorization Bypass Through User-Controlled SQL Primary Key
+567=Unsynchronized Access to Shared Data in a Multithreaded Context
+568=finalize() Method Without super.finalize()
+569=Expression Issues
+570=Expression is Always False
+571=Expression is Always True
+572=Call to Thread run() instead of start()
+573=Improper Following of Specification by Caller
+574=EJB Bad Practices: Use of Synchronization Primitives
+575=EJB Bad Practices: Use of AWT Swing
+576=EJB Bad Practices: Use of Java I/O
+577=EJB Bad Practices: Use of Sockets
+578=EJB Bad Practices: Use of Class Loader
+579=J2EE Bad Practices: Non-serializable Object Stored in Session
+580=clone() Method Without super.clone()
+581=Object Model Violation: Just One of Equals and Hashcode Defined
+582=Array Declared Public, Final, and Static
+583=finalize() Method Declared Public
+584=Return Inside Finally Block
+585=Empty Synchronized Block
+586=Explicit Call to Finalize()
+587=Assignment of a Fixed Address to a Pointer
+588=Attempt to Access Child of a Non-structure Pointer
+589=Call to Non-ubiquitous API
+590=Free of Memory not on the Heap
+591=Sensitive Data Storage in Improperly Locked Memory
+592=Authentication Bypass Issues
+593=Authentication Bypass: OpenSSL CTX Object Modified after SSL Objects are Created
+594=J2EE Framework: Saving Unserializable Objects to Disk
+595=Comparison of Object References Instead of Object Contents
+596=Incorrect Semantic Object Comparison
+597=Use of Wrong Operator in String Comparison
+598=Information Exposure Through Query Strings in GET Request
+599=Trust of OpenSSL Certificate Without Validation
+600=Uncaught Exception in Servlet
+601=URL Redirection to Untrusted Site ('Open Redirect')
+602=Client-Side Enforcement of Server-Side Security
+603=Use of Client-Side Authentication
+604=Deprecated Entries
+605=Multiple Binds to the Same Port
+606=Unchecked Input for Loop Condition
+607=Public Static Final Field References Mutable Object
+608=Struts: Non-private Field in ActionForm Class
+609=Double-Checked Locking
+610=Externally Controlled Reference to a Resource in Another Sphere
+611=Information Exposure Through XML External Entity Reference
+612=Information Exposure Through Indexing of Private Data
+613=Insufficient Session Expiration
+614=Sensitive Cookie in HTTPS Session Without 'Secure' Attribute
+615=Information Exposure Through Comments
+616=Incomplete Identification of Uploaded File Variables (PHP)
+617=Reachable Assertion
+618=Exposed Unsafe ActiveX Method
+619=Dangling Database Cursor ('Cursor Injection')
+620=Unverified Password Change
+621=Variable Extraction Error
+622=Unvalidated Function Hook Arguments
+623=Unsafe ActiveX Control Marked Safe For Scripting
+624=Executable Regular Expression Error
+625=Permissive Regular Expression
+626=Null Byte Interaction Error (Poison Null Byte)
+627=Dynamic Variable Evaluation
+628=Function Call with Incorrectly Specified Arguments
+629=Weaknesses in OWASP Top Ten (2007)
+630=Weaknesses Examined by SAMATE
+631=Resource-specific Weaknesses
+632=Weaknesses that Affect Files or Directories
+633=Weaknesses that Affect Memory
+634=Weaknesses that Affect System Processes
+635=Weaknesses Used by NVD
+636=Not Failing Securely ('Failing Open')
+637=Unnecessary Complexity in Protection Mechanism (Not Using 'Economy of Mechanism')
+638=Not Using Complete Mediation
+639=Authorization Bypass Through User-Controlled Key
+640=Weak Password Recovery Mechanism for Forgotten Password
+641=Improper Restriction of Names for Files and Other Resources
+642=External Control of Critical State Data
+643=Improper Neutralization of Data within XPath Expressions ('XPath Injection')
+644=Improper Neutralization of HTTP Headers for Scripting Syntax
+645=Overly Restrictive Account Lockout Mechanism
+646=Reliance on File Name or Extension of Externally-Supplied File
+647=Use of Non-Canonical URL Paths for Authorization Decisions
+648=Incorrect Use of Privileged APIs
+649=Reliance on Obfuscation or Encryption of Security-Relevant Inputs without Integrity Checking
+650=Trusting HTTP Permission Methods on the Server Side
+651=Information Exposure Through WSDL File
+652=Improper Neutralization of Data within XQuery Expressions ('XQuery Injection')
+653=Insufficient Compartmentalization
+654=Reliance on a Single Factor in a Security Decision
+655=Insufficient Psychological Acceptability
+656=Reliance on Security Through Obscurity
+657=Violation of Secure Design Principles
+658=Weaknesses in Software Written in C
+659=Weaknesses in Software Written in C++
+660=Weaknesses in Software Written in Java
+661=Weaknesses in Software Written in PHP
+662=Improper Synchronization
+663=Use of a Non-reentrant Function in a Concurrent Context
+664=Improper Control of a Resource Through its Lifetime
+665=Improper Initialization
+666=Operation on Resource in Wrong Phase of Lifetime
+667=Improper Locking
+668=Exposure of Resource to Wrong Sphere
+669=Incorrect Resource Transfer Between Spheres
+670=Always-Incorrect Control Flow Implementation
+671=Lack of Administrator Control over Security
+672=Operation on a Resource after Expiration or Release
+673=External Influence of Sphere Definition
+674=Uncontrolled Recursion
+675=Duplicate Operations on Resource
+676=Use of Potentially Dangerous Function
+677=Weakness Base Elements
+678=Composites
+679=Chain Elements
+680=Integer Overflow to Buffer Overflow
+681=Incorrect Conversion between Numeric Types
+682=Incorrect Calculation
+683=Function Call With Incorrect Order of Arguments
+684=Incorrect Provision of Specified Functionality
+685=Function Call With Incorrect Number of Arguments
+686=Function Call With Incorrect Argument Type
+687=Function Call With Incorrectly Specified Argument Value
+688=Function Call With Incorrect Variable or Reference as Argument
+689=Permission Race Condition During Resource Copy
+690=Unchecked Return Value to NULL Pointer Dereference
+691=Insufficient Control Flow Management
+692=Incomplete Blacklist to Cross-Site Scripting
+693=Protection Mechanism Failure
+694=Use of Multiple Resources with Duplicate Identifier
+695=Use of Low-Level Functionality
+696=Incorrect Behavior Order
+697=Insufficient Comparison
+698=Redirect Without Exit
+699=Development Concepts
+700=Seven Pernicious Kingdoms
+701=Weaknesses Introduced During Design
+702=Weaknesses Introduced During Implementation
+703=Improper Check or Handling of Exceptional Conditions
+704=Incorrect Type Conversion or Cast
+705=Incorrect Control Flow Scoping
+706=Use of Incorrectly-Resolved Name or Reference
+707=Improper Enforcement of Message or Data Structure
+708=Incorrect Ownership Assignment
+709=Named Chains
+710=Coding Standards Violation
+711=Weaknesses in OWASP Top Ten (2004)
+712=OWASP Top Ten 2007 Category A1 - Cross Site Scripting (XSS)
+713=OWASP Top Ten 2007 Category A2 - Injection Flaws
+714=OWASP Top Ten 2007 Category A3 - Malicious File Execution
+715=OWASP Top Ten 2007 Category A4 - Insecure Direct Object Reference
+716=OWASP Top Ten 2007 Category A5 - Cross Site Request Forgery (CSRF)
+717=OWASP Top Ten 2007 Category A6 - Information Leakage and Improper Error Handling
+718=OWASP Top Ten 2007 Category A7 - Broken Authentication and Session Management
+719=OWASP Top Ten 2007 Category A8 - Insecure Cryptographic Storage
+720=OWASP Top Ten 2007 Category A9 - Insecure Communications
+721=OWASP Top Ten 2007 Category A10 - Failure to Restrict URL Access
+722=OWASP Top Ten 2004 Category A1 - Unvalidated Input
+723=OWASP Top Ten 2004 Category A2 - Broken Access Control
+724=OWASP Top Ten 2004 Category A3 - Broken Authentication and Session Management
+725=OWASP Top Ten 2004 Category A4 - Cross-Site Scripting (XSS) Flaws
+726=OWASP Top Ten 2004 Category A5 - Buffer Overflows
+727=OWASP Top Ten 2004 Category A6 - Injection Flaws
+728=OWASP Top Ten 2004 Category A7 - Improper Error Handling
+729=OWASP Top Ten 2004 Category A8 - Insecure Storage
+730=OWASP Top Ten 2004 Category A9 - Denial of Service
+731=OWASP Top Ten 2004 Category A10 - Insecure Configuration Management
+732=Incorrect Permission Assignment for Critical Resource
+733=Compiler Optimization Removal or Modification of Security-critical Code
+734=Weaknesses Addressed by the CERT C Secure Coding Standard
+735=CERT C Secure Coding Section 01 - Preprocessor (PRE)
+736=CERT C Secure Coding Section 02 - Declarations and Initialization (DCL)
+737=CERT C Secure Coding Section 03 - Expressions (EXP)
+738=CERT C Secure Coding Section 04 - Integers (INT)
+739=CERT C Secure Coding Section 05 - Floating Point (FLP)
+740=CERT C Secure Coding Section 06 - Arrays (ARR)
+741=CERT C Secure Coding Section 07 - Characters and Strings (STR)
+742=CERT C Secure Coding Section 08 - Memory Management (MEM)
+743=CERT C Secure Coding Section 09 - Input Output (FIO)
+744=CERT C Secure Coding Section 10 - Environment (ENV)
+745=CERT C Secure Coding Section 11 - Signals (SIG)
+746=CERT C Secure Coding Section 12 - Error Handling (ERR)
+747=CERT C Secure Coding Section 49 - Miscellaneous (MSC)
+748=CERT C Secure Coding Section 50 - POSIX (POS)
+749=Exposed Dangerous Method or Function
+750=Weaknesses in the 2009 CWE/SANS Top 25 Most Dangerous Programming Errors
+751=Insecure Interaction Between Components
+752=Risky Resource Management
+753=Porous Defenses
+754=Improper Check for Unusual or Exceptional Conditions
+755=Improper Handling of Exceptional Conditions
+756=Missing Custom Error Page
+757=Selection of Less-Secure Algorithm During Negotiation ('Algorithm Downgrade')
+758=Reliance on Undefined, Unspecified, or Implementation-Defined Behavior
+759=Use of a One-Way Hash without a Salt
+760=Use of a One-Way Hash with a Predictable Salt
+761=Free of Pointer not at Start of Buffer
+762=Mismatched Memory Management Routines
+763=Release of Invalid Pointer or Reference
+764=Multiple Locks of a Critical Resource
+765=Multiple Unlocks of a Critical Resource
+766=Critical Variable Declared Public
+767=Access to Critical Private Variable via Public Method
+768=Incorrect Short Circuit Evaluation
+769=File Descriptor Exhaustion
+770=Allocation of Resources Without Limits or Throttling
+771=Missing Reference to Active Allocated Resource
+772=Missing Release of Resource after Effective Lifetime
+773=Missing Reference to Active File Descriptor or Handle
+774=Allocation of File Descriptors or Handles Without Limits or Throttling
+775=Missing Release of File Descriptor or Handle after Effective Lifetime
+776=Unrestricted Recursive Entity References in DTDs ('XML Bomb')
+777=Regular Expression without Anchors
+778=Insufficient Logging
+779=Logging of Excessive Data
+780=Use of RSA Algorithm without OAEP
+781=Improper Address Validation in IOCTL with METHOD_NEITHER I/O Control Code
+782=Exposed IOCTL with Insufficient Access Control
+783=Operator Precedence Logic Error
+784=Reliance on Cookies without Validation and Integrity Checking in a Security Decision
+785=Use of Path Manipulation Function without Maximum-sized Buffer
+786=Access of Memory Location Before Start of Buffer
+787=Out-of-bounds Write
+788=Access of Memory Location After End of Buffer
+789=Uncontrolled Memory Allocation
+790=Improper Filtering of Special Elements
+791=Incomplete Filtering of Special Elements
+792=Incomplete Filtering of One or More Instances of Special Elements
+793=Only Filtering One Instance of a Special Element
+794=Incomplete Filtering of Multiple Instances of Special Elements
+795=Only Filtering Special Elements at a Specified Location
+796=Only Filtering Special Elements Relative to a Marker
+797=Only Filtering Special Elements at an Absolute Position
+798=Use of Hard-coded Credentials
+799=Improper Control of Interaction Frequency
+800=Weaknesses in the 2010 CWE/SANS Top 25 Most Dangerous Programming Errors
+801=Insecure Interaction Between Components
+802=Risky Resource Management
+803=Porous Defenses
+804=Guessable CAPTCHA
+805=Buffer Access with Incorrect Length Value
+806=Buffer Access Using Size of Source Buffer
+807=Reliance on Untrusted Inputs in a Security Decision
+808=Weaknesses On the Cusp
+809=Weaknesses in OWASP Top Ten (2010)
+810=OWASP Top Ten 2010 Category A1 - Injection
+811=OWASP Top Ten 2010 Category A2 - Cross-Site Scripting (XSS)
+812=OWASP Top Ten 2010 Category A3 - Broken Authentication and Session Management
+813=OWASP Top Ten 2010 Category A4 - Insecure Direct Object References
+814=OWASP Top Ten 2010 Category A5 - Cross-Site Request Forgery(CSRF)
+815=OWASP Top Ten 2010 Category A6 - Security Misconfiguration
+816=OWASP Top Ten 2010 Category A7 - Insecure Cryptographic Storage
+817=OWASP Top Ten 2010 Category A8 - Failure to Restrict URL Access
+818=OWASP Top Ten 2010 Category A9 - Insufficient Transport Layer Protection
+819=OWASP Top Ten 2010 Category A10 - Unvalidated Redirects and Forwards
+820=Missing Synchronization
+821=Incorrect Synchronization
+822=Untrusted Pointer Dereference
+823=Use of Out-of-range Pointer Offset
+824=Access of Uninitialized Pointer
+825=Expired Pointer Dereference
+826=Premature Release of Resource During Expected Lifetime
+827=Improper Control of Document Type Definition
+828=Signal Handler with Functionality that is not Asynchronous-Safe
+829=Inclusion of Functionality from Untrusted Control Sphere
+830=Inclusion of Web Functionality from an Untrusted Source
+831=Signal Handler Function Associated with Multiple Signals
+832=Unlock of a Resource that is not Locked
+833=Deadlock
+834=Excessive Iteration
+835=Loop with Unreachable Exit Condition ('Infinite Loop')
+836=Use of Password Hash Instead of Password for Authentication
+837=Improper Enforcement of a Single, Unique Action
+838=Inappropriate Encoding for Output Context
+839=Numeric Range Comparison Without Minimum Check
+840=Business Logic Errors
+841=Improper Enforcement of Behavioral Workflow
+842=Placement of User into Incorrect Group
+843=Access of Resource Using Incompatible Type ('Type Confusion')
+844=Weaknesses Addressed by the CERT Java Secure Coding Standard
+845=CERT Java Secure Coding Section 00 - Input Validation and Data Sanitization (IDS)
+846=CERT Java Secure Coding Section 01 - Declarations and Initialization (DCL)
+847=CERT Java Secure Coding Section 02 - Expressions (EXP)
+848=CERT Java Secure Coding Section 03 - Numeric Types and Operations (NUM)
+849=CERT Java Secure Coding Section 04 - Object Orientation (OBJ)
+850=CERT Java Secure Coding Section 05 - Methods (MET)
+851=CERT Java Secure Coding Section 06 - Exceptional Behavior (ERR)
+852=CERT Java Secure Coding Section 07 - Visibility and Atomicity (VNA)
+853=CERT Java Secure Coding Section 08 - Locking (LCK)
+854=CERT Java Secure Coding Section 09 - Thread APIs (THI)
+855=CERT Java Secure Coding Section 10 - Thread Pools (TPS)
+856=CERT Java Secure Coding Section 11 - Thread-Safety Miscellaneous (TSM)
+857=CERT Java Secure Coding Section 12 - Input Output (FIO)
+858=CERT Java Secure Coding Section 13 - Serialization (SER)
+859=CERT Java Secure Coding Section 14 - Platform Security (SEC)
+860=CERT Java Secure Coding Section 15 - Runtime Environment (ENV)
+861=CERT Java Secure Coding Section 49 - Miscellaneous (MSC)
+862=Missing Authorization
+863=Incorrect Authorization
+864=Insecure Interaction Between Components
+865=Risky Resource Management
+866=Porous Defenses
+867=Weaknesses On the Cusp
+868=Weaknesses Addressed by the CERT C++ Secure Coding Standard
+869=CERT C++ Secure Coding Section 01 - Preprocessor (PRE)
+870=CERT C++ Secure Coding Section 02 - Declarations and Initialization (DCL)
+871=CERT C++ Secure Coding Section 03 - Expressions (EXP)
+872=CERT C++ Secure Coding Section 04 - Integers (INT)
+873=CERT C++ Secure Coding Section 05 - Floating Point Arithmetic (FLP)
+874=CERT C++ Secure Coding Section 06 - Arrays and the STL (ARR)
+875=CERT C++ Secure Coding Section 07 - Characters and Strings (STR)
+876=CERT C++ Secure Coding Section 08 - Memory Management (MEM)
+877=CERT C++ Secure Coding Section 09 - Input Output (FIO)
+878=CERT C++ Secure Coding Section 10 - Environment (ENV)
+879=CERT C++ Secure Coding Section 11 - Signals (SIG)
+880=CERT C++ Secure Coding Section 12 - Exceptions and Error Handling (ERR)
+881=CERT C++ Secure Coding Section 13 - Object Oriented Programming (OOP)
+882=CERT C++ Secure Coding Section 14 - Concurrency (CON)
+883=CERT C++ Secure Coding Section 49 - Miscellaneous (MSC)
+900=Weaknesses in the 2011 CWE/SANS Top 25 Most Dangerous Software Errors
+1000=Research Concepts
+2000=Comprehensive CWE Dictionary
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet$Rule.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet$Rule.class
new file mode 100644
index 00000000..83cf56e4
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet$Rule.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet.class
new file mode 100644
index 00000000..78c0cf99
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim$RuleSet.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim.class
new file mode 100644
index 00000000..ad79cd38
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims$Claim.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims.class
new file mode 100644
index 00000000..b002acdc
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType$Claims.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType.class
new file mode 100644
index 00000000..7173ea11
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaimType.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaims.class b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaims.class
new file mode 100644
index 00000000..bbdb0a6d
Binary files /dev/null and b/com.kdmanalytics.toif.ccr/bin/generated/CWECoverageClaims.class differ
diff --git a/com.kdmanalytics.toif.ccr/bin/generated/CWE_Coverage_Claims_Schema_v0.3.xsd b/com.kdmanalytics.toif.ccr/bin/generated/CWE_Coverage_Claims_Schema_v0.3.xsd
new file mode 100644
index 00000000..9aaecfab
--- /dev/null
+++ b/com.kdmanalytics.toif.ccr/bin/generated/CWE_Coverage_Claims_Schema_v0.3.xsd
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+