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