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:30:22 UTC

[cayenne] branch master 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 master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


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

commit 9ce69b8cd9d3cfd325c28258f2003005bd4975ca
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    |  4 +--
 .../modeler/graph/DbEntityCellMetadata.java        |  9 ++---
 .../cayenne/modeler/graph/DbGraphBuilder.java      |  9 ++---
 .../cayenne/modeler/graph/EntityCellMetadata.java  | 40 ++++++++--------------
 .../modeler/graph/ObjEntityCellMetadata.java       |  9 ++---
 .../cayenne/modeler/graph/ObjGraphBuilder.java     | 19 ++++------
 7 files changed, 36 insertions(+), 55 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 1109caf28..f01d7de0c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -37,6 +37,7 @@ CAY-2781 Enable 'Create PK properties' by default in the cgen configuration
 
 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 2d80de535..529045569 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
@@ -304,8 +304,8 @@ abstract class BaseGraphBuilder<E extends Entity<E, A, R>, A extends Attribute<E
     }
 
     /**
-     * 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, E entity) {
         if (entity.getRelationships().size() == 0) {
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 025bcf338..3d87bdf99 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
@@ -27,15 +27,16 @@ import org.apache.cayenne.map.DbRelationship;
  * Descriptor of DbEntity Cell
  */
 class DbEntityCellMetadata extends EntityCellMetadata<DbEntity, DbAttribute, DbRelationship> {
-    DbEntityCellMetadata(GraphBuilder builder, String entityName) {
-        super(builder, entityName);
+    DbEntityCellMetadata(DbGraphBuilder builder, DbEntity entity) {
+        super(builder, entity);
     }
     
     @Override
     public DbEntity fetchEntity() {
         for (DataMap dm : builder.getDataDomain().getDataMaps()) {
-            if (dm.getDbEntity(entityName) != null) {
-                return dm.getDbEntity(entityName);
+            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 9c9530807..3bb5d49e5 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
@@ -40,8 +40,7 @@ import org.jgraph.graph.GraphConstants;
 /**
  * Class for building ER-graph, based on DbEntity information
  */
-class DbGraphBuilder extends BaseGraphBuilder<DbEntity, DbAttribute, DbRelationship> implements DbEntityListener,
-        DbAttributeListener, DbRelationshipListener {
+class DbGraphBuilder extends BaseGraphBuilder<DbEntity, DbAttribute, DbRelationship> implements DbEntityListener, DbAttributeListener, DbRelationshipListener {
 
     static final Color ENTITY_COLOR = new Color(197, 253, 252);
 
@@ -60,16 +59,14 @@ class DbGraphBuilder extends BaseGraphBuilder<DbEntity, DbAttribute, DbRelations
 
     @Override
     protected DbEntityCellMetadata getCellMetadata(DbEntity e) {
-        return new DbEntityCellMetadata(this, e.getName());
+        return new DbEntityCellMetadata(this, e);
     }
 
     @Override
     protected DefaultEdge createRelationshipCell(DbRelationship 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 c834f15c0..8d6060517 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;
@@ -29,45 +30,32 @@ import org.apache.cayenne.map.Relationship;
  */
 abstract class EntityCellMetadata<E extends Entity<E, A, R>, A extends Attribute<E, A, R>, R extends Relationship<E, A, R>>
         implements Serializable {
-    GraphBuilder<E,A,R> builder;
+    final GraphBuilder<E,A,R> builder;
+    final String entityName;
+    final String label;
     
-    String entityName;
-    String label;
-    
-    EntityCellMetadata() {
-    }
-    
-    EntityCellMetadata(GraphBuilder<E,A,R> builder, String entityName) {
-        this.builder = builder;
-        this.entityName = entityName;
-        
-        rebuildLabel();
+    EntityCellMetadata(GraphBuilder<E,A,R> builder, Entity<E,A,R> entity) {
+        this.builder = Objects.requireNonNull(builder);
+        this.entityName = Objects.requireNonNull(entity).getName();
+        this.label = createLabel(entity);
     }
         
     /**
      * Resolves entity
      */
     public abstract Entity<E, A, R> fetchEntity();
-    
-    final void rebuildLabel() {
-        label = createLabel();
-    }
-    
+
     public String toString() {
-        if (label == null) {
-            rebuildLabel();
-        }
-        
         return label;
     }
     
     /**
      * Creates label for this cell
      */
-    String createLabel() {
-        Entity<E, A, R> entity = fetchEntity();
-        StringBuilder label = new StringBuilder("<html><center><u><b>").
-                append(entity.getName()).append("</b></u></center>");
+    String createLabel(Entity<E, A, R> entity) {
+        StringBuilder label = new StringBuilder("<html><center><u><b>")
+                .append(entity.getName())
+                .append("</b></u></center>");
         for (A attr : entity.getAttributes()) {
             if (isPrimary(attr)) {
                 label.append("<br><i>").append(attr.getName()).append("</i>");
@@ -78,7 +66,7 @@ abstract class EntityCellMetadata<E extends Entity<E, A, R>, A extends Attribute
                 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 9926ab7d0..a6b724c8f 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
@@ -27,15 +27,16 @@ import org.apache.cayenne.map.ObjRelationship;
  * Descriptor of ObjEntity Cell
  */
 class ObjEntityCellMetadata extends EntityCellMetadata<ObjEntity, ObjAttribute, ObjRelationship> {
-    ObjEntityCellMetadata(GraphBuilder<ObjEntity, ObjAttribute, ObjRelationship> builder, String entityName) {
-        super(builder, entityName);
+    ObjEntityCellMetadata(ObjGraphBuilder builder, ObjEntity entity) {
+        super(builder, entity);
     }
     
     @Override
     public ObjEntity fetchEntity() {
         for (DataMap dm : builder.getDataDomain().getDataMaps()) {
-            if (dm.getObjEntity(entityName) != null) {
-                return dm.getObjEntity(entityName);
+            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 10ef31174..b43bbfbab 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
@@ -37,7 +37,7 @@ import org.jgraph.graph.DefaultEdge;
 import org.jgraph.graph.DefaultGraphCell;
 import org.jgraph.graph.GraphConstants;
 
-import java.awt.*;
+import java.awt.Color;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -102,12 +102,8 @@ class ObjGraphBuilder extends BaseGraphBuilder<ObjEntity, ObjAttribute, ObjRelat
                 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 +116,7 @@ class ObjGraphBuilder extends BaseGraphBuilder<ObjEntity, ObjAttribute, ObjRelat
 
     @Override
     protected ObjEntityCellMetadata getCellMetadata(ObjEntity e) {
-        return new ObjEntityCellMetadata(this, e.getName());
+        return new ObjEntityCellMetadata(this, e);
     }
 
     @Override
@@ -154,14 +150,11 @@ class ObjGraphBuilder extends BaseGraphBuilder<ObjEntity, ObjAttribute, ObjRelat
         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());