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 <stari...@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());