This is an automated email from the ASF dual-hosted git repository.

abulatski pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.1 by this push:
     new 69e19ea  Show warning when find duplicated entity names.
69e19ea is described below

commit 69e19ea0a0c8ba7e939cceca87b61ae3d6171438
Author: Arseni Bulatski <ancars...@gmail.com>
AuthorDate: Tue Apr 2 13:14:14 2019 +0300

    Show warning when find duplicated entity names.
---
 .../org/apache/cayenne/map/EntityResolver.java     | 53 +++++++++++++++++-----
 .../apache/cayenne/modeler/ProjectController.java  | 34 +++++++-------
 2 files changed, 58 insertions(+), 29 deletions(-)

diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java 
b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
index 45f74e9..aa05e8f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
@@ -19,10 +19,16 @@
 
 package org.apache.cayenne.map;
 
-import org.apache.cayenne.ObjectId;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicLong;
+
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
-import org.apache.cayenne.query.Query;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.ClassDescriptorMap;
 import org.apache.cayenne.reflect.FaultFactory;
@@ -33,15 +39,6 @@ import 
org.apache.cayenne.reflect.valueholder.ValueHolderDescriptorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicLong;
-
 /**
  * Represents a virtual shared namespace for zero or more DataMaps. Unlike
  * DataMap, EntityResolver is intended to work as a runtime container of
@@ -360,6 +357,7 @@ public class EntityResolver implements MappingNamespace, 
Serializable {
 
     public synchronized void addDataMap(DataMap map) {
         if (!maps.contains(map)) {
+            checkForDuplicatedNames(map);
             maps.add(map);
             map.setNamespace(this);
             refreshMappingCache();
@@ -372,6 +370,39 @@ public class EntityResolver implements MappingNamespace, 
Serializable {
         }
     }
 
+    private void checkForDuplicatedNames(DataMap map) {
+        for(DbEntity entity : map.getDbEntities()) {
+            DbEntity foundDbEntity = getDbEntity(entity.getName());
+            if(foundDbEntity != null) {
+                processWarning(entity.getName(), map.getName(), 
foundDbEntity.getDataMap().getName());
+            }
+        }
+        for(ObjEntity entity : map.getObjEntities()) {
+            ObjEntity foundObjEntity = getObjEntity(entity.getName());
+            if(foundObjEntity != null) {
+                processWarning(entity.getName(), map.getName(), 
foundObjEntity.getDataMap().getName());
+            }
+        }
+        for(Procedure procedure : map.getProcedures()) {
+            Procedure foundProcedure = getProcedure(procedure.getName());
+            if(foundProcedure != null) {
+                processWarning(procedure.getName(), map.getName(), 
foundProcedure.getDataMap().getName());
+            }
+        }
+        for(Embeddable embeddable : map.getEmbeddables()) {
+            Embeddable foundEmbeddable = 
getEmbeddable(embeddable.getClassName());
+            if(foundEmbeddable != null) {
+                processWarning(embeddable.getClassName(), map.getName(), 
foundEmbeddable.getDataMap().getName());
+            }
+        }
+    }
+
+    private void processWarning(String duplicatedName, String dataMapName, 
String originalDataMapName) {
+        logger.warn("Duplicated name " + duplicatedName + " was found in " +
+                dataMapName + ". This name was also found in " +
+                originalDataMapName + ".");
+    }
+
     /**
      * Refreshes entity cache to reflect the current state of the DataMaps in
      * the EntityResolver.
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
index b442daf..e40df52 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
@@ -19,6 +19,20 @@
 
 package org.apache.cayenne.modeler;
 
+import javax.swing.event.EventListenerList;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventListener;
+import java.util.EventObject;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.prefs.Preferences;
+
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
@@ -115,20 +129,6 @@ import 
org.apache.cayenne.project.ConfigurationNodeParentGetter;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.util.IDUtil;
 
-import javax.swing.event.EventListenerList;
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EventListener;
-import java.util.EventObject;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.prefs.Preferences;
-
 /**
  * A controller that works with the project tree, tracking selection and
  * dispatching project events.
@@ -298,8 +298,7 @@ public class ProjectController extends CayenneController {
 
                 fileChangeTracker.reconfigure();
 
-                entityResolver = new EntityResolver(
-                        ((DataChannelDescriptor) 
currentProject.getRootNode()).getDataMaps());
+                entityResolver = new EntityResolver();
 
                 updateEntityResolver();
             }
@@ -310,9 +309,8 @@ public class ProjectController extends CayenneController {
 
         Collection<DataMap> dataMaps = ((DataChannelDescriptor) 
project.getRootNode()).getDataMaps();
 
-        entityResolver.setDataMaps(dataMaps);
-
         for (DataMap dataMap : dataMaps) {
+            entityResolver.addDataMap(dataMap);
             dataMap.setNamespace(entityResolver);
         }
     }

Reply via email to