Repository: cayenne
Updated Branches:
  refs/heads/master ad9447556 -> 8ac060fce


CAY-2114 cdbimport: object layer settings are not respected

* propagating top-level ObjectNameGenerator down to all tokens


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

Branch: refs/heads/master
Commit: 603117cd75b45cce71e5cfad1c6d7bf2aea76044
Parents: ad94475
Author: Andrus Adamchik <[email protected]>
Authored: Fri Sep 30 21:32:57 2016 +0300
Committer: Andrus Adamchik <[email protected]>
Committed: Fri Sep 30 21:38:20 2016 +0300

----------------------------------------------------------------------
 .../cayenne/dbsync/merge/AddColumnToModel.java  | 13 ++--
 .../dbsync/merge/AddRelationshipToModel.java    | 65 +++++++++-----------
 .../dbsync/merge/CreateTableToModel.java        | 14 ++---
 .../cayenne/dbsync/merge/DropColumnToModel.java |  6 +-
 .../dbsync/merge/DropRelationshipToModel.java   |  2 +-
 .../cayenne/dbsync/merge/DropTableToModel.java  |  4 +-
 .../dbsync/merge/EntityMergeSupport.java        | 13 ++--
 .../cayenne/dbsync/merge/MergerContext.java     | 58 ++++++++++++++---
 .../cayenne/dbsync/merge/MergerToken.java       |  4 +-
 .../dbsync/merge/SetAllowNullToModel.java       |  2 +-
 .../dbsync/merge/SetColumnTypeToModel.java      |  2 +-
 .../cayenne/dbsync/merge/SetNotNullToModel.java |  2 +-
 .../dbsync/merge/SetPrimaryKeyToModel.java      |  2 +-
 .../naming/LegacyObjectNameGenerator.java       |  8 ++-
 .../dbsync/merge/EntityMergeSupportIT.java      |  4 +-
 .../tools/dbimport/DbImportConfiguration.java   | 15 +++--
 .../tools/dbimport/DefaultDbImportAction.java   | 22 +++++--
 .../modeler/action/CreateObjEntityAction.java   |  3 +-
 .../modeler/dialog/db/MergerOptions.java        |  6 +-
 19 files changed, 146 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddColumnToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddColumnToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddColumnToModel.java
index 30390ca..823a81d 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddColumnToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddColumnToModel.java
@@ -26,7 +26,6 @@ import org.apache.cayenne.map.ObjEntity;
 /**
  * A {@link MergerToken} to add a {@link DbAttribute} to a {@link DbEntity}. 
The
  * {@link EntityMergeSupport} will be used to update the mapped {@link 
ObjEntity}
- * 
  */
 public class AddColumnToModel extends AbstractToModelToken.EntityAndColumn {
 
@@ -34,22 +33,20 @@ public class AddColumnToModel extends 
AbstractToModelToken.EntityAndColumn {
         super("Add Column", entity, column);
     }
 
+    @Override
     public MergerToken createReverse(MergerTokenFactory factory) {
         return factory.createDropColumnToDb(getEntity(), getColumn());
     }
 
+    @Override
     public void execute(MergerContext mergerContext) {
         getEntity().addAttribute(getColumn());
 
-        // TODO: use EntityMergeSupport from DbImportConfiguration... 
otherwise we are ignoring a bunch of
-        // important settings
-
-        EntityMergeSupport entityMergeSupport =  new 
EntityMergeSupport(mergerContext.getDataMap());
-        for(ObjEntity e : getEntity().mappedObjEntities()) {
-            entityMergeSupport.synchronizeOnDbAttributeAdded(e, getColumn());
+        for (ObjEntity e : getEntity().mappedObjEntities()) {
+            
mergerContext.getEntityMergeSupport().synchronizeOnDbAttributeAdded(e, 
getColumn());
         }
 
-        mergerContext.getModelMergeDelegate().dbAttributeAdded(getColumn());
+        mergerContext.getDelegate().dbAttributeAdded(getColumn());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddRelationshipToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddRelationshipToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddRelationshipToModel.java
index f516a3e..5ae2d3f 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddRelationshipToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/AddRelationshipToModel.java
@@ -28,34 +28,15 @@ public class AddRelationshipToModel extends 
AbstractToModelToken.Entity {
 
     public static final String COMMA_SEPARATOR = ", ";
     public static final int COMMA_SEPARATOR_LENGTH = COMMA_SEPARATOR.length();
-    private DbRelationship rel;
 
-    public AddRelationshipToModel(DbEntity entity, DbRelationship rel) {
-        super("Add Relationship", entity);
-        this.rel = rel;
-    }
-
-    public MergerToken createReverse(MergerTokenFactory factory) {
-        return factory.createDropRelationshipToDb(getEntity(), rel);
-    }
-
-    public void execute(MergerContext mergerContext) {
-        getEntity().addRelationship(rel);
-        // TODO: add reverse relationship as well if it does not exist
-
-        // TODO: use EntityMergeSupport from DbImportConfiguration... 
otherwise we are ignoring a bunch of
-        // important settings
-
-        EntityMergeSupport entityMergeSupport =  new 
EntityMergeSupport(mergerContext.getDataMap());
-        for(ObjEntity e : getEntity().mappedObjEntities()) {
-            entityMergeSupport.synchronizeOnDbRelationshipAdded(e, rel);
-        }
+    private DbRelationship relationship;
 
-        mergerContext.getModelMergeDelegate().dbRelationshipAdded(rel);
+    public AddRelationshipToModel(DbEntity entity, DbRelationship 
relationship) {
+        super("Add Relationship", entity);
+        this.relationship = relationship;
     }
 
-    @Override
-    public String getTokenValue() {
+    public static String getTokenValue(DbRelationship rel) {
         String attributes = "";
         if (rel.getJoins().size() == 1) {
             attributes = rel.getJoins().get(0).getTargetName();
@@ -70,26 +51,38 @@ public class AddRelationshipToModel extends 
AbstractToModelToken.Entity {
         return rel.getName() + " " + rel.getSourceEntity().getName() + "->" + 
rel.getTargetEntityName() + "." + attributes;
     }
 
+    @Override
+    public MergerToken createReverse(MergerTokenFactory factory) {
+        return factory.createDropRelationshipToDb(getEntity(), relationship);
+    }
 
-    public static String getTokenValue(DbRelationship rel) {
+    @Override
+    public void execute(MergerContext context) {
+
+        getEntity().addRelationship(relationship);
+
+        // TODO: add reverse relationship as well if it does not exist
+
+        for (ObjEntity e : getEntity().mappedObjEntities()) {
+            
context.getEntityMergeSupport().synchronizeOnDbRelationshipAdded(e, 
relationship);
+        }
+
+        context.getDelegate().dbRelationshipAdded(relationship);
+    }
+
+    @Override
+    public String getTokenValue() {
         String attributes = "";
-        if (rel.getJoins().size() == 1) {
-            attributes = rel.getJoins().get(0).getTargetName();
+        if (relationship.getJoins().size() == 1) {
+            attributes = relationship.getJoins().get(0).getTargetName();
         } else {
-            for (DbJoin dbJoin : rel.getJoins()) {
+            for (DbJoin dbJoin : relationship.getJoins()) {
                 attributes += dbJoin.getTargetName() + COMMA_SEPARATOR;
             }
 
             attributes = "{" + attributes.substring(0, attributes.length() - 
COMMA_SEPARATOR_LENGTH) + "}";
         }
 
-        return rel.getName() + " " + rel.getSourceEntity().getName() + "->" + 
rel.getTargetEntityName() + "." + attributes;
+        return relationship.getName() + " " + 
relationship.getSourceEntity().getName() + "->" + 
relationship.getTargetEntityName() + "." + attributes;
     }
-
-    public DbRelationship getRelationship() {
-        return rel;
-    }
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/CreateTableToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/CreateTableToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/CreateTableToModel.java
index 436a1f5..98a8f3a 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/CreateTableToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/CreateTableToModel.java
@@ -53,10 +53,11 @@ public class CreateTableToModel extends 
AbstractToModelToken.Entity {
         objEntityClassName = n;
     }
 
-    public void execute(MergerContext mergerContext) {
+    @Override
+    public void execute(MergerContext context) {
         DbEntity dbEntity = getEntity();
 
-        DataMap map = mergerContext.getDataMap();
+        DataMap map = context.getDataMap();
         map.addDbEntity(dbEntity);
 
         // create a ObjEntity
@@ -94,13 +95,10 @@ public class CreateTableToModel extends 
AbstractToModelToken.Entity {
         map.addObjEntity(objEntity);
 
         // presumably there are no other ObjEntities pointing to this 
DbEntity, so syncing just this one...
+        context.getEntityMergeSupport().synchronizeWithDbEntity(objEntity);
 
-        // TODO: use EntityMergeSupport from DbImportConfiguration... 
otherwise we are ignoring a bunch of
-        // important settings
-        new EntityMergeSupport(map).synchronizeWithDbEntity(objEntity);
-
-        mergerContext.getModelMergeDelegate().dbEntityAdded(getEntity());
-        mergerContext.getModelMergeDelegate().objEntityAdded(objEntity);
+        context.getDelegate().dbEntityAdded(getEntity());
+        context.getDelegate().objEntityAdded(objEntity);
     }
 
     public MergerToken createReverse(MergerTokenFactory factory) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropColumnToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropColumnToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropColumnToModel.java
index ceb03bc..70d1b1c 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropColumnToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropColumnToModel.java
@@ -52,7 +52,7 @@ public class DropColumnToModel extends 
AbstractToModelToken.EntityAndColumn {
         for (DbRelationship dbRelationship : dbRelationships) {
             for (DbJoin join : dbRelationship.getJoins()) {
                 if (join.getSource() == getColumn() || join.getTarget() == 
getColumn()) {
-                    remove(mergerContext.getModelMergeDelegate(), 
dbRelationship, true);
+                    remove(mergerContext.getDelegate(), dbRelationship, true);
                 }
             }
         }
@@ -62,7 +62,7 @@ public class DropColumnToModel extends 
AbstractToModelToken.EntityAndColumn {
             ObjAttribute objAttribute = 
objEntity.getAttributeForDbAttribute(getColumn());
             if (objAttribute != null) {
                 objEntity.removeAttribute(objAttribute.getName());
-                
mergerContext.getModelMergeDelegate().objAttributeRemoved(objAttribute);
+                mergerContext.getDelegate().objAttributeRemoved(objAttribute);
             }
 
         }
@@ -70,6 +70,6 @@ public class DropColumnToModel extends 
AbstractToModelToken.EntityAndColumn {
         // remove DbAttribute
         getEntity().removeAttribute(getColumn().getName());
 
-        mergerContext.getModelMergeDelegate().dbAttributeRemoved(getColumn());
+        mergerContext.getDelegate().dbAttributeRemoved(getColumn());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModel.java
index 686df6e..082c33a 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModel.java
@@ -36,7 +36,7 @@ public class DropRelationshipToModel extends 
AbstractToModelToken.Entity {
     }
 
     public void execute(MergerContext mergerContext) {
-        remove(mergerContext.getModelMergeDelegate(), rel, true);
+        remove(mergerContext.getDelegate(), rel, true);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropTableToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropTableToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropTableToModel.java
index 7a47f37..3bdd8f3 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropTableToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DropTableToModel.java
@@ -41,9 +41,9 @@ public class DropTableToModel extends 
AbstractToModelToken.Entity {
     public void execute(MergerContext mergerContext) {
         for (ObjEntity objEntity : getEntity().mappedObjEntities()) {
             objEntity.getDataMap().removeObjEntity(objEntity.getName(), true);
-            mergerContext.getModelMergeDelegate().objEntityRemoved(objEntity);
+            mergerContext.getDelegate().objEntityRemoved(objEntity);
         }
         getEntity().getDataMap().removeDbEntity(getEntity().getName(), true);
-        mergerContext.getModelMergeDelegate().dbEntityRemoved(getEntity());
+        mergerContext.getDelegate().dbEntityRemoved(getEntity());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/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 e055883..c7fc8de 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
@@ -20,6 +20,9 @@
 package org.apache.cayenne.dbsync.merge;
 
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
+import org.apache.cayenne.dbsync.naming.NameCheckers;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -29,10 +32,6 @@ import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.dbsync.naming.DuplicateNameResolver;
-import org.apache.cayenne.dbsync.reverse.naming.LegacyObjectNameGenerator;
-import org.apache.cayenne.dbsync.naming.NameCheckers;
-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;
@@ -77,11 +76,7 @@ public class EntityMergeSupport {
     protected boolean removeMeaningfulFKs;
     protected boolean removeMeaningfulPKs;
     protected boolean usePrimitives;
-
-    public EntityMergeSupport(DataMap map) {
-        this(map, new LegacyObjectNameGenerator(), true);
-    }
-
+    
     /**
      * @since 3.0
      */

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
index 772de97..3605e10 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
@@ -20,6 +20,8 @@ package org.apache.cayenne.dbsync.merge;
 
 import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.reverse.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.validation.ValidationResult;
 
@@ -36,12 +38,16 @@ public class MergerContext {
     private DataNode dataNode;
     private ValidationResult validationResult;
     private ModelMergeDelegate delegate;
+    private EntityMergeSupport entityMergeSupport;
 
     protected MergerContext() {
     }
 
+    /**
+     * @since 4.0
+     */
     public static Builder builder(DataMap dataMap) {
-        return new Builder().dataMap(dataMap);
+        return new Builder(dataMap);
     }
 
     /**
@@ -53,6 +59,13 @@ public class MergerContext {
     }
 
     /**
+     * @since 4.0
+     */
+    public EntityMergeSupport getEntityMergeSupport() {
+        return entityMergeSupport;
+    }
+
+    /**
      * Returns the DataMap that is the target of a the merge operation.
      *
      * @return the DataMap that is the target of a the merge operation.
@@ -73,23 +86,46 @@ public class MergerContext {
      * Returns a callback object that is invoked as the merge proceeds through 
tokens, modifying the DataMap.
      *
      * @return a callback object that is invoked as the merge proceeds through 
tokens, modifying the DataMap.
+     * @since 4.0
      */
-    public ModelMergeDelegate getModelMergeDelegate() {
+    public ModelMergeDelegate getDelegate() {
         return delegate;
     }
 
+    /**
+     * @deprecated since 4.0 in favor of {@link #getDelegate()}.
+     */
+    @Deprecated
+    public ModelMergeDelegate getModelMergeDelegate() {
+        return getDelegate();
+    }
+
     public static class Builder {
 
         private MergerContext context;
 
-        private Builder() {
+        private Builder(DataMap dataMap) {
             this.context = new MergerContext();
+            this.context.dataMap = Objects.requireNonNull(dataMap);
             this.context.validationResult = new ValidationResult();
-            this.context.delegate = new DefaultModelMergeDelegate();
-            this.context.dataNode = new DataNode();
         }
 
         public MergerContext build() {
+
+            // init missing defaults ...
+
+            if (context.entityMergeSupport == null) {
+                nameGenerator(new DefaultObjectNameGenerator());
+            }
+
+            if (context.delegate == null) {
+                delegate(new DefaultModelMergeDelegate());
+            }
+
+            if (context.dataNode == null) {
+                dataNode(new DataNode());
+            }
+
             return context;
         }
 
@@ -98,6 +134,13 @@ public class MergerContext {
             return this;
         }
 
+        public Builder nameGenerator(ObjectNameGenerator nameGenerator) {
+            context.entityMergeSupport = new 
EntityMergeSupport(context.getDataMap(),
+                    Objects.requireNonNull(nameGenerator),
+                    true);  // should the last argument also be a part of the 
builder?
+            return this;
+        }
+
         public Builder dataNode(DataNode dataNode) {
             this.context.dataNode = Objects.requireNonNull(dataNode);
             return this;
@@ -109,10 +152,5 @@ public class MergerContext {
             dataNode.setAdapter(adapter);
             return dataNode(dataNode);
         }
-
-        public Builder dataMap(DataMap dataMap) {
-            context.dataMap = Objects.requireNonNull(dataMap);
-            return this;
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerToken.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerToken.java 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerToken.java
index 5359b62..5088f97 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerToken.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerToken.java
@@ -46,8 +46,8 @@ public interface MergerToken {
     /**
      * Executes synchronization operation.
      *
-     * @param mergerContext operation context.
+     * @param context merge operation context.
      */
-    void execute(MergerContext mergerContext);
+    void execute(MergerContext context);
 
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetAllowNullToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetAllowNullToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetAllowNullToModel.java
index 71a0937..5d9c890 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetAllowNullToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetAllowNullToModel.java
@@ -38,6 +38,6 @@ public class SetAllowNullToModel extends 
AbstractToModelToken.EntityAndColumn {
 
     public void execute(MergerContext mergerContext) {
         getColumn().setMandatory(false);
-        mergerContext.getModelMergeDelegate().dbAttributeModified(getColumn());
+        mergerContext.getDelegate().dbAttributeModified(getColumn());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetColumnTypeToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetColumnTypeToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetColumnTypeToModel.java
index 262c3a6..cf2b1e0 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetColumnTypeToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetColumnTypeToModel.java
@@ -50,7 +50,7 @@ public class SetColumnTypeToModel extends 
AbstractToModelToken.Entity {
         columnOriginal.setMaxLength(columnNew.getMaxLength());
         
columnOriginal.setAttributePrecision(columnNew.getAttributePrecision());
         columnOriginal.setScale(columnNew.getScale());
-        
mergerContext.getModelMergeDelegate().dbAttributeModified(columnOriginal);
+        mergerContext.getDelegate().dbAttributeModified(columnOriginal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetNotNullToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetNotNullToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetNotNullToModel.java
index 9ae95b5..7402f57 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetNotNullToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetNotNullToModel.java
@@ -38,6 +38,6 @@ public class SetNotNullToModel extends 
AbstractToModelToken.EntityAndColumn {
 
     public void execute(MergerContext mergerContext) {
         getColumn().setMandatory(true);
-        mergerContext.getModelMergeDelegate().dbAttributeModified(getColumn());
+        mergerContext.getDelegate().dbAttributeModified(getColumn());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToModel.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToModel.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToModel.java
index 6785a2f..198fe4f 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToModel.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToModel.java
@@ -69,7 +69,7 @@ public class SetPrimaryKeyToModel extends 
AbstractToModelToken.Entity {
             if (wasPrimaryKey != willBePrimaryKey) {
                 attr.setPrimaryKey(willBePrimaryKey);
                 e.dbAttributeChanged(new AttributeEvent(this, attr, e));
-                
mergerContext.getModelMergeDelegate().dbAttributeModified(attr);
+                mergerContext.getDelegate().dbAttributeModified(attr);
             }
 
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/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 1c52a6e..986b192 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
@@ -25,13 +25,14 @@ import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.util.Util;
 
 /**
- * BasicNamingStrategy is an naming strategy that creates names in Cayenne's
- * old-fashioned manner, i.e. the same way Cayenne did before 3.0
+ * An ObjectNameGenerator that creates names in Cayenne's old-fashioned style. 
I.e. the same way Cayenne did before 3.0,
+ * with "to" prefixes and "array" suffixes.
  *
  * @since 4.0
  */
 public class LegacyObjectNameGenerator implements ObjectNameGenerator {
 
+    @Override
     public String createDbRelationshipName(
             ExportedKey key,
             boolean toMany) {
@@ -40,14 +41,17 @@ public class LegacyObjectNameGenerator implements 
ObjectNameGenerator {
         return Util.underscoredToJava(uglyName, false);
     }
 
+    @Override
     public String createObjEntityName(DbEntity dbEntity) {
         return Util.underscoredToJava(dbEntity.getName(), true);
     }
 
+    @Override
     public String createObjAttributeName(DbAttribute attr) {
         return Util.underscoredToJava(attr.getName(), false);
     }
 
+    @Override
     public String createObjRelationshipName(DbRelationship dbRel) {
         return Util.underscoredToJava(dbRel.getName(), false);
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
index d63c6a4..d21b58c 100644
--- 
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
+++ 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.dbsync.merge;
 
+import org.apache.cayenne.dbsync.reverse.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbJoin;
@@ -86,7 +87,8 @@ public class EntityMergeSupportIT extends MergeCase {
                objEntity2.setDbEntity(dbEntity2);
                map.addObjEntity(objEntity2);
 
-               assertTrue(new 
EntityMergeSupport(map).synchronizeWithDbEntities(Arrays.asList(objEntity1, 
objEntity2)));
+               assertTrue(new EntityMergeSupport(map, new 
DefaultObjectNameGenerator(), true)
+                               
.synchronizeWithDbEntities(Arrays.asList(objEntity1, objEntity2)));
                assertNotNull(objEntity1.getAttribute("name"));
                assertNotNull(objEntity1.getRelationship("rel1To2"));
                assertNotNull(objEntity2.getRelationship("rel2To1"));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/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 e45cdf9..57953c5 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
@@ -35,11 +35,11 @@ import 
org.apache.cayenne.dbsync.reverse.db.DefaultDbLoaderDelegate;
 import org.apache.cayenne.dbsync.reverse.db.LoggingDbLoaderDelegate;
 import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
 import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.dbsync.reverse.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
-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;
 
@@ -163,23 +163,28 @@ public class DbImportConfiguration {
             }
         };
 
-        // TODO: load via DI AdhocObjectFactory
+
         loader.setNameGenerator(getNameGenerator());
 
         return loader;
     }
 
     public ObjectNameGenerator getNameGenerator() {
+
+        // TODO: load via DI AdhocObjectFactory
+
+        // TODO: not a singleton; called from different places...
+
         String namingStrategy = getNamingStrategy();
         if (namingStrategy != null) {
             try {
                 return (ObjectNameGenerator) 
Class.forName(namingStrategy).newInstance();
             } catch (Exception e) {
-                throw new CayenneRuntimeException("Error creating name 
generator", e);
+                throw new CayenneRuntimeException("Error creating name 
generator: " + namingStrategy, e);
             }
         }
 
-        return new LegacyObjectNameGenerator(); // TODO
+        return new DefaultObjectNameGenerator();
     }
 
     public String getDriver() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
index 7d17fd7..e7adb7c 100644
--- 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
+++ 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
@@ -33,6 +33,7 @@ import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
 import org.apache.cayenne.dbsync.merge.ProxyModelMergeDelegate;
 import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
 import org.apache.cayenne.dbsync.reverse.db.DbLoader;
+import org.apache.cayenne.dbsync.reverse.naming.ObjectNameGenerator;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.EntityResolver;
@@ -154,14 +155,19 @@ public class DefaultDbImportAction implements 
DbImportAction {
             }
 
             final Collection<ObjEntity> loadedObjEntities = new LinkedList<>();
-            DataMap executed = execute(new 
ProxyModelMergeDelegate(config.createMergeDelegate()) {
+
+            ModelMergeDelegate delegate = new 
ProxyModelMergeDelegate(config.createMergeDelegate()) {
                 @Override
                 public void objEntityAdded(ObjEntity ent) {
                     loadedObjEntities.add(ent);
                     super.objEntityAdded(ent);
                 }
+            };
 
-            }, existing, log(sort(reverse(mergerTokenFactory, mergeTokens))));
+            DataMap executed = execute(delegate,
+                    existing,
+                    log(sort(reverse(mergerTokenFactory, mergeTokens))),
+                    config.getNameGenerator());
 
             DbLoader.flattenManyToManyRelationships(executed, 
loadedObjEntities, config.getNameGenerator());
             relationshipsSanity(executed);
@@ -226,9 +232,15 @@ public class DefaultDbImportAction implements 
DbImportAction {
     /**
      * Performs configured schema operations via DbGenerator.
      */
-    private DataMap execute(ModelMergeDelegate mergeDelegate, DataMap dataMap, 
Collection<MergerToken> tokens) {
-
-        MergerContext mergerContext = 
MergerContext.builder(dataMap).delegate(mergeDelegate).build();
+    private DataMap execute(ModelMergeDelegate mergeDelegate,
+                            DataMap dataMap,
+                            Collection<MergerToken> tokens,
+                            ObjectNameGenerator nameGenerator) {
+
+        MergerContext mergerContext = MergerContext.builder(dataMap)
+                .delegate(mergeDelegate)
+                .nameGenerator(nameGenerator)
+                .build();
 
         for (MergerToken token : tokens) {
             try {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/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 254f18e..8a2bd4b 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
@@ -24,6 +24,7 @@ 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.dbsync.reverse.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
@@ -92,7 +93,7 @@ public class CreateObjEntityAction extends CayenneAction {
         dataMap.addObjEntity(entity);
 
         // perform the merge
-        EntityMergeSupport merger = new EntityMergeSupport(dataMap);
+        EntityMergeSupport merger = new EntityMergeSupport(dataMap, new 
DefaultObjectNameGenerator(), true);
         
merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
         merger.synchronizeWithDbEntity(entity);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/603117cd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
index b8e2a08..271fd9b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
@@ -409,8 +409,10 @@ public class MergerOptions extends CayenneController {
             DataSource dataSource = 
connectionInfo.makeDataSource(getApplication()
                     .getClassLoadingService());
 
-            MergerContext mergerContext = 
MergerContext.builder(dataMap).syntheticDataNode(dataSource, adapter)
-                    .delegate(delegate).build();
+            MergerContext mergerContext = MergerContext.builder(dataMap)
+                    .syntheticDataNode(dataSource, adapter)
+                    .delegate(delegate)
+                    .build();
 
             boolean modelChanged = false;
             for (MergerToken tok : tokensToMigrate) {

Reply via email to