This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 35a8990c3c8d80fc0c5fc13eb974e0d25826c169 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 24 09:49:07 2016 +0200 POC --- .../application/ui/ContentUIInitializer.java | 63 +++++++++++ .../editor/application/ui/ContentUIManager.java | 4 +- .../application/ui/content/AggregationMode.java | 12 +++ .../application/ui/content/AttributeContentUI.jaxx | 22 ++-- .../application/ui/content/AttributeContentUI.jcss | 42 +++++--- .../ui/content/AttributeContentUIHandler.java | 28 ++--- .../application/ui/content/ClassContentUI.jaxx | 8 +- .../application/ui/content/ClassContentUI.jcss | 9 +- .../ui/content/ClassContentUIHandler.java | 40 +++++-- .../editor/application/ui/content/ContentUI.java | 6 ++ .../editor/application/ui/content/ContentUI.jcss | 13 ++- ...{ContenUIHandler.java => ContentUIHandler.java} | 119 +++++++++------------ .../ui/content/EnumerationContentUI.jaxx | 8 +- .../ui/content/EnumerationContentUI.jcss | 6 +- .../ui/content/EnumerationContentUIHandler.java | 13 ++- .../application/ui/content/InterfaceContentUI.jaxx | 2 +- .../application/ui/content/InterfaceContentUI.jcss | 4 +- .../ui/content/InterfaceContentUIHandler.java | 13 ++- .../application/ui/content/ModelContentUI.jcss | 2 +- .../ui/content/ModelContentUIHandler.java | 11 +- .../application/ui/content/Multiplicity.java | 22 +++- .../application/ui/content/OperationContentUI.jaxx | 18 +++- .../application/ui/content/OperationContentUI.jcss | 10 +- .../ui/content/OperationContentUIHandler.java | 8 +- .../application/ui/content/PackageContentUI.jcss | 2 +- .../ui/content/PackageContentUIHandler.java | 11 +- .../editor/application/ui/content/Visibility.java | 33 ++++++ .../actions/AddInterfaceFromClassAction.java | 10 +- .../actions/AddLiteralFromEnumerationAction.java | 32 ------ .../actions/AddSuperClassFromInterfaceAction.java | 4 +- .../ui/content/actions/ContentActionSupport.java | 16 ++- .../CreateAttributeFromAttributeAction.java | 4 +- .../actions/CreateAttributeFromClassAction.java | 4 +- .../CreateAttributeFromInterfaceAction.java | 4 +- .../CreateLiteralFromEnumerationAction.java | 11 ++ .../CreateOperationFromOperationAction.java | 4 +- .../actions/CreatePackageFromModelAction.java | 2 +- .../CreateParameterFromOperationAction.java | 1 + .../DeleteAttributeFromAttributeAction.java | 19 ++-- .../actions/DeleteClassFromClassAction.java | 12 +-- .../DeleteEnumerationFromEnumerationAction.java | 12 +-- .../DeleteInterfaceFromInterfaceAction.java | 12 +-- ...va => DeleteLiteralsFromEnumerationAction.java} | 4 +- .../DeleteOperationFromOperationAction.java | 15 +-- .../actions/DeletePackageFromPackageAction.java | 11 +- ...n.java => RemoveInterfacesFromClassAction.java} | 12 +-- ... => RemoveSuperClassesFromInterfaceAction.java} | 10 +- .../ui/tree/EugeneEditorTreeSelectionModel.java | 12 ++- .../application/ui/tree/node/AttributeNode.java | 98 ++++++++++++++--- .../editor/application/ui/tree/node/ClassNode.java | 55 +++++----- .../ui/tree/node/ClassifierNodeSupport.java | 103 ++++++++++++++++++ .../application/ui/tree/node/EnumerationNode.java | 22 ++-- .../application/ui/tree/node/InterfaceNode.java | 44 +++----- .../editor/application/ui/tree/node/ModelNode.java | 48 ++++++--- .../application/ui/tree/node/NodeSupport.java | 97 +++++++++-------- .../application/ui/tree/node/OperationNode.java | 39 ++++--- .../application/ui/tree/node/PackageNode.java | 10 +- .../eugene-editor-maven-plugin_en_GB.properties | 17 +-- .../eugene-editor-maven-plugin_fr_FR.properties | 19 ++-- .../src/main/resources/icons/action-redo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/action-rollback.png | Bin 0 -> 469 bytes .../src/main/resources/icons/action-undo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/type-attribute2x.png | Bin 0 -> 991 bytes .../src/main/resources/icons/type-class2x.png | Bin 0 -> 991 bytes .../main/resources/icons/type-enumeration2x.png | Bin 0 -> 803 bytes .../src/main/resources/icons/type-field.png | Bin 0 -> 499 bytes .../src/main/resources/icons/type-field2x.png | Bin 0 -> 925 bytes .../src/main/resources/icons/type-interface2x.png | Bin 0 -> 832 bytes .../src/main/resources/icons/type-model2x.png | Bin 0 -> 175 bytes .../src/main/resources/icons/type-operation2x.png | Bin 0 -> 870 bytes .../src/main/resources/icons/type-package2x.png | Bin 0 -> 218 bytes .../src/main/resources/icons/type-value.png | Bin 0 -> 95 bytes .../src/main/resources/icons/type-value2x.png | Bin 0 -> 122 bytes .../src/main/resources/icons/type-variable.png | Bin 0 -> 515 bytes .../src/main/resources/icons/type-variable2x.png | Bin 0 -> 911 bytes .../tree/node/OperationNode-error-validation.xml | 2 +- .../object/xml/ObjectModelAttributeImpl.java | 8 ++ .../object/xml/ObjectModelClassifierImpl.java | 11 ++ pom.xml | 2 +- 79 files changed, 813 insertions(+), 502 deletions(-) diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java index e05c029..5364871 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTitledPanel; import org.nuiton.eugene.editor.application.ui.content.ContentUI; import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; @@ -16,20 +17,28 @@ import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JRadioButton; import javax.swing.JTextField; +import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.UIDefaults; +import javax.swing.UIManager; import javax.swing.text.JTextComponent; import java.awt.Component; +import java.awt.Insets; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; +import java.awt.event.ItemEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.lang.reflect.InvocationTargetException; import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Objects; /** * Created on 16/09/16. @@ -47,6 +56,9 @@ public class ContentUIInitializer { this.callbacks = callbacks; } + //TODO Utilisiter ça sur les JXTitledPanel + //UIManager.getInsets("JXTitledPanel.captionInsets") + public static <U extends ContentUI> ContentUIInitializer newInitializer() { return ContentUIInitializer.<U>builder() @@ -75,6 +87,15 @@ public class ContentUIInitializer { action.putValue(Action.SHORT_DESCRIPTION, tip); } action.setEnabled(editor.isEnabled()); + String accelerator = (String) editor.getClientProperty("accelerator"); + if (accelerator != null) { + + KeyStroke keyStroke = KeyStroke.getKeyStroke(accelerator); + Objects.requireNonNull(keyStroke, "cant find keystroke for accelerator: " + accelerator); + action.putValue(Action.ACCELERATOR_KEY, keyStroke); + action.putValue(Action.ACTION_COMMAND_KEY, action.getClass().getName()); + + } editor.setAction(action); } catch (ClassNotFoundException e) { // no action foud @@ -90,6 +111,19 @@ public class ContentUIInitializer { } editor.init(); }) + .addCallback(JXTitledPanel.class, (ui, editor) -> { + if (log.isDebugEnabled()) { + log.debug("init jx title panel" + editor.getName()); + } + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + defaults.put("JXTitledPanel.captionInsets", new Insets(5, 5, 5, 5)); + + editor.putClientProperty("Nimbus.Overrides.InheritDefaults", true); + editor.putClientProperty("Nimbus.Overrides", defaults); + + SwingUtilities.updateComponentTreeUI(editor); + + }) .addCallback(JLabel.class, (ui, editor) -> { String name = editor.getName(); if (name != null && name.endsWith("Label")) { @@ -122,6 +156,35 @@ public class ContentUIInitializer { } }) + .addCallback(JComboBox.class, (ui, editor) -> { + + String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addItemListener( + e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + JComboBox source = (JComboBox) e.getSource(); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, source.getSelectedItem()); + } + }); + } + + }) + .addCallback(JRadioButton.class, (ui, editor) -> { + + String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addItemListener( + e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + JRadioButton source = (JRadioButton) e.getSource(); + Object selectedValue = source.getClientProperty("$value"); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, selectedValue); + } + }); + } + + }) .addCallback(JCheckBox.class, (ui, editor) -> { if (log.isDebugEnabled()) { log.debug("init simple boolean editor " + editor.getName()); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java index 885ece1..7089661 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java @@ -16,6 +16,8 @@ import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import java.util.Collections; import java.util.Map; @@ -48,7 +50,7 @@ public class ContentUIManager { } - public <M, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { + public <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { Objects.requireNonNull(node); return contents.get(node.getClass().getName()); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java new file mode 100644 index 0000000..08eedb5 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java @@ -0,0 +1,12 @@ +package org.nuiton.eugene.editor.application.ui.content; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum AggregationMode { + NONE, + AGGREGATE, + COMPOSE +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx index b898689..ca9353c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx @@ -3,7 +3,9 @@ <style source="ContentUI.jcss"/> <import> + org.nuiton.eugene.editor.application.ui.content.AggregationMode org.nuiton.eugene.editor.application.ui.content.Multiplicity + org.nuiton.eugene.editor.application.ui.content.Visibility org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode </import> <script><![CDATA[ @@ -31,7 +33,7 @@ public void close() { handler.close(); } <JLabel id="attributeNameLabel"/> </cell> <cell weightx="1"> - <JTextField id="attributeName" onKeyReleased="model.setName(attributeName.getText())"/> + <JTextField id="attributeName"/> </cell> </row> <row> @@ -39,7 +41,7 @@ public void close() { handler.close(); } <JLabel id="attributeTypeLabel"/> </cell> <cell> - <JComboBox id="attributeType" genericType="String" onActionPerformed="model.setType((String)attributeType.getSelectedItem())"/> + <JComboBox id="attributeType" genericType="String"/> </cell> </row> <row> @@ -53,10 +55,10 @@ public void close() { handler.close(); } <row> <cell columns="3"> <JPanel id="visibility"> - <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> - <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPublic" value="{Visibility.PUBLIC}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="{Visibility.PACKAGE}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="{Visibility.PROTECTED}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="{Visibility.PRIVATE}" styleClass="visibilityMode"/> </JPanel> </cell> </row> @@ -69,9 +71,11 @@ public void close() { handler.close(); } </cell> <cell> <JPanel id="aggregation"> - <JRadioButton id="aggregationAggregate" value="aggregate" styleClass="aggregationMode"/> - <JRadioButton id="aggregationCompose" value="compose" styleClass="aggregationMode"/> - <JRadioButton id="aggregationNone" value="none" styleClass="aggregationMode"/> + <JRadioButton id="aggregationAggregate" value="{AggregationMode.AGGREGATE}" + styleClass="aggregationMode"/> + <JRadioButton id="aggregationCompose" value="{AggregationMode.COMPOSE}" styleClass="aggregationMode"/> + <JRadioButton id="aggregationNone" value="{AggregationMode.NONE}" styleClass="aggregationMode"/> + <JSeparator constructorParams="JSeparator.VERTICAL"/> <JCheckBox id="bidi" constraints="BorderLayout.EAST"/> </JPanel> </cell> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss index d521a84..7d05087 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss @@ -8,7 +8,7 @@ } #attributeName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -17,7 +17,7 @@ } #attributeDefaultValue { - text:{getModel().getUserObject().getDefaultValue()}; + text:{getModel().getDefaultValue()}; _property:{"defaultValue"}; } @@ -26,7 +26,7 @@ } #attributeType { - selectedItem:{getModel().getUserObject().getType()}; + selectedItem:{getModel().getType()}; _property:{"type"}; } @@ -40,30 +40,42 @@ actionIcon:delete; } +#multiplicity { + selectedItem:{getModel().getMultiplicity()}; + _property:{"multiplicity"}; +} + +#aggregation { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.aggregation"))}; + layout: {new GridLayout(1, 0)}; +} + +.aggregationMode { + buttonGroup:"aggregationMode"; + _property:{"aggregationMode"}; +} + +#aggregationMode { + selectedValue: {getModel().getAggregationMode()}; +} + #aggregationAggregate { text:"eugene.editor.aggregation.aggregate"; - selected:{"aggregate".equals(aggregationMode.getSelectedValue())}; + selected:{AggregationMode.AGGREGATE.equals(aggregationMode.getSelectedValue())}; } #aggregationCompose { text:"eugene.editor.aggregation.compose"; - selected:{"compose".equals(aggregationMode.getSelectedValue())}; + selected:{AggregationMode.COMPOSE.equals(aggregationMode.getSelectedValue())}; } #aggregationNone { text:"eugene.editor.aggregation.none"; - selected:{"none".equals(aggregationMode.getSelectedValue())}; -} - -#aggregation { - border: {new javax.swing.border.TitledBorder(t("eugene.editor.aggregation"))}; - layout: {new GridLayout(1, 0)}; -} - -.aggregationMode { - buttonGroup:"aggregationMode"; + selected:{AggregationMode.NONE.equals(aggregationMode.getSelectedValue())}; } #bidi { text:"eugene.editor.bidi"; + selected:{getModel().isBidi()}; + _property:{"bidi"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java index 9571351..646e375 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java @@ -4,7 +4,7 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; import java.util.ArrayList; import java.util.Arrays; @@ -16,7 +16,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class AttributeContentUIHandler extends ContenUIHandler<AttributeNode, AttributeContentUI> { +public class AttributeContentUIHandler extends ContentUIHandler<ObjectModelAttributeImpl, AttributeNode, AttributeContentUI> { @Override public void beforeInit(AttributeContentUI ui) { @@ -34,36 +34,26 @@ public class AttributeContentUIHandler extends ContenUIHandler<AttributeNode, At @Override protected void open(AttributeContentUI ui, AttributeNode node) { - ObjectModelAttribute data = node.getUserObject(); + super.open(ui, node); - open(ui, node, data.getStereotypes(), data.getTagValues()); - ui.getVisibilityMode().setSelectedValue(data.getVisibility()); +// ui.getVisibilityMode().setSelectedValue(node.getVisibility()); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allClasses = new ArrayList<>(modelHelper.getAllClassesWithJava()); Collections.sort(allClasses); allClasses.add(0, null); - SwingUtil.fillComboBox(ui.getAttributeType(), allClasses, data.getType()); + SwingUtil.fillComboBox(ui.getAttributeType(), allClasses, node.getType()); List<Multiplicity> multiplicities = Arrays.asList(Multiplicity.values()); - SwingUtil.fillComboBox(ui.getMultiplicity(), multiplicities, Multiplicity.valueOf(data.getMinMultiplicity(), data.getMaxMultiplicity())); + SwingUtil.fillComboBox(ui.getMultiplicity(), multiplicities, node.getMultiplicity()); - ui.getAggregationMode().setSelectedValue("none"); - if (data.isAggregate()) { +// ui.getAggregationMode().setSelectedValue(node.getAggregationMode()); - ui.getAggregationMode().setSelectedValue("aggregate"); - } - if (data.isComposite()) { - ui.getAggregationMode().setSelectedValue("compose"); - } +// ui.getBidi().setSelected(node.isBidi()); - ObjectModelAttribute reverseAttribute = data.getReverseAttribute(); - - ui.getBidi().setSelected(reverseAttribute != null && reverseAttribute.isNavigable()); - - ui.getAttributeDefaultValue().setText(data.getDefaultValue()); + ui.getAttributeDefaultValue().setText(node.getDefaultValue()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx index 3317648..688992c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx @@ -1,4 +1,5 @@ -<org.jdesktop.swingx.JXTitledPanel id="classMainContent" implements="ContentUI<ClassNode>" styleClass="top"> +<org.jdesktop.swingx.JXTitledPanel id="classMainContent" implements="ContentUI<ClassNode>" styleClass="top" + onKeyPressed="log.info(event)"> <style source="ContentUI.jcss"/> <import> @@ -36,7 +37,8 @@ public void close() { handler.close(); } <JLabel id="superClassLabel"/> </cell> <cell weightx="1"> - <JComboBox id="superClass" genericType="String"/> + <JComboBox id="superClass" genericType="String" + onItemStateChanged="if( event.getStateChange() == ItemEvent.SELECTED) { model.setSuperClass((String)superClass.getSelectedItem()); }"/> </cell> </row> <row> @@ -49,7 +51,7 @@ public void close() { handler.close(); } onItemStateChanged="addInterfaceFromClass.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> <JToolBar id="interfacesHeaderActions" constraints="BorderLayout.EAST"> <JButton id="addInterfaceFromClass"/> - <JButton id="removeInterfaceFromClass"/> + <JButton id="removeInterfacesFromClass"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss index 23a071c..dfd4433 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss @@ -1,5 +1,4 @@ - #classMainContent { title:"eugene.editor.class"; } @@ -13,7 +12,7 @@ } #className { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -41,12 +40,16 @@ text:"eugene.editor.add.interface"; actionIcon:add; enabled:false; + _accelerator:{"ctrl INSERT"}; + _acceleratorComponent:{generalPane.getContentPane()}; } -#removeInterfaceFromClass { +#removeInterfacesFromClass { text:"eugene.editor.delete.interface"; actionIcon:delete; enabled:false; + _accelerator:{"ctrl DELETE"}; + _acceleratorComponent:{generalPane.getContentPane()}; } #interfaces { diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java index f4792bd..bfa4399 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java @@ -4,19 +4,25 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; -import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import javax.swing.Action; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JRootPane; +import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassContentUI> { +public class ClassContentUIHandler extends ContentUIHandler<ObjectModelClassImpl, ClassNode, ClassContentUI> { @Override public void beforeInit(ClassContentUI ui) { @@ -29,15 +35,14 @@ public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassConte ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getClassTagValues(), helper.getClassStereotypes()); - ui.getInterfaces().getSelectionModel().addListSelectionListener(e -> ui.getRemoveInterfaceFromClass().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + ui.getInterfaces().getSelectionModel().addListSelectionListener(e -> ui.getRemoveInterfacesFromClass().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(ClassContentUI ui, ClassNode node) { - ObjectModelClass data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + super.open(ui, node); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allClasses = new ArrayList<>(modelHelper.getAllClasses()); @@ -48,13 +53,36 @@ public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassConte SwingUtil.fillComboBox(ui.getSuperClass(), allClasses, superClass); - addInterfaces(ui, data.getInterfaces(), ui.getInterfaces(), allClasses); + addInterfaces(ui, node.getInterfaces(), ui.getInterfaces(), allClasses); //TODO Supprimer toutes les classes qui héritent de celle ci allClasses.remove(superClass); SwingUtil.fillComboBox(ui.getInterfacesHeaderType(), allClasses, null); ui.getInterfacesHeaderType().setSelectedItem(null); + registerAction(ui, ui.getAddInterfaceFromClass()); + registerAction(ui, ui.getRemoveInterfacesFromClass()); + + } + + protected void registerAction(ClassContentUI ui, JButton editor) { + + JRootPane rootPane = ui.getRootPane(); + Objects.requireNonNull(rootPane); + + Action action = editor.getAction(); + Objects.requireNonNull(action); + + KeyStroke keyStroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); + Objects.requireNonNull(keyStroke); + + String actionKey = (String) action.getValue(Action.ACTION_COMMAND_KEY); + Objects.requireNonNull(actionKey); + + rootPane.getActionMap().put(actionKey, action); + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, actionKey); + } + } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java index 29737dd..aaa3295 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java @@ -3,6 +3,8 @@ package org.nuiton.eugene.editor.application.ui.content; import jaxx.runtime.JAXXObject; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import javax.swing.ActionMap; +import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.JPanel; @@ -26,4 +28,8 @@ public interface ContentUI<M extends NodeSupport> extends JAXXObject { JPanel getTagValues(); void close(); + + ActionMap getActionMap(); + + InputMap getInputMap(int condition); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss index 162b820..8387121 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss @@ -28,28 +28,33 @@ layout: {new GridLayout(1, 0)}; } +#visibilityMode { + selectedValue: {getModel().getVisibility()}; +} + .visibilityMode { buttonGroup:"visibilityMode"; + _property: {"visibility"}; } #visibilityPublic { text:"eugene.editor.visibility.public"; - selected:{"public".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PUBLIC.equals(getModel().getVisibility())}; } #visibilityPackage { text:"eugene.editor.visibility.package"; - selected:{"".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PACKAGE.equals(getModel().getVisibility())}; } #visibilityProtected { text:"eugene.editor.visibility.protected"; - selected:{"protected".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PROTECTED.equals(getModel().getVisibility())}; } #visibilityPrivate { text:"eugene.editor.visibility.private"; - selected:{"private".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PRIVATE.equals(getModel().getVisibility())}; } #noInterface { diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java similarity index 80% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java index d4ba542..a7db6d9 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java @@ -4,8 +4,9 @@ import jaxx.runtime.SwingUtil; import jaxx.runtime.spi.UIHandler; import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import org.nuiton.eugene.models.tagvalue.TagValueDefinition; import javax.swing.JCheckBox; @@ -15,71 +16,20 @@ import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.GridLayout; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class ContenUIHandler<M extends NodeSupport, U extends ContentUI<M>> implements UIHandler<U> { +public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, M extends NodeSupport<X>, U extends ContentUI<M>> implements UIHandler<U> { - protected abstract void open(U ui, M data); - - protected void close() { - - } - - protected void afterInit(U ui, - Map<String, TagValueDefinition> availableTagValues, - Map<String, StereotypeDefinition> availableStereotypes) { - - Map<String, Object> $objectMap = ui.get$objectMap(); - if (!availableStereotypes.isEmpty()) { - - JPanel stereotypes = ui.getStereotypes(); - stereotypes.putClientProperty("stereotypes", availableStereotypes); - stereotypes.setLayout(new GridLayout(1, 0)); - stereotypes.removeAll(); - for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { - String stereotype = entry.getKey(); - JCheckBox b = new JCheckBox(); - b.setText(stereotype); - b.setToolTipText(entry.getValue().documentation()); - stereotypes.add(b); - $objectMap.put("stereotype-" + stereotype, b); - } - } - - if (!availableTagValues.isEmpty()) { - - JPanel tagValues = ui.getTagValues(); - tagValues.putClientProperty("tagValues", availableTagValues); - tagValues.setLayout(new GridLayout(0, 2)); - tagValues.removeAll(); - - for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { - - JTextField field = new JTextField(); - - String tagValue = entry.getKey(); - JLabel label = new JLabel(tagValue); - $objectMap.put("tagValue-" + tagValue, field); - label.setToolTipText(entry.getValue().documentation()); - label.setLabelFor(field); - - tagValues.add(label); - tagValues.add(field); - } - } - - } - - protected void open(U ui, M model, Set<String> stereotypes, Map<String, String> tagValues) { + protected void open(U ui, M model) { + Set<String> stereotypes = model.getStereotypes(); + Map<String, String> tagValues = model.getTagValues(); ui.setModel(model); @@ -127,24 +77,61 @@ public abstract class ContenUIHandler<M extends NodeSupport, U extends ContentUI objectById.setText(entry.getValue()); } } + } + + protected void close() { } - protected void addInterfaces(U ui, Collection<ObjectModelInterface> interfaces, JList interfacesPanel, List<String> allClasses) { + protected void afterInit(U ui, + Map<String, TagValueDefinition> availableTagValues, + Map<String, StereotypeDefinition> availableStereotypes) { - List<String> interfaceNames; + Map<String, Object> $objectMap = ui.get$objectMap(); + if (!availableStereotypes.isEmpty()) { - if (interfaces.isEmpty()) { - interfaceNames = Collections.emptyList(); - } else { + JPanel stereotypes = ui.getStereotypes(); + stereotypes.putClientProperty("stereotypes", availableStereotypes); + stereotypes.setLayout(new GridLayout(1, 0)); + stereotypes.removeAll(); + for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { + String stereotype = entry.getKey(); + JCheckBox b = new JCheckBox(); + b.setText(stereotype); + b.setToolTipText(entry.getValue().documentation()); + stereotypes.add(b); + $objectMap.put("stereotype-" + stereotype, b); + } + } - interfaceNames = interfaces.stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); - Collections.sort(interfaceNames); - interfaceNames.add(0, null); - allClasses.removeAll(interfaceNames); + if (!availableTagValues.isEmpty()) { + + JPanel tagValues = ui.getTagValues(); + tagValues.putClientProperty("tagValues", availableTagValues); + tagValues.setLayout(new GridLayout(0, 2)); + tagValues.removeAll(); + + for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { + + JTextField field = new JTextField(); + + String tagValue = entry.getKey(); + JLabel label = new JLabel(tagValue); + $objectMap.put("tagValue-" + tagValue, field); + label.setToolTipText(entry.getValue().documentation()); + label.setLabelFor(field); + + tagValues.add(label); + tagValues.add(field); + } } - SwingUtil.fillList(interfacesPanel, interfaceNames, null); + } + + protected void addInterfaces(U ui, Collection<String> interfaces, JList interfacesPanel, List<String> allClasses) { + + allClasses.removeAll(interfaces); + SwingUtil.fillList(interfacesPanel, interfaces, null); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx index a045def..3e8f19e 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx @@ -34,11 +34,11 @@ public void close() { handler.close(); } <JScrollPane id="literalsScrollPane" columnHeaderView="{literalsHeader}"> <JList id="literals" genericType="String"/> <JPanel id="literalsHeader" layout="{new BorderLayout()}"> - <JTextField id="literalsHeaderName" constraints="BorderLayout.WEST" - onKeyReleased="addLiteralFromEnumeration.setEnabled(!literalsHeaderName.getText().trim().isEmpty())"/> + <JTextField id="literalsHeaderName" constraints="BorderLayout.CENTER" + onKeyReleased="createLiteralFromEnumeration.setEnabled(!literalsHeaderName.getText().trim().isEmpty())"/> <JToolBar id="literalsHeaderActions" constraints="BorderLayout.EAST"> - <JButton id="addLiteralFromEnumeration"/> - <JButton id="removeLiteralFromEnumeration"/> + <JButton id="createLiteralFromEnumeration"/> + <JButton id="deleteLiteralsFromEnumeration"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss index f0a9e13..2d7a82a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss @@ -9,7 +9,7 @@ } #enumerationName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -23,13 +23,13 @@ actionIcon:delete; } -#addLiteralFromEnumeration { +#createLiteralFromEnumeration { text:"eugene.editor.add.literal"; actionIcon:add; enabled:false; } -#removeLiteralFromEnumeration { +#deleteLiteralsFromEnumeration { text:"eugene.editor.delete.literal"; actionIcon:delete; enabled:false; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java index a89461b..388e162 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java @@ -2,7 +2,7 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; import javax.swing.DefaultListModel; import javax.swing.ListSelectionModel; @@ -12,7 +12,7 @@ import javax.swing.ListSelectionModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class EnumerationContentUIHandler extends ContenUIHandler<EnumerationNode, EnumerationContentUI> { +public class EnumerationContentUIHandler extends ContentUIHandler<ObjectModelEnumerationImpl, EnumerationNode, EnumerationContentUI> { @Override public void beforeInit(EnumerationContentUI ui) { @@ -25,20 +25,19 @@ public class EnumerationContentUIHandler extends ContenUIHandler<EnumerationNode ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getEnumerationTagValues(), helper.getEnumerationStereotypes()); ui.getLiterals().setModel(new DefaultListModel<>()); - ui.getLiterals().getSelectionModel().addListSelectionListener(e -> ui.getRemoveLiteralFromEnumeration().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); - //ui.getLiteralsHeaderName().addPropertyChangeListener( e -> ui.getAddLiteralFromEnumeration().setEnabled(!Strings.isNullOrEmpty(((JTextField) e.getSource()).getText()))); + ui.getLiterals().getSelectionModel().addListSelectionListener(e -> ui.getDeleteLiteralsFromEnumeration().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(EnumerationContentUI ui, EnumerationNode node) { - ObjectModelEnumeration data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + + super.open(ui, node); DefaultListModel<String> listModel = (DefaultListModel<String>) ui.getLiterals().getModel(); listModel.clear(); - data.getLiterals().forEach(listModel::addElement); + node.getLiterals().forEach(listModel::addElement); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx index 4f229c9..f72ea9f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx @@ -42,7 +42,7 @@ public void close() { handler.close(); } onItemStateChanged="addSuperClassFromInterface.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> <JToolBar id="superClassesHeaderActions" constraints="BorderLayout.EAST"> <JButton id="addSuperClassFromInterface"/> - <JButton id="removeSuperClassFromInterface"/> + <JButton id="removeSuperClassesFromInterface"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss index 407dbf8..7c13f4a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss @@ -9,7 +9,7 @@ } #interfaceName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -39,7 +39,7 @@ enabled:false; } -#removeSuperClassFromInterface { +#removeSuperClassesFromInterface { text:"eugene.editor.delete.superClass"; actionIcon:delete; enabled:false; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java index 0c0d914..f2d6fd5 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java @@ -4,7 +4,7 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; -import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import javax.swing.ListSelectionModel; import java.util.ArrayList; @@ -16,7 +16,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class InterfaceContentUIHandler extends ContenUIHandler<InterfaceNode, InterfaceContentUI> { +public class InterfaceContentUIHandler extends ContentUIHandler<ObjectModelInterfaceImpl, InterfaceNode, InterfaceContentUI> { @Override public void beforeInit(InterfaceContentUI ui) { @@ -28,21 +28,20 @@ public class InterfaceContentUIHandler extends ContenUIHandler<InterfaceNode, In ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getInterfaceTagValues(), helper.getInterfaceStereotypes()); -// ui.getSuperClasses().setModel(new DefaultListModel<>()); - ui.getSuperClasses().getSelectionModel().addListSelectionListener(e -> ui.getRemoveSuperClassFromInterface().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + ui.getSuperClasses().getSelectionModel().addListSelectionListener(e -> ui.getRemoveSuperClassesFromInterface().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(InterfaceContentUI ui, InterfaceNode node) { - ObjectModelInterface data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + + super.open(ui, node); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allInterfaces = new ArrayList<>(modelHelper.getAllInterfaces()); - addInterfaces(ui, data.getInterfaces(), ui.getSuperClasses(), allInterfaces); + addInterfaces(ui, node.getSuperClasses(), ui.getSuperClasses(), allInterfaces); //TODO Supprimer toutes les interfaces qui héritent de celle ci Collections.sort(allInterfaces); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss index 660a226..d0edf59 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss @@ -9,7 +9,7 @@ } #modelName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java index b884171..70b63dd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java @@ -2,14 +2,14 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; -import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.xml.ObjectModelImpl; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class ModelContentUIHandler extends ContenUIHandler<ModelNode, ModelContentUI> { +public class ModelContentUIHandler extends ContentUIHandler<ObjectModelImpl, ModelNode, ModelContentUI> { @Override public void beforeInit(ModelContentUI ui) { @@ -24,11 +24,4 @@ public class ModelContentUIHandler extends ContenUIHandler<ModelNode, ModelConte } - @Override - protected void open(ModelContentUI ui, ModelNode node) { - - ObjectModel data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java index 1466188..03fcec5 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java @@ -24,11 +24,6 @@ public enum Multiplicity { this.text = text; } - @Override - public String toString() { - return text; - } - public static Multiplicity valueOf(int min, int max) { for (Multiplicity multiplicity : values()) { if (min == multiplicity.min && max == multiplicity.max) { @@ -37,4 +32,21 @@ public enum Multiplicity { } return null; } + + public boolean isMultiple() { + return max == -1; + } + + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + + @Override + public String toString() { + return text; + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx index c53f7e6..1a4c87c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx @@ -34,19 +34,27 @@ public void close() { handler.close(); } <JLabel id="operationReturnTypeLabel"/> </cell> <cell> - <JComboBox id="operationReturnType" genericType="String" onActionPerformed="model.setReturnType((String)operationReturnType.getSelectedItem())"/> + <JComboBox id="operationReturnType" genericType="String" + onActionPerformed="model.setReturnType((String)operationReturnType.getSelectedItem())"/> </cell> </row> <row> <cell columns="2"> <JPanel id="visibility"> - <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> - <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPublic" value="{Visibility.PUBLIC}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="{Visibility.PACKAGE}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="{Visibility.PROTECTED}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="{Visibility.PRIVATE}" styleClass="visibilityMode"/> + <JSeparator constructorParams="JSeparator.VERTICAL"/> + <JCheckBox id="operationAbstract"/> </JPanel> </cell> </row> + <!--row> + <cell columns="2"> + <JCheckBox id="operationAbstract"/> + </cell> + </row--> </Table> </org.jdesktop.swingx.JXTaskPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss index 4e84c08..60f4390 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss @@ -8,7 +8,7 @@ } #operationName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -17,10 +17,16 @@ } #operationReturnType { - selectedItem:{getModel().getUserObject().getReturnType()}; + selectedItem:{getModel().getReturnType()}; _property:{"returnType"}; } +#operationAbstract { + text:"eugene.editor.operation.abstract"; + selected:{getModel().isAbstract()}; + _property:{"abstract"}; +} + #createOperationFromOperation { text:"eugene.editor.create.operation"; actionIcon:add; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java index 3c5bb69..a678cd1 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java @@ -8,6 +8,7 @@ import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -21,7 +22,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class OperationContentUIHandler extends ContenUIHandler<OperationNode, OperationContentUI> { +public class OperationContentUIHandler extends ContentUIHandler<ObjectModelOperationImpl, OperationNode, OperationContentUI> { @Override public void beforeInit(OperationContentUI ui) { @@ -41,8 +42,9 @@ public class OperationContentUIHandler extends ContenUIHandler<OperationNode, Op protected void open(OperationContentUI ui, OperationNode node) { ObjectModelOperation data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - ui.getVisibilityMode().setSelectedValue(data.getVisibility()); + super.open(ui, node); + + ui.getVisibilityMode().setSelectedValue(node.getVisibility()); Collection<ObjectModelParameter> parameters = data.getParameters(); JTable parametersPanel = ui.getParameters(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss index 5d657fc..a885b7f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss @@ -7,7 +7,7 @@ } #packageName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java index 962c4e0..e4f74fd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java @@ -2,14 +2,14 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; -import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class PackageContentUIHandler extends ContenUIHandler<PackageNode, PackageContentUI> { +public class PackageContentUIHandler extends ContentUIHandler<ObjectModelPackageImpl, PackageNode, PackageContentUI> { @Override public void beforeInit(PackageContentUI ui) { @@ -23,11 +23,4 @@ public class PackageContentUIHandler extends ContenUIHandler<PackageNode, Packag } - @Override - protected void open(PackageContentUI ui, PackageNode node) { - - ObjectModelPackage data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java new file mode 100644 index 0000000..3c2d76a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java @@ -0,0 +1,33 @@ +package org.nuiton.eugene.editor.application.ui.content; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum Visibility { + + PUBLIC("public"), + PACKAGE(""), + PROTECTED("protected"), + PRIVATE("private"); + + private final String model; + + Visibility(String model) { + this.model = model; + } + + public static Visibility fromModel(String model) { + for (Visibility visibility : values()) { + if (model.equals(visibility.model)) { + return visibility; + } + } + return null; + } + + public String toModel() { + return model; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java index 427feec..ad0ee7f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java @@ -1,8 +1,6 @@ package org.nuiton.eugene.editor.application.ui.content.actions; -import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; @@ -22,14 +20,8 @@ public class AddInterfaceFromClassAction extends ContentActionSupport<ClassConte protected void execute(ClassContentUI ui) { String interfaceName = (String) ui.getInterfacesHeaderType().getSelectedItem(); - String[] split = interfaceName.split("\\."); - ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); - newInterface.setName(split[split.length - 1]); - newInterface.setPackage(StringUtils.removeEnd(interfaceName, "." + newInterface.getName())); - newInterface.postInit(); - - ui.getModel().getUserObject().getInterfaces().add(newInterface); + ui.getModel().addInterface(interfaceName); ((DefaultListModel<String>) ui.getInterfaces().getModel()).addElement(interfaceName); ((DefaultComboBoxModel) ui.getInterfacesHeaderType().getModel()).removeElement(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java deleted file mode 100644 index fd45704..0000000 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.nuiton.eugene.editor.application.ui.content.actions; - -import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; - -import javax.swing.DefaultListModel; - -/** - * Created on 16/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class AddLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { - - public AddLiteralFromEnumerationAction(EnumerationContentUI ui) { - super(ui); - } - - @Override - protected void execute(EnumerationContentUI ui) { - - String text = ui.getLiteralsHeaderName().getText().trim(); - - ui.getModel().addLiteral(text); - - ((DefaultListModel<String>) ui.getLiterals().getModel()).addElement(text); - ui.getLiteralsHeaderName().setText(""); - //TODO Comprendre pk le binding ne fonctionne pas - ui.getAddLiteralFromEnumeration().setEnabled(false); - - } - -} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java index a39bfa6..5893d1f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java @@ -20,8 +20,8 @@ public class AddSuperClassFromInterfaceAction extends ContentActionSupport<Inter protected void execute(InterfaceContentUI ui) { String superClassName = (String) ui.getSuperClassesHeaderType().getSelectedItem(); - - ui.getModel().addInterface(superClassName); + + ui.getModel().addSuperClass(superClassName); ((DefaultListModel<String>) ui.getSuperClasses().getModel()).addElement(superClassName); ((DefaultComboBoxModel) ui.getSuperClassesHeaderType().getModel()).removeElement(superClassName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java index 424f45a..0e4855a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java @@ -6,6 +6,8 @@ import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import javax.swing.AbstractAction; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; import java.awt.event.ActionEvent; /** @@ -41,7 +43,7 @@ public abstract class ContentActionSupport<U extends ContentUI<?>> extends Abstr } protected EugeneEditorTree getTree(U ui) { - return getMainUi(ui).getProjectNavigation(); + return getMainUi(ui).getProjectNavigation(); } protected NodeSupport getSelectedNode(NodeSupport currentNode) { @@ -52,4 +54,16 @@ public abstract class ContentActionSupport<U extends ContentUI<?>> extends Abstr } return newSelectedNode; } + + protected void removeNodeThenSelected(U ui, NodeSupport currentNode, NodeSupport newSelectedNode) { + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java index a2df3ad..350b9c0 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -28,7 +28,7 @@ public class CreateAttributeFromAttributeAction extends ContentActionSupport<Att protected void execute(AttributeContentUI ui) { AttributeNode currentNode = ui.getModel(); - NodeSupport parentNode = currentNode.getParent(); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); AttributeNode newNode = parentNode.addAttribute(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java index 2273630..b356df7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -27,7 +27,7 @@ public class CreateAttributeFromClassAction extends ContentActionSupport<ClassCo @Override protected void execute(ClassContentUI ui) { - NodeSupport currentNode = ui.getModel(); + ClassNode currentNode = ui.getModel(); AttributeNode newNode = currentNode.addAttribute(); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java index f75fa25..01a28fd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -27,7 +27,7 @@ public class CreateAttributeFromInterfaceAction extends ContentActionSupport<Int @Override protected void execute(InterfaceContentUI ui) { - NodeSupport currentNode = ui.getModel(); + InterfaceNode currentNode = ui.getModel(); AttributeNode newNode = currentNode.addAttribute(); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java index 7ef273c..b202947 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java @@ -2,6 +2,8 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import javax.swing.DefaultListModel; + /** * Created on 16/09/16. * @@ -16,6 +18,15 @@ public class CreateLiteralFromEnumerationAction extends ContentActionSupport<Enu @Override protected void execute(EnumerationContentUI ui) { + String text = ui.getLiteralsHeaderName().getText().trim(); + + ui.getModel().addLiteral(text); + + ((DefaultListModel<String>) ui.getLiterals().getModel()).addElement(text); + ui.getLiteralsHeaderName().setText(""); + //TODO Comprendre pk le binding ne fonctionne pas + ui.getCreateLiteralFromEnumeration().setEnabled(false); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java index 882f9f4..dd5c2af 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java @@ -2,7 +2,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import javax.swing.tree.DefaultTreeModel; @@ -28,7 +28,7 @@ public class CreateOperationFromOperationAction extends ContentActionSupport<Ope protected void execute(OperationContentUI ui) { OperationNode currentNode = ui.getModel(); - NodeSupport parentNode = currentNode.getParent(); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); OperationNode newNode = parentNode.addOperation(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java index 26e8495..58d735c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java @@ -28,7 +28,7 @@ public class CreatePackageFromModelAction extends ContentActionSupport<ModelCont protected void execute(ModelContentUI ui) { ModelNode currentNode = ui.getModel(); - + PackageNode newNode = currentNode.addPackage(""); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java index 32c0424..2c38ffe 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java @@ -26,6 +26,7 @@ public class CreateParameterFromOperationAction extends ContentActionSupport<Ope OperationNode currentNode = ui.getModel(); + //FIXME Utiliser un bean d'ui ObjectModelParameterImpl newData = currentNode.addParameter(); ((ParameterTableModel) ui.getParameters().getModel()).add(newData); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java index 61dc3db..62f38a7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java @@ -1,12 +1,10 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -26,19 +24,14 @@ public class DeleteAttributeFromAttributeAction extends ContentActionSupport<Att @Override protected void execute(AttributeContentUI ui) { - NodeSupport currentNode = ui.getModel(); - - currentNode.getParent().removeAttribute(ui.getModel().getName()); + AttributeNode currentNode = ui.getModel(); - EugeneEditorTree tree = getTree(ui); + ClassifierNodeSupport parent = (ClassifierNodeSupport) currentNode.getParent(); + parent.removeAttribute(ui.getModel().getName()); NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java index 96e324e..3caf0fa 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -31,15 +27,9 @@ public class DeleteClassFromClassAction extends ContentActionSupport<ClassConten currentNode.getRoot().removeClass(ui.getModel().getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java index d8774c6..b99de40 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -31,15 +27,9 @@ public class DeleteEnumerationFromEnumerationAction extends ContentActionSupport currentNode.getRoot().removeEnumeration(ui.getModel().getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java index bb2fb40..aa6140f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -26,15 +22,9 @@ public class DeleteInterfaceFromInterfaceAction extends ContentActionSupport<Int currentNode.getRoot().removeInterface(currentNode.getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java similarity index 81% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java index f223c0a..0049982 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java @@ -10,9 +10,9 @@ import javax.swing.DefaultListModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { +public class DeleteLiteralsFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { - public RemoveLiteralFromEnumerationAction(EnumerationContentUI ui) { + public DeleteLiteralsFromEnumerationAction(EnumerationContentUI ui) { super(ui); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java index 522d36d..8af0415 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java @@ -1,13 +1,10 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -29,16 +26,12 @@ public class DeleteOperationFromOperationAction extends ContentActionSupport<Ope OperationNode currentNode = ui.getModel(); - currentNode.getParent().removeOperation(ui.getModel().getName()); - - EugeneEditorTree tree = getTree(ui); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); + parentNode.removeOperation(ui.getModel().getName()); NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java index 90cfb1a..338e64e 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -30,14 +26,9 @@ public class DeletePackageFromPackageAction extends ContentActionSupport<Package PackageNode currentNode = ui.getModel(); currentNode.getRoot().removePackage(ui.getModel().getName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java similarity index 66% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java index 267a4bf..f2ef925 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java @@ -1,7 +1,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import javax.swing.DefaultListModel; @@ -10,22 +10,22 @@ import javax.swing.DefaultListModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveInterfaceFromClassAction extends ContentActionSupport<ClassContentUI> { +public class RemoveInterfacesFromClassAction extends ContentActionSupport<ClassContentUI> { - public RemoveInterfaceFromClassAction(ClassContentUI ui) { + public RemoveInterfacesFromClassAction(ClassContentUI ui) { super(ui); } @Override protected void execute(ClassContentUI ui) { - ModelNode modelNode = ui.getModel().getRoot(); + ClassNode currentNode = ui.getModel(); DefaultListModel listModel = (DefaultListModel) ui.getInterfaces().getModel(); - + for (String interfaceName : ui.getInterfaces().getSelectedValuesList()) { - modelNode.removeInterface(interfaceName); + currentNode.removeInterface(interfaceName); listModel.removeElement(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java similarity index 66% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java index f042a3d..b165dbd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java @@ -1,7 +1,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; -import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import javax.swing.DefaultListModel; import java.util.List; @@ -11,9 +11,9 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveSuperClassFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { +public class RemoveSuperClassesFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { - public RemoveSuperClassFromInterfaceAction(InterfaceContentUI ui) { + public RemoveSuperClassesFromInterfaceAction(InterfaceContentUI ui) { super(ui); } @@ -22,11 +22,11 @@ public class RemoveSuperClassFromInterfaceAction extends ContentActionSupport<In List<String> interfaceNames = ui.getSuperClasses().getSelectedValuesList(); - ModelNode currentNode = ui.getModel().getRoot(); + InterfaceNode currentNode = ui.getModel(); for (String interfaceName : interfaceNames) { - currentNode.removeInterface(interfaceName); + currentNode.removeSuperClass(interfaceName); ((DefaultListModel) ui.getSuperClasses().getModel()).removeElement(interfaceName); ui.getSuperClassesHeaderType().addItem(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java index 29cfa94..776baa7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java @@ -4,6 +4,8 @@ import org.nuiton.eugene.editor.application.ui.ContentUIManager; import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; import org.nuiton.eugene.editor.application.ui.content.ContentUI; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import javax.swing.JComponent; import javax.swing.JLabel; @@ -79,7 +81,7 @@ public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { } - protected <M, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { + protected <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { node.removePropertyChangeListener(reloadNodeChangeListener); node.addPropertyChangeListener(reloadNodeChangeListener); @@ -88,12 +90,16 @@ public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { content.setContextValue(node, CLIENT_PROPERTY_NODE); - content.setLeftDecoration(new JLabel(node.getIcon())); + JLabel leftDecoration = new JLabel(node.getBigIcon()); + leftDecoration.setHorizontalAlignment(JLabel.CENTER); + leftDecoration.setSize(32,32); - content.open(node); + content.setLeftDecoration(leftDecoration); ui.getSplitpane2().setLeftComponent((JComponent) content); + content.open(node); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java index 457cca4..e325fd1 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java @@ -1,10 +1,11 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.editor.application.ui.content.AggregationMode; +import org.nuiton.eugene.editor.application.ui.content.Multiplicity; +import org.nuiton.eugene.editor.application.ui.content.Visibility; +import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; -import java.util.Set; - import static org.nuiton.i18n.I18n.t; /** @@ -14,11 +15,16 @@ import static org.nuiton.i18n.I18n.t; */ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { + private static final String PROPERTY_NAME = "name"; private static final String PROPERTY_VISIBILITY = "visibility"; private static final String PROPERTY_TYPE = "type"; + private static final String PROPERTY_BIDI = "bidi"; + private static final String PROPERTY_AGGREGATION_MODE = "aggregationMode"; + private static final String PROPERTY_MULTIPLICITY = "multiplicity"; + private static final String PROPERTY_DEFAULT_VALUE = "defaultValue"; public AttributeNode(ObjectModelAttributeImpl objectModelAttribute) { - super(objectModelAttribute, PROPERTY_NAME, PROPERTY_TYPE, PROPERTY_VISIBILITY); + super(objectModelAttribute, PROPERTY_NAME); } @Override @@ -34,13 +40,13 @@ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { firePropertyChange(PROPERTY_NAME, oldValue, name); } - public String getVisibility() { - return getUserObject().getVisibility(); + public Visibility getVisibility() { + return Visibility.fromModel(getUserObject().getVisibility()); } - public void setVisibility(String visibility) { - String oldValue = getVisibility(); - getUserObject().setVisibility(visibility); + public void setVisibility(Visibility visibility) { + Visibility oldValue = getVisibility(); + getUserObject().setVisibility(visibility.toModel()); firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); } @@ -60,12 +66,76 @@ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } + + public boolean isBidi() { + ObjectModelAttribute reverseAttribute = getUserObject().getReverseAttribute(); + return reverseAttribute != null && reverseAttribute.isNavigable(); + } + + public void setBidi(boolean bidi) { + boolean oldValue = isBidi(); + + ObjectModelAttributeImpl reverseAttribute = (ObjectModelAttributeImpl) getUserObject().getReverseAttribute(); + //TODO Traiter la cas où il n'y a pas de reverser attribute + if (reverseAttribute != null) { + reverseAttribute.setNavigable(bidi); + } + firePropertyChange(PROPERTY_BIDI, oldValue, bidi); + } + + public AggregationMode getAggregationMode() { + if (getUserObject().isComposite()) { + return AggregationMode.COMPOSE; + } + if (getUserObject().isAggregate()) { + return AggregationMode.AGGREGATE; + } + return AggregationMode.NONE; + } + + public void setAggregationMode(AggregationMode aggregationMode) { + AggregationMode oldValue = getAggregationMode(); + switch (aggregationMode) { + case NONE: + getUserObject().setComposite(false); + getUserObject().setAggregate(false); + break; + case AGGREGATE: + getUserObject().setComposite(false); + getUserObject().setAggregate(true); + break; + case COMPOSE: + getUserObject().setComposite(true); + getUserObject().setAggregate(false); + break; + } + firePropertyChange(PROPERTY_AGGREGATION_MODE, oldValue, aggregationMode); + } + + public String getDefaultValue() { + return getUserObject().getDefaultValue(); + } + + public void setDefaultValue(String defaultValue) { + if ("".equals(defaultValue)) { + defaultValue = null; + } + String oldValue = getDefaultValue(); + getUserObject().setDefaultValue(defaultValue); + firePropertyChange(PROPERTY_DEFAULT_VALUE, oldValue, defaultValue); + } + + public Multiplicity getMultiplicity() { + return Multiplicity.valueOf(getUserObject().getMinMultiplicity(), getUserObject().getMaxMultiplicity()); + } + + public void setMultiplicity(Multiplicity multiplicity) { + Multiplicity oldValue = getMultiplicity(); + getUserObject().setMinMultiplicity(multiplicity.getMin()); + getUserObject().setMaxMultiplicity(multiplicity.getMax()); + firePropertyChange(PROPERTY_MULTIPLICITY, oldValue, multiplicity); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java index 1b0b4d5..f294ff7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java @@ -1,11 +1,15 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import java.util.Collection; -import java.util.Set; +import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -14,30 +18,23 @@ import static org.nuiton.i18n.I18n.t; * * @author Tony Chemit - chemit@codelutin.com */ -public class ClassNode extends NodeSupport<ObjectModelClassImpl> { +public class ClassNode extends ClassifierNodeSupport<ObjectModelClassImpl> { public static final String PROPERTY_SUPER_CLASS = "superClass"; + public static final String PROPERTY_INTERFACES = "interfaces"; public ClassNode(ObjectModelClassImpl objectModelClass) { - super(objectModelClass, PROPERTY_NAME); + super(objectModelClass, ClassifierNodeSupport.PROPERTY_NAME); } @Override - public String getName() { - return getUserObject().getName(); - } - - @Override - public void setName(String name) { - String oldValue = getName(); - getUserObject().setName(name); - getUserObject().postInit(); - firePropertyChange(PROPERTY_NAME, oldValue, name); + public String getCreateName() { + return t("eugene.editor.new.class"); } public String getSuperClass() { Collection<ObjectModelClass> superclasses = getUserObject().getSuperclasses(); - return superclasses.isEmpty() ? null : superclasses.iterator().next().getQualifiedName(); + return CollectionUtils.isEmpty(superclasses) ? null : superclasses.iterator().next().getQualifiedName(); } public void setSuperClass(String superClass) { @@ -49,23 +46,27 @@ public class ClassNode extends NodeSupport<ObjectModelClassImpl> { firePropertyChange(PROPERTY_SUPER_CLASS, oldValue, superClass); } - @Override - public String getCreateName() { - return t("eugene.editor.new.class"); + public List<String> getInterfaces() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); } - @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } + public void addInterface(String interfaceName) { + String[] split = interfaceName.split("\\."); - @Override - public String toString() { - return getName(); + ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); + newInterface.setName(split[split.length - 1]); + newInterface.setPackage(StringUtils.removeEnd(interfaceName, "." + newInterface.getName())); + newInterface.postInit(); + + List<String> oldValue = getInterfaces(); + getUserObject().getInterfaces().add(newInterface); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); } - public String getPackageName() { - return getParent().getName(); + public void removeInterface(String interfaceName) { + List<String> oldValue = getInterfaces(); + getUserObject().removeInterface(interfaceName); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java new file mode 100644 index 0000000..9a18d3f --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java @@ -0,0 +1,103 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class ClassifierNodeSupport<M extends ObjectModelClassifierImpl> extends NodeSupport<M> { + + static final String PROPERTY_NAME = "name"; + static final String PROPERTY_ATTRIBUTES = "attributes"; + static final String PROPERTY_OPERATIONS = "operations"; + + protected ClassifierNodeSupport(M userObject, String... reloadProperties) { + super(userObject, reloadProperties); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public Collection<ObjectModelAttribute> getAttributes() { + return getUserObject().getAttributes(); + } + + public void setAttributes(Collection<ObjectModelAttribute> attributes) { + // non utilisé mais nécessaire pour l'écoute sur la propriété stereotypes + } + + public AttributeNode addAttribute() { + Collection<ObjectModelAttribute> oldValue = new ArrayList<>(getAttributes()); + + ObjectModelAttributeImpl newData = new ObjectModelAttributeImpl(); + newData.setName(""); + + getUserObject().addAttribute(newData); + + AttributeNode node = new AttributeNode(newData); + node.setCreate(true); + firePropertyChange(PROPERTY_ATTRIBUTES, oldValue, getAttributes()); + return node; + } + + public void removeAttribute(String name) { + Collection<ObjectModelAttribute> oldValue = new ArrayList<>(getAttributes()); + getUserObject().removeAttribute(name); + firePropertyChange(PROPERTY_ATTRIBUTES, oldValue, getAttributes()); + } + + public Collection<ObjectModelOperation> getOperations() { + return getUserObject().getOperations(); + } + + public void setOperations(Collection<ObjectModelOperation> operations) { + // non utilisé mais nécessaire pour l'écoute sur la propriété stereotypes + } + + public OperationNode addOperation() { + Collection<ObjectModelOperation> oldValue = new ArrayList<>(getOperations()); + ObjectModelOperationImpl newData = new ObjectModelOperationImpl(); + newData.setName(""); + + getUserObject().addOperation(newData); + + OperationNode node = new OperationNode(newData); + node.setCreate(true); + firePropertyChange(PROPERTY_OPERATIONS, oldValue, getOperations()); + return node; + } + + public void removeOperation(String name) { + Collection<ObjectModelOperation> oldValue = new ArrayList<>(getOperations()); + getUserObject().removeOperation(name); + firePropertyChange(PROPERTY_OPERATIONS, oldValue, getOperations()); + } + + public String getPackageName() { + return getUserObject().getPackageName(); + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java index 5b4fa1b..4a154ee 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java @@ -1,10 +1,10 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImplRef; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -15,6 +15,9 @@ import static org.nuiton.i18n.I18n.t; */ public class EnumerationNode extends NodeSupport<ObjectModelEnumerationImpl> { + private static final String PROPERTY_NAME = "name"; + private static final String PROPERTY_LITERALS = "literals"; + public EnumerationNode(ObjectModelEnumerationImpl objectModelEnumeration) { super(objectModelEnumeration, PROPERTY_NAME); } @@ -38,26 +41,29 @@ public class EnumerationNode extends NodeSupport<ObjectModelEnumerationImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } public String getPackageName() { - return getParent().getName(); + return getUserObject().getPackageName(); + } + + public List<String> getLiterals() { + return new ArrayList<>(getUserObject().getLiterals()); } public void addLiteral(String literal) { ObjectModelImplRef ref = new ObjectModelImplRef(); ref.setName(literal); + List<String> oldValue = getLiterals(); getUserObject().addLiteral(ref); + firePropertyChange(PROPERTY_LITERALS, oldValue, getLiterals()); } public void removeLiteral(String literal) { + List<String> oldValue = getLiterals(); getUserObject().removeLiteral(literal); + firePropertyChange(PROPERTY_LITERALS, oldValue, getLiterals()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java index c2a5fca..1fe26d0 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java @@ -1,10 +1,11 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; -import java.util.Set; +import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -13,23 +14,12 @@ import static org.nuiton.i18n.I18n.t; * * @author Tony Chemit - chemit@codelutin.com */ -public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { +public class InterfaceNode extends ClassifierNodeSupport<ObjectModelInterfaceImpl> { - public InterfaceNode(ObjectModelInterfaceImpl objectModelInterface) { - super(objectModelInterface, PROPERTY_NAME); - } - - @Override - public String getName() { - return getUserObject().getName(); - } + private static final String PROPERTY_SUPER_CLASSSES = "superClasses"; - @Override - public void setName(String name) { - String oldValue = getName(); - getUserObject().setName(name); - getUserObject().postInit(); - firePropertyChange(PROPERTY_NAME, oldValue, name); + public InterfaceNode(ObjectModelInterfaceImpl objectModelInterface) { + super(objectModelInterface, ClassifierNodeSupport.PROPERTY_NAME); } @Override @@ -37,17 +27,13 @@ public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { return t("eugene.editor.new.interface"); } - @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + public List<String> getSuperClasses() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); } - @Override - public String toString() { - return getName(); - } + public void addSuperClass(String superClassName) { - public void addInterface(String superClassName) { + List<String> oldValue = getSuperClasses(); String[] split = superClassName.split("\\."); @@ -57,9 +43,13 @@ public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { newInterface.postInit(); getUserObject().getInterfaces().add(newInterface); + firePropertyChange(PROPERTY_SUPER_CLASSSES, oldValue, getSuperClasses()); } - public String getPackageName() { - return getParent().getName(); + public void removeSuperClass(String superClassName) { + List<String> oldValue = getSuperClasses(); + getUserObject().removeInterface(superClassName); + firePropertyChange(PROPERTY_SUPER_CLASSSES, oldValue, getSuperClasses()); } + } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java index 337a404..73a749d 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java @@ -1,6 +1,5 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelEnumeration; import org.nuiton.eugene.models.object.ObjectModelInterface; @@ -11,7 +10,7 @@ import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import java.util.Set; +import java.util.List; import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -23,6 +22,7 @@ import static org.nuiton.i18n.I18n.t; */ public class ModelNode extends NodeSupport<ObjectModelImpl> { + private static final String PROPERTY_NAME = "name"; public static final String PROPERTY_CLASSES = "classes"; public static final String PROPERTY_INTERFACES = "interfaces"; public static final String PROPERTY_ENUMERATIONS = "enumerations"; @@ -50,11 +50,6 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } @@ -63,22 +58,31 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { super.add(packageNode); } + public List<String> getPackages() { + return getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList()); + } public PackageNode addPackage(String packageName) { ObjectModelPackageImpl newData = new ObjectModelPackageImpl(); newData.setName(""); + List<String> oldValue = getPackages(); getUserObject().addPackage(newData); - firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_PACKAGES, oldValue, getPackages()); PackageNode node = new PackageNode(newData); node.setCreate(true); return node; } public void removePackage(String name) { + List<String> oldValue = getPackages(); getUserObject().removePackage(name); - firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_PACKAGES, oldValue, getPackages()); + } + + public List<String> getClasses() { + return getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList()); } public ClassNode addClass(String packageName) { @@ -87,16 +91,22 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getClasses(); getUserObject().addClass(newData); - firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_CLASSES, oldValue, getClasses()); ClassNode node = new ClassNode(newData); node.setCreate(true); return node; } public void removeClass(String qualifiedName) { + List<String> oldValue = getClasses(); getUserObject().removeClass(qualifiedName); - firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_CLASSES, oldValue, getClasses()); + } + + public List<String> getInterfaces() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList()); } public InterfaceNode addInterface(String packageName) { @@ -105,16 +115,22 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getInterfaces(); getUserObject().addInterface(newData); - firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); InterfaceNode node = new InterfaceNode(newData); node.setCreate(true); return node; } public void removeInterface(String qualifiedName) { + List<String> oldValue = getInterfaces(); getUserObject().removeInterface(qualifiedName); - firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); + } + + public List<String> getEnumerations() { + return getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList()); } public EnumerationNode addEnumeration(String packageName) { @@ -122,16 +138,18 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getEnumerations(); getUserObject().addEnumeration(newData); - firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_ENUMERATIONS, oldValue, getEnumerations()); EnumerationNode node = new EnumerationNode(newData); node.setCreate(true); return node; } public void removeEnumeration(String qualifiedName) { + List<String> oldValue = getEnumerations(); getUserObject().removeEnumeration(qualifiedName); - firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_ENUMERATIONS, oldValue, getEnumerations()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java index c22170f..986db74 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java @@ -1,10 +1,12 @@ package org.nuiton.eugene.editor.application.ui.tree.node; +import com.google.common.collect.ImmutableSet; import jaxx.runtime.SwingUtil; import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import org.nuiton.util.beans.BeanMonitor; import javax.swing.Icon; @@ -15,6 +17,9 @@ import javax.swing.tree.TreeNode; import java.beans.Introspector; import java.beans.PropertyChangeListener; import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Objects; import java.util.Set; @@ -23,25 +28,32 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class NodeSupport<M> extends DefaultMutableTreeNode { +public abstract class NodeSupport<M extends StereotypeAble & TagValueAble> extends DefaultMutableTreeNode { + + /** Logger. */ + private static final Log log = LogFactory.getLog(NodeSupport.class); - public static final String PROPERTY_NAME = "name"; public static final String PROPERTY_MODIFIED = "modified"; public static final String PROPERTY_VALID = "valid"; public static final String PROPERTY_CREATE = "create"; + public static final String PROPERTY_STEREOTYPES = "stereotypes"; + public static final String PROPERTY_TAG_VALUES = "tagValues"; protected ImageIcon icon; + protected ImageIcon bigIcon; private boolean create; private boolean modified; private boolean valid; private final SwingPropertyChangeSupport pcs = new SwingPropertyChangeSupport(this); - private final BeanMonitor monitor = new BeanMonitor(); + private final BeanMonitor monitor; + private final Set<String> reloadProperties; - public NodeSupport(M userObject, String... monitorProperties) { + public NodeSupport(M userObject, String... reloadProperties) { super(userObject); + this.reloadProperties = ImmutableSet.<String>builder().add(reloadProperties).add(PROPERTY_MODIFIED).build(); + monitor = new BeanMonitor(true, PROPERTY_MODIFIED); monitor.setBean(this); - monitor.setProperties(monitorProperties); addPropertyChangeListener(evt -> { if (!Objects.equals(NodeSupport.PROPERTY_MODIFIED, evt.getPropertyName())) { setModified(monitor.wasModified()); @@ -61,13 +73,42 @@ public abstract class NodeSupport<M> extends DefaultMutableTreeNode { return icon; } + public Icon getBigIcon() { + if (bigIcon == null) { + bigIcon = SwingUtil.createIcon("type", Introspector.decapitalize(StringUtils.removeEnd(getClass().getSimpleName(), "Node") + "2x")); + } + return icon; + } + public abstract String getName(); public abstract void setName(String name); public abstract String getCreateName(); - public abstract Set<String> getReloadProperties(); + public Set<String> getReloadProperties() { + return reloadProperties; + } + + public Set<String> getStereotypes() { + return getUserObject().getStereotypes(); + } + + public void addStereotype(String stereotype) { + Set<String> oldValue = new HashSet<>(getStereotypes()); + getUserObject().addStereotype(stereotype); + firePropertyChange(PROPERTY_STEREOTYPES, oldValue, getStereotypes()); + } + + public Map<String, String> getTagValues() { + return getUserObject().getTagValues(); + } + + public void addTagValue(String tagValue, String value) { + Map<String, String> oldValue = new HashMap<>(getTagValues()); + getUserObject().addTagValue(tagValue, value); + firePropertyChange(PROPERTY_TAG_VALUES, oldValue, getTagValues()); + } public boolean isCreate() { return create; @@ -154,42 +195,4 @@ public abstract class NodeSupport<M> extends DefaultMutableTreeNode { protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { pcs.firePropertyChange(propertyName, oldValue, newValue); } - - public AttributeNode addAttribute() { - - ObjectModelAttributeImpl newData = new ObjectModelAttributeImpl(); - newData.setName(""); - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.addAttribute(newData); - - AttributeNode node = new AttributeNode(newData); - node.setCreate(true); - return node; - } - - public void removeOperation(String name) { - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.removeOperation(name); - - } - - public void removeAttribute(String name) { - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.removeAttribute(name); - } - - public OperationNode addOperation() { - - ObjectModelOperationImpl newData = new ObjectModelOperationImpl(); - newData.setName(""); - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.addOperation(newData); - - OperationNode node = new OperationNode(newData); - node.setCreate(true); - return node; - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java index 49a6be2..e8ec815 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java @@ -1,10 +1,12 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.editor.application.ui.content.Visibility; +import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -15,12 +17,14 @@ import static org.nuiton.i18n.I18n.t; */ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { + private static final String PROPERTY_NAME = "name"; private static final String PROPERTY_VISIBILITY = "visibility"; private static final String PROPERTY_RETURN_TYPE = "returnType"; private static final String PROPERTY_ABSTRACT = "abstract"; + private static final String PROPERTY_PARAMETERS = "parameters"; public OperationNode(ObjectModelOperationImpl objectModelAttribute) { - super(objectModelAttribute, PROPERTY_NAME, PROPERTY_ABSTRACT, PROPERTY_RETURN_TYPE); + super(objectModelAttribute, PROPERTY_NAME); } @Override @@ -36,13 +40,13 @@ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { firePropertyChange(PROPERTY_NAME, oldValue, name); } - public String getVisibility() { - return getUserObject().getVisibility(); + public Visibility getVisibility() { + return Visibility.fromModel(getUserObject().getVisibility()); } - public void setVisibility(String visibility) { - String oldValue = getVisibility(); - getUserObject().setVisibility(visibility); + public void setVisibility(Visibility visibility) { + Visibility oldValue = getVisibility(); + getUserObject().setVisibility(visibility.toModel()); firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); } @@ -74,24 +78,27 @@ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } - public void removeParameter(String name) { - getUserObject().removeParameter(name); + public List<ObjectModelParameter> getParameters() { + return new ArrayList<>(getUserObject().getParameters()); } public ObjectModelParameterImpl addParameter() { - + Object oldValue = getParameters(); ObjectModelParameterImpl newData = new ObjectModelParameterImpl(); newData.setName(""); getUserObject().addParameter(newData); + firePropertyChange(PROPERTY_PARAMETERS, oldValue, getParameters()); return newData; } + + public void removeParameter(String name) { + + Object oldValue = getParameters(); + getUserObject().removeParameter(name); + firePropertyChange(PROPERTY_PARAMETERS, oldValue, getParameters()); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java index 457f305..ab556fc 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java @@ -1,10 +1,7 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import java.util.Set; - import static org.nuiton.i18n.I18n.t; /** @@ -14,6 +11,8 @@ import static org.nuiton.i18n.I18n.t; */ public class PackageNode extends NodeSupport<ObjectModelPackageImpl> { + private static final String PROPERTY_NAME = "name"; + public PackageNode(ObjectModelPackageImpl objectModelPackage) { super(objectModelPackage, PROPERTY_NAME); } @@ -37,11 +36,6 @@ public class PackageNode extends NodeSupport<ObjectModelPackageImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties index 6281c5d..c97d278 100644 --- a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties @@ -68,6 +68,7 @@ eugene.editor.new.model=New model eugene.editor.new.operation=New operation eugene.editor.new.package=New package eugene.editor.operation=Operation +eugene.editor.operation.abstract=Abstract eugene.editor.operation.name=Name eugene.editor.operation.returnType=Return type eugene.editor.package=Package @@ -81,14 +82,14 @@ eugene.editor.superClass=Super class eugene.editor.superClasses=Super classes eugene.editor.tagValues=Tag values eugene.editor.title.view.navigation=Navigation -eugene.editor.validator.attribute.mandatory.name= -eugene.editor.validator.attribute.mandatory.type= -eugene.editor.validator.enumeration.mandatory.name= -eugene.editor.validator.interface.mandatory.name= -eugene.editor.validator.model.mandatory.name= -eugene.editor.validator.operation.mandatory.name= -eugene.editor.validator.operation.mandatory.type= -eugene.editor.validator.package.mandatory.name= +eugene.editor.validator.attribute.mandatory.name=Name is mandatory. +eugene.editor.validator.attribute.mandatory.type=Type is mandatory. +eugene.editor.validator.enumeration.mandatory.name=Name is mandatory. +eugene.editor.validator.interface.mandatory.name=Name is mandatory. +eugene.editor.validator.model.mandatory.name=Name is mandatory. +eugene.editor.validator.operation.mandatory.name=Name is mandatory. +eugene.editor.validator.operation.mandatory.returnType=Return type is mandatory. +eugene.editor.validator.package.mandatory.name=Name is mandatory. eugene.editor.view.message=Messages eugene.editor.visibility=Visibility eugene.editor.visibility.package=package diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties index 78aa015..d631246 100644 --- a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties @@ -20,7 +20,7 @@ eugene.editor.aggregation.aggregate=Aggrège eugene.editor.aggregation.compose=Compose eugene.editor.aggregation.none=Aucun eugene.editor.attribute=Attribut -eugene.editor.attribute.defaultValue=Valuer par défaut +eugene.editor.attribute.defaultValue=Valeur par défaut eugene.editor.attribute.name=Nom eugene.editor.attribute.type=Type eugene.editor.bidi=Bi directionnel @@ -68,6 +68,7 @@ eugene.editor.new.model=Nouveau modèle eugene.editor.new.operation=Nouvelle opération eugene.editor.new.package=Nouveau paquetage eugene.editor.operation=Opération +eugene.editor.operation.abstract=Abstrait eugene.editor.operation.name=Nom eugene.editor.operation.returnType=Type de retour eugene.editor.package=Paquetage @@ -81,14 +82,14 @@ eugene.editor.superClass=Classe parent eugene.editor.superClasses=Classes parent eugene.editor.tagValues=Tag values eugene.editor.title.view.navigation=Navigation -eugene.editor.validator.attribute.mandatory.name= -eugene.editor.validator.attribute.mandatory.type= -eugene.editor.validator.enumeration.mandatory.name= -eugene.editor.validator.interface.mandatory.name= -eugene.editor.validator.model.mandatory.name= -eugene.editor.validator.operation.mandatory.name= -eugene.editor.validator.operation.mandatory.type= -eugene.editor.validator.package.mandatory.name= +eugene.editor.validator.attribute.mandatory.name=Nom obligatoire. +eugene.editor.validator.attribute.mandatory.type=Type obligatoire. +eugene.editor.validator.enumeration.mandatory.name=Nom obligatoire. +eugene.editor.validator.interface.mandatory.name=Nom obligatoire. +eugene.editor.validator.model.mandatory.name=Nom obligatoire. +eugene.editor.validator.operation.mandatory.name=Nom obligatoire. +eugene.editor.validator.operation.mandatory.returnType=Type de retour obligatoire. +eugene.editor.validator.package.mandatory.name=Nom obligatoire. eugene.editor.view.message=Messages eugene.editor.visibility=Visibilité eugene.editor.visibility.package=paquetage diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png new file mode 100644 index 0000000..8254518 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png new file mode 100644 index 0000000..4271001 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png new file mode 100644 index 0000000..c237634 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png new file mode 100644 index 0000000..23a3f03 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png new file mode 100644 index 0000000..c185028 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png new file mode 100644 index 0000000..7945a77 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png new file mode 100644 index 0000000..7c91fcf Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png new file mode 100644 index 0000000..f55d6f6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png new file mode 100644 index 0000000..fdebfd6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png new file mode 100644 index 0000000..696f6c6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png new file mode 100644 index 0000000..3921232 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png new file mode 100644 index 0000000..e85b674 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png new file mode 100644 index 0000000..3b6ccb8 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png new file mode 100644 index 0000000..32f913c Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png new file mode 100644 index 0000000..074107a Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png new file mode 100644 index 0000000..9bff27e Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml index f492323..f5e1960 100644 --- a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml @@ -36,7 +36,7 @@ <field name="returnType"> <field-validator type="requiredstring" short-circuit="true"> - <message>eugene.editor.validator.operation.mandatory.type</message> + <message>eugene.editor.validator.operation.mandatory.returnType</message> </field-validator> </field> diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java index 2dc8fc0..8a17d10 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java @@ -112,6 +112,14 @@ public class ObjectModelAttributeImpl extends ObjectModelParameterImpl addOrRemoveModifier(ObjectModelJavaModifier.TRANSIENT, isTransient); } + public void setAggregate(boolean isTransient) { + addOrRemoveModifier(ObjectModelUMLModifier.AGGREGATE, isTransient); + } + + public void setComposite(boolean isTransient) { + addOrRemoveModifier(ObjectModelUMLModifier.COMPOSITE, isTransient); + } + public void setStatic(boolean isStatic) { super.setStatic(isStatic); } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java index 965b61d..1a66f4c 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java @@ -302,4 +302,15 @@ public abstract class ObjectModelClassifierImpl extends ObjectModelElementImpl i } } } + + public void removeInterface(String interfaceName) { + Iterator<ObjectModelInterface> iterator = interfaces.iterator(); + while (iterator.hasNext()) { + ObjectModelInterface modelInterface = iterator.next(); + if (interfaceName.equals(modelInterface.getQualifiedName())) { + iterator.remove(); + break; + } + } + } } diff --git a/pom.xml b/pom.xml index 1c784d9..da5fcc8 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ <ciViewId>Eugene</ciViewId> <processorPluginVersion>1.3</processorPluginVersion> - <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> + <nuitonUtilsVersion>3.0-SNAPSHOT</nuitonUtilsVersion> <nuitonI18nVersion>3.6.2</nuitonI18nVersion> <plantumlVersion>8048</plantumlVersion> <snakeyamlVersion>1.17</snakeyamlVersion> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.