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