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/10/04 12:45:29 UTC
[1/7] cayenne git commit: CAY-2114 cdbimport: object layer settings
are not respected
Repository: cayenne
Updated Branches:
refs/heads/master cd411abc8 -> 1455622fa
CAY-2114 cdbimport: object layer settings are not respected
* tests
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/6a1eb0ff
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/6a1eb0ff
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/6a1eb0ff
Branch: refs/heads/master
Commit: 6a1eb0fff4bc1e5ce233e985df06c7a0c8a80a7e
Parents: cd411ab
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 13:33:45 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 13:33:45 2016 +0300
----------------------------------------------------------------------
.../cayenne/tools/DbImporterMojoTest.java | 8 ++++
.../testCustomObjectLayerSettings-pom.xml | 48 ++++++++++++++++++++
.../testCustomObjectLayerSettings.map.xml | 30 ++++++++++++
...testCustomObjectLayerSettings.map.xml-result | 40 ++++++++++++++++
.../dbimport/testCustomObjectLayerSettings.sql | 31 +++++++++++++
5 files changed, 157 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a1eb0ff/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 a736faf..3b040f1 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
@@ -190,6 +190,14 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
test("testUnFlattensManyToMany");
}
+ /**
+ * Make sure any merges preserve custom object layer settings, like "usePrimitives", PK mapping as attribute, etc.
+ */
+ @Test
+ public void testCustomObjectLayerSettings() throws Exception {
+ test("testCustomObjectLayerSettings");
+ }
+
/**
* CREATE TABLE APP.A (
* id INTEGER NOT NULL,
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a1eb0ff/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
new file mode 100644
index 0000000..b57d42e
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
@@ -0,0 +1,48 @@
+<?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/testCustomObjectLayerSettings.map.xml
+ </map>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ <meaningfulPkTables>^*$</meaningfulPkTables>
+ <usePrimitives>true</usePrimitives>
+
+ <reverseEngineering>
+ <schema>
+ <name>SCHEMA_01</name>
+ </schema>
+ </reverseEngineering>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a1eb0ff/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml
new file mode 100644
index 0000000..84ecf2f
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml
@@ -0,0 +1,30 @@
+<?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/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">
+ <property name="defaultSchema" value="SCHEMA_01"/>
+ <db-entity name="EXISTING_TABLE" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="ExistingTable" className="ExistingTable" dbEntityName="EXISTING_TABLE">
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a1eb0ff/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
new file mode 100644
index 0000000..a433b46
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
@@ -0,0 +1,40 @@
+<?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/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">
+ <property name="defaultSchema" value="SCHEMA_01"/>
+ <db-entity name="EXISTING_TABLE" schema="SCHEMA_01">
+ <db-attribute name="COL2" type="INTEGER" length="10"/>
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <db-entity name="NEW_TABLE" schema="SCHEMA_01">
+ <db-attribute name="COL2" type="INTEGER" length="10"/>
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
+ <obj-entity name="ExistingTable" className="ExistingTable" dbEntityName="EXISTING_TABLE">
+ <obj-attribute name="col2" type="int" db-attribute-path="COL2"/>
+ </obj-entity>
+ <obj-entity name="NewTable" className="NewTable" dbEntityName="NEW_TABLE">
+ <obj-attribute name="col2" type="int" db-attribute-path="COL2"/>
+ <obj-attribute name="id" type="int" db-attribute-path="ID"/>
+ </obj-entity>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a1eb0ff/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
new file mode 100644
index 0000000..f8f4192
--- /dev/null
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
@@ -0,0 +1,31 @@
+-- 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.new_table (
+ id INTEGER NOT NULL,
+ COL2 INTEGER,
+ PRIMARY KEY (id)
+ );
+
+CREATE TABLE schema_01.existing_table (
+ id INTEGER NOT NULL,
+ COL2 INTEGER,
+ PRIMARY KEY (id)
+ );
\ No newline at end of file
[4/7] cayenne git commit: CAY-2114 cdbimport: object layer settings
are not respected
Posted by aa...@apache.org.
CAY-2114 cdbimport: object layer settings are not respected
* will respect 'usePrimitives'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/09917c33
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/09917c33
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/09917c33
Branch: refs/heads/master
Commit: 09917c339e9b5c3376ea6dd4d5dd06040ef687d9
Parents: 7884a8f
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 13:51:07 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 14:12:28 2016 +0300
----------------------------------------------------------------------
.../src/main/java/org/apache/cayenne/tools/DbImporterMojo.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/09917c33/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 f615fa2..4714b97 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
@@ -94,6 +94,9 @@ public class DbImporterMojo extends AbstractMojo {
private File map;
/**
+ * A comma-separated list of Perl5 patterns that defines which imported tables should have their primary key columns
+ * mapped as ObjAttributes. "*" would indicate all tables.
+ *
* @parameter meaningfulPkTables="meaningfulPkTables"
* @since 4.0
*/
[6/7] cayenne git commit: cleanup, refactoring
Posted by aa...@apache.org.
cleanup, refactoring
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0ab79480
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0ab79480
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0ab79480
Branch: refs/heads/master
Commit: 0ab79480cf00bfb5b67bb101b27626fec92b8550
Parents: 09917c3
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 14:16:48 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 14:18:38 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/filter/NameFilter.java | 27 ++
.../dbsync/filter/NamePatternMatcher.java | 225 +++++++++++
.../dbsync/reverse/FiltersConfigBuilder.java | 359 -----------------
.../cayenne/dbsync/reverse/NameFilter.java | 27 --
.../dbsync/reverse/NamePatternMatcher.java | 225 -----------
.../reverse/db/DbAttributesPerSchemaLoader.java | 2 +-
.../cayenne/dbsync/reverse/db/DbLoader.java | 2 +-
.../reverse/filters/FiltersConfigBuilder.java | 353 +++++++++++++++++
.../reverse/filters/IncludeTableFilter.java | 2 +-
.../dbsync/reverse/filters/PatternFilter.java | 6 +-
.../dbsync/filter/NamePatternMatcherTest.java | 73 ++++
.../reverse/FiltersConfigBuilderTest.java | 391 ------------------
.../filters/FiltersConfigBuilderTest.java | 392 +++++++++++++++++++
.../reverse/filters/PatternFilterTest.java | 50 +--
.../cayenne/gen/ClassGenerationAction.java | 2 +-
.../cayenne/tools/AntDataPortDelegate.java | 2 +-
.../CayenneGeneratorEntityFilterAction.java | 2 +-
.../cayenne/tools/CayenneGeneratorTask.java | 2 +-
.../apache/cayenne/tools/DbImporterTask.java | 2 +-
.../cayenne/tools/NamePatternMatcherTest.java | 74 ----
.../modeler/dialog/db/DbLoaderHelper.java | 2 +-
.../dialog/db/ReverseEngineeringController.java | 2 +-
.../cayenne/tools/CayenneGeneratorMojo.java | 2 +-
.../apache/cayenne/tools/DbImporterMojo.java | 2 +-
24 files changed, 1110 insertions(+), 1116 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NameFilter.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NameFilter.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NameFilter.java
new file mode 100644
index 0000000..eabb8ee
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NameFilter.java
@@ -0,0 +1,27 @@
+/*****************************************************************
+ * 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.dbsync.filter;
+
+/**
+ * @since 4.0.
+ */
+public interface NameFilter {
+
+ boolean isIncluded(String string);
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
new file mode 100644
index 0000000..211b62e
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
@@ -0,0 +1,225 @@
+/*****************************************************************
+ * 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.dbsync.filter;
+
+import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.commons.logging.Log;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * Provides name pattern matching functionality.
+ *
+ * @since 1.2
+ */
+public class NamePatternMatcher implements NameFilter {
+
+ private static final String[] EMPTY_ARRAY = new String[0];
+ private static final Pattern COMMA = Pattern.compile(",");
+
+ private final Pattern[] itemIncludeFilters;
+ private final Pattern[] itemExcludeFilters;
+
+ public static NamePatternMatcher build(Log logger, String includePattern, String excludePattern) {
+ return new NamePatternMatcher(createPatterns(logger, includePattern), createPatterns(logger, excludePattern));
+ }
+
+ public NamePatternMatcher(Pattern[] itemIncludeFilters, Pattern[] itemExcludeFilters) {
+ this.itemIncludeFilters = itemIncludeFilters;
+ this.itemExcludeFilters = itemExcludeFilters;
+ }
+
+ /**
+ * Applies preconfigured list of filters to the list, removing entities that do not
+ * pass the filter.
+ *
+ * @deprecated since 3.0 still used by AntDataPortDelegate, which itself should
+ * probably be deprecated
+ */
+ @Deprecated
+ public List<?> filter(List<?> items) {
+ if (items == null || items.isEmpty()) {
+ return items;
+ }
+
+ if (itemIncludeFilters.length == 0 && itemExcludeFilters.length == 0) {
+ return items;
+ }
+
+ Iterator<?> it = items.iterator();
+ while (it.hasNext()) {
+ CayenneMapEntry entity = (CayenneMapEntry) it.next();
+
+ if (!passedIncludeFilter(entity.getName())) {
+ it.remove();
+ continue;
+ }
+
+ if (!passedExcludeFilter(entity.getName())) {
+ it.remove();
+ }
+ }
+
+ return items;
+ }
+
+ /**
+ * Returns an array of Patterns. Takes a comma-separated list of patterns, attempting
+ * to convert them to the java.util.regex.Pattern syntax. E.g.
+ * <p>
+ * <code>"billing_*,user?"</code> will become an array of two expressions:
+ * <p>
+ * <code>^billing_.*$</code><br>
+ * <code>^user.?$</code><br>
+ */
+ public static Pattern[] createPatterns(Log logger, String patternString) {
+ if (patternString == null) {
+ return new Pattern[0];
+ }
+ String[] patternStrings = tokenizePattern(patternString);
+ List<Pattern> patterns = new ArrayList<Pattern>(patternStrings.length);
+
+ for (String patternString1 : patternStrings) {
+
+ // test the pattern
+ try {
+ patterns.add(Pattern.compile(patternString1));
+ } catch (PatternSyntaxException e) {
+
+ if (logger != null) {
+ logger.warn("Ignoring invalid pattern [" + patternString1 + "], reason: " + e.getMessage());
+ }
+ }
+ }
+
+ return patterns.toArray(new Pattern[patterns.size()]);
+ }
+
+ /**
+ * Returns an array of valid regular expressions. Takes a comma-separated list of
+ * patterns, attempting to convert them to the java.util.regex.Pattern syntax. E.g.
+ * <p>
+ * <code>"billing_*,user?"</code> will become an array of two expressions:
+ * <p>
+ * <code>^billing_.*$</code><br>
+ * <code>^user.?$</code><br>
+ */
+ public static String[] tokenizePattern(String pattern) {
+ if (pattern == null || pattern.isEmpty()) {
+ return EMPTY_ARRAY;
+ }
+
+ String[] patterns = COMMA.split(pattern);
+ if (patterns.length == 0) {
+ return EMPTY_ARRAY;
+ }
+
+ for (int i = 0; i < patterns.length; i++) {
+ // convert * into regex syntax
+ // e.g. abc*x becomes ^abc.*x$
+ // or abc?x becomes ^abc.?x$
+ patterns[i] = "^" + patterns[i].replaceAll("[*?]", ".$0") + "$";
+ }
+
+ return patterns;
+ }
+
+ /**
+ * Returns true if a given object property satisfies the include/exclude patterns.
+ *
+ * @since 3.0
+ */
+ @Override
+ public boolean isIncluded(String string) {
+ return passedIncludeFilter(string) && passedExcludeFilter(string);
+ }
+
+ /**
+ * Returns true if an object matches any one of the "include" patterns, or if there is
+ * no "include" patterns defined.
+ *
+ * @since 3.0
+ */
+ private boolean passedIncludeFilter(String item) {
+ if (itemIncludeFilters.length == 0) {
+ return true;
+ }
+
+ for (Pattern itemIncludeFilter : itemIncludeFilters) {
+ if (itemIncludeFilter.matcher(item).find()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns true if an object does not match any one of the "exclude" patterns, or if
+ * there is no "exclude" patterns defined.
+ *
+ * @since 3.0
+ */
+ private boolean passedExcludeFilter(String item) {
+ if (itemExcludeFilters.length == 0) {
+ return true;
+ }
+
+ for (Pattern itemExcludeFilter : itemExcludeFilters) {
+ if (itemExcludeFilter.matcher(item).find()) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static String replaceWildcardInStringWithString(
+ String wildcard,
+ String pattern,
+ String replacement) {
+
+ if (pattern == null || wildcard == null) {
+ return pattern;
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ int lastPos = 0;
+ int wildCardPos = pattern.indexOf(wildcard);
+ while (wildCardPos != -1) {
+ if (lastPos != wildCardPos) {
+ buffer.append(pattern.substring(lastPos, wildCardPos));
+ }
+ buffer.append(replacement);
+ lastPos += wildCardPos + wildcard.length();
+ wildCardPos = pattern.indexOf(wildcard, lastPos);
+ }
+
+ if (lastPos < pattern.length()) {
+ buffer.append(pattern.substring(lastPos));
+ }
+
+ return buffer.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilder.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilder.java
deleted file mode 100644
index 4f72f6d..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilder.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*****************************************************************
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.dbsync.reverse;
-
-import org.apache.cayenne.dbimport.Catalog;
-import org.apache.cayenne.dbimport.ExcludeColumn;
-import org.apache.cayenne.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbimport.ExcludeTable;
-import org.apache.cayenne.dbimport.IncludeColumn;
-import org.apache.cayenne.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbimport.IncludeTable;
-import org.apache.cayenne.dbimport.PatternParam;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbimport.Schema;
-import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
-import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
-import org.apache.cayenne.dbsync.reverse.filters.IncludeTableFilter;
-import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
-import org.apache.cayenne.dbsync.reverse.filters.SchemaFilter;
-import org.apache.cayenne.dbsync.reverse.filters.TableFilter;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-/**
- * @since 4.0
- */
-public final class FiltersConfigBuilder {
-
- private final ReverseEngineering engineering;
-
- public FiltersConfigBuilder(ReverseEngineering engineering) {
- this.engineering = engineering;
- }
-
- public FiltersConfig build() {
- compact();
-
- return new FiltersConfig(transformCatalogs(engineering.getCatalogs()));
- }
-
- private CatalogFilter[] transformCatalogs(Collection<Catalog> catalogs) {
- CatalogFilter[] catalogFilters = new CatalogFilter[catalogs.size()];
- int i = 0;
- for (Catalog catalog : catalogs) {
- catalogFilters[i] = new CatalogFilter(catalog.getName(), transformSchemas(catalog.getSchemas()));
- i++;
- }
-
- return catalogFilters;
- }
-
- private SchemaFilter[] transformSchemas(Collection<Schema> schemas) {
- SchemaFilter[] schemaFilters = new SchemaFilter[schemas.size()];
- int i = 0;
- for (Schema schema : schemas) {
- schemaFilters[i] = new SchemaFilter(schema.getName(),
- new TableFilter(transformIncludeTable(schema.getIncludeTables()),
- transformExcludeTable(schema.getExcludeTables())),
- transform(schema.getIncludeProcedures(), schema.getExcludeProcedures()));
- i++;
- }
-
- return schemaFilters;
- }
-
- private SortedSet<Pattern> transformExcludeTable(Collection<ExcludeTable> excludeTables) {
- SortedSet<Pattern> res = new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
- for (ExcludeTable exclude : excludeTables) {
- res.add(PatternFilter.pattern(exclude.getPattern()));
- }
- return res;
- }
-
- private SortedSet<IncludeTableFilter> transformIncludeTable(Collection<IncludeTable> includeTables) {
- SortedSet<IncludeTableFilter> includeTableFilters = new TreeSet<IncludeTableFilter>();
- for (IncludeTable includeTable : includeTables) {
- includeTableFilters.add(new IncludeTableFilter(includeTable.getPattern(),
- transform(includeTable.getIncludeColumns(), includeTable.getExcludeColumns())));
- }
-
- return includeTableFilters;
- }
-
- private PatternFilter transform(Collection<? extends PatternParam> include,
- Collection<? extends PatternParam> exclude) {
- PatternFilter filter = new PatternFilter();
-
- for (PatternParam patternParam : include) {
- filter.include(patternParam.getPattern());
- }
-
- for (PatternParam patternParam : exclude) {
- filter.exclude(patternParam.getPattern());
- }
-
- return filter;
-
- }
-
- /**
- * Goal of this method transform ReverseEngineering config into more regular form
- * From
- * <pre>
- * ReverseEngineering
- * Catalog
- * Schema
- * IncludeTable
- * IncludeColumn
- * ExcludeColumn
- * ExcludeTable
- * IncludeProcedures
- * ExcludeProcedures
- * IncludeColumn
- * ExcludeColumn
- * IncludeTable
- * IncludeColumn
- * ExcludeColumn
- * ExcludeTable
- * IncludeProcedures
- * ExcludeProcedures
- * IncludeColumn
- * ExcludeColumn
- * Schema
- * IncludeTable
- * IncludeColumn
- * ExcludeColumn
- * ExcludeTable
- * IncludeProcedures
- * ExcludeProcedures
- * IncludeColumn
- * ExcludeColumn
- * IncludeTable
- * IncludeColumn
- * ExcludeColumn
- * ExcludeTable
- * IncludeProcedures
- * ExcludeProcedures
- * IncludeColumn
- * ExcludeColumn
- * </pre>
- * Into
- * <pre>
- * ReverseEngineering
- * Catalog
- * Schema
- * IncludeTable
- * IncludeColumn
- * ExcludeColumn
- * ExcludeTable
- * IncludeProcedures
- * ExcludeProcedures
- * </pre>
- */
- void compact() {
- addEmptyElements();
-
- compactColumnFilters();
- compactTableFilter();
- compactProcedureFilter();
- compactSchemas();
- }
-
- private void compactSchemas() {
- for (Catalog catalog : engineering.getCatalogs()) {
- catalog.getSchemas().addAll(engineering.getSchemas());
- }
- engineering.setSchemas(null);
- }
-
- private void compactProcedureFilter() {
- Collection<IncludeProcedure> engIncludeProcedures = engineering.getIncludeProcedures();
- Collection<ExcludeProcedure> engExcludeProcedures = engineering.getExcludeProcedures();
-
- engineering.setIncludeProcedures(null);
- engineering.setExcludeProcedures(null);
-
- for (Catalog catalog : engineering.getCatalogs()) {
- Collection<IncludeProcedure> catalogIncludeProcedures = catalog.getIncludeProcedures();
- Collection<ExcludeProcedure> catalogExcludeProcedures = catalog.getExcludeProcedures();
-
- catalog.setIncludeProcedures(null);
- catalog.setExcludeProcedures(null);
-
- for (Schema schema : catalog.getSchemas()) {
- if (engIncludeProcedures != null) {
- schema.getIncludeProcedures().addAll(engIncludeProcedures);
- schema.getIncludeProcedures().addAll(catalogIncludeProcedures);
- }
- if (engExcludeProcedures != null) {
- schema.getExcludeProcedures().addAll(engExcludeProcedures);
- schema.getExcludeProcedures().addAll(catalogExcludeProcedures);
- }
- }
- }
-
- for (Schema schema : engineering.getSchemas()) {
- schema.getIncludeProcedures().addAll(engIncludeProcedures);
- schema.getExcludeProcedures().addAll(engExcludeProcedures);
- }
- }
-
- private void compactTableFilter() {
- Collection<IncludeTable> engIncludeTables = engineering.getIncludeTables();
- Collection<ExcludeTable> engExcludeTables = engineering.getExcludeTables();
-
- engineering.setIncludeTables(null);
- engineering.setExcludeTables(null);
-
- for (Catalog catalog : engineering.getCatalogs()) {
- Collection<IncludeTable> catalogIncludeTables = catalog.getIncludeTables();
- Collection<ExcludeTable> catalogExcludeTables = catalog.getExcludeTables();
-
- catalog.setIncludeTables(null);
- catalog.setExcludeTables(null);
-
- for (Schema schema : catalog.getSchemas()) {
- if (engIncludeTables != null) {
- schema.getIncludeTables().addAll(engIncludeTables);
- schema.getIncludeTables().addAll(catalogIncludeTables);
- }
- if (engExcludeTables != null) {
- schema.getExcludeTables().addAll(engExcludeTables);
- schema.getExcludeTables().addAll(catalogExcludeTables);
- }
- }
- }
-
- for (Schema schema : engineering.getSchemas()) {
- schema.getIncludeTables().addAll(engIncludeTables);
- schema.getExcludeTables().addAll(engExcludeTables);
- }
- }
-
- private void compactColumnFilters() {
- Collection<IncludeColumn> engIncludeColumns = engineering.getIncludeColumns();
- Collection<ExcludeColumn> engExcludeColumns = engineering.getExcludeColumns();
-
- engineering.setIncludeColumns(null);
- engineering.setExcludeColumns(null);
-
- for (Catalog catalog : engineering.getCatalogs()) {
- Collection<IncludeColumn> catalogIncludeColumns = catalog.getIncludeColumns();
- Collection<ExcludeColumn> catalogExcludeColumns = catalog.getExcludeColumns();
-
- catalog.setIncludeColumns(null);
- catalog.setExcludeColumns(null);
-
- for (Schema schema : catalog.getSchemas()) {
- Collection<IncludeColumn> schemaIncludeColumns = schema.getIncludeColumns();
- Collection<ExcludeColumn> schemaExcludeColumns = schema.getExcludeColumns();
-
- schema.setIncludeColumns(null);
- schema.setExcludeColumns(null);
-
- if (schema != null) {
- for (IncludeTable includeTable : schema.getIncludeTables()) {
- if (engIncludeColumns != null) {
- includeTable.getIncludeColumns().addAll(engIncludeColumns);
- includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
- includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
- }
- if (engExcludeColumns != null) {
- includeTable.getExcludeColumns().addAll(engExcludeColumns);
- includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
- includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
- }
- }
- }
- }
-
- if (catalog.getIncludeTables() != null) {
- for (IncludeTable includeTable : catalog.getIncludeTables()) {
- includeTable.getIncludeColumns().addAll(engIncludeColumns);
- includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
-
- includeTable.getExcludeColumns().addAll(engExcludeColumns);
- includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
- }
- }
- }
-
- for (Schema schema : engineering.getSchemas()) {
- Collection<IncludeColumn> schemaIncludeColumns = schema.getIncludeColumns();
- Collection<ExcludeColumn> schemaExcludeColumns = schema.getExcludeColumns();
-
- schema.setIncludeColumns(null);
- schema.setExcludeColumns(null);
-
- for (IncludeTable includeTable : schema.getIncludeTables()) {
- includeTable.getIncludeColumns().addAll(engIncludeColumns);
- includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
-
- includeTable.getExcludeColumns().addAll(engExcludeColumns);
- includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
- }
- }
-
- if (engineering.getIncludeTables() != null) {
- for (IncludeTable includeTable : engineering.getIncludeTables()) {
- includeTable.getIncludeColumns().addAll(engIncludeColumns);
- includeTable.getExcludeColumns().addAll(engExcludeColumns);
- }
- }
- }
-
- private void addEmptyElements() {
- if (engineering.getCatalogs().isEmpty()) {
- engineering.addCatalog(new Catalog());
- }
-
- for (Catalog catalog : engineering.getCatalogs()) {
- if (catalog.getSchemas().isEmpty()
- && engineering.getSchemas().isEmpty()) {
- catalog.addSchema(new Schema());
- }
-
- for (Schema schema : catalog.getSchemas()) {
- if (schema.getIncludeTables().isEmpty()
- && catalog.getIncludeTables().isEmpty()
- && engineering.getIncludeTables().isEmpty()) {
-
- schema.addIncludeTable(new IncludeTable());
- }
- }
- }
-
- if (engineering.getSchemas() == null) {
- engineering.setSchemas(new LinkedList<Schema>());
- }
-
- for (Schema schema : engineering.getSchemas()) {
- if (schema.getIncludeTables().isEmpty()
- && engineering.getIncludeTables().isEmpty()) {
-
- schema.addIncludeTable(new IncludeTable());
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NameFilter.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NameFilter.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NameFilter.java
deleted file mode 100644
index 89b8330..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NameFilter.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************
- * 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.dbsync.reverse;
-
-/**
- * @since 4.0.
- */
-public interface NameFilter {
-
- boolean isIncluded(String string);
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NamePatternMatcher.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NamePatternMatcher.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NamePatternMatcher.java
deleted file mode 100644
index cb9faad..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/NamePatternMatcher.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*****************************************************************
- * 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.dbsync.reverse;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import org.apache.cayenne.util.CayenneMapEntry;
-import org.apache.commons.logging.Log;
-
-/**
- * Provides name pattern matching functionality.
- *
- * @since 1.2
- */
-public class NamePatternMatcher implements NameFilter {
-
- private static final String[] EMPTY_ARRAY = new String[0];
- private static final Pattern COMMA = Pattern.compile(",");
-
- private final Pattern[] itemIncludeFilters;
- private final Pattern[] itemExcludeFilters;
-
- public static NamePatternMatcher build(Log logger, String includePattern, String excludePattern) {
- return new NamePatternMatcher(createPatterns(logger, includePattern), createPatterns(logger, excludePattern));
- }
-
- public NamePatternMatcher(Pattern[] itemIncludeFilters, Pattern[] itemExcludeFilters) {
- this.itemIncludeFilters = itemIncludeFilters;
- this.itemExcludeFilters = itemExcludeFilters;
- }
-
- /**
- * Applies preconfigured list of filters to the list, removing entities that do not
- * pass the filter.
- *
- * @deprecated since 3.0 still used by AntDataPortDelegate, which itself should
- * probably be deprecated
- */
- @Deprecated
- public List<?> filter(List<?> items) {
- if (items == null || items.isEmpty()) {
- return items;
- }
-
- if (itemIncludeFilters.length == 0 && itemExcludeFilters.length == 0) {
- return items;
- }
-
- Iterator<?> it = items.iterator();
- while (it.hasNext()) {
- CayenneMapEntry entity = (CayenneMapEntry) it.next();
-
- if (!passedIncludeFilter(entity.getName())) {
- it.remove();
- continue;
- }
-
- if (!passedExcludeFilter(entity.getName())) {
- it.remove();
- }
- }
-
- return items;
- }
-
- /**
- * Returns an array of Patterns. Takes a comma-separated list of patterns, attempting
- * to convert them to the java.util.regex.Pattern syntax. E.g.
- * <p>
- * <code>"billing_*,user?"</code> will become an array of two expressions:
- * <p>
- * <code>^billing_.*$</code><br>
- * <code>^user.?$</code><br>
- */
- public static Pattern[] createPatterns(Log logger, String patternString) {
- if (patternString == null) {
- return new Pattern[0];
- }
- String[] patternStrings = tokenizePattern(patternString);
- List<Pattern> patterns = new ArrayList<Pattern>(patternStrings.length);
-
- for (String patternString1 : patternStrings) {
-
- // test the pattern
- try {
- patterns.add(Pattern.compile(patternString1));
- } catch (PatternSyntaxException e) {
-
- if (logger != null) {
- logger.warn("Ignoring invalid pattern [" + patternString1 + "], reason: " + e.getMessage());
- }
- }
- }
-
- return patterns.toArray(new Pattern[patterns.size()]);
- }
-
- /**
- * Returns an array of valid regular expressions. Takes a comma-separated list of
- * patterns, attempting to convert them to the java.util.regex.Pattern syntax. E.g.
- * <p>
- * <code>"billing_*,user?"</code> will become an array of two expressions:
- * <p>
- * <code>^billing_.*$</code><br>
- * <code>^user.?$</code><br>
- */
- public static String[] tokenizePattern(String pattern) {
- if (pattern == null || pattern.isEmpty()) {
- return EMPTY_ARRAY;
- }
-
- String[] patterns = COMMA.split(pattern);
- if (patterns.length == 0) {
- return EMPTY_ARRAY;
- }
-
- for (int i = 0; i < patterns.length; i++) {
- // convert * into regex syntax
- // e.g. abc*x becomes ^abc.*x$
- // or abc?x becomes ^abc.?x$
- patterns[i] = "^" + patterns[i].replaceAll("[*?]", ".$0") + "$";
- }
-
- return patterns;
- }
-
- /**
- * Returns true if a given object property satisfies the include/exclude patterns.
- *
- * @since 3.0
- */
- @Override
- public boolean isIncluded(String string) {
- return passedIncludeFilter(string) && passedExcludeFilter(string);
- }
-
- /**
- * Returns true if an object matches any one of the "include" patterns, or if there is
- * no "include" patterns defined.
- *
- * @since 3.0
- */
- private boolean passedIncludeFilter(String item) {
- if (itemIncludeFilters.length == 0) {
- return true;
- }
-
- for (Pattern itemIncludeFilter : itemIncludeFilters) {
- if (itemIncludeFilter.matcher(item).find()) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Returns true if an object does not match any one of the "exclude" patterns, or if
- * there is no "exclude" patterns defined.
- *
- * @since 3.0
- */
- private boolean passedExcludeFilter(String item) {
- if (itemExcludeFilters.length == 0) {
- return true;
- }
-
- for (Pattern itemExcludeFilter : itemExcludeFilters) {
- if (itemExcludeFilter.matcher(item).find()) {
- return false;
- }
- }
-
- return true;
- }
-
- public static String replaceWildcardInStringWithString(
- String wildcard,
- String pattern,
- String replacement) {
-
- if (pattern == null || wildcard == null) {
- return pattern;
- }
-
- StringBuilder buffer = new StringBuilder();
- int lastPos = 0;
- int wildCardPos = pattern.indexOf(wildcard);
- while (wildCardPos != -1) {
- if (lastPos != wildCardPos) {
- buffer.append(pattern.substring(lastPos, wildCardPos));
- }
- buffer.append(replacement);
- lastPos += wildCardPos + wildcard.length();
- wildCardPos = pattern.indexOf(wildcard, lastPos);
- }
-
- if (lastPos < pattern.length()) {
- buffer.append(pattern.substring(lastPos));
- }
-
- return buffer.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbAttributesPerSchemaLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbAttributesPerSchemaLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbAttributesPerSchemaLoader.java
index 77896c8..1ac0b07 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbAttributesPerSchemaLoader.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbAttributesPerSchemaLoader.java
@@ -82,7 +82,7 @@ public class DbAttributesPerSchemaLoader extends DbAttributesBaseLoader {
* loading since already done pattern matching once and exactly
* know all tables that we want to process
*/
- if (columnFilter == null || !columnFilter.isInclude(columnName)) {
+ if (columnFilter == null || !columnFilter.isIncluded(columnName)) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Skip column '" + tableName + "." + columnName + "' (Path: " + getCatalog() + "/"
+ getSchema() + "; Filter: " + columnFilter + ")");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
index 2821adb..7f9b780 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
@@ -541,7 +541,7 @@ public class DbLoader {
procedure.setCatalog(rs.getString("PROCEDURE_CAT"));
procedure.setSchema(rs.getString("PROCEDURE_SCHEM"));
- if (!filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema()).isInclude(
+ if (!filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema()).isIncluded(
procedure.getName())) {
LOGGER.info("skipping Cayenne PK procedure: " + name);
continue;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java
new file mode 100644
index 0000000..ae6b1ee
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilder.java
@@ -0,0 +1,353 @@
+/*
+ * 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.dbsync.reverse.filters;
+
+import org.apache.cayenne.dbimport.Catalog;
+import org.apache.cayenne.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbimport.ExcludeTable;
+import org.apache.cayenne.dbimport.IncludeColumn;
+import org.apache.cayenne.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbimport.IncludeTable;
+import org.apache.cayenne.dbimport.PatternParam;
+import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbimport.Schema;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.regex.Pattern;
+
+/**
+ * @since 4.0
+ */
+public final class FiltersConfigBuilder {
+
+ private final ReverseEngineering engineering;
+
+ public FiltersConfigBuilder(ReverseEngineering engineering) {
+ this.engineering = engineering;
+ }
+
+ public FiltersConfig build() {
+ compact();
+
+ return new FiltersConfig(transformCatalogs(engineering.getCatalogs()));
+ }
+
+ private CatalogFilter[] transformCatalogs(Collection<Catalog> catalogs) {
+ CatalogFilter[] catalogFilters = new CatalogFilter[catalogs.size()];
+ int i = 0;
+ for (Catalog catalog : catalogs) {
+ catalogFilters[i] = new CatalogFilter(catalog.getName(), transformSchemas(catalog.getSchemas()));
+ i++;
+ }
+
+ return catalogFilters;
+ }
+
+ private SchemaFilter[] transformSchemas(Collection<Schema> schemas) {
+ SchemaFilter[] schemaFilters = new SchemaFilter[schemas.size()];
+ int i = 0;
+ for (Schema schema : schemas) {
+ schemaFilters[i] = new SchemaFilter(schema.getName(),
+ new TableFilter(transformIncludeTable(schema.getIncludeTables()),
+ transformExcludeTable(schema.getExcludeTables())),
+ transform(schema.getIncludeProcedures(), schema.getExcludeProcedures()));
+ i++;
+ }
+
+ return schemaFilters;
+ }
+
+ private SortedSet<Pattern> transformExcludeTable(Collection<ExcludeTable> excludeTables) {
+ SortedSet<Pattern> res = new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
+ for (ExcludeTable exclude : excludeTables) {
+ res.add(PatternFilter.pattern(exclude.getPattern()));
+ }
+ return res;
+ }
+
+ private SortedSet<IncludeTableFilter> transformIncludeTable(Collection<IncludeTable> includeTables) {
+ SortedSet<IncludeTableFilter> includeTableFilters = new TreeSet<IncludeTableFilter>();
+ for (IncludeTable includeTable : includeTables) {
+ includeTableFilters.add(new IncludeTableFilter(includeTable.getPattern(),
+ transform(includeTable.getIncludeColumns(), includeTable.getExcludeColumns())));
+ }
+
+ return includeTableFilters;
+ }
+
+ private PatternFilter transform(Collection<? extends PatternParam> include,
+ Collection<? extends PatternParam> exclude) {
+ PatternFilter filter = new PatternFilter();
+
+ for (PatternParam patternParam : include) {
+ filter.include(patternParam.getPattern());
+ }
+
+ for (PatternParam patternParam : exclude) {
+ filter.exclude(patternParam.getPattern());
+ }
+
+ return filter;
+
+ }
+
+ /**
+ * Goal of this method transform ReverseEngineering config into more regular form
+ * From
+ * <pre>
+ * ReverseEngineering
+ * Catalog
+ * Schema
+ * IncludeTable
+ * IncludeColumn
+ * ExcludeColumn
+ * ExcludeTable
+ * IncludeProcedures
+ * ExcludeProcedures
+ * IncludeColumn
+ * ExcludeColumn
+ * IncludeTable
+ * IncludeColumn
+ * ExcludeColumn
+ * ExcludeTable
+ * IncludeProcedures
+ * ExcludeProcedures
+ * IncludeColumn
+ * ExcludeColumn
+ * Schema
+ * IncludeTable
+ * IncludeColumn
+ * ExcludeColumn
+ * ExcludeTable
+ * IncludeProcedures
+ * ExcludeProcedures
+ * IncludeColumn
+ * ExcludeColumn
+ * IncludeTable
+ * IncludeColumn
+ * ExcludeColumn
+ * ExcludeTable
+ * IncludeProcedures
+ * ExcludeProcedures
+ * IncludeColumn
+ * ExcludeColumn
+ * </pre>
+ * Into
+ * <pre>
+ * ReverseEngineering
+ * Catalog
+ * Schema
+ * IncludeTable
+ * IncludeColumn
+ * ExcludeColumn
+ * ExcludeTable
+ * IncludeProcedures
+ * ExcludeProcedures
+ * </pre>
+ */
+ void compact() {
+ addEmptyElements();
+
+ compactColumnFilters();
+ compactTableFilter();
+ compactProcedureFilter();
+ compactSchemas();
+ }
+
+ private void compactSchemas() {
+ for (Catalog catalog : engineering.getCatalogs()) {
+ catalog.getSchemas().addAll(engineering.getSchemas());
+ }
+ engineering.setSchemas(null);
+ }
+
+ private void compactProcedureFilter() {
+ Collection<IncludeProcedure> engIncludeProcedures = engineering.getIncludeProcedures();
+ Collection<ExcludeProcedure> engExcludeProcedures = engineering.getExcludeProcedures();
+
+ engineering.setIncludeProcedures(null);
+ engineering.setExcludeProcedures(null);
+
+ for (Catalog catalog : engineering.getCatalogs()) {
+ Collection<IncludeProcedure> catalogIncludeProcedures = catalog.getIncludeProcedures();
+ Collection<ExcludeProcedure> catalogExcludeProcedures = catalog.getExcludeProcedures();
+
+ catalog.setIncludeProcedures(null);
+ catalog.setExcludeProcedures(null);
+
+ for (Schema schema : catalog.getSchemas()) {
+ if (engIncludeProcedures != null) {
+ schema.getIncludeProcedures().addAll(engIncludeProcedures);
+ schema.getIncludeProcedures().addAll(catalogIncludeProcedures);
+ }
+ if (engExcludeProcedures != null) {
+ schema.getExcludeProcedures().addAll(engExcludeProcedures);
+ schema.getExcludeProcedures().addAll(catalogExcludeProcedures);
+ }
+ }
+ }
+
+ for (Schema schema : engineering.getSchemas()) {
+ schema.getIncludeProcedures().addAll(engIncludeProcedures);
+ schema.getExcludeProcedures().addAll(engExcludeProcedures);
+ }
+ }
+
+ private void compactTableFilter() {
+ Collection<IncludeTable> engIncludeTables = engineering.getIncludeTables();
+ Collection<ExcludeTable> engExcludeTables = engineering.getExcludeTables();
+
+ engineering.setIncludeTables(null);
+ engineering.setExcludeTables(null);
+
+ for (Catalog catalog : engineering.getCatalogs()) {
+ Collection<IncludeTable> catalogIncludeTables = catalog.getIncludeTables();
+ Collection<ExcludeTable> catalogExcludeTables = catalog.getExcludeTables();
+
+ catalog.setIncludeTables(null);
+ catalog.setExcludeTables(null);
+
+ for (Schema schema : catalog.getSchemas()) {
+ if (engIncludeTables != null) {
+ schema.getIncludeTables().addAll(engIncludeTables);
+ schema.getIncludeTables().addAll(catalogIncludeTables);
+ }
+ if (engExcludeTables != null) {
+ schema.getExcludeTables().addAll(engExcludeTables);
+ schema.getExcludeTables().addAll(catalogExcludeTables);
+ }
+ }
+ }
+
+ for (Schema schema : engineering.getSchemas()) {
+ schema.getIncludeTables().addAll(engIncludeTables);
+ schema.getExcludeTables().addAll(engExcludeTables);
+ }
+ }
+
+ private void compactColumnFilters() {
+ Collection<IncludeColumn> engIncludeColumns = engineering.getIncludeColumns();
+ Collection<ExcludeColumn> engExcludeColumns = engineering.getExcludeColumns();
+
+ engineering.setIncludeColumns(null);
+ engineering.setExcludeColumns(null);
+
+ for (Catalog catalog : engineering.getCatalogs()) {
+ Collection<IncludeColumn> catalogIncludeColumns = catalog.getIncludeColumns();
+ Collection<ExcludeColumn> catalogExcludeColumns = catalog.getExcludeColumns();
+
+ catalog.setIncludeColumns(null);
+ catalog.setExcludeColumns(null);
+
+ for (Schema schema : catalog.getSchemas()) {
+ Collection<IncludeColumn> schemaIncludeColumns = schema.getIncludeColumns();
+ Collection<ExcludeColumn> schemaExcludeColumns = schema.getExcludeColumns();
+
+ schema.setIncludeColumns(null);
+ schema.setExcludeColumns(null);
+
+ if (schema != null) {
+ for (IncludeTable includeTable : schema.getIncludeTables()) {
+ if (engIncludeColumns != null) {
+ includeTable.getIncludeColumns().addAll(engIncludeColumns);
+ includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
+ includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
+ }
+ if (engExcludeColumns != null) {
+ includeTable.getExcludeColumns().addAll(engExcludeColumns);
+ includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
+ includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
+ }
+ }
+ }
+ }
+
+ if (catalog.getIncludeTables() != null) {
+ for (IncludeTable includeTable : catalog.getIncludeTables()) {
+ includeTable.getIncludeColumns().addAll(engIncludeColumns);
+ includeTable.getIncludeColumns().addAll(catalogIncludeColumns);
+
+ includeTable.getExcludeColumns().addAll(engExcludeColumns);
+ includeTable.getExcludeColumns().addAll(catalogExcludeColumns);
+ }
+ }
+ }
+
+ for (Schema schema : engineering.getSchemas()) {
+ Collection<IncludeColumn> schemaIncludeColumns = schema.getIncludeColumns();
+ Collection<ExcludeColumn> schemaExcludeColumns = schema.getExcludeColumns();
+
+ schema.setIncludeColumns(null);
+ schema.setExcludeColumns(null);
+
+ for (IncludeTable includeTable : schema.getIncludeTables()) {
+ includeTable.getIncludeColumns().addAll(engIncludeColumns);
+ includeTable.getIncludeColumns().addAll(schemaIncludeColumns);
+
+ includeTable.getExcludeColumns().addAll(engExcludeColumns);
+ includeTable.getExcludeColumns().addAll(schemaExcludeColumns);
+ }
+ }
+
+ if (engineering.getIncludeTables() != null) {
+ for (IncludeTable includeTable : engineering.getIncludeTables()) {
+ includeTable.getIncludeColumns().addAll(engIncludeColumns);
+ includeTable.getExcludeColumns().addAll(engExcludeColumns);
+ }
+ }
+ }
+
+ private void addEmptyElements() {
+ if (engineering.getCatalogs().isEmpty()) {
+ engineering.addCatalog(new Catalog());
+ }
+
+ for (Catalog catalog : engineering.getCatalogs()) {
+ if (catalog.getSchemas().isEmpty()
+ && engineering.getSchemas().isEmpty()) {
+ catalog.addSchema(new Schema());
+ }
+
+ for (Schema schema : catalog.getSchemas()) {
+ if (schema.getIncludeTables().isEmpty()
+ && catalog.getIncludeTables().isEmpty()
+ && engineering.getIncludeTables().isEmpty()) {
+
+ schema.addIncludeTable(new IncludeTable());
+ }
+ }
+ }
+
+ if (engineering.getSchemas() == null) {
+ engineering.setSchemas(new LinkedList<Schema>());
+ }
+
+ for (Schema schema : engineering.getSchemas()) {
+ if (schema.getIncludeTables().isEmpty()
+ && engineering.getIncludeTables().isEmpty()) {
+
+ schema.addIncludeTable(new IncludeTable());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/IncludeTableFilter.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/IncludeTableFilter.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/IncludeTableFilter.java
index 7272b2d..f431b3b 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/IncludeTableFilter.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/IncludeTableFilter.java
@@ -38,7 +38,7 @@ public class IncludeTableFilter implements Comparable<IncludeTableFilter> {
}
public boolean isIncludeColumn (String name) {
- return columnsFilter.isInclude(name);
+ return columnsFilter.isIncluded(name);
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilter.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilter.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilter.java
index ee1d9e0..feb90de 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilter.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilter.java
@@ -33,7 +33,7 @@ public class PatternFilter {
public static final PatternFilter INCLUDE_EVERYTHING = new PatternFilter() {
@Override
- public boolean isInclude(String obj) {
+ public boolean isIncluded(String obj) {
return true;
}
@@ -45,7 +45,7 @@ public class PatternFilter {
public static final PatternFilter INCLUDE_NOTHING = new PatternFilter() {
@Override
- public boolean isInclude(String obj) {
+ public boolean isIncluded(String obj) {
return false;
}
@@ -102,7 +102,7 @@ public class PatternFilter {
return exclude(pattern(p));
}
- public boolean isInclude(String obj) {
+ public boolean isIncluded(String obj) {
boolean include = includes.isEmpty();
for (Pattern p : includes) {
if (p != null) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
new file mode 100644
index 0000000..d99ba09
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
@@ -0,0 +1,73 @@
+/*****************************************************************
+ * 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.dbsync.filter;
+
+import org.junit.Test;
+
+import static org.apache.cayenne.dbsync.filter.NamePatternMatcher.replaceWildcardInStringWithString;
+import static org.junit.Assert.assertEquals;
+
+public class NamePatternMatcherTest {
+
+ /**
+ * Test pattern expansion.
+ */
+ @Test
+ public void testReplaceWildcardInStringWithString() throws Exception {
+ assertEquals(null, replaceWildcardInStringWithString("*", null, "Entity"));
+ assertEquals("*.java", replaceWildcardInStringWithString(null, "*.java", "Entity"));
+ assertEquals("Entity.java", replaceWildcardInStringWithString("*", "*.java", "Entity"));
+ assertEquals("java.Entity", replaceWildcardInStringWithString("*", "java.*", "Entity"));
+ assertEquals("Entity.Entity", replaceWildcardInStringWithString("*", "*.*", "Entity"));
+ assertEquals("EntityEntity", replaceWildcardInStringWithString("*", "**", "Entity"));
+ assertEquals("EditEntityReport.vm", replaceWildcardInStringWithString("*", "Edit*Report.vm", "Entity"));
+ assertEquals("Entity", replaceWildcardInStringWithString("*", "*", "Entity"));
+ }
+
+ /**
+ * Test tokenizing
+ */
+ @Test
+ public void testTokenizer() {
+
+ String[] nullFilters = NamePatternMatcher.tokenizePattern(null);
+ assertEquals(0, nullFilters.length);
+
+ String[] filters = NamePatternMatcher.tokenizePattern("billing_*,user?");
+ assertEquals(2, filters.length);
+ assertEquals("^billing_.*$", filters[0]);
+ assertEquals("^user.?$", filters[1]);
+ }
+
+ /**
+ * Test tokenizing
+ */
+ @Test
+ public void testTokenizerEntities() {
+
+ String includePattern = "Organization,SecGroup,SecIndividual";
+
+ String[] filters = NamePatternMatcher.tokenizePattern(includePattern);
+ assertEquals(3, filters.length);
+ assertEquals("^Organization$", filters[0]);
+ assertEquals("^SecGroup$", filters[1]);
+ assertEquals("^SecIndividual$", filters[2]);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilderTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilderTest.java
deleted file mode 100644
index 5b1a0e7..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/FiltersConfigBuilderTest.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * 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.dbsync.reverse;
-
-import org.apache.cayenne.dbimport.Catalog;
-import org.apache.cayenne.dbimport.ExcludeColumn;
-import org.apache.cayenne.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbimport.ExcludeTable;
-import org.apache.cayenne.dbimport.IncludeColumn;
-import org.apache.cayenne.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbimport.IncludeTable;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbimport.Schema;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class FiltersConfigBuilderTest {
-
- @Test
- public void testCompact_01() {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addIncludeTable(new IncludeTable("table1"));
- engineering.addIncludeTable(new IncludeTable("table2"));
- engineering.addIncludeTable(new IncludeTable("table3"));
-
- engineering.addIncludeColumn(new IncludeColumn("includeColumn"));
-
- FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
- builder.compact();
- assertEquals(
- "ReverseEngineering: \n" +
- " Catalog: null\n" +
- " Schema: null\n" +
- " IncludeTable: table1\n" +
- " IncludeColumn: includeColumn\n" +
- " IncludeTable: table2\n" +
- " IncludeColumn: includeColumn\n" +
- " IncludeTable: table3\n" +
- " IncludeColumn: includeColumn\n", engineering.toString());
- }
-
- @Test
- public void testCompact_02() {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addCatalog(new Catalog("catalogName"));
- engineering.addSchema(new Schema("schemaName01"));
- engineering.addSchema(new Schema("schemaName02"));
-
- engineering.addIncludeTable(new IncludeTable("table1"));
- engineering.addExcludeTable(new ExcludeTable("table2"));
-
- engineering.addIncludeColumn(new IncludeColumn("includeColumn"));
-
- FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
- builder.compact();
- assertEquals(
- "ReverseEngineering: \n" +
- " Catalog: catalogName\n" +
- " Schema: schemaName01\n" +
- " IncludeTable: table1\n" +
- " IncludeColumn: includeColumn\n" +
- " ExcludeTable: table2\n" +
- " Schema: schemaName02\n" +
- " IncludeTable: table1\n" +
- " IncludeColumn: includeColumn\n" +
- " ExcludeTable: table2\n", engineering.toString());
- }
-
- @Test
- public void testCompact_03() {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addCatalog(new Catalog("APP1"));
- engineering.addCatalog(new Catalog("APP2"));
-
- engineering.addExcludeTable(new ExcludeTable("SYS_.*"));
- engineering.addExcludeColumn(new ExcludeColumn("calculated_.*"));
-
- FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
- builder.compact();
- assertEquals(
- "ReverseEngineering: \n" +
- " Catalog: APP1\n" +
- " Schema: null\n" +
- " IncludeTable: null\n" +
- " ExcludeColumn: calculated_.*\n" +
- " ExcludeTable: SYS_.*\n" +
- " Catalog: APP2\n" +
- " Schema: null\n" +
- " IncludeTable: null\n" +
- " ExcludeColumn: calculated_.*\n" +
- " ExcludeTable: SYS_.*\n", engineering.toString());
- }
-
- @Test
- public void testCompact_04() {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addSchema(new Schema("s"));
-
- FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
- builder.compact();
- assertEquals(
- "ReverseEngineering: \n" +
- " Catalog: null\n" +
- " Schema: s\n" +
- " IncludeTable: null\n", engineering.toString());
- }
-
- @Test
- public void testCompact_full() {
- ReverseEngineering engineering = new ReverseEngineering();
- Catalog cat01 = new Catalog("cat_01");
-
- Schema sch01 = new Schema("sch_01");
-
- sch01.addIncludeTable(includeTable("t1", "c11", "c12"));
- sch01.addExcludeTable(new ExcludeTable("t2"));
- sch01.addIncludeProcedure(new IncludeProcedure("p1"));
- sch01.addExcludeProcedure(new ExcludeProcedure("p2"));
- sch01.addIncludeColumn(new IncludeColumn("c_x1"));
- sch01.addExcludeColumn(new ExcludeColumn("c_x2"));
-
- cat01.addSchema(sch01);
-
- cat01.addIncludeTable(includeTable("t3", "c31", "c32"));
- cat01.addExcludeTable(new ExcludeTable("t4"));
- cat01.addIncludeProcedure(new IncludeProcedure("p3"));
- cat01.addExcludeProcedure(new ExcludeProcedure("p4"));
- cat01.addIncludeColumn(new IncludeColumn("c_xx1"));
- cat01.addExcludeColumn(new ExcludeColumn("c_xx2"));
-
- engineering.addCatalog(cat01);
-
- Schema sch02 = new Schema("sch_02");
-
- sch02.addIncludeTable(includeTable("t5", "c51", "c52"));
- sch02.addExcludeTable(new ExcludeTable("t6"));
- sch02.addIncludeProcedure(new IncludeProcedure("p5"));
- sch02.addExcludeProcedure(new ExcludeProcedure("p6"));
- sch02.addIncludeColumn(new IncludeColumn("c2_x1"));
- sch02.addExcludeColumn(new ExcludeColumn("c2_x2"));
-
- engineering.addSchema(sch02);
-
- engineering.addIncludeTable(includeTable("t7", "c71", "c72"));
- engineering.addExcludeTable(new ExcludeTable("t8"));
- engineering.addIncludeProcedure(new IncludeProcedure("p7"));
- engineering.addExcludeProcedure(new ExcludeProcedure("p8"));
- engineering.addIncludeColumn(new IncludeColumn("c_xxx1"));
- engineering.addExcludeColumn(new ExcludeColumn("c_xxx2"));
-
- FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
- assertEquals("Original ReverseEngineering should be",
- "ReverseEngineering: \n" +
- " Catalog: cat_01\n" +
- " Schema: sch_01\n" +
- " IncludeTable: t1\n" +
- " IncludeColumn: c11\n" +
- " ExcludeColumn: c12\n" +
- " ExcludeTable: t2\n" +
- " IncludeColumn: c_x1\n" +
- " ExcludeColumn: c_x2\n" +
- " IncludeProcedure: p1\n" +
- " ExcludeProcedure: p2\n" +
- " IncludeTable: t3\n" +
- " IncludeColumn: c31\n" +
- " ExcludeColumn: c32\n" +
- " ExcludeTable: t4\n" +
- " IncludeColumn: c_xx1\n" +
- " ExcludeColumn: c_xx2\n" +
- " IncludeProcedure: p3\n" +
- " ExcludeProcedure: p4\n" +
- " Schema: sch_02\n" +
- " IncludeTable: t5\n" +
- " IncludeColumn: c51\n" +
- " ExcludeColumn: c52\n" +
- " ExcludeTable: t6\n" +
- " IncludeColumn: c2_x1\n" +
- " ExcludeColumn: c2_x2\n" +
- " IncludeProcedure: p5\n" +
- " ExcludeProcedure: p6\n" +
- " IncludeTable: t7\n" +
- " IncludeColumn: c71\n" +
- " ExcludeColumn: c72\n" +
- " ExcludeTable: t8\n" +
- " IncludeColumn: c_xxx1\n" +
- " ExcludeColumn: c_xxx2\n" +
- " IncludeProcedure: p7\n" +
- " ExcludeProcedure: p8\n", engineering.toString());
-
-
- builder.compact();
- assertEquals(
- "ReverseEngineering: \n" +
- " Catalog: cat_01\n" +
- " Schema: sch_01\n" +
- " IncludeTable: t1\n" +
- " IncludeColumn: c11\n" +
- " IncludeColumn: c_xxx1\n" +
- " IncludeColumn: c_xx1\n" +
- " IncludeColumn: c_x1\n" +
- " ExcludeColumn: c12\n" +
- " ExcludeColumn: c_xxx2\n" +
- " ExcludeColumn: c_xx2\n" +
- " ExcludeColumn: c_x2\n" +
- " IncludeTable: t7\n" +
- " IncludeColumn: c71\n" +
- " IncludeColumn: c_xxx1\n" +
- " ExcludeColumn: c72\n" +
- " ExcludeColumn: c_xxx2\n" +
- " IncludeTable: t3\n" +
- " IncludeColumn: c31\n" +
- " IncludeColumn: c_xxx1\n" +
- " IncludeColumn: c_xx1\n" +
- " ExcludeColumn: c32\n" +
- " ExcludeColumn: c_xxx2\n" +
- " ExcludeColumn: c_xx2\n" +
- " ExcludeTable: t2\n" +
- " ExcludeTable: t8\n" +
- " ExcludeTable: t4\n" +
- " IncludeProcedure: p1\n" +
- " IncludeProcedure: p7\n" +
- " IncludeProcedure: p3\n" +
- " ExcludeProcedure: p2\n" +
- " ExcludeProcedure: p8\n" +
- " ExcludeProcedure: p4\n" +
- " Schema: sch_02\n" +
- " IncludeTable: t5\n" +
- " IncludeColumn: c51\n" +
- " IncludeColumn: c_xxx1\n" +
- " IncludeColumn: c2_x1\n" +
- " ExcludeColumn: c52\n" +
- " ExcludeColumn: c_xxx2\n" +
- " ExcludeColumn: c2_x2\n" +
- " IncludeTable: t7\n" +
- " IncludeColumn: c71\n" +
- " IncludeColumn: c_xxx1\n" +
- " ExcludeColumn: c72\n" +
- " ExcludeColumn: c_xxx2\n" +
- " ExcludeTable: t6\n" +
- " ExcludeTable: t8\n" +
- " IncludeProcedure: p5\n" +
- " IncludeProcedure: p7\n" +
- " ExcludeProcedure: p6\n" +
- " ExcludeProcedure: p8\n", engineering.toString());
- }
-
- protected IncludeTable includeTable(String name, String incCol, String excCol) {
- IncludeTable incTable01 = new IncludeTable(name);
- incTable01.addIncludeColumn(new IncludeColumn(incCol));
- incTable01.addExcludeColumn(new ExcludeColumn(excCol));
- return incTable01;
- }
-
- /*@Test
- public void testEmptyDbEntitiesFilters() throws Exception {
- ReverseEngineering engineering = new ReverseEngineering();
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
- assertEquals("If nothing was configured we have to import everything. Filter %/%/% true/true/true",
- new FiltersConfig(eFilters(path(), TRUE, TRUE, NULL)),
- executions);
- }
-
- @Test
- public void testOnlyOneCatalogDbEntitiesFilters() throws Exception {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addCatalog(new Catalog("catalog_01"));
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
-
- assertEquals(new FiltersConfig(eFilters(path("catalog_01", null), TRUE, TRUE, NULL)),
- executions);
- }
-
- @Test
- public void testCatalogDbEntitiesFilters() throws Exception {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addCatalog(new Catalog("catalog_01"));
- engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_01")));
- engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_02")));
- engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_03")));
- engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
- engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
- engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
- engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
-
- assertEquals(new FiltersConfig(
- eFilters(path("catalog_01", null), TRUE, TRUE, NULL),
- eFilters(path("catalog_02", "schema_01"), TRUE, TRUE, NULL),
- eFilters(path("catalog_02", "schema_02"), TRUE, TRUE, NULL),
- eFilters(path("catalog_02", "schema_03"), TRUE, TRUE, NULL),
- eFilters(path("catalog_03", "schema_01"), TRUE, TRUE, NULL)
- ),
- executions);
- }
-
- @Test
- public void testSchemaDbEntitiesFilters() throws Exception {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addSchema(new Schema("schema_01"));
- engineering.addSchema(new Schema("schema_02"));
- engineering.addSchema(new Schema("schema_03"));
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
-
- assertEquals(new FiltersConfig(
- eFilters(path(null, "schema_01"), TRUE, TRUE, NULL),
- eFilters(path(null, "schema_02"), TRUE, TRUE, NULL),
- eFilters(path(null, "schema_03"), TRUE, TRUE, NULL)
- ),
- executions);
- }
-
- @Test
- public void testFiltersDbEntitiesFilters() throws Exception {
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addIncludeTable(new IncludeTable("IncludeTable"));
- engineering.addIncludeColumn(new IncludeColumn("IncludeColumn"));
- engineering.addIncludeProcedure(new IncludeProcedure("IncludeProcedure"));
- engineering.addExcludeTable(new ExcludeTable("ExcludeTable"));
- engineering.addExcludeColumn(new ExcludeColumn("ExcludeColumn"));
- engineering.addExcludeProcedure(new ExcludeProcedure("ExcludeProcedure"));
-
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
- assertEquals(new FiltersConfig(
- eFilters(path(),
- list(include("IncludeTable"), exclude("ExcludeTable")),
- list(include("IncludeColumn"), exclude("ExcludeColumn")),
- list(include("IncludeProcedure"), exclude("ExcludeProcedure"))),
- eFilters(path(null, null, "IncludeTable"), NULL, TRUE, NULL)
- ),
- executions);
- }
-
- @Test
- public void testComplexConfiguration() throws Exception {
- IncludeTable table = new IncludeTable("table");
- table.addIncludeColumn(new IncludeColumn("column"));
-
- Schema schema = new Schema("schema");
- schema.addIncludeTable(table);
-
- Catalog catalog = new Catalog("catalog");
- catalog.addSchema(schema);
-
- ReverseEngineering engineering = new ReverseEngineering();
- engineering.addCatalog(catalog);
-
- FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
-
- assertEquals(new FiltersConfig(
- eFilters(path("catalog", "schema"), include("table"), NULL, NULL),
- eFilters(path("catalog", "schema", "table"), NULL, include("column"), NULL)
- ),
- executions);
- }
-
- @Test
- public void testAddNull() throws Exception {
- FiltersConfigBuilder builder = new FiltersConfigBuilder(new ReverseEngineering());
- DbPath path = new DbPath();
- builder.add(new EntityFilters(path, NULL, NULL, NULL));
- builder.add(new EntityFilters(path, NULL, NULL, NULL));
- builder.add(new EntityFilters(path, NULL, NULL, NULL));
- builder.add(new EntityFilters(path, NULL, NULL, NULL));
-
- EntityFilters filter = builder.build().filter(path);
- assertFalse(filter.isEmpty());
- }*/
-}
\ No newline at end of file
[2/7] cayenne git commit: CAY-2114 cdbimport: object layer settings
are not respected
Posted by aa...@apache.org.
CAY-2114 cdbimport: object layer settings are not respected
* support for proper flags in EntityMergeSupport
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3a5f31d1
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3a5f31d1
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3a5f31d1
Branch: refs/heads/master
Commit: 3a5f31d17e2a1cd2e108aa1b43ce8cbd468b421c
Parents: 6a1eb0f
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 13:51:07 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 13:51:07 2016 +0300
----------------------------------------------------------------------
.../dbsync/merge/EntityMergeSupport.java | 54 +++++++++-----------
.../cayenne/dbsync/merge/MergerContext.java | 16 +++++-
.../dbsync/merge/EntityMergeSupportIT.java | 2 +-
.../modeler/action/CreateObjEntityAction.java | 4 +-
.../dialog/objentity/EntitySyncController.java | 6 ++-
5 files changed, 46 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
index bf54dcc..c0d46d7 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
@@ -1,22 +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
+/*
+ * 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
+ * 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.
- ****************************************************************/
-
+ * 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.dbsync.merge;
import org.apache.cayenne.dba.TypesMapping;
@@ -65,15 +64,20 @@ public class EntityMergeSupport {
private final ObjectNameGenerator nameGenerator;
private final List<EntityMergeListener> listeners;
- protected boolean removingMeaningfulFKs;
- protected boolean removingMeaningfulPKs;
- protected boolean usingPrimitives;
+ private final boolean removingMeaningfulFKs;
+ private final boolean removingMeaningfulPKs;
+ private final boolean usingPrimitives;
+
+ public EntityMergeSupport(ObjectNameGenerator nameGenerator,
+ boolean removingMeaningfulPKs,
+ boolean removingMeaningfulFKs,
+ boolean usingPrimitives) {
- public EntityMergeSupport(ObjectNameGenerator nameGenerator, boolean removingMeaningfulPKs, boolean removingMeaningfulFKs) {
this.listeners = new ArrayList<>();
this.nameGenerator = nameGenerator;
this.removingMeaningfulFKs = removingMeaningfulFKs;
this.removingMeaningfulPKs = removingMeaningfulPKs;
+ this.usingPrimitives = usingPrimitives;
// will ensure that all created ObjRelationships would have
// default delete rule
@@ -487,12 +491,4 @@ public class EntityMergeSupport {
public boolean isUsingPrimitives() {
return usingPrimitives;
}
-
- /**
- * @param usingPrimitives
- * @since 4.0
- */
- public void setUsingPrimitives(boolean usingPrimitives) {
- this.usingPrimitives = usingPrimitives;
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
index 57eab3e..53c5265 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
@@ -103,6 +103,8 @@ public class MergerContext {
public static class Builder {
private MergerContext context;
+ private ObjectNameGenerator nameGenerator;
+ private boolean usingPrimitives;
private Builder(DataMap dataMap) {
this.context = new MergerContext();
@@ -126,6 +128,12 @@ public class MergerContext {
dataNode(new DataNode());
}
+ if(nameGenerator == null) {
+ nameGenerator = new DefaultObjectNameGenerator();
+ }
+
+ context.entityMergeSupport = new EntityMergeSupport(nameGenerator, true, true, usingPrimitives);
+
return context;
}
@@ -135,8 +143,12 @@ public class MergerContext {
}
public Builder nameGenerator(ObjectNameGenerator nameGenerator) {
- // should the last argument also be a part of the builder?
- context.entityMergeSupport = new EntityMergeSupport(Objects.requireNonNull(nameGenerator), true, true);
+ this.nameGenerator = Objects.requireNonNull(nameGenerator);
+ return this;
+ }
+
+ public Builder usingPrimitives(boolean flag) {
+ this.usingPrimitives = flag;
return this;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
index bc24100..b47ac20 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
@@ -87,7 +87,7 @@ public class EntityMergeSupportIT extends MergeCase {
objEntity2.setDbEntity(dbEntity2);
map.addObjEntity(objEntity2);
- assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true)
+ assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true)
.synchronizeWithDbEntities(Arrays.asList(objEntity1, objEntity2)));
assertNotNull(objEntity1.getAttribute("name"));
assertNotNull(objEntity1.getRelationship("rel1To2"));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index af43556..8602415 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -111,8 +111,8 @@ public class CreateObjEntityAction extends CayenneAction {
dataMap.addObjEntity(entity);
- // perform the merge
- EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true);
+ // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
+ EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true);
merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
merger.synchronizeWithDbEntity(entity);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
index ce2193e..e02080c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
@@ -68,7 +68,8 @@ public class EntitySyncController extends CayenneController {
namingStrategy = NameGeneratorPreferences.defaultNameGenerator();
}
- EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true);
+ // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
+ EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true, true);
// see if we need to remove meaningful attributes...
for (ObjEntity entity : entities) {
@@ -113,7 +114,8 @@ public class EntitySyncController extends CayenneController {
makeCloseableOnEscape();
view.setVisible(true);
- return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0]);
+ // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
+ return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0], true);
}
@Override
[3/7] cayenne git commit: CAY-2114 cdbimport: object layer settings
are not respected
Posted by aa...@apache.org.
CAY-2114 cdbimport: object layer settings are not respected
* will respect 'usePrimitives'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/7884a8fa
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/7884a8fa
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/7884a8fa
Branch: refs/heads/master
Commit: 7884a8fa6caccf94528d77eba84117f0cff4622d
Parents: 3a5f31d
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 13:51:07 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 13:59:37 2016 +0300
----------------------------------------------------------------------
.../java/org/apache/cayenne/dbsync/merge/MergerContext.java | 4 ----
.../apache/cayenne/tools/dbimport/DefaultDbImportAction.java | 7 +++++--
2 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/7884a8fa/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
index 53c5265..cf7f7fb 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
@@ -116,10 +116,6 @@ public class MergerContext {
// init missing defaults ...
- if (context.entityMergeSupport == null) {
- nameGenerator(new DefaultObjectNameGenerator());
- }
-
if (context.delegate == null) {
delegate(new DefaultModelMergeDelegate());
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/7884a8fa/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 6fd4116..6ce01f9 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
@@ -158,7 +158,8 @@ public class DefaultDbImportAction implements DbImportAction {
hasChanges |= applyTokens(config.createMergeDelegate(),
targetDataMap,
log(sort(reverse(mergerTokenFactory, tokens))),
- config.getNameGenerator());
+ config.getNameGenerator(),
+ config.isUsePrimitives());
if (hasChanges) {
saveLoaded(targetDataMap);
@@ -237,7 +238,8 @@ public class DefaultDbImportAction implements DbImportAction {
private boolean applyTokens(ModelMergeDelegate mergeDelegate,
DataMap targetDataMap,
Collection<MergerToken> tokens,
- ObjectNameGenerator nameGenerator) {
+ ObjectNameGenerator nameGenerator,
+ boolean usingPrimitives) {
if (tokens.isEmpty()) {
logger.info("");
@@ -258,6 +260,7 @@ public class DefaultDbImportAction implements DbImportAction {
MergerContext mergerContext = MergerContext.builder(targetDataMap)
.delegate(mergeDelegate)
.nameGenerator(nameGenerator)
+ .usingPrimitives(usingPrimitives)
.build();
for (MergerToken token : tokens) {
[5/7] cayenne git commit: cleanup, refactoring
Posted by aa...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java
new file mode 100644
index 0000000..aac5fe9
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java
@@ -0,0 +1,392 @@
+/*
+ * 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.dbsync.reverse.filters;
+
+import org.apache.cayenne.dbimport.Catalog;
+import org.apache.cayenne.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbimport.ExcludeTable;
+import org.apache.cayenne.dbimport.IncludeColumn;
+import org.apache.cayenne.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbimport.IncludeTable;
+import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbimport.Schema;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class FiltersConfigBuilderTest {
+
+ @Test
+ public void testCompact_01() {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addIncludeTable(new IncludeTable("table1"));
+ engineering.addIncludeTable(new IncludeTable("table2"));
+ engineering.addIncludeTable(new IncludeTable("table3"));
+
+ engineering.addIncludeColumn(new IncludeColumn("includeColumn"));
+
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
+ builder.compact();
+ assertEquals(
+ "ReverseEngineering: \n" +
+ " Catalog: null\n" +
+ " Schema: null\n" +
+ " IncludeTable: table1\n" +
+ " IncludeColumn: includeColumn\n" +
+ " IncludeTable: table2\n" +
+ " IncludeColumn: includeColumn\n" +
+ " IncludeTable: table3\n" +
+ " IncludeColumn: includeColumn\n", engineering.toString());
+ }
+
+ @Test
+ public void testCompact_02() {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addCatalog(new Catalog("catalogName"));
+ engineering.addSchema(new Schema("schemaName01"));
+ engineering.addSchema(new Schema("schemaName02"));
+
+ engineering.addIncludeTable(new IncludeTable("table1"));
+ engineering.addExcludeTable(new ExcludeTable("table2"));
+
+ engineering.addIncludeColumn(new IncludeColumn("includeColumn"));
+
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
+ builder.compact();
+ assertEquals(
+ "ReverseEngineering: \n" +
+ " Catalog: catalogName\n" +
+ " Schema: schemaName01\n" +
+ " IncludeTable: table1\n" +
+ " IncludeColumn: includeColumn\n" +
+ " ExcludeTable: table2\n" +
+ " Schema: schemaName02\n" +
+ " IncludeTable: table1\n" +
+ " IncludeColumn: includeColumn\n" +
+ " ExcludeTable: table2\n", engineering.toString());
+ }
+
+ @Test
+ public void testCompact_03() {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addCatalog(new Catalog("APP1"));
+ engineering.addCatalog(new Catalog("APP2"));
+
+ engineering.addExcludeTable(new ExcludeTable("SYS_.*"));
+ engineering.addExcludeColumn(new ExcludeColumn("calculated_.*"));
+
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
+ builder.compact();
+ assertEquals(
+ "ReverseEngineering: \n" +
+ " Catalog: APP1\n" +
+ " Schema: null\n" +
+ " IncludeTable: null\n" +
+ " ExcludeColumn: calculated_.*\n" +
+ " ExcludeTable: SYS_.*\n" +
+ " Catalog: APP2\n" +
+ " Schema: null\n" +
+ " IncludeTable: null\n" +
+ " ExcludeColumn: calculated_.*\n" +
+ " ExcludeTable: SYS_.*\n", engineering.toString());
+ }
+
+ @Test
+ public void testCompact_04() {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addSchema(new Schema("s"));
+
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
+ builder.compact();
+ assertEquals(
+ "ReverseEngineering: \n" +
+ " Catalog: null\n" +
+ " Schema: s\n" +
+ " IncludeTable: null\n", engineering.toString());
+ }
+
+ @Test
+ public void testCompact_full() {
+ ReverseEngineering engineering = new ReverseEngineering();
+ Catalog cat01 = new Catalog("cat_01");
+
+ Schema sch01 = new Schema("sch_01");
+
+ sch01.addIncludeTable(includeTable("t1", "c11", "c12"));
+ sch01.addExcludeTable(new ExcludeTable("t2"));
+ sch01.addIncludeProcedure(new IncludeProcedure("p1"));
+ sch01.addExcludeProcedure(new ExcludeProcedure("p2"));
+ sch01.addIncludeColumn(new IncludeColumn("c_x1"));
+ sch01.addExcludeColumn(new ExcludeColumn("c_x2"));
+
+ cat01.addSchema(sch01);
+
+ cat01.addIncludeTable(includeTable("t3", "c31", "c32"));
+ cat01.addExcludeTable(new ExcludeTable("t4"));
+ cat01.addIncludeProcedure(new IncludeProcedure("p3"));
+ cat01.addExcludeProcedure(new ExcludeProcedure("p4"));
+ cat01.addIncludeColumn(new IncludeColumn("c_xx1"));
+ cat01.addExcludeColumn(new ExcludeColumn("c_xx2"));
+
+ engineering.addCatalog(cat01);
+
+ Schema sch02 = new Schema("sch_02");
+
+ sch02.addIncludeTable(includeTable("t5", "c51", "c52"));
+ sch02.addExcludeTable(new ExcludeTable("t6"));
+ sch02.addIncludeProcedure(new IncludeProcedure("p5"));
+ sch02.addExcludeProcedure(new ExcludeProcedure("p6"));
+ sch02.addIncludeColumn(new IncludeColumn("c2_x1"));
+ sch02.addExcludeColumn(new ExcludeColumn("c2_x2"));
+
+ engineering.addSchema(sch02);
+
+ engineering.addIncludeTable(includeTable("t7", "c71", "c72"));
+ engineering.addExcludeTable(new ExcludeTable("t8"));
+ engineering.addIncludeProcedure(new IncludeProcedure("p7"));
+ engineering.addExcludeProcedure(new ExcludeProcedure("p8"));
+ engineering.addIncludeColumn(new IncludeColumn("c_xxx1"));
+ engineering.addExcludeColumn(new ExcludeColumn("c_xxx2"));
+
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(engineering);
+ assertEquals("Original ReverseEngineering should be",
+ "ReverseEngineering: \n" +
+ " Catalog: cat_01\n" +
+ " Schema: sch_01\n" +
+ " IncludeTable: t1\n" +
+ " IncludeColumn: c11\n" +
+ " ExcludeColumn: c12\n" +
+ " ExcludeTable: t2\n" +
+ " IncludeColumn: c_x1\n" +
+ " ExcludeColumn: c_x2\n" +
+ " IncludeProcedure: p1\n" +
+ " ExcludeProcedure: p2\n" +
+ " IncludeTable: t3\n" +
+ " IncludeColumn: c31\n" +
+ " ExcludeColumn: c32\n" +
+ " ExcludeTable: t4\n" +
+ " IncludeColumn: c_xx1\n" +
+ " ExcludeColumn: c_xx2\n" +
+ " IncludeProcedure: p3\n" +
+ " ExcludeProcedure: p4\n" +
+ " Schema: sch_02\n" +
+ " IncludeTable: t5\n" +
+ " IncludeColumn: c51\n" +
+ " ExcludeColumn: c52\n" +
+ " ExcludeTable: t6\n" +
+ " IncludeColumn: c2_x1\n" +
+ " ExcludeColumn: c2_x2\n" +
+ " IncludeProcedure: p5\n" +
+ " ExcludeProcedure: p6\n" +
+ " IncludeTable: t7\n" +
+ " IncludeColumn: c71\n" +
+ " ExcludeColumn: c72\n" +
+ " ExcludeTable: t8\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " IncludeProcedure: p7\n" +
+ " ExcludeProcedure: p8\n", engineering.toString());
+
+
+ builder.compact();
+ assertEquals(
+ "ReverseEngineering: \n" +
+ " Catalog: cat_01\n" +
+ " Schema: sch_01\n" +
+ " IncludeTable: t1\n" +
+ " IncludeColumn: c11\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " IncludeColumn: c_xx1\n" +
+ " IncludeColumn: c_x1\n" +
+ " ExcludeColumn: c12\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " ExcludeColumn: c_xx2\n" +
+ " ExcludeColumn: c_x2\n" +
+ " IncludeTable: t7\n" +
+ " IncludeColumn: c71\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " ExcludeColumn: c72\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " IncludeTable: t3\n" +
+ " IncludeColumn: c31\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " IncludeColumn: c_xx1\n" +
+ " ExcludeColumn: c32\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " ExcludeColumn: c_xx2\n" +
+ " ExcludeTable: t2\n" +
+ " ExcludeTable: t8\n" +
+ " ExcludeTable: t4\n" +
+ " IncludeProcedure: p1\n" +
+ " IncludeProcedure: p7\n" +
+ " IncludeProcedure: p3\n" +
+ " ExcludeProcedure: p2\n" +
+ " ExcludeProcedure: p8\n" +
+ " ExcludeProcedure: p4\n" +
+ " Schema: sch_02\n" +
+ " IncludeTable: t5\n" +
+ " IncludeColumn: c51\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " IncludeColumn: c2_x1\n" +
+ " ExcludeColumn: c52\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " ExcludeColumn: c2_x2\n" +
+ " IncludeTable: t7\n" +
+ " IncludeColumn: c71\n" +
+ " IncludeColumn: c_xxx1\n" +
+ " ExcludeColumn: c72\n" +
+ " ExcludeColumn: c_xxx2\n" +
+ " ExcludeTable: t6\n" +
+ " ExcludeTable: t8\n" +
+ " IncludeProcedure: p5\n" +
+ " IncludeProcedure: p7\n" +
+ " ExcludeProcedure: p6\n" +
+ " ExcludeProcedure: p8\n", engineering.toString());
+ }
+
+ protected IncludeTable includeTable(String name, String incCol, String excCol) {
+ IncludeTable incTable01 = new IncludeTable(name);
+ incTable01.addIncludeColumn(new IncludeColumn(incCol));
+ incTable01.addExcludeColumn(new ExcludeColumn(excCol));
+ return incTable01;
+ }
+
+ /*@Test
+ public void testEmptyDbEntitiesFilters() throws Exception {
+ ReverseEngineering engineering = new ReverseEngineering();
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+ assertEquals("If nothing was configured we have to import everything. Filter %/%/% true/true/true",
+ new FiltersConfig(eFilters(path(), TRUE, TRUE, NULL)),
+ executions);
+ }
+
+ @Test
+ public void testOnlyOneCatalogDbEntitiesFilters() throws Exception {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addCatalog(new Catalog("catalog_01"));
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+
+ assertEquals(new FiltersConfig(eFilters(path("catalog_01", null), TRUE, TRUE, NULL)),
+ executions);
+ }
+
+ @Test
+ public void testCatalogDbEntitiesFilters() throws Exception {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addCatalog(new Catalog("catalog_01"));
+ engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_01")));
+ engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_02")));
+ engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_03")));
+ engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
+ engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
+ engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
+ engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01")));
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+
+ assertEquals(new FiltersConfig(
+ eFilters(path("catalog_01", null), TRUE, TRUE, NULL),
+ eFilters(path("catalog_02", "schema_01"), TRUE, TRUE, NULL),
+ eFilters(path("catalog_02", "schema_02"), TRUE, TRUE, NULL),
+ eFilters(path("catalog_02", "schema_03"), TRUE, TRUE, NULL),
+ eFilters(path("catalog_03", "schema_01"), TRUE, TRUE, NULL)
+ ),
+ executions);
+ }
+
+ @Test
+ public void testSchemaDbEntitiesFilters() throws Exception {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addSchema(new Schema("schema_01"));
+ engineering.addSchema(new Schema("schema_02"));
+ engineering.addSchema(new Schema("schema_03"));
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+
+ assertEquals(new FiltersConfig(
+ eFilters(path(null, "schema_01"), TRUE, TRUE, NULL),
+ eFilters(path(null, "schema_02"), TRUE, TRUE, NULL),
+ eFilters(path(null, "schema_03"), TRUE, TRUE, NULL)
+ ),
+ executions);
+ }
+
+ @Test
+ public void testFiltersDbEntitiesFilters() throws Exception {
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addIncludeTable(new IncludeTable("IncludeTable"));
+ engineering.addIncludeColumn(new IncludeColumn("IncludeColumn"));
+ engineering.addIncludeProcedure(new IncludeProcedure("IncludeProcedure"));
+ engineering.addExcludeTable(new ExcludeTable("ExcludeTable"));
+ engineering.addExcludeColumn(new ExcludeColumn("ExcludeColumn"));
+ engineering.addExcludeProcedure(new ExcludeProcedure("ExcludeProcedure"));
+
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+ assertEquals(new FiltersConfig(
+ eFilters(path(),
+ list(include("IncludeTable"), exclude("ExcludeTable")),
+ list(include("IncludeColumn"), exclude("ExcludeColumn")),
+ list(include("IncludeProcedure"), exclude("ExcludeProcedure"))),
+ eFilters(path(null, null, "IncludeTable"), NULL, TRUE, NULL)
+ ),
+ executions);
+ }
+
+ @Test
+ public void testComplexConfiguration() throws Exception {
+ IncludeTable table = new IncludeTable("table");
+ table.addIncludeColumn(new IncludeColumn("column"));
+
+ Schema schema = new Schema("schema");
+ schema.addIncludeTable(table);
+
+ Catalog catalog = new Catalog("catalog");
+ catalog.addSchema(schema);
+
+ ReverseEngineering engineering = new ReverseEngineering();
+ engineering.addCatalog(catalog);
+
+ FiltersConfig executions = new FiltersConfigBuilder(engineering).build();
+
+ assertEquals(new FiltersConfig(
+ eFilters(path("catalog", "schema"), include("table"), NULL, NULL),
+ eFilters(path("catalog", "schema", "table"), NULL, include("column"), NULL)
+ ),
+ executions);
+ }
+
+ @Test
+ public void testAddNull() throws Exception {
+ FiltersConfigBuilder builder = new FiltersConfigBuilder(new ReverseEngineering());
+ DbPath path = new DbPath();
+ builder.add(new EntityFilters(path, NULL, NULL, NULL));
+ builder.add(new EntityFilters(path, NULL, NULL, NULL));
+ builder.add(new EntityFilters(path, NULL, NULL, NULL));
+ builder.add(new EntityFilters(path, NULL, NULL, NULL));
+
+ EntityFilters filter = builder.build().filter(path);
+ assertFalse(filter.isEmpty());
+ }*/
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilterTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilterTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilterTest.java
index 73739ec..5a44442 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilterTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/PatternFilterTest.java
@@ -27,17 +27,17 @@ public class PatternFilterTest extends TestCase {
.include("aaa")
.include("bbb");
- assertTrue(filter.isInclude("aaa"));
- assertTrue(filter.isInclude("bbb"));
- assertFalse(filter.isInclude("aaaa"));
- assertFalse(filter.isInclude("aa"));
- assertFalse(filter.isInclude("abb"));
+ assertTrue(filter.isIncluded("aaa"));
+ assertTrue(filter.isIncluded("bbb"));
+ assertFalse(filter.isIncluded("aaaa"));
+ assertFalse(filter.isIncluded("aa"));
+ assertFalse(filter.isIncluded("abb"));
filter = new PatternFilter().include("^v_.*$");
- assertTrue(filter.isInclude("v_new_view"));
- assertFalse(filter.isInclude("new_view"));
- assertFalse(filter.isInclude("view"));
- assertFalse(filter.isInclude("girl"));
+ assertTrue(filter.isIncluded("v_new_view"));
+ assertFalse(filter.isIncluded("new_view"));
+ assertFalse(filter.isIncluded("view"));
+ assertFalse(filter.isIncluded("girl"));
}
public void testExclude() throws Exception {
@@ -45,11 +45,11 @@ public class PatternFilterTest extends TestCase {
.exclude("aaa")
.exclude("bbb");
- assertFalse(filter.isInclude("aaa"));
- assertFalse(filter.isInclude("bbb"));
- assertTrue(filter.isInclude("aaaa"));
- assertTrue(filter.isInclude("aa"));
- assertTrue(filter.isInclude("abb"));
+ assertFalse(filter.isIncluded("aaa"));
+ assertFalse(filter.isIncluded("bbb"));
+ assertTrue(filter.isIncluded("aaaa"));
+ assertTrue(filter.isIncluded("aa"));
+ assertTrue(filter.isIncluded("abb"));
}
public void testIncludeExclude() throws Exception {
@@ -57,22 +57,22 @@ public class PatternFilterTest extends TestCase {
.include("aa.*")
.exclude("aaa");
- assertFalse(filter.isInclude("aaa"));
- assertFalse(filter.isInclude("bbb"));
- assertTrue(filter.isInclude("aaaa"));
- assertTrue(filter.isInclude("aa"));
- assertFalse(filter.isInclude("abb"));
+ assertFalse(filter.isIncluded("aaa"));
+ assertFalse(filter.isIncluded("bbb"));
+ assertTrue(filter.isIncluded("aaaa"));
+ assertTrue(filter.isIncluded("aa"));
+ assertFalse(filter.isIncluded("abb"));
}
public void testIncludeAllFilter() {
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude("qwe"));
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude(""));
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude(null));
+ assertTrue(PatternFilter.INCLUDE_EVERYTHING.isIncluded("qwe"));
+ assertTrue(PatternFilter.INCLUDE_EVERYTHING.isIncluded(""));
+ assertTrue(PatternFilter.INCLUDE_EVERYTHING.isIncluded(null));
}
public void testIncludeNoneFilter() {
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude("qwe"));
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude(""));
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude(null));
+ assertFalse(PatternFilter.INCLUDE_NOTHING.isIncluded("qwe"));
+ assertFalse(PatternFilter.INCLUDE_NOTHING.isIncluded(""));
+ assertFalse(PatternFilter.INCLUDE_NOTHING.isIncluded(null));
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index e8b6b76..c8d43e4 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.gen;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
index 3e98829..de001bd 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.tools;
import org.apache.cayenne.access.DataPort;
import org.apache.cayenne.access.DataPortDelegate;
-import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.query.Query;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
index 08a39df..f32b1d2 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.cayenne.tools;
-import org.apache.cayenne.dbsync.reverse.NameFilter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 6edcd6c..d57b350 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.tools;
import foundrylogic.vpp.VPPConfig;
-import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/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 921db3b..10c3d13 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
@@ -36,7 +36,7 @@ import org.apache.cayenne.dbimport.IncludeTable;
import org.apache.cayenne.dbimport.ReverseEngineering;
import org.apache.cayenne.dbimport.Schema;
import org.apache.cayenne.dbsync.CayenneDbSyncModule;
-import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.map.DataMap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
deleted file mode 100644
index 3482843..0000000
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************
- * 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.tools;
-
-import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
-import org.junit.Test;
-
-import static org.apache.cayenne.dbsync.reverse.NamePatternMatcher.replaceWildcardInStringWithString;
-import static org.junit.Assert.assertEquals;
-
-public class NamePatternMatcherTest {
-
- /**
- * Test pattern expansion.
- */
- @Test
- public void testReplaceWildcardInStringWithString() throws Exception {
- assertEquals(null, replaceWildcardInStringWithString("*", null, "Entity"));
- assertEquals("*.java", replaceWildcardInStringWithString(null, "*.java", "Entity"));
- assertEquals("Entity.java", replaceWildcardInStringWithString("*", "*.java", "Entity"));
- assertEquals("java.Entity", replaceWildcardInStringWithString("*", "java.*", "Entity"));
- assertEquals("Entity.Entity", replaceWildcardInStringWithString("*", "*.*", "Entity"));
- assertEquals("EntityEntity", replaceWildcardInStringWithString("*", "**", "Entity"));
- assertEquals("EditEntityReport.vm", replaceWildcardInStringWithString("*", "Edit*Report.vm", "Entity"));
- assertEquals("Entity", replaceWildcardInStringWithString("*", "*", "Entity"));
- }
-
- /**
- * Test tokenizing
- */
- @Test
- public void testTokenizer() {
-
- String[] nullFilters = NamePatternMatcher.tokenizePattern(null);
- assertEquals(0, nullFilters.length);
-
- String[] filters = NamePatternMatcher.tokenizePattern("billing_*,user?");
- assertEquals(2, filters.length);
- assertEquals("^billing_.*$", filters[0]);
- assertEquals("^user.?$", filters[1]);
- }
-
- /**
- * Test tokenizing
- */
- @Test
- public void testTokenizerEntities() {
-
- String includePattern = "Organization,SecGroup,SecIndividual";
-
- String[] filters = NamePatternMatcher.tokenizePattern(includePattern);
- assertEquals(3, filters.length);
- assertEquals("^Organization$", filters[0]);
- assertEquals("^SecGroup$", filters[1]);
- assertEquals("^SecIndividual$", filters[2]);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index 5a3bbfb..58ef41b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbimport.ReverseEngineering;
import org.apache.cayenne.dbsync.CayenneDbSyncModule;
import org.apache.cayenne.dbsync.naming.NameBuilder;
-import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DefaultDbLoaderDelegate;
import org.apache.cayenne.di.DIBootstrap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringController.java
index cbce494..38ac5f0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringController.java
@@ -22,7 +22,7 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbimport.ReverseEngineering;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
-import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.ClassLoadingService;
import org.apache.cayenne.modeler.ProjectController;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index ec990cc..4ef5013 100644
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.tools;
-import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ab79480/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 4714b97..d2123ce 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
@@ -27,7 +27,7 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbimport.DefaultReverseEngineeringLoader;
import org.apache.cayenne.dbimport.ReverseEngineering;
import org.apache.cayenne.dbsync.CayenneDbSyncModule;
-import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.map.DataMap;
[7/7] cayenne git commit: CAY-2114 cdbimport: object layer settings
are not respected
Posted by aa...@apache.org.
CAY-2114 cdbimport: object layer settings are not respected
* will respect meaningful PK filter
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/1455622f
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/1455622f
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/1455622f
Branch: refs/heads/master
Commit: 1455622fad83db8d181e2dfb0ba5f6efeeeae37e
Parents: 0ab7948
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 14:16:48 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 15:45:16 2016 +0300
----------------------------------------------------------------------
.../dbsync/filter/NamePatternMatcher.java | 8 ++++
.../dbsync/merge/EntityMergeSupport.java | 47 +++++++-------------
.../cayenne/dbsync/merge/MergerContext.java | 14 +++++-
.../dbsync/merge/EntityMergeSupportIT.java | 3 +-
.../tools/dbimport/DbImportConfiguration.java | 21 ++++++++-
.../tools/dbimport/DefaultDbImportAction.java | 4 ++
.../dbimport/DefaultDbImportActionTest.java | 2 +
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
.../modeler/action/CreateObjEntityAction.java | 9 ++--
.../modeler/action/DbEntitySyncAction.java | 2 +
.../dialog/objentity/EntitySyncController.java | 9 ++--
11 files changed, 77 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
index 211b62e..1e3757a 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
@@ -35,6 +35,14 @@ import java.util.regex.PatternSyntaxException;
*/
public class NamePatternMatcher implements NameFilter {
+ public static final NameFilter EXCLUDE_ALL = new NameFilter() {
+
+ @Override
+ public boolean isIncluded(String obj) {
+ return false;
+ }
+ };
+
private static final String[] EMPTY_ARRAY = new String[0];
private static final Pattern COMMA = Pattern.compile(",");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
index c0d46d7..978ba41 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge;
import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.dbsync.filter.NameFilter;
import org.apache.cayenne.dbsync.naming.NameBuilder;
import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.map.DataMap;
@@ -65,18 +66,18 @@ public class EntityMergeSupport {
private final ObjectNameGenerator nameGenerator;
private final List<EntityMergeListener> listeners;
private final boolean removingMeaningfulFKs;
- private final boolean removingMeaningfulPKs;
+ private final NameFilter meaningfulPKsFilter;
private final boolean usingPrimitives;
public EntityMergeSupport(ObjectNameGenerator nameGenerator,
- boolean removingMeaningfulPKs,
+ NameFilter meaningfulPKsFilter,
boolean removingMeaningfulFKs,
boolean usingPrimitives) {
this.listeners = new ArrayList<>();
this.nameGenerator = nameGenerator;
this.removingMeaningfulFKs = removingMeaningfulFKs;
- this.removingMeaningfulPKs = removingMeaningfulPKs;
+ this.meaningfulPKsFilter = meaningfulPKsFilter;
this.usingPrimitives = usingPrimitives;
// will ensure that all created ObjRelationships would have
@@ -88,9 +89,6 @@ public class EntityMergeSupport {
return removingMeaningfulFKs;
}
- public boolean isRemovingMeaningfulPKs() {
- return removingMeaningfulPKs;
- }
/**
* Updates each one of the collection of ObjEntities, adding attributes and
@@ -110,20 +108,6 @@ public class EntityMergeSupport {
}
/**
- * @since 4.0
- */
- protected boolean removePK(DbEntity dbEntity) {
- return removingMeaningfulPKs;
- }
-
- /**
- * @since 4.0
- */
- protected boolean removeFK(DbEntity dbEntity) {
- return removingMeaningfulFKs;
- }
-
- /**
* Updates ObjEntity attributes and relationships based on the current state
* of its DbEntity.
*
@@ -142,7 +126,7 @@ public class EntityMergeSupport {
boolean changed = false;
- if (removeFK(dbEntity)) {
+ if (removingMeaningfulFKs) {
changed = getRidOfAttributesThatAreNowSrcAttributesForRelationships(entity);
}
@@ -158,7 +142,7 @@ public class EntityMergeSupport {
public boolean synchronizeOnDbAttributeAdded(ObjEntity entity, DbAttribute dbAttribute) {
Collection<DbRelationship> incomingRels = getIncomingRelationships(dbAttribute.getEntity());
- if (isMissingFromObjEntity(entity, dbAttribute, incomingRels)) {
+ if (shouldAddToObjEntity(entity, dbAttribute, incomingRels)) {
addMissingAttribute(entity, dbAttribute);
return true;
}
@@ -171,7 +155,7 @@ public class EntityMergeSupport {
*/
public boolean synchronizeOnDbRelationshipAdded(ObjEntity entity, DbRelationship dbRelationship) {
- if (isMissingFromObjEntity(entity, dbRelationship)) {
+ if (shouldAddToObjEntity(entity, dbRelationship)) {
addMissingRelationship(entity, dbRelationship);
}
@@ -336,7 +320,7 @@ public class EntityMergeSupport {
for (DbAttribute dba : dbEntity.getAttributes()) {
- if (isMissingFromObjEntity(objEntity, dba, incomingRels)) {
+ if (shouldAddToObjEntity(objEntity, dba, incomingRels)) {
missing.add(dba);
}
}
@@ -344,14 +328,15 @@ public class EntityMergeSupport {
return missing;
}
- protected boolean isMissingFromObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) {
+ protected boolean shouldAddToObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) {
if (dbAttribute.getName() == null || entity.getAttributeForDbAttribute(dbAttribute) != null) {
return false;
}
- boolean removeMeaningfulPKs = removePK(dbAttribute.getEntity());
- if (removeMeaningfulPKs && dbAttribute.isPrimaryKey()) {
+ boolean addMeaningfulPK = meaningfulPKsFilter.isIncluded(entity.getDbEntityName());
+
+ if (dbAttribute.isPrimaryKey() && !addMeaningfulPK) {
return false;
}
@@ -368,7 +353,7 @@ public class EntityMergeSupport {
}
}
- if (!removeMeaningfulPKs) {
+ if (addMeaningfulPK) {
if (!dbAttribute.isPrimaryKey() && isFK) {
return false;
}
@@ -390,7 +375,7 @@ public class EntityMergeSupport {
}
}
- if (!removeMeaningfulPKs) {
+ if (addMeaningfulPK) {
if (!dbAttribute.isPrimaryKey() && isFK) {
return false;
}
@@ -403,7 +388,7 @@ public class EntityMergeSupport {
return true;
}
- protected boolean isMissingFromObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
+ protected boolean shouldAddToObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
return dbRelationship.getName() != null && entity.getRelationshipForDbRelationship(dbRelationship) == null;
}
@@ -431,7 +416,7 @@ public class EntityMergeSupport {
protected List<DbRelationship> getRelationshipsToAdd(ObjEntity objEntity) {
List<DbRelationship> missing = new ArrayList<DbRelationship>();
for (DbRelationship dbRel : objEntity.getDbEntity().getRelationships()) {
- if (isMissingFromObjEntity(objEntity, dbRel)) {
+ if (shouldAddToObjEntity(objEntity, dbRel)) {
missing.add(dbRel);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
index cf7f7fb..1ae9337 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
@@ -20,6 +20,8 @@ package org.apache.cayenne.dbsync.merge;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.map.DataMap;
@@ -105,6 +107,7 @@ public class MergerContext {
private MergerContext context;
private ObjectNameGenerator nameGenerator;
private boolean usingPrimitives;
+ private NameFilter meaningfulPKsFilter;
private Builder(DataMap dataMap) {
this.context = new MergerContext();
@@ -128,7 +131,11 @@ public class MergerContext {
nameGenerator = new DefaultObjectNameGenerator();
}
- context.entityMergeSupport = new EntityMergeSupport(nameGenerator, true, true, usingPrimitives);
+ if(meaningfulPKsFilter == null) {
+ meaningfulPKsFilter = NamePatternMatcher.EXCLUDE_ALL;
+ }
+
+ context.entityMergeSupport = new EntityMergeSupport(nameGenerator, meaningfulPKsFilter, true, usingPrimitives);
return context;
}
@@ -153,6 +160,11 @@ public class MergerContext {
return this;
}
+ public Builder meaningfulPKFilter(NameFilter filter) {
+ this.meaningfulPKsFilter = Objects.requireNonNull(filter);
+ return this;
+ }
+
public Builder syntheticDataNode(DataSource dataSource, DbAdapter adapter) {
DataNode dataNode = new DataNode();
dataNode.setDataSource(dataSource);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
index b47ac20..9f6e002 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -87,7 +88,7 @@ public class EntityMergeSupportIT extends MergeCase {
objEntity2.setDbEntity(dbEntity2);
map.addObjEntity(objEntity2);
- assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true)
+ assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, true)
.synchronizeWithDbEntities(Arrays.asList(objEntity1, objEntity2)));
assertNotNull(objEntity1.getAttribute("name"));
assertNotNull(objEntity1.getRelationship("rel1To2"));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 931df78..2b62b06 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
@@ -22,6 +22,8 @@ import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.DefaultModelMergeDelegate;
import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
@@ -43,6 +45,7 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.util.Collections;
+import java.util.regex.Pattern;
/**
* @since 4.0
@@ -140,6 +143,22 @@ public class DbImportConfiguration {
return new DbLoader(connection, adapter, loaderDelegate, getNameGenerator());
}
+ public NameFilter getMeaningfulPKFilter() {
+
+ if (meaningfulPkTables == null) {
+ return NamePatternMatcher.EXCLUDE_ALL;
+ }
+
+ // TODO: this filter can't handle table names with comma in them
+ String[] patternStrings = meaningfulPkTables.split(",");
+ Pattern[] patterns = new Pattern[patternStrings.length];
+ for (int i = 0; i < patterns.length; i++) {
+ patterns[i] = Pattern.compile(patternStrings[i]);
+ }
+
+ return new NamePatternMatcher(patterns, new Pattern[0]);
+ }
+
public ObjectNameGenerator getNameGenerator() {
// TODO: load via DI AdhocObjectFactory
@@ -205,7 +224,7 @@ public class DbImportConfiguration {
DataMap dataMap = new DataMap();
initializeDataMap(dataMap);
- return dataMap;
+ return dataMap;
}
protected void initializeDataMap(DataMap dataMap) throws MalformedURLException {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 6ce01f9..df548c3 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
@@ -23,6 +23,7 @@ import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
import org.apache.cayenne.dbsync.merge.AbstractToModelToken;
import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
import org.apache.cayenne.dbsync.merge.DbMerger;
@@ -159,6 +160,7 @@ public class DefaultDbImportAction implements DbImportAction {
targetDataMap,
log(sort(reverse(mergerTokenFactory, tokens))),
config.getNameGenerator(),
+ config.getMeaningfulPKFilter(),
config.isUsePrimitives());
if (hasChanges) {
@@ -239,6 +241,7 @@ public class DefaultDbImportAction implements DbImportAction {
DataMap targetDataMap,
Collection<MergerToken> tokens,
ObjectNameGenerator nameGenerator,
+ NameFilter meaningfulPKFilter,
boolean usingPrimitives) {
if (tokens.isEmpty()) {
@@ -261,6 +264,7 @@ public class DefaultDbImportAction implements DbImportAction {
.delegate(mergeDelegate)
.nameGenerator(nameGenerator)
.usingPrimitives(usingPrimitives)
+ .meaningfulPKFilter(meaningfulPKFilter)
.build();
for (MergerToken token : tokens) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
index cbe8156..1bf48c7 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.CayenneDbSyncModule;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.AddColumnToDb;
import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
import org.apache.cayenne.dbsync.merge.CreateTableToDb;
@@ -171,6 +172,7 @@ public class DefaultDbImportActionTest {
when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate());
when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration());
when(params.getNameGenerator()).thenReturn(new DefaultObjectNameGenerator());
+ when(params.getMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
final boolean[] haveWeTriedToSave = {false};
DefaultDbImportAction action = buildDbImportAction(new FileProjectSaver() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 64b3e71..40a2cb7 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -32,6 +32,7 @@ CAY-2107 cayenne-crypto: Lazy initialization of crypto subsystem
CAY-2111 Unbind transaction object from the current thread for iterated queries
CAY-2112 Expose callback for "performInTransaction"
CAY-2113 cdbimport: Reverse-engineering reinstates previously ignored columns
+CAY-2114 cdbimport: object layer settings are not respected
CAY-2115 DbLoader - allow loading DataMap without Obj layer
CAY-2116 Split schema synchronization code in a separate module
CAY-2118 cdbimport: drop support for the old style of table filtering
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index 8602415..eb084fc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -20,9 +20,10 @@ package org.apache.cayenne.modeler.action;
import org.apache.cayenne.configuration.ConfigurationNode;
import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
-import org.apache.cayenne.dbsync.naming.NameBuilder;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NameBuilder;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
@@ -82,9 +83,7 @@ public class CreateObjEntityAction extends CayenneAction {
DataMap dataMap = mediator.getCurrentDataMap();
ObjEntity entity = new ObjEntity();
- entity.setName(NameBuilder
- .builder(entity, dataMap)
- .name());
+ entity.setName(NameBuilder.builder(entity, dataMap).name());
// init defaults
entity.setSuperClassName(dataMap.getDefaultSuperclass());
@@ -112,7 +111,7 @@ public class CreateObjEntityAction extends CayenneAction {
dataMap.addObjEntity(entity);
// TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
- EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true);
+ EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, true);
merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
merger.synchronizeWithDbEntity(entity);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
index 5a5f346..b8495df 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
@@ -89,6 +89,8 @@ public class DbEntitySyncAction extends CayenneAction {
merger.addEntityMergeListener(listener);
+ // TODO: addition or removal of model objects should be reflected in listener callbacks...
+ // we should not be trying to introspect the merger
if (merger.isRemovingMeaningfulFKs()) {
undoableEdit.addEdit(undoableEdit.new MeaningfulFKsUndoableEdit(entity, merger
.getMeaningfulFKs(entity)));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
index e02080c..f13a5b9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
@@ -19,10 +19,11 @@
package org.apache.cayenne.modeler.dialog.objentity;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
+import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
@@ -69,7 +70,7 @@ public class EntitySyncController extends CayenneController {
}
// TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
- EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true, true);
+ EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, NamePatternMatcher.EXCLUDE_ALL, true, true);
// see if we need to remove meaningful attributes...
for (ObjEntity entity : entities) {
@@ -114,8 +115,8 @@ public class EntitySyncController extends CayenneController {
makeCloseableOnEscape();
view.setVisible(true);
- // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
- return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0], true);
+ // TODO: Modeler-controlled defaults for all the hardcoded flags here.
+ return cancel[0] ? null : new EntityMergeSupport(namingStrategy, NamePatternMatcher.EXCLUDE_ALL, removeFKs[0], true);
}
@Override