CAY-2114 cdbimport: object layer settings are not respected * support for proper flags in EntityMergeSupport
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3a5f31d1 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3a5f31d1 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3a5f31d1 Branch: refs/heads/master Commit: 3a5f31d17e2a1cd2e108aa1b43ce8cbd468b421c Parents: 6a1eb0f Author: Andrus Adamchik <and...@objectstyle.com> Authored: Tue Oct 4 13:51:07 2016 +0300 Committer: Andrus Adamchik <and...@objectstyle.com> Committed: Tue Oct 4 13:51:07 2016 +0300 ---------------------------------------------------------------------- .../dbsync/merge/EntityMergeSupport.java | 54 +++++++++----------- .../cayenne/dbsync/merge/MergerContext.java | 16 +++++- .../dbsync/merge/EntityMergeSupportIT.java | 2 +- .../modeler/action/CreateObjEntityAction.java | 4 +- .../dialog/objentity/EntitySyncController.java | 6 ++- 5 files changed, 46 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/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 bf54dcc..c0d46d7 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 @@ -1,22 +1,21 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ package org.apache.cayenne.dbsync.merge; import org.apache.cayenne.dba.TypesMapping; @@ -65,15 +64,20 @@ public class EntityMergeSupport { private final ObjectNameGenerator nameGenerator; private final List<EntityMergeListener> listeners; - protected boolean removingMeaningfulFKs; - protected boolean removingMeaningfulPKs; - protected boolean usingPrimitives; + private final boolean removingMeaningfulFKs; + private final boolean removingMeaningfulPKs; + private final boolean usingPrimitives; + + public EntityMergeSupport(ObjectNameGenerator nameGenerator, + boolean removingMeaningfulPKs, + boolean removingMeaningfulFKs, + boolean usingPrimitives) { - public EntityMergeSupport(ObjectNameGenerator nameGenerator, boolean removingMeaningfulPKs, boolean removingMeaningfulFKs) { this.listeners = new ArrayList<>(); this.nameGenerator = nameGenerator; this.removingMeaningfulFKs = removingMeaningfulFKs; this.removingMeaningfulPKs = removingMeaningfulPKs; + this.usingPrimitives = usingPrimitives; // will ensure that all created ObjRelationships would have // default delete rule @@ -487,12 +491,4 @@ public class EntityMergeSupport { public boolean isUsingPrimitives() { return usingPrimitives; } - - /** - * @param usingPrimitives - * @since 4.0 - */ - public void setUsingPrimitives(boolean usingPrimitives) { - this.usingPrimitives = usingPrimitives; - } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/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 57eab3e..53c5265 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 @@ -103,6 +103,8 @@ public class MergerContext { public static class Builder { private MergerContext context; + private ObjectNameGenerator nameGenerator; + private boolean usingPrimitives; private Builder(DataMap dataMap) { this.context = new MergerContext(); @@ -126,6 +128,12 @@ public class MergerContext { dataNode(new DataNode()); } + if(nameGenerator == null) { + nameGenerator = new DefaultObjectNameGenerator(); + } + + context.entityMergeSupport = new EntityMergeSupport(nameGenerator, true, true, usingPrimitives); + return context; } @@ -135,8 +143,12 @@ public class MergerContext { } public Builder nameGenerator(ObjectNameGenerator nameGenerator) { - // should the last argument also be a part of the builder? - context.entityMergeSupport = new EntityMergeSupport(Objects.requireNonNull(nameGenerator), true, true); + this.nameGenerator = Objects.requireNonNull(nameGenerator); + return this; + } + + public Builder usingPrimitives(boolean flag) { + this.usingPrimitives = flag; return this; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/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 bc24100..b47ac20 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 @@ -87,7 +87,7 @@ public class EntityMergeSupportIT extends MergeCase { objEntity2.setDbEntity(dbEntity2); map.addObjEntity(objEntity2); - assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true) + assertTrue(new EntityMergeSupport(new DefaultObjectNameGenerator(), true, 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/3a5f31d1/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 af43556..8602415 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 @@ -111,8 +111,8 @@ public class CreateObjEntityAction extends CayenneAction { dataMap.addObjEntity(entity); - // perform the merge - EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true); + // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here. + EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), true, true, true); merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener()); merger.synchronizeWithDbEntity(entity); http://git-wip-us.apache.org/repos/asf/cayenne/blob/3a5f31d1/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 ce2193e..e02080c 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 @@ -68,7 +68,8 @@ public class EntitySyncController extends CayenneController { namingStrategy = NameGeneratorPreferences.defaultNameGenerator(); } - EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true); + // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here. + EntityMergeSupport merger = new EntityMergeSupport(namingStrategy, true, true, true); // see if we need to remove meaningful attributes... for (ObjEntity entity : entities) { @@ -113,7 +114,8 @@ public class EntitySyncController extends CayenneController { makeCloseableOnEscape(); view.setVisible(true); - return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0]); + // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here. + return cancel[0] ? null : new EntityMergeSupport(namingStrategy, true, removeFKs[0], true); } @Override