You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/11/30 15:14:56 UTC

[cayenne] branch STABLE-4.2 updated: CAY-2732 Exception when creating ObjEntity from a DbEntity

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

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


The following commit(s) were added to refs/heads/STABLE-4.2 by this push:
     new 947b92d75 CAY-2732 Exception when creating ObjEntity from a DbEntity
947b92d75 is described below

commit 947b92d755ec2d87d18535fbc0398c1186ec21b9
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Nov 30 18:14:48 2022 +0300

    CAY-2732 Exception when creating ObjEntity from a DbEntity
---
 RELEASE-NOTES.txt                                  |  1 +
 .../cayenne/modeler/graph/BaseGraphBuilder.java    | 12 +++----
 .../modeler/graph/DbEntityCellMetadata.java        | 16 ++++-----
 .../cayenne/modeler/graph/DbGraphBuilder.java      | 12 +++----
 .../cayenne/modeler/graph/EntityCellMetadata.java  | 38 ++++++++--------------
 .../modeler/graph/ObjEntityCellMetadata.java       | 16 ++++-----
 .../cayenne/modeler/graph/ObjGraphBuilder.java     | 22 ++++---------
 7 files changed, 46 insertions(+), 71 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index a48ba16c0..cde2ba2a2 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -22,6 +22,7 @@ CAY-2776 Upgrade Gradle to 7.6
 
 Bug Fixes:
 
+CAY-2732 Exception when creating ObjEntity from a DbEntity
 CAY-2755 Modeler: Entities are not sorted by name in the class generation view
 CAY-2762 Modeler: Difference in toolbars colors on OSX
 CAY-2763 Split expressions do not work with flattened relationships
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
index 303ecc676..1991d3281 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
@@ -207,7 +207,7 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
             // JGraphSimpleLayout layout = new JGraphSimpleLayout(JGraphSimpleLayout.TYPE_TILT, 4000, 2000);
             layout.run(facade);
             // Obtain a map of the resulting attribute changes from the facade
-            Map nested = facade.createNestedMap(true, true);
+            Map<?, ?> nested = facade.createNestedMap(true, true);
 
             // Apply the results to the actual graph
             edit(nested);
@@ -220,7 +220,7 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
             public void mouseReleased(MouseEvent e) {
                 if (e.isPopupTrigger()) {
                     Object selected = graph.getSelectionCell();
-                    if (selected != null && selected instanceof DefaultGraphCell) {
+                    if (selected instanceof DefaultGraphCell) {
                         Object userObject = ((DefaultGraphCell) selected).getUserObject();
                         if (userObject instanceof EntityCellMetadata) {
                             showPopup(e.getPoint(), ((EntityCellMetadata) userObject).fetchEntity());
@@ -257,7 +257,7 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
             for (int isolatedIndex = 0; isolatedIndex < isolatedObjects.size();) {
                 for (int i = 0; isolatedIndex < isolatedObjects.size() && i < x - row; i++) {
                     GraphConstants.setBounds(isolatedObjects.get(isolatedIndex).getAttributes(),
-                            new Rectangle2D.Double(pref.width - posX, pref.height - 3 * posY / 2, 10, 10));
+                            new Rectangle2D.Double(pref.width - posX, pref.height - 3.0 * posY / 2, 10, 10));
                     isolatedIndex += 2; // because every 2nd object is port
                     posX += dx;
                 }
@@ -301,8 +301,8 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
     }
 
     /**
-     * Returns whether an entity is not connected to any other TODO: not fine
-     * algorithm, it iterates through all entities and all rels
+     * Returns whether an entity is not connected to any other
+     * TODO: not fine algorithm, it iterates through all entities and all rels
      */
     protected boolean isIsolated(DataChannelDescriptor domain, Entity entity) {
         if (entity.getRelationships().size() == 0) {
@@ -575,7 +575,7 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
         encoder.end();
     }
 
-    private void edit(final Map map) {
+    private void edit(final Map<?,?> map) {
         runWithUndoDisabled(() -> graph.getGraphLayoutCache().edit(map));
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbEntityCellMetadata.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbEntityCellMetadata.java
index 192377010..7bfe3e4f5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbEntityCellMetadata.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbEntityCellMetadata.java
@@ -18,28 +18,26 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.graph;
 
-import java.util.Iterator;
-
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.Entity;
 
 /**
  * Descriptor of DbEntity Cell
  */
 class DbEntityCellMetadata extends EntityCellMetadata {
-    DbEntityCellMetadata(GraphBuilder builder, String entityName) {
-        super(builder, entityName);
+    DbEntityCellMetadata(GraphBuilder builder, Entity entity) {
+        super(builder, entity);
     }
     
     @Override
     public Entity fetchEntity() {
-        Iterator<DataMap> it = builder.getDataDomain().getDataMaps().iterator();
-        while(it.hasNext()){
-            DataMap dm = (DataMap)it.next();
-            if(dm.getDbEntity(entityName)!=null){
-                return dm.getDbEntity(entityName);
+        for (DataMap dm : builder.getDataDomain().getDataMaps()) {
+            DbEntity dbEntity = dm.getDbEntity(entityName);
+            if (dbEntity != null) {
+                return dbEntity;
             }
         }
         return null;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
index b2261d667..999eddc38 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.dbsync.model.DetectedDbEntity;
+import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.map.event.AttributeEvent;
@@ -39,13 +40,12 @@ import org.jgraph.graph.GraphConstants;
 /**
  * Class for building ER-graph, based on DbEntity information
  */
-class DbGraphBuilder extends BaseGraphBuilder implements DbEntityListener,
-        DbAttributeListener, DbRelationshipListener {
+class DbGraphBuilder extends BaseGraphBuilder implements DbEntityListener, DbAttributeListener, DbRelationshipListener {
 
     static final Color ENTITY_COLOR = new Color(197, 253, 252);
 
     @Override
-    protected Collection<? extends Entity> getEntities(DataMap map) {
+    protected Collection<DbEntity> getEntities(DataMap map) {
         return map.getDbEntities();
     }
 
@@ -59,16 +59,14 @@ class DbGraphBuilder extends BaseGraphBuilder implements DbEntityListener,
 
     @Override
     protected EntityCellMetadata getCellMetadata(Entity e) {
-        return new DbEntityCellMetadata(this, e.getName());
+        return new DbEntityCellMetadata(this, e);
     }
 
     @Override
     protected DefaultEdge createRelationshipCell(Relationship rel) {
         DefaultEdge edge = super.createRelationshipCell(rel);
         if (edge != null) {
-            GraphConstants.setDashPattern(edge.getAttributes(), new float[] {
-                    10, 3
-            });
+            GraphConstants.setDashPattern(edge.getAttributes(), new float[] {10, 3});
         }
         return edge;
     }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/EntityCellMetadata.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/EntityCellMetadata.java
index c51b75cb0..a095de2b3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/EntityCellMetadata.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/EntityCellMetadata.java
@@ -19,6 +19,7 @@
 package org.apache.cayenne.modeler.graph;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Entity;
@@ -27,19 +28,14 @@ import org.apache.cayenne.map.Entity;
  * Abstract class to describe entity's cell 
  */
 abstract class EntityCellMetadata implements Serializable {
-    GraphBuilder builder;
+    final GraphBuilder builder;
+    final String entityName;
+    final String label;
     
-    String entityName;
-    String label;
-    
-    EntityCellMetadata() {
-    }
-    
-    EntityCellMetadata(GraphBuilder builder, String entityName) {
-        this.builder = builder;
-        this.entityName = entityName;
-        
-        rebuildLabel();
+    EntityCellMetadata(GraphBuilder builder, Entity entity) {
+        this.builder = Objects.requireNonNull(builder);
+        this.entityName = Objects.requireNonNull(entity).getName();
+        this.label = createLabel(entity);
     }
         
     /**
@@ -47,25 +43,17 @@ abstract class EntityCellMetadata implements Serializable {
      */
     public abstract Entity fetchEntity();
     
-    final void rebuildLabel() {
-        label = createLabel();
-    }
-    
     public String toString() {
-        if (label == null) {
-            rebuildLabel();
-        }
-        
         return label;
     }
     
     /**
      * Creates label for this cell
      */
-    String createLabel() {
-        Entity entity = fetchEntity();
-        StringBuilder label = new StringBuilder("<html><center><u><b>").
-                append(entity.getName()).append("</b></u></center>");
+    String createLabel(Entity entity) {
+        StringBuilder label = new StringBuilder("<html><center><u><b>")
+                .append(entity.getName())
+                .append("</b></u></center>");
         for (Attribute attr : entity.getAttributes()) {
             if (isPrimary(attr)) {
                 label.append("<br><i>").append(attr.getName()).append("</i>");
@@ -76,7 +64,7 @@ abstract class EntityCellMetadata implements Serializable {
                 label.append("<br>").append(attr.getName());
             }
         }
-        return label.toString();
+        return label.append("</html>").toString();
     }
     
     /**
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java
index 648ee0597..afe716183 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java
@@ -18,27 +18,25 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.graph;
 
-import java.util.Iterator;
-
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjEntity;
 
 /**
  * Descriptor of ObjEntity Cell
  */
 class ObjEntityCellMetadata extends EntityCellMetadata {
-    ObjEntityCellMetadata(GraphBuilder builder, String entityName) {
-        super(builder, entityName);
+    ObjEntityCellMetadata(GraphBuilder builder, Entity entity) {
+        super(builder, entity);
     }
     
     @Override
     public Entity fetchEntity() {
-        Iterator<DataMap> it = builder.getDataDomain().getDataMaps().iterator();
-        while(it.hasNext()){
-            DataMap dm = (DataMap)it.next();
-            if(dm.getObjEntity(entityName)!=null){
-                return dm.getObjEntity(entityName);
+        for (DataMap dm : builder.getDataDomain().getDataMaps()) {
+            ObjEntity objEntity = dm.getObjEntity(entityName);
+            if (objEntity != null) {
+                return objEntity;
             }
         }
         return null;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java
index d7189b1a3..2b30001dd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java
@@ -35,9 +35,8 @@ import org.jgraph.graph.AttributeMap;
 import org.jgraph.graph.DefaultEdge;
 import org.jgraph.graph.DefaultGraphCell;
 import org.jgraph.graph.GraphConstants;
-import org.slf4j.LoggerFactory;
 
-import java.awt.*;
+import java.awt.Color;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -57,7 +56,7 @@ class ObjGraphBuilder extends BaseGraphBuilder implements ObjEntityListener,
     }
 
     @Override
-    protected Collection<? extends Entity> getEntities(DataMap map) {
+    protected Collection<ObjEntity> getEntities(DataMap map) {
         return map.getObjEntities();
     }
 
@@ -102,12 +101,8 @@ class ObjGraphBuilder extends BaseGraphBuilder implements ObjEntityListener,
                 edge.setSource(sourceCell.getChildAt(0));
                 edge.setTarget(targetCell.getChildAt(0));
 
-                GraphConstants.setDashPattern(edge.getAttributes(), new float[] {
-                        5, 5
-                });
-                GraphConstants.setLineEnd(
-                        edge.getAttributes(),
-                        GraphConstants.ARROW_TECHNICAL);
+                GraphConstants.setDashPattern(edge.getAttributes(), new float[] {5, 5});
+                GraphConstants.setLineEnd(edge.getAttributes(), GraphConstants.ARROW_TECHNICAL);
                 GraphConstants.setSelectable(edge.getAttributes(), false);
 
                 inheritanceEdges.put(entity, edge);
@@ -120,7 +115,7 @@ class ObjGraphBuilder extends BaseGraphBuilder implements ObjEntityListener,
 
     @Override
     protected EntityCellMetadata getCellMetadata(Entity e) {
-        return new ObjEntityCellMetadata(this, e.getName());
+        return new ObjEntityCellMetadata(this, e);
     }
 
     @Override
@@ -154,14 +149,11 @@ class ObjGraphBuilder extends BaseGraphBuilder implements ObjEntityListener,
         DefaultEdge inheritanceEdge = inheritanceEdges.get(entity);
         if (inheritanceEdge != null) {
             if (entity.getSuperEntity() == null) {
-                graph.getGraphLayoutCache().remove(new Object[] {
-                    inheritanceEdge
-                });
+                graph.getGraphLayoutCache().remove(new Object[] {inheritanceEdge});
                 inheritanceEdges.remove(entity);
             }
             else {
-                inheritanceEdge.setTarget(entityCells.get(
-                        entity.getSuperEntity().getName()).getChildAt(0));
+                inheritanceEdge.setTarget(entityCells.get(entity.getSuperEntity().getName()).getChildAt(0));
 
                 Map<DefaultEdge, AttributeMap> nested = new HashMap<>();
                 nested.put(inheritanceEdge, inheritanceEdge.getAttributes());