Repository: cayenne Updated Branches: refs/heads/master 1fcb8cd89 -> eb863c9ae
CAY-2473 Modeler: cleanup attributes and relationship editors Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/eb863c9a Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/eb863c9a Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/eb863c9a Branch: refs/heads/master Commit: eb863c9aeb5b7376e9ed831171f2ecd3f4ac4d44 Parents: 1fcb8cd Author: Nikita Timofeev <stari...@gmail.com> Authored: Mon Sep 10 16:16:05 2018 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Mon Sep 10 16:16:05 2018 +0300 ---------------------------------------------------------------------- RELEASE-NOTES.txt | 1 + .../dialog/ResolveDbRelationshipDialog.java | 175 +++++++++---------- .../dialog/objentity/DbRelationshipTarget.java | 65 ++----- .../objentity/DbRelationshipTargetView.java | 9 +- .../objentity/ObjAttributeInfoDialogView.java | 56 +++--- .../dialog/objentity/ObjRelationshipInfo.java | 129 ++++---------- .../objentity/ObjRelationshipInfoView.java | 31 ++-- .../modeler/editor/ObjEntityAttributePanel.java | 2 +- .../editor/ObjEntityRelationshipPanel.java | 35 ++-- .../DbEntityAttributeRelationshipTab.java | 2 +- .../dbentity/DbEntityRelationshipPanel.java | 25 ++- 11 files changed, 210 insertions(+), 320 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index f3233e5..ab0495d 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -16,6 +16,7 @@ Changes/New Features: 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 Bug Fixes: http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java index 1927ed4..c3a8dac 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ResolveDbRelationshipDialog.java @@ -24,7 +24,6 @@ import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.dbsync.naming.NameBuilder; -import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbJoin; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.event.MapEvent; @@ -39,11 +38,18 @@ import org.apache.cayenne.modeler.util.PanelFactory; import org.apache.cayenne.modeler.util.combo.AutoCompletion; import org.apache.cayenne.util.Util; -import javax.swing.*; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; import javax.swing.table.TableColumn; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -57,6 +63,8 @@ public class ResolveDbRelationshipDialog extends CayenneDialog { protected DbRelationship relationship; protected DbRelationship reverseRelationship; + protected JLabel sourceName; + protected JLabel targetName; protected JTextField name; protected JTextField reverseName; protected CayenneTable table; @@ -70,23 +78,25 @@ public class ResolveDbRelationshipDialog extends CayenneDialog { private RelationshipUndoableEdit undo; - private boolean editable = true; + private boolean editable; public ResolveDbRelationshipDialog(DbRelationship relationship) { this(relationship, true); } public ResolveDbRelationshipDialog(DbRelationship relationship, boolean editable) { - super(Application.getFrame(), "", true); + super(Application.getFrame(), "DbRelationship Inspector", true); this.editable = editable; - initView(); - initController(); - if(!initWithModel(relationship)){ - cancelPressed = true; + if(!validateAndSetRelationship(relationship)) { + this.cancelPressed = true; return; } + initView(); + initController(); + initWithModel(); + this.undo = new RelationshipUndoableEdit(relationship); this.pack(); @@ -108,6 +118,8 @@ public class ResolveDbRelationshipDialog extends CayenneDialog { private void initView() { // create widgets + sourceName = new JLabel(); + targetName = new JLabel(); name = new JTextField(25); reverseName = new JTextField(25); @@ -134,42 +146,50 @@ public class ResolveDbRelationshipDialog extends CayenneDialog { PanelBuilder builder = new PanelBuilder( new FormLayout( "right:max(50dlu;pref), 3dlu, fill:min(150dlu;pref), 3dlu, fill:min(50dlu;pref)", - "p, 3dlu, p, 3dlu, p, 9dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow")); + "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 9dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow")); builder.setDefaultDialogBorder(); builder.addSeparator("DbRelationship Information", cc.xywh(1, 1, 5, 1)); - builder.addLabel("Relationship:", cc.xy(1, 3)); - builder.add(name, cc.xywh(3, 3, 1, 1)); - builder.addLabel("Reverse Relationship", cc.xy(1, 5)); - builder.add(reverseName, cc.xywh(3, 5, 1, 1)); - builder.addSeparator("Joins", cc.xywh(1, 7, 5, 1)); - builder.add(new JScrollPane(table), cc.xywh(1, 9, 3, 3, "fill, fill")); + builder.addLabel("Source Entity:", cc.xy(1, 3)); + builder.add(sourceName, cc.xywh(3, 3, 1, 1)); + + builder.addLabel("Target Entity:", cc.xy(1, 5)); + builder.add(targetName, cc.xywh(3, 5, 1, 1)); + + builder.addLabel("Relationship Name:", cc.xy(1, 7)); + builder.add(name, cc.xywh(3, 7, 1, 1)); + + builder.addLabel("Reverse Relationship Name:", cc.xy(1, 9)); + builder.add(reverseName, cc.xywh(3, 9, 1, 1)); - JPanel buttons = new JPanel(new FlowLayout(FlowLayout.LEADING)); + builder.addSeparator("Joins", cc.xywh(1, 11, 5, 1)); + builder.add(new JScrollPane(table), cc.xywh(1, 13, 3, 3, "fill, fill")); - buttons.add(addButton); - buttons.add(removeButton); + JPanel joinButtons = new JPanel(new FlowLayout(FlowLayout.LEADING)); + joinButtons.add(addButton); + joinButtons.add(removeButton); - builder.add(buttons, cc.xywh(5, 9, 1, 3)); + builder.add(joinButtons, cc.xywh(5, 13, 1, 3)); getContentPane().add(builder.getPanel(), BorderLayout.CENTER); - getContentPane().add(PanelFactory.createButtonPanel(new JButton[]{ - saveButton, cancelButton - }), BorderLayout.SOUTH); + JButton[] buttons = {cancelButton, saveButton}; + getContentPane().add(PanelFactory.createButtonPanel(buttons), BorderLayout.SOUTH); } - private boolean initWithModel(DbRelationship aRelationship) { + private boolean validateAndSetRelationship(DbRelationship relationship) { + this.relationship = relationship; + this.reverseRelationship = relationship.getReverseRelationship(); // sanity check - if (aRelationship.getSourceEntity() == null) { - throw new CayenneRuntimeException("Null source entity: %s", aRelationship); + if (relationship.getSourceEntity() == null) { + throw new CayenneRuntimeException("Null source entity: %s", relationship); } - - if (aRelationship.getSourceEntity().getDataMap() == null) { - throw new CayenneRuntimeException("Null DataMap: %s", aRelationship.getSourceEntity()); + if (relationship.getSourceEntity().getDataMap() == null) { + throw new CayenneRuntimeException("Null DataMap: %s", relationship.getSourceEntity()); } - if (aRelationship.getTargetEntity() == null) { + // warn if no target entity + if (relationship.getTargetEntity() == null) { JOptionPane.showMessageDialog( this, "Please select target DbEntity first", @@ -178,93 +198,72 @@ public class ResolveDbRelationshipDialog extends CayenneDialog { return false; } - // Once assigned, can reference relationship directly. Would it be - // OK to assign relationship at the very top of this method? - relationship = aRelationship; - reverseRelationship = relationship.getReverseRelationship(); + return true; + } + private void initWithModel() { // init UI components - setTitle("DbRelationship Info: " - + relationship.getSourceEntity().getName() - + " to " - + relationship.getTargetEntityName()); + sourceName.setText(relationship.getSourceEntityName()); + targetName.setText(relationship.getTargetEntityName()); + name.setText(relationship.getName()); + if (reverseRelationship != null) { + reverseName.setText(reverseRelationship.getName()); + } table.setModel(new DbJoinTableModel(relationship, getMediator(), this, true)); - TableColumn sourceColumn = table.getColumnModel().getColumn( - DbJoinTableModel.SOURCE); + TableColumn sourceColumn = table.getColumnModel().getColumn(DbJoinTableModel.SOURCE); JComboBox comboBox = Application.getWidgetFactory().createComboBox( ModelerUtil.getDbAttributeNames(getMediator(), relationship.getSourceEntity()), true); AutoCompletion.enable(comboBox); - sourceColumn.setCellEditor(Application.getWidgetFactory().createCellEditor( - comboBox)); + sourceColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(comboBox)); - TableColumn targetColumn = table.getColumnModel().getColumn( - DbJoinTableModel.TARGET); + TableColumn targetColumn = table.getColumnModel().getColumn(DbJoinTableModel.TARGET); comboBox = Application.getWidgetFactory().createComboBox( ModelerUtil.getDbAttributeNames(getMediator(), relationship.getTargetEntity()), true); AutoCompletion.enable(comboBox); - targetColumn.setCellEditor(Application.getWidgetFactory().createCellEditor( - comboBox)); + targetColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(comboBox)); - if (reverseRelationship != null) { - reverseName.setText(reverseRelationship.getName()); - } - - name.setText(relationship.getName()); tablePreferences.bind(table, null, null, null, DbJoinTableModel.SOURCE, true); - return true; } private void initController() { - addButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - DbJoinTableModel model = (DbJoinTableModel) table.getModel(); + addButton.addActionListener(e -> { + DbJoinTableModel model = (DbJoinTableModel) table.getModel(); - DbJoin join = new DbJoin(relationship); - model.addRow(join); + DbJoin join = new DbJoin(relationship); + model.addRow(join); - undo.addDbJoinAddUndo(join); + undo.addDbJoinAddUndo(join); - table.select(model.getRowCount() - 1); - } + table.select(model.getRowCount() - 1); }); - removeButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - DbJoinTableModel model = (DbJoinTableModel) table.getModel(); - stopEditing(); - int row = table.getSelectedRow(); + removeButton.addActionListener(e -> { + DbJoinTableModel model = (DbJoinTableModel) table.getModel(); + stopEditing(); + int row = table.getSelectedRow(); - DbJoin join = model.getJoin(row); - undo.addDbJoinRemoveUndo(join); + DbJoin join = model.getJoin(row); + undo.addDbJoinRemoveUndo(join); - model.removeRow(join); - } + model.removeRow(join); }); - saveButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - cancelPressed = false; - - if (editable) { - save(); - } + saveButton.addActionListener(e -> { + cancelPressed = false; - dispose(); + if (editable) { + save(); } - }); - cancelButton.addActionListener(new ActionListener() { + dispose(); + }); - public void actionPerformed(ActionEvent e) { - cancelPressed = true; - setVisible(false); - } + cancelButton.addActionListener(e -> { + cancelPressed = true; + setVisible(false); }); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTarget.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTarget.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTarget.java index 20949aa..edf8169 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTarget.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTarget.java @@ -19,38 +19,32 @@ package org.apache.cayenne.modeler.dialog.objentity; import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.swing.JOptionPane; import javax.swing.WindowConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.modeler.util.CayenneController; import org.apache.cayenne.modeler.util.Comparators; -public class DbRelationshipTarget extends CayenneController{ - +public class DbRelationshipTarget extends CayenneController { + private DbEntity source1; private DbEntity source2; protected DbEntity relTarget; protected List<DbEntity> relTargets; - + protected DbEntity source; protected ProjectController mediator; protected boolean source1Selected; protected DbRelationshipTargetView view; protected boolean toMany; protected boolean savePressed; - - @SuppressWarnings("unchecked") - public DbRelationshipTarget(ProjectController mediator,DbEntity source1, DbEntity source2) { + + public DbRelationshipTarget(ProjectController mediator, DbEntity source1, DbEntity source2) { super(mediator); view = new DbRelationshipTargetView(source1, source2); initController(); @@ -60,8 +54,8 @@ public class DbRelationshipTarget extends CayenneController{ this.mediator = mediator; this.source1 = source1; this.source2 = source2; - this.relTargets = new ArrayList<DbEntity>(source1.getDataMap().getDbEntities()); - Collections.sort(relTargets, Comparators.getNamedObjectComparator()); + this.relTargets = new ArrayList<>(source1.getDataMap().getDbEntities()); + relTargets.sort(Comparators.getNamedObjectComparator()); view.targetCombo.removeAllItems(); for (DbEntity d : relTargets) { view.targetCombo.addItem(d.getName()); @@ -69,39 +63,11 @@ public class DbRelationshipTarget extends CayenneController{ } private void initController() { - view.getCancelButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - view.dispose(); - } - }); - view.getSaveButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - save(); - } - }); - view.getSource1Button().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - setSource(source1, true); - } - }); - view.getSource2Button().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - setSource(source2, false); - } - }); - view.getToManyCheckBox().addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - if (view.getToManyCheckBox().isSelected()) { - toMany = true; - } - else { - toMany = false; - } - } - }); + view.getCancelButton().addActionListener(e -> view.dispose()); + view.getSaveButton().addActionListener(e -> save()); + view.getSource1Button().addActionListener(e -> setSource(source1, true)); + view.getSource2Button().addActionListener(e -> setSource(source2, false)); + view.getToManyCheckBox().addChangeListener(e -> toMany = view.getToManyCheckBox().isSelected()); } @Override @@ -110,12 +76,11 @@ public class DbRelationshipTarget extends CayenneController{ } protected void save() { - - this.relTarget = relTargets.get(view.targetCombo.getSelectedIndex()); + this.relTarget = relTargets.get(view.targetCombo.getSelectedIndex()); DbEntity target = getTarget(); - + if (target == null) { - JOptionPane.showMessageDialog((Component) getView(), "Please select target entity first.", + JOptionPane.showMessageDialog(getView(), "Please select target entity first.", "Warning", JOptionPane.WARNING_MESSAGE); return; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetView.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetView.java index 7b4bf3f..7f9c302 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetView.java @@ -41,10 +41,10 @@ public class DbRelationshipTargetView extends JDialog { protected WidgetFactory widgetFactory; protected JCheckBox toManyCheckBox ; protected JButton saveButton; - protected JButton cancelButton ; + protected JButton cancelButton; protected JRadioButton source1Button; protected JRadioButton source2Button; - protected JComboBox targetCombo; + protected JComboBox<String> targetCombo; public DbRelationshipTargetView(DbEntity source1, DbEntity source2) { @@ -93,9 +93,8 @@ public class DbRelationshipTargetView extends JDialog { builder.add(toManyCheckBox, cc.xywh(3, 7, 1, 1)); add(builder.getPanel(), BorderLayout.CENTER); - add(PanelFactory.createButtonPanel(new JButton[] { - saveButton, cancelButton - }), BorderLayout.SOUTH); + JButton[] buttons = {cancelButton, saveButton}; + add(PanelFactory.createButtonPanel(buttons), BorderLayout.SOUTH); } public JRadioButton getSource1Button() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java index 4170bfd..8a11d70 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java @@ -42,8 +42,6 @@ import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; @@ -62,7 +60,7 @@ public class ObjAttributeInfoDialogView extends JDialog { protected JLabel currentPathLabel; protected JLabel sourceEntityLabel; - protected JComboBox typeComboBox; + protected JComboBox<String> typeComboBox; protected JPanel typeManagerPane; protected CayenneTable overrideAttributeTable; @@ -88,8 +86,7 @@ public class ObjAttributeInfoDialogView extends JDialog { this.currentPathLabel = new JLabel(); this.sourceEntityLabel = new JLabel(); - this.typeComboBox = Application.getWidgetFactory().createComboBox(ModelerUtil - .getRegisteredTypeNames(), false); + this.typeComboBox = Application.getWidgetFactory().createComboBox(ModelerUtil.getRegisteredTypeNames(), false); AutoCompletion.enable(typeComboBox, false, true); typeComboBox.getRenderer(); @@ -111,19 +108,19 @@ public class ObjAttributeInfoDialogView extends JDialog { builder.setDefaultDialogBorder(); builder.addSeparator("ObjAttribute Information", cc.xywh(1, 1, 7, 1)); - builder.addLabel("Attribute:", cc.xy(1, 3)); - builder.add(attributeName, cc.xywh(3, 3, 1, 1)); + builder.addLabel("Entity:", cc.xy(1, 3)); + builder.add(sourceEntityLabel, cc.xywh(3, 3, 1, 1)); - builder.addLabel("Current Db Path:", cc.xy(1, 5)); - builder.add(currentPathLabel, cc.xywh(3, 5, 5, 1)); + builder.addLabel("Attribute Name:", cc.xy(1, 5)); + builder.add(attributeName, cc.xywh(3, 5, 1, 1)); - builder.addLabel("Source:", cc.xy(1, 7)); - builder.add(sourceEntityLabel, cc.xywh(3, 7, 1, 1)); + builder.addLabel("Current Db Path:", cc.xy(1, 7)); + builder.add(currentPathLabel, cc.xywh(3, 7, 5, 1)); builder.addLabel("Type:", cc.xy(1, 9)); builder.add(typeComboBox, cc.xywh(3, 9, 1, 1)); - builder.addSeparator("Mapping to Attributes", cc.xywh(1, 11, 7, 1)); + builder.addSeparator("Mapping to DbAttributes", cc.xywh(1, 11, 7, 1)); typeManagerPane = new JPanel(); typeManagerPane.setLayout(new CardLayout()); @@ -189,29 +186,24 @@ public class ObjAttributeInfoDialogView extends JDialog { } }); - add(PanelFactory.createButtonPanel(new JButton[] { - saveButton, cancelButton - }), BorderLayout.SOUTH); + JButton[] buttons = {cancelButton, saveButton}; + add(PanelFactory.createButtonPanel(buttons), BorderLayout.SOUTH); - typeComboBox.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - boolean isType = false; - String[] typeNames = ModelerUtil.getRegisteredTypeNames(); - for (String typeName : typeNames) { - if (typeComboBox.getSelectedItem() == null || typeName.equals(typeComboBox.getSelectedItem().toString())) { - isType = true; - } - } - - if (isType || !mediator.getEmbeddableNamesInCurrentDataDomain().contains(typeComboBox.getSelectedItem())) { - ((CardLayout) typeManagerPane.getLayout()).show(typeManagerPane, FLATTENED_PANEL); - } else { - ((CardLayout) typeManagerPane.getLayout()).show(typeManagerPane, EMBEDDABLE_PANEL); - getCurrentPathLabel().setText(""); + typeComboBox.addActionListener(e -> { + boolean isType = false; + String[] typeNames = ModelerUtil.getRegisteredTypeNames(); + for (String typeName : typeNames) { + if (typeComboBox.getSelectedItem() == null || typeName.equals(typeComboBox.getSelectedItem().toString())) { + isType = true; } } + if (isType || !mediator.getEmbeddableNamesInCurrentDataDomain().contains((String)typeComboBox.getSelectedItem())) { + ((CardLayout) typeManagerPane.getLayout()).show(typeManagerPane, FLATTENED_PANEL); + } else { + ((CardLayout) typeManagerPane.getLayout()).show(typeManagerPane, EMBEDDABLE_PANEL); + getCurrentPathLabel().setText(""); + } }); } @@ -223,7 +215,7 @@ public class ObjAttributeInfoDialogView extends JDialog { return tablePreferences; } - public JComboBox getTypeComboBox() { + public JComboBox<String> getTypeComboBox() { return typeComboBox; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java index b312f87..d381f82 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java @@ -47,16 +47,11 @@ import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.Vector; public class ObjRelationshipInfo extends CayenneController implements TreeSelectionListener { @@ -106,7 +101,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect targetCollection = ObjRelationship.DEFAULT_COLLECTION_TYPE; } - this.objectTarget = (ObjEntity) relationship.getTargetEntity(); + this.objectTarget = relationship.getTargetEntity(); if (objectTarget != null) { updateTargetCombo(objectTarget.getDbEntity()); view.targetCombo.setSelectedItem(objectTarget.getName()); @@ -117,7 +112,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect // and target entities present, with DbEntities chosen. validateCanMap(); - this.targetCollections = new ArrayList<String>(4); + this.targetCollections = new ArrayList<>(4); targetCollections.add(COLLECTION_TYPE_COLLECTION); targetCollections.add(ObjRelationship.DEFAULT_COLLECTION_TYPE); targetCollections.add(COLLECTION_TYPE_MAP); @@ -127,11 +122,11 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect view.collectionTypeCombo.addItem(s); } - this.mapKeys = new ArrayList<String>(); + this.mapKeys = new ArrayList<>(); initMapKeys(); // setup path - dbRelationships = new ArrayList<DbRelationship>(relationship.getDbRelationships()); + dbRelationships = new ArrayList<>(relationship.getDbRelationships()); selectPath(); updateCollectionChoosers(); @@ -142,52 +137,19 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect } private void initController() { - view.getCancelButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - view.dispose(); - } - }); - view.getSaveButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - saveMapping(); - } - }); - view.getNewRelButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - createRelationship(); - } - }); - view.getSelectPathButton().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - selectPath(); - } - }); - view.getCollectionTypeCombo().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - setCollectionType(); - } - }); - view.getMapKeysCombo().addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - setMapKey(); - } - }); - view.getTargetCombo().addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - Object targetName = e.getItem(); - for (ObjEntity target : objectTargets) { - if (Objects.equals(target.getName(), targetName)) { - setObjectTarget(target); - return; - } + view.getCancelButton().addActionListener(e -> view.dispose()); + view.getSaveButton().addActionListener(e -> saveMapping()); + view.getNewRelButton().addActionListener(e -> createRelationship()); + view.getSelectPathButton().addActionListener(e -> selectPath()); + view.getCollectionTypeCombo().addActionListener(e -> setCollectionType()); + view.getMapKeysCombo().addActionListener(e -> setMapKey()); + view.getTargetCombo().addItemListener(e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + Object targetName = e.getItem(); + for (ObjEntity target : objectTargets) { + if (Objects.equals(target.getName(), targetName)) { + setObjectTarget(target); + return; } } } @@ -257,7 +219,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect } public void selectPath() { - setSavedDbRelationships(new ArrayList<DbRelationship>(dbRelationships)); + setSavedDbRelationships(new ArrayList<>(dbRelationships)); } /** @@ -293,12 +255,12 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect */ protected void clearPath() { getPathBrowser().clearSelection(); - setDbRelationships(new ArrayList<DbRelationship>()); + setDbRelationships(new ArrayList<>()); } protected void saveMapping() { if (!getDbRelationships().equals(getSavedDbRelationships())) { - if (JOptionPane.showConfirmDialog((Component) getView(), + if (JOptionPane.showConfirmDialog(getView(), "You have changed Db Relationship path. Do you want it to be saved?", "Save ObjRelationship", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { selectPath(); @@ -358,12 +320,11 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect targetModel.getSource().removeRelationship(dbRelationship.getName()); } else { MultiColumnBrowser pathBrowser = getPathBrowser(); - Object[] oldPath = targetModel.isSource1Selected() ? new Object[] { getStartEntity() } : pathBrowser - .getSelectionPath().getPath(); + Object[] oldPath = targetModel.isSource1Selected() + ? new Object[] { getStartEntity() } + : pathBrowser.getSelectionPath().getPath(); - /** - * Update the view - */ + // Update the view EntityTreeModel treeModel = (EntityTreeModel) pathBrowser.getModel(); treeModel.invalidate(); @@ -383,10 +344,8 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect public ObjectNameGenerator createNamingStrategy(String strategyClass) { try { ClassLoadingService classLoader = application.getClassLoadingService(); - return classLoader.loadClass(ObjectNameGenerator.class, strategyClass).newInstance(); - } - catch (Throwable th) { + } catch (Throwable th) { JOptionPane.showMessageDialog( view, "Naming Strategy Initialization Error: " + th.getMessage(), @@ -408,14 +367,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect return; } - Relationship rel = (Relationship) selectedPath.getLastPathComponent(); - DbEntity target = (DbEntity) rel.getTargetEntity(); - /** - * Initialize root with one of mapped ObjEntities. - */ - Collection<ObjEntity> objEntities = target.getDataMap().getMappedEntities(target); - - List<DbRelationship> relPath = new Vector<DbRelationship>(selectedPath.getPathCount() - 1); + List<DbRelationship> relPath = new ArrayList<>(selectedPath.getPathCount() - 1); for (int i = 1; i < selectedPath.getPathCount(); i++) { relPath.add((DbRelationship) selectedPath.getPathComponent(i)); } @@ -438,10 +390,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect mapKeys.add(DEFAULT_MAP_KEY); - /** - * Object target can be null when selected target DbEntity has no - * ObjEntities - */ + // Object target can be null when selected target DbEntity has no ObjEntities if (objectTarget == null) { return; } @@ -466,11 +415,11 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect protected void updateTargetCombo(DbEntity dbTarget) { // copy those that have DbEntities mapped to dbTarget, and then sort - this.objectTargets = new ArrayList<ObjEntity>(); + this.objectTargets = new ArrayList<>(); if (dbTarget != null) { objectTargets.addAll(dbTarget.getDataMap().getMappedEntities(dbTarget)); - Collections.sort(objectTargets, Comparators.getNamedObjectComparator()); + objectTargets.sort(Comparators.getNamedObjectComparator()); } view.targetCombo.removeAllItems(); for (ObjEntity s : objectTargets) { @@ -510,8 +459,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect public void setDbRelationships(List<DbRelationship> rels) { this.dbRelationships = rels; - updateTargetCombo(rels.size() > 0 ? (DbEntity) rels.get(rels.size() - 1).getTargetEntity() : null); - + updateTargetCombo(rels.size() > 0 ? rels.get(rels.size() - 1).getTargetEntity() : null); updateCollectionChoosers(); } @@ -577,11 +525,10 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect } if (savedDbRelationships.size() > 0) { - DbEntity lastEntity = (DbEntity) savedDbRelationships.get(savedDbRelationships.size() - 1) - .getTargetEntity(); + DbEntity lastEntity = savedDbRelationships.get(savedDbRelationships.size() - 1).getTargetEntity(); if (objectTarget == null || objectTarget.getDbEntity() != lastEntity) { - /** + /* * Entities in combobox and path browser do not match. In this * case, we rely on the browser and automatically select one of * lastEntity's ObjEntities @@ -632,7 +579,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect relationship.setMapKey(mapKey); } - /** + /* * As of CAY-436 here we check if to-many property has changed during * the editing, and if so, delete rule must be reset to default value */ @@ -657,7 +604,6 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect private void breakChain(int index) { // strip everything starting from the index - while (dbRelationships.size() > (index + 1)) { // remove last dbRelationships.remove(dbRelationships.size() - 1); @@ -678,12 +624,9 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect if (target != null && (last == null || last.getTargetEntity() != target)) { // try to connect automatically, if we can't use dummy connector - Entity source = (last == null) ? getStartEntity() : last.getTargetEntity(); if (source != null) { - - Relationship anyConnector = source != null ? source.getAnyRelationship(target) : null; - + Relationship anyConnector = source.getAnyRelationship(target); if (anyConnector != null) { dbRelationships.add((DbRelationship) anyConnector); } @@ -708,11 +651,11 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect } public DbEntity getStartEntity() { - return ((ObjEntity) relationship.getSourceEntity()).getDbEntity(); + return relationship.getSourceEntity().getDbEntity(); } public DbEntity getEndEntity() { - /** + /* * Object target can be null when selected target DbEntity has no * ObjEntities */ http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoView.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoView.java index cf90b41..54fefce 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoView.java @@ -48,9 +48,9 @@ public class ObjRelationshipInfoView extends JDialog{ protected WidgetFactory widgetFactory; protected Component collectionTypeLabel; - protected JComboBox collectionTypeCombo; + protected JComboBox<String> collectionTypeCombo; protected Component mapKeysLabel; - protected JComboBox mapKeysCombo; + protected JComboBox<String> mapKeysCombo; protected JButton saveButton; protected JButton cancelButton; @@ -60,7 +60,7 @@ public class ObjRelationshipInfoView extends JDialog{ protected JTextField relationshipName; protected JLabel currentPathLabel; protected JLabel sourceEntityLabel; - protected JComboBox targetCombo; + protected JComboBox<String> targetCombo; ProjectController mediator; @@ -104,18 +104,22 @@ public class ObjRelationshipInfoView extends JDialog{ builder.setDefaultDialogBorder(); builder.addSeparator("ObjRelationship Information", cc.xywh(1, 1, 5, 1)); - builder.addLabel("Relationship:", cc.xy(1, 3)); - builder.add(relationshipName, cc.xywh(3, 3, 1, 1)); - builder.addLabel("Current Db Path:", cc.xy(1, 5)); - builder.add(currentPathLabel, cc.xywh(3, 5, 5, 1)); + builder.addLabel("Source Entity:", cc.xy(1, 3)); + builder.add(sourceEntityLabel, cc.xywh(3, 3, 1, 1)); + + builder.addLabel("Target Entity:", cc.xy(1, 5)); + builder.add(targetCombo, cc.xywh(3, 5, 1, 1)); + + builder.addLabel("Relationship Name:", cc.xy(1, 7)); + builder.add(relationshipName, cc.xywh(3, 7, 1, 1)); + + builder.addLabel("Current Db Path:", cc.xy(1, 9)); + builder.add(currentPathLabel, cc.xywh(3, 9, 5, 1)); - builder.addLabel("Source:", cc.xy(1, 7)); - builder.add(sourceEntityLabel, cc.xywh(3, 7, 1, 1)); - builder.addLabel("Target:", cc.xy(1, 9)); - builder.add(targetCombo, cc.xywh(3, 9, 1, 1)); collectionTypeLabel = builder.addLabel("Collection Type:", cc.xy(1, 11)); builder.add(collectionTypeCombo, cc.xywh(3, 11, 1, 1)); + mapKeysLabel = builder.addLabel("Map Key:", cc.xy(1, 13)); builder.add(mapKeysCombo, cc.xywh(3, 13, 1, 1)); @@ -132,9 +136,8 @@ public class ObjRelationshipInfoView extends JDialog{ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), cc.xywh(1, 19, 5, 3)); add(builder.getPanel(), BorderLayout.CENTER); - add(PanelFactory.createButtonPanel(new JButton[] { - saveButton, cancelButton - }), BorderLayout.SOUTH); + JButton[] buttons = {cancelButton, saveButton}; + add(PanelFactory.createButtonPanel(buttons), BorderLayout.SOUTH); } public JButton getSaveButton() http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/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 527acc2..13aab58 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 @@ -153,7 +153,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL // Create and install a popup Icon ico = ModelerUtil.buildIcon("icon-edit.png"); - resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico); + resolveMenu = new CayenneAction.CayenneMenuItem("Edit Attribute", ico); JPopupMenu popup = new JPopupMenu(); popup.add(resolveMenu); http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/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 aa3ff2f..4b53d8e 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 @@ -46,7 +46,6 @@ import org.apache.cayenne.modeler.util.DbRelationshipPathComboBoxEditor; import org.apache.cayenne.modeler.util.ModelerUtil; import org.apache.cayenne.modeler.util.PanelFactory; import org.apache.cayenne.modeler.util.UIUtil; -import org.apache.cayenne.swing.components.image.FilteredIconFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +68,6 @@ import javax.swing.table.TableColumn; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; -import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; @@ -151,29 +149,22 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl mediator.addObjEntityListener(this); mediator.addObjRelationshipListener(this); - resolver = new ActionListener() { - - public void actionPerformed(ActionEvent e) { - int row = table.getSelectedRow(); - if (row < 0) { - return; - } + resolver = e -> { + int row = table.getSelectedRow(); + if (row < 0) { + return; + } - ObjRelationshipTableModel model = (ObjRelationshipTableModel) table - .getModel(); - new ObjRelationshipInfo(mediator, model.getRelationship(row)).startupAction(); + ObjRelationshipTableModel model = (ObjRelationshipTableModel) table.getModel(); + new ObjRelationshipInfo(mediator, model.getRelationship(row)).startupAction(); - /** - * This is required for a table to be updated properly - */ - table.cancelEditing(); + // This is required for a table to be updated properly + table.cancelEditing(); - // need to refresh selected row... do this by unselecting/selecting the - // row - table.getSelectionModel().clearSelection(); - table.select(row); - enabledResolve = false; - } + // need to refresh selected row... do this by unselecting/selecting the row + table.getSelectionModel().clearSelection(); + table.select(row); + enabledResolve = false; }; resolveMenu.addActionListener(resolver); http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java index 792e19f..74eac88 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java @@ -113,7 +113,7 @@ public class DbEntityAttributeRelationshipTab extends JPanel implements DbEntity toolBar.addSeparator(); Icon ico = ModelerUtil.buildIcon("icon-edit.png"); - resolve.setToolTipText("Database Mapping"); + resolve.setToolTipText("Edit Relationship"); resolve.setIcon(ico); resolve.setDisabledIcon(FilteredIconFactory.createDisabledIcon(ico)); toolBar.add(resolve).setEnabled(false); http://git-wip-us.apache.org/repos/asf/cayenne/blob/eb863c9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java index a68bd93..2307ef9 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java @@ -138,21 +138,18 @@ public class DbEntityRelationshipPanel extends JPanel implements DbEntityDisplay this.mediator.addDbEntityListener(this); this.mediator.addDbRelationshipListener(this); - resolver = new ActionListener() { - - public void actionPerformed(ActionEvent e) { - int row = table.getSelectedRow(); - if (row < 0) { - return; - } - - // Get DbRelationship - DbRelationshipTableModel model = (DbRelationshipTableModel) table.getModel(); - DbRelationship rel = model.getRelationship(row); - ResolveDbRelationshipDialog dialog = new ResolveDbRelationshipDialog(rel); - dialog.setVisible(true); - dialog.dispose(); + resolver = e -> { + int row = table.getSelectedRow(); + if (row < 0) { + return; } + + // Get DbRelationship + DbRelationshipTableModel model = (DbRelationshipTableModel) table.getModel(); + DbRelationship rel = model.getRelationship(row); + ResolveDbRelationshipDialog dialog = new ResolveDbRelationshipDialog(rel); + dialog.setVisible(true); + dialog.dispose(); }; resolveMenu.addActionListener(resolver);