Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathilde Arnaud2017-05-23 09:02:14 +0000
committerQuentin Le Menez2017-05-24 14:26:47 +0000
commit63e35b38f88089e24126bdb6aea37a6be0f09ac3 (patch)
tree65a949611dedfe0df1ddcbec57c3576ef7614d89 /plugins
parentfafd80bdfd789dd50c3a78dc21f4651c8e2419cf (diff)
downloadorg.eclipse.papyrus-63e35b38f88089e24126bdb6aea37a6be0f09ac3.tar.gz
org.eclipse.papyrus-63e35b38f88089e24126bdb6aea37a6be0f09ac3.tar.xz
org.eclipse.papyrus-63e35b38f88089e24126bdb6aea37a6be0f09ac3.zip
Bug 439211 [SequenceDiagram] Define signature in UML property view
A field signature has been added to the UML property view for messages. Creation and edition is filtered to only allow operations and signals, as per UML 2.5 specification. Message sort has been made editable. This change also adds icons display in creation menu. Change-Id: I2604c253f264fdf0cb60a043252f00a543c90da2 Signed-off-by: Mathilde Arnaud <mathilde.arnaud@cea.fr>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/infra/properties/org.eclipse.papyrus.infra.properties.ui/src/org/eclipse/papyrus/infra/properties/ui/creation/EcorePropertyEditorFactory.java49
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/Model/UML/ui/SingleMessage.xwt61
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/creation/UMLPropertyEditorFactory.java18
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java46
4 files changed, 145 insertions, 29 deletions
diff --git a/plugins/infra/properties/org.eclipse.papyrus.infra.properties.ui/src/org/eclipse/papyrus/infra/properties/ui/creation/EcorePropertyEditorFactory.java b/plugins/infra/properties/org.eclipse.papyrus.infra.properties.ui/src/org/eclipse/papyrus/infra/properties/ui/creation/EcorePropertyEditorFactory.java
index 81f7896cbc2..7fe4159bedb 100644
--- a/plugins/infra/properties/org.eclipse.papyrus.infra.properties.ui/src/org/eclipse/papyrus/infra/properties/ui/creation/EcorePropertyEditorFactory.java
+++ b/plugins/infra/properties/org.eclipse.papyrus.infra.properties.ui/src/org/eclipse/papyrus/infra/properties/ui/creation/EcorePropertyEditorFactory.java
@@ -35,17 +35,22 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.emf.utils.EClassNameComparator;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject;
import org.eclipse.papyrus.infra.properties.contexts.View;
import org.eclipse.papyrus.infra.properties.internal.ui.Activator;
import org.eclipse.papyrus.infra.properties.internal.ui.messages.Messages;
import org.eclipse.papyrus.infra.properties.ui.providers.CreateInFeatureContentProvider;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
import org.eclipse.papyrus.infra.ui.emf.dialog.NestedEditingDialogContext;
import org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
@@ -119,6 +124,13 @@ public class EcorePropertyEditorFactory extends PropertyEditorFactory {
protected Map<EObject, CreateIn> createIn = new HashMap<EObject, CreateIn>();
/**
+ * used to get image to display in the creation menu
+ *
+ * @since 2.0
+ */
+ protected LabelProviderService labelProviderService;
+
+ /**
*
* Constructor.
*
@@ -347,7 +359,8 @@ public class EcorePropertyEditorFactory extends PropertyEditorFactory {
final Menu menu = new Menu(widget);
for (EClass eClass : availableClasses) {
final MenuItem item = new MenuItem(menu, SWT.NONE);
- item.setText(eClass.getName());
+ item.setText(getText(eClass));
+ item.setImage(getImage(eClass));
item.setData("eClass", eClass); //$NON-NLS-1$
item.addSelectionListener(new SelectionListener() {
@@ -391,6 +404,40 @@ public class EcorePropertyEditorFactory extends PropertyEditorFactory {
}
/**
+ *
+ * @param eClass
+ * an eclass
+ * @return
+ * the image to display in the creation menu
+ * @since 2.0
+ *
+ */
+ protected Image getImage(final EClass eClass) {
+ if (null == this.labelProviderService) {
+ this.labelProviderService = new LabelProviderServiceImpl();
+ }
+ final ILabelProvider provider = this.labelProviderService.getLabelProvider(eClass);
+ if (null != provider) {
+ return provider.getImage(eClass);
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param eClass
+ * an eclass
+ * @return
+ * the text to display
+ * @since 2.0
+ *
+ */
+ protected String getText(final EClass eClass) {
+ return eClass.getName();
+ }
+
+
+ /**
* @return
* The list of {@link EClass} that can be instantiated.
* This is the list of all concrete subclasses of {@link #type}
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/Model/UML/ui/SingleMessage.xwt b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/Model/UML/ui/SingleMessage.xwt
index 82e2aa2fed5..2eaebbbf3e1 100644
--- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/Model/UML/ui/SingleMessage.xwt
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/Model/UML/ui/SingleMessage.xwt
@@ -1,29 +1,34 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
- xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
- xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
- xmlns:x="http://www.eclipse.org/xwt">
- <Composite.layout>
- <ppel:PropertiesLayout></ppel:PropertiesLayout>
- </Composite.layout>
- <Composite>
- <Composite.layout>
- <ppel:PropertiesLayout></ppel:PropertiesLayout>
- </Composite.layout>
- <ppe:StringEditor input="{Binding}" property="UML:NamedElement:name"></ppe:StringEditor>
- <ppe:StringEditor input="{Binding}" property="UML:NamedElement:label"></ppe:StringEditor>
- </Composite>
- <Composite>
- <Composite.layout>
- <ppel:PropertiesLayout></ppel:PropertiesLayout>
- </Composite.layout>
- <ppe:EnumCombo input="{Binding}" property="UML:Message:messageSort"
- readOnly="true"></ppe:EnumCombo>
- </Composite>
- <Composite>
- <Composite.layout>
- <ppel:PropertiesLayout></ppel:PropertiesLayout>
- </Composite.layout>
- <ppe:MultiReference input="{Binding}" property="UML:Message:argument"></ppe:MultiReference>
- </Composite>
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:x="http://www.eclipse.org/xwt">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:StringEditor input="{Binding}" property="UML:NamedElement:name"></ppe:StringEditor>
+ <ppe:StringEditor input="{Binding}" property="UML:NamedElement:label"></ppe:StringEditor>
+ </Composite>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:EnumCombo input="{Binding}" property="UML:Message:messageSort"></ppe:EnumCombo>
+ </Composite>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:ReferenceDialog input="{Binding}" property="UML:Message:signature"></ppe:ReferenceDialog>
+ </Composite>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:MultiReference input="{Binding}" property="UML:Message:argument"></ppe:MultiReference>
+ </Composite>
</Composite> \ No newline at end of file
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/creation/UMLPropertyEditorFactory.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/creation/UMLPropertyEditorFactory.java
index b777469df21..626a0db27e1 100644
--- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/creation/UMLPropertyEditorFactory.java
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/creation/UMLPropertyEditorFactory.java
@@ -14,6 +14,7 @@ package org.eclipse.papyrus.uml.properties.creation;
import java.util.Collection;
import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.domain.EditingDomain;
@@ -26,10 +27,17 @@ import org.eclipse.papyrus.infra.properties.ui.creation.EcorePropertyEditorFacto
import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
import org.eclipse.papyrus.infra.services.edit.service.IElementEditService;
import org.eclipse.papyrus.uml.properties.Activator;
+import org.eclipse.papyrus.uml.tools.providers.UMLEClassLabelProvider;
+import org.eclipse.swt.graphics.Image;
public class UMLPropertyEditorFactory extends EcorePropertyEditorFactory {
+ /**
+ * the label provider used to get the image and the label in the creation popup menu
+ */
+ private UMLEClassLabelProvider provider = new UMLEClassLabelProvider();
+
public UMLPropertyEditorFactory(EReference referenceIn) {
super(referenceIn);
}
@@ -79,4 +87,14 @@ public class UMLPropertyEditorFactory extends EcorePropertyEditorFactory {
}
}
+ /**
+ * @see org.eclipse.papyrus.infra.properties.ui.creation.EcorePropertyEditorFactory#getImage(org.eclipse.emf.ecore.EClass)
+ *
+ * @param eClass
+ * @return
+ */
+ @Override
+ protected Image getImage(final EClass eClass) {
+ return this.provider.getImage(eClass);
+ }
}
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java
index d5dca8fa07a..70d877af5e8 100644
--- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java
@@ -21,7 +21,10 @@ import static org.eclipse.uml2.uml.ParameterDirectionKind.IN_LITERAL;
import static org.eclipse.uml2.uml.ParameterDirectionKind.OUT_LITERAL;
import static org.eclipse.uml2.uml.ParameterDirectionKind.RETURN_LITERAL;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.eclipse.core.databinding.observable.IObservable;
@@ -37,6 +40,7 @@ import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.emf.utils.HistoryUtil;
import org.eclipse.papyrus.infra.internationalization.utils.utils.InternationalizationConstants;
import org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement;
@@ -73,8 +77,10 @@ import org.eclipse.uml2.uml.Extension;
import org.eclipse.uml2.uml.Message;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.uml2.uml.Namespace;
+import org.eclipse.uml2.uml.Operation;
import org.eclipse.uml2.uml.ParameterDirectionKind;
import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Signal;
import org.eclipse.uml2.uml.Stereotype;
import org.eclipse.uml2.uml.UMLPackage;
@@ -176,6 +182,24 @@ public class UMLModelElement extends EMFModelElement {
if (feature == UMLPackage.eINSTANCE.getConstraint_ConstrainedElement()) {
return new ConstrainedElementContentProvider(source, feature);
}
+ if (feature == UMLPackage.eINSTANCE.getMessage_Signature()) {
+ ResourceSet resourceSet = domain == null ? null : domain.getResourceSet();
+ return new UMLContentProvider(source, feature, null, resourceSet) {
+ /**
+ * @see org.eclipse.papyrus.infra.widgets.providers.EncapsulatedContentProvider#isValidValue(java.lang.Object)
+ *
+ * @param element
+ * @return
+ */
+ @Override
+ public boolean isValidValue(Object element) {
+ element = EMFHelper.getEObject(element);
+ // according to the UML norm 2.5, section 17.4.3.1
+ // The signature of a Message refers to either an Operation or a Signal.
+ return element instanceof Operation || element instanceof Signal;
+ }
+ };
+ }
ResourceSet resourceSet = domain == null ? null : domain.getResourceSet();
return new UMLContentProvider(source, feature, null, resourceSet);
@@ -212,6 +236,10 @@ public class UMLModelElement extends EMFModelElement {
directions.add(IN_LITERAL);
directions.add(INOUT_LITERAL);
return new MessageValueSpecificationFactory(reference, (Message) source, directions);
+ case DELETE_MESSAGE_LITERAL:
+ case CREATE_MESSAGE_LITERAL:
+ default:
+ break;
}
}
}
@@ -226,6 +254,24 @@ public class UMLModelElement extends EMFModelElement {
if (reference == UMLPackage.eINSTANCE.getConnector_Type() && source instanceof Connector) {
factory = new ConnectorTypeEditorFactory(reference);
+ } else if (reference == UMLPackage.eINSTANCE.getMessage_Signature()) {
+ factory = new UMLPropertyEditorFactory(reference) {
+
+ /**
+ * @see org.eclipse.papyrus.infra.properties.ui.creation.EcorePropertyEditorFactory#getAvailableEClasses()
+ *
+ * @return
+ */
+ @Override
+ protected List<EClass> getAvailableEClasses() {
+ // according to the UML norm 2.5, section 17.4.3.1
+ // The signature of a Message refers to either an Operation or a Signal.
+ final List<EClass> eClasses = new ArrayList<EClass>();
+ eClasses.add(UMLPackage.eINSTANCE.getOperation());
+ eClasses.add(UMLPackage.eINSTANCE.getSignal());
+ return eClasses;
+ }
+ };
} else {
factory = new UMLPropertyEditorFactory(reference);
}

Back to the top