CAY-2130 Stripping common name prefixes on reverse engineering * unit tests
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/88613547 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/88613547 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/88613547 Branch: refs/heads/master Commit: 88613547fc7bdabfc24f77632ca44f6bd68b4274 Parents: f3a4a58 Author: Andrus Adamchik <[email protected]> Authored: Tue Nov 8 11:37:00 2016 +0300 Committer: Andrus Adamchik <[email protected]> Committed: Tue Nov 8 13:46:50 2016 +0300 ---------------------------------------------------------------------- .../cayenne/dbsync/naming/PatternStemmer.java | 20 +++++-- .../dbsync/naming/PatternStemmerTest.java | 61 ++++++++++++++++++++ .../tools/dbimport/DbImportConfiguration.java | 4 +- docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 + .../testCustomObjectLayerSettings-pom.xml | 1 + ...testCustomObjectLayerSettings.map.xml-result | 6 ++ .../dbimport/testCustomObjectLayerSettings.sql | 5 ++ 7 files changed, 90 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java index 547d4db..0db0e3d 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java @@ -18,21 +18,29 @@ */ package org.apache.cayenne.dbsync.naming; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * @since 4.0 */ public class PatternStemmer implements DbEntityNameStemmer { - private String stripPattern; + private Pattern pattern; + + public PatternStemmer(String stripPattern, boolean caseSensitive) { + + int flags = 0; + if (!caseSensitive) { + flags = flags | Pattern.CASE_INSENSITIVE; + } - public PatternStemmer(String stripPattern) { - this.stripPattern = stripPattern; + this.pattern = Pattern.compile(stripPattern, flags); } @Override public String stem(String dbEntityName) { - throw new UnsupportedOperationException("TODO"); + Matcher m = pattern.matcher(dbEntityName); + return m.replaceAll(""); } - - } http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java new file mode 100644 index 0000000..f605745 --- /dev/null +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java @@ -0,0 +1,61 @@ +/* + * 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.naming; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class PatternStemmerTest { + + @Test + public void testStemNoMatch() { + assertEquals("xyzabc", new PatternStemmer("^pre", false).stem("xyzabc")); + } + + @Test + public void testStemCaseSensitive() { + assertEquals("PREUPPERCASE", new PatternStemmer("^pre", true).stem("PREUPPERCASE")); + assertEquals("UPPERCASE", new PatternStemmer("^pre", true).stem("preUPPERCASE")); + } + + @Test + public void testStemCaseInsensitive() { + assertEquals("lowercase", new PatternStemmer("^pre", false).stem("prelowercase")); + assertEquals("UPPERCASE", new PatternStemmer("^pre", false).stem("PREUPPERCASE")); + } + + @Test + public void testStemHead() { + assertEquals("name", new PatternStemmer("^strip_", false).stem("strip_name")); + assertEquals("strip_name", new PatternStemmer("^strip_", false).stem("strip_strip_name")); + } + + @Test + public void testStemTail() { + assertEquals("name", new PatternStemmer("_strip$", false).stem("name_strip")); + assertEquals("name_strip", new PatternStemmer("_strip$", false).stem("name_strip_strip")); + } + + @Test + public void testStemMiddle() { + assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_end")); + assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_strip_end")); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/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 63dad3a..9bf4ed1 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 @@ -160,7 +160,7 @@ public class DbImportConfiguration { } public ObjectNameGenerator createNameGenerator() { - + // TODO: not a singleton; called from different places... // custom name generator @@ -181,7 +181,7 @@ public class DbImportConfiguration { protected DbEntityNameStemmer createStemmer() { return (stripFromTableNames == null || stripFromTableNames.length() == 0) ? NoStemStemmer.getInstance() - : new PatternStemmer(stripFromTableNames); + : new PatternStemmer(stripFromTableNames, false); } public String getDriver() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/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 bc626be..bb9c6f3 100644 --- a/docs/doc/src/main/resources/RELEASE-NOTES.txt +++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt @@ -37,6 +37,7 @@ 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 CAY-2129 Modeler: reengineer dialog improvements +CAY-2130 Stripping common name prefixes on reverse engineering CAY-2132 Adding SybaseSelectTranslator to support TOP/DISTINCT TOP in limited queries CAY-2133 ObjectNameGenerator refactoring - unifying relationship name generation http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/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 index b57d42e..47ca90d 100644 --- 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 @@ -34,6 +34,7 @@ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url> <meaningfulPkTables>^*$</meaningfulPkTables> <usePrimitives>true</usePrimitives> + <stripFromTableNames>^xyz_</stripFromTableNames> <reverseEngineering> <schema> http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/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 index aa301db..9f36c0f 100644 --- 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 @@ -30,6 +30,9 @@ <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="XYZ_PREFIXED_NEW_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-attribute name="col2" type="int" db-attribute-path="COL2"/> </obj-entity> @@ -37,4 +40,7 @@ <obj-attribute name="col2" type="int" db-attribute-path="COL2"/> <obj-attribute name="id" type="int" db-attribute-path="ID"/> </obj-entity> + <obj-entity name="PrefixedNewTable" className="PrefixedNewTable" dbEntityName="XYZ_PREFIXED_NEW_TABLE"> + <obj-attribute name="id" type="int" db-attribute-path="ID"/> + </obj-entity> </data-map> http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/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 index f8f4192..fe9ccd5 100644 --- 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 @@ -28,4 +28,9 @@ CREATE TABLE schema_01.existing_table ( id INTEGER NOT NULL, COL2 INTEGER, PRIMARY KEY (id) + ); + +CREATE TABLE schema_01.xyz_prefixed_new_table ( + id INTEGER NOT NULL, + PRIMARY KEY (id) ); \ No newline at end of file
