Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2016-12-09 10:21:51 +0000
committerPierre-Charles David2016-12-13 14:29:41 +0000
commitc1ea05fc2a00427bc131caee60afaf9a8c5aeee5 (patch)
tree8232c62d2967b4817c26bb40dcf39451635dc2f8
parent1c03813ad2920abf425991eee338706b679482fd (diff)
downloadorg.eclipse.sirius-c1ea05fc2a00427bc131caee60afaf9a8c5aeee5.tar.gz
org.eclipse.sirius-c1ea05fc2a00427bc131caee60afaf9a8c5aeee5.tar.xz
org.eclipse.sirius-c1ea05fc2a00427bc131caee60afaf9a8c5aeee5.zip
[508968] Support custom EditingContextAdapter implementations
Bug: 508968 Change-Id: I15d7550d7de368f9019dbc7162fcc061afe7e11d Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/plugin.properties1
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/plugin.xml1
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/schema/contextAdapterProvider.exsd130
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/api/IEditingContextAdapterProvider.java33
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusUIPropertiesPlugin.java50
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java4
6 files changed, 217 insertions, 2 deletions
diff --git a/plugins/org.eclipse.sirius.ui.properties/plugin.properties b/plugins/org.eclipse.sirius.ui.properties/plugin.properties
index 6207c6066a..ca39cba877 100644
--- a/plugins/org.eclipse.sirius.ui.properties/plugin.properties
+++ b/plugins/org.eclipse.sirius.ui.properties/plugin.properties
@@ -14,6 +14,7 @@ providerName = Eclipse Modeling Project
descriptionConverterExtensionPoint.Name=Description Converter
descriptionLinkResolverExtensionPoint.Name=Description Link Resolver
+contextAdapterProviderExtensionPoint.Name=Editing Context Adapter Provider
siriusTabDescriptorProvider.Label=Sirius EEF Tab Descriptor Provider
siriusTabDescriptorProvider.Description=Provides EEF tab descriptors according to what is defined in the view properties extension
diff --git a/plugins/org.eclipse.sirius.ui.properties/plugin.xml b/plugins/org.eclipse.sirius.ui.properties/plugin.xml
index eae1f1f7fd..6883cc1621 100644
--- a/plugins/org.eclipse.sirius.ui.properties/plugin.xml
+++ b/plugins/org.eclipse.sirius.ui.properties/plugin.xml
@@ -14,6 +14,7 @@
<plugin>
<extension-point id="descriptionConverter" name="%descriptionConverterExtensionPoint.Name" schema="schema/descriptionConverter.exsd"/>
<extension-point id="descriptionLinkResolver" name="%descriptionLinkResolverExtensionPoint.Name" schema="schema/descriptionLinkResolver.exsd"/>
+ <extension-point id="contextAdapterProvider" name="%contextAdapterProviderExtensionPoint.Name" schema="schema/contextAdapterProvider.exsd"/>
<extension point="org.eclipse.core.runtime.adapters">
<factory adaptableType="org.eclipse.gef.GraphicalEditPart"
class="org.eclipse.sirius.ui.properties.internal.SiriusInputAdapter">
diff --git a/plugins/org.eclipse.sirius.ui.properties/schema/contextAdapterProvider.exsd b/plugins/org.eclipse.sirius.ui.properties/schema/contextAdapterProvider.exsd
new file mode 100644
index 0000000000..cf2067351c
--- /dev/null
+++ b/plugins/org.eclipse.sirius.ui.properties/schema/contextAdapterProvider.exsd
@@ -0,0 +1,130 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.sirius.ui.properties" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.sirius.ui.properties" id="contextAdapterProvider" name="contextAdapterProvider"/>
+ </appinfo>
+ <documentation>
+ This extension points allows to provide a custom implementation of the &lt;code&gt;org.eclipse.eef.core.api.EditingContextAdapter&lt;/code&gt; to use for runtime coordination between the EEF runtime which manages the properties views and the Sirius session.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="descriptor"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="descriptor">
+ <complexType>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ The identifier of the contribution.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="label" type="string">
+ <annotation>
+ <documentation>
+ The label of the provider, this information may be used in the user interface and as such it may be visible by the end user. It should be internationalized if possible.
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ The description of the provider, this information may be used in the user interface and as such it may be visible by the end user. It should be internationalized if possible.
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string">
+ <annotation>
+ <documentation>
+ The implementation of the IEditingContextAdapterProvider.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.sirius.ui.properties.api.IEditingContextAdapterProvider"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ 4.1.3
+ </documentation>
+ </annotation>
+
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ See &lt;code&gt;org.eclipse.sirius.ui.properties.api.IEditingContextAdapterProvider&lt;/code&gt;.
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ None.
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="copyright"/>
+ </appinfo>
+ <documentation>
+ Copyright (c) 2016 Obeo&lt;br/&gt;
+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
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/api/IEditingContextAdapterProvider.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/api/IEditingContextAdapterProvider.java
new file mode 100644
index 0000000000..83752a4ab5
--- /dev/null
+++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/api/IEditingContextAdapterProvider.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * 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.api;
+
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.sirius.business.api.session.Session;
+
+/**
+ * Delegate the creation of the concrete {@link EditingContextAdapter} to use
+ * for a given Sirius session.
+ *
+ * @author pcdavid
+ */
+public interface IEditingContextAdapterProvider {
+ /**
+ * Creates and return the {@link EditingContextAdapter} to use for the
+ * specified session.
+ *
+ * @param session
+ * a Sirius session
+ * @return the {@link EditingContextAdapter}, on <code>null</code> if this
+ * provider does not handle the given session.
+ */
+ EditingContextAdapter createEditingContextAdapter(Session session);
+}
diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusUIPropertiesPlugin.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusUIPropertiesPlugin.java
index 18d2c643a2..5fd2e863f1 100644
--- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusUIPropertiesPlugin.java
+++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusUIPropertiesPlugin.java
@@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.eef.EefPackage;
import org.eclipse.eef.common.api.AbstractEEFEclipsePlugin;
+import org.eclipse.eef.core.api.EditingContextAdapter;
import org.eclipse.eef.ide.api.extensions.AbstractRegistryEventListener;
import org.eclipse.eef.ide.api.extensions.IItemDescriptor;
import org.eclipse.eef.ide.api.extensions.IItemRegistry;
@@ -29,10 +30,12 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.sirius.business.api.session.Session;
import org.eclipse.sirius.ui.properties.api.DefaultDescriptionConverter;
import org.eclipse.sirius.ui.properties.api.DefaultDescriptionWithInitialOperationConverter;
import org.eclipse.sirius.ui.properties.api.IDescriptionConverter;
import org.eclipse.sirius.ui.properties.api.IDescriptionLinkResolver;
+import org.eclipse.sirius.ui.properties.api.IEditingContextAdapterProvider;
import org.eclipse.sirius.ui.properties.internal.tabprovider.PropertiesDescriptionConverterSwitch;
import org.eclipse.sirius.ui.properties.internal.tabprovider.PropertyValidationRuleLinkResolver;
import org.eclipse.sirius.ui.properties.internal.tabprovider.SemanticValidationRuleDescriptionConverter;
@@ -104,6 +107,12 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
private static final String DESCRIPTION_LINK_RESOLVER_EXTENSION_POINT = "descriptionLinkResolver"; //$NON-NLS-1$
/**
+ * The name of the extension point for the
+ * {@link IEditingContextAdapterProvider}.
+ */
+ private static final String CONTEXT_ADAPTER_PROVIDER_EXTENSION_POINT = "contextAdapterProvider"; //$NON-NLS-1$
+
+ /**
* The {@link IItemRegistry} used to retrieve the
* {@link IDescriptionConverter}.
*/
@@ -116,6 +125,12 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
private IItemRegistry<IDescriptionLinkResolver> descriptionLinkResolverRegistry;
/**
+ * The {@link IItemRegistry} used to retrieve the
+ * {@link IEditingContextAdapterProvider}.
+ */
+ private IItemRegistry<IEditingContextAdapterProvider> contextAdapterProviderRegistry;
+
+ /**
* The extension registry listener for the {@link IDescriptionConverter}
* .
*/
@@ -128,6 +143,12 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
private AbstractRegistryEventListener descriptionLinkResolverListener;
/**
+ * The extension registry listener for the
+ * {@link IEditingContextAdapterProvider}.
+ */
+ private AbstractRegistryEventListener contextAdapterProviderListener;
+
+ /**
* Storage for preferences.
*/
private ScopedPreferenceStore preferenceStore;
@@ -160,6 +181,11 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
this.descriptionLinkResolverListener = new DescriptorRegistryEventListener<>(PLUGIN_ID, DESCRIPTION_LINK_RESOLVER_EXTENSION_POINT, this.descriptionLinkResolverRegistry);
registry.addListener(this.descriptionLinkResolverListener, PLUGIN_ID + '.' + DESCRIPTION_LINK_RESOLVER_EXTENSION_POINT);
this.descriptionLinkResolverListener.readRegistry(registry);
+
+ this.contextAdapterProviderRegistry = new ItemRegistry<>();
+ this.contextAdapterProviderListener = new DescriptorRegistryEventListener<>(PLUGIN_ID, CONTEXT_ADAPTER_PROVIDER_EXTENSION_POINT, this.contextAdapterProviderRegistry);
+ registry.addListener(this.contextAdapterProviderListener, PLUGIN_ID + '.' + CONTEXT_ADAPTER_PROVIDER_EXTENSION_POINT);
+ this.contextAdapterProviderListener.readRegistry(registry);
}
@Override
@@ -167,11 +193,14 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
IExtensionRegistry registry = Platform.getExtensionRegistry();
registry.removeListener(this.descriptionConverterListener);
registry.removeListener(this.descriptionLinkResolverListener);
+ registry.removeListener(this.contextAdapterProviderListener);
this.descriptionConverterListener = null;
this.descriptionConverterRegistry = null;
this.descriptionLinkResolverListener = null;
this.descriptionLinkResolverRegistry = null;
+ this.contextAdapterProviderListener = null;
+ this.contextAdapterProviderRegistry = null;
stopPropertiesPreferencesManagement();
@@ -179,6 +208,27 @@ public class SiriusUIPropertiesPlugin extends EMFPlugin {
}
/**
+ * Returns the appropriate {@link EditingContextAdapter} to use for the
+ * specified session, taking registered providers into account.
+ *
+ * @param session
+ * the Sirius session.
+ * @return the {@link EditingContextAdapter} to use for this session.
+ */
+ public EditingContextAdapter getEditingContextAdapter(Session session) {
+ for (IItemDescriptor<IEditingContextAdapterProvider> itemDescriptor : this.contextAdapterProviderRegistry.getItemDescriptors()) {
+ IEditingContextAdapterProvider provider = itemDescriptor.getItem();
+ if (provider != null) {
+ EditingContextAdapter provided = provider.createEditingContextAdapter(session);
+ if (provided != null) {
+ return provided;
+ }
+ }
+ }
+ return new TransactionalEditingDomainContextAdapter(session.getTransactionalEditingDomain());
+ }
+
+ /**
* Returns the description converter used to create the EEF description
* EObject from the given Sirius one.
*
diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java
index 99150d3e06..9885bc8713 100644
--- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java
+++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java
@@ -21,6 +21,7 @@ import org.eclipse.eef.core.api.EEFExpressionUtils;
import org.eclipse.eef.core.api.EEFPage;
import org.eclipse.eef.core.api.EEFView;
import org.eclipse.eef.core.api.EEFViewFactory;
+import org.eclipse.eef.core.api.EditingContextAdapter;
import org.eclipse.eef.core.api.IEEFDomainClassTester;
import org.eclipse.eef.ide.ui.properties.api.EEFTabDescriptor;
import org.eclipse.eef.properties.ui.api.IEEFTabDescriptor;
@@ -44,7 +45,6 @@ import org.eclipse.sirius.ui.properties.internal.Messages;
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.ui.properties.internal.TransactionalEditingDomainContextAdapter;
import org.eclipse.sirius.viewpoint.description.DescriptionPackage;
import org.eclipse.sirius.viewpoint.description.Group;
import org.eclipse.sirius.viewpoint.description.Viewpoint;
@@ -136,7 +136,7 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider {
IVariableManager variableManager = new VariableManagerFactory().createVariableManager();
variableManager.put(EEFExpressionUtils.SELF, input.getSemanticElement());
variableManager.put(EEFExpressionUtils.INPUT, input);
- TransactionalEditingDomainContextAdapter eca = new TransactionalEditingDomainContextAdapter(session.getTransactionalEditingDomain());
+ EditingContextAdapter eca = SiriusUIPropertiesPlugin.getPlugin().getEditingContextAdapter(session);
EEFView eefView = new EEFViewFactory().createEEFView(viewDescription, variableManager, new SiriusInterpreter(session), eca, new IEEFDomainClassTester() {
@Override
public boolean eInstanceOf(EObject eObject, String domainClass) {

Back to the top