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 2018/09/19 07:18:35 UTC

[1/3] cayenne git commit: CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table

Repository: cayenne
Updated Branches:
  refs/heads/master 417f176a6 -> b88ecaf5b


CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3b90c681
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3b90c681
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3b90c681

Branch: refs/heads/master
Commit: 3b90c6816356fbe3534b2c5bd6e976da21bd6847
Parents: 6221d5e
Author: Arseni Bulatski <an...@gmail.com>
Authored: Mon Sep 17 15:34:31 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Sep 18 09:58:57 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../modeler/editor/ObjAttributeTableModel.java  | 25 ++-----
 .../modeler/editor/ObjEntityAttributePanel.java | 77 +++++++++++---------
 .../editor/ObjEntityRelationshipPanel.java      | 44 ++++++++++-
 4 files changed, 94 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/3b90c681/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ab0495d..5e6c4c7 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -17,6 +17,7 @@ CAY-2446 Run Disjoint By Id queries outside of synchronized block
 CAY-2447 Crypto support for LocalDateTime
 CAY-2471 Support multiple XML project versions
 CAY-2473 Modeler: cleanup attributes and relationship editors
+CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
 
 Bug Fixes:
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/3b90c681/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
index fe0e69e..61fb98b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
@@ -25,7 +25,6 @@ import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.EmbeddedAttribute;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
@@ -60,14 +59,13 @@ import java.util.List;
 public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrapper> {
 
     // Columns
-    public static final int INHERITED = 0;
-    public static final int OBJ_ATTRIBUTE = 1;
-    public static final int OBJ_ATTRIBUTE_TYPE = 2;
-    public static final int DB_ATTRIBUTE = 3;
-    public static final int DB_ATTRIBUTE_TYPE = 4;
-    public static final int LOCKING = 5;
-    public static final int COMMENT = 6;
-    public static final int COLUMN_COUNT = 7;
+    public static final int OBJ_ATTRIBUTE = 0;
+    public static final int OBJ_ATTRIBUTE_TYPE = 1;
+    public static final int DB_ATTRIBUTE = 2;
+    public static final int DB_ATTRIBUTE_TYPE = 3;
+    public static final int LOCKING = 4;
+    public static final int COMMENT = 5;
+    public static final int COLUMN_COUNT = 6;
 
     private ObjEntity entity;
     private DbEntity dbEntity;
@@ -154,8 +152,6 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
 
     public String getColumnName(int column) {
         switch (column) {
-            case INHERITED:
-                return "In";
             case OBJ_ATTRIBUTE:
                 return "Name";
             case OBJ_ATTRIBUTE_TYPE:
@@ -178,8 +174,6 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
         DbAttribute dbAttribute = attribute.getDbAttribute();
 
         switch (column) {
-            case INHERITED:
-                return attribute.isInherited();
             case OBJ_ATTRIBUTE:
                 return attribute.getName();
             case OBJ_ATTRIBUTE_TYPE:
@@ -399,7 +393,7 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
             return col == DB_ATTRIBUTE;
         }
 
-        return col != DB_ATTRIBUTE_TYPE && col != INHERITED;
+        return col != DB_ATTRIBUTE_TYPE;
     }
 
     public ObjEntity getEntity() {
@@ -426,9 +420,6 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
     @Override
     public void sortByColumn(final int sortCol, boolean isAscent) {
         switch (sortCol) {
-            case INHERITED:
-                sortByElementProperty("inherited", isAscent);
-                break;
             case OBJ_ATTRIBUTE:
                 sortByElementProperty("name", isAscent);
                 break;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/3b90c681/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
index 13aab58..6d300ae 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
@@ -46,22 +46,21 @@ import org.apache.cayenne.modeler.pref.TableColumnPreferences;
 import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.modeler.util.CayenneTable;
 import org.apache.cayenne.modeler.util.CayenneTableModel;
-import org.apache.cayenne.modeler.util.DbAttributePathComboBoxRenderer;
 import org.apache.cayenne.modeler.util.DbAttributePathComboBoxEditor;
+import org.apache.cayenne.modeler.util.DbAttributePathComboBoxRenderer;
 import org.apache.cayenne.modeler.util.ModelerUtil;
 import org.apache.cayenne.modeler.util.PanelFactory;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.modeler.util.UIUtil;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
-import org.apache.cayenne.swing.components.image.FilteredIconFactory;
 
 import javax.swing.BorderFactory;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JComboBox;
 import javax.swing.JDialog;
-import javax.swing.JOptionPane;
 import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JTable;
@@ -71,30 +70,31 @@ import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Font;
-import java.awt.event.ActionEvent;
+import java.awt.Point;
+import java.awt.Rectangle;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+
 /**
  * Detail view of the ObjEntity attributes.
  */
 public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayListener,
         ObjEntityListener, ObjAttributeListener, ProjectOnSaveListener {
 
-    private static final int INHERITANCE_COLUMN_WIDTH = 35;
-
     private ProjectController mediator;
     private CayenneTable table;
     private TableColumnPreferences tablePreferences;
@@ -142,10 +142,13 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
             public void mouseReleased(MouseEvent e) {
                 int row = table.rowAtPoint(e.getPoint());
                 int col = table.columnAtPoint(e.getPoint());
-                if (row >= 0 && col == ObjAttributeTableModel.INHERITED) {
-                    if (Boolean.TRUE.equals(table.getValueAt(row, col))) {
-                        ActionManager actionManager = Application.getInstance().getActionManager();
-                        actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null);
+                ObjAttribute objAttribute = ((ObjAttributeTableModel)table.getModel()).getAttribute(row).getValue();
+                int columnFromModel = table.getColumnModel().getColumn(col).getModelIndex();
+                if (row >= 0 && columnFromModel == ObjAttributeTableModel.OBJ_ATTRIBUTE) {
+                    if(objAttribute.isInherited()) {
+                        TableCellRenderer renderer = table.getCellRenderer(row, col);
+                        Rectangle rectangle = table.getCellRect(row, col, false);
+                        ((CellRenderer) renderer).mouseClicked(e, rectangle.x);
                     }
                 }
             }
@@ -379,20 +382,17 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
 
     protected void setUpTableStructure() {
         Map<Integer, Integer> minSizes = new HashMap<>();
-        Map<Integer, Integer> maxSizes = new HashMap<>();
-
-        minSizes.put(ObjAttributeTableModel.INHERITED, INHERITANCE_COLUMN_WIDTH);
-        maxSizes.put(ObjAttributeTableModel.INHERITED, INHERITANCE_COLUMN_WIDTH);
+        minSizes.put(ObjAttributeTableModel.OBJ_ATTRIBUTE, 150);
 
         initComboBoxes();
 
-        table.getColumnModel().getColumn(3).setCellRenderer(new DbAttributePathComboBoxRenderer());
-        table.getColumnModel().getColumn(3).setCellEditor(new DbAttributePathComboBoxEditor());
+        table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellRenderer(new DbAttributePathComboBoxRenderer());
+        table.getColumnModel().getColumn(ObjAttributeTableModel.DB_ATTRIBUTE).setCellEditor(new DbAttributePathComboBoxEditor());
 
         tablePreferences.bind(
                 table,
                 minSizes,
-                maxSizes,
+                null,
                 null,
                 ObjAttributeTableModel.OBJ_ATTRIBUTE,
                 true);
@@ -446,32 +446,39 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
             ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
             column = table.getColumnModel().getColumn(column).getModelIndex();
             ObjAttribute attribute = model.getAttribute(row).getValue();
-            if (column != ObjAttributeTableModel.INHERITED) {
 
-                if (!model.isCellEditable(row, column)) {
-                    setForeground(Color.GRAY);
-                } else {
-                    setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground());
-                }
-
-                if (attribute.isInherited()) {
-                    Font font = getFont();
-                    Font newFont = font.deriveFont(Font.ITALIC);
-                    setFont(newFont);
-                }
-                setIcon(null);
+            if (!model.isCellEditable(row, column)) {
+                setForeground(isSelected ? new Color(0xCECECE) : Color.GRAY);
             } else {
-                if (attribute.isInherited()) {
-                    Icon objEntityIcon = ModelerUtil.buildIcon("icon-inheritance.png");
-                    setIcon(objEntityIcon);
+                setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground());
+            }
+
+            setIcon(null);
+
+            if (attribute.isInherited()) {
+                Font font = getFont();
+                Font newFont = font.deriveFont(Font.ITALIC);
+                setFont(newFont);
+                if(column == ObjAttributeTableModel.OBJ_ATTRIBUTE) {
+                    ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
+                    setIcon(icon);
                 }
-                setText("");
             }
+
             setFont(UIManager.getFont("Label.font"));
             setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
 
             return this;
         }
+
+        public void mouseClicked(MouseEvent event, int x) {
+            Point point = event.getPoint();
+            ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
+            if(point.x - x <= icon.getIconWidth()) {
+                ActionManager actionManager = Application.getInstance().getActionManager();
+                actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null);
+            }
+        }
     }
 
     private void resetTableModel() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/3b90c681/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
index 4b53d8e..bd65ec0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
@@ -31,6 +31,7 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.action.ActionManager;
 import org.apache.cayenne.modeler.action.CopyAttributeRelationshipAction;
 import org.apache.cayenne.modeler.action.CutAttributeRelationshipAction;
+import org.apache.cayenne.modeler.action.ObjEntityToSuperEntityAction;
 import org.apache.cayenne.modeler.action.PasteAction;
 import org.apache.cayenne.modeler.action.RemoveAttributeRelationshipAction;
 import org.apache.cayenne.modeler.dialog.objentity.ObjRelationshipInfo;
@@ -52,6 +53,7 @@ import org.slf4j.LoggerFactory;
 import javax.swing.BorderFactory;
 import javax.swing.DefaultCellEditor;
 import javax.swing.Icon;
+import javax.swing.ImageIcon;
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
@@ -64,11 +66,16 @@ import javax.swing.UIManager;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
+import java.awt.Point;
+import java.awt.Rectangle;
 import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.util.List;
 
 /**
@@ -127,6 +134,24 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
                 ObjRelationshipTableModel.class,
                 "objEntity/relationshipTable");
 
+        table.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                int row = table.rowAtPoint(e.getPoint());
+                int col = table.columnAtPoint(e.getPoint());
+                ObjRelationshipTableModel tableModel = ((ObjRelationshipTableModel) table.getModel());
+                ObjRelationship relationship = tableModel.getRelationship(row);
+                int columnFromModel = table.getColumnModel().getColumn(col).getModelIndex();
+                if (row >= 0 && columnFromModel == ObjRelationshipTableModel.REL_NAME) {
+                    if(relationship.getSourceEntity() != tableModel.getEntity()) {
+                        TableCellRenderer renderer = table.getCellRenderer(row, col);
+                        Rectangle rectangle = table.getCellRect(row, col, false);
+                        ((StringRenderer) renderer).mouseClicked(e, rectangle.x);
+                    }
+                }
+            }
+        });
+
         // Create and install a popup
         Icon ico = ModelerUtil.buildIcon("icon-edit.png");
         resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico);
@@ -412,19 +437,36 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
                     .getModel();
             ObjRelationship relationship = model.getRelationship(row);
 
+            setIcon(null);
+
+            column = table.getColumnModel().getColumn(column).getModelIndex();
             if (relationship != null
                     && relationship.getSourceEntity() != model.getEntity()) {
-                setForeground(Color.GRAY);
+                setForeground(isSelected ? new Color(0xCECECE) : Color.GRAY);
+                if(column == ObjRelationshipTableModel.REL_NAME) {
+                    ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
+                    setIcon(icon);
+                }
             } else {
                 setForeground(isSelected && !hasFocus
                         ? table.getSelectionForeground()
                         : table.getForeground());
             }
+
             setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
             setFont(UIManager.getFont("Label.font"));
 
             return this;
         }
+
+        public void mouseClicked(MouseEvent event, int x) {
+            Point point = event.getPoint();
+            ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
+            if(point.x - x <= icon.getIconWidth()) {
+                ActionManager actionManager = Application.getInstance().getActionManager();
+                actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null);
+            }
+        }
     }
 
     private class ObjRelationshipListSelectionListener implements ListSelectionListener {


[2/3] cayenne git commit: Merge PR #318

Posted by nt...@apache.org.
Merge PR #318


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/200691d1
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/200691d1
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/200691d1

Branch: refs/heads/master
Commit: 200691d1cadaadd24655b464d4bad358456b9aa8
Parents: 417f176 3b90c68
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Sep 19 10:14:05 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Sep 19 10:14:05 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../modeler/editor/ObjAttributeTableModel.java  | 25 +++----
 .../modeler/editor/ObjEntityAttributePanel.java | 70 +++++++++++---------
 .../editor/ObjEntityRelationshipPanel.java      | 44 +++++++++++-
 4 files changed, 92 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/200691d1/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --cc RELEASE-NOTES.txt
index e3b3898,5e6c4c7..0a9ab1e
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@@ -17,7 -17,7 +17,8 @@@ CAY-2446 Run Disjoint By Id queries out
  CAY-2447 Crypto support for LocalDateTime
  CAY-2471 Support multiple XML project versions
  CAY-2473 Modeler: cleanup attributes and relationship editors
 +CAY-2474 Modeler: swap buttons in dialog toolbar
+ CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
  
  Bug Fixes:
  


[3/3] cayenne git commit: CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table cleanup

Posted by nt...@apache.org.
CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
  cleanup


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b88ecaf5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b88ecaf5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b88ecaf5

Branch: refs/heads/master
Commit: b88ecaf5b7c5a8bc9dc7ce641d184295dc807bb2
Parents: 200691d
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Sep 19 10:17:42 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Sep 19 10:17:42 2018 +0300

----------------------------------------------------------------------
 .../cayenne/modeler/editor/ObjEntityAttributePanel.java      | 8 ++++----
 .../cayenne/modeler/editor/ObjEntityRelationshipPanel.java   | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/b88ecaf5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
index 6d300ae..efccc2b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
@@ -95,6 +95,8 @@ import java.util.Map;
 public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayListener,
         ObjEntityListener, ObjAttributeListener, ProjectOnSaveListener {
 
+    private static final ImageIcon INHERITANCE_ICON = ModelerUtil.buildIcon("icon-inheritance.png");
+
     private ProjectController mediator;
     private CayenneTable table;
     private TableColumnPreferences tablePreferences;
@@ -460,8 +462,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
                 Font newFont = font.deriveFont(Font.ITALIC);
                 setFont(newFont);
                 if(column == ObjAttributeTableModel.OBJ_ATTRIBUTE) {
-                    ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
-                    setIcon(icon);
+                    setIcon(INHERITANCE_ICON);
                 }
             }
 
@@ -473,8 +474,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
 
         public void mouseClicked(MouseEvent event, int x) {
             Point point = event.getPoint();
-            ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
-            if(point.x - x <= icon.getIconWidth()) {
+            if(point.x - x <= INHERITANCE_ICON.getIconWidth()) {
                 ActionManager actionManager = Application.getInstance().getActionManager();
                 actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null);
             }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b88ecaf5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
index bd65ec0..95d0448 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
@@ -86,6 +86,8 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
 
     private static Logger logObj = LoggerFactory.getLogger(ObjEntityRelationshipPanel.class);
 
+    private static final ImageIcon INHERITANCE_ICON = ModelerUtil.buildIcon("icon-inheritance.png");
+
     private static final Object[] DELETE_RULES = new Object[]{
             DeleteRule.deleteRuleName(DeleteRule.NO_ACTION),
             DeleteRule.deleteRuleName(DeleteRule.NULLIFY),
@@ -444,8 +446,7 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
                     && relationship.getSourceEntity() != model.getEntity()) {
                 setForeground(isSelected ? new Color(0xCECECE) : Color.GRAY);
                 if(column == ObjRelationshipTableModel.REL_NAME) {
-                    ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
-                    setIcon(icon);
+                    setIcon(INHERITANCE_ICON);
                 }
             } else {
                 setForeground(isSelected && !hasFocus
@@ -461,8 +462,7 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
 
         public void mouseClicked(MouseEvent event, int x) {
             Point point = event.getPoint();
-            ImageIcon icon = ModelerUtil.buildIcon("icon-inheritance.png");
-            if(point.x - x <= icon.getIconWidth()) {
+            if(point.x - x <= INHERITANCE_ICON.getIconWidth()) {
                 ActionManager actionManager = Application.getInstance().getActionManager();
                 actionManager.getAction(ObjEntityToSuperEntityAction.class).performAction(null);
             }