You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/10/20 14:49:42 UTC
[7/7] cayenne git commit: Upgrade datamap schema version from 8 to 9;
Upgrade datamap schema version from 8 to 9;
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f72210cc
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f72210cc
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f72210cc
Branch: refs/heads/master
Commit: f72210ccbd5663b71a0aee49ab527cd108bece3c
Parents: aa6efa4
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Oct 20 17:49:09 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Oct 20 17:49:09 2016 +0300
----------------------------------------------------------------------
.../src/test/resources/cayenne-crypto.xml | 2 +-
.../src/test/resources/datamap.map.xml | 6 +-
.../src/test/resources/cayenne-java8.xml | 2 +-
cayenne-java8/src/test/resources/java8.map.xml | 6 +-
.../src/test/resources/cayenne-joda.xml | 2 +-
cayenne-joda/src/test/resources/joda.map.xml | 6 +-
.../src/test/resources/cayenne-lifecycle.xml | 2 +-
.../src/test/resources/lifecycle-map.map.xml | 6 +-
.../cayenne/project/CayenneProjectModule.java | 4 +-
.../cayenne/project/FileProjectSaver.java | 2 +-
.../project/upgrade/v9/ProjectUpgrader_V9.java | 44 +++
.../project/upgrade/v9/UpgradeHandler_V9.java | 166 +++++++++
.../upgrade/v7/ProjectUpgrader_V7Test.java | 54 ++-
.../upgrade/v8/ProjectUpgrader_V8Test.java | 24 +-
.../upgrade/v9/ProjectUpgrader_V9Test.java | 185 ++++++++++
.../project/upgrade/v9/cayenne-PROJECT1.xml | 15 +
.../project/upgrade/v9/reverseEngineering.xml | 11 +
.../upgrade/v9/testProjectMap1_1.map.xml | 15 +
.../upgrade/v9/testProjectMap1_2.map.xml | 7 +
.../src/test/resources/cayenne-protostuff.xml | 2 +-
.../src/test/resources/protostuff.map.xml | 6 +-
.../java/org/apache/cayenne/map/DataMap.java | 4 +-
.../org/apache/cayenne/schema/8/modelMap.xsd | 338 -------------------
.../cayenne/schema/8/reverseEngineering.xsd | 141 --------
.../org/apache/cayenne/schema/9/modelMap.xsd | 338 +++++++++++++++++++
.../src/test/resources/array-type.map.xml | 6 +-
.../src/test/resources/binary-pk.map.xml | 6 +-
.../test/resources/cay743/cayenne-domain.xml | 2 +-
.../src/test/resources/cay743/map1.map.xml | 6 +-
.../src/test/resources/cay743/map2.map.xml | 6 +-
.../src/test/resources/cayenne-array-type.xml | 2 +-
.../src/test/resources/cayenne-binary-pk.xml | 2 +-
.../src/test/resources/cayenne-compound.xml | 2 +-
.../src/test/resources/cayenne-date-time.xml | 2 +-
.../src/test/resources/cayenne-delete-rules.xml | 2 +-
.../src/test/resources/cayenne-embeddable.xml | 2 +-
.../src/test/resources/cayenne-empty.xml | 2 +-
.../src/test/resources/cayenne-enum.xml | 2 +-
.../test/resources/cayenne-extended-type.xml | 2 +-
.../src/test/resources/cayenne-generated.xml | 2 +-
.../src/test/resources/cayenne-generic.xml | 2 +-
.../cayenne-inheritance-single-table1.xml | 2 +-
.../resources/cayenne-inheritance-vertical.xml | 2 +-
.../src/test/resources/cayenne-inheritance.xml | 2 +-
.../cayenne-lifecycle-callbacks-order.xml | 2 +-
.../src/test/resources/cayenne-lifecycles.xml | 2 +-
.../src/test/resources/cayenne-lob.xml | 2 +-
.../src/test/resources/cayenne-locking.xml | 2 +-
.../src/test/resources/cayenne-map-to-many.xml | 2 +-
.../test/resources/cayenne-meaningful-pk.xml | 2 +-
.../src/test/resources/cayenne-misc-types.xml | 2 +-
.../cayenne-mixed-persistence-strategy.xml | 2 +-
.../src/test/resources/cayenne-multi-tier.xml | 2 +-
.../src/test/resources/cayenne-multinode.xml | 2 +-
.../src/test/resources/cayenne-no-pk.xml | 2 +-
.../test/resources/cayenne-numeric-types.xml | 2 +-
.../src/test/resources/cayenne-oneway-rels.xml | 2 +-
...nne.configuration.rop.server.test-config.xml | 2 +-
.../src/test/resources/cayenne-people.xml | 2 +-
.../src/test/resources/cayenne-persistent.xml | 2 +-
.../src/test/resources/cayenne-primitive.xml | 2 +-
.../src/test/resources/cayenne-qualified.xml | 2 +-
.../resources/cayenne-quoted-identifiers.xml | 2 +-
.../src/test/resources/cayenne-reflexive.xml | 2 +-
.../cayenne-relationships-activity.xml | 2 +-
.../cayenne-relationships-child-master.xml | 2 +-
.../resources/cayenne-relationships-clob.xml | 2 +-
...cayenne-relationships-collection-to-many.xml | 2 +-
.../cayenne-relationships-delete-rules.xml | 2 +-
.../cayenne-relationships-flattened.xml | 2 +-
.../cayenne-relationships-set-to-many.xml | 2 +-
.../cayenne-relationships-to-many-fk.xml | 2 +-
.../cayenne-relationships-to-one-fk.xml | 2 +-
.../test/resources/cayenne-relationships.xml | 2 +-
.../src/test/resources/cayenne-return-types.xml | 2 +-
.../test/resources/cayenne-small-testmap.xml | 2 +-
.../src/test/resources/cayenne-soft-delete.xml | 2 +-
.../src/test/resources/cayenne-sus.xml | 2 +-
.../test/resources/cayenne-table-primitives.xml | 2 +-
.../src/test/resources/cayenne-testmap.xml | 2 +-
.../src/test/resources/cayenne-things.xml | 2 +-
.../src/test/resources/cayenne-toone.xml | 2 +-
.../cayenne-unsupported-distinct-types.xml | 2 +-
.../src/test/resources/cayenne-uuid.xml | 2 +-
.../src/test/resources/compound.map.xml | 6 +-
.../src/test/resources/date-time.map.xml | 6 +-
.../src/test/resources/delete-rules.map.xml | 6 +-
.../src/test/resources/embeddable.map.xml | 6 +-
cayenne-server/src/test/resources/empty.map.xml | 6 +-
cayenne-server/src/test/resources/enum.map.xml | 6 +-
.../src/test/resources/extended-type.map.xml | 6 +-
.../src/test/resources/generated.map.xml | 6 +-
.../src/test/resources/generic.map.xml | 6 +-
.../resources/inheritance-single-table1.map.xml | 6 +-
.../test/resources/inheritance-vertical.map.xml | 6 +-
.../src/test/resources/inheritance.map.xml | 6 +-
.../resources/lifecycle-callbacks-order.map.xml | 6 +-
.../src/test/resources/lifecycles.map.xml | 6 +-
cayenne-server/src/test/resources/lob.map.xml | 6 +-
.../src/test/resources/locking.map.xml | 6 +-
.../src/test/resources/map-db1.map.xml | 6 +-
.../src/test/resources/map-db2.map.xml | 6 +-
.../src/test/resources/map-to-many.map.xml | 6 +-
.../src/test/resources/meaningful-pk.map.xml | 6 +-
.../src/test/resources/misc-types.map.xml | 6 +-
.../mixed-persistence-strategy.map.xml | 6 +-
.../src/test/resources/multi-tier.map.xml | 6 +-
cayenne-server/src/test/resources/no-pk.map.xml | 6 +-
.../src/test/resources/numeric-types.map.xml | 6 +-
.../src/test/resources/oneway-rels.map.xml | 6 +-
.../src/test/resources/people.map.xml | 6 +-
.../src/test/resources/persistent.map.xml | 6 +-
.../src/test/resources/primitive.map.xml | 6 +-
.../src/test/resources/qualified.map.xml | 6 +-
.../test/resources/quoted-identifiers.map.xml | 6 +-
.../src/test/resources/reflexive.map.xml | 6 +-
.../resources/relationships-activity.map.xml | 6 +-
.../relationships-child-master.map.xml | 6 +-
.../test/resources/relationships-clob.map.xml | 6 +-
.../relationships-collection-to-many.map.xml | 6 +-
.../relationships-delete-rules.map.xml | 6 +-
.../resources/relationships-flattened.map.xml | 6 +-
.../resources/relationships-set-to-many.map.xml | 6 +-
.../resources/relationships-to-many-fk.map.xml | 6 +-
.../resources/relationships-to-one-fk.map.xml | 6 +-
.../src/test/resources/relationships.map.xml | 6 +-
.../src/test/resources/return-types.map.xml | 6 +-
.../src/test/resources/soft-delete.map.xml | 6 +-
.../src/test/resources/sus-map.map.xml | 6 +-
.../src/test/resources/table-primitives.map.xml | 6 +-
.../src/test/resources/testmap.map.xml | 6 +-
.../src/test/resources/things.map.xml | 6 +-
cayenne-server/src/test/resources/toone.map.xml | 6 +-
.../unsupported-distinct-types.map.xml | 6 +-
cayenne-server/src/test/resources/uuid.map.xml | 6 +-
.../tools/build-include-table.map.xml-result | 8 +-
.../testCustomObjectLayerSettings.map.xml | 6 +-
...testCustomObjectLayerSettings.map.xml-result | 6 +-
.../dbimport/testDefaultPackage.map.xml-result | 6 +-
.../testFilteringWithSchema.map.xml-result | 6 +-
...nsManyToManyWithRecursiveLink.map.xml-result | 6 +-
.../testImportAddTableAndColumn.map.xml | 6 +-
.../testImportAddTableAndColumn.map.xml-result | 6 +-
.../testImportNewDataMap.map.xml-result | 6 +-
.../dbimport/testImportWithoutChanges.map.xml | 6 +-
.../testImportWithoutChanges.map.xml-result | 6 +-
.../tools/dbimport/testOneToOne.map.xml-result | 6 +-
.../testPreserveCustomObjMappings.map.xml | 6 +-
...testPreserveCustomObjMappings.map.xml-result | 6 +-
.../dbimport/testPreserveRelationships.map.xml | 6 +-
.../testPreserveRelationships.map.xml-result | 6 +-
.../testSchemasAndTableExclude.map.xml-result | 6 +-
.../dbimport/testSkipPrimaryKeyLoading.map.xml | 6 +-
.../testSkipPrimaryKeyLoading.map.xml-result | 6 +-
.../testSkipRelationshipsLoading.map.xml | 6 +-
.../testSkipRelationshipsLoading.map.xml-result | 6 +-
...SupportsCatalogsOnReverseEngineering.map.xml | 6 +-
.../dbimport/testTableTypes.map.xml-result | 6 +-
.../dbimport/testUnFlattensManyToMany.map.xml | 6 +-
.../testUnFlattensManyToMany.map.xml-result | 6 +-
.../dbimport/testViewsExclude.map.xml-result | 6 +-
.../src/main/resources/cayenne-project.xml | 2 +-
.../src/main/resources/datamap.map.xml | 6 +-
163 files changed, 1151 insertions(+), 843 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-crypto/src/test/resources/cayenne-crypto.xml
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/test/resources/cayenne-crypto.xml b/cayenne-crypto/src/test/resources/cayenne-crypto.xml
index cf7e20f..bd98b69 100644
--- a/cayenne-crypto/src/test/resources/cayenne-crypto.xml
+++ b/cayenne-crypto/src/test/resources/cayenne-crypto.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="8">
+<domain project-version="9">
<map name="datamap"/>
<node name="datanode"
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-crypto/src/test/resources/datamap.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/test/resources/datamap.map.xml b/cayenne-crypto/src/test/resources/datamap.map.xml
index b71de41..4182205 100644
--- a/cayenne-crypto/src/test/resources/datamap.map.xml
+++ b/cayenne-crypto/src/test/resources/datamap.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
- project-version="8">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
<property name="defaultPackage" value="org.apache.cayenne.crypto.db"/>
<db-entity name="TABLE1">
<db-attribute name="CRYPTO_INT" type="BLOB"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-java8/src/test/resources/cayenne-java8.xml
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/test/resources/cayenne-java8.xml b/cayenne-java8/src/test/resources/cayenne-java8.xml
index d4ad35d..93f67fd 100644
--- a/cayenne-java8/src/test/resources/cayenne-java8.xml
+++ b/cayenne-java8/src/test/resources/cayenne-java8.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="8">
+<domain project-version="9">
<map name="java8"/>
<node name="datanode"
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-java8/src/test/resources/java8.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/test/resources/java8.map.xml b/cayenne-java8/src/test/resources/java8.map.xml
index 1d8a274..734c915 100644
--- a/cayenne-java8/src/test/resources/java8.map.xml
+++ b/cayenne-java8/src/test/resources/java8.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
- project-version="8">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
<property name="defaultPackage" value="org.apache.cayenne.java8.db"/>
<db-entity name="LOCAL_DATE_TEST">
<db-attribute name="Date" type="DATE"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-joda/src/test/resources/cayenne-joda.xml
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/test/resources/cayenne-joda.xml b/cayenne-joda/src/test/resources/cayenne-joda.xml
index 7c7ef9d..68673f9 100644
--- a/cayenne-joda/src/test/resources/cayenne-joda.xml
+++ b/cayenne-joda/src/test/resources/cayenne-joda.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="8">
+<domain project-version="9">
<map name="joda"/>
<node name="datanode"
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-joda/src/test/resources/joda.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/test/resources/joda.map.xml b/cayenne-joda/src/test/resources/joda.map.xml
index 0234bf8..b1021f8 100644
--- a/cayenne-joda/src/test/resources/joda.map.xml
+++ b/cayenne-joda/src/test/resources/joda.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
- project-version="8">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
<property name="defaultPackage" value="org.apache.cayenne.joda.db"/>
<db-entity name="DATE_TIME_TEST">
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-lifecycle/src/test/resources/cayenne-lifecycle.xml
----------------------------------------------------------------------
diff --git a/cayenne-lifecycle/src/test/resources/cayenne-lifecycle.xml b/cayenne-lifecycle/src/test/resources/cayenne-lifecycle.xml
index cffc16b..5b9a83e 100644
--- a/cayenne-lifecycle/src/test/resources/cayenne-lifecycle.xml
+++ b/cayenne-lifecycle/src/test/resources/cayenne-lifecycle.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="8">
+<domain project-version="9">
<map name="lifecycle-map"/>
<node name="lifecycle-db"
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-lifecycle/src/test/resources/lifecycle-map.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-lifecycle/src/test/resources/lifecycle-map.map.xml b/cayenne-lifecycle/src/test/resources/lifecycle-map.map.xml
index 312b7ac..7b62e06 100644
--- a/cayenne-lifecycle/src/test/resources/lifecycle-map.map.xml
+++ b/cayenne-lifecycle/src/test/resources/lifecycle-map.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
- project-version="8">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
<property name="defaultPackage" value="org.apache.cayenne.lifecycle.db"/>
<db-entity name="AUDITABLE1">
<db-attribute name="CHAR_PROPERTY1" type="VARCHAR" length="200"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/main/java/org/apache/cayenne/project/CayenneProjectModule.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/CayenneProjectModule.java b/cayenne-project/src/main/java/org/apache/cayenne/project/CayenneProjectModule.java
index f066e2f..6f31b9c 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/CayenneProjectModule.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/CayenneProjectModule.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.project;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.project.upgrade.ProjectUpgrader;
-import org.apache.cayenne.project.upgrade.v8.ProjectUpgrader_V8;
+import org.apache.cayenne.project.upgrade.v9.ProjectUpgrader_V9;
import org.apache.cayenne.project.validation.DefaultProjectValidator;
import org.apache.cayenne.project.validation.ProjectValidator;
@@ -36,7 +36,7 @@ public class CayenneProjectModule implements Module {
public void configure(Binder binder) {
binder.bind(ProjectLoader.class).to(DataChannelProjectLoader.class);
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ProjectUpgrader.class).to(ProjectUpgrader_V8.class);
+ binder.bind(ProjectUpgrader.class).to(ProjectUpgrader_V9.class);
binder.bind(ProjectValidator.class).to(DefaultProjectValidator.class);
binder.bind(ConfigurationNodeParentGetter.class).to(
DefaultConfigurationNodeParentGetter.class);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
index 95ef738..5b22b08 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
@@ -62,7 +62,7 @@ public class FileProjectSaver implements ProjectSaver {
}
public String getSupportedVersion() {
- return "8";
+ return "9";
}
public void save(Project project) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9.java b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9.java
new file mode 100644
index 0000000..2f585b2
--- /dev/null
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9.java
@@ -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.
+ ****************************************************************/
+package org.apache.cayenne.project.upgrade.v9;
+
+
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.project.upgrade.ProjectUpgrader;
+import org.apache.cayenne.project.upgrade.UpgradeHandler;
+import org.apache.cayenne.resource.Resource;
+
+/**
+ * A ProjectUpgrader that handles project upgrades from version 4.0.M4 and 8
+ * to version 9.
+ */
+public class ProjectUpgrader_V9 implements ProjectUpgrader {
+
+ @Inject
+ protected Injector injector;
+
+ @Override
+ public UpgradeHandler getUpgradeHandler(Resource projectSource) {
+ UpgradeHandler_V9 handler = new UpgradeHandler_V9(projectSource);
+ injector.injectMembers(handler);
+ return handler;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/UpgradeHandler_V9.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/UpgradeHandler_V9.java b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/UpgradeHandler_V9.java
new file mode 100644
index 0000000..2a3faaa
--- /dev/null
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/v9/UpgradeHandler_V9.java
@@ -0,0 +1,166 @@
+/*****************************************************************
+ * 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.
+ ****************************************************************/
+package org.apache.cayenne.project.upgrade.v9;
+
+import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.configuration.ConfigurationTree;
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.project.Project;
+import org.apache.cayenne.project.ProjectSaver;
+import org.apache.cayenne.project.upgrade.BaseUpgradeHandler;
+import org.apache.cayenne.project.upgrade.UpgradeHandler;
+import org.apache.cayenne.project.upgrade.UpgradeMetaData;
+import org.apache.cayenne.project.upgrade.UpgradeType;
+import org.apache.cayenne.project.upgrade.v8.ProjectUpgrader_V8;
+import org.apache.cayenne.resource.Resource;
+import org.apache.cayenne.util.Util;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class UpgradeHandler_V9 extends BaseUpgradeHandler {
+
+ static final String TO_VERSION = "9";
+ static final String MIN_SUPPORTED_VERSION = "8";
+
+ @Inject
+ protected Injector injector;
+
+ @Inject
+ private ProjectSaver projectSaver;
+
+ public UpgradeHandler_V9(Resource source) {
+ super(source);
+ }
+
+ @Override
+ protected Resource doPerformUpgrade(UpgradeMetaData metaData) throws ConfigurationException {
+ if (compareVersions(metaData.getProjectVersion(), MIN_SUPPORTED_VERSION) == 0) {
+ ProjectUpgrader_V8 upgraderV8 = new ProjectUpgrader_V8();
+ injector.injectMembers(upgraderV8);
+ UpgradeHandler handlerV8 = upgraderV8.getUpgradeHandler(projectSource);
+ projectSource = handlerV8.performUpgrade();
+ }
+
+ deleteReverseEngineeringFiles(projectSource);
+
+ XMLDataChannelDescriptorLoader loader = new XMLDataChannelDescriptorLoader();
+ injector.injectMembers(loader);
+ ConfigurationTree<DataChannelDescriptor> tree = loader.load(projectSource);
+ Project project = new Project(tree);
+
+ // load and safe cycle updates project version
+ projectSaver.save(project);
+ return project.getConfigurationResource();
+ }
+
+ private void deleteReverseEngineeringFiles(Resource projectSource) {
+ Document projectDoc = readDOMDocument(projectSource);
+
+ try {
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ NodeList nodes = (NodeList) xpath.evaluate("/domain/map/@name", projectDoc, XPathConstants.NODESET);
+
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node mapNode = nodes.item(i);
+
+ Resource mapResource = projectSource.getRelativeResource(mapNode.getNodeValue() + ".map.xml");
+
+ Document datamapDoc = readDOMDocument(mapResource);
+
+ Node reNode = (Node) xpath.evaluate("/data-map/reverse-engineering-config",
+ datamapDoc, XPathConstants.NODE);
+
+ if (reNode != null) {
+ String reFileName = ((Element) reNode).getAttribute("name") + ".xml";
+
+ try {
+ String directoryPath = Util.toFile(projectSource.getURL()).getParent();
+
+ File file = new File(directoryPath + "/" + reFileName);
+ if (file.exists()) {
+ file.delete();
+ }
+ } catch (Exception e) {
+ // ignore...
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ throw new ConfigurationException("Unable to parse Cayenne XML configuration files.", e);
+ }
+ }
+
+ private Document readDOMDocument(Resource resource) {
+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+ try {
+ DocumentBuilder domBuilder = documentBuilderFactory.newDocumentBuilder();
+
+ try (InputStream inputStream = resource.getURL().openStream()) {
+ return domBuilder.parse(inputStream);
+ } catch (IOException | SAXException e) {
+ throw new ConfigurationException("Error loading configuration from %s", e, resource);
+ }
+ } catch (ParserConfigurationException e) {
+ throw new ConfigurationException(e);
+ }
+ }
+
+ @Override
+ protected UpgradeMetaData loadMetaData() {
+ String version = loadProjectVersion();
+
+ UpgradeMetaData metadata = new UpgradeMetaData();
+ metadata.setSupportedVersion(TO_VERSION);
+ metadata.setProjectVersion(version);
+
+ int c1 = compareVersions(version, MIN_SUPPORTED_VERSION);
+ int c2 = compareVersions(TO_VERSION, version);
+
+ if (c1 < 0) {
+ metadata.setIntermediateUpgradeVersion(MIN_SUPPORTED_VERSION);
+ metadata.setUpgradeType(UpgradeType.INTERMEDIATE_UPGRADE_NEEDED);
+ } else if (c2 < 0) {
+ metadata.setUpgradeType(UpgradeType.DOWNGRADE_NEEDED);
+ } else if (c2 == 0) {
+ metadata.setUpgradeType(UpgradeType.UPGRADE_NOT_NEEDED);
+ } else {
+ metadata.setUpgradeType(UpgradeType.UPGRADE_NEEDED);
+ }
+
+ return metadata;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
index 7fa997b..d97733f 100644
--- a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
+++ b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
@@ -18,36 +18,13 @@
****************************************************************/
package org.apache.cayenne.project.upgrade.v7;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathFactory;
-
import org.apache.cayenne.configuration.ConfigurationNameMapper;
import org.apache.cayenne.configuration.DataMapLoader;
import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
import org.apache.cayenne.configuration.XMLDataMapLoader;
import org.apache.cayenne.configuration.server.JNDIDataSourceFactory;
import org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.ClassLoaderManager;
-import org.apache.cayenne.di.DIBootstrap;
-import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Module;
+import org.apache.cayenne.di.*;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.project.FileProjectSaver;
@@ -64,6 +41,17 @@ import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
public class ProjectUpgrader_V7Test extends Project2Case {
@Test
@@ -274,7 +262,7 @@ public class ProjectUpgrader_V7Test extends Project2Case {
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("", xpath.evaluate("/domain/@name", document));
- assertEquals("8", xpath.evaluate("/domain/@project-version", document));
+ assertEquals("9", xpath.evaluate("/domain/@project-version", document));
NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
assertNotNull(maps);
@@ -316,7 +304,7 @@ public class ProjectUpgrader_V7Test extends Project2Case {
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("", xpath.evaluate("/domain/@name", document));
- assertEquals("8", xpath.evaluate("/domain/@project-version", document));
+ assertEquals("9", xpath.evaluate("/domain/@project-version", document));
NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
assertNotNull(maps);
@@ -350,14 +338,14 @@ public class ProjectUpgrader_V7Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
}
private void assertPerformUpgrade_3_0_0_1_d1Map2(File file) throws Exception {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
}
@Test
@@ -408,7 +396,7 @@ public class ProjectUpgrader_V7Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
NodeList maps = (NodeList) xpath.evaluate("/data-map/obj-entity/entity-listener", document,
XPathConstants.NODESET);
@@ -420,14 +408,14 @@ public class ProjectUpgrader_V7Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/domain/@project-version", document));
+ assertEquals("9", xpath.evaluate("/domain/@project-version", document));
}
private void assertPerformUpgradeMap2(File file) throws Exception {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
}
@Test
@@ -483,7 +471,7 @@ public class ProjectUpgrader_V7Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
String xpathValue = "/data-map/obj-entity[@name='GreatArtist']/obj-attribute";
XPathExpression expr = xpath.compile(xpathValue);
@@ -496,7 +484,7 @@ public class ProjectUpgrader_V7Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
String xpath_1 = "/data-map/obj-entity[@name='House']/obj-attribute/@name";
String xpath_2 = "/data-map/obj-entity[@name='Penthouse']/obj-attribute/@name";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java
index ceb87a8..610d77c 100644
--- a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java
+++ b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * 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.
+ ****************************************************************/
package org.apache.cayenne.project.upgrade.v8;
import org.apache.cayenne.CayenneRuntimeException;
@@ -126,7 +144,7 @@ public class ProjectUpgrader_V8Test extends Project2Case {
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("", xpath.evaluate("/domain/@name", document));
- assertEquals("8", xpath.evaluate("/domain/@project-version", document));
+ assertEquals("9", xpath.evaluate("/domain/@project-version", document));
NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
assertNotNull(maps);
@@ -147,7 +165,7 @@ public class ProjectUpgrader_V8Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
NodeList queryNodes = (NodeList) xpath.evaluate("/data-map/query", document, XPathConstants.NODESET);
assertNotNull(queryNodes);
@@ -174,6 +192,6 @@ public class ProjectUpgrader_V8Test extends Project2Case {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
- assertEquals("8", xpath.evaluate("/data-map/@project-version", document));
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java
new file mode 100644
index 0000000..32f4b68
--- /dev/null
+++ b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java
@@ -0,0 +1,185 @@
+/*****************************************************************
+ * 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.
+ ****************************************************************/
+package org.apache.cayenne.project.upgrade.v9;
+
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.configuration.ConfigurationNameMapper;
+import org.apache.cayenne.configuration.DataMapLoader;
+import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
+import org.apache.cayenne.configuration.XMLDataMapLoader;
+import org.apache.cayenne.di.*;
+import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
+import org.apache.cayenne.project.FileProjectSaver;
+import org.apache.cayenne.project.ProjectSaver;
+import org.apache.cayenne.project.unit.Project2Case;
+import org.apache.cayenne.project.upgrade.UpgradeHandler;
+import org.apache.cayenne.resource.Resource;
+import org.apache.cayenne.resource.URLResource;
+import org.apache.cayenne.test.file.FileUtil;
+import org.apache.cayenne.test.resource.ResourceUtil;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
+
+public class ProjectUpgrader_V9Test extends Project2Case {
+
+ protected File setupTestDirectory(String subfolder) {
+ String classPath = getClass().getName().replace('.', '/');
+ String location = "target/testrun/" + classPath + "/" + subfolder;
+ File testDirectory = new File(location);
+
+ // delete old tests
+ if (testDirectory.exists()) {
+ if (!FileUtil.delete(location, true)) {
+ throw new CayenneRuntimeException(
+ "Error deleting test directory '%s'",
+ location);
+ }
+ }
+
+ if (!testDirectory.mkdirs()) {
+ throw new CayenneRuntimeException(
+ "Error creating test directory '%s'",
+ location);
+ }
+
+ return testDirectory;
+ }
+
+ @Test
+ public void testPerformUpgradeFrom8() throws Exception {
+
+ File testFolder = setupTestDirectory("testPerformUpgradeFrom8");
+ String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/";
+
+ List<String> sources = new ArrayList<>();
+
+ sources.add("cayenne-PROJECT1.xml");
+ sources.add("testProjectMap1_1.map.xml");
+ sources.add("testProjectMap1_2.map.xml");
+ sources.add("reverseEngineering.xml");
+
+ // upgrades are done in-place, so copy it first
+ List<File> targetsBefore = new ArrayList<>();
+ for (String source : sources) {
+
+ URL url = getClass().getClassLoader().getResource(sourceUrl + source);
+ File target = new File(testFolder, source);
+ assertNotNull(source);
+ ResourceUtil.copyResourceToFile(url, target);
+ targetsBefore.add(target);
+ }
+
+ Module testModule = new Module() {
+
+ public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+ binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
+ binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
+ }
+ };
+
+ ProjectUpgrader_V9 upgrader = new ProjectUpgrader_V9();
+ Injector injector = DIBootstrap.createInjector(testModule);
+ injector.injectMembers(upgrader);
+
+ Resource source = new URLResource(targetsBefore.get(0).toURL());
+ UpgradeHandler handler = upgrader.getUpgradeHandler(source);
+
+ Resource upgraded = handler.performUpgrade();
+ assertNotNull(upgraded);
+ assertNotSame(source, upgrader);
+
+ // check that all the new files are created...
+ String[] targetsAfterNames = new String[] {
+ "cayenne-PROJECT1.xml", "testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml"
+ };
+
+ File[] targetsAfter = new File[targetsAfterNames.length];
+ for (int i = 0; i < targetsAfter.length; i++) {
+ targetsAfter[i] = new File(testFolder, targetsAfterNames[i]);
+ assertTrue("File was not created: " + targetsAfter[i].getAbsolutePath(), targetsAfter[i].exists());
+ }
+
+ // assert XML structure of the generated files
+ assertPerformUpgradeFrom8_cayenne(targetsAfter[0]);
+ assertPerformUpgradeFrom8_map1_1(targetsAfter[1]);
+ assertPerformUpgradeFrom8_map1_2(targetsAfter[2]);
+ assertFalse(new File(testFolder, "reverseEngineering.xml").exists());
+ }
+
+ private void assertPerformUpgradeFrom8_cayenne(File file) throws Exception {
+ Document document = toDOMTree(file);
+
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ assertEquals("", xpath.evaluate("/domain/@name", document));
+ assertEquals("9", xpath.evaluate("/domain/@project-version", document));
+
+ NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
+ assertNotNull(maps);
+ assertEquals(2, maps.getLength());
+
+ Node map1 = maps.item(0);
+ Node map2 = maps.item(1);
+
+ assertEquals("testProjectMap1_1", xpath.evaluate("@name", map1));
+ assertEquals("testProjectMap1_2", xpath.evaluate("@name", map2));
+
+ NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.getLength());
+ }
+
+ private void assertPerformUpgradeFrom8_map1_1(File file) throws Exception {
+ Document document = toDOMTree(file);
+
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
+
+ NodeList reverseEngineeringNodes = (NodeList) xpath.evaluate("/data-map/reverse-engineering-config",
+ document, XPathConstants.NODESET);
+ assertEquals(0, reverseEngineeringNodes.getLength());
+ }
+
+ private void assertPerformUpgradeFrom8_map1_2(File file) throws Exception {
+ Document document = toDOMTree(file);
+
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ assertEquals("9", xpath.evaluate("/data-map/@project-version", document));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/cayenne-PROJECT1.xml
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/cayenne-PROJECT1.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/cayenne-PROJECT1.xml
new file mode 100644
index 0000000..745ea3f
--- /dev/null
+++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/cayenne-PROJECT1.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="8">
+
+ <map name="testProjectMap1_1" />
+ <map name="testProjectMap1_2" />
+
+ <node name="testProjectNode1"
+ adapter="org.example.test.Adapter" factory="org.example.test.DataSourceFactory">
+ <data-source>
+ <connectionPool min="1" max="1" />
+ <login />
+ </data-source>
+ <map-ref name="testProjectMap1_1" />
+ </node>
+</domain>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/reverseEngineering.xml
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/reverseEngineering.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/reverseEngineering.xml
new file mode 100644
index 0000000..f88b81f
--- /dev/null
+++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/reverseEngineering.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<reverseEngineering xsi:schemaLocation="http://cayenne.apache.org/schema/8/reverseEngineering http://cayenne.apache.org/schema/8/reverseEngineering.xsd" xmlns="http://cayenne.apache.org/schema/8/reverseEngineering" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <skipRelationshipsLoading>false</skipRelationshipsLoading>
+ <skipPrimaryKeyLoading>false</skipPrimaryKeyLoading>
+ <catalog>
+ <schema>
+ <includeTable/>
+ <includeProcedure pattern=".*"/>
+ </schema>
+ </catalog>
+</reverseEngineering>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_1.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_1.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_1.map.xml
new file mode 100644
index 0000000..e7dcd65
--- /dev/null
+++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_1.map.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
+ project-version="8">
+ <reverse-engineering-config name="reverseEngineering"/>
+ <db-entity name="Artist">
+ <db-attribute name="untitledAttr" type="CHAR" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="untitledAttr1" type="DATE"/>
+ </db-entity>
+ <obj-entity name="Artist" dbEntityName="Artist">
+ <entity-listener class="NowyListener">
+ </entity-listener>
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_2.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_2.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_2.map.xml
new file mode 100644
index 0000000..67968c9
--- /dev/null
+++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/v9/testProjectMap1_2.map.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+ project-version="8">
+
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-protostuff/src/test/resources/cayenne-protostuff.xml
----------------------------------------------------------------------
diff --git a/cayenne-protostuff/src/test/resources/cayenne-protostuff.xml b/cayenne-protostuff/src/test/resources/cayenne-protostuff.xml
index e585624..08d85b1 100644
--- a/cayenne-protostuff/src/test/resources/cayenne-protostuff.xml
+++ b/cayenne-protostuff/src/test/resources/cayenne-protostuff.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="8">
+<domain project-version="9">
<map name="protostuff"/>
<node name="datanode"
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-protostuff/src/test/resources/protostuff.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-protostuff/src/test/resources/protostuff.map.xml b/cayenne-protostuff/src/test/resources/protostuff.map.xml
index 373b84e..d3277bf 100644
--- a/cayenne-protostuff/src/test/resources/protostuff.map.xml
+++ b/cayenne-protostuff/src/test/resources/protostuff.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/8/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/8/modelMap http://cayenne.apache.org/schema/8/modelMap.xsd"
- project-version="8">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
<property name="defaultPackage" value="org.apache.cayenne.rop.protostuff.persistent"/>
<property name="clientSupported" value="true"/>
<property name="defaultClientPackage" value="org.apache.cayenne.rop.protostuff.persistent"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java b/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
index 5f7d9ab..0d66f55 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/DataMap.java
@@ -120,7 +120,7 @@ public class DataMap implements Serializable, ConfigurationNode, XMLSerializable
* The namespace in which the data map XML file will be created. This is
* also the URI to locate a copy of the schema document.
*/
- public static final String SCHEMA_XSD = "http://cayenne.apache.org/schema/8/modelMap";
+ public static final String SCHEMA_XSD = "http://cayenne.apache.org/schema/9/modelMap";
protected String name;
protected String location;
@@ -311,7 +311,7 @@ public class DataMap implements Serializable, ConfigurationNode, XMLSerializable
* @since 1.1
*/
public void encodeAsXML(XMLEncoder encoder) {
- encoder.println("<data-map xmlns=\"http://cayenne.apache.org/schema/8/modelMap\"");
+ encoder.println("<data-map xmlns=\"http://cayenne.apache.org/schema/9/modelMap\"");
encoder.indent(1);
encoder.println(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd b/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
deleted file mode 100644
index 45c0792..0000000
--- a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/modelMap.xsd
+++ /dev/null
@@ -1,338 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-
-<!--
- Cayenne entity map schema
- Defines format of Cayenne DataMap XML files (*.map.xml). DataMap files contain
- the metadata needed for Cayenne object-relational features. Multiple DataMaps
- are usually combined in one shared namespace, so the elements of the DataMap
- may reference objects from other DataMaps.
--->
-<xs:schema targetNamespace="http://cayenne.apache.org/schema/8/modelMap"
- xmlns:cay="http://cayenne.apache.org/schema/8/modelMap"
- xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="8">
- <xs:element name="data-map">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:property"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:embeddable"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:procedure"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:db-entity"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-entity"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:db-relationship"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-relationship"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:query"/>
- </xs:sequence>
- <xs:attribute name="project-version" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="db-entity">
- <xs:complexType>
- <xs:sequence>
- <xs:element maxOccurs="unbounded" ref="cay:db-attribute"/>
- <xs:element minOccurs="0" ref="cay:db-key-generator"/>
-
- <!-- Qualifier for DB Entity -->
- <xs:element minOccurs="0" ref="cay:qualifier"/>
- </xs:sequence>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="schema" type="xs:string"/>
- <xs:attribute name="catalog" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="db-attribute">
- <xs:annotation>
- <xs:documentation>A database column.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:attribute name="isMandatory" type="xs:boolean"/>
- <xs:attribute name="isPrimaryKey" type="xs:boolean">
- <xs:annotation>
- <xs:documentation>If true, the value of attribute is unique and used as a primary key identifier.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="isGenerated" use="optional" type="xs:boolean"/>
- <xs:attribute name="length" type="xs:integer"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="scale" type="xs:integer"/>
- <xs:attribute name="type" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="obj-entity">
- <xs:annotation>
- <xs:documentation>A persistent Java class managed by Cayenne.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" ref="cay:qualifier"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:embedded-attribute"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-attribute"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:attribute-override"/>
-
- <!-- Callbacks -->
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-add"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-persist"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-persist"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-update"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-update"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-remove"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-remove"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-load"/>
- </xs:sequence>
- <xs:attribute name="className" use="optional" type="xs:string"/>
- <xs:attribute name="abstract" use="optional" type="xs:string"/>
- <xs:attribute name="readOnly" use="optional" type="xs:boolean"/>
- <xs:attribute name="clientClassName" use="optional" type="xs:string"/>
- <xs:attribute name="clientSuperClassName" use="optional" type="xs:string"/>
- <xs:attribute name="dbEntityName" use="optional" type="xs:string"/>
- <xs:attribute name="lock-type" type="xs:string"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="superClassName" use="optional" type="xs:string"/>
- <xs:attribute name="superEntityName" use="optional" type="xs:string"/>
- <xs:attribute name="serverOnly" use="optional" type="xs:boolean"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="qualifier" type="xs:string"/>
-
- <xs:element name="obj-attribute">
- <xs:complexType>
- <xs:attribute name="db-attribute-path" use="optional" type="xs:string"/>
- <xs:attribute name="lock" use="optional" type="xs:boolean"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="type" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="attribute-override">
- <xs:complexType>
- <xs:attribute name="db-attribute-path" use="optional" type="xs:string"/>
- <xs:attribute name="lock" use="optional" type="xs:boolean"/>
- <xs:attribute name="name" use="optional" type="xs:string"/>
- <xs:attribute name="type" use="optional" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="db-relationship">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="1" maxOccurs="unbounded" ref="cay:db-attribute-pair"/>
- </xs:sequence>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="source" use="required" type="xs:string"/>
- <xs:attribute name="target" use="required" type="xs:string"/>
- <xs:attribute name="toDependentPK" type="xs:boolean"/>
- <xs:attribute name="toMany" use="required" type="xs:boolean"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="db-attribute-pair">
- <xs:complexType>
- <xs:attribute name="source" use="required" type="xs:string"/>
- <xs:attribute name="target" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="obj-relationship">
- <xs:complexType>
- <xs:attribute name="db-relationship-path" use="required" type="xs:string"/>
- <xs:attribute name="deleteRule" type="xs:string"/>
- <xs:attribute name="lock" type="xs:boolean"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="source" use="required" type="xs:string"/>
- <xs:attribute name="target" use="required" type="xs:string"/>
- <xs:attribute name="collection-type" use="optional" type="xs:string"/>
- <xs:attribute name="map-key" use="optional" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="query">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:property"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:sql"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:ejbql"/>
- <xs:element name="qualifier" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:ordering"/>
- <xs:element name="prefetch" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
- </xs:sequence>
- <xs:attribute name="type" use="required" type="xs:string"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="root" use="optional" type="xs:string"/>
- <xs:attribute name="root-name" use="optional" type="xs:string"/>
- <xs:attribute name="result-entity" use="optional" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="ordering">
- <xs:complexType>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute name="descending" type="xs:boolean"/>
- <xs:attribute name="ignore-case" type="xs:boolean"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="sql">
- <xs:annotation>
- <xs:documentation>Defines arbitrary SQL statement. Note that SQL statement can be customized for different SQL dialects per DbAdapter class. If no adapter-specific statement is found, the one with no adapter label is used by default.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute name="adapter-class" type="xs:string"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="ejbql" type="xs:string"/>
-
- <xs:element name="property">
- <xs:annotation>
- <xs:documentation>A generic property used by other elements.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="value" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="embeddable">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="embeddable-attribute" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="type" use="required" type="xs:string"/>
- <xs:attribute name="db-attribute-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="className" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="embedded-attribute">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded"
- ref="cay:embeddable-attribute-override"/>
- </xs:sequence>
- <xs:attribute name="type" use="required" type="xs:string"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="embeddable-attribute-override">
- <xs:complexType>
- <xs:attribute name="db-attribute-path" use="required" type="xs:string"/>
- <xs:attribute name="name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="procedure">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded" name="procedure-parameter">
- <xs:complexType>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="type" use="required" type="xs:string"/>
- <xs:attribute name="length" use="optional" type="xs:integer"/>
- <xs:attribute name="direction" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="name" use="required" type="xs:string"/>
- <xs:attribute name="schema" type="xs:string"/>
- <xs:attribute name="catalog" type="xs:string"/>
- <xs:attribute name="returningValue" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="pre-update">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="post-persist">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="post-update">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="post-add">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="pre-persist">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="post-remove">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="post-load">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="pre-remove">
- <xs:complexType>
- <xs:attribute name="method-name" use="required" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="db-key-generator">
- <xs:annotation>
- <xs:documentation>Used to install the Automatic Sequence/Key Generation facility for db-entity. This feature is intended for use with simple (non-compound) integral primary keys.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="db-generator-type" type="xs:string">
- <xs:annotation>
- <xs:documentation>Specifies the Key Generation Method that will be employed
- 'ORACLE' - use Oracle's SEQUENCE
- 'NAMED_SEQUENCE_TABLE' - use USER designated SEQUENCE TABLE. User specifies the name of a DBMS Table with the schema (sequence INT) which will be used to hold sequence values (not supported yet)</xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element minOccurs="0" name="db-generator-name" type="xs:string">
- <xs:annotation>
- <xs:documentation>For db-generator-type ORACLE this is the name of the ORACLE SEQUENCE to use. The SEQUENCE is assumed to already exist in the Database.
-If this is db-generator-type NAMED_SEQUENCE_TABLE Key Generation, this specifies the name of the SEQUENCE TABLE to use. The NAMED_SEQUENCE_TABLE is assumed to already exist in the database.</xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element minOccurs="0" name="db-key-cache-size" type="xs:integer">
- <xs:annotation>
- <xs:documentation>Size of key cache. For db-generator-type ORACLE , this value MUST match the Oracle SEQUENCE INCREMENT value. If there is a mismatch between this value and the Oracle SEQUENCE INCREMENT value, then there will likely be duplicate key problems.
-For db-generator-type NAMED_SEQUENCE_TABLE , this tells how many keys the Container will fetch in a single DBMS call.</xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-</xs:schema>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f72210cc/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/reverseEngineering.xsd
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/reverseEngineering.xsd b/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/reverseEngineering.xsd
deleted file mode 100644
index 93248ba..0000000
--- a/cayenne-server/src/main/resources/org/apache/cayenne/schema/8/reverseEngineering.xsd
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
- -->
-<xs:schema attributeFormDefault="unqualified"
- elementFormDefault="qualified"
- xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
- <xs:complexType name="PatternParamType" mixed="true">
- <xs:annotation>
- <xs:documentation>
- At least one of 3 options ot fill pattern information should be used
- 1) <tag>pattern<tag>
- 2) <tag pattern="pattern" />
- 3) <tag>
- <pattern>pattern</pattern>
- </tag>
- </xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:element type="xs:string" name="pattern" minOccurs="0"/>
- </xs:sequence>
- <xs:attribute type="xs:string" name="pattern" use="optional"/>
- </xs:complexType>
-
- <xs:complexType name="IncludeTableType" mixed="true">
- <xs:complexContent>
- <xs:extension base="PatternParamType">
- <xs:sequence>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="includeColumn" type="PatternParamType" />
- <xs:element name="excludeColumn" type="PatternParamType" />
- </xs:choice>
- </xs:sequence>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
-
- <xs:complexType name="FilterContainerType">
- <xs:sequence>
- <xs:choice minOccurs="1" maxOccurs="unbounded">
- <xs:element name="includeTable" type="IncludeTableType" />
- <xs:element name="excludeTable" type="PatternParamType" />
- <xs:element name="includeColumn" type="PatternParamType" />
- <xs:element name="excludeColumn" type="PatternParamType" />
- <xs:element name="includeProcedure" type="PatternParamType" />
- <xs:element name="excludeProcedure" type="PatternParamType" />
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
-
- <xs:complexType name="SchemaType" mixed="true">
- <xs:annotation>
- <xs:documentation>
- At least one of 3 options to provide schema name can be used:
- 1) <schema>name<schema>
- 2) <schema name="name" />
- 3) <schema>
- <name>name</name>
- </schema>
- </xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="FilterContainerType">
- <xs:sequence>
- <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1" />
- </xs:sequence>
- <xs:attribute type="xs:string" name="name" use="optional" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
-
- <xs:complexType name="CatalogType" mixed="true">
- <xs:annotation>
- <xs:documentation>
- At least one of 3 options to provide schema name can be used:
- 1) <catalog>name<catalog>
- 2) <catalog name="name" />
- 3) <catalog>
- <name>name</name>
- </catalog>
- </xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="FilterContainerType">
- <xs:sequence>
- <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1" />
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="schema" type="SchemaType" />
- </xs:choice>
- </xs:sequence>
- <xs:attribute type="xs:string" name="name" use="optional" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
-
- <xs:complexType name="ReverseEngineeringType">
- <xs:annotation>
- <xs:documentation>
- <!-- TODO -->
- </xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="FilterContainerType">
- <xs:sequence>
- <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1" />
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="skipRelationshipsLoading" type="xs:boolean" />
- <xs:element name="skipPrimaryKeyLoading" type="xs:boolean" />
- <xs:element name="catalog" type="CatalogType" />
- <xs:element name="schema" type="SchemaType" />
- </xs:choice>
- </xs:sequence>
- <xs:attribute type="xs:string" name="name" use="optional" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
-
- <xs:element name="reverseEngineering" type="ReverseEngineeringType">
- <xs:annotation>
- <!-- TODO -->
- <xs:documentation> </xs:documentation>
- </xs:annotation>
- </xs:element>
-
-</xs:schema>