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 18:05:00 UTC

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

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/cayenne-tools/src/test/java/org/apache/cayenne/gen/StringUtilsTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/gen/StringUtilsTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/gen/StringUtilsTest.java
index 1ec6bd3..1fe187e 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/gen/StringUtilsTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/gen/StringUtilsTest.java
@@ -49,4 +49,53 @@ public class StringUtilsTest {
         assertEquals(null, stringUtils.pluralize(null));
     }
 
+
+    @Test
+    public void testCapitalizedAsConstant1() throws Exception {
+        String expected = "LAST_NAME";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("LastName"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant2() throws Exception {
+        String expected = "A_CLASS";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("aClass"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant3() throws Exception {
+        String expected = "VAR_A";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("varA"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant4() throws Exception {
+        String expected = "LAST_NAME";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("LAST_NAME"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant5() throws Exception {
+        String expected = "ABC_A";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("abc_A"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant6() throws Exception {
+        String expected = "A123";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("a123"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant7() throws Exception {
+        String expected = "AB_CDEF";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("abCDEF"));
+    }
+
+    @Test
+    public void testCapitalizedAsConstant8() throws Exception {
+        String expected = "AB_CE";
+        assertEquals(expected, stringUtils.capitalizedAsConstant("abCe"));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
index 970aafb..5ee3c0e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
@@ -36,8 +36,8 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.AttributeEvent;
 import org.apache.cayenne.map.event.EmbeddableAttributeEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
@@ -77,7 +77,7 @@ public class CreateAttributeAction extends CayenneAction {
             Embeddable embeddable = mediator.getCurrentEmbeddable();
 
             EmbeddableAttribute attr = new EmbeddableAttribute();
-            attr.setName(UniqueNameGenerator.generate(NameCheckers.embeddableAttribute, embeddable));
+            attr.setName(DuplicateNameResolver.resolve(NameCheckers.embeddableAttribute, embeddable));
 
             createEmbAttribute(embeddable, attr);
 
@@ -89,7 +89,7 @@ public class CreateAttributeAction extends CayenneAction {
 
             ObjEntity objEntity = mediator.getCurrentObjEntity();
 
-            ObjAttribute attr = new ObjAttribute(UniqueNameGenerator.generate(NameCheckers.objAttribute, objEntity), null, objEntity);
+            ObjAttribute attr = new ObjAttribute(DuplicateNameResolver.resolve(NameCheckers.objAttribute, objEntity), null, objEntity);
 
             createObjAttribute(mediator.getCurrentDataMap(), objEntity, attr);
 
@@ -99,7 +99,7 @@ public class CreateAttributeAction extends CayenneAction {
         } else if (getProjectController().getCurrentDbEntity() != null) {
             DbEntity dbEntity = getProjectController().getCurrentDbEntity();
 
-            DbAttribute attr = new DbAttribute(UniqueNameGenerator.generate(NameCheckers.dbAttribute, dbEntity),
+            DbAttribute attr = new DbAttribute(DuplicateNameResolver.resolve(NameCheckers.dbAttribute, dbEntity),
                     TypesMapping.NOT_DEFINED, dbEntity);
 
             createDbAttribute(mediator.getCurrentDataMap(), dbEntity, attr);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateCallbackMethodAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateCallbackMethodAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateCallbackMethodAction.java
index df6a43a..cc37948 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateCallbackMethodAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateCallbackMethodAction.java
@@ -18,19 +18,19 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.action;
 
-import java.awt.event.ActionEvent;
-
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.map.CallbackMap;
 import org.apache.cayenne.map.LifecycleEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.editor.CallbackType;
 import org.apache.cayenne.modeler.event.CallbackMethodEvent;
 import org.apache.cayenne.modeler.undo.CreateCallbackMethodUndoableEdit;
 import org.apache.cayenne.modeler.util.CayenneAction;
-import org.apache.cayenne.dbsync.reverse.naming.NameConverter;
+import org.apache.cayenne.util.Util;
+
+import java.awt.event.ActionEvent;
 
 /**
  * Action class for creating callback methods on ObjEntity
@@ -76,9 +76,8 @@ public class CreateCallbackMethodAction extends CayenneAction {
     public final void performAction(ActionEvent e) {
         CallbackType callbackType = getProjectController().getCurrentCallbackType();
 
-        // generate methodName
         String methodNamePrefix = toMethodName(callbackType.getType());
-        String methodName = UniqueNameGenerator.generate(NameCheckers.objCallbackMethod, getProjectController().getCurrentObjEntity(), methodNamePrefix);
+        String methodName = DuplicateNameResolver.resolve(NameCheckers.objCallbackMethod, getProjectController().getCurrentObjEntity(), methodNamePrefix);
 
         createCallbackMethod(callbackType, methodName);
         application.getUndoManager().addEdit(
@@ -102,7 +101,7 @@ public class CreateCallbackMethodAction extends CayenneAction {
     }
 
     private String toMethodName(LifecycleEvent event) {
-        return "on" + NameConverter.underscoredToJava(event.name(), true);
+        return "on" + Util.underscoredToJava(event.name(), true);
     }
     
     public static String getActionName() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
index aecc843..8403cb7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
@@ -23,8 +23,8 @@ import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.undo.CreateDataMapUndoableEdit;
@@ -63,7 +63,7 @@ public class CreateDataMapAction extends CayenneAction {
                 .getProject()
                 .getRootNode();
 
-        DataMap map = new DataMap(UniqueNameGenerator.generate(NameCheckers.dataMap, currentDomain));
+        DataMap map = new DataMap(DuplicateNameResolver.resolve(NameCheckers.dataMap, currentDomain));
 
         createDataMap(map);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
index ec2520b..abeaee3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
@@ -28,8 +28,8 @@ import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.EntityDisplayEvent;
@@ -63,7 +63,7 @@ public class CreateDbEntityAction extends CayenneAction {
 		ProjectController mediator = getProjectController();
 
 		DataMap map = mediator.getCurrentDataMap();
-		DbEntity entity = new DbEntity(UniqueNameGenerator.generate(NameCheckers.dbEntity, map));
+		DbEntity entity = new DbEntity(DuplicateNameResolver.resolve(NameCheckers.dbEntity, map));
 
 		createEntity(map, entity);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
index 05a00a4..7fea640 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
@@ -27,8 +27,8 @@ import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.EmbeddableEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
@@ -56,7 +56,7 @@ public class CreateEmbeddableAction extends CayenneAction {
 
         DataMap dataMap = mediator.getCurrentDataMap();
 
-        Embeddable embeddable = new Embeddable(UniqueNameGenerator.generate(NameCheckers.embeddable, mediator.getCurrentDataMap()));
+        Embeddable embeddable = new Embeddable(DuplicateNameResolver.resolve(NameCheckers.embeddable, mediator.getCurrentDataMap()));
         createEmbeddable(dataMap, embeddable);
 
         application.getUndoManager().addEdit(

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
index 4dfc3f3..eb0fbf9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
@@ -29,8 +29,8 @@ import org.apache.cayenne.configuration.event.DataNodeEvent;
 import org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory;
 import org.apache.cayenne.conn.DataSourceInfo;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
@@ -104,7 +104,7 @@ public class CreateNodeAction extends CayenneAction {
 	 * A factory method that makes a new DataNode.
 	 */
 	DataNodeDescriptor buildDataNode(DataChannelDescriptor domain) {
-		DataNodeDescriptor node = new DataNodeDescriptor(UniqueNameGenerator.generate(
+		DataNodeDescriptor node = new DataNodeDescriptor(DuplicateNameResolver.resolve(
 				NameCheckers.dataNodeDescriptor, domain));
 		node.setDataChannelDescriptor(domain);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index 8b4406b..254f18e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -22,20 +22,20 @@ package org.apache.cayenne.modeler.action;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.dbsync.reverse.naming.NameConverter;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.EntityDisplayEvent;
 import org.apache.cayenne.modeler.undo.CreateObjEntityUndoableEdit;
 import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.util.DeleteRuleUpdater;
+import org.apache.cayenne.util.Util;
 
 import java.awt.event.ActionEvent;
 
@@ -69,7 +69,7 @@ public class CreateObjEntityAction extends CayenneAction {
         ProjectController mediator = getProjectController();
 
         DataMap dataMap = mediator.getCurrentDataMap();
-        ObjEntity entity = new ObjEntity(UniqueNameGenerator.generate(NameCheckers.objEntity, dataMap));
+        ObjEntity entity = new ObjEntity(DuplicateNameResolver.resolve(NameCheckers.objEntity, dataMap));
 
         // init defaults
         entity.setSuperClassName(dataMap.getDefaultSuperclass());
@@ -78,8 +78,8 @@ public class CreateObjEntityAction extends CayenneAction {
         DbEntity dbEntity = mediator.getCurrentDbEntity();
         if (dbEntity != null) {
             entity.setDbEntity(dbEntity);
-            String baseName = NameConverter.underscoredToJava(dbEntity.getName(), true);
-            entity.setName(UniqueNameGenerator.generate(NameCheckers.objEntity, dbEntity.getDataMap(), baseName));
+            String baseName = Util.underscoredToJava(dbEntity.getName(), true);
+            entity.setName(DuplicateNameResolver.resolve(NameCheckers.objEntity, dbEntity.getDataMap(), baseName));
         }
 
         entity.setClassName(dataMap.getNameWithDefaultPackage(entity.getName()));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
index ba060b8..7787abc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
@@ -27,8 +27,8 @@ import org.apache.cayenne.configuration.event.ProcedureEvent;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
@@ -52,7 +52,7 @@ public class CreateProcedureAction extends CayenneAction {
 		ProjectController mediator = getProjectController();
 		DataMap map = mediator.getCurrentDataMap();
 
-		Procedure procedure = new Procedure(UniqueNameGenerator.generate(NameCheckers.procedure, map));
+		Procedure procedure = new Procedure(DuplicateNameResolver.resolve(NameCheckers.procedure, map));
 
 		createProcedure(map, procedure);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
index 70aaa5c..e939f86 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
@@ -27,8 +27,8 @@ import org.apache.cayenne.configuration.event.ProcedureParameterEvent;
 import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureParameter;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent;
@@ -64,7 +64,7 @@ public class CreateProcedureParameterAction extends CayenneAction {
 	public void createProcedureParameter() {
 		Procedure procedure = getProjectController().getCurrentProcedure();
 
-		ProcedureParameter parameter = new ProcedureParameter(UniqueNameGenerator.generate(
+		ProcedureParameter parameter = new ProcedureParameter(DuplicateNameResolver.resolve(
 				NameCheckers.procedureParameter, procedure));
 		procedure.addCallParameter(parameter);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
index 1f62b77..8abec0c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
@@ -31,8 +31,8 @@ import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.map.event.RelationshipEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
@@ -66,7 +66,7 @@ public class CreateRelationshipAction extends CayenneAction {
 		ObjEntity objEnt = getProjectController().getCurrentObjEntity();
 		if (objEnt != null) {
 
-			ObjRelationship rel = new ObjRelationship(UniqueNameGenerator.generate(NameCheckers.objRelationship,
+			ObjRelationship rel = new ObjRelationship(DuplicateNameResolver.resolve(NameCheckers.objRelationship,
 					objEnt));
 			createObjRelationship(objEnt, rel);
 
@@ -76,7 +76,7 @@ public class CreateRelationshipAction extends CayenneAction {
 			DbEntity dbEnt = getProjectController().getCurrentDbEntity();
 			if (dbEnt != null) {
 
-				DbRelationship rel = new DbRelationship(UniqueNameGenerator.generate(
+				DbRelationship rel = new DbRelationship(DuplicateNameResolver.resolve(
 						NameCheckers.dbRelationship, dbEnt));
 				createDbRelationship(dbEnt, rel);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
index f662b64..3158e90 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
@@ -31,8 +31,8 @@ import javax.swing.JOptionPane;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.MapLoader;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.pref.FSPath;
 import org.apache.cayenne.modeler.util.CayenneAction;
@@ -85,9 +85,9 @@ public class ImportDataMapAction extends CayenneAction {
 			DataChannelDescriptor domain = (DataChannelDescriptor) getProjectController().getProject().getRootNode();
 
 			if (newMap.getName() != null) {
-				newMap.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, domain, newMap.getName()));
+				newMap.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, domain, newMap.getName()));
 			} else {
-				newMap.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, domain));
+				newMap.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, domain));
 			}
 
 			Resource baseResource = domain.getConfigurationSource();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
index 8672759..8c5f1c6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
@@ -45,8 +45,8 @@ import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
@@ -302,7 +302,7 @@ public class ImportEOModelAction extends CayenneAction {
         else {
             // fix DataMap name, as there maybe a map with the same name already
             DataChannelDescriptor domain = (DataChannelDescriptor) mediator.getProject().getRootNode();
-            map.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, domain, map.getName()));
+            map.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, domain, map.getName()));
 
             // side effect of this operation is that if a node was created, this DataMap
             // will be linked with it...

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
index b088fd1..468ff1d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
@@ -27,8 +27,8 @@ import javax.swing.KeyStroke;
 
 import org.apache.cayenne.configuration.ConfigurationTree;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerController;
 import org.apache.cayenne.modeler.event.DomainDisplayEvent;
@@ -68,7 +68,7 @@ public class NewProjectAction extends ProjectAction {
 
         DataChannelDescriptor domain = new DataChannelDescriptor();
 
-        domain.setName(UniqueNameGenerator.generate(NameCheckers.dataChannelDescriptor, domain));
+        domain.setName(DuplicateNameResolver.resolve(NameCheckers.dataChannelDescriptor, domain));
 
         Project project = new Project(
                 new ConfigurationTree<DataChannelDescriptor>(domain));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
index 2291544..a146307 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
@@ -35,8 +35,8 @@ import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureParameter;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
@@ -171,7 +171,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             // paste DataMap to DataDomain or DataNode
             DataMap dataMap = ((DataMap) content);
 
-            dataMap.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, COPY_PATTERN, domain, dataMap.getName()));
+            dataMap.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, COPY_PATTERN, domain, dataMap.getName()));
 
             /**
              * Update all names in the new DataMap, so that they would not conflict with
@@ -187,7 +187,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             for (DbEntity dbEntity : dataMap.getDbEntities()) {
                 String oldName = dbEntity.getName();
-                dbEntity.setName(UniqueNameGenerator.generate(NameCheckers.dbEntity, COPY_PATTERN, dataMap, dbEntity.getName()));
+                dbEntity.setName(DuplicateNameResolver.resolve(NameCheckers.dbEntity, COPY_PATTERN, dataMap, dbEntity.getName()));
 
                 if (!oldName.equals(dbEntity.getName())) {
                     renamedDbEntities.put(oldName, dbEntity.getName());
@@ -195,7 +195,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             }
             for (ObjEntity objEntity : dataMap.getObjEntities()) {
                 String oldName = objEntity.getName();
-                objEntity.setName(UniqueNameGenerator.generate(NameCheckers.objEntity, COPY_PATTERN, dataMap, objEntity.getName()));
+                objEntity.setName(DuplicateNameResolver.resolve(NameCheckers.objEntity, COPY_PATTERN, dataMap, objEntity.getName()));
 
                 if (!oldName.equals(objEntity.getName())) {
                     renamedObjEntities.put(oldName, objEntity.getName());
@@ -204,7 +204,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             for (Embeddable embeddable : dataMap.getEmbeddables()) {
                 String oldName = embeddable.getClassName();
-                embeddable.setClassName(UniqueNameGenerator.generate(NameCheckers.embeddable, COPY_PATTERN, dataMap, embeddable.getClassName()));
+                embeddable.setClassName(DuplicateNameResolver.resolve(NameCheckers.embeddable, COPY_PATTERN, dataMap, embeddable.getClassName()));
 
                 if (!oldName.equals(embeddable.getClassName())) {
                     renamedEmbeddables.put(oldName, embeddable.getClassName());
@@ -212,10 +212,10 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             }
 
             for (Procedure procedure : dataMap.getProcedures()) {
-                procedure.setName(UniqueNameGenerator.generate(NameCheckers.procedure, COPY_PATTERN, dataMap, procedure.getName()));
+                procedure.setName(DuplicateNameResolver.resolve(NameCheckers.procedure, COPY_PATTERN, dataMap, procedure.getName()));
             }
             for (QueryDescriptor query : dataMap.getQueryDescriptors()) {
-                query.setName(UniqueNameGenerator.generate(NameCheckers.query, COPY_PATTERN, dataMap, query.getName()));
+                query.setName(DuplicateNameResolver.resolve(NameCheckers.query, COPY_PATTERN, dataMap, query.getName()));
             }
 
             // if an entity was renamed, we rename all links to it too
@@ -257,7 +257,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             if (content instanceof DbEntity) {
                 DbEntity dbEntity = (DbEntity) content;
-                dbEntity.setName(UniqueNameGenerator.generate(NameCheckers.dbEntity, COPY_PATTERN, dataMap, dbEntity.getName()));
+                dbEntity.setName(DuplicateNameResolver.resolve(NameCheckers.dbEntity, COPY_PATTERN, dataMap, dbEntity.getName()));
 
                 dataMap.addDbEntity(dbEntity);
                 CreateDbEntityAction.fireDbEntityEvent(this, mediator, dbEntity);
@@ -265,7 +265,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             else if (content instanceof ObjEntity) {
                 // paste ObjEntity to DataMap
                 ObjEntity objEntity = (ObjEntity) content;
-                objEntity.setName(UniqueNameGenerator.generate(NameCheckers.objEntity, COPY_PATTERN, dataMap, objEntity.getName()));
+                objEntity.setName(DuplicateNameResolver.resolve(NameCheckers.objEntity, COPY_PATTERN, dataMap, objEntity.getName()));
 
                 dataMap.addObjEntity(objEntity);
                 CreateObjEntityAction.fireObjEntityEvent(
@@ -277,7 +277,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             else if (content instanceof Embeddable) {
                 // paste Embeddable to DataMap
                 Embeddable embeddable = (Embeddable) content;
-                embeddable.setClassName(UniqueNameGenerator.generate(NameCheckers.embeddable, COPY_PATTERN, dataMap, embeddable.getClassName()));
+                embeddable.setClassName(DuplicateNameResolver.resolve(NameCheckers.embeddable, COPY_PATTERN, dataMap, embeddable.getClassName()));
 
                 dataMap.addEmbeddable(embeddable);
                 CreateEmbeddableAction.fireEmbeddableEvent(
@@ -289,7 +289,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             else if (content instanceof QueryDescriptor) {
                 QueryDescriptor query = (QueryDescriptor) content;
 
-                query.setName(UniqueNameGenerator.generate(NameCheckers.query, COPY_PATTERN, dataMap, query.getName()));
+                query.setName(DuplicateNameResolver.resolve(NameCheckers.query, COPY_PATTERN, dataMap, query.getName()));
                 query.setDataMap(dataMap);
 
                 dataMap.addQueryDescriptor(query);
@@ -298,7 +298,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             else if (content instanceof Procedure) {
                 // paste Procedure to DataMap
                 Procedure procedure = (Procedure) content;
-                procedure.setName(UniqueNameGenerator.generate(NameCheckers.procedure, COPY_PATTERN, dataMap, procedure.getName()));
+                procedure.setName(DuplicateNameResolver.resolve(NameCheckers.procedure, COPY_PATTERN, dataMap, procedure.getName()));
 
                 dataMap.addProcedure(procedure);
                 CreateProcedureAction.fireProcedureEvent(
@@ -313,7 +313,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             if (content instanceof DbAttribute) {
                 DbAttribute attr = (DbAttribute) content;
-                attr.setName(UniqueNameGenerator.generate(NameCheckers.dbAttribute, COPY_PATTERN, dbEntity, attr.getName()));
+                attr.setName(DuplicateNameResolver.resolve(NameCheckers.dbAttribute, COPY_PATTERN, dbEntity, attr.getName()));
 
                 dbEntity.addAttribute(attr);
                 CreateAttributeAction.fireDbAttributeEvent(this, mediator, mediator
@@ -321,7 +321,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             }
             else if (content instanceof DbRelationship) {
                 DbRelationship rel = (DbRelationship) content;
-                rel.setName(UniqueNameGenerator.generate(NameCheckers.dbRelationship, COPY_PATTERN, dbEntity, rel.getName()));
+                rel.setName(DuplicateNameResolver.resolve(NameCheckers.dbRelationship, COPY_PATTERN, dbEntity, rel.getName()));
 
                 dbEntity.addRelationship(rel);
                 CreateRelationshipAction.fireDbRelationshipEvent(
@@ -337,7 +337,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             if (content instanceof ObjAttribute) {
                 ObjAttribute attr = (ObjAttribute) content;
-                attr.setName(UniqueNameGenerator.generate(NameCheckers.objAttribute, COPY_PATTERN, objEntity, attr.getName()));
+                attr.setName(DuplicateNameResolver.resolve(NameCheckers.objAttribute, COPY_PATTERN, objEntity, attr.getName()));
 
                 objEntity.addAttribute(attr);
                 CreateAttributeAction.fireObjAttributeEvent(this, mediator, mediator
@@ -345,7 +345,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             }
             else if (content instanceof ObjRelationship) {
                 ObjRelationship rel = (ObjRelationship) content;
-                rel.setName(UniqueNameGenerator.generate(NameCheckers.objRelationship, COPY_PATTERN, objEntity, rel.getName()));
+                rel.setName(DuplicateNameResolver.resolve(NameCheckers.objRelationship, COPY_PATTERN, objEntity, rel.getName()));
 
                 objEntity.addRelationship(rel);
                 CreateRelationshipAction.fireObjRelationshipEvent(
@@ -357,7 +357,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             else if(content instanceof ObjCallbackMethod) {
                 ObjCallbackMethod method = (ObjCallbackMethod) content;
 
-                method.setName(UniqueNameGenerator.generate(NameCheckers.objCallbackMethod, COPY_PATTERN, objEntity, method.getName()));
+                method.setName(DuplicateNameResolver.resolve(NameCheckers.objCallbackMethod, COPY_PATTERN, objEntity, method.getName()));
                 
                 objEntity.getCallbackMap().getCallbackDescriptor(mediator.getCurrentCallbackType().getType()).addCallbackMethod(method.getName());
 
@@ -376,7 +376,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
 
             if (content instanceof EmbeddableAttribute) {
                 EmbeddableAttribute attr = (EmbeddableAttribute) content;
-                attr.setName(UniqueNameGenerator.generate(NameCheckers.embeddableAttribute, COPY_PATTERN, embeddable, attr.getName()));
+                attr.setName(DuplicateNameResolver.resolve(NameCheckers.embeddableAttribute, COPY_PATTERN, embeddable, attr.getName()));
 
                 embeddable.addAttribute(attr);
                 CreateAttributeAction.fireEmbeddableAttributeEvent(
@@ -395,7 +395,7 @@ public class PasteAction extends CayenneAction implements FlavorListener {
             if (content instanceof ProcedureParameter) {
                 ProcedureParameter param = (ProcedureParameter) content;
 
-                param.setName(UniqueNameGenerator.generate(NameCheckers.procedureParameter, COPY_PATTERN, procedure, param.getName()));
+                param.setName(DuplicateNameResolver.resolve(NameCheckers.procedureParameter, COPY_PATTERN, procedure, param.getName()));
 
                 procedure.addCallParameter(param);
                 CreateProcedureParameterAction.fireProcedureParameterEvent(

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
index 13a4aa5..08c0c1f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java
@@ -25,8 +25,8 @@ import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.event.DataMapEvent;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerController;
 import org.apache.cayenne.modeler.ProjectController;
@@ -55,8 +55,8 @@ public class ReverseEngineeringAction extends CayenneAction {
         DataMap dataMap = projectController.getCurrentDataMap();
         DataChannelDescriptor dataChannelDescriptor = projectController.getCurrentDataChanel();
         if (dataMap == null) {
-            dataMap = new DataMap(UniqueNameGenerator.generate(NameCheckers.dataMap));
-            dataMap.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, projectController.getProject().getRootNode()));
+            dataMap = new DataMap(DuplicateNameResolver.resolve(NameCheckers.dataMap));
+            dataMap.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, projectController.getProject().getRootNode()));
             dataChannelDescriptor.getDataMaps().add(dataMap);
             getProjectController().fireDataMapEvent(new DataMapEvent(this, dataMap, MapEvent.ADD));
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java
index 03db3fe..9284881 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java
@@ -46,8 +46,8 @@ import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.map.event.RelationshipEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.pref.TableColumnPreferences;
 import org.apache.cayenne.modeler.undo.RelationshipUndoableEdit;
@@ -292,7 +292,7 @@ public class ResolveDbRelationshipDialog extends CayenneDialog {
         }
 
         if (sourceEntityName == null) {
-            sourceEntityName = UniqueNameGenerator.generate(NameCheckers.dbRelationship, relationship.getSourceEntity());
+            sourceEntityName = DuplicateNameResolver.resolve(NameCheckers.dbRelationship, relationship.getSourceEntity());
         }
 
         if (!validateName(relationship.getSourceEntity(), relationship, sourceEntityName)) {
@@ -305,7 +305,7 @@ public class ResolveDbRelationshipDialog extends CayenneDialog {
         }
 
         if (targetEntityName == null) {
-            targetEntityName = UniqueNameGenerator.generate(NameCheckers.dbRelationship, relationship.getTargetEntity());
+            targetEntityName = DuplicateNameResolver.resolve(NameCheckers.dbRelationship, relationship.getTargetEntity());
         }
 
         // check if reverse name is valid

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index cbcb34e..acaafdf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -35,8 +35,8 @@ import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
@@ -335,8 +335,8 @@ public class DbLoaderHelper {
             DbLoaderHelper.this.existingMap = dataMap != null;
 
             if (!existingMap) {
-                dataMap = new DataMap(UniqueNameGenerator.generate(NameCheckers.dataMap));
-                dataMap.setName(UniqueNameGenerator.generate(NameCheckers.dataMap, mediator.getProject().getRootNode()));
+                dataMap = new DataMap(DuplicateNameResolver.resolve(NameCheckers.dataMap));
+                dataMap.setName(DuplicateNameResolver.resolve(NameCheckers.dataMap, mediator.getProject().getRootNode()));
             }
 
             if (isCanceled()) {
@@ -351,7 +351,7 @@ public class DbLoaderHelper {
                     reverseEngineering.setConfigurationSource(dataMap.getReverseEngineering().getConfigurationSource());
                 }
             } else {
-                reverseEngineering.setName(UniqueNameGenerator.generate(NameCheckers.reverseEngineering, dataChannelDescriptor));
+                reverseEngineering.setName(DuplicateNameResolver.resolve(NameCheckers.reverseEngineering, dataChannelDescriptor));
             }
 
             if (dataMap.getConfigurationSource() != null) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
index dd2c71d..8b0dd85 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
@@ -29,8 +29,8 @@ import org.apache.cayenne.configuration.event.QueryEvent;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.map.event.MapEvent;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.event.QueryDisplayEvent;
 import org.apache.cayenne.modeler.undo.CreateQueryUndoableEdit;
@@ -119,7 +119,7 @@ public class QueryType extends CayenneController{
         String queryType = getSelectedQuery();
 
         // update query...
-        String queryName = UniqueNameGenerator.generate(NameCheckers.query, dataMap);
+        String queryName = DuplicateNameResolver.resolve(NameCheckers.query, dataMap);
 
         QueryDescriptor query = QueryDescriptor.descriptor(queryType);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/CallbackType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/CallbackType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/CallbackType.java
index 932e345..790b98a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/CallbackType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/CallbackType.java
@@ -18,40 +18,26 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.editor;
 
-import java.io.Serializable;
-
 import org.apache.cayenne.map.LifecycleEvent;
-import org.apache.cayenne.dbsync.reverse.naming.NameConverter;
+import org.apache.cayenne.util.Util;
+
+import java.io.Serializable;
 
 /**
  * Entity for callback type. Contains type and type name
- * 
+ *
  * @version 1.0 Oct 26, 2007
  */
 
 public class CallbackType implements Serializable {
 
     private LifecycleEvent type;
-
-    /**
-     * callback type name
-     */
     private String name;
-
-    /**
-     * methods counter
-     */
     private int counter;
 
-    /**
-     * constructor
-     * 
-     * @param type type id
-     * @param name name
-     */
     public CallbackType(LifecycleEvent type) {
         this.type = type;
-        this.name = NameConverter.underscoredToJava(type.name(), true);
+        this.name = Util.underscoredToJava(type.name(), true);
         this.counter = 0;
     }
 
@@ -78,7 +64,7 @@ public class CallbackType implements Serializable {
 
     /**
      * Method to specify counter value
-     * 
+     *
      * @param counter new coutner value
      */
     public void setCounter(int counter) {
@@ -91,11 +77,9 @@ public class CallbackType implements Serializable {
     public String toString() {
         if (counter <= 0) {
             return name;
-        }
-        else if (counter == 1) {
+        } else if (counter == 1) {
             return name + " (1 method)";
-        }
-        else {
+        } else {
             return name + " (" + counter + " methods)";
         }
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-wocompat/pom.xml
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/pom.xml b/modeler/cayenne-wocompat/pom.xml
index d52ed09..cd57281 100644
--- a/modeler/cayenne-wocompat/pom.xml
+++ b/modeler/cayenne-wocompat/pom.xml
@@ -46,6 +46,12 @@
 			<artifactId>cayenne-server</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+
+		<dependency>
+			<groupId>org.apache.cayenne</groupId>
+			<artifactId>cayenne-dbsync</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 	</dependencies>
 
     <profiles>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ad944755/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
index 82bfa91..fac6202 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
@@ -19,6 +19,30 @@
 
 package org.apache.cayenne.wocompat;
 
+import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
+import org.apache.cayenne.exp.ExpressionException;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbJoin;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.map.SQLTemplateDescriptor;
+import org.apache.cayenne.map.SelectQueryDescriptor;
+import org.apache.cayenne.query.Ordering;
+import org.apache.cayenne.query.QueryMetadata;
+import org.apache.cayenne.query.SortOrder;
+import org.apache.cayenne.wocompat.parser.Parser;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.PredicateUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
@@ -31,19 +55,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.exp.ExpressionException;
-import org.apache.cayenne.map.*;
-import org.apache.cayenne.map.naming.UniqueNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.query.*;
-import org.apache.cayenne.wocompat.parser.Parser;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.PredicateUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 /**
  * Class for converting stored Apple EOModel mapping files to Cayenne DataMaps.
@@ -716,7 +727,7 @@ public class EOModelProcessor {
 			if (relationship.getReverseRelationship() == null) {
 				DbRelationship reverse = relationship.createReverseRelationship();
 
-				String name = UniqueNameGenerator.generate(NameCheckers.dbRelationship,
+				String name = DuplicateNameResolver.resolve(NameCheckers.dbRelationship,
 						reverse.getSourceEntity(), relationship.getName() + "Reverse");
 				reverse.setName(name);
 				relationship.getTargetEntity().addRelationship(reverse);