Repository: cayenne Updated Branches: refs/heads/master 47d0fc5f8 -> 0ac7dd455
CAY-2082 Modeler generates incorrect underscore class with inheritance Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/821d730e Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/821d730e Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/821d730e Branch: refs/heads/master Commit: 821d730e5f0b738de9f22c4d67fd65468baad68e Parents: 47d0fc5 Author: Anton Dreka <drek...@gmail.com> Authored: Wed Apr 19 14:51:54 2017 +0300 Committer: Anton Dreka <drek...@gmail.com> Committed: Wed Apr 19 14:51:54 2017 +0300 ---------------------------------------------------------------------- .../validation/ObjAttributeValidator.java | 16 ++++++++ .../modeler/editor/ObjEntityAttributePanel.java | 39 +++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/821d730e/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjAttributeValidator.java ---------------------------------------------------------------------- diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjAttributeValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjAttributeValidator.java index 7f58e32..1cd3d10 100644 --- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjAttributeValidator.java +++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjAttributeValidator.java @@ -50,6 +50,7 @@ class ObjAttributeValidator extends ConfigurationNodeValidator { } checkForDuplicates(attribute, validationResult); + checkSuperEntityAttributes(attribute, validationResult); } private void validateName(ObjAttribute attribute, ValidationResult validationResult) { @@ -74,6 +75,21 @@ class ObjAttributeValidator extends ConfigurationNodeValidator { } } + private void checkSuperEntityAttributes(ObjAttribute attribute, ValidationResult validationResult) { + // Check there is an attribute in entity and super entity at the same time + + boolean selfAttribute = false; + if (attribute.getEntity().getDeclaredAttribute(attribute.getName()) != null) { + selfAttribute = true; + } + + ObjEntity superEntity = attribute.getEntity().getSuperEntity(); + if (selfAttribute && superEntity != null && superEntity.getAttribute(attribute.getName()) != null) { + addFailure(validationResult, attribute, "'%s' and super '%s' can't have attribute '%s' together ", + attribute.getEntity().getName(), superEntity.getName(), attribute.getName()); + } + } + private void validateDbAttribute(ObjAttribute attribute, ValidationResult validationResult) { if (attribute.getEntity().isAbstract()) { // nothing to validate http://git-wip-us.apache.org/repos/asf/cayenne/blob/821d730e/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 7c03193..7601a2c 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 @@ -55,6 +55,8 @@ 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.JPanel; import javax.swing.JPopupMenu; @@ -74,7 +76,7 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -245,6 +247,9 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL } table.select(ind); + if (e.getOldName() != null) { + removeDuplicateAttribute(e); + } } public void objAttributeAdded(AttributeEvent e) { @@ -290,6 +295,38 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL } } + public void removeDuplicateAttribute(AttributeEvent e) { + ObjEntity current = (ObjEntity) e.getEntity(); + Collection<ObjEntity> objEntities = new ArrayList<>(); + for (ObjEntity objEntity: e.getEntity().getDataMap().getObjEntities()) { + if (objEntity.isSubentityOf(current)) { + objEntities.add(objEntity); + } + } + + for (ObjEntity objEntity: objEntities) { + if (objEntity.getDeclaredAttribute(e.getAttribute().getName()) != null) { + + JOptionPane pane = new JOptionPane( + String.format("'%s' and '%s' can't have attribute '%s' together. " + + "Would you like to delete this attribute from the '%s' class?", + objEntity.getName(), e.getEntity().getName(), e.getAttribute().getName(), objEntity.getName()), + JOptionPane.QUESTION_MESSAGE, + JOptionPane.YES_NO_OPTION); + + JDialog dialog = pane.createDialog(Application.getFrame(), "Confirm Remove"); + dialog.setVisible(true); + + boolean shouldDelete; + Object selectedValue = pane.getValue(); + shouldDelete = selectedValue != null && selectedValue.equals(JOptionPane.YES_OPTION); + if (shouldDelete) { + objEntity.removeAttribute(e.getAttribute().getName()); + } + } + } + } + public void currentObjEntityChanged(EntityDisplayEvent e) { if (e.getSource() == this) { return;