Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2016-02-04 10:55:13 +0000
committerPierre-Charles David2016-02-04 14:46:47 +0000
commit5b18af14b4ed1b50cab3f711ed8a7e56aa10de50 (patch)
treea36cfb180bb0096831814695a6f6ace3b812f805
parent747ac0b9a1bb4fe92f408199497c8d9a4abdef7b (diff)
downloadorg.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.xml12
-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.java64
-rw-r--r--incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java29
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();

Back to the top