You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/08 11:45:01 UTC
cayenne git commit: CAY-2135 cdbimport: reset DbEntity catalogs /
schemas to DataMap defaults
Repository: cayenne
Updated Branches:
refs/heads/master 88613547f -> 2b7a21b5b
CAY-2135 cdbimport: reset DbEntity catalogs / schemas to DataMap defaults
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/2b7a21b5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/2b7a21b5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/2b7a21b5
Branch: refs/heads/master
Commit: 2b7a21b5b94826dc53ec2748929508086df42dd0
Parents: 8861354
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Nov 8 14:15:39 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Nov 8 14:32:01 2016 +0300
----------------------------------------------------------------------
.../apache/cayenne/tools/DbImporterTask.java | 12 +++++
.../tools/dbimport/DbImportConfiguration.java | 18 +++++++
.../tools/dbimport/DefaultDbImportAction.java | 25 ++++++++++
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
.../apache/cayenne/tools/DbImporterMojo.java | 26 +++++++---
.../cayenne/tools/DbImporterMojoTest.java | 15 ++++--
.../dbimport/testForceDataMapSchema-pom.xml | 46 +++++++++++++++++
.../dbimport/testForceDataMapSchema.map.xml | 26 ++++++++++
.../testForceDataMapSchema.map.xml-result | 52 ++++++++++++++++++++
.../tools/dbimport/testForceDataMapSchema.sql | 40 +++++++++++++++
10 files changed, 249 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index d9bdd5e..c8484f7 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -224,6 +224,18 @@ public class DbImporterTask extends Task {
config.setUsername(username);
}
+ public void setUsePrimitives(boolean flag) {
+ config.setUsePrimitives(flag);
+ }
+
+ public void setForceDataMapCatalog(boolean flag) {
+ config.setForceDataMapCatalog(flag);
+ }
+
+ public void setForceDataMapSchema(boolean flag) {
+ config.setForceDataMapSchema(flag);
+ }
+
public ReverseEngineering getReverseEngineering() {
return reverseEngineering;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index 9bf4ed1..681d353 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@ -58,6 +58,8 @@ public class DbImportConfiguration {
private Log logger;
private String namingStrategy;
private String stripFromTableNames;
+ private boolean forceDataMapCatalog;
+ private boolean forceDataMapSchema;
public DbImportConfiguration() {
this.dataSourceInfo = new DataSourceInfo();
@@ -281,4 +283,20 @@ public class DbImportConfiguration {
public void setTableTypes(String[] tableTypes) {
dbLoaderConfiguration.setTableTypes(tableTypes);
}
+
+ public void setForceDataMapCatalog(boolean forceDataMapCatalog) {
+ this.forceDataMapCatalog = forceDataMapCatalog;
+ }
+
+ public boolean isForceDataMapCatalog() {
+ return forceDataMapCatalog;
+ }
+
+ public void setForceDataMapSchema(boolean forceDataMapSchema) {
+ this.forceDataMapSchema = forceDataMapSchema;
+ }
+
+ public boolean isForceDataMapSchema() {
+ return forceDataMapSchema;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
index 1ae9533..bdf6e8d 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
@@ -42,6 +42,7 @@ import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.MapLoader;
import org.apache.cayenne.map.ObjEntity;
@@ -172,6 +173,9 @@ public class DefaultDbImportAction implements DbImportAction {
targetDataMap = newTargetDataMap(config);
}
+ // transform source DataMap before merging
+ transformSourceBeforeMerge(sourceDataMap, targetDataMap, config);
+
MergerTokenFactory mergerTokenFactory = mergerTokenFactoryProvider.get(adapter);
DbLoaderConfiguration loaderConfig = config.getDbLoaderConfig();
@@ -196,6 +200,27 @@ public class DefaultDbImportAction implements DbImportAction {
}
}
+
+ protected void transformSourceBeforeMerge(DataMap sourceDataMap,
+ DataMap targetDataMap,
+ DbImportConfiguration configuration) {
+
+ if (configuration.isForceDataMapCatalog()) {
+ String catalog = targetDataMap.getDefaultCatalog();
+ for (DbEntity e : sourceDataMap.getDbEntities()) {
+ e.setCatalog(catalog);
+ }
+ }
+
+ if (configuration.isForceDataMapSchema()) {
+ String schema = targetDataMap.getDefaultSchema();
+ for (DbEntity e : sourceDataMap.getDbEntities()) {
+ e.setSchema(schema);
+ }
+ }
+
+ }
+
private boolean syncDataMapProperties(DataMap targetDataMap, DbImportConfiguration config) {
String defaultPackage = config.getDefaultPackage();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index bb9c6f3..db5c839 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -40,6 +40,7 @@ CAY-2129 Modeler: reengineer dialog improvements
CAY-2130 Stripping common name prefixes on reverse engineering
CAY-2132 Adding SybaseSelectTranslator to support TOP/DISTINCT TOP in limited queries
CAY-2133 ObjectNameGenerator refactoring - unifying relationship name generation
+CAY-2135 cdbimport: reset DbEntity catalogs / schemas to DataMap defaults
Bug Fixes:
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
index 3ba39f3..bf0252b 100644
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
@@ -78,6 +78,16 @@ public class DbImporterMojo extends AbstractMojo {
private String driver;
/**
+ * @parameter forceDataMapCatalog="forceDataMapCatalog" default-value="false"
+ */
+ private boolean forceDataMapCatalog;
+
+ /**
+ * @parameter forceDataMapSchema="forceDataMapSchema" default-value="false"
+ */
+ private boolean forceDataMapSchema;
+
+ /**
* DataMap XML file to use as a base for DB importing.
*
* @parameter map="map"
@@ -200,19 +210,21 @@ public class DbImporterMojo extends AbstractMojo {
config.setAdapter(adapter);
config.setDefaultPackage(defaultPackage);
config.setDriver(driver);
- config.setTargetDataMap(map);
+ config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build());
+ config.setForceDataMapCatalog(forceDataMapCatalog);
+ config.setForceDataMapSchema(forceDataMapSchema);
+ config.setLogger(logger);
config.setMeaningfulPkTables(meaningfulPkTables);
config.setNamingStrategy(namingStrategy);
- config.setStripFromTableNames(stripFromTableNames);
config.setPassword(password);
- config.setUrl(url);
- config.setUsername(username);
- config.setUsePrimitives(usePrimitives);
- config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build());
config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading());
config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
+ config.setStripFromTableNames(stripFromTableNames);
config.setTableTypes(reverseEngineering.getTableTypes());
- config.setLogger(logger);
+ config.setTargetDataMap(map);
+ config.setUrl(url);
+ config.setUsername(username);
+ config.setUsePrimitives(usePrimitives);
return config;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
index 94d16fe..bbe88cd 100644
--- a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
+++ b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
@@ -192,12 +192,17 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
test("testUnFlattensManyToMany");
}
- /**
- * Make sure any merges preserve custom object layer settings, like "usePrimitives", PK mapping as attribute, etc.
- */
+ /**
+ * Make sure any merges preserve custom object layer settings, like "usePrimitives", PK mapping as attribute, etc.
+ */
+ @Test
+ public void testCustomObjectLayerSettings() throws Exception {
+ test("testCustomObjectLayerSettings");
+ }
+
@Test
- public void testCustomObjectLayerSettings() throws Exception {
- test("testCustomObjectLayerSettings");
+ public void testForceDataMapSchema() throws Exception {
+ test("testForceDataMapSchema");
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema-pom.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema-pom.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema-pom.xml
new file mode 100644
index 0000000..ca3d419
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema-pom.xml
@@ -0,0 +1,46 @@
+<?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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>DbImporterMojo Test1</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-cayenne-plugin</artifactId>
+ <configuration>
+ <map>target/test-classes/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml</map>
+ <defaultPackage>com.example.test</defaultPackage>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ <forceDataMapCatalog>true</forceDataMapCatalog>
+ <forceDataMapSchema>true</forceDataMapSchema>
+
+ <reverseEngineering>
+ <schema>SCHEMA_01</schema>
+ </reverseEngineering>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml
new file mode 100644
index 0000000..1d9dea0
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml
@@ -0,0 +1,26 @@
+<?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.
+-->
+<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/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
+ <property name="defaultPackage" value="com.example.test"/>
+ <property name="defaultCatalog" value="XCATALOG"/>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml-result
new file mode 100644
index 0000000..0eaaffd
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.map.xml-result
@@ -0,0 +1,52 @@
+<?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.
+-->
+<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/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
+ project-version="9">
+ <property name="defaultPackage" value="com.example.test"/>
+ <property name="defaultCatalog" value="XCATALOG"/>
+ <db-entity name="CHILD" catalog="XCATALOG">
+ <db-attribute name="COL3" type="DECIMAL" length="10" scale="2"/>
+ <db-attribute name="COL4" type="VARCHAR" length="25"/>
+ <db-attribute name="COL5" type="DATE" length="10"/>
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="PARENT_ID" type="CHAR" length="25"/>
+ </db-entity>
+ <db-entity name="PARENT" catalog="XCATALOG">
+ <db-attribute name="COL2" type="CHAR" length="25"/>
+ <db-attribute name="COL3" type="DECIMAL" length="10" scale="2"/>
+ <db-attribute name="COL4" type="VARCHAR" length="25"/>
+ <db-attribute name="COL5" type="DATE" length="10"/>
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="Child" className="com.example.test.Child" dbEntityName="CHILD">
+ <obj-attribute name="col3" type="java.math.BigDecimal" db-attribute-path="COL3"/>
+ <obj-attribute name="col4" type="java.lang.String" db-attribute-path="COL4"/>
+ <obj-attribute name="col5" type="java.util.Date" db-attribute-path="COL5"/>
+ <obj-attribute name="parentId" type="java.lang.String" db-attribute-path="PARENT_ID"/>
+ </obj-entity>
+ <obj-entity name="Parent" className="com.example.test.Parent" dbEntityName="PARENT">
+ <obj-attribute name="col2" type="java.lang.String" db-attribute-path="COL2"/>
+ <obj-attribute name="col3" type="java.math.BigDecimal" db-attribute-path="COL3"/>
+ <obj-attribute name="col4" type="java.lang.String" db-attribute-path="COL4"/>
+ <obj-attribute name="col5" type="java.util.Date" db-attribute-path="COL5"/>
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2b7a21b5/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.sql
new file mode 100644
index 0000000..279065c
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testForceDataMapSchema.sql
@@ -0,0 +1,40 @@
+-- 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.
+
+CREATE SCHEMA schema_01;
+SET SCHEMA schema_01;
+
+CREATE TABLE schema_01.Parent (
+ id INTEGER NOT NULL,
+ COL2 CHAR(25),
+ COL3 DECIMAL(10,2),
+ COL4 VARCHAR(25),
+ COL5 DATE,
+
+ PRIMARY KEY (id),
+ UNIQUE (COL3)
+);
+
+CREATE TABLE schema_01.Child (
+ id INTEGER NOT NULL,
+ Parent_id CHAR(25),
+ COL3 DECIMAL(10,2),
+ COL4 VARCHAR(25),
+ COL5 DATE,
+
+ PRIMARY KEY (id)
+);