diff options
author | Mathilde Arnaud | 2017-05-23 09:02:14 +0000 |
---|---|---|
committer | Quentin Le Menez | 2017-05-24 14:26:47 +0000 |
commit | 63e35b38f88089e24126bdb6aea37a6be0f09ac3 (patch) | |
tree | 65a949611dedfe0df1ddcbec57c3576ef7614d89 /plugins | |
parent | fafd80bdfd789dd50c3a78dc21f4651c8e2419cf (diff) | |
download | org.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')
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); } |