Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2016-02-26 14:59:01 +0000
committerPierre-Charles David2016-03-23 08:19:45 +0000
commit0968a67eeea9447d43302ec51b79f7e7bda44878 (patch)
treebdb46da1d7af5e1699974d70fa018fd64c21396d
parentfa8ede4725f352cec16a22eb72cce268668dd6d2 (diff)
downloadorg.eclipse.sirius-4.0.0M6.tar.gz
org.eclipse.sirius-4.0.0M6.tar.xz
org.eclipse.sirius-4.0.0M6.zip
[482528] Add support for calling operations defined in the default rules modelv4.0.0M6
When using the default generic behavior, all edition features which require calling back into a ModelOperation failed because we only looked for ModelOperations in the VSMs enabled in the current session. Add a fallback case where we look into the default model. Bug: 482528 Change-Id: I69606526a0c0e7df39678f542c0286dbb1f27495 Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java70
-rw-r--r--incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java35
2 files changed, 80 insertions, 25 deletions
diff --git a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
index 4ac35e685e..9fdd029e44 100644
--- a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
+++ b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
@@ -11,6 +11,8 @@
package org.eclipse.sirius.ui.properties.internal;
import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Set;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
@@ -22,8 +24,10 @@ import org.eclipse.sirius.business.api.query.EObjectQuery;
import org.eclipse.sirius.business.api.session.Session;
import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor;
import org.eclipse.sirius.ext.base.Option;
+import org.eclipse.sirius.properties.ViewExtensionDescription;
import org.eclipse.sirius.tools.api.command.SiriusCommand;
import org.eclipse.sirius.tools.api.command.ui.NoUICallback;
+import org.eclipse.sirius.ui.properties.internal.tabprovider.SiriusTabDescriptorProvider;
import org.eclipse.sirius.viewpoint.DRepresentation;
import org.eclipse.sirius.viewpoint.DSemanticDecorator;
import org.eclipse.sirius.viewpoint.description.Viewpoint;
@@ -48,29 +52,65 @@ public class SiriusToolServices {
*/
public EObject executeOperation(EObject eObject, String initialCommandUri) {
Session session = new EObjectQuery(eObject).getSession();
- ModelAccessor modelAccessor = session.getModelAccessor();
- TaskHelper taskHelper = new TaskHelper(modelAccessor, new NoUICallback());
+ ModelOperation modelOperation = findModelOperation(initialCommandUri, session);
+ if (modelOperation != null) {
+ ModelAccessor modelAccessor = session.getModelAccessor();
+ ICommandTask task = new TaskHelper(modelAccessor, new NoUICallback()).buildTaskFromModelOperation(eObject, modelOperation);
+ SiriusCommand command = new SiriusCommand(session.getTransactionalEditingDomain(), "SiriusToolServices#executeOperation");
+ command.getTasks().add(task);
+ session.getTransactionalEditingDomain().getCommandStack().execute(command);
+ }
+ return eObject;
+ }
- ModelOperation modelOperation = null;
+ /**
+ * Resolves the actual {@link ModelOperation} to execute given its URI.
+ *
+ * @param initialCommandUri
+ * the URI of the operation to search for.
+ * @param session
+ * the Sirius session which determines the scope to search into.
+ * @return the {@link ModelOperation} instance found at the specified URI,
+ * either in one of the VSMs for which at least one Viewpoint is
+ * currently enabled in the session, or from the default ruleset, or
+ * <code>null</code> if no matching operation could be located.
+ */
+ private ModelOperation findModelOperation(String initialCommandUri, Session session) {
+ URI commandResourceURI = URI.createURI(initialCommandUri).trimFragment();
+ for (Resource res : getResourcesInScope(session)) {
+ if (commandResourceURI.equals(res.getURI())) {
+ EObject modelOperationEObject = res.getEObject(URI.createURI(initialCommandUri).fragment());
+ if (modelOperationEObject instanceof InitialOperation) {
+ return ((InitialOperation) modelOperationEObject).getFirstModelOperations();
+ }
+ }
+ }
+ return null;
+ }
+ /**
+ * Returns all the (VSM-like) resources in which to search for the
+ * {@link ModelOperation} to execute.
+ *
+ * @param session
+ * the Sirius session.
+ * @return all the resources in which to look for the ModelOperation, in
+ * order of preference.
+ */
+ private Set<Resource> getResourcesInScope(Session session) {
+ Set<Resource> result = new LinkedHashSet<>();
Collection<Viewpoint> selectedViewpoints = session.getSelectedViewpoints(true);
for (Viewpoint viewpoint : selectedViewpoints) {
Resource eResource = viewpoint.eResource();
- if (eResource != null && URI.createURI(initialCommandUri).trimFragment().equals(eResource.getURI())) {
- EObject modelOperationEObject = eResource.getEObject(URI.createURI(initialCommandUri).fragment());
- if (modelOperationEObject instanceof InitialOperation) {
- modelOperation = ((InitialOperation) modelOperationEObject).getFirstModelOperations();
- }
+ if (eResource != null) {
+ result.add(eResource);
}
}
-
- if (modelOperation != null) {
- ICommandTask task = taskHelper.buildTaskFromModelOperation(eObject, modelOperation);
- SiriusCommand command = new SiriusCommand(session.getTransactionalEditingDomain(), "SiriusToolServices#executeOperation");
- command.getTasks().add(task);
- session.getTransactionalEditingDomain().getCommandStack().execute(command);
+ ViewExtensionDescription defaults = SiriusTabDescriptorProvider.getDefaultRules();
+ if (defaults != null && defaults.eResource() != null) {
+ result.add(defaults.eResource());
}
- return eObject;
+ return result;
}
/**
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 9bb1254fd4..89589341c5 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
@@ -63,7 +63,28 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider {
* The URI of the model containing the default value of the properties page
* to create.
*/
- private static final String DEFAULT_PROPERTIES_URI = "platform:/plugin/org.eclipse.sirius.ui.properties/model/properties.xmi";
+ private static final URI DEFAULT_PROPERTIES_URI = URI.createURI("platform:/plugin/org.eclipse.sirius.ui.properties/model/properties.xmi", true);
+
+ private static final ResourceSet DEFAULT_RULES = new ResourceSetImpl();
+
+ /**
+ * Returns the global default rules which apply when nothing more specific
+ * was specified.
+ *
+ * @return the global default rules.
+ */
+ public static ViewExtensionDescription getDefaultRules() {
+ Resource resource = DEFAULT_RULES.getResource(DEFAULT_PROPERTIES_URI, true);
+ if (resource == null) {
+ SiriusUIPropertiesPlugin.getPlugin().error(Messages.SiriusTabDescriptorProvider_DefaultPropertiesNotFound);
+ } else {
+ List<EObject> contents = resource.getContents();
+ if (contents.size() > 0 && contents.get(0) instanceof ViewExtensionDescription) {
+ return (ViewExtensionDescription) contents.get(0);
+ }
+ }
+ return null;
+ }
@Override
public Collection<IEEFTabDescriptor> get(IWorkbenchPart part, ISelection selection) {
@@ -143,15 +164,9 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider {
}
if (effectivePages.size() == 0) {
- ResourceSet resourceSet = new ResourceSetImpl();
- URI uri = URI.createURI(DEFAULT_PROPERTIES_URI, true);
- Resource resource = resourceSet.getResource(uri, true);
- if (resource != null) {
- List<EObject> contents = resource.getContents();
- if (contents.size() > 0 && contents.get(0) instanceof ViewExtensionDescription) {
- ViewExtensionDescription viewExtensionDescription = (ViewExtensionDescription) contents.get(0);
- effectivePages.addAll(viewExtensionDescription.getPages());
- }
+ ViewExtensionDescription viewExtensionDescription = getDefaultRules();
+ if (viewExtensionDescription != null) {
+ effectivePages.addAll(viewExtensionDescription.getPages());
} else {
SiriusUIPropertiesPlugin.getPlugin().error(Messages.SiriusTabDescriptorProvider_DefaultPropertiesNotFound);
}

Back to the top