Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrun2017-01-19 11:20:42 +0000
committercbrun2017-02-01 16:41:45 +0000
commit1d8e0b635ccfaac3f4f00a7979601d955f7357d6 (patch)
tree20c04d56345bfbcf3197111776e6382355d81baf
parent416dad1cc188d3cd0096f2453f958090f3c62170 (diff)
downloadorg.eclipse.sirius-1d8e0b635ccfaac3f4f00a7979601d955f7357d6.tar.gz
org.eclipse.sirius-1d8e0b635ccfaac3f4f00a7979601d955f7357d6.tar.xz
org.eclipse.sirius-1d8e0b635ccfaac3f4f00a7979601d955f7357d6.zip
[510126] Specify types for DiagramCreationDescription
Add the code and supporting test case so that the variables self, container and containerview in DiagramCreationDescription have their most specific types depending using the VSM structure Bug: 510126 Change-Id: I97922cb9cc1297411ee256fc9c3c5100593c7730 Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java35
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign13
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java9
3 files changed, 55 insertions, 2 deletions
diff --git a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java
index 04c68360ea..1729c30018 100644
--- a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java
+++ b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/description/DiagramInterpretedExpressionQuery.java
@@ -76,6 +76,7 @@ import org.eclipse.sirius.viewpoint.description.style.BasicLabelStyleDescription
import org.eclipse.sirius.viewpoint.description.tool.EditMaskVariables;
import org.eclipse.sirius.viewpoint.description.tool.ModelOperation;
import org.eclipse.sirius.viewpoint.description.tool.OperationAction;
+import org.eclipse.sirius.viewpoint.description.tool.RepresentationCreationDescription;
import org.eclipse.sirius.viewpoint.description.tool.ToolDescription;
import org.eclipse.sirius.viewpoint.description.tool.ToolPackage;
@@ -268,10 +269,41 @@ public class DiagramInterpretedExpressionQuery extends AbstractInterpretedExpres
collectPotentialContainerTypes(possibleContainerTypes, Sets.<String> newLinkedHashSet(), ((ReconnectEdgeDescription) target).getMappings());
availableVariables.put(IInterpreterSiriusVariables.CONTAINER, VariableType.fromStrings(possibleContainerTypes));
}
+ if (target instanceof RepresentationCreationDescription) {
+ typeVariablesForDiagramCreationRepresentation((RepresentationCreationDescription) target, availableVariables);
+ }
return availableVariables;
}
+ private void typeVariablesForDiagramCreationRepresentation(RepresentationCreationDescription desc, Map<String, VariableType> availableVariables) {
+ Collection<String> possibleSemanticTypes = Sets.newLinkedHashSet();
+ Collection<String> possibleViewTypes = Sets.newLinkedHashSet();
+ Collection<String> possibleContainerViewTypes = Sets.newLinkedHashSet();
+ Collection<String> possibleContainerTypes = Sets.newLinkedHashSet();
+ for (DiagramElementMapping n : Iterables.filter(desc.getMappings(), DiagramElementMapping.class)) {
+ collectTypes(possibleSemanticTypes, possibleViewTypes, n);
+ collectPotentialContainerTypes(possibleContainerTypes, possibleContainerViewTypes, n);
+ }
+ refineVariableType(availableVariables, SELF, possibleSemanticTypes);
+ if (this.feature == ToolPackage.Literals.ABSTRACT_TOOL_DESCRIPTION__PRECONDITION) {
+ /*
+ * then we are validating the attribute expressions of the tool.
+ */
+ availableVariables.put(IInterpreterSiriusVariables.CONTAINER, VariableType.fromStrings(possibleContainerTypes));
+ availableVariables.put(IInterpreterSiriusVariables.CONTAINER_VIEW, VariableType.fromStrings(possibleContainerViewTypes));
+ } else if (this.feature != ToolPackage.Literals.REPRESENTATION_CREATION_DESCRIPTION__BROWSE_EXPRESSION) {
+ /*
+ * we are in the model operations
+ */
+ availableVariables.put(IInterpreterSiriusVariables.CONTAINER_VIEW, VariableType.fromStrings(possibleContainerViewTypes));
+ if (desc.getRepresentationNameVariable() != null && !StringUtil.isEmpty(desc.getRepresentationNameVariable().getName())) {
+ availableVariables.put(desc.getRepresentationNameVariable().getName(), VariableType.fromJavaClass(java.lang.String.class)); // $NON-NLS-1$
+ }
+
+ }
+ }
+
private void collectEdgeCreationDescriptionVariableTypes(Map<String, VariableType> availableVariables, EdgeCreationDescription tool) {
Collection<String> possibleSemanticSources = Sets.newLinkedHashSet();
Collection<String> possibleViewSources = Sets.newLinkedHashSet();
@@ -380,6 +412,9 @@ public class DiagramInterpretedExpressionQuery extends AbstractInterpretedExpres
refineVariableType(availableVariables, tool.getElement().getName(), possibleSemanticTypes);
refineVariableType(availableVariables, tool.getElementView().getName(), possibleViewTypes);
}
+ if (toolContext instanceof RepresentationCreationDescription) {
+ typeVariablesForDiagramCreationRepresentation((RepresentationCreationDescription) toolContext, availableVariables);
+ }
}
}
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign b/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
index ac8aefe213..d040d12dd7 100644
--- a/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/vsm/validateVariableTypes.odesign
@@ -160,7 +160,7 @@
</style>
</conditionnalStyles>
</containerMappings>
- <containerMappings name="InteractionContainer" navigationDescriptions="//@ownedViewpoints[name='VSMTypes']/@ownedRepresentations[name='SelfTypeInference']/@defaultLayer/@toolSections.0/@ownedTools[name='toDiagram']" preconditionExpression="aql:containerView.edges->size() > 0" semanticCandidatesExpression="aql:containerView.target.eAllContents(interactions::Interaction)" domainClass="interactions.Interaction">
+ <containerMappings name="InteractionContainer" detailDescriptions="//@ownedViewpoints[name='VSMTypes']/@ownedRepresentations[name='SelfTypeInference']/@defaultLayer/@toolSections.0/@ownedTools[name='Create%20diag%20from%20interaction']" navigationDescriptions="//@ownedViewpoints[name='VSMTypes']/@ownedRepresentations[name='SelfTypeInference']/@defaultLayer/@toolSections.0/@ownedTools[name='toDiagram']" preconditionExpression="aql:containerView.edges->size() > 0" semanticCandidatesExpression="aql:containerView.target.eAllContents(interactions::Interaction)" domainClass="interactions.Interaction">
<subContainerMappings name="InteractionContainerInContainer" semanticCandidatesExpression="var:self" domainClass="interactions.Interaction">
<style xsi:type="style:WorkspaceImageDescription" borderSizeComputationExpression="1" arcWidth="1" arcHeight="1" workspacePath="/org.eclipse.emf.ecore.edit/icons/full/obj16/EClass.gif">
<borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
@@ -551,6 +551,17 @@
</firstModelOperations>
</initialOperation>
</ownedTools>
+ <ownedTools xsi:type="tool_1:DiagramCreationDescription" name="Create diag from interaction" precondition="aql:self.participants->size() > 0 and container.ownedInteractions->size() > 0" titleExpression="aql:self.participants->size()" browseExpression="aql:self.participants->first()" diagramDescription="//@ownedViewpoints[name='VSMTypes']/@ownedRepresentations[name='SelfTypeInference']">
+ <initialOperation>
+ <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:self">
+ <subModelOperations xsi:type="tool:If" conditionExpression="aql:self.name = diagramName">
+ <subModelOperations xsi:type="tool:ChangeContext" browseExpression="aql:containerView.edges"/>
+ </subModelOperations>
+ </firstModelOperations>
+ </initialOperation>
+ <containerViewVariable name="containerView"/>
+ <representationNameVariable name="diagramName"/>
+ </ownedTools>
<subSections name="Ignored">
<ownedTools xsi:type="tool_1:DirectEditLabel" name="ElementType">
<mask mask="{0}"/>
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
index 19d1b64fc1..cf750de8c6 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/dialect/description/AbstractInterpretedExpressionQuery.java
@@ -52,6 +52,7 @@ import org.eclipse.sirius.viewpoint.description.tool.If;
import org.eclipse.sirius.viewpoint.description.tool.InitialOperation;
import org.eclipse.sirius.viewpoint.description.tool.ModelOperation;
import org.eclipse.sirius.viewpoint.description.tool.OperationAction;
+import org.eclipse.sirius.viewpoint.description.tool.RepresentationCreationDescription;
import org.eclipse.sirius.viewpoint.description.tool.RepresentationNavigationDescription;
import org.eclipse.sirius.viewpoint.description.tool.SelectionWizardDescription;
import org.eclipse.sirius.viewpoint.description.tool.ToolDescription;
@@ -310,6 +311,12 @@ public abstract class AbstractInterpretedExpressionQuery implements IInterpreted
availableVariables.put(tool.getRepresentationNameVariable().getName(), VariableType.fromJavaClass(java.lang.String.class)); // $NON-NLS-1$
}
}
+ if (operationContext instanceof RepresentationCreationDescription) {
+ RepresentationCreationDescription tool = (RepresentationCreationDescription) operationContext;
+ if (tool.getRepresentationNameVariable() != null && !StringUtil.isEmpty(tool.getRepresentationNameVariable().getName())) {
+ availableVariables.put(tool.getRepresentationNameVariable().getName(), VariableType.fromJavaClass(java.lang.String.class)); // $NON-NLS-1$
+ }
+ }
addVariablesFromToolContext(operationContext);
if (operationContext instanceof SelectionWizardDescription) {
IInterpreterContext iContext = SiriusInterpreterContextFactory.createInterpreterContext(operationContext, ToolPackage.Literals.ABSTRACT_TOOL_DESCRIPTION__PRECONDITION);
@@ -414,7 +421,7 @@ public abstract class AbstractInterpretedExpressionQuery implements IInterpreted
*/
found = new EObjectQuery(target).getFirstAncestorOfType(org.eclipse.sirius.viewpoint.description.validation.ValidationPackage.eINSTANCE.getValidationRule());
if (!found.some()) {
- if (this.target instanceof OperationAction || this.target instanceof RepresentationNavigationDescription) {
+ if (this.target instanceof OperationAction || this.target instanceof RepresentationNavigationDescription || this.target instanceof RepresentationCreationDescription) {
/*
* OperationAction and RepresentationNavigationDescription are
* representing their own context for their interpreted

Back to the top