You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/08 10:47:47 UTC

[2/2] cayenne git commit: CAY-2130 Stripping common name prefixes on reverse engineering

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 <an...@objectstyle.com>
Authored: Tue Nov 8 11:37:00 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
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