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); } }