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/10/04 12:45:35 UTC

[7/7] cayenne git commit: CAY-2114 cdbimport: object layer settings are not respected

 CAY-2114 cdbimport: object layer settings are not respected

* will respect meaningful PK filter


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

Branch: refs/heads/master
Commit: 1455622fad83db8d181e2dfb0ba5f6efeeeae37e
Parents: 0ab7948
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Oct 4 14:16:48 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Oct 4 15:45:16 2016 +0300

----------------------------------------------------------------------
 .../dbsync/filter/NamePatternMatcher.java       |  8 ++++
 .../dbsync/merge/EntityMergeSupport.java        | 47 +++++++-------------
 .../cayenne/dbsync/merge/MergerContext.java     | 14 +++++-
 .../dbsync/merge/EntityMergeSupportIT.java      |  3 +-
 .../tools/dbimport/DbImportConfiguration.java   | 21 ++++++++-
 .../tools/dbimport/DefaultDbImportAction.java   |  4 ++
 .../dbimport/DefaultDbImportActionTest.java     |  2 +
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 .../modeler/action/CreateObjEntityAction.java   |  9 ++--
 .../modeler/action/DbEntitySyncAction.java      |  2 +
 .../dialog/objentity/EntitySyncController.java  |  9 ++--
 11 files changed, 77 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
index 211b62e..1e3757a 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/filter/NamePatternMatcher.java
@@ -35,6 +35,14 @@ import java.util.regex.PatternSyntaxException;
  */
 public class NamePatternMatcher implements NameFilter {
 
+    public static final NameFilter EXCLUDE_ALL = new NameFilter() {
+
+        @Override
+        public boolean isIncluded(String obj) {
+            return false;
+        }
+    };
+
     private static final String[] EMPTY_ARRAY = new String[0];
     private static final Pattern COMMA = Pattern.compile(",");
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 c0d46d7..978ba41 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
@@ -19,6 +19,7 @@
 package org.apache.cayenne.dbsync.merge;
 
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.dbsync.filter.NameFilter;
 import org.apache.cayenne.dbsync.naming.NameBuilder;
 import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
@@ -65,18 +66,18 @@ public class EntityMergeSupport {
     private final ObjectNameGenerator nameGenerator;
     private final List<EntityMergeListener> listeners;
     private final boolean removingMeaningfulFKs;
-    private final boolean removingMeaningfulPKs;
+    private final NameFilter meaningfulPKsFilter;
     private final boolean usingPrimitives;
 
     public EntityMergeSupport(ObjectNameGenerator nameGenerator,
-                              boolean removingMeaningfulPKs,
+                              NameFilter meaningfulPKsFilter,
                               boolean removingMeaningfulFKs,
                               boolean usingPrimitives) {
 
         this.listeners = new ArrayList<>();
         this.nameGenerator = nameGenerator;
         this.removingMeaningfulFKs = removingMeaningfulFKs;
-        this.removingMeaningfulPKs = removingMeaningfulPKs;
+        this.meaningfulPKsFilter = meaningfulPKsFilter;
         this.usingPrimitives = usingPrimitives;
 
         // will ensure that all created ObjRelationships would have
@@ -88,9 +89,6 @@ public class EntityMergeSupport {
         return removingMeaningfulFKs;
     }
 
-    public boolean isRemovingMeaningfulPKs() {
-        return removingMeaningfulPKs;
-    }
 
     /**
      * Updates each one of the collection of ObjEntities, adding attributes and
@@ -110,20 +108,6 @@ public class EntityMergeSupport {
     }
 
     /**
-     * @since 4.0
-     */
-    protected boolean removePK(DbEntity dbEntity) {
-        return removingMeaningfulPKs;
-    }
-
-    /**
-     * @since 4.0
-     */
-    protected boolean removeFK(DbEntity dbEntity) {
-        return removingMeaningfulFKs;
-    }
-
-    /**
      * Updates ObjEntity attributes and relationships based on the current state
      * of its DbEntity.
      *
@@ -142,7 +126,7 @@ public class EntityMergeSupport {
 
         boolean changed = false;
 
-        if (removeFK(dbEntity)) {
+        if (removingMeaningfulFKs) {
             changed = getRidOfAttributesThatAreNowSrcAttributesForRelationships(entity);
         }
 
@@ -158,7 +142,7 @@ public class EntityMergeSupport {
     public boolean synchronizeOnDbAttributeAdded(ObjEntity entity, DbAttribute dbAttribute) {
 
         Collection<DbRelationship> incomingRels = getIncomingRelationships(dbAttribute.getEntity());
-        if (isMissingFromObjEntity(entity, dbAttribute, incomingRels)) {
+        if (shouldAddToObjEntity(entity, dbAttribute, incomingRels)) {
             addMissingAttribute(entity, dbAttribute);
             return true;
         }
@@ -171,7 +155,7 @@ public class EntityMergeSupport {
      */
     public boolean synchronizeOnDbRelationshipAdded(ObjEntity entity, DbRelationship dbRelationship) {
 
-        if (isMissingFromObjEntity(entity, dbRelationship)) {
+        if (shouldAddToObjEntity(entity, dbRelationship)) {
             addMissingRelationship(entity, dbRelationship);
         }
 
@@ -336,7 +320,7 @@ public class EntityMergeSupport {
 
         for (DbAttribute dba : dbEntity.getAttributes()) {
 
-            if (isMissingFromObjEntity(objEntity, dba, incomingRels)) {
+            if (shouldAddToObjEntity(objEntity, dba, incomingRels)) {
                 missing.add(dba);
             }
         }
@@ -344,14 +328,15 @@ public class EntityMergeSupport {
         return missing;
     }
 
-    protected boolean isMissingFromObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) {
+    protected boolean shouldAddToObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) {
 
         if (dbAttribute.getName() == null || entity.getAttributeForDbAttribute(dbAttribute) != null) {
             return false;
         }
 
-        boolean removeMeaningfulPKs = removePK(dbAttribute.getEntity());
-        if (removeMeaningfulPKs && dbAttribute.isPrimaryKey()) {
+        boolean addMeaningfulPK = meaningfulPKsFilter.isIncluded(entity.getDbEntityName());
+
+        if (dbAttribute.isPrimaryKey() && !addMeaningfulPK) {
             return false;
         }
 
@@ -368,7 +353,7 @@ public class EntityMergeSupport {
             }
         }
 
-        if (!removeMeaningfulPKs) {
+        if (addMeaningfulPK) {
             if (!dbAttribute.isPrimaryKey() && isFK) {
                 return false;
             }
@@ -390,7 +375,7 @@ public class EntityMergeSupport {
             }
         }
 
-        if (!removeMeaningfulPKs) {
+        if (addMeaningfulPK) {
             if (!dbAttribute.isPrimaryKey() && isFK) {
                 return false;
             }
@@ -403,7 +388,7 @@ public class EntityMergeSupport {
         return true;
     }
 
-    protected boolean isMissingFromObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
+    protected boolean shouldAddToObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
         return dbRelationship.getName() != null && entity.getRelationshipForDbRelationship(dbRelationship) == null;
     }
 
@@ -431,7 +416,7 @@ public class EntityMergeSupport {
     protected List<DbRelationship> getRelationshipsToAdd(ObjEntity objEntity) {
         List<DbRelationship> missing = new ArrayList<DbRelationship>();
         for (DbRelationship dbRel : objEntity.getDbEntity().getRelationships()) {
-            if (isMissingFromObjEntity(objEntity, dbRel)) {
+            if (shouldAddToObjEntity(objEntity, dbRel)) {
                 missing.add(dbRel);
             }
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 cf7f7fb..1ae9337 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.filter.NameFilter;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
@@ -105,6 +107,7 @@ public class MergerContext {
         private MergerContext context;
         private ObjectNameGenerator nameGenerator;
         private boolean usingPrimitives;
+        private NameFilter meaningfulPKsFilter;
 
         private Builder(DataMap dataMap) {
             this.context = new MergerContext();
@@ -128,7 +131,11 @@ public class MergerContext {
                 nameGenerator = new DefaultObjectNameGenerator();
             }
 
-            context.entityMergeSupport = new EntityMergeSupport(nameGenerator, true, true, usingPrimitives);
+            if(meaningfulPKsFilter == null) {
+                meaningfulPKsFilter = NamePatternMatcher.EXCLUDE_ALL;
+            }
+
+            context.entityMergeSupport = new EntityMergeSupport(nameGenerator, meaningfulPKsFilter, true, usingPrimitives);
 
             return context;
         }
@@ -153,6 +160,11 @@ public class MergerContext {
             return this;
         }
 
+        public Builder meaningfulPKFilter(NameFilter filter) {
+            this.meaningfulPKsFilter = Objects.requireNonNull(filter);
+            return this;
+        }
+
         public Builder syntheticDataNode(DataSource dataSource, DbAdapter adapter) {
             DataNode dataNode = new DataNode();
             dataNode.setDataSource(dataSource);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 b47ac20..9f6e002 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.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -87,7 +88,7 @@ public class EntityMergeSupportIT extends MergeCase {
 		objEntity2.setDbEntity(dbEntity2);
 		map.addObjEntity(objEntity2);
 
-		assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true)
+		assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, true)
 				.synchronizeWithDbEntities(Arrays.asList(objEntity1, objEntity2)));
 		assertNotNull(objEntity1.getAttribute("name"));
 		assertNotNull(objEntity1.getRelationship("rel1To2"));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 931df78..2b62b06 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
@@ -22,6 +22,8 @@ import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.conn.DataSourceInfo;
 import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.merge.DefaultModelMergeDelegate;
 import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
 import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
@@ -43,6 +45,7 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.sql.Connection;
 import java.util.Collections;
+import java.util.regex.Pattern;
 
 /**
  * @since 4.0
@@ -140,6 +143,22 @@ public class DbImportConfiguration {
         return new DbLoader(connection, adapter, loaderDelegate, getNameGenerator());
     }
 
+    public NameFilter getMeaningfulPKFilter() {
+
+        if (meaningfulPkTables == null) {
+            return NamePatternMatcher.EXCLUDE_ALL;
+        }
+
+        // TODO: this filter can't handle table names with comma in them
+        String[] patternStrings = meaningfulPkTables.split(",");
+        Pattern[] patterns = new Pattern[patternStrings.length];
+        for (int i = 0; i < patterns.length; i++) {
+            patterns[i] = Pattern.compile(patternStrings[i]);
+        }
+
+        return new NamePatternMatcher(patterns, new Pattern[0]);
+    }
+
     public ObjectNameGenerator getNameGenerator() {
 
         // TODO: load via DI AdhocObjectFactory
@@ -205,7 +224,7 @@ public class DbImportConfiguration {
 
         DataMap dataMap = new DataMap();
         initializeDataMap(dataMap);
-        return  dataMap;
+        return dataMap;
     }
 
     protected void initializeDataMap(DataMap dataMap) throws MalformedURLException {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 6ce01f9..df548c3 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
@@ -23,6 +23,7 @@ import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.configuration.server.DataSourceFactory;
 import org.apache.cayenne.configuration.server.DbAdapterFactory;
 import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.filter.NameFilter;
 import org.apache.cayenne.dbsync.merge.AbstractToModelToken;
 import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
 import org.apache.cayenne.dbsync.merge.DbMerger;
@@ -159,6 +160,7 @@ public class DefaultDbImportAction implements DbImportAction {
                 targetDataMap,
                 log(sort(reverse(mergerTokenFactory, tokens))),
                 config.getNameGenerator(),
+                config.getMeaningfulPKFilter(),
                 config.isUsePrimitives());
 
         if (hasChanges) {
@@ -239,6 +241,7 @@ public class DefaultDbImportAction implements DbImportAction {
                                 DataMap targetDataMap,
                                 Collection<MergerToken> tokens,
                                 ObjectNameGenerator nameGenerator,
+                                NameFilter meaningfulPKFilter,
                                 boolean usingPrimitives) {
 
         if (tokens.isEmpty()) {
@@ -261,6 +264,7 @@ public class DefaultDbImportAction implements DbImportAction {
                 .delegate(mergeDelegate)
                 .nameGenerator(nameGenerator)
                 .usingPrimitives(usingPrimitives)
+                .meaningfulPKFilter(meaningfulPKFilter)
                 .build();
 
         for (MergerToken token : tokens) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
index cbe8156..1bf48c7 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.configuration.server.DataSourceFactory;
 import org.apache.cayenne.configuration.server.DbAdapterFactory;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dbsync.CayenneDbSyncModule;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.merge.AddColumnToDb;
 import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
 import org.apache.cayenne.dbsync.merge.CreateTableToDb;
@@ -171,6 +172,7 @@ public class DefaultDbImportActionTest {
         when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate());
         when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration());
         when(params.getNameGenerator()).thenReturn(new DefaultObjectNameGenerator());
+        when(params.getMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
 
         final boolean[] haveWeTriedToSave = {false};
         DefaultDbImportAction action = buildDbImportAction(new FileProjectSaver() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 64b3e71..40a2cb7 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -32,6 +32,7 @@ CAY-2107 cayenne-crypto: Lazy initialization of crypto subsystem
 CAY-2111 Unbind transaction object from the current thread for iterated queries
 CAY-2112 Expose callback for "performInTransaction"
 CAY-2113 cdbimport: Reverse-engineering reinstates previously ignored columns
+CAY-2114 cdbimport: object layer settings are not respected
 CAY-2115 DbLoader - allow loading DataMap without Obj layer
 CAY-2116 Split schema synchronization code in a separate module
 CAY-2118 cdbimport: drop support for the old style of table filtering

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/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 8602415..eb084fc 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
@@ -20,9 +20,10 @@ package org.apache.cayenne.modeler.action;
 
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
-import org.apache.cayenne.dbsync.naming.NameBuilder;
 import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NameBuilder;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
@@ -82,9 +83,7 @@ public class CreateObjEntityAction extends CayenneAction {
 
         DataMap dataMap = mediator.getCurrentDataMap();
         ObjEntity entity = new ObjEntity();
-        entity.setName(NameBuilder
-                .builder(entity, dataMap)
-                .name());
+        entity.setName(NameBuilder.builder(entity, dataMap).name());
 
         // init defaults
         entity.setSuperClassName(dataMap.getDefaultSuperclass());
@@ -112,7 +111,7 @@ public class CreateObjEntityAction extends CayenneAction {
         dataMap.addObjEntity(entity);
 
         // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
-        EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true);
+        EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, true);
         merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
         merger.synchronizeWithDbEntity(entity);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
index 5a5f346..b8495df 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
@@ -89,6 +89,8 @@ public class DbEntitySyncAction extends CayenneAction {
 
 				merger.addEntityMergeListener(listener);
 
+				// TODO: addition or removal of model objects should be reflected in listener callbacks...
+				// we should not be trying to introspect the merger
 				if (merger.isRemovingMeaningfulFKs()) {
 					undoableEdit.addEdit(undoableEdit.new MeaningfulFKsUndoableEdit(entity, merger
 							.getMeaningfulFKs(entity)));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1455622f/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
index e02080c..f13a5b9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/EntitySyncController.java
@@ -19,10 +19,11 @@
 
 package org.apache.cayenne.modeler.dialog.objentity;
 
+import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
+import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
 
@@ -69,7 +70,7 @@ public class EntitySyncController extends CayenneController {
         }
 
         // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
-        EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true, true);
+        EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, NamePatternMatcher.EXCLUDE_ALL, true, true);
 
         // see if we need to remove meaningful attributes...
         for (ObjEntity entity : entities) {
@@ -114,8 +115,8 @@ public class EntitySyncController extends CayenneController {
         makeCloseableOnEscape();
         view.setVisible(true);
 
-        // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
-        return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0], true);
+        // TODO: Modeler-controlled defaults for all the hardcoded flags here.
+        return cancel[0] ? null : new EntityMergeSupport(namingStrategy, NamePatternMatcher.EXCLUDE_ALL, removeFKs[0], true);
     }
 
     @Override