diff options
author | Pierre-Charles David | 2016-02-04 10:55:13 +0000 |
---|---|---|
committer | Pierre-Charles David | 2016-02-04 14:46:47 +0000 |
commit | 5b18af14b4ed1b50cab3f711ed8a7e56aa10de50 (patch) | |
tree | a36cfb180bb0096831814695a6f6ace3b812f805 | |
parent | 747ac0b9a1bb4fe92f408199497c8d9a4abdef7b (diff) | |
download | org.eclipse.sirius-5b18af14b4ed1b50cab3f711ed8a7e56aa10de50.tar.gz org.eclipse.sirius-5b18af14b4ed1b50cab3f711ed8a7e56aa10de50.tar.xz org.eclipse.sirius-5b18af14b4ed1b50cab3f711ed8a7e56aa10de50.zip |
[482528] Replace the raw EObject as input with a richer InputDescriptor
Also expose this InputDescriptor as the "input" variable, in addition to
"self" which still refers to the main semantic element whose properties
must be displayed.
Bug: 482528
Change-Id: Ibaae39a02201f7e9ec1ec184caed109969110759
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r-- | incubation/org.eclipse.sirius.ui.properties/plugin.xml | 12 | ||||
-rw-r--r-- | incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputAdapter.java (renamed from incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusSemanticAdapter.java) | 17 | ||||
-rw-r--r-- | incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputDescriptor.java | 64 | ||||
-rw-r--r-- | incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java | 29 |
4 files changed, 94 insertions, 28 deletions
diff --git a/incubation/org.eclipse.sirius.ui.properties/plugin.xml b/incubation/org.eclipse.sirius.ui.properties/plugin.xml index cb7e9e3c72..718e283a8b 100644 --- a/incubation/org.eclipse.sirius.ui.properties/plugin.xml +++ b/incubation/org.eclipse.sirius.ui.properties/plugin.xml @@ -6,16 +6,16 @@ <extension point="org.eclipse.core.runtime.adapters"> <factory adaptableType="org.eclipse.gef.GraphicalEditPart" - class="org.eclipse.sirius.ui.properties.internal.SiriusSemanticAdapter"> - <adapter type="org.eclipse.emf.ecore.EObject" /> + class="org.eclipse.sirius.ui.properties.internal.SiriusInputAdapter"> + <adapter type="org.eclipse.eef.core.api.InputDescriptor" /> </factory> <factory adaptableType="org.eclipse.gef.ConnectionEditPart" - class="org.eclipse.sirius.ui.properties.internal.SiriusSemanticAdapter"> - <adapter type="org.eclipse.emf.ecore.EObject" /> + class="org.eclipse.sirius.ui.properties.internal.SiriusInputAdapter"> + <adapter type="org.eclipse.eef.core.api.InputDescriptor" /> </factory> <factory adaptableType="org.eclipse.sirius.viewpoint.DSemanticDecorator" - class="org.eclipse.sirius.ui.properties.internal.SiriusSemanticAdapter"> - <adapter type="org.eclipse.emf.ecore.EObject" /> + class="org.eclipse.sirius.ui.properties.internal.SiriusInputAdapter"> + <adapter type="org.eclipse.eef.core.api.InputDescriptor" /> </factory> </extension> <extension diff --git a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusSemanticAdapter.java b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputAdapter.java index 05956863b0..5761f99c20 100644 --- a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusSemanticAdapter.java +++ b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputAdapter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 Obeo. + * Copyright (c) 2016 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -11,18 +11,20 @@ package org.eclipse.sirius.ui.properties.internal; import org.eclipse.core.runtime.IAdapterFactory; -import org.eclipse.emf.ecore.EObject; +import org.eclipse.eef.core.api.InputDescriptor; /** - * An adapter factory to convert an element selected in Sirius into the - * underlying semantic element. + * An adapter factory to convert an element selected in Sirius into a suitable + * {@link InputDescriptor}. + * + * @author Pierre-Charles David <pierre-charles.david@obeo.fr> */ -public class SiriusSemanticAdapter implements IAdapterFactory { +public class SiriusInputAdapter implements IAdapterFactory { @SuppressWarnings("unchecked") @Override public Object getAdapter(final Object adaptableObject, @SuppressWarnings("rawtypes") final Class adapterType) { if (adapterType != null) { - return SiriusContext.from(adaptableObject).getMainSemanticElement().get(); + return new SiriusInputDescriptor(adaptableObject); } else { return null; } @@ -30,7 +32,6 @@ public class SiriusSemanticAdapter implements IAdapterFactory { @Override public Class<?>[] getAdapterList() { - return new Class<?>[] { EObject.class }; + return new Class<?>[] { InputDescriptor.class }; } - } diff --git a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputDescriptor.java b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputDescriptor.java new file mode 100644 index 0000000000..12a9ee15f4 --- /dev/null +++ b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusInputDescriptor.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2016 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.ui.properties.internal; + +import org.eclipse.eef.core.api.InputDescriptor; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.sirius.ext.base.Option; + +/** + * An EEF InputDescriptor for elements selected in a Sirius context. + * + * @author Pierre-Charles David <pierre-charles.david@obeo.fr> + */ +public class SiriusInputDescriptor implements InputDescriptor { + /** + * The full context, determined from the original input. + */ + private final SiriusContext context; + + /** + * Creates a SiriusInputDescriptor from the specified input. + * + * @param input + * the original input. + */ + public SiriusInputDescriptor(Object input) { + this.context = SiriusContext.from(input); + } + + @Override + public Object getOriginalSelection() { + return context.getInput(); + } + + @Override + public EObject getSemanticElement() { + Option<EObject> obj = context.getMainSemanticElement(); + if (obj.some()) { + return obj.get(); + } else { + return null; + } + } + + /** + * Returns the full Sirius context determined from the original input, which + * may include addition Sirius-specific information in addition to what can + * be exposed through the generic {@link InputDescriptor} API. + * + * @return the full Sirius context determined from the original input. + */ + public SiriusContext getFullContext() { + return context; + } + +} diff --git a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java index f7bdf04b52..46f6d04217 100644 --- a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java +++ b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java @@ -37,7 +37,7 @@ import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.properties.PageDescription; import org.eclipse.sirius.properties.ViewExtensionDescription; import org.eclipse.sirius.ui.properties.internal.Messages; -import org.eclipse.sirius.ui.properties.internal.SiriusContext; +import org.eclipse.sirius.ui.properties.internal.SiriusInputDescriptor; import org.eclipse.sirius.ui.properties.internal.SiriusInterpreter; import org.eclipse.sirius.ui.properties.internal.SiriusUIPropertiesPlugin; import org.eclipse.sirius.viewpoint.description.DescriptionPackage; @@ -73,10 +73,10 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider { if (objects.length > 1) { SiriusUIPropertiesPlugin.getPlugin().warning(Messages.SiriusTabDescriptorProvider_UnsupportedMultipleSelection); } - SiriusContext ctx = SiriusContext.from(objects[0]); - if (ctx.getMainSemanticElement().some()) { + SiriusInputDescriptor sid = new SiriusInputDescriptor(objects[0]); + if (sid.getSemanticElement() != null) { // Let's find out the description of the view - return this.getTabDescriptors(ctx.getMainSemanticElement().get()); + return this.getTabDescriptors(sid); } else { SiriusUIPropertiesPlugin.getPlugin().error(Messages.SiriusTabDescriptorProvider_UndefinedSemanticElement); } @@ -92,15 +92,15 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider { * The semantic element * @return A collection of {@link IEEFTabDescriptor} */ - private Collection<IEEFTabDescriptor> getTabDescriptors(EObject semanticElement) { - Session session = new EObjectQuery(semanticElement).getSession(); - List<PageDescription> effectivePageDescriptions = computeEffectiveDescription(semanticElement, session); - return getTabDescriptors(session, semanticElement, effectivePageDescriptions); + private Collection<IEEFTabDescriptor> getTabDescriptors(SiriusInputDescriptor input) { + Session session = input.getFullContext().getSession().get(); + List<PageDescription> effectivePageDescriptions = computeEffectiveDescription(input, session); + return getTabDescriptors(session, input, effectivePageDescriptions); } - private Collection<IEEFTabDescriptor> getTabDescriptors(Session session, EObject semanticElement, List<PageDescription> effectivePageDescriptions) { + private Collection<IEEFTabDescriptor> getTabDescriptors(Session session, SiriusInputDescriptor input, List<PageDescription> effectivePageDescriptions) { EEFViewDescription viewDescription = new ViewDescriptionConverter(effectivePageDescriptions).convert(); - EEFView eefView = createEEFView(session, semanticElement, viewDescription); + EEFView eefView = createEEFView(session, input, viewDescription); List<IEEFTabDescriptor> descriptors = new ArrayList<IEEFTabDescriptor>(); List<EEFPage> eefPages = eefView.getPages(); @@ -110,10 +110,11 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider { return descriptors; } - private EEFView createEEFView(Session session, EObject semanticElement, EEFViewDescription viewDescription) { + private EEFView createEEFView(Session session, SiriusInputDescriptor input, EEFViewDescription viewDescription) { IVariableManager variableManager = new VariableManagerFactory().createVariableManager(); - variableManager.put(EEFExpressionUtils.SELF, semanticElement); - EEFView eefView = new EEFViewFactory().createEEFView(viewDescription, variableManager, new SiriusInterpreter(session), session.getTransactionalEditingDomain(), semanticElement); + variableManager.put(EEFExpressionUtils.SELF, input.getSemanticElement()); + variableManager.put(EEFExpressionUtils.INPUT, input); + EEFView eefView = new EEFViewFactory().createEEFView(viewDescription, variableManager, new SiriusInterpreter(session), session.getTransactionalEditingDomain(), input); return eefView; } @@ -124,7 +125,7 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider { * session.selectedViewpoints.eContainer(description::Group).eContents(properties::ViewExtensionDescription).pages * </pre> */ - private List<PageDescription> computeEffectiveDescription(EObject semanticElement, Session session) { + private List<PageDescription> computeEffectiveDescription(SiriusInputDescriptor input, Session session) { Preconditions.checkNotNull(session); List<ViewExtensionDescription> viewDescriptions = Lists.newArrayList(); |