diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 56827d7e98..4ed5796b08 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -58,6 +58,7 @@ As a result the development of applications consuming Sirius Components packages
- https://github.com/eclipse-sirius/sirius-web/issues/2117[#2117] [form] Add a modal to select new values for multi-valued references
- https://github.com/eclipse-sirius/sirius-web/issues/2118[#2118] [form] Add a modal to create new objects on a widget reference
- https://github.com/eclipse-sirius/sirius-web/issues/2253[#2253] [diagram] Add the possibility of organizing palette tools into sections
+- https://github.com/eclipse-sirius/sirius-web/issues/2254[#2254] [diagram] Add the possibility to specify precondition on diagram tools
=== Improvements
diff --git a/integration-tests/cypress/e2e/project/edit/studio.cy.js b/integration-tests/cypress/e2e/project/edit/studio.cy.js
index ac20440a54..efb80c5f88 100644
--- a/integration-tests/cypress/e2e/project/edit/studio.cy.js
+++ b/integration-tests/cypress/e2e/project/edit/studio.cy.js
@@ -111,4 +111,51 @@ describe('/projects/:projectId/edit - Studio', () => {
cy.get('[data-value="Source Edge End Reconnection Tool"]').should('not.exist');
cy.get('[data-value="Target Edge End Reconnection Tool"]').should('not.exist');
});
+
+ it('Check the precondition on tools', () => {
+ cy.getByTestId('ViewNewModel').dblclick();
+ cy.getByTestId('View').dblclick();
+ cy.get('[data-testid$=" Diagram Description"]').dblclick();
+ cy.getByTestId('DiagramPalette-more').click();
+ cy.getByTestId('new-object').click();
+ cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1);
+ cy.getByTestId('childCreationDescription').click();
+ cy.getByTestId('childCreationDescription').get('[data-value="Node Tool"]').should('exist').click();
+ cy.getByTestId('create-object').click();
+ cy.getByTestId('Precondition Expression').should('exist');
+ cy.getByTestId('Precondition Expression').type('aql:self.eAllContents()->size()>0');
+ cy.getByTestId('Name').clear();
+ cy.getByTestId('Name').type('TestTool');
+
+ cy.get('[title="Back to the homepage"]').click();
+ // Check the diagram representation
+
+ cy.getByTestId('create').click();
+ cy.getByTestId('name').type('Instance');
+ cy.getByTestId('create-project').click();
+ cy.getByTestId('empty').click();
+ cy.getByTestId('Others...-more').click();
+ cy.getByTestId('new-object').click();
+ cy.getByTestId('domain').children('[role="button"]').invoke('text').should('have.length.gt', 1);
+ cy.getByTestId('domain').click();
+ cy.getByTestId('domain').get('[data-value^="domain://"]').should('exist').click();
+ cy.getByTestId('create-object').click();
+
+ cy.getByTestId('Root-more').click();
+ cy.getByTestId('treeitem-contextmenu').findByTestId('new-representation').click();
+ cy.getByTestId('representationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1);
+ cy.getByTestId('representationDescription').click();
+ cy.get('[data-testid$=" Diagram Description"]').should('exist').click();
+ cy.getByTestId('create-representation').click();
+
+ cy.getByTestId('Diagram').click();
+ cy.getByTestId('New Entity1 - Tool').should('exist');
+ cy.getByTestId('New Entity2 - Tool').should('exist');
+ cy.getByTestId('TestTool - Tool').should('not.exist');
+ cy.getByTestId('New Entity1 - Tool').click();
+ cy.getByTestId('Diagram').click();
+ cy.getByTestId('New Entity1 - Tool').should('exist');
+ cy.getByTestId('New Entity2 - Tool').should('exist');
+ cy.getByTestId('TestTool - Tool').should('exist');
+ });
});
diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/diagrams/CompatibilityPaletteProvider.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/diagrams/CompatibilityPaletteProvider.java
index 335628da2d..7108438f15 100644
--- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/diagrams/CompatibilityPaletteProvider.java
+++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/diagrams/CompatibilityPaletteProvider.java
@@ -33,6 +33,7 @@
import org.eclipse.sirius.components.compatibility.api.IIdentifierProvider;
import org.eclipse.sirius.components.compatibility.services.api.IODesignRegistry;
import org.eclipse.sirius.components.core.api.Environment;
+import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.diagrams.Edge;
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
@@ -84,7 +85,7 @@ public boolean canHandle(DiagramDescription diagramDescription) {
}
@Override
- public Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription) {
+ public Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription, IEditingContext editingContext) {
var optionalVsmElementId = this.identifierProvider.findVsmElementId(diagramDescription.getId());
var optionalSiriusDiagramDescription = this.odesignRegistry.getODesigns().stream()
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/api/IPaletteProvider.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/api/IPaletteProvider.java
index 0cd21c23ea..c9540be021 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/api/IPaletteProvider.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/api/IPaletteProvider.java
@@ -13,6 +13,7 @@
package org.eclipse.sirius.components.collaborative.diagrams.api;
import org.eclipse.sirius.components.collaborative.diagrams.dto.Palette;
+import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
@@ -25,5 +26,5 @@ public interface IPaletteProvider {
boolean canHandle(DiagramDescription diagramDescription);
- Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription);
+ Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription, IEditingContext editingContext);
}
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetPaletteEventHandler.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetPaletteEventHandler.java
index 50218c0c66..4c84ad2d51 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetPaletteEventHandler.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetPaletteEventHandler.java
@@ -110,7 +110,7 @@ public void handle(One payloadSink, Many changeDesc
if (optionalToolSectionsProvider.isPresent() && optionalTargetElement.isPresent() && optionalDiagramElementDescription.isPresent()) {
IPaletteProvider toolSectionsProvider = optionalToolSectionsProvider.get();
palette = toolSectionsProvider.handle(optionalTargetElement.get(), optionalDiagramElement.orElse(null), optionalDiagramElementDescription.get(),
- diagramDescription);
+ diagramDescription, editingContext);
}
}
}
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
index 2fc58732ce..e29bd7105c 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
@@ -1096,12 +1096,14 @@ export const DiagramRepresentation = ({
diagramServer.actionDispatcher.dispatch(sourceElementAction);
}
}
- const setDefaultToolEvent: SetDefaultToolEvent = {
- type: 'SET_DEFAULT_TOOL',
- defaultTool: tool,
- toolSection: toolSection,
- };
- dispatch(setDefaultToolEvent);
+ if (toolSection) {
+ const setDefaultToolEvent: SetDefaultToolEvent = {
+ type: 'SET_DEFAULT_TOOL',
+ defaultTool: tool,
+ toolSection: toolSection,
+ };
+ dispatch(setDefaultToolEvent);
+ }
};
const invokeConnectorToolFromContextualPalette = (palette: GQLPalette) => {
resetTools();
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DeleteToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DeleteToolBuilder.java
index b888159aa7..0e4419e558 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DeleteToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DeleteToolBuilder.java
@@ -51,6 +51,16 @@ public DeleteToolBuilder name(java.lang.String value) {
this.getDeleteTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public DeleteToolBuilder preconditionExpression(java.lang.String value) {
+ this.getDeleteTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DropToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DropToolBuilder.java
index 0cc1a16fcc..f692e0e3e2 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DropToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/DropToolBuilder.java
@@ -51,6 +51,16 @@ public DropToolBuilder name(java.lang.String value) {
this.getDropTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public DropToolBuilder preconditionExpression(java.lang.String value) {
+ this.getDropTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeReconnectionToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeReconnectionToolBuilder.java
index 78e9e1895b..ff21c55526 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeReconnectionToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeReconnectionToolBuilder.java
@@ -35,6 +35,16 @@ public EdgeReconnectionToolBuilder name(java.lang.String value) {
this.getEdgeReconnectionTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public EdgeReconnectionToolBuilder preconditionExpression(java.lang.String value) {
+ this.getEdgeReconnectionTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeToolBuilder.java
index 5e50927eb7..535ca528cc 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeToolBuilder.java
@@ -51,6 +51,16 @@ public EdgeToolBuilder name(java.lang.String value) {
this.getEdgeTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public EdgeToolBuilder preconditionExpression(java.lang.String value) {
+ this.getEdgeTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/LabelEditToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/LabelEditToolBuilder.java
index 9f4303e30c..56ae9d6a0a 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/LabelEditToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/LabelEditToolBuilder.java
@@ -51,6 +51,16 @@ public LabelEditToolBuilder name(java.lang.String value) {
this.getLabelEditTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public LabelEditToolBuilder preconditionExpression(java.lang.String value) {
+ this.getLabelEditTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeToolBuilder.java
index df56104b54..050c3602d1 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeToolBuilder.java
@@ -51,6 +51,16 @@ public NodeToolBuilder name(java.lang.String value) {
this.getNodeTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public NodeToolBuilder preconditionExpression(java.lang.String value) {
+ this.getNodeTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/SourceEdgeEndReconnectionToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/SourceEdgeEndReconnectionToolBuilder.java
index 21afc6d1ec..389e27c603 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/SourceEdgeEndReconnectionToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/SourceEdgeEndReconnectionToolBuilder.java
@@ -51,6 +51,16 @@ public SourceEdgeEndReconnectionToolBuilder name(java.lang.String value) {
this.getSourceEdgeEndReconnectionTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public SourceEdgeEndReconnectionToolBuilder preconditionExpression(java.lang.String value) {
+ this.getSourceEdgeEndReconnectionTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/TargetEdgeEndReconnectionToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/TargetEdgeEndReconnectionToolBuilder.java
index 726c261e15..8fbbfc3f9e 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/TargetEdgeEndReconnectionToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/TargetEdgeEndReconnectionToolBuilder.java
@@ -51,6 +51,16 @@ public TargetEdgeEndReconnectionToolBuilder name(java.lang.String value) {
this.getTargetEdgeEndReconnectionTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public TargetEdgeEndReconnectionToolBuilder preconditionExpression(java.lang.String value) {
+ this.getTargetEdgeEndReconnectionTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ToolBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ToolBuilder.java
index 92d53ce742..d4e7b3d64c 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ToolBuilder.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ToolBuilder.java
@@ -35,6 +35,16 @@ public ToolBuilder name(java.lang.String value) {
this.getTool().setName(value);
return this;
}
+ /**
+ * Setter for PreconditionExpression.
+ *
+ * @generated
+ */
+ public ToolBuilder preconditionExpression(java.lang.String value) {
+ this.getTool().setPreconditionExpression(value);
+ return this;
+ }
+
/**
* Setter for Body.
*
diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ToolItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ToolItemProvider.java
index bb011c399f..30f2ab97ac 100644
--- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ToolItemProvider.java
+++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ToolItemProvider.java
@@ -61,6 +61,7 @@ public List getPropertyDescriptors(Object object) {
super.getPropertyDescriptors(object);
this.addNamePropertyDescriptor(object);
+ this.addPreconditionExpressionPropertyDescriptor(object);
}
return this.itemPropertyDescriptors;
}
@@ -76,6 +77,18 @@ protected void addNamePropertyDescriptor(Object object) {
false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
}
+ /**
+ * This adds a property descriptor for the Precondition Expression feature.
+ *
+ * @generated
+ */
+ protected void addPreconditionExpressionPropertyDescriptor(Object object) {
+ this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(),
+ this.getString("_UI_Tool_preconditionExpression_feature"), this.getString("_UI_PropertyDescriptor_description", "_UI_Tool_preconditionExpression_feature", "_UI_Tool_type"),
+ DiagramPackage.Literals.TOOL__PRECONDITION_EXPRESSION, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
/**
* This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
* {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
@@ -140,6 +153,7 @@ public void notifyChanged(Notification notification) {
switch (notification.getFeatureID(Tool.class)) {
case DiagramPackage.TOOL__NAME:
+ case DiagramPackage.TOOL__PRECONDITION_EXPRESSION:
this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
return;
case DiagramPackage.TOOL__BODY:
diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties
index cf8c74c66b..ba351f4850 100644
--- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties
+++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties
@@ -119,6 +119,7 @@ _UI_EdgePalette_nodeTools_feature = Node Tools
_UI_EdgePalette_edgeReconnectionTools_feature = Edge Reconnection Tools
_UI_EdgePalette_toolSections_feature = Tool Sections
_UI_Tool_name_feature = Name
+_UI_Tool_preconditionExpression_feature = Precondition Expression
_UI_Tool_body_feature = Body
_UI_EdgeTool_targetElementDescriptions_feature = Target Element Descriptions
_UI_LabelEditTool_initialDirectEditLabelExpression_feature = Initial Direct Edit Label Expression
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java
index ff83847dc1..72919629ec 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java
@@ -1866,6 +1866,15 @@ public interface DiagramPackage extends EPackage {
*/
int TOOL__NAME = 0;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TOOL__PRECONDITION_EXPRESSION = 1;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -1873,7 +1882,7 @@ public interface DiagramPackage extends EPackage {
* @generated
* @ordered
*/
- int TOOL__BODY = 1;
+ int TOOL__BODY = 2;
/**
* The number of structural features of the 'Tool' class.
@@ -1881,7 +1890,7 @@ public interface DiagramPackage extends EPackage {
* @generated
* @ordered
*/
- int TOOL_FEATURE_COUNT = 2;
+ int TOOL_FEATURE_COUNT = 3;
/**
* The number of operations of the 'Tool' class.
@@ -1909,6 +1918,15 @@ public interface DiagramPackage extends EPackage {
*/
int DELETE_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int DELETE_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -1953,6 +1971,15 @@ public interface DiagramPackage extends EPackage {
*/
int DROP_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int DROP_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -1997,6 +2024,15 @@ public interface DiagramPackage extends EPackage {
*/
int EDGE_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int EDGE_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -2050,6 +2086,15 @@ public interface DiagramPackage extends EPackage {
*/
int EDGE_RECONNECTION_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int EDGE_RECONNECTION_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -2095,6 +2140,15 @@ public interface DiagramPackage extends EPackage {
*/
int LABEL_EDIT_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int LABEL_EDIT_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -2148,6 +2202,15 @@ public interface DiagramPackage extends EPackage {
*/
int NODE_TOOL__NAME = TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int NODE_TOOL__PRECONDITION_EXPRESSION = TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -2202,6 +2265,15 @@ public interface DiagramPackage extends EPackage {
*/
int SOURCE_EDGE_END_RECONNECTION_TOOL__NAME = EDGE_RECONNECTION_TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int SOURCE_EDGE_END_RECONNECTION_TOOL__PRECONDITION_EXPRESSION = EDGE_RECONNECTION_TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -2248,6 +2320,15 @@ public interface DiagramPackage extends EPackage {
*/
int TARGET_EDGE_END_RECONNECTION_TOOL__NAME = EDGE_RECONNECTION_TOOL__NAME;
+ /**
+ * The feature id for the 'Precondition Expression' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TARGET_EDGE_END_RECONNECTION_TOOL__PRECONDITION_EXPRESSION = EDGE_RECONNECTION_TOOL__PRECONDITION_EXPRESSION;
+
/**
* The feature id for the 'Body' containment reference list.
@@ -3628,6 +3709,18 @@ public interface DiagramPackage extends EPackage {
*/
EAttribute getTool_Name();
+ /**
+ * Returns the meta object for the attribute
+ * '{@link org.eclipse.sirius.components.view.diagram.Tool#getPreconditionExpression Precondition
+ * Expression}'.
+ *
+ * @return the meta object for the attribute 'Precondition Expression'.
+ * @see org.eclipse.sirius.components.view.diagram.Tool#getPreconditionExpression()
+ * @see #getTool()
+ * @generated
+ */
+ EAttribute getTool_PreconditionExpression();
+
/**
* Returns the meta object for the containment reference list
* '{@link org.eclipse.sirius.components.view.diagram.Tool#getBody Body}'.
+ *
+ * @generated
+ */
+ EAttribute TOOL__PRECONDITION_EXPRESSION = eINSTANCE.getTool_PreconditionExpression();
+
/**
* The meta object literal for the 'Body' containment reference list feature.
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/Tool.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/Tool.java
index a5cacef38e..5a0dbb0523 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/Tool.java
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/Tool.java
@@ -24,6 +24,8 @@
*
*
* - {@link org.eclipse.sirius.components.view.diagram.Tool#getName Name}
+ * - {@link org.eclipse.sirius.components.view.diagram.Tool#getPreconditionExpression Precondition
+ * Expression}
* - {@link org.eclipse.sirius.components.view.diagram.Tool#getBody Body}
*
*
@@ -55,6 +57,29 @@ public interface Tool extends EObject {
*/
void setName(String value);
+ /**
+ * Returns the value of the 'Precondition Expression' attribute.
+ *
+ * @return the value of the 'Precondition Expression' attribute.
+ * @see #setPreconditionExpression(String)
+ * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getTool_PreconditionExpression()
+ * @model dataType="org.eclipse.sirius.components.view.InterpretedExpression"
+ * @generated
+ */
+ String getPreconditionExpression();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.sirius.components.view.diagram.Tool#getPreconditionExpression
+ * Precondition Expression}' attribute.
+ *
+ * @param value
+ * the new value of the 'Precondition Expression' attribute.
+ * @see #getPreconditionExpression()
+ * @generated
+ */
+ void setPreconditionExpression(String value);
+
/**
* Returns the value of the 'Body' containment reference list. The list contents are of type
* {@link org.eclipse.sirius.components.view.Operation}.
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java
index 130a2af9fa..c550101983 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java
@@ -1242,6 +1242,16 @@ public EAttribute getTool_Name() {
return (EAttribute) this.toolEClass.getEStructuralFeatures().get(0);
}
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTool_PreconditionExpression() {
+ return (EAttribute) this.toolEClass.getEStructuralFeatures().get(1);
+ }
+
/**
*
*
@@ -1249,7 +1259,7 @@ public EAttribute getTool_Name() {
*/
@Override
public EReference getTool_Body() {
- return (EReference) this.toolEClass.getEStructuralFeatures().get(1);
+ return (EReference) this.toolEClass.getEStructuralFeatures().get(2);
}
/**
@@ -1743,6 +1753,7 @@ public void createPackageContents() {
this.toolEClass = this.createEClass(TOOL);
this.createEAttribute(this.toolEClass, TOOL__NAME);
+ this.createEAttribute(this.toolEClass, TOOL__PRECONDITION_EXPRESSION);
this.createEReference(this.toolEClass, TOOL__BODY);
this.deleteToolEClass = this.createEClass(DELETE_TOOL);
@@ -2027,6 +2038,8 @@ public void initializePackageContents() {
this.initEClass(this.toolEClass, Tool.class, "Tool", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
this.initEAttribute(this.getTool_Name(), theViewPackage.getIdentifier(), "name", "Tool", 1, 1, Tool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
!IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getTool_PreconditionExpression(), theViewPackage.getInterpretedExpression(), "preconditionExpression", null, 0, 1, Tool.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
this.initEReference(this.getTool_Body(), theViewPackage.getOperation(), null, "body", null, 0, -1, Tool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ToolImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ToolImpl.java
index b01cef3397..08273ddc31 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ToolImpl.java
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ToolImpl.java
@@ -34,6 +34,8 @@
*
*
* - {@link org.eclipse.sirius.components.view.diagram.impl.ToolImpl#getName Name}
+ * - {@link org.eclipse.sirius.components.view.diagram.impl.ToolImpl#getPreconditionExpression Precondition
+ * Expression}
* - {@link org.eclipse.sirius.components.view.diagram.impl.ToolImpl#getBody Body}
*
*
@@ -60,6 +62,26 @@ public abstract class ToolImpl extends MinimalEObjectImpl.Container implements T
*/
protected String name = NAME_EDEFAULT;
+ /**
+ * The default value of the '{@link #getPreconditionExpression() Precondition Expression}' attribute.
+ *
+ * @see #getPreconditionExpression()
+ * @generated
+ * @ordered
+ */
+ protected static final String PRECONDITION_EXPRESSION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getPreconditionExpression() Precondition Expression}' attribute.
+ *
+ * @see #getPreconditionExpression()
+ * @generated
+ * @ordered
+ */
+ protected String preconditionExpression = PRECONDITION_EXPRESSION_EDEFAULT;
+
/**
* The cached value of the '{@link #getBody() Body}' containment reference list.
*
@@ -112,6 +134,29 @@ public void setName(String newName) {
this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.TOOL__NAME, oldName, this.name));
}
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getPreconditionExpression() {
+ return this.preconditionExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setPreconditionExpression(String newPreconditionExpression) {
+ String oldPreconditionExpression = this.preconditionExpression;
+ this.preconditionExpression = newPreconditionExpression;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.TOOL__PRECONDITION_EXPRESSION, oldPreconditionExpression, this.preconditionExpression));
+ }
+
/**
*
*
@@ -149,6 +194,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case DiagramPackage.TOOL__NAME:
return this.getName();
+ case DiagramPackage.TOOL__PRECONDITION_EXPRESSION:
+ return this.getPreconditionExpression();
case DiagramPackage.TOOL__BODY:
return this.getBody();
}
@@ -167,6 +214,9 @@ public void eSet(int featureID, Object newValue) {
case DiagramPackage.TOOL__NAME:
this.setName((String) newValue);
return;
+ case DiagramPackage.TOOL__PRECONDITION_EXPRESSION:
+ this.setPreconditionExpression((String) newValue);
+ return;
case DiagramPackage.TOOL__BODY:
this.getBody().clear();
this.getBody().addAll((Collection extends Operation>) newValue);
@@ -186,6 +236,9 @@ public void eUnset(int featureID) {
case DiagramPackage.TOOL__NAME:
this.setName(NAME_EDEFAULT);
return;
+ case DiagramPackage.TOOL__PRECONDITION_EXPRESSION:
+ this.setPreconditionExpression(PRECONDITION_EXPRESSION_EDEFAULT);
+ return;
case DiagramPackage.TOOL__BODY:
this.getBody().clear();
return;
@@ -203,6 +256,8 @@ public boolean eIsSet(int featureID) {
switch (featureID) {
case DiagramPackage.TOOL__NAME:
return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name);
+ case DiagramPackage.TOOL__PRECONDITION_EXPRESSION:
+ return PRECONDITION_EXPRESSION_EDEFAULT == null ? this.preconditionExpression != null : !PRECONDITION_EXPRESSION_EDEFAULT.equals(this.preconditionExpression);
case DiagramPackage.TOOL__BODY:
return this.body != null && !this.body.isEmpty();
}
@@ -222,6 +277,8 @@ public String toString() {
StringBuilder result = new StringBuilder(super.toString());
result.append(" (name: ");
result.append(this.name);
+ result.append(", preconditionExpression: ");
+ result.append(this.preconditionExpression);
result.append(')');
return result.toString();
}
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore
index 84f72ce4b4..8d5235f508 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore
@@ -196,6 +196,8 @@
+
diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel
index 166d9d1b55..572ac29f0f 100644
--- a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel
+++ b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel
@@ -146,6 +146,7 @@
+
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewReconnectionToolsExecutorParameters.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewPaletteToolsConfiguration.java
similarity index 85%
rename from packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewReconnectionToolsExecutorParameters.java
rename to packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewPaletteToolsConfiguration.java
index 6246d08242..eb17a09986 100644
--- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewReconnectionToolsExecutorParameters.java
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/configuration/ViewPaletteToolsConfiguration.java
@@ -18,15 +18,15 @@
import org.eclipse.sirius.components.core.api.IURLParser;
import org.eclipse.sirius.components.view.emf.IViewRepresentationDescriptionPredicate;
import org.eclipse.sirius.components.view.emf.IViewRepresentationDescriptionSearchService;
-import org.springframework.stereotype.Service;
+import org.springframework.context.annotation.Configuration;
/**
* Bundles the common dependencies that view tool services need into a single object for convenience.
*
* @author frouene
*/
-@Service
-public class ViewReconnectionToolsExecutorParameters {
+@Configuration
+public class ViewPaletteToolsConfiguration {
private final IURLParser urlParser;
@@ -36,7 +36,7 @@ public class ViewReconnectionToolsExecutorParameters {
private final IObjectService objectService;
- public ViewReconnectionToolsExecutorParameters(IURLParser urlParser, IViewRepresentationDescriptionPredicate viewRepresentationDescriptionPredicate, IViewRepresentationDescriptionSearchService viewRepresentationDescriptionSearchService, IObjectService objectService) {
+ public ViewPaletteToolsConfiguration(IURLParser urlParser, IViewRepresentationDescriptionPredicate viewRepresentationDescriptionPredicate, IViewRepresentationDescriptionSearchService viewRepresentationDescriptionSearchService, IObjectService objectService) {
this.urlParser = Objects.requireNonNull(urlParser);
this.viewRepresentationDescriptionPredicate = Objects.requireNonNull(viewRepresentationDescriptionPredicate);
this.viewRepresentationDescriptionSearchService = Objects.requireNonNull(viewRepresentationDescriptionSearchService);
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java
index 5082a83b69..80ff85da0b 100644
--- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java
@@ -20,6 +20,7 @@
import java.util.function.Function;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.sirius.components.collaborative.diagrams.api.DiagramImageConstants;
import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramDescriptionService;
@@ -30,6 +31,7 @@
import org.eclipse.sirius.components.collaborative.diagrams.dto.SingleClickOnTwoDiagramElementsCandidate;
import org.eclipse.sirius.components.collaborative.diagrams.dto.SingleClickOnTwoDiagramElementsTool;
import org.eclipse.sirius.components.collaborative.diagrams.dto.ToolSection;
+import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.core.api.IObjectService;
import org.eclipse.sirius.components.core.api.IURLParser;
import org.eclipse.sirius.components.diagrams.Diagram;
@@ -41,13 +43,27 @@
import org.eclipse.sirius.components.diagrams.description.IDiagramElementDescription;
import org.eclipse.sirius.components.diagrams.description.NodeDescription;
import org.eclipse.sirius.components.diagrams.description.SynchronizationPolicy;
+import org.eclipse.sirius.components.emf.services.EditingContext;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.interpreter.Result;
+import org.eclipse.sirius.components.interpreter.Status;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.view.View;
import org.eclipse.sirius.components.view.diagram.DiagramToolSection;
import org.eclipse.sirius.components.view.diagram.EdgeTool;
import org.eclipse.sirius.components.view.diagram.EdgeToolSection;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.NodeToolSection;
+import org.eclipse.sirius.components.view.diagram.Tool;
+import org.eclipse.sirius.components.view.emf.IJavaServiceProvider;
import org.eclipse.sirius.components.view.emf.IViewRepresentationDescriptionPredicate;
import org.eclipse.sirius.components.view.emf.IViewRepresentationDescriptionSearchService;
+import org.eclipse.sirius.components.view.emf.configuration.ViewPaletteToolsConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
/**
@@ -69,6 +85,8 @@
@Service
public class ViewPaletteProvider implements IPaletteProvider {
+ private final Logger logger = LoggerFactory.getLogger(ViewPaletteProvider.class);
+
private final IURLParser urlParser;
private final IViewRepresentationDescriptionPredicate viewRepresentationDescriptionPredicate;
@@ -81,15 +99,21 @@ public class ViewPaletteProvider implements IPaletteProvider {
private final IObjectService objectService;
+ private final List javaServiceProviders;
+
+ private final ApplicationContext applicationContext;
+
private final Function idProvider = (eObject) -> UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes());
- public ViewPaletteProvider(IURLParser urlParser, IViewRepresentationDescriptionPredicate viewRepresentationDescriptionPredicate, IViewRepresentationDescriptionSearchService viewRepresentationDescriptionSearchService, IDiagramDescriptionService diagramDescriptionService, IDiagramIdProvider diagramIdProvider, IObjectService objectService) {
- this.urlParser = Objects.requireNonNull(urlParser);
- this.viewRepresentationDescriptionPredicate = Objects.requireNonNull(viewRepresentationDescriptionPredicate);
- this.viewRepresentationDescriptionSearchService = Objects.requireNonNull(viewRepresentationDescriptionSearchService);
+ public ViewPaletteProvider(ViewPaletteToolsConfiguration parameters, IDiagramDescriptionService diagramDescriptionService, IDiagramIdProvider diagramIdProvider, List javaServiceProviders, ApplicationContext applicationContext) {
+ this.urlParser = Objects.requireNonNull(parameters.getUrlParser());
+ this.viewRepresentationDescriptionPredicate = Objects.requireNonNull(parameters.getViewRepresentationDescriptionPredicate());
+ this.viewRepresentationDescriptionSearchService = Objects.requireNonNull(parameters.getViewRepresentationDescriptionSearchService());
this.diagramDescriptionService = Objects.requireNonNull(diagramDescriptionService);
this.diagramIdProvider = Objects.requireNonNull(diagramIdProvider);
- this.objectService = Objects.requireNonNull(objectService);
+ this.objectService = Objects.requireNonNull(parameters.getObjectService());
+ this.javaServiceProviders = Objects.requireNonNull(javaServiceProviders);
+ this.applicationContext = Objects.requireNonNull(applicationContext);
}
@Override
@@ -98,43 +122,50 @@ public boolean canHandle(DiagramDescription diagramDescription) {
}
@Override
- public Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription) {
+ public Palette handle(Object targetElement, Object diagramElement, Object diagramElementDescription, DiagramDescription diagramDescription, IEditingContext editingContext) {
Palette palette = null;
-
- if (diagramElement instanceof Diagram) {
- palette = this.getDiagramPalette(diagramDescription);
- } else if (diagramElement instanceof Node && diagramElementDescription instanceof NodeDescription nodeDescription) {
- palette = this.getNodePalette(diagramDescription, nodeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement));
- } else if (diagramElement instanceof Edge && diagramElementDescription instanceof EdgeDescription edgeDescription) {
- palette = this.getEdgePalette(edgeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement));
+ VariableManager variableManager = new VariableManager();
+ variableManager.put(VariableManager.SELF, targetElement);
+ var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagramDescription.getId())
+ .filter(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::isInstance)
+ .map(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::cast);
+ if (optionalDiagramDescription.isPresent()) {
+ org.eclipse.sirius.components.view.diagram.DiagramDescription viewDiagramDescription = optionalDiagramDescription.get();
+ var interpreter = this.createInterpreter((View) viewDiagramDescription.eContainer(), editingContext);
+ if (diagramElement instanceof Diagram) {
+ palette = this.getDiagramPalette(diagramDescription, viewDiagramDescription, variableManager, interpreter);
+ } else if (diagramElement instanceof Node && diagramElementDescription instanceof NodeDescription nodeDescription) {
+ variableManager.put(Node.SELECTED_NODE, diagramElement);
+ palette = this.getNodePalette(diagramDescription, nodeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter);
+ } else if (diagramElement instanceof Edge && diagramElementDescription instanceof EdgeDescription edgeDescription) {
+ variableManager.put(Edge.SELECTED_EDGE, diagramElement);
+ palette = this.getEdgePalette(edgeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter);
+ }
}
-
return palette;
}
- protected Palette getDiagramPalette(DiagramDescription diagramDescription) {
+ protected Palette getDiagramPalette(DiagramDescription diagramDescription, org.eclipse.sirius.components.view.diagram.DiagramDescription viewDiagramDescription, VariableManager variableManager, AQLInterpreter interpreter) {
Palette diagramPalette = null;
var toolFinder = new ToolFinder();
Optional sourceElementId = this.getSourceElementId(diagramDescription.getId());
if (sourceElementId.isPresent()) {
String diagramPaletteId = "siriusComponents://diagramPalette?diagramId=" + sourceElementId.get();
- var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagramDescription.getId())
- .filter(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::isInstance)
- .map(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::cast);
-
- if (optionalDiagramDescription.isPresent()) {
- org.eclipse.sirius.components.view.diagram.DiagramDescription viewDiagramDescription = optionalDiagramDescription.get();
- diagramPalette = Palette.newPalette(diagramPaletteId)
- .tools(toolFinder.findNodeTools(viewDiagramDescription).stream().map(this::createDiagramRootNodeTool).toList())
- .toolSections(toolFinder.findToolSections(viewDiagramDescription).stream().map(this::createToolSection).toList())
- .build();
- }
+ diagramPalette = Palette.newPalette(diagramPaletteId)
+ .tools(toolFinder.findNodeTools(viewDiagramDescription).stream()
+ .filter(tool -> this.checkPrecondition(tool, variableManager, interpreter))
+ .map(this::createDiagramRootNodeTool)
+ .toList())
+ .toolSections(toolFinder.findToolSections(viewDiagramDescription).stream()
+ .map(toolSection -> this.createToolSection(toolSection, variableManager, interpreter))
+ .toList())
+ .build();
}
return diagramPalette;
}
- private ToolSection createToolSection(DiagramToolSection toolSection) {
+ private ToolSection createToolSection(DiagramToolSection toolSection, VariableManager variableManager, AQLInterpreter interpreter) {
String toolSelectionId = this.idProvider.apply(toolSection).toString();
return ToolSection.newToolSection(toolSelectionId)
@@ -167,7 +198,7 @@ private ITool createNodeTool(NodeTool viewNodeTool, boolean appliesToDiagramRoot
.build();
}
- protected Palette getNodePalette(DiagramDescription diagramDescription, NodeDescription nodeDescription, List extraToolSections) {
+ protected Palette getNodePalette(DiagramDescription diagramDescription, NodeDescription nodeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) {
Optional sourceElementId = this.getSourceElementId(nodeDescription.getId());
Palette nodePalette = null;
var toolFinder = new ToolFinder();
@@ -178,14 +209,16 @@ protected Palette getNodePalette(DiagramDescription diagramDescription, NodeDesc
org.eclipse.sirius.components.view.diagram.NodeDescription viewNodeDescription = optionalNodeDescription.get();
var tools = new ArrayList();
tools.addAll(toolFinder.findNodeTools(viewNodeDescription).stream()
+ .filter(tool -> this.checkPrecondition(tool, variableManager, interpreter))
.map(this::createNodeTool)
.toList());
tools.addAll(toolFinder.findEdgeTools(viewNodeDescription).stream()
+ .filter(tool -> this.checkPrecondition(tool, variableManager, interpreter))
.map(viewEdgeTools -> this.createEdgeTool(viewEdgeTools, diagramDescription, nodeDescription))
.toList());
var toolSections = new ArrayList();
toolSections.addAll(toolFinder.findToolSections(viewNodeDescription).stream()
- .map(nodeToolSection -> this.createToolSection(nodeToolSection, diagramDescription, nodeDescription))
+ .map(nodeToolSection -> this.createToolSection(nodeToolSection, diagramDescription, nodeDescription, variableManager, interpreter))
.toList());
toolSections.addAll(extraToolSections);
nodePalette = Palette.newPalette(nodePaletteId)
@@ -197,12 +230,18 @@ protected Palette getNodePalette(DiagramDescription diagramDescription, NodeDesc
return nodePalette;
}
- private ToolSection createToolSection(NodeToolSection toolSection, DiagramDescription diagramDescription, NodeDescription nodeDescription) {
+ private ToolSection createToolSection(NodeToolSection toolSection, DiagramDescription diagramDescription, NodeDescription nodeDescription, VariableManager variableManager, AQLInterpreter interpreter) {
String toolSelectionId = this.idProvider.apply(toolSection).toString();
var tools = new ArrayList();
- tools.addAll(toolSection.getNodeTools().stream().map(this::createNodeTool).toList());
- tools.addAll(toolSection.getEdgeTools().stream().map(viewEdgeTools -> this.createEdgeTool(viewEdgeTools, diagramDescription, nodeDescription)).toList());
+ tools.addAll(toolSection.getNodeTools().stream()
+ .filter(tool -> this.checkPrecondition(tool, variableManager, interpreter))
+ .map(this::createNodeTool)
+ .toList());
+ tools.addAll(toolSection.getEdgeTools().stream()
+ .filter(tool -> this.checkPrecondition(tool, variableManager, interpreter))
+ .map(viewEdgeTools -> this.createEdgeTool(viewEdgeTools, diagramDescription, nodeDescription))
+ .toList());
return ToolSection.newToolSection(toolSelectionId)
.label(toolSection.getName())
@@ -227,7 +266,7 @@ private ITool createEdgeTool(EdgeTool viewEdgeTool, DiagramDescription diagramDe
.build();
}
- protected Palette getEdgePalette(EdgeDescription edgeDescription, List extraToolSections) {
+ protected Palette getEdgePalette(EdgeDescription edgeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) {
Palette edgePalette = null;
var toolFinder = new ToolFinder();
Optional optionalSourceElementId = this.getSourceElementId(edgeDescription.getId());
@@ -239,7 +278,9 @@ protected Palette getEdgePalette(EdgeDescription edgeDescription, List();
- toolSections.addAll(toolFinder.findToolSections(viewEdgeDescription).stream().map(this::createToolSection).toList());
+ toolSections.addAll(toolFinder.findToolSections(viewEdgeDescription).stream()
+ .map(edgeToolSection -> this.createToolSection(edgeToolSection, variableManager, interpreter))
+ .toList());
toolSections.addAll(extraToolSections);
edgePalette = Palette.newPalette(edgePaletteId)
.tools(toolFinder.findNodeTools(viewEdgeDescription).stream().map(this::createNodeTool).toList())
@@ -251,13 +292,16 @@ protected Palette getEdgePalette(EdgeDescription edgeDescription, List this.checkPrecondition(tool, variableManager, interpreter))
+ .map(this::createNodeTool)
+ .toList())
.build();
}
@@ -418,4 +462,44 @@ private boolean hasDeleteTool(Object diagramElementDescription) {
}
return result;
}
+
+ private AQLInterpreter createInterpreter(View view, IEditingContext editingContext) {
+ List visibleEPackages = this.getAccessibleEPackages(editingContext);
+ AutowireCapableBeanFactory beanFactory = this.applicationContext.getAutowireCapableBeanFactory();
+ List