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/09/30 14:50:21 UTC

[1/3] cayenne git commit: CAY-2116 Split schema synchronization code in a separate module

Repository: cayenne
Updated Branches:
  refs/heads/master 236b0102d -> fc27ef7ae


CAY-2116 Split schema synchronization code in a separate module

* unifying object name generators under cayenne-dbsync


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b809bb07
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b809bb07
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b809bb07

Branch: refs/heads/master
Commit: b809bb07c76bbe854cc49a223f706f2252a85c49
Parents: 236b010
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Fri Sep 30 17:34:49 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Fri Sep 30 17:40:37 2016 +0300

----------------------------------------------------------------------
 cayenne-dbsync/pom.xml                          |  5 ++
 .../dbsync/merge/EntityMergeSupport.java        |  6 +-
 .../cayenne/dbsync/reverse/db/DbLoader.java     | 10 +--
 .../reverse/db/ManyToManyCandidateEntity.java   |  2 +-
 .../naming/DefaultObjectNameGenerator.java      | 94 ++++++++++++++++++++
 .../naming/LegacyObjectNameGenerator.java       | 53 +++++++++++
 .../reverse/naming/ObjectNameGenerator.java     | 53 +++++++++++
 .../db/ManyToManyCandidateEntityTest.java       |  4 +-
 .../naming/DefaultObjectNameGeneratorTest.java  | 60 +++++++++++++
 .../naming/LegacyObjectNameGeneratorTest.java   | 55 ++++++++++++
 .../cayenne/map/naming/LegacyNameGenerator.java | 51 -----------
 .../cayenne/map/naming/ObjectNameGenerator.java | 52 -----------
 .../map/naming/LegacyNameGeneratorTest.java     | 53 -----------
 cayenne-tools/pom.xml                           |  4 -
 .../map/naming/DefaultNameGenerator.java        | 92 -------------------
 .../apache/cayenne/tools/DbImporterTask.java    |  4 +-
 .../tools/dbimport/DbImportConfiguration.java   |  6 +-
 .../map/naming/DefaultNameGeneratorTest.java    | 59 ------------
 .../InferRelationshipsController.java           |  2 +-
 .../InferRelationshipsControllerBase.java       |  2 +-
 .../dialog/objentity/EntitySyncController.java  |  2 +-
 .../dialog/objentity/ObjRelationshipInfo.java   |  2 +-
 .../modeler/util/NameGeneratorPreferences.java  | 12 +--
 .../apache/cayenne/tools/DbImporterMojo.java    |  2 +-
 24 files changed, 347 insertions(+), 338 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/pom.xml b/cayenne-dbsync/pom.xml
index 5cc1a63..f94cfb1 100644
--- a/cayenne-dbsync/pom.xml
+++ b/cayenne-dbsync/pom.xml
@@ -36,6 +36,11 @@
 			<artifactId>cayenne-server</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+        <dependency>
+            <groupId>net.java.dev.inflector</groupId>
+            <artifactId>inflector</artifactId>
+            <scope>compile</scope>
+        </dependency>
 
 		<dependency>
 			<groupId>junit</groupId>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 8aea02a..cabdb4d 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
@@ -30,9 +30,9 @@ import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.naming.DefaultUniqueNameGenerator;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
 import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.util.DeleteRuleUpdater;
 import org.apache.cayenne.util.EntityMergeListener;
 import org.apache.commons.logging.Log;
@@ -79,7 +79,7 @@ public class EntityMergeSupport {
     protected boolean usePrimitives;
 
     public EntityMergeSupport(DataMap map) {
-        this(map, new LegacyNameGenerator(), true);
+        this(map, new LegacyObjectNameGenerator(), true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 e43c15a..a522ab2 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
@@ -36,9 +36,9 @@ import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureParameter;
 import org.apache.cayenne.map.naming.DefaultUniqueNameGenerator;
 import org.apache.cayenne.map.naming.ExportedKey;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
 import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.util.EqualsBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -87,7 +87,7 @@ public class DbLoader {
      * Creates new DbLoader.
      */
     public DbLoader(Connection connection, DbAdapter adapter, DbLoaderDelegate delegate) {
-        this(connection, adapter, delegate, new LegacyNameGenerator());
+        this(connection, adapter, delegate, new LegacyObjectNameGenerator());
     }
 
     /**
@@ -693,8 +693,8 @@ public class DbLoader {
      */
     public void setNameGenerator(ObjectNameGenerator strategy) {
         if (strategy == null) {
-            LOGGER.warn("Attempt to set null into NameGenerator. LegacyNameGenerator will be used.");
-            this.nameGenerator = new LegacyNameGenerator();
+            LOGGER.warn("Attempt to set null into NameGenerator. LegacyObjectNameGenerator will be used.");
+            this.nameGenerator = new LegacyObjectNameGenerator();
         } else {
             this.nameGenerator = strategy;
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntity.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntity.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntity.java
index f185619..e912ab1 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntity.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntity.java
@@ -24,7 +24,7 @@ import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.naming.DefaultUniqueNameGenerator;
 import org.apache.cayenne.map.naming.ExportedKey;
 import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGenerator.java
new file mode 100644
index 0000000..a2ec096
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGenerator.java
@@ -0,0 +1,94 @@
+/*****************************************************************
+ *   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.naming;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.naming.ExportedKey;
+import org.apache.cayenne.map.naming.NameConverter;
+import org.jvnet.inflector.Noun;
+
+import java.util.Locale;
+
+/**
+ * A strategy for generating names of entities, attributes etc.
+ * 
+ * @since 4.0
+ */
+public class DefaultObjectNameGenerator implements ObjectNameGenerator {
+
+	@Override
+	public String createDbRelationshipName(ExportedKey key, boolean toMany) {
+
+		String name;
+
+		if (toMany) {
+			try {
+				/**
+				 * by default we use english language rules here. uppercase is
+				 * required for NameConverter to work properly
+				 */
+				name = Noun.pluralOf(key.getFKTableName().toLowerCase(), Locale.ENGLISH).toUpperCase();
+			} catch (Exception inflectorError) {
+				/**
+				 * seems that Inflector cannot be trusted. For instance, it
+				 * throws an exception when invoked for word "ADDRESS" (although
+				 * lower case works fine). To feel safe, we use superclass'
+				 * behavior if something's gone wrong
+				 */
+				return key.getFKTableName().toLowerCase();
+			}
+		} else {
+			String fkColName = key.getFKColumnName();
+
+			// trim "ID" in the end
+			if (fkColName == null) {
+				name = key.getPKTableName();
+			} else if (fkColName.toUpperCase().endsWith("_ID") && fkColName.length() > 3) {
+				name = fkColName.substring(0, fkColName.length() - 3);
+			} else if (fkColName.toUpperCase().endsWith("ID") && fkColName.length() > 2) {
+				name = fkColName.substring(0, fkColName.length() - 2);
+			} else {
+				/**
+				 * We don't want relationship to conflict with attribute, so
+				 * we'd better return superior value with 'to'
+				 */
+				name = key.getPKTableName();
+			}
+		}
+
+		return NameConverter.underscoredToJava(name, false);
+	}
+
+	@Override
+	public String createObjEntityName(DbEntity dbEntity) {
+		return NameConverter.underscoredToJava(dbEntity.getName(), true);
+	}
+
+	@Override
+	public String createObjAttributeName(DbAttribute attr) {
+		return NameConverter.underscoredToJava(attr.getName(), false);
+	}
+
+	@Override
+	public String createObjRelationshipName(DbRelationship dbRel) {
+		return NameConverter.underscoredToJava(dbRel.getName(), false);
+	}
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
new file mode 100644
index 0000000..290dba8
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
@@ -0,0 +1,53 @@
+/*****************************************************************
+ *   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.naming;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.naming.ExportedKey;
+import org.apache.cayenne.map.naming.NameConverter;
+
+/**
+ * BasicNamingStrategy is an naming strategy that creates names in Cayenne's
+ * old-fashioned manner, i.e. the same way Cayenne did before 3.0
+ * 
+ * @since 3.0
+ */
+public class LegacyObjectNameGenerator implements ObjectNameGenerator {
+    public String createDbRelationshipName(
+            ExportedKey key,
+            boolean toMany) {
+        
+        String uglyName = (toMany) ? key.getFKTableName() + "_ARRAY" : "to_" + key.getPKTableName();
+        return NameConverter.underscoredToJava(uglyName, false);
+    }
+
+    public String createObjEntityName(DbEntity dbEntity) {
+        return NameConverter.underscoredToJava(dbEntity.getName(), true);
+    }
+
+    public String createObjAttributeName(DbAttribute attr) {
+        return NameConverter.underscoredToJava(attr.getName(), false);
+    }
+
+    public String createObjRelationshipName(DbRelationship dbRel) {
+        return NameConverter.underscoredToJava(dbRel.getName(), false);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/ObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/ObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/ObjectNameGenerator.java
new file mode 100644
index 0000000..8922190
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/ObjectNameGenerator.java
@@ -0,0 +1,53 @@
+/*****************************************************************
+ *   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.naming;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.naming.ExportedKey;
+
+/**
+ * ObjectNameGenerator is a strategy for creating names for entities,
+ * attributes, relationships from DB metadata.
+ * 
+ * @since 4.0
+ */
+public interface ObjectNameGenerator {
+
+	/**
+	 * Creates new name for ObjEntity
+	 */
+	String createObjEntityName(DbEntity entity);
+
+	/**
+	 * Creates new name for ObjAttribute
+	 */
+	String createObjAttributeName(DbAttribute attr);
+
+	/**
+	 * Creates new name for DbRelationship
+	 */
+	String createDbRelationshipName(ExportedKey key, boolean toMany);
+
+	/**
+	 * Creates new name for ObjRelationship
+	 */
+	String createObjRelationshipName(DbRelationship dbRel);
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntityTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntityTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntityTest.java
index b4ab34c..4f36005 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntityTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/ManyToManyCandidateEntityTest.java
@@ -36,7 +36,7 @@ import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.Relationship;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
 import org.apache.cayenne.resource.URLResource;
 import org.junit.Before;
 import org.junit.Test;
@@ -96,7 +96,7 @@ public class ManyToManyCandidateEntityTest {
     public void testOptimisationForManyToManyEntity() {
         ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2");
 
-        ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(new LegacyNameGenerator());
+        ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(new LegacyObjectNameGenerator());
 
         ObjEntity table1Entity = map.getObjEntity("Table1");
         ObjEntity table2Entity = map.getObjEntity("Table2");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGeneratorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGeneratorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGeneratorTest.java
new file mode 100644
index 0000000..0a70fdb
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/DefaultObjectNameGeneratorTest.java
@@ -0,0 +1,60 @@
+/*****************************************************************
+ *   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.naming;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.naming.ExportedKey;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class DefaultObjectNameGeneratorTest {
+
+    @Test
+    public void testStrategy() throws Exception {
+        DefaultObjectNameGenerator strategy = new DefaultObjectNameGenerator();
+        
+        ExportedKey key = new ExportedKey("ARTIST", "ARTIST_ID", null,
+                "PAINTING", "ARTIST_ID", null, (short) 1);
+        assertEquals(strategy.createDbRelationshipName(key, false), "artist"); 
+        assertEquals(strategy.createDbRelationshipName(key, true), "paintings");
+        
+        key = new ExportedKey("PERSON", "PERSON_ID", null,
+                "PERSON", "MOTHER_ID", null, (short) 1);
+        assertEquals(strategy.createDbRelationshipName(key, false), "mother"); 
+        assertEquals(strategy.createDbRelationshipName(key, true), "people");
+        
+        key = new ExportedKey("PERSON", "PERSON_ID", null,
+                "ADDRESS", "SHIPPING_ADDRESS_ID", null, (short) 1);
+        assertEquals(strategy.createDbRelationshipName(key, false), "shippingAddress"); 
+        assertEquals(strategy.createDbRelationshipName(key, true), "addresses");
+        
+        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST")), "Artist");
+        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST_WORK")), "ArtistWork");
+        
+        assertEquals(strategy.createObjAttributeName(new DbAttribute("NAME")), "name");
+        assertEquals(strategy.createObjAttributeName(new DbAttribute("ARTIST_NAME")), "artistName");
+        
+        assertEquals(strategy.createObjRelationshipName(new DbRelationship("mother")), "mother");
+        assertEquals(strategy.createObjRelationshipName(new DbRelationship("persons")), "persons");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGeneratorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGeneratorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGeneratorTest.java
new file mode 100644
index 0000000..750dcd2
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGeneratorTest.java
@@ -0,0 +1,55 @@
+/*****************************************************************
+ *   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.naming;
+
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.naming.ExportedKey;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class LegacyObjectNameGeneratorTest {
+
+    @Test
+    public void testStrategy() throws Exception {
+        LegacyObjectNameGenerator strategy = new LegacyObjectNameGenerator();
+        
+        ExportedKey key = new ExportedKey("ARTIST", "ARTIST_ID", null,
+                "PAINTING", "ARTIST_ID", null, (short) 1);
+        assertEquals(strategy.createDbRelationshipName(key, false), "toArtist"); 
+        assertEquals(strategy.createDbRelationshipName(key, true), "paintingArray");
+        
+        key = new ExportedKey("PERSON", "PERSON_ID", null,
+                "PERSON", "MOTHER_ID", null, (short) 1);
+        assertEquals(strategy.createDbRelationshipName(key, false), "toPerson"); 
+        assertEquals(strategy.createDbRelationshipName(key, true), "personArray");
+        
+        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST")), "Artist");
+        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST_WORK")), "ArtistWork");
+        
+        assertEquals(strategy.createObjAttributeName(new DbAttribute("NAME")), "name");
+        assertEquals(strategy.createObjAttributeName(new DbAttribute("ARTIST_NAME")), "artistName");
+        
+        assertEquals(strategy.createObjRelationshipName(new DbRelationship("toArtist")), "toArtist");
+        assertEquals(strategy.createObjRelationshipName(new DbRelationship("paintingArray")), "paintingArray");
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-server/src/main/java/org/apache/cayenne/map/naming/LegacyNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/naming/LegacyNameGenerator.java b/cayenne-server/src/main/java/org/apache/cayenne/map/naming/LegacyNameGenerator.java
deleted file mode 100644
index 1648377..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/naming/LegacyNameGenerator.java
+++ /dev/null
@@ -1,51 +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.map.naming;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-
-/**
- * BasicNamingStrategy is an naming strategy that creates names in Cayenne's
- * old-fashioned manner, i.e. the same way Cayenne did before 3.0
- * 
- * @since 3.0
- */
-public class LegacyNameGenerator implements ObjectNameGenerator {
-    public String createDbRelationshipName(
-            ExportedKey key,
-            boolean toMany) {
-        
-        String uglyName = (toMany) ? key.getFKTableName() + "_ARRAY" : "to_" + key.getPKTableName();
-        return NameConverter.underscoredToJava(uglyName, false);
-    }
-
-    public String createObjEntityName(DbEntity dbEntity) {
-        return NameConverter.underscoredToJava(dbEntity.getName(), true);
-    }
-
-    public String createObjAttributeName(DbAttribute attr) {
-        return NameConverter.underscoredToJava(attr.getName(), false);
-    }
-
-    public String createObjRelationshipName(DbRelationship dbRel) {
-        return NameConverter.underscoredToJava(dbRel.getName(), false);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-server/src/main/java/org/apache/cayenne/map/naming/ObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/naming/ObjectNameGenerator.java b/cayenne-server/src/main/java/org/apache/cayenne/map/naming/ObjectNameGenerator.java
deleted file mode 100644
index fac5e32..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/naming/ObjectNameGenerator.java
+++ /dev/null
@@ -1,52 +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.map.naming;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-
-/**
- * ObjectNameGenerator is a strategy for creating names for entities,
- * attributes, relationships from DB metadata.
- * 
- * @since 4.0
- */
-public interface ObjectNameGenerator {
-
-	/**
-	 * Creates new name for ObjEntity
-	 */
-	String createObjEntityName(DbEntity entity);
-
-	/**
-	 * Creates new name for ObjAttribute
-	 */
-	String createObjAttributeName(DbAttribute attr);
-
-	/**
-	 * Creates new name for DbRelationship
-	 */
-	String createDbRelationshipName(ExportedKey key, boolean toMany);
-
-	/**
-	 * Creates new name for ObjRelationship
-	 */
-	String createObjRelationshipName(DbRelationship dbRel);
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-server/src/test/java/org/apache/cayenne/map/naming/LegacyNameGeneratorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/map/naming/LegacyNameGeneratorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/map/naming/LegacyNameGeneratorTest.java
deleted file mode 100644
index 7773f28..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/map/naming/LegacyNameGeneratorTest.java
+++ /dev/null
@@ -1,53 +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.map.naming;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class LegacyNameGeneratorTest {
-
-    @Test
-    public void testStrategy() throws Exception {
-        LegacyNameGenerator strategy = new LegacyNameGenerator();
-        
-        ExportedKey key = new ExportedKey("ARTIST", "ARTIST_ID", null,
-                "PAINTING", "ARTIST_ID", null, (short) 1);
-        assertEquals(strategy.createDbRelationshipName(key, false), "toArtist"); 
-        assertEquals(strategy.createDbRelationshipName(key, true), "paintingArray");
-        
-        key = new ExportedKey("PERSON", "PERSON_ID", null,
-                "PERSON", "MOTHER_ID", null, (short) 1);
-        assertEquals(strategy.createDbRelationshipName(key, false), "toPerson"); 
-        assertEquals(strategy.createDbRelationshipName(key, true), "personArray");
-        
-        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST")), "Artist");
-        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST_WORK")), "ArtistWork");
-        
-        assertEquals(strategy.createObjAttributeName(new DbAttribute("NAME")), "name");
-        assertEquals(strategy.createObjAttributeName(new DbAttribute("ARTIST_NAME")), "artistName");
-        
-        assertEquals(strategy.createObjRelationshipName(new DbRelationship("toArtist")), "toArtist");
-        assertEquals(strategy.createObjRelationshipName(new DbRelationship("paintingArray")), "paintingArray");
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-tools/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-tools/pom.xml b/cayenne-tools/pom.xml
index 15816c5..da68aa6 100644
--- a/cayenne-tools/pom.xml
+++ b/cayenne-tools/pom.xml
@@ -113,10 +113,6 @@
 			<artifactId>vpp</artifactId>
 		</dependency>
 
-		<dependency>
-			<groupId>net.java.dev.inflector</groupId>
-			<artifactId>inflector</artifactId>
-		</dependency>
         <dependency>
             <groupId>org.apache.derby</groupId>
             <artifactId>derby</artifactId>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-tools/src/main/java/org/apache/cayenne/map/naming/DefaultNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/map/naming/DefaultNameGenerator.java b/cayenne-tools/src/main/java/org/apache/cayenne/map/naming/DefaultNameGenerator.java
deleted file mode 100644
index af76188..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/map/naming/DefaultNameGenerator.java
+++ /dev/null
@@ -1,92 +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.map.naming;
-
-import java.util.Locale;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-import org.jvnet.inflector.Noun;
-
-/**
- * A strategy for generating names of entities, attributes etc.
- * 
- * @since 4.0
- */
-public class DefaultNameGenerator implements ObjectNameGenerator {
-
-	@Override
-	public String createDbRelationshipName(ExportedKey key, boolean toMany) {
-
-		String name;
-
-		if (toMany) {
-			try {
-				/**
-				 * by default we use english language rules here. uppercase is
-				 * required for NameConverter to work properly
-				 */
-				name = Noun.pluralOf(key.getFKTableName().toLowerCase(), Locale.ENGLISH).toUpperCase();
-			} catch (Exception inflectorError) {
-				/**
-				 * seems that Inflector cannot be trusted. For instance, it
-				 * throws an exception when invoked for word "ADDRESS" (although
-				 * lower case works fine). To feel safe, we use superclass'
-				 * behavior if something's gone wrong
-				 */
-				return key.getFKTableName().toLowerCase();
-			}
-		} else {
-			String fkColName = key.getFKColumnName();
-
-			// trim "ID" in the end
-			if (fkColName == null) {
-				name = key.getPKTableName();
-			} else if (fkColName.toUpperCase().endsWith("_ID") && fkColName.length() > 3) {
-				name = fkColName.substring(0, fkColName.length() - 3);
-			} else if (fkColName.toUpperCase().endsWith("ID") && fkColName.length() > 2) {
-				name = fkColName.substring(0, fkColName.length() - 2);
-			} else {
-				/**
-				 * We don't want relationship to conflict with attribute, so
-				 * we'd better return superior value with 'to'
-				 */
-				name = key.getPKTableName();
-			}
-		}
-
-		return NameConverter.underscoredToJava(name, false);
-	}
-
-	@Override
-	public String createObjEntityName(DbEntity dbEntity) {
-		return NameConverter.underscoredToJava(dbEntity.getName(), true);
-	}
-
-	@Override
-	public String createObjAttributeName(DbAttribute attr) {
-		return NameConverter.underscoredToJava(attr.getName(), false);
-	}
-
-	@Override
-	public String createObjRelationshipName(DbRelationship dbRel) {
-		return NameConverter.underscoredToJava(dbRel.getName(), false);
-	}
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 48498a6..adea83a 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
@@ -40,7 +40,7 @@ import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.naming.DefaultNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.configuration.ToolsModule;
@@ -67,7 +67,7 @@ public class DbImporterTask extends Task {
     public DbImporterTask() {
         this.config = new DbImportConfiguration();
         this.config.setUsePrimitives(true);
-        this.config.setNamingStrategy(DefaultNameGenerator.class.getName());
+        this.config.setNamingStrategy(DefaultObjectNameGenerator.class.getName());
 
         // reverse engineering config is flattened into task...
         this.reverseEngineering = new ReverseEngineering();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 8fb0820..e111d64 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
@@ -38,8 +38,8 @@ import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.commons.logging.Log;
 
@@ -179,7 +179,7 @@ public class DbImportConfiguration {
             }
         }
 
-        return new LegacyNameGenerator(); // TODO
+        return new LegacyObjectNameGenerator(); // TODO
     }
 
     public String getDriver() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/cayenne-tools/src/test/java/org/apache/cayenne/map/naming/DefaultNameGeneratorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/map/naming/DefaultNameGeneratorTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/map/naming/DefaultNameGeneratorTest.java
deleted file mode 100644
index fe5ed37..0000000
--- a/cayenne-tools/src/test/java/org/apache/cayenne/map/naming/DefaultNameGeneratorTest.java
+++ /dev/null
@@ -1,59 +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.map.naming;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class DefaultNameGeneratorTest {
-
-    @Test
-    public void testStrategy() throws Exception {
-        DefaultNameGenerator strategy = new DefaultNameGenerator();
-        
-        ExportedKey key = new ExportedKey("ARTIST", "ARTIST_ID", null,
-                "PAINTING", "ARTIST_ID", null, (short) 1);
-        assertEquals(strategy.createDbRelationshipName(key, false), "artist"); 
-        assertEquals(strategy.createDbRelationshipName(key, true), "paintings");
-        
-        key = new ExportedKey("PERSON", "PERSON_ID", null,
-                "PERSON", "MOTHER_ID", null, (short) 1);
-        assertEquals(strategy.createDbRelationshipName(key, false), "mother"); 
-        assertEquals(strategy.createDbRelationshipName(key, true), "people");
-        
-        key = new ExportedKey("PERSON", "PERSON_ID", null,
-                "ADDRESS", "SHIPPING_ADDRESS_ID", null, (short) 1);
-        assertEquals(strategy.createDbRelationshipName(key, false), "shippingAddress"); 
-        assertEquals(strategy.createDbRelationshipName(key, true), "addresses");
-        
-        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST")), "Artist");
-        assertEquals(strategy.createObjEntityName(new DbEntity("ARTIST_WORK")), "ArtistWork");
-        
-        assertEquals(strategy.createObjAttributeName(new DbAttribute("NAME")), "name");
-        assertEquals(strategy.createObjAttributeName(new DbAttribute("ARTIST_NAME")), "artistName");
-        
-        assertEquals(strategy.createObjRelationshipName(new DbRelationship("mother")), "mother");
-        assertEquals(strategy.createObjRelationshipName(new DbRelationship("persons")), "persons");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsController.java
index 0c6c237..b03f8da 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsController.java
@@ -29,7 +29,7 @@ import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.map.event.RelationshipEvent;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.ProjectController;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
index 7956a66..badde44 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
@@ -31,7 +31,7 @@ import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbJoin;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.naming.ExportedKey;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.commons.collections.Predicate;
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 2941159..276f258 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
@@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.dialog.objentity;
 import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
index 9edde13..2b01ce3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.map.event.RelationshipEvent;
 import org.apache.cayenne.map.naming.ExportedKey;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.ProjectController;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
index fa15083..c215e2b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
@@ -22,9 +22,9 @@ import java.util.Arrays;
 import java.util.Vector;
 import java.util.prefs.Preferences;
 
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
-import org.apache.cayenne.map.naming.DefaultNameGenerator;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.Application;
 
 /**
@@ -39,8 +39,8 @@ public class NameGeneratorPreferences {
      */
     private static final Vector<String> PREDEFINED_STRATEGIES = new Vector<String>();
     static {
-        PREDEFINED_STRATEGIES.add(DefaultNameGenerator.class.getCanonicalName());
-        PREDEFINED_STRATEGIES.add(LegacyNameGenerator.class.getCanonicalName());
+        PREDEFINED_STRATEGIES.add(DefaultObjectNameGenerator.class.getCanonicalName());
+        PREDEFINED_STRATEGIES.add(LegacyObjectNameGenerator.class.getCanonicalName());
     }
 
     static final NameGeneratorPreferences instance = new NameGeneratorPreferences();
@@ -100,6 +100,6 @@ public class NameGeneratorPreferences {
     }
 
     public static ObjectNameGenerator defaultNameGenerator() {
-        return new DefaultNameGenerator();
+        return new DefaultObjectNameGenerator();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b809bb07/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 11502b6..f615fa2 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
@@ -107,7 +107,7 @@ public class DbImporterMojo extends AbstractMojo {
      * The default is a basic naming strategy.
      *
      * @parameter namingStrategy="namingStrategy"
-     * default-value="org.apache.cayenne.map.naming.DefaultNameGenerator"
+     * default-value="org.apache.cayenne.map.naming.DefaultObjectNameGenerator"
      */
     private String namingStrategy;
 


[3/3] cayenne git commit: CAY-2116 Split schema synchronization code in a separate module

Posted by aa...@apache.org.
CAY-2116 Split schema synchronization code in a separate module

* unifying object name generators under cayenne-dbsync
* removing unused classes (probably work in progress)


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/fc27ef7a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/fc27ef7a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/fc27ef7a

Branch: refs/heads/master
Commit: fc27ef7ae6dbe296a7974da45a5738d10e923cee
Parents: 041cb78
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Fri Sep 30 17:34:49 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Fri Sep 30 17:45:59 2016 +0300

----------------------------------------------------------------------
 .../cayenne/dbsync/reverse/mapper/DbType.java   | 194 -------------
 .../mapper/DefaultJdbc2JavaTypeMapper.java      | 282 -------------------
 .../reverse/mapper/Jdbc2JavaTypeMapper.java     |  33 ---
 .../naming/LegacyObjectNameGenerator.java       |   2 +-
 .../dbsync/reverse/mapper/DbTypeTest.java       |  87 ------
 5 files changed, 1 insertion(+), 597 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/fc27ef7a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DbType.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DbType.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DbType.java
deleted file mode 100644
index 9f829ea..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DbType.java
+++ /dev/null
@@ -1,194 +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.mapper;
-
-import org.apache.cayenne.util.EqualsBuilder;
-import org.apache.cayenne.util.HashCodeBuilder;
-import org.apache.commons.lang.builder.CompareToBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import static org.apache.commons.lang.StringUtils.isBlank;
-
-/**
- * @since 4.0
- */
-public class DbType implements Comparable<DbType> {
-
-    private static final Log LOG = LogFactory.getLog(DbType.class);
-
-    public final String jdbc;
-
-    public final Integer length;
-    public final Integer precision;
-    public final Integer scale;
-    public final Boolean notNull;
-
-    public DbType(String jdbc) {
-        this(jdbc, null, null, null, null);
-    }
-
-    public DbType(String jdbc, Integer length, Integer precision, Integer scale, Boolean notNull) {
-        if (isBlank(jdbc)) {
-            throw new IllegalArgumentException("Jdbc type can't be null");
-        }
-        this.jdbc = jdbc;
-
-        this.length = getValidInt(length);
-        this.precision = getValidInt(precision);
-        this.scale = getValidInt(scale);
-        this.notNull = notNull;
-    }
-
-    public String getJdbc() {
-        return jdbc;
-    }
-
-    public Integer getLength() {
-        return length;
-    }
-
-    public Integer getPrecision() {
-        return precision;
-    }
-
-    public Integer getScale() {
-        return scale;
-    }
-
-    public Boolean getNotNull() {
-        return notNull;
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (obj == this) {
-            return true;
-        }
-        if (obj.getClass() != getClass()) {
-            return false;
-        }
-        DbType rhs = (DbType) obj;
-        return new EqualsBuilder()
-                .append(this.jdbc, rhs.jdbc)
-                .append(this.length, rhs.length)
-                .append(this.precision, rhs.precision)
-                .append(this.scale, rhs.scale)
-                .append(this.notNull, rhs.notNull)
-                .isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder()
-                .append(jdbc)
-                .append(length)
-                .append(precision)
-                .append(scale)
-                .append(notNull)
-                .toHashCode();
-    }
-
-
-    @Override
-    public String toString() {
-        String res = jdbc;
-
-        String len = "*";
-        if (isPositive(length)) {
-            len = length.toString();
-        }
-        if (isPositive(precision)) {
-            len = precision.toString();
-        }
-
-        res += " (" + len;
-        if (isPositive(scale)) {
-            res += ", " + scale;
-        }
-        res += ")";
-
-        if (notNull != null && notNull) {
-            res += " NOT NULL";
-        }
-
-        return res;
-    }
-
-    private boolean isPositive(Integer num) {
-        return num != null && num > 0;
-    }
-
-    private Integer getValidInt(Integer num) {
-        if (num == null || num > 0) {
-            return num;
-        }
-
-        LOG.warn("Invalid int value '" + num + "'");
-        return null;
-    }
-
-    /**
-     * Compare by specificity the most specific DbPath should be first in ordered list
-     */
-    @Override
-    public int compareTo(DbType dbType) {
-        return new CompareToBuilder()
-                .append(dbType.jdbc, jdbc)
-                .append(dbType.getSpecificity(), getSpecificity())
-                .append(dbType.length, length)
-                .append(dbType.precision, precision)
-                .append(dbType.scale, scale)
-                .append(dbType.notNull, notNull)
-                .toComparison();
-    }
-
-    private int getSpecificity() {
-        int res = 0;
-        if (isPositive(length)) {
-            res += 100;
-        }
-        if (isPositive(precision)) {
-            res += 100;
-        }
-        if (isPositive(scale)) {
-            res += 10;
-        }
-        if (this.notNull != null) {
-            res += 5;
-        }
-
-        return res;
-    }
-
-    public boolean isCover(DbType type) {
-        return this.jdbc.equals(type.jdbc)
-            && (isCover(length, type.length) || length == null && type.length == null && isCover(precision, type.precision))
-            && isCover(scale, type.scale)
-            && isCover(notNull, type.notNull);
-    }
-
-    private boolean isCover(Object a, Object b) {
-        return a == null || a.equals(b);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fc27ef7a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DefaultJdbc2JavaTypeMapper.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DefaultJdbc2JavaTypeMapper.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DefaultJdbc2JavaTypeMapper.java
deleted file mode 100644
index 0af1690..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/DefaultJdbc2JavaTypeMapper.java
+++ /dev/null
@@ -1,282 +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.mapper;
-
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.util.Util;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.sql.Types;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * @since 4.0.
- */
-public class DefaultJdbc2JavaTypeMapper implements Jdbc2JavaTypeMapper {
-
-	// Never use "-1" or any other normal integer, since there
-	// is a big chance it is being reserved in java.sql.Types
-	public static final int NOT_DEFINED = Integer.MAX_VALUE;
-
-	// char constants for Java data types
-	public static final String JAVA_LONG = "java.lang.Long";
-	public static final String JAVA_BYTES = "byte[]";
-	public static final String JAVA_BOOLEAN = "java.lang.Boolean";
-	public static final String JAVA_STRING = "java.lang.String";
-	public static final String JAVA_SQLDATE = "java.sql.Date";
-	public static final String JAVA_UTILDATE = "java.util.Date";
-	public static final String JAVA_BIGDECIMAL = "java.math.BigDecimal";
-	public static final String JAVA_DOUBLE = "java.lang.Double";
-	public static final String JAVA_FLOAT = "java.lang.Float";
-	public static final String JAVA_INTEGER = "java.lang.Integer";
-	public static final String JAVA_SHORT = "java.lang.Short";
-	public static final String JAVA_BYTE = "java.lang.Byte";
-	public static final String JAVA_TIME = "java.sql.Time";
-	public static final String JAVA_TIMESTAMP = "java.sql.Timestamp";
-	public static final String JAVA_BLOB = "java.sql.Blob";
-
-	/**
-	 * Keys: java class names, Values: SQL int type definitions from
-	 * java.sql.Types
-	 */
-	private final Map<String, Integer> javaSqlEnum = new HashMap<>();
-
-	private final Map<DbType, String> mapping = new HashMap<>();
-	private final SortedSet<DbType> dbTypes = new TreeSet<>();
-
-	private Map<String, String> classToPrimitive;
-
-	{
-		add(Types.BIGINT, JAVA_LONG);
-		add(Types.BINARY, JAVA_BYTES);
-		add(Types.BIT, JAVA_BOOLEAN);
-		add(Types.BOOLEAN, JAVA_BOOLEAN);
-		add(Types.BLOB, JAVA_BYTES);
-		add(Types.CLOB, JAVA_STRING);
-		add(Types.NCLOB, JAVA_STRING);
-		add(Types.SQLXML, JAVA_STRING);
-		add(Types.CHAR, JAVA_STRING);
-		add(Types.NCHAR, JAVA_STRING);
-		add(Types.DATE, JAVA_UTILDATE);
-		add(Types.DECIMAL, JAVA_BIGDECIMAL);
-		add(Types.DOUBLE, JAVA_DOUBLE);
-		add(Types.FLOAT, JAVA_FLOAT);
-		add(Types.INTEGER, JAVA_INTEGER);
-		add(Types.LONGVARCHAR, JAVA_STRING);
-		add(Types.LONGNVARCHAR, JAVA_STRING);
-		add(Types.LONGVARBINARY, JAVA_BYTES);
-		add(Types.NUMERIC, JAVA_BIGDECIMAL);
-		add(Types.REAL, JAVA_FLOAT);
-		add(Types.SMALLINT, JAVA_SHORT);
-		add(Types.TINYINT, JAVA_SHORT);
-		add(Types.TIME, JAVA_UTILDATE);
-		add(Types.TIMESTAMP, JAVA_UTILDATE);
-		add(Types.VARBINARY, JAVA_BYTES);
-		add(Types.VARCHAR, JAVA_STRING);
-		add(Types.NVARCHAR, JAVA_STRING);
-
-		javaSqlEnum.put(JAVA_LONG, Types.BIGINT);
-		javaSqlEnum.put(JAVA_BYTES, Types.BINARY);
-		javaSqlEnum.put(JAVA_BOOLEAN, Types.BIT);
-		javaSqlEnum.put(JAVA_STRING, Types.VARCHAR);
-		javaSqlEnum.put(JAVA_SQLDATE, Types.DATE);
-		javaSqlEnum.put(JAVA_UTILDATE, Types.DATE);
-		javaSqlEnum.put(JAVA_TIMESTAMP, Types.TIMESTAMP);
-		javaSqlEnum.put(JAVA_BIGDECIMAL, Types.DECIMAL);
-		javaSqlEnum.put(JAVA_DOUBLE, Types.DOUBLE);
-		javaSqlEnum.put(JAVA_FLOAT, Types.FLOAT);
-		javaSqlEnum.put(JAVA_INTEGER, Types.INTEGER);
-		javaSqlEnum.put(JAVA_SHORT, Types.SMALLINT);
-		javaSqlEnum.put(JAVA_BYTE, Types.SMALLINT);
-		javaSqlEnum.put(JAVA_TIME, Types.TIME);
-		javaSqlEnum.put(JAVA_TIMESTAMP, Types.TIMESTAMP);
-
-		// add primitives
-		javaSqlEnum.put("byte", Types.TINYINT);
-		javaSqlEnum.put("int", Types.INTEGER);
-		javaSqlEnum.put("short", Types.SMALLINT);
-		javaSqlEnum.put("char", Types.CHAR);
-		javaSqlEnum.put("double", Types.DOUBLE);
-		javaSqlEnum.put("long", Types.BIGINT);
-		javaSqlEnum.put("float", Types.FLOAT);
-		javaSqlEnum.put("boolean", Types.BIT);
-
-		classToPrimitive = new HashMap<>();
-		classToPrimitive.put(Byte.class.getName(), "byte");
-		classToPrimitive.put(Long.class.getName(), "long");
-		classToPrimitive.put(Double.class.getName(), "double");
-		classToPrimitive.put(Boolean.class.getName(), "boolean");
-		classToPrimitive.put(Float.class.getName(), "float");
-		classToPrimitive.put(Short.class.getName(), "short");
-		classToPrimitive.put(Integer.class.getName(), "int");
-	}
-
-	private Boolean usePrimitives;
-
-	/**
-	 * Returns default java.sql.Types type by the Java type name.
-	 *
-	 * @param className
-	 *            Fully qualified Java Class name.
-	 * @return The SQL type or NOT_DEFINED if no type found.
-	 */
-	public int getJdbcTypeByJava(DbAttribute attribute, String className) {
-		if (className == null) {
-			return NOT_DEFINED;
-		}
-
-		Integer type = javaSqlEnum.get(className);
-		if (type != null) {
-			return type;
-		}
-
-		// try to load a Java class - some nonstandard mappings may work
-		try {
-			return getSqlTypeByJava(attribute, Util.getJavaClass(className));
-		} catch (Throwable th) {
-			return NOT_DEFINED;
-		}
-	}
-
-	public void add(int jdbcType, String java) {
-		add(new DbType(TypesMapping.getSqlNameByType(jdbcType)), java);
-	}
-
-	@Override
-	public void add(DbType type, String java) {
-		mapping.put(type, java);
-		dbTypes.add(type);
-	}
-
-	/**
-	 * Guesses a default JDBC type for the Java class.
-	 *
-	 * @since 1.1
-	 */
-	protected int getSqlTypeByJava(DbAttribute attribute, Class<?> javaClass) {
-		if (javaClass == null) {
-			return NOT_DEFINED;
-		}
-
-		// check standard mapping of class and superclasses
-		Class<?> aClass = javaClass;
-		while (aClass != null) {
-
-			String name;
-
-			if (aClass.isArray()) {
-				name = aClass.getComponentType().getName() + "[]";
-			} else {
-				name = aClass.getName();
-			}
-
-			Object type = javaSqlEnum.get(name);
-			if (type != null) {
-				return ((Number) type).intValue();
-			}
-
-			aClass = aClass.getSuperclass();
-		}
-
-		// check non-standard JDBC types that are still supported by JPA
-		if (javaClass.isArray()) {
-
-			Class<?> elementType = javaClass.getComponentType();
-			if (Character.class.isAssignableFrom(elementType) || Character.TYPE.isAssignableFrom(elementType)) {
-				return Types.VARCHAR;
-			} else if (Byte.class.isAssignableFrom(elementType) || Byte.TYPE.isAssignableFrom(elementType)) {
-				return Types.VARBINARY;
-			}
-		}
-
-		if (Calendar.class.isAssignableFrom(javaClass)) {
-			return Types.TIMESTAMP;
-		}
-
-		if (BigInteger.class.isAssignableFrom(javaClass)) {
-			return Types.BIGINT;
-		}
-
-		if (Serializable.class.isAssignableFrom(javaClass)) {
-			// serializable check should be the last one when all other mapping
-			// attempts failed
-			return Types.VARBINARY;
-		}
-
-		return NOT_DEFINED;
-	}
-
-	/**
-	 * Get the corresponding Java type by its java.sql.Types counterpart. Note
-	 * that this method should be used as a last resort, with explicit mapping
-	 * provided by user used as a first choice, as it can only guess how to map
-	 * certain types, such as NUMERIC, etc.
-	 *
-	 * @return Fully qualified Java type name or null if not found.
-	 */
-	@Override
-	public String getJavaByJdbcType(DbAttribute attribute, int type) {
-		String jdbcType = TypesMapping.getSqlNameByType(type);
-		DbType dbType;
-		if (attribute != null) {
-			dbType = new DbType(jdbcType, attribute.getMaxLength(), attribute.getAttributePrecision(),
-					attribute.getScale(), attribute.isMandatory());
-		} else {
-			dbType = new DbType(jdbcType);
-		}
-
-		String typeName = getJavaByJdbcType(dbType);
-
-		if (usePrimitives != null && usePrimitives) {
-			String primitive = classToPrimitive.get(typeName);
-			if (primitive != null) {
-				return primitive;
-			}
-		}
-
-		return typeName;
-	}
-
-	public String getJavaByJdbcType(DbType type) {
-		for (DbType t : dbTypes) {
-			if (t.isCover(type)) {
-				// because dbTypes sorted by specificity we will take first and
-				// the most specific matching
-				// that applicable for attribute
-				return mapping.get(t);
-			}
-		}
-
-		return null;
-	}
-
-	public Boolean getUsePrimitives() {
-		return usePrimitives;
-	}
-
-	public void setUsePrimitives(Boolean usePrimitives) {
-		this.usePrimitives = usePrimitives;
-	}
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fc27ef7a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/Jdbc2JavaTypeMapper.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/Jdbc2JavaTypeMapper.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/Jdbc2JavaTypeMapper.java
deleted file mode 100644
index 71d86d5..0000000
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/mapper/Jdbc2JavaTypeMapper.java
+++ /dev/null
@@ -1,33 +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.mapper;
-
-import org.apache.cayenne.map.DbAttribute;
-
-/**
- * @since 4.0.
- */
-public interface Jdbc2JavaTypeMapper {
-
-    String getJavaByJdbcType(DbAttribute attribute, int type);
-
-    int getJdbcTypeByJava(DbAttribute attribute, String className);
-
-    void add(DbType type, String java);
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fc27ef7a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
index 290dba8..11ac007 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/naming/LegacyObjectNameGenerator.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.map.naming.NameConverter;
  * BasicNamingStrategy is an naming strategy that creates names in Cayenne's
  * old-fashioned manner, i.e. the same way Cayenne did before 3.0
  * 
- * @since 3.0
+ * @since 4.0
  */
 public class LegacyObjectNameGenerator implements ObjectNameGenerator {
     public String createDbRelationshipName(

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fc27ef7a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/mapper/DbTypeTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/mapper/DbTypeTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/mapper/DbTypeTest.java
deleted file mode 100644
index f2cb475..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/mapper/DbTypeTest.java
+++ /dev/null
@@ -1,87 +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.mapper;
-
-import org.junit.Test;
-
-import java.util.Iterator;
-import java.util.TreeSet;
-
-import static org.junit.Assert.*;
-
-public class DbTypeTest {
-
-    @Test
-    public void testCompareTo() throws Exception {
-        TreeSet<DbType> set = new TreeSet<DbType>();
-        set.add(new DbType("type-01", null, null, null, null));
-        set.add(new DbType("type-02", null, null, null, null));
-        set.add(new DbType("type-02", 1, null, null, null));
-        set.add(new DbType("type-02", 2, null, null, null));
-        set.add(new DbType("type-02", 2, null, null, true));
-        set.add(new DbType("type-02", 2, null, null, false));
-        set.add(new DbType("type-02", 2, null, 5, null));
-        set.add(new DbType("type-02", 2, null, 5, false));
-        set.add(new DbType("type-02", 2, null, 5, true));
-        set.add(new DbType("type-02", null, 8, 5, true));
-        set.add(new DbType("type-02", null, 9, 5, true));
-
-        Iterator<DbType> iterator = set.iterator();
-        assertEquals(new DbType("type-02", 2, null, 5, true), iterator.next());
-        assertEquals(new DbType("type-02", 2, null, 5, false), iterator.next());
-        assertEquals(new DbType("type-02", null, 9, 5, true), iterator.next());
-        assertEquals(new DbType("type-02", null, 8, 5, true), iterator.next());
-        assertEquals(new DbType("type-02", 2, null, 5, null), iterator.next());
-        assertEquals(new DbType("type-02", 2, null, null, true), iterator.next());
-        assertEquals(new DbType("type-02", 2, null, null, false), iterator.next());
-        assertEquals(new DbType("type-02", 2, null, null, null), iterator.next());
-        assertEquals(new DbType("type-02", 1, null, null, null), iterator.next());
-        assertEquals(new DbType("type-02", null, null, null, null), iterator.next());
-        assertEquals(new DbType("type-01", null, null, null, null), iterator.next());
-    }
-
-    @Test
-    public void testCover() throws Exception {
-        DbType typeJava = new DbType("java");
-        assertTrue(typeJava.isCover(typeJava));
-        assertTrue(typeJava.isCover(new DbType("java", 1, 1, 1, null)));
-        assertTrue(typeJava.isCover(new DbType("java", 1, null, null, null)));
-        assertTrue(typeJava.isCover(new DbType("java", null, 1, null, null)));
-        assertTrue(typeJava.isCover(new DbType("java", null, null, 1, null)));
-        assertTrue(typeJava.isCover(new DbType("java", null, null, null, true)));
-        assertTrue(typeJava.isCover(new DbType("java", null, null, null, false)));
-        assertFalse(typeJava.isCover(new DbType("java1", null, null, null, null)));
-
-        DbType typeWithLength = new DbType("java", 1, null, null, null);
-        assertTrue(typeWithLength.isCover(typeWithLength));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, null)));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, true)));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, null, null, true)));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, 1, null, true)));
-        assertFalse(typeWithLength.isCover(new DbType("java", 2, null, null, null)));
-        assertFalse(typeWithLength.isCover(new DbType("java", null, null, null, true)));
-        assertFalse(typeWithLength.isCover(new DbType("java1", 2, null, null, null)));
-
-        DbType typeWithLengthAndNotNull = new DbType("java", 1, null, null, true);
-        assertTrue(typeWithLength.isCover(typeWithLengthAndNotNull));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, true)));
-        assertTrue(typeWithLength.isCover(new DbType("java", 1, 1, 1, true)));
-    }
-}
\ No newline at end of file


[2/3] cayenne git commit: removing dependency on commons-lang

Posted by aa...@apache.org.
removing dependency on commons-lang


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/041cb78f
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/041cb78f
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/041cb78f

Branch: refs/heads/master
Commit: 041cb78f440248be5ecb982f60c76d431185897d
Parents: b809bb0
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Fri Sep 30 17:28:14 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Fri Sep 30 17:45:50 2016 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/tools/dbimport/DbImportConfiguration.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/041cb78f/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 e111d64..e45cdf9 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
@@ -250,7 +250,7 @@ public class DbImportConfiguration {
             // explicitly requested by the plugin caller, and the provided catalog is
             // not a pattern
             String catalog = catalogs[0].name;
-            if (defaultPackage != null && defaultPackage.length() > 0 && catalog.indexOf('%') < 0) {
+            if (catalog != null && catalog.length() > 0 && catalog.indexOf('%') < 0) {
                 dataMap.setDefaultCatalog(catalog);
             }
 
@@ -258,7 +258,7 @@ public class DbImportConfiguration {
             // explicitly requested by the plugin caller, and the provided schema is
             // not a pattern
             String schema = catalogs[0].schemas[0].name;
-            if (defaultPackage != null && defaultPackage.length() > 0 && schema.indexOf('%') < 0) {
+            if (schema != null && schema.length() > 0 && schema.indexOf('%') < 0) {
                 dataMap.setDefaultSchema(schema);
             }
         }