diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index f0359d8db..d3c19dadd 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -10,6 +10,11 @@
- [services] As part of the migration to the new diagram service architecture, the methods that were exposed by `ViewToolService` (which has been deleted) are now split between `org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService` for mutation services, `org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService` for diagram query and tool precondition services, and `org.eclipse.syson.tree.services.aql.TreeQueryAQLService` for selection dialog tree query services.
- [services] As part of the migration to the new diagram service architecture, the methods that were exposed by `ViewEdgeService` (which has been deleted) are now split between `org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService` for edge reconnection mutation services, `org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService` for diagram graphical query services, and `org.eclipse.syson.model.services.aql.ModelQueryAQLService` for model and metamodel query services.
+- [services] As part of the migration to the new diagram service architecture, `ViewCreateService` has been deleted.
+Its former AQL entry points are now split between `org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService` for diagram and tool mutations, `org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService` for diagram creation preconditions, tool preconditions, and inherited-members queries, and `org.eclipse.syson.model.services.aql.ModelMutationAQLService` for metamodel initialization.
+- [services] `ShowDiagramsInheritedMembersService` has moved from `syson-diagram-common-view` to `syson-diagram-services`.
+Downstream code should now depend on the diagram services module for that bean.
+- [services] `InheritedCompartmentItemFilterSwitch` has moved from `syson-diagram-common-view` to `syson-diagram-services` as part of the inherited-compartment query migration.
=== Dependency update
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationElementService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationElementService.java
index 80d67d1b8..053e7446a 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationElementService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationElementService.java
@@ -22,9 +22,11 @@
import java.util.stream.Collectors;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext;
import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramDescriptionService;
import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramQueryService;
+import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService;
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
import org.eclipse.sirius.components.core.api.IIdentityService;
@@ -72,8 +74,8 @@
import org.eclipse.syson.sysml.Succession;
import org.eclipse.syson.sysml.SuccessionAsUsage;
import org.eclipse.syson.sysml.SysmlFactory;
-import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.TransitionUsage;
+import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.Usage;
import org.eclipse.syson.sysml.UseCaseUsage;
import org.eclipse.syson.sysml.ViewUsage;
@@ -81,6 +83,7 @@
import org.eclipse.syson.sysml.metamodel.services.ElementInitializerSwitch;
import org.eclipse.syson.sysml.metamodel.services.MetamodelMutationElementService;
import org.eclipse.syson.sysml.metamodel.services.MetamodelQueryElementService;
+import org.eclipse.syson.util.NodeFinder;
import org.springframework.stereotype.Service;
/**
@@ -713,6 +716,106 @@ public SatisfyRequirementUsage reconnectSatisfyRequirementTarget(SatisfyRequirem
return sru;
}
+ /**
+ * Create a new IncludeUseCaseUsage.
+ *
+ * @param source
+ * the source usage
+ * @param target
+ * the target usage
+ * @return a new {@link IncludeUseCaseUsage}
+ */
+ public IncludeUseCaseUsage createIncludeUseCaseUsage(UseCaseUsage source, UseCaseUsage target) {
+ var ownerMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ source.getOwnedRelationship().add(ownerMembership);
+
+ IncludeUseCaseUsage includeUsage = SysmlFactory.eINSTANCE.createIncludeUseCaseUsage();
+ ownerMembership.getOwnedRelatedElement().add(includeUsage);
+
+ ReferenceSubsetting refSub = SysmlFactory.eINSTANCE.createReferenceSubsetting();
+ includeUsage.getOwnedRelationship().add(refSub);
+ refSub.setReferencedFeature(target);
+ return includeUsage;
+ }
+
+ /**
+ * Create a new allocate edge between the given source and target.
+ *
+ * @param source
+ * the source element
+ * @param target
+ * the target element
+ * @param sourceNode
+ * the source graphical node
+ * @param editingContext
+ * the current editing context
+ * @param diagramService
+ * the current diagram service
+ * @return the given source element
+ */
+ public Element createAllocateEdge(Element source, Element target, Node sourceNode, IEditingContext editingContext, IDiagramService diagramService) {
+ var owner = source.getOwner();
+ var ownerMembership = SysmlFactory.eINSTANCE.createOwningMembership();
+ owner.getOwnedRelationship().add(ownerMembership);
+ var allocation = SysmlFactory.eINSTANCE.createAllocationUsage();
+ ownerMembership.getOwnedRelatedElement().add(allocation);
+ this.addEndToAllocateEdge(allocation, source);
+ this.addEndToAllocateEdge(allocation, target);
+ return source;
+ }
+
+ /**
+ * Create a new succession edge between the given source and target.
+ *
+ * @param successionSource
+ * the source end
+ * @param successionTarget
+ * the target end
+ * @param sourceNode
+ * the source graphical node
+ * @param targetNode
+ * the target graphical node
+ * @param editingContext
+ * the current editing context
+ * @param diagramService
+ * the current diagram service
+ * @return the given source element
+ */
+ public Element createSuccessionEdge(Element successionSource, Element successionTarget, Node sourceNode, Node targetNode, IEditingContext editingContext, IDiagramService diagramService) {
+ if (!this.isInSameGraphicalContainer(sourceNode, targetNode, diagramService)) {
+ this.feedbackMessageService.addFeedbackMessage(new Message("Can't create cross container SuccessionAsUsage", MessageLevel.WARNING));
+ return successionSource;
+ }
+ EObject successionOwner = this.getSourceOwner(sourceNode, editingContext, diagramService);
+ return this.createSuccessionEdge(successionSource, successionTarget, successionOwner);
+ }
+
+ /**
+ * Create a new transition usage between the given source and target.
+ *
+ * @param sourceUsage
+ * the source feature
+ * @param targetUsage
+ * the target feature
+ * @param source
+ * the source graphical node
+ * @param target
+ * the target graphical node
+ * @param diagramService
+ * the current diagram service
+ * @param editingContext
+ * the current editing context
+ * @return the given source feature
+ */
+ public Feature createTransitionUsage(Feature sourceUsage, Feature targetUsage, Node source, Node target, IDiagramService diagramService, IEditingContext editingContext) {
+ if (!this.isInSameGraphicalContainer(source, target, diagramService)) {
+ this.feedbackMessageService.addFeedbackMessage(new Message("Can't create cross container TransitionUsage", MessageLevel.WARNING));
+ return sourceUsage;
+ }
+ EObject transitionOwner = this.getSourceOwner(source, editingContext, diagramService);
+ return this.createTransitionUsage(sourceUsage, targetUsage, transitionOwner);
+ }
+
/**
* Reconnects the source of an allocate edge.
*
@@ -735,6 +838,18 @@ public Element reconnectSourceAllocateEdge(AllocationUsage allocationUsage, Elem
return allocationUsage;
}
+ private void addEndToAllocateEdge(AllocationUsage edge, Element end) {
+ if (end instanceof Usage usage) {
+ var featureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
+ edge.getOwnedRelationship().add(featureMembership);
+ var feature = SysmlFactory.eINSTANCE.createFeature();
+ featureMembership.getOwnedRelatedElement().add(feature);
+ var reference = SysmlFactory.eINSTANCE.createReferenceSubsetting();
+ feature.getOwnedRelationship().add(reference);
+ reference.setReferencedFeature(usage);
+ }
+ }
+
/**
* Reconnects the target of an allocate edge.
*
@@ -795,6 +910,21 @@ public Element reconnectTargetSuccessionEdge(SuccessionAsUsage succession, Eleme
return succession;
}
+ private Element createSuccessionEdge(Element successionSource, Element successionTarget, EObject successionOwner) {
+ if (successionOwner instanceof Element ownerElement) {
+ var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMembership);
+ var succession = SysmlFactory.eINSTANCE.createSuccessionAsUsage();
+ featureMembership.getOwnedRelatedElement().add(succession);
+ this.metamodelMutationElementService.initialize(succession);
+ var sourceEnd = this.createEndFeatureMembershipFor(successionSource);
+ var targetEnd = this.createEndFeatureMembershipFor(successionTarget);
+ succession.getOwnedRelationship().add(sourceEnd);
+ succession.getOwnedRelationship().add(targetEnd);
+ }
+ return successionSource;
+ }
+
/**
* Reconnects the source of a transition edge.
*
@@ -829,6 +959,32 @@ public TransitionUsage reconnectSourceTransitionEdge(TransitionUsage transition,
return transition;
}
+ private Feature createTransitionUsage(Feature sourceUsage, Feature targetUsage, EObject transitionOwner) {
+ if (transitionOwner instanceof Element ownerElement) {
+ TransitionUsage newTransitionUsage = SysmlFactory.eINSTANCE.createTransitionUsage();
+ var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ featureMembership.getOwnedRelatedElement().add(newTransitionUsage);
+ ownerElement.getOwnedRelationship().add(featureMembership);
+
+ var sourceMembership = SysmlFactory.eINSTANCE.createMembership();
+ newTransitionUsage.getOwnedRelationship().add(sourceMembership);
+ sourceMembership.setMemberElement(sourceUsage);
+
+ Succession succession = SysmlFactory.eINSTANCE.createSuccession();
+ this.metamodelMutationElementService.initialize(succession);
+ var successionFeatureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ successionFeatureMembership.getOwnedRelatedElement().add(succession);
+ newTransitionUsage.getOwnedRelationship().add(successionFeatureMembership);
+
+ succession.getOwnedRelationship().add(this.createConnectorEndFeatureMembership(sourceUsage));
+ succession.getOwnedRelationship().add(this.createConnectorEndFeatureMembership(targetUsage));
+ this.metamodelMutationElementService.initialize(newTransitionUsage);
+ } else {
+ this.feedbackMessageService.addFeedbackMessage(new Message("Unable to find a suitable semantic owner for the new transition", MessageLevel.WARNING));
+ }
+ return sourceUsage;
+ }
+
/**
* Reconnects the target of a transition edge.
*
@@ -892,6 +1048,64 @@ public IncludeUseCaseUsage reconnectTargetIncludeUseCaseUsage(IncludeUseCaseUsag
return includeUseCaseUsage;
}
+ private EndFeatureMembership createEndFeatureMembershipFor(Element sourceOrTarget) {
+ var endFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
+ var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ referenceUsage.setIsEnd(true);
+ var referenceSubSetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
+ if (sourceOrTarget instanceof Membership membership) {
+ if (membership.getMemberElement() instanceof ActionUsage actionUsage) {
+ referenceSubSetting.setReferencedFeature(actionUsage);
+ }
+ } else if (sourceOrTarget instanceof ActionUsage actionUsage) {
+ referenceSubSetting.setReferencedFeature(actionUsage);
+ }
+ referenceUsage.getOwnedRelationship().add(referenceSubSetting);
+ endFeatureMembership.getOwnedRelatedElement().add(referenceUsage);
+ return endFeatureMembership;
+ }
+
+ private EndFeatureMembership createConnectorEndFeatureMembership(Feature feature) {
+ var successionSourceEndFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
+ var successionSourceEndFeatureFeature = SysmlFactory.eINSTANCE.createFeature();
+ successionSourceEndFeatureMembership.getOwnedRelatedElement().add(successionSourceEndFeatureFeature);
+
+ var successionSourceRefSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
+ successionSourceRefSubsetting.setReferencedFeature(feature);
+ successionSourceEndFeatureFeature.getOwnedRelationship().add(successionSourceRefSubsetting);
+ return successionSourceEndFeatureMembership;
+ }
+
+ private Element getSourceOwner(Node sourceNode, IEditingContext editingContext, IDiagramService diagramService) {
+ Diagram diagram = diagramService.getDiagramContext().diagram();
+ var parentNode = new NodeFinder(diagram).getParent(sourceNode);
+ if (parentNode instanceof Node node) {
+ return this.objectSearchService.getObject(editingContext, node.getTargetObjectId())
+ .filter(Element.class::isInstance)
+ .map(Element.class::cast)
+ .orElse(null);
+ }
+ return this.objectSearchService.getObject(editingContext, diagram.getTargetObjectId())
+ .filter(Element.class::isInstance)
+ .map(Element.class::cast)
+ .map(this::resolveSemanticOwnerForBackgroundNodeInDiagramContext)
+ .orElse(null);
+ }
+
+ private Element resolveSemanticOwnerForBackgroundNodeInDiagramContext(Element diagramTarget) {
+ if (diagramTarget instanceof ViewUsage viewUsage && viewUsage.getOwner() != null) {
+ return viewUsage.getOwner();
+ }
+ return diagramTarget;
+ }
+
+ private boolean isInSameGraphicalContainer(Node sourceNode, Node targetNode, IDiagramService diagramService) {
+ Diagram diagram = diagramService.getDiagramContext().diagram();
+ var sourceParentNode = new NodeFinder(diagram).getParent(sourceNode);
+ var targetParentNode = new NodeFinder(diagram).getParent(targetNode);
+ return Objects.equals(sourceParentNode, targetParentNode);
+ }
+
/**
* Creates a {@link BindingConnectorAsUsage}.
*
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationToolService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationToolService.java
index a66fa28da..50da322c7 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationToolService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramMutationToolService.java
@@ -17,7 +17,10 @@
import java.util.List;
import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
import org.eclipse.sirius.components.core.api.ILabelService;
import org.eclipse.sirius.components.core.api.labels.StyledString;
@@ -27,24 +30,50 @@
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.services.api.ISysMLMoveElementService;
import org.eclipse.syson.services.api.MoveStatus;
+import org.eclipse.syson.sysml.AcceptActionUsage;
+import org.eclipse.syson.sysml.ActionDefinition;
+import org.eclipse.syson.sysml.ActionUsage;
import org.eclipse.syson.sysml.ActorMembership;
import org.eclipse.syson.sysml.CaseDefinition;
import org.eclipse.syson.sysml.CaseUsage;
import org.eclipse.syson.sysml.Comment;
+import org.eclipse.syson.sysml.ConnectionDefinition;
+import org.eclipse.syson.sysml.Definition;
import org.eclipse.syson.sysml.Documentation;
import org.eclipse.syson.sysml.Element;
+import org.eclipse.syson.sysml.Feature;
+import org.eclipse.syson.sysml.FeatureDirectionKind;
import org.eclipse.syson.sysml.FeatureMembership;
+import org.eclipse.syson.sysml.InterfaceDefinition;
+import org.eclipse.syson.sysml.ItemDefinition;
+import org.eclipse.syson.sysml.ItemUsage;
+import org.eclipse.syson.sysml.Membership;
+import org.eclipse.syson.sysml.Namespace;
import org.eclipse.syson.sysml.ObjectiveMembership;
import org.eclipse.syson.sysml.OwningMembership;
import org.eclipse.syson.sysml.Package;
+import org.eclipse.syson.sysml.ParameterMembership;
+import org.eclipse.syson.sysml.PartDefinition;
+import org.eclipse.syson.sysml.PartUsage;
+import org.eclipse.syson.sysml.PerformActionUsage;
+import org.eclipse.syson.sysml.ReferenceUsage;
+import org.eclipse.syson.sysml.RequirementConstraintKind;
+import org.eclipse.syson.sysml.RequirementConstraintMembership;
import org.eclipse.syson.sysml.RequirementDefinition;
import org.eclipse.syson.sysml.RequirementUsage;
import org.eclipse.syson.sysml.StakeholderMembership;
+import org.eclipse.syson.sysml.StateDefinition;
+import org.eclipse.syson.sysml.StateSubactionKind;
+import org.eclipse.syson.sysml.StateSubactionMembership;
+import org.eclipse.syson.sysml.StateUsage;
import org.eclipse.syson.sysml.SubjectMembership;
import org.eclipse.syson.sysml.SysmlFactory;
+import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.Usage;
import org.eclipse.syson.sysml.UseCaseDefinition;
import org.eclipse.syson.sysml.UseCaseUsage;
+import org.eclipse.syson.sysml.metamodel.services.MetamodelMutationElementService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -67,6 +96,8 @@ public class DiagramMutationToolService {
private final UtilService utilService;
+ private final MetamodelMutationElementService metamodelMutationElementService;
+
private final Logger logger = LoggerFactory.getLogger(DiagramMutationToolService.class);
/**
@@ -85,6 +116,7 @@ public DiagramMutationToolService(IFeedbackMessageService feedbackMessageService
this.labelService = Objects.requireNonNull(labelService);
this.deleteService = new DeleteService();
this.utilService = new UtilService();
+ this.metamodelMutationElementService = new MetamodelMutationElementService();
}
/**
@@ -156,7 +188,6 @@ public Element reconnectSourceNestedActorEdge(Element self, Element newSource, E
if (otherEnd.getOwningMembership() instanceof ActorMembership actorMembership) {
newSource.getOwnedRelationship().add(actorMembership);
} else {
- // This is an error, an Actor should always be contained in an ActorMembership.
String errorMessage = "Cannot reconnect the Actor, it is not owned by an " + ActorMembership.class.getSimpleName();
this.logger.error(errorMessage);
this.feedbackMessageService.addFeedbackMessage(new Message(errorMessage, MessageLevel.ERROR));
@@ -185,7 +216,6 @@ public Element reconnectSourceNestedStakeholderEdge(Element self, Element newSou
if (otherEnd.getOwningMembership() instanceof StakeholderMembership stakeholderMembership) {
newSource.getOwnedRelationship().add(stakeholderMembership);
} else {
- // This is an error, a Stakeholder should always be contained in a StakeholderMembership.
String errorMessage = "Cannot reconnect the Stakeholder, it is not owned by a " + StakeholderMembership.class.getSimpleName();
this.logger.error(errorMessage);
this.feedbackMessageService.addFeedbackMessage(new Message(errorMessage, MessageLevel.ERROR));
@@ -321,15 +351,581 @@ public Element reconnnectTargetAnnotatedEdge(Element self, Element newTarget) {
* @return the given self
*/
public Element reconnectTargetNestedActorEdge(Element self) {
- // due to https://github.com/eclipse-sirius/sirius-web/issues/2930 we cannot prevent the user to do the
- // reconnect,
- // so we just warn him/her that this is not possible.
String errorMessage = "An Actor cannot be disconnected from its UseCase or its Requirement element";
this.logger.warn(errorMessage);
this.feedbackMessageService.addFeedbackMessage(new Message(errorMessage, MessageLevel.WARNING));
return self;
}
+ /**
+ * Create the appropriate compartment item for the given structural feature.
+ *
+ * @param element
+ * the given element
+ * @param eReferenceName
+ * the compartment reference name
+ * @return the created element or the given container when nothing was created
+ */
+ public Element createCompartmentItem(Element element, String eReferenceName) {
+ EStructuralFeature feature = element.eClass().getEStructuralFeature(eReferenceName);
+ Element result = element;
+ if (feature.getEType() instanceof EClass itemEClass) {
+ var item = SysmlFactory.eINSTANCE.create(itemEClass);
+ if (item instanceof Element elementItem) {
+ var membership = this.createAppropriateMembership(feature);
+ element.getOwnedRelationship().add(membership);
+ membership.getOwnedRelatedElement().add(elementItem);
+ result = this.metamodelMutationElementService.initialize(elementItem);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Create the appropriate compartment item for the given structural feature and assign the given direction.
+ *
+ * @param element
+ * the given element
+ * @param eReferenceName
+ * the compartment reference name
+ * @param directionLiteral
+ * the feature direction literal
+ * @return the created element or the given container when nothing was created
+ */
+ public Element createCompartmentItemWithDirection(Element element, String eReferenceName, String directionLiteral) {
+ EStructuralFeature structuralFeature = element.eClass().getEStructuralFeature(eReferenceName);
+ Element result = element;
+ if (structuralFeature.getEType() instanceof EClass itemEClass) {
+ var item = SysmlFactory.eINSTANCE.create(itemEClass);
+ if (item instanceof Element elementItem) {
+ var membership = this.createAppropriateMembership(structuralFeature);
+ element.getOwnedRelationship().add(membership);
+ membership.getOwnedRelatedElement().add(elementItem);
+ result = this.metamodelMutationElementService.initialize(elementItem);
+ if (directionLiteral != null && elementItem instanceof Feature feature) {
+ feature.setDirection(FeatureDirectionKind.get(directionLiteral));
+ result.setDeclaredName(result.getName() + StringUtils.capitalize(directionLiteral));
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Create a new RequirementUsage and set it as the objective requirement of the self element.
+ *
+ * @param self
+ * the element usage to set the objective for
+ * @param selectedObject
+ * the selected object used for subsetting or typing
+ * @return the created requirement usage
+ */
+ public Element createRequirementUsageAsObjectiveRequirement(Element self, Element selectedObject) {
+ Element result = self;
+ if (self instanceof CaseUsage
+ || self instanceof CaseDefinition) {
+ RequirementUsage newRequirementUsage = SysmlFactory.eINSTANCE.createRequirementUsage();
+ result = newRequirementUsage;
+ var objectiveMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getObjectiveMembership());
+ objectiveMembership.getOwnedRelatedElement().add(newRequirementUsage);
+ this.metamodelMutationElementService.initialize(newRequirementUsage);
+ if (selectedObject instanceof RequirementUsage requirementUsage) {
+ this.utilService.setSubsetting(newRequirementUsage, requirementUsage);
+ } else if (selectedObject instanceof RequirementDefinition requirementDefinition) {
+ this.utilService.setFeatureTyping(newRequirementUsage, requirementDefinition);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Create a new subject reference usage.
+ *
+ * @param self
+ * the containing element
+ * @param selectedObject
+ * the selected object used for subsetting or typing
+ * @return the created reference usage or the given element when nothing was created
+ */
+ public Element createReferenceUsageAsSubject(Element self, Element selectedObject) {
+ Element result = self;
+ if (self instanceof CaseUsage
+ || self instanceof CaseDefinition
+ || self instanceof RequirementUsage
+ || self instanceof RequirementDefinition) {
+ ReferenceUsage newReferenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ var subjectMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getSubjectMembership());
+ subjectMembership.getOwnedRelatedElement().add(newReferenceUsage);
+ this.metamodelMutationElementService.initialize(newReferenceUsage);
+ if (selectedObject instanceof Usage usage) {
+ this.utilService.setSubsetting(newReferenceUsage, usage);
+ } else if (selectedObject instanceof Definition definition) {
+ this.utilService.setFeatureTyping(newReferenceUsage, definition);
+ }
+ result = newReferenceUsage;
+ }
+ return result;
+ }
+
+ /**
+ * Create a new actor part usage.
+ *
+ * @param self
+ * the containing element
+ * @param selectedObject
+ * the selected object used for subsetting or typing
+ * @return the created part usage or the given element when nothing was created
+ */
+ public Element createPartUsageAsActor(Element self, Element selectedObject) {
+ Element result = self;
+ if (self instanceof CaseUsage
+ || self instanceof CaseDefinition
+ || self instanceof RequirementUsage
+ || self instanceof RequirementDefinition) {
+ PartUsage newPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
+ var actorMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getActorMembership());
+ actorMembership.getOwnedRelatedElement().add(newPartUsage);
+ this.metamodelMutationElementService.initialize(newPartUsage);
+ if (selectedObject instanceof ItemUsage usage) {
+ this.utilService.setSubsetting(newPartUsage, usage);
+ } else if (selectedObject instanceof ItemDefinition definition) {
+ this.utilService.setFeatureTyping(newPartUsage, definition);
+ }
+ result = newPartUsage;
+ }
+ return result;
+ }
+
+ /**
+ * Service to create a new stakeholder {@link PartUsage} for a {@link RequirementUsage} or
+ * {@link RequirementDefinition}.
+ *
+ * @param self
+ * a {@link RequirementUsage} or {@link RequirementDefinition}, otherwise no {@link PartUsage} will be
+ * created.
+ * @param selectedObject
+ * an {@link ItemUsage} or {@link ItemDefinition} that will be subsetted by (respectively that will type)
+ * the created {@link PartUsage}. If {@code null} then the stakeholder {@link PartUsage} will not
+ * be subsetted.
+ * @return the newly-created {@link PartUsage}, contained by {@code self} through a {@link StakeholderMembership}.
+ * If {@code self} was neither a {@link RequirementUsage} nor a {@link RequirementDefinition}, {@code self}
+ * is returned as-is.
+ */
+ public Element createPartUsageAsStakeholder(Element self, Element selectedObject) {
+ Element result = self;
+ if (self instanceof RequirementUsage || self instanceof RequirementDefinition) {
+ var createdPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
+ var stakeholderMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getStakeholderMembership());
+ stakeholderMembership.getOwnedRelatedElement().add(createdPartUsage);
+ this.metamodelMutationElementService.initialize(createdPartUsage);
+
+ if (selectedObject instanceof ItemUsage selectedItemUsage) {
+ this.utilService.setSubsetting(createdPartUsage, selectedItemUsage);
+ } else if (selectedObject instanceof ItemDefinition selectedItemDefinition) {
+ this.utilService.setFeatureTyping(createdPartUsage, selectedItemDefinition);
+ }
+
+ result = createdPartUsage;
+ }
+ return result;
+ }
+
+ /**
+ * Creates a new action parameter with the given direction.
+ *
+ * @param self
+ * the owning action or behavior
+ * @param direction
+ * the direction name
+ * @return the created reference usage
+ */
+ public Element createActionParameter(Element self, String direction) {
+ var newReferenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ var featureMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getFeatureMembership());
+ featureMembership.getOwnedRelatedElement().add(newReferenceUsage);
+ this.metamodelMutationElementService.initialize(newReferenceUsage);
+ newReferenceUsage.setDirection(FeatureDirectionKind.getByName(direction));
+ return newReferenceUsage;
+ }
+
+ /**
+ * Create a new connection end (a ReferenceUsage) in a given ConnectionDefinition.
+ *
+ * @param self
+ * the connection definition in which the new end is added
+ * @return the modified connection definition
+ */
+ public Element createConnectionDefinitionEnd(ConnectionDefinition self) {
+ int suffix = self.getOwnedEndFeature().size() + 1;
+ this.addConnectionEnd(self, "end" + suffix);
+ return self;
+ }
+
+ /**
+ * Create a new interface end (a PortUsage) in a given InterfaceDefinition.
+ *
+ * @param self
+ * the interface definition in which the new end is added
+ * @return the modified interface definition
+ */
+ public Element createInterfaceDefinitionEnd(InterfaceDefinition self) {
+ int suffix = self.getOwnedEndFeature().size() + 1;
+ this.addPort(self, "port" + suffix);
+ return self;
+ }
+
+ /**
+ * Create a new accept action under a part or action owner.
+ *
+ * @param ownerElement
+ * the owner of the new accept action
+ * @return the created accept action or the owner when creation is not applicable
+ */
+ public Element createAcceptAction(Element ownerElement) {
+ if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMember);
+ var acceptAction = SysmlFactory.eINSTANCE.createAcceptActionUsage();
+ featureMember.getOwnedRelatedElement().add(acceptAction);
+ return this.metamodelMutationElementService.initialize(acceptAction);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Create or replace the payload parameter of an accept action usage.
+ *
+ * @param self
+ * the accept action usage
+ * @param payloadEClassName
+ * the payload classifier name
+ * @return the given accept action usage
+ */
+ public Element createAcceptActionPayload(AcceptActionUsage self, String payloadEClassName) {
+ var classifier = SysmlPackage.eINSTANCE.getEClassifier(payloadEClassName);
+ if (classifier instanceof EClass eClass) {
+ var payload = SysmlFactory.eINSTANCE.create(eClass);
+ if (payload instanceof Type payloadType) {
+ payloadType.setDeclaredName(self.getDeclaredName() + "PayloadType");
+ var membership = SysmlFactory.eINSTANCE.createOwningMembership();
+ membership.getOwnedRelatedElement().add(payloadType);
+ var payloadParent = this.getClosestContainingPackageFrom(self);
+ payloadParent.getOwnedRelationship().add(membership);
+ var featureTyping = SysmlFactory.eINSTANCE.createFeatureTyping();
+ featureTyping.setType(payloadType);
+ var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ referenceUsage.setDeclaredName("payload");
+ referenceUsage.setDirection(FeatureDirectionKind.INOUT);
+ referenceUsage.getOwnedRelationship().add(featureTyping);
+ var parameterMembership = this.getPayloadParameterMembership(self);
+ var oldParameterContent = parameterMembership.getOwnedMemberParameter();
+ if (oldParameterContent != null) {
+ this.deleteService.deleteFromModel(oldParameterContent);
+ }
+ parameterMembership = this.getPayloadParameterMembership(self);
+ parameterMembership.getOwnedRelatedElement().add(referenceUsage);
+ self.getOwnedRelationship().add(parameterMembership);
+ }
+ }
+ return self;
+ }
+
+ /**
+ * Create or replace the receiver parameter of an accept action usage.
+ *
+ * @param self
+ * the accept action usage
+ * @return the given accept action usage
+ */
+ public Element createAcceptActionReceiver(AcceptActionUsage self) {
+ var newPort = SysmlFactory.eINSTANCE.createPortUsage();
+ newPort.setDeclaredName(self.getDeclaredName() + "'s receiver");
+ var owningMembership = SysmlFactory.eINSTANCE.createOwningMembership();
+ owningMembership.getOwnedRelatedElement().add(newPort);
+ var receiverParent = this.getClosestContainingPackageFrom(self);
+ receiverParent.getOwnedRelationship().add(owningMembership);
+
+ var feature = SysmlFactory.eINSTANCE.createFeature();
+ feature.setDirection(FeatureDirectionKind.OUT);
+ var returnParameterMembership = SysmlFactory.eINSTANCE.createReturnParameterMembership();
+ returnParameterMembership.getOwnedRelatedElement().add(feature);
+ var membership = SysmlFactory.eINSTANCE.createMembership();
+ membership.setMemberElement(newPort);
+ var featureReferenceExpression = SysmlFactory.eINSTANCE.createFeatureReferenceExpression();
+ featureReferenceExpression.getOwnedRelationship().add(membership);
+ featureReferenceExpression.getOwnedRelationship().add(returnParameterMembership);
+ var featureValue = SysmlFactory.eINSTANCE.createFeatureValue();
+ featureValue.getOwnedRelatedElement().add(featureReferenceExpression);
+ var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ referenceUsage.setDeclaredName("receiver");
+ referenceUsage.setDirection(FeatureDirectionKind.IN);
+ referenceUsage.getOwnedRelationship().add(featureValue);
+ var parameterMembership = this.getReceiverParameterMembership(self);
+ Feature oldParameterContent = parameterMembership.getOwnedMemberParameter();
+ if (oldParameterContent != null) {
+ this.deleteService.deleteFromModel(oldParameterContent);
+ }
+ parameterMembership = this.getReceiverParameterMembership(self);
+ parameterMembership.getOwnedRelatedElement().add(referenceUsage);
+ self.getOwnedRelationship().add(parameterMembership);
+ return self;
+ }
+
+ /**
+ * Add the standard start action as the child of the given element.
+ *
+ * @param ownerElement
+ * an element that will own the standard start action
+ * @return the action usage returned by the shared utility service
+ */
+ public ActionUsage addStartAction(Element ownerElement) {
+ return this.utilService.retrieveStandardStartAction(ownerElement);
+ }
+
+ /**
+ * Add the standard start state as the child of the given element.
+ *
+ * @param ownerElement
+ * an element that will own the standard start state
+ * @return the action usage returned by the shared utility service
+ */
+ public ActionUsage addStartState(Element ownerElement) {
+ return this.utilService.retrieveStandardStartState(ownerElement);
+ }
+
+ /**
+ * Add the standard done action as the child of the given element.
+ *
+ * @param ownerElement
+ * an element that will own the standard done action
+ * @return the action usage returned by the shared utility service
+ */
+ public ActionUsage addDoneAction(Element ownerElement) {
+ return this.utilService.retrieveStandardDoneAction(ownerElement);
+ }
+
+ /**
+ * Add the standard done state as the child of the given element.
+ *
+ * @param ownerElement
+ * an element that will own the standard done state
+ * @return the action usage returned by the shared utility service
+ */
+ public ActionUsage addDoneState(Element ownerElement) {
+ return this.utilService.retrieveStandardDoneState(ownerElement);
+ }
+
+ /**
+ * Create a new sub-action usage.
+ *
+ * @param ownerElement
+ * the owner of the new action usage
+ * @return the newly created action usage
+ */
+ public ActionUsage createSubActionUsage(Element ownerElement) {
+ var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMembership);
+ var newActionUsage = SysmlFactory.eINSTANCE.createActionUsage();
+ featureMembership.getOwnedRelatedElement().add(newActionUsage);
+ return this.metamodelMutationElementService.initialize(newActionUsage);
+ }
+
+ /**
+ * Creation of the semantic elements associated to a Join action.
+ *
+ * @param ownerElement
+ * the element owning the new Join action
+ * @return the new Join action if it has been successfully created or ownerElement otherwise
+ */
+ public Element createJoinAction(Element ownerElement) {
+ if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ var join = SysmlFactory.eINSTANCE.createJoinNode();
+ featureMember.getOwnedRelatedElement().add(join);
+ ownerElement.getOwnedRelationship().add(featureMember);
+ return this.metamodelMutationElementService.initialize(join);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Creation of the semantic elements associated to a Fork action.
+ *
+ * @param ownerElement
+ * the element owning the new Fork action
+ * @return the new Fork action if it has been successfully created or ownerElement otherwise
+ */
+ public Element createForkAction(Element ownerElement) {
+ if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMember);
+ var fork = SysmlFactory.eINSTANCE.createForkNode();
+ featureMember.getOwnedRelatedElement().add(fork);
+ return this.metamodelMutationElementService.initialize(fork);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Creation of the semantic elements associated to a Merge action.
+ *
+ * @param ownerElement
+ * the element owning the new Merge action
+ * @return the new Merge action if it has been successfully created or ownerElement otherwise
+ */
+ public Element createMergeAction(Element ownerElement) {
+ if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ var merge = SysmlFactory.eINSTANCE.createMergeNode();
+ featureMember.getOwnedRelatedElement().add(merge);
+ ownerElement.getOwnedRelationship().add(featureMember);
+ return this.metamodelMutationElementService.initialize(merge);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Creation of the semantic elements associated to a Decision action.
+ *
+ * @param ownerElement
+ * the element owning the new Decision action
+ * @return the new Decision action if it has been successfully created or ownerElement otherwise
+ */
+ public Element createDecisionAction(Element ownerElement) {
+ if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMember);
+ var decision = SysmlFactory.eINSTANCE.createDecisionNode();
+ featureMember.getOwnedRelatedElement().add(decision);
+ return this.metamodelMutationElementService.initialize(decision);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Creation of the semantic elements associated to an Assignment action inside an Action or ActionDefinition.
+ *
+ * @param ownerElement
+ * the element owning the new Assignment action
+ * @return the new Assignment action if it has been successfully created or ownerElement otherwise
+ */
+ public Element createAssignmentAction(Element ownerElement) {
+ if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition) {
+ var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
+ ownerElement.getOwnedRelationship().add(featureMember);
+ var assignmentAction = SysmlFactory.eINSTANCE.createAssignmentActionUsage();
+ featureMember.getOwnedRelatedElement().add(assignmentAction);
+ return this.metamodelMutationElementService.initialize(assignmentAction);
+ }
+ return ownerElement;
+ }
+
+ /**
+ * Create a perform action usage in the given owner.
+ *
+ * @param ownerElement
+ * the owner of the new perform action
+ * @return the created perform action usage
+ */
+ public Element createPerformAction(Element ownerElement) {
+ var featureMember = this.metamodelMutationElementService.createMembership(ownerElement);
+ ownerElement.getOwnedRelationship().add(featureMember);
+ var perform = SysmlFactory.eINSTANCE.createPerformActionUsage();
+ featureMember.getOwnedRelatedElement().add(perform);
+ return this.metamodelMutationElementService.initialize(perform);
+ }
+
+ /**
+ * Creates a new sibling part usage as well as a subsetting edge between those parts.
+ *
+ * @param self
+ * the {@link PartUsage} to subset by a new part usage
+ * @return the new part usage or self if something went wrong
+ */
+ public PartUsage createPartUsageAndSubsetting(PartUsage self) {
+ var parent = self.getOwner();
+ if (parent != null) {
+ var membership = SysmlFactory.eINSTANCE.createOwningMembership();
+ parent.getOwnedRelationship().add(membership);
+ var newPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
+ membership.getOwnedRelatedElement().add(newPartUsage);
+ this.metamodelMutationElementService.initialize(newPartUsage);
+ this.utilService.setSubsetting(self, newPartUsage);
+ return newPartUsage;
+ }
+ return self;
+ }
+
+ /**
+ * Creates a new sibling part definition as well as a feature typing edge between the part usage and the part
+ * definition.
+ *
+ * @param self
+ * the {@link PartUsage} to type by a new part definition
+ * @return the new part definition or self if something went wrong
+ */
+ public Element createPartDefinitionAndFeatureTyping(PartUsage self) {
+ var parent = self.getOwner();
+ if (parent != null) {
+ var membership = SysmlFactory.eINSTANCE.createOwningMembership();
+ parent.getOwnedRelationship().add(membership);
+ var newPartDefinition = this.utilService.createPartDefinitionFrom(self);
+ membership.getOwnedRelatedElement().add(newPartDefinition);
+ this.metamodelMutationElementService.initialize(newPartDefinition);
+ this.utilService.setFeatureTyping(self, newPartDefinition);
+ return newPartDefinition;
+ }
+ return self;
+ }
+
+ /**
+ * Create a namespace import under the given namespace.
+ *
+ * @param self
+ * the namespace that will own the import
+ * @param importedNamespace
+ * the imported namespace
+ * @return the created import or the given element when creation is not applicable
+ */
+ public Element createNamespaceImport(Element self, Namespace importedNamespace) {
+ if (self instanceof Namespace namespace) {
+ var namespaceImport = SysmlFactory.eINSTANCE.createNamespaceImport();
+ namespace.getOwnedRelationship().add(namespaceImport);
+ this.metamodelMutationElementService.initialize(namespaceImport);
+ namespaceImport.setImportedNamespace(importedNamespace);
+ return namespaceImport;
+ }
+ return self;
+ }
+
+ /**
+ * Creates a state sub action (entry, do or exit actions) as a child of the given StateUsage or StateDefinition.
+ *
+ * @param self
+ * the state usage or state definition owning the sub action
+ * @param performedAction
+ * an action usage or null; if set the new perform action will reference this action
+ * @param kindLiteral
+ * the kind of the state subaction membership owning the perform action
+ * @return the new perform action or null if self is not a state
+ */
+ public PerformActionUsage createStateSubaction(Element self, ActionUsage performedAction, String kindLiteral) {
+ if (self instanceof StateUsage || self instanceof StateDefinition) {
+ StateSubactionMembership stateSubactionMembership = (StateSubactionMembership) this.createMembership(self, SysmlPackage.eINSTANCE.getStateSubactionMembership());
+ stateSubactionMembership.setKind(StateSubactionKind.get(kindLiteral));
+ var performAction = SysmlFactory.eINSTANCE.createPerformActionUsage();
+ stateSubactionMembership.getOwnedRelatedElement().add(performAction);
+ this.metamodelMutationElementService.initialize(performAction);
+ if (performedAction != null) {
+ var referenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
+ referenceSubsetting.setReferencedFeature(performedAction);
+ performAction.getOwnedRelationship().add(referenceSubsetting);
+ }
+ return performAction;
+ }
+ return null;
+ }
+
/**
* Moves the usage into its closest containing package.
*
@@ -351,6 +947,102 @@ public Element moveToClosestContainingPackage(Usage usage) {
return usage;
}
+ private Membership createAppropriateMembership(EStructuralFeature feature) {
+ Membership result = SysmlFactory.eINSTANCE.createFeatureMembership();
+ if (feature.getEType().equals(SysmlPackage.eINSTANCE.getEnumerationUsage())) {
+ result = SysmlFactory.eINSTANCE.createVariantMembership();
+ } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_AssumedConstraint())
+ || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_AssumedConstraint())) {
+ result = SysmlFactory.eINSTANCE.createRequirementConstraintMembership();
+ ((RequirementConstraintMembership) result).setKind(RequirementConstraintKind.ASSUMPTION);
+ } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint())
+ || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_RequiredConstraint())) {
+ result = SysmlFactory.eINSTANCE.createRequirementConstraintMembership();
+ ((RequirementConstraintMembership) result).setKind(RequirementConstraintKind.REQUIREMENT);
+ } else if (feature.equals(SysmlPackage.eINSTANCE.getElement_Documentation())) {
+ result = SysmlFactory.eINSTANCE.createOwningMembership();
+ } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern()) || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_FramedConcern())) {
+ result = SysmlFactory.eINSTANCE.createFramedConcernMembership();
+ }
+ return result;
+ }
+
+ private Membership createMembership(Element element, EClass membershipType) {
+ Membership membership = null;
+ var eObject = SysmlFactory.eINSTANCE.create(membershipType);
+ if (eObject instanceof Membership typedMembership) {
+ membership = typedMembership;
+ element.getOwnedRelationship().add(membership);
+ }
+ return membership;
+ }
+
+ private void addConnectionEnd(ConnectionDefinition connectionDefinition, String name) {
+ var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
+ this.metamodelMutationElementService.initialize(referenceUsage);
+ referenceUsage.setDeclaredName(name);
+ referenceUsage.setIsEnd(true);
+ var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ featureMembership.getOwnedRelatedElement().add(referenceUsage);
+ connectionDefinition.getOwnedRelationship().add(featureMembership);
+ }
+
+ private void addPort(InterfaceDefinition interfaceDefinition, String name) {
+ var portUsage = SysmlFactory.eINSTANCE.createPortUsage();
+ this.metamodelMutationElementService.initialize(portUsage);
+ portUsage.setDeclaredName(name);
+ portUsage.setIsEnd(true);
+ var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
+ featureMembership.getOwnedRelatedElement().add(portUsage);
+ interfaceDefinition.getOwnedRelationship().add(featureMembership);
+ }
+
+ private ParameterMembership getPayloadParameterMembership(AcceptActionUsage acceptActionUsage) {
+ var membership = acceptActionUsage.getOwnedRelationship().stream()
+ .filter(ParameterMembership.class::isInstance)
+ .map(ParameterMembership.class::cast)
+ .findFirst()
+ .orElse(null);
+ if (membership == null) {
+ membership = SysmlFactory.eINSTANCE.createParameterMembership();
+ } else {
+ membership.getOwnedRelatedElement().clear();
+ }
+ return membership;
+ }
+
+ private ParameterMembership getReceiverParameterMembership(AcceptActionUsage acceptActionUsage) {
+ final ParameterMembership result;
+ var memberships = acceptActionUsage.getOwnedRelationship().stream()
+ .filter(ParameterMembership.class::isInstance)
+ .map(ParameterMembership.class::cast)
+ .toList();
+ if (memberships.isEmpty()) {
+ acceptActionUsage.getOwnedRelationship().add(this.createParameterMembershipWithReferenceUsage());
+ result = SysmlFactory.eINSTANCE.createParameterMembership();
+ } else if (memberships.size() == 1) {
+ result = SysmlFactory.eINSTANCE.createParameterMembership();
+ } else {
+ result = memberships.get(1);
+ }
+ return result;
+ }
+
+ private ParameterMembership createParameterMembershipWithReferenceUsage() {
+ var reference = SysmlFactory.eINSTANCE.createReferenceUsage();
+ var parameterMembership = SysmlFactory.eINSTANCE.createParameterMembership();
+ parameterMembership.getOwnedRelatedElement().add(reference);
+ return parameterMembership;
+ }
+
+ private boolean isPart(Element element) {
+ return element instanceof PartUsage || element instanceof PartDefinition;
+ }
+
+ private boolean isAction(Element element) {
+ return element instanceof ActionUsage || element instanceof ActionDefinition;
+ }
+
private Package getClosestContainingPackageFrom(Element element) {
var owner = element.eContainer();
while (!(owner instanceof Package) && owner != null) {
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryToolService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryToolService.java
index 2aed897e6..90ae019a4 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryToolService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryToolService.java
@@ -12,10 +12,12 @@
*******************************************************************************/
package org.eclipse.syson.diagram.services;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext;
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.core.api.IObjectSearchService;
@@ -26,14 +28,19 @@
import org.eclipse.syson.sysml.ActionUsage;
import org.eclipse.syson.sysml.Definition;
import org.eclipse.syson.sysml.Element;
+import org.eclipse.syson.sysml.Feature;
import org.eclipse.syson.sysml.Package;
+import org.eclipse.syson.sysml.Specialization;
import org.eclipse.syson.sysml.StateDefinition;
+import org.eclipse.syson.sysml.StateSubactionMembership;
import org.eclipse.syson.sysml.StateUsage;
+import org.eclipse.syson.sysml.SubjectMembership;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.Usage;
import org.eclipse.syson.sysml.ViewDefinition;
import org.eclipse.syson.sysml.ViewUsage;
+import org.eclipse.syson.sysml.metamodel.util.ElementUtil;
import org.eclipse.syson.util.StandardDiagramsConstants;
import org.springframework.stereotype.Service;
@@ -47,10 +54,13 @@ public class DiagramQueryToolService {
private final IObjectSearchService objectSearchService;
+ private final ShowDiagramsInheritedMembersService showDiagramsInheritedMembersService;
+
private final UtilService utilService;
- public DiagramQueryToolService(IObjectSearchService objectSearchService) {
+ public DiagramQueryToolService(IObjectSearchService objectSearchService, ShowDiagramsInheritedMembersService showDiagramsInheritedMembersService) {
this.objectSearchService = Objects.requireNonNull(objectSearchService);
+ this.showDiagramsInheritedMembersService = Objects.requireNonNull(showDiagramsInheritedMembersService);
this.utilService = new UtilService();
}
@@ -85,6 +95,155 @@ public boolean isControlNodeActionCreationToolInAction(IEditingContext editingCo
}).orElse(false);
}
+ /**
+ * Service to check whether the given element has a subject defined or not.
+ *
+ * @param self
+ * a {@link org.eclipse.syson.sysml.RequirementUsage} or a {@link org.eclipse.syson.sysml.RequirementDefinition} or a {@link org.eclipse.syson.sysml.CaseUsage} or a
+ * {@link org.eclipse.syson.sysml.CaseDefinition}
+ * @return {@code true} if {@code self} contains a subject and {@code false} otherwise.
+ */
+ public boolean isEmptySubjectCompartment(Element self) {
+ if (self instanceof org.eclipse.syson.sysml.RequirementUsage
+ || self instanceof org.eclipse.syson.sysml.RequirementDefinition
+ || self instanceof org.eclipse.syson.sysml.CaseUsage
+ || self instanceof org.eclipse.syson.sysml.CaseDefinition) {
+ return self.getOwnedRelationship().stream()
+ .filter(SubjectMembership.class::isInstance)
+ .map(SubjectMembership.class::cast)
+ .findFirst()
+ .isEmpty();
+ }
+ return true;
+ }
+
+ /**
+ * Service to check whether the given UseCaseUsage or UseCaseDefinition has an objective requirement defined or not.
+ *
+ * @param self
+ * a {@link org.eclipse.syson.sysml.UseCaseUsage} or a {@link org.eclipse.syson.sysml.UseCaseDefinition}
+ * @return {@code true} if {@code self} contains a subject and {@code false} otherwise.
+ */
+ public boolean isEmptyObjectiveRequirementCompartment(Element self) {
+ return this.utilService.isEmptyObjectiveRequirement(self);
+ }
+
+ /**
+ * Service to check whether the given element has a subaction of Kind {@code kind} subject defined or not.
+ *
+ * @param self
+ * a {@link StateUsage} or a {@link StateDefinition}
+ * @return {@code true} if {@code self} contains a subaction of the specified kind and {@code false} otherwise.
+ */
+ public boolean isEmptyOfActionKindCompartment(Element self, String kind) {
+ if (self instanceof StateUsage
+ || self instanceof StateDefinition) {
+ return self.getOwnedRelationship().stream()
+ .filter(StateSubactionMembership.class::isInstance)
+ .map(StateSubactionMembership.class::cast)
+ .noneMatch(mem -> mem.getKind().getLiteral().equalsIgnoreCase(kind));
+ }
+ return true;
+ }
+
+ /**
+ * Returns the inherited features matching the given compartment reference according to the inherited-members flags.
+ *
+ * @param type
+ * the type owning the compartment
+ * @param eReferenceName
+ * the compartment reference name
+ * @return the inherited features to display
+ */
+ public List getInheritedCompartmentItems(Type type, String eReferenceName) {
+ boolean showInheritedMembers = this.showDiagramsInheritedMembersService.getShowInheritedMembers();
+ boolean showInheritedMembersFromStandardLibraries = this.showDiagramsInheritedMembersService.getShowInheritedMembersFromStandardLibraries();
+
+ if (!showInheritedMembers && !showInheritedMembersFromStandardLibraries) {
+ return List.of();
+ }
+
+ List inheritedElements = new ArrayList<>();
+ var eStructuralFeature = type.eClass().getEStructuralFeature(eReferenceName);
+ if (eStructuralFeature instanceof EReference eReference) {
+ type.getInheritedFeature().stream()
+ .filter(feature -> new InheritedCompartmentItemFilterSwitch(eReference).doSwitch(feature))
+ .forEach(inheritedElements::add);
+ }
+
+ var alreadySpecializedFeatures = new ArrayList();
+ type.getOwnedFeature().stream()
+ .flatMap(feature -> this.getSpecializationTypeHierarchy(feature).stream())
+ .filter(Feature.class::isInstance)
+ .map(Feature.class::cast)
+ .filter(inheritedElements::contains)
+ .forEach(alreadySpecializedFeatures::add);
+ inheritedElements.stream()
+ .flatMap(feature -> this.getSpecializationTypeHierarchy(feature).stream())
+ .filter(Feature.class::isInstance)
+ .map(Feature.class::cast)
+ .filter(inheritedElements::contains)
+ .forEach(alreadySpecializedFeatures::add);
+ inheritedElements.removeAll(alreadySpecializedFeatures);
+ inheritedElements.remove(type);
+
+ if (showInheritedMembers && !showInheritedMembersFromStandardLibraries) {
+ inheritedElements.removeIf(ElementUtil::isFromStandardLibrary);
+ } else if (showInheritedMembersFromStandardLibraries && !showInheritedMembers) {
+ inheritedElements.removeIf(element -> !ElementUtil.isFromStandardLibrary(element));
+ }
+ return inheritedElements;
+ }
+
+ /**
+ * Service to check whether the given accept action usage has a receiver defined or not.
+ *
+ * @param element
+ * the accept action usage to inspect
+ * @return {@code true} if the receiver is empty
+ */
+ public boolean isEmptyAcceptActionUsageReceiver(Element element) {
+ if (element instanceof org.eclipse.syson.sysml.AcceptActionUsage acceptActionUsage) {
+ var receiverExp = acceptActionUsage.getReceiverArgument();
+ if (receiverExp != null) {
+ var receiverMembership = receiverExp.getOwnedRelationship().stream()
+ .filter(org.eclipse.syson.sysml.Membership.class::isInstance)
+ .map(org.eclipse.syson.sysml.Membership.class::cast)
+ .findFirst()
+ .orElse(null);
+ if (receiverMembership != null) {
+ return receiverMembership.getMemberElement() == null;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Service to check whether the given accept action usage has a payload defined or not.
+ *
+ * @param element
+ * the accept action usage to inspect
+ * @return {@code true} if the payload is empty
+ */
+ public boolean isEmptyAcceptActionUsagePayload(Element element) {
+ boolean result = true;
+ if (element instanceof org.eclipse.syson.sysml.AcceptActionUsage acceptActionUsage) {
+ var payloadParameter = acceptActionUsage.getPayloadParameter();
+ if (payloadParameter != null && !payloadParameter.getOwnedRelationship().isEmpty()) {
+ var type = payloadParameter.getOwnedRelationship().stream()
+ .filter(org.eclipse.syson.sysml.FeatureTyping.class::isInstance)
+ .map(org.eclipse.syson.sysml.FeatureTyping.class::cast)
+ .map(org.eclipse.syson.sysml.FeatureTyping::getType)
+ .filter(Objects::nonNull)
+ .findFirst()
+ .orElse(null);
+ return type == null;
+ }
+ }
+ return result;
+ }
+
/**
* Checks if a tool creating the given type should be available for the provided diagram context.
*
@@ -171,6 +330,27 @@ private boolean toolShouldBeAvailableOnStateTransitionView(Element element, ECla
return toolShouldBeAvailable;
}
+ private List getSpecializationTypeHierarchy(Type type) {
+ List specializationTypeHierarchy = new ArrayList<>();
+ this.getSpecializationTypeHierarchy(type, specializationTypeHierarchy);
+ return specializationTypeHierarchy;
+ }
+
+ private void getSpecializationTypeHierarchy(Type type, List specializationTypeHierarchy) {
+ if (type != null) {
+ List specializationTypes = new ArrayList<>();
+ type.getOwnedSpecialization().stream()
+ .map(Specialization::getGeneral)
+ .forEach(general -> {
+ if (general != null && !specializationTypeHierarchy.contains(general) && !specializationTypes.contains(general)) {
+ specializationTypes.add(general);
+ specializationTypeHierarchy.add(general);
+ }
+ });
+ specializationTypes.forEach(specializationType -> this.getSpecializationTypeHierarchy(specializationType, specializationTypeHierarchy));
+ }
+ }
+
private boolean isAFVDiagram(IEditingContext editingContext, DiagramContext diagramContext) {
var objectId = diagramContext.diagram().getTargetObjectId();
return this.objectSearchService.getObject(editingContext, objectId)
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryViewService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryViewService.java
index be4c1f7e5..37bbff07c 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryViewService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/DiagramQueryViewService.java
@@ -51,6 +51,17 @@ public DiagramQueryViewService(IObjectSearchService objectSearchService, Diagram
this.diagramQueryExposeService = Objects.requireNonNull(diagramQueryExposeService);
}
+ /**
+ * Returns {@code true} if the diagram can be created on the provided {@code element}.
+ *
+ * @param element
+ * the element to check
+ * @return {@code true} if the diagram can be created on the provided {@code element}
+ */
+ public boolean canCreateDiagram(Element element) {
+ return true;
+ }
+
/**
* Check if the given {@link Element} displayed in the given {@link DiagramContext} is of the given
* {@link ViewDefinition}.
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/InheritedCompartmentItemFilterSwitch.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/InheritedCompartmentItemFilterSwitch.java
similarity index 62%
rename from backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/InheritedCompartmentItemFilterSwitch.java
rename to backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/InheritedCompartmentItemFilterSwitch.java
index 89a828ff6..246bb06d4 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/InheritedCompartmentItemFilterSwitch.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/InheritedCompartmentItemFilterSwitch.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 2026 Obeo.
+ * Copyright (c) 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.diagram.common.view.services;
+package org.eclipse.syson.diagram.services;
import java.util.List;
import java.util.Objects;
@@ -39,7 +39,7 @@
import org.eclipse.syson.sysml.util.SysmlSwitch;
/**
- * Switch allowing to filter some candidates to be considered as inherited node items or not.
+ * Filters inherited compartment items according to the semantics of a compartment reference.
*
* @author arichard
*/
@@ -47,15 +47,35 @@ public class InheritedCompartmentItemFilterSwitch extends SysmlSwitch {
private final EReference eReference;
+ /**
+ * Creates the filter for the given compartment reference.
+ *
+ * @param eReference
+ * the compartment reference used to decide whether an inherited feature should be kept
+ */
public InheritedCompartmentItemFilterSwitch(EReference eReference) {
this.eReference = Objects.requireNonNull(eReference);
}
+ /**
+ * Returns {@code false} for unsupported semantic objects.
+ *
+ * @param object
+ * the semantic object to inspect
+ * @return always {@code false}
+ */
@Override
public Boolean defaultCase(EObject object) {
return false;
}
+ /**
+ * Filters inherited requirement constraints according to the targeted compartment kind.
+ *
+ * @param object
+ * the inherited constraint usage
+ * @return {@code true} when the constraint belongs to the requested compartment
+ */
@Override
public Boolean caseConstraintUsage(ConstraintUsage object) {
boolean keep = true;
@@ -75,38 +95,50 @@ public Boolean caseConstraintUsage(ConstraintUsage object) {
return keep && this.caseFeature(object);
}
+ /**
+ * Filters inherited exhibit states, including the parameter-compartment special case.
+ *
+ * @param object
+ * the inherited exhibit state
+ * @return {@code true} when the feature should be shown in the target compartment
+ */
@Override
public Boolean caseExhibitStateUsage(ExhibitStateUsage object) {
- Boolean shouldKeep = Boolean.FALSE;
- // Add this behavior parameter check for each caseXXXUsage.
- // In this case, we want to display inherited parameters (directed feature) but not all features with the same
- // type.
+ final Boolean result;
if (this.shouldConsiderParameter(object)) {
- shouldKeep = this.isInheritedParameter(object);
+ result = this.isInheritedParameter(object);
} else if (this.shouldConsiderExhibitState(object)) {
- shouldKeep = this.isInheritedState(object);
+ result = this.isInheritedState(object);
} else {
- shouldKeep = super.caseExhibitStateUsage(object);
+ result = super.caseExhibitStateUsage(object);
}
- return shouldKeep;
+ return result;
}
+ /**
+ * Filters inherited features against the target compartment type.
+ *
+ * @param object
+ * the inherited feature
+ * @return {@code true} when the feature matches the compartment
+ */
@Override
public Boolean caseFeature(Feature object) {
- // Add this behavior parameter check for each caseXXXUsage.
- // In this case, we want to display inherited parameters (directed feature) but not all features with the same
- // type.
if (this.shouldConsiderParameter(object)) {
return this.isInheritedParameter(object);
}
return this.eReference.getEType().equals(object.eClass());
}
+ /**
+ * Filters inherited part usages against the target compartment type.
+ *
+ * @param object
+ * the inherited part usage
+ * @return {@code true} when the part usage matches the compartment
+ */
@Override
public Boolean casePartUsage(PartUsage object) {
- // Add this behavior parameter check for each caseXXXUsage.
- // In this case, we want to display inherited parameters (directed feature) but not all features with the same
- // type.
if (this.shouldConsiderParameter(object)) {
return this.isInheritedParameter(object);
}
@@ -115,27 +147,35 @@ public Boolean casePartUsage(PartUsage object) {
return eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
}
+ /**
+ * Filters inherited perform actions, including the action-compartment special case.
+ *
+ * @param object
+ * the inherited perform action usage
+ * @return {@code true} when the feature should be shown in the target compartment
+ */
@Override
public Boolean casePerformActionUsage(PerformActionUsage object) {
- Boolean shouldKeep = Boolean.FALSE;
- // Add this behavior parameter check for each caseXXXUsage.
- // In this case, we want to display inherited parameters (directed feature) but not all features with the same
- // type.
+ final Boolean result;
if (this.shouldConsiderParameter(object)) {
- shouldKeep = this.isInheritedParameter(object);
+ result = this.isInheritedParameter(object);
} else if (this.shouldConsiderPerformUsage(object)) {
- shouldKeep = this.isInheritedAction(object);
+ result = this.isInheritedAction(object);
} else {
- shouldKeep = super.casePerformActionUsage(object);
+ result = super.casePerformActionUsage(object);
}
- return shouldKeep;
+ return result;
}
+ /**
+ * Filters inherited reference usages against the target compartment type.
+ *
+ * @param object
+ * the inherited reference usage
+ * @return {@code true} when the reference usage matches the compartment
+ */
@Override
public Boolean caseReferenceUsage(ReferenceUsage object) {
- // Add this behavior parameter check for each caseXXXUsage.
- // In this case, we want to display inherited parameters (directed feature) but not all features with the same
- // type.
if (this.shouldConsiderParameter(object)) {
return this.isInheritedParameter(object);
}
@@ -145,12 +185,26 @@ public Boolean caseReferenceUsage(ReferenceUsage object) {
return eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
}
+ /**
+ * Indicates whether the feature should be evaluated as a behavior or step parameter.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the target compartment is a parameter compartment for the feature owner
+ */
private boolean shouldConsiderParameter(Feature feature) {
Type owningType = feature.getOwningType();
return (owningType instanceof Behavior && this.eReference.equals(SysmlPackage.eINSTANCE.getBehavior_Parameter()))
|| (owningType instanceof Step && this.eReference.equals(SysmlPackage.eINSTANCE.getStep_Parameter()));
}
+ /**
+ * Indicates whether the feature is inherited through a behavior or step parameter list.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the feature is an inherited parameter
+ */
private boolean isInheritedParameter(Feature feature) {
List featureParameter = switch (feature.getOwner()) {
case Behavior behavior -> behavior.getParameter();
@@ -160,6 +214,13 @@ private boolean isInheritedParameter(Feature feature) {
return featureParameter.contains(feature);
}
+ /**
+ * Indicates whether the feature should be evaluated as an exhibit-state compartment item.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the feature matches an exhibit-state compartment
+ */
private boolean shouldConsiderExhibitState(Feature feature) {
if (!(feature instanceof ExhibitStateUsage)) {
return false;
@@ -170,6 +231,13 @@ private boolean shouldConsiderExhibitState(Feature feature) {
return eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
}
+ /**
+ * Indicates whether the feature is inherited through the owner's state list.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the feature is an inherited state
+ */
private boolean isInheritedState(Feature feature) {
List featureState = switch (feature.getOwner()) {
case Definition definition -> definition.getOwnedState();
@@ -179,6 +247,13 @@ private boolean isInheritedState(Feature feature) {
return featureState.contains(feature);
}
+ /**
+ * Indicates whether the feature should be evaluated as a perform-action compartment item.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the feature matches a perform-action compartment
+ */
private boolean shouldConsiderPerformUsage(Feature feature) {
if (!(feature instanceof PerformActionUsage)) {
return false;
@@ -189,8 +264,15 @@ private boolean shouldConsiderPerformUsage(Feature feature) {
return eType.equals(eClass) || (eType instanceof EClass eTypeEClass && eTypeEClass.isSuperTypeOf(eClass));
}
+ /**
+ * Indicates whether the feature is inherited through the owner's action list.
+ *
+ * @param feature
+ * the feature to inspect
+ * @return {@code true} when the feature is an inherited action
+ */
private boolean isInheritedAction(Feature feature) {
- List< ActionUsage> featureActions = switch (feature.getOwner()) {
+ List featureActions = switch (feature.getOwner()) {
case Definition definition -> definition.getOwnedAction();
case Usage usage -> usage.getNestedAction();
default -> List.of();
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ShowDiagramsInheritedMembersService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/ShowDiagramsInheritedMembersService.java
similarity index 95%
rename from backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ShowDiagramsInheritedMembersService.java
rename to backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/ShowDiagramsInheritedMembersService.java
index 866cec8e3..a76e26de8 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ShowDiagramsInheritedMembersService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/ShowDiagramsInheritedMembersService.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.diagram.common.view.services;
+package org.eclipse.syson.diagram.services;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramMutationAQLService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramMutationAQLService.java
index 14c0fac32..bae0aa388 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramMutationAQLService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramMutationAQLService.java
@@ -28,23 +28,28 @@
import org.eclipse.syson.diagram.services.DiagramMutationExposeService;
import org.eclipse.syson.diagram.services.DiagramMutationLabelService;
import org.eclipse.syson.diagram.services.DiagramMutationToolService;
+import org.eclipse.syson.sysml.AcceptActionUsage;
import org.eclipse.syson.sysml.ActionUsage;
import org.eclipse.syson.sysml.AllocationUsage;
import org.eclipse.syson.sysml.BindingConnectorAsUsage;
+import org.eclipse.syson.sysml.ConnectionDefinition;
import org.eclipse.syson.sysml.ConnectionUsage;
import org.eclipse.syson.sysml.Connector;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Feature;
import org.eclipse.syson.sysml.FlowUsage;
import org.eclipse.syson.sysml.IncludeUseCaseUsage;
+import org.eclipse.syson.sysml.InterfaceDefinition;
import org.eclipse.syson.sysml.InterfaceUsage;
+import org.eclipse.syson.sysml.Namespace;
+import org.eclipse.syson.sysml.PartUsage;
import org.eclipse.syson.sysml.PortUsage;
import org.eclipse.syson.sysml.RequirementUsage;
import org.eclipse.syson.sysml.SatisfyRequirementUsage;
import org.eclipse.syson.sysml.StateUsage;
import org.eclipse.syson.sysml.SuccessionAsUsage;
-import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.TransitionUsage;
+import org.eclipse.syson.sysml.Type;
import org.eclipse.syson.sysml.Usage;
import org.eclipse.syson.sysml.UseCaseUsage;
import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers;
@@ -131,6 +136,55 @@ public RequirementUsage becomeObjectiveRequirement(RequirementUsage requirement,
return this.diagramMutationToolService.becomeObjectiveRequirement(requirement, newContainer);
}
+ /**
+ * {@link DiagramMutationToolService#createAcceptAction(Element)}.
+ */
+ public Element createAcceptAction(Element ownerElement) {
+ return this.diagramMutationToolService.createAcceptAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createAcceptActionPayload(AcceptActionUsage, String)}.
+ */
+ public Element createAcceptActionPayload(AcceptActionUsage self, String payloadEClassName) {
+ return this.diagramMutationToolService.createAcceptActionPayload(self, payloadEClassName);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createAcceptActionReceiver(AcceptActionUsage)}.
+ */
+ public Element createAcceptActionReceiver(AcceptActionUsage self) {
+ return this.diagramMutationToolService.createAcceptActionReceiver(self);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#addDoneAction(Element)}.
+ */
+ public ActionUsage addDoneAction(Element ownerElement) {
+ return this.diagramMutationToolService.addDoneAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#addDoneState(Element)}.
+ */
+ public ActionUsage addDoneState(Element ownerElement) {
+ return this.diagramMutationToolService.addDoneState(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#addStartAction(Element)}.
+ */
+ public ActionUsage addStartAction(Element ownerElement) {
+ return this.diagramMutationToolService.addStartAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#addStartState(Element)}.
+ */
+ public ActionUsage addStartState(Element ownerElement) {
+ return this.diagramMutationToolService.addStartState(ownerElement);
+ }
+
/**
* {@link DiagramMutationElementService#createBindingConnectorAsUsage(Feature, Feature, Node, Node, IEditingContext, DiagramContext)}.
*/
@@ -162,6 +216,56 @@ public Element createDiagram(Element element, IEditingContext editingContext) {
return this.diagramMutationDiagramService.createDiagram(element, editingContext, SysONRepresentationDescriptionIdentifiers.GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID);
}
+ /**
+ * {@link DiagramMutationToolService#createActionParameter(Element, String)}.
+ */
+ public Element createActionParameter(Element self, String direction) {
+ return this.diagramMutationToolService.createActionParameter(self, direction);
+ }
+
+ /**
+ * {@link DiagramMutationElementService#createAllocateEdge(Element, Element, Node, IEditingContext, org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService)}.
+ */
+ public Element createAllocateEdge(Element source, Element target, Node sourceNode, IEditingContext editingContext,
+ org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService diagramService) {
+ return this.diagramMutationElementService.createAllocateEdge(source, target, sourceNode, editingContext, diagramService);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createAssignmentAction(Element)}.
+ */
+ public Element createAssignmentAction(Element ownerElement) {
+ return this.diagramMutationToolService.createAssignmentAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createCompartmentItem(Element, String)}.
+ */
+ public Element createCompartmentItem(Element element, String eReferenceName) {
+ return this.diagramMutationToolService.createCompartmentItem(element, eReferenceName);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createCompartmentItemWithDirection(Element, String, String)}.
+ */
+ public Element createCompartmentItemWithDirection(Element element, String eReferenceName, String directionLiteral) {
+ return this.diagramMutationToolService.createCompartmentItemWithDirection(element, eReferenceName, directionLiteral);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createConnectionDefinitionEnd(ConnectionDefinition)}.
+ */
+ public Element createConnectionDefinitionEnd(ConnectionDefinition self) {
+ return this.diagramMutationToolService.createConnectionDefinitionEnd(self);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createDecisionAction(Element)}.
+ */
+ public Element createDecisionAction(Element ownerElement) {
+ return this.diagramMutationToolService.createDecisionAction(ownerElement);
+ }
+
/**
* {@link DiagramMutationElementService#createFlowUsage(Feature, Feature, Node, Node, IEditingContext, DiagramContext)}.
*/
@@ -170,6 +274,13 @@ public FlowUsage createFlowUsage(Feature source, Feature target, Node sourceNode
return this.diagramMutationElementService.createFlowUsage(source, target, sourceNode, targetNode, editingContext, diagramContext);
}
+ /**
+ * {@link DiagramMutationToolService#createForkAction(Element)}.
+ */
+ public Element createForkAction(Element ownerElement) {
+ return this.diagramMutationToolService.createForkAction(ownerElement);
+ }
+
/**
* {@link DiagramMutationElementService#createFlowUsageWithPayload(ConnectionUsage, Type)}.
*/
@@ -185,6 +296,120 @@ public InterfaceUsage createInterfaceUsage(PortUsage sourcePort, PortUsage targe
return this.diagramMutationElementService.createInterfaceUsage(sourcePort, targetPort, sourceNode, targetNode, editingContext, diagramContext);
}
+ /**
+ * {@link DiagramMutationToolService#createInterfaceDefinitionEnd(InterfaceDefinition)}.
+ */
+ public Element createInterfaceDefinitionEnd(InterfaceDefinition self) {
+ return this.diagramMutationToolService.createInterfaceDefinitionEnd(self);
+ }
+
+ /**
+ * {@link DiagramMutationElementService#createIncludeUseCaseUsage(UseCaseUsage, UseCaseUsage)}.
+ */
+ public IncludeUseCaseUsage createIncludeUseCaseUsage(UseCaseUsage source, UseCaseUsage target) {
+ return this.diagramMutationElementService.createIncludeUseCaseUsage(source, target);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createJoinAction(Element)}.
+ */
+ public Element createJoinAction(Element ownerElement) {
+ return this.diagramMutationToolService.createJoinAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createMergeAction(Element)}.
+ */
+ public Element createMergeAction(Element ownerElement) {
+ return this.diagramMutationToolService.createMergeAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createNamespaceImport(Element, Namespace)}.
+ */
+ public Element createNamespaceImport(Element self, Namespace importedNamespace) {
+ return this.diagramMutationToolService.createNamespaceImport(self, importedNamespace);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createPartDefinitionAndFeatureTyping(PartUsage)}.
+ */
+ public Element createPartDefinitionAndFeatureTyping(PartUsage self) {
+ return this.diagramMutationToolService.createPartDefinitionAndFeatureTyping(self);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createPartUsageAndSubsetting(PartUsage)}.
+ */
+ public PartUsage createPartUsageAndSubsetting(PartUsage self) {
+ return this.diagramMutationToolService.createPartUsageAndSubsetting(self);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createPartUsageAsActor(Element, Element)}.
+ */
+ public Element createPartUsageAsActor(Element self, Element selectedObject) {
+ return this.diagramMutationToolService.createPartUsageAsActor(self, selectedObject);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createPartUsageAsStakeholder(Element, Element)}.
+ */
+ public Element createPartUsageAsStakeholder(Element self, Element selectedObject) {
+ return this.diagramMutationToolService.createPartUsageAsStakeholder(self, selectedObject);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createPerformAction(Element)}.
+ */
+ public Element createPerformAction(Element ownerElement) {
+ return this.diagramMutationToolService.createPerformAction(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createReferenceUsageAsSubject(Element, Element)}.
+ */
+ public Element createReferenceUsageAsSubject(Element self, Element selectedObject) {
+ return this.diagramMutationToolService.createReferenceUsageAsSubject(self, selectedObject);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createRequirementUsageAsObjectiveRequirement(Element, Element)}.
+ */
+ public Element createRequirementUsageAsObjectiveRequirement(Element self, Element selectedObject) {
+ return this.diagramMutationToolService.createRequirementUsageAsObjectiveRequirement(self, selectedObject);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createStateSubaction(Element, ActionUsage, String)}.
+ */
+ public Element createStateSubaction(Element self, ActionUsage performedAction, String kindLiteral) {
+ return this.diagramMutationToolService.createStateSubaction(self, performedAction, kindLiteral);
+ }
+
+ /**
+ * {@link DiagramMutationToolService#createSubActionUsage(Element)}.
+ */
+ public ActionUsage createSubActionUsage(Element ownerElement) {
+ return this.diagramMutationToolService.createSubActionUsage(ownerElement);
+ }
+
+ /**
+ * {@link DiagramMutationElementService#createSuccessionEdge(Element, Element, Node, Node, IEditingContext, org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService)}.
+ */
+ public Element createSuccessionEdge(Element successionSource, Element successionTarget, Node sourceNode, Node targetNode, IEditingContext editingContext,
+ org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService diagramService) {
+ return this.diagramMutationElementService.createSuccessionEdge(successionSource, successionTarget, sourceNode, targetNode, editingContext, diagramService);
+ }
+
+ /**
+ * {@link DiagramMutationElementService#createTransitionUsage(Feature, Feature, Node, Node, org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService, IEditingContext)}.
+ */
+ public Feature createTransitionUsage(Feature sourceUsage, Feature targetUsage, Node source, Node target,
+ org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService diagramService, IEditingContext editingContext) {
+ return this.diagramMutationElementService.createTransitionUsage(sourceUsage, targetUsage, source, target, diagramService, editingContext);
+ }
+
/**
* {@link DiagramMutationLabelService#directEdit(Element, String)}.
*/
diff --git a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramQueryAQLService.java b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramQueryAQLService.java
index ba0485aab..7316b1c3c 100644
--- a/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramQueryAQLService.java
+++ b/backend/services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram/services/aql/DiagramQueryAQLService.java
@@ -36,6 +36,7 @@
import org.eclipse.syson.sysml.Dependency;
import org.eclipse.syson.sysml.Documentation;
import org.eclipse.syson.sysml.Element;
+import org.eclipse.syson.sysml.Feature;
import org.eclipse.syson.sysml.PartUsage;
import org.eclipse.syson.sysml.ReferenceUsage;
import org.eclipse.syson.sysml.SatisfyRequirementUsage;
@@ -106,6 +107,13 @@ public boolean canCreateFlowUsage(ConnectionUsage connection) {
return this.diagramQueryElementService.canCreateFlowUsage(connection);
}
+ /**
+ * {@link DiagramQueryViewService#canCreateDiagram(Element)}.
+ */
+ public boolean canCreateDiagram(Element element) {
+ return this.diagramQueryViewService.canCreateDiagram(element);
+ }
+
/**
* {@link DiagramQueryLabelService#getBeginEdgeLabel(Element)}.
*/
@@ -200,6 +208,13 @@ public List getExposedElements(Element element, Element parent, EClass
return this.diagramQueryExposeService.getExposedElements(element, parent, domainType, ancestors, editingContext, diagramContext);
}
+ /**
+ * {@link DiagramQueryToolService#getInheritedCompartmentItems(Type, String)}.
+ */
+ public List getInheritedCompartmentItems(Type type, String eReferenceName) {
+ return this.diagramQueryToolService.getInheritedCompartmentItems(type, eReferenceName);
+ }
+
/**
* {@link DiagramQueryExposeService#getExposedStakeholders(Element, EClass, List, IEditingContext, DiagramContext)}.
*/
@@ -274,6 +289,41 @@ public boolean isControlNodeActionCreationToolInsideActionOnAFV(Element element,
return this.diagramQueryToolService.isControlNodeActionCreationToolInsideActionOnAFV(element, editingContext, diagramContext);
}
+ /**
+ * {@link DiagramQueryToolService#isEmptyAcceptActionUsagePayload(Element)}.
+ */
+ public boolean isEmptyAcceptActionUsagePayload(Element element) {
+ return this.diagramQueryToolService.isEmptyAcceptActionUsagePayload(element);
+ }
+
+ /**
+ * {@link DiagramQueryToolService#isEmptyAcceptActionUsageReceiver(Element)}.
+ */
+ public boolean isEmptyAcceptActionUsageReceiver(Element element) {
+ return this.diagramQueryToolService.isEmptyAcceptActionUsageReceiver(element);
+ }
+
+ /**
+ * {@link DiagramQueryToolService#isEmptyObjectiveRequirementCompartment(Element)}.
+ */
+ public boolean isEmptyObjectiveRequirementCompartment(Element self) {
+ return this.diagramQueryToolService.isEmptyObjectiveRequirementCompartment(self);
+ }
+
+ /**
+ * {@link DiagramQueryToolService#isEmptyOfActionKindCompartment(Element, String)}.
+ */
+ public boolean isEmptyOfActionKindCompartment(Element self, String kind) {
+ return this.diagramQueryToolService.isEmptyOfActionKindCompartment(self, kind);
+ }
+
+ /**
+ * {@link DiagramQueryToolService#isEmptySubjectCompartment(Element)}.
+ */
+ public boolean isEmptySubjectCompartment(Element self) {
+ return this.diagramQueryToolService.isEmptySubjectCompartment(self);
+ }
+
/**
* {@link DiagramQueryElementService#isDiagramEmpty(editingContext, diagramContext, previousDiagram)}.
*/
diff --git a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelMutationAQLService.java b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelMutationAQLService.java
index b97218e47..9b5bb0484 100644
--- a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelMutationAQLService.java
+++ b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/aql/ModelMutationAQLService.java
@@ -60,6 +60,13 @@ public Membership createMembership(Element element) {
return this.metamodelElementMutationService.createMembership(element);
}
+ /**
+ * {@link MetamodelMutationElementService#initialize(Element)}.
+ */
+ public Element initialize(Element element) {
+ return this.metamodelElementMutationService.initialize(element);
+ }
+
/**
* {@link ModelMutationElementService#createPartUsageAndInterface(PartUsage)}.
*/
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractBindingConnectorAsUsageEdgeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractBindingConnectorAsUsageEdgeDescriptionProvider.java
index 8ff1de624..a46b3fe47 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractBindingConnectorAsUsageEdgeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractBindingConnectorAsUsageEdgeDescriptionProvider.java
@@ -117,7 +117,6 @@ public void link(DiagramDescription diagramDescription, IViewDiagramElementFinde
}
}
-
private EdgeStyle createEdgeStyle() {
return this.diagramBuilderHelper.newEdgeStyle()
.borderSize(0)
@@ -141,7 +140,6 @@ protected LabelEditTool getEdgeEditTool() {
.build();
}
-
@Override
protected ChangeContextBuilder getSourceReconnectToolBody() {
return this.viewBuilderHelper.newChangeContext()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractFlowUsageEdgeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractFlowUsageEdgeDescriptionProvider.java
index 44070d348..135d6f6e7 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractFlowUsageEdgeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/edges/AbstractFlowUsageEdgeDescriptionProvider.java
@@ -117,7 +117,6 @@ public void link(DiagramDescription diagramDescription, IViewDiagramElementFinde
}
}
-
private EdgeStyle createEdgeStyle() {
return this.diagramBuilderHelper.newEdgeStyle()
.borderSize(0)
@@ -141,7 +140,6 @@ protected LabelEditTool getEdgeEditTool() {
.build();
}
-
@Override
protected ChangeContextBuilder getSourceReconnectToolBody() {
return this.viewBuilderHelper.newChangeContext()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractPackageNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractPackageNodeDescriptionProvider.java
index 1510ddb15..01d9bf3b1 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractPackageNodeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractPackageNodeDescriptionProvider.java
@@ -43,7 +43,6 @@
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
import org.eclipse.sirius.components.view.diagram.UserResizableDirection;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.ViewEdgeToolSwitch;
import org.eclipse.syson.diagram.common.view.services.ViewLabelService;
import org.eclipse.syson.diagram.common.view.services.description.ToolDescriptionService;
@@ -51,6 +50,7 @@
import org.eclipse.syson.diagram.common.view.tools.ToolSectionDescription;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.SysmlPackage;
@@ -116,7 +116,6 @@ public AbstractPackageNodeDescriptionProvider(IColorProvider colorProvider, IDes
*/
protected abstract List getToolSections();
-
/**
* Implementors may provide the list of custom tool to add to a given tool section.
*
@@ -285,7 +284,7 @@ private NodeTool createNodeTool(NodeDescription nodeDescription, EClass eClass)
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance"))
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newInstance"))
.children(updateExposedElements.build());
var createEClassInstance = this.viewBuilderHelper.newCreateInstance()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/InheritedCompartmentItemNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/InheritedCompartmentItemNodeDescriptionProvider.java
index 50fcd7665..85e6c326c 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/InheritedCompartmentItemNodeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/InheritedCompartmentItemNodeDescriptionProvider.java
@@ -28,8 +28,8 @@
import org.eclipse.sirius.components.view.diagram.NodeStyleDescription;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
import org.eclipse.sirius.components.view.diagram.UserResizableDirection;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.ViewLabelService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.diagram.services.utils.CompartmentItemPreconditionSwitch;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
@@ -67,7 +67,7 @@ public NodeDescription create() {
.insideLabel(this.createInsideLabelDescription())
.name(this.descriptionNameGenerator.getInheritedCompartmentItemName(this.eClass, this.eReference))
.preconditionExpression(new CompartmentItemPreconditionSwitch(this.eReference).doSwitch(this.eClass))
- .semanticCandidatesExpression(ServiceMethod.of1(ViewCreateService::getInheritedCompartmentItems).aqlSelf(AQLUtils.aqlString(this.eReference.getName())))
+ .semanticCandidatesExpression(ServiceMethod.of1(DiagramQueryAQLService::getInheritedCompartmentItems).aqlSelf(AQLUtils.aqlString(this.eReference.getName())))
.style(this.createCompartmentItemNodeStyle())
.userResizable(UserResizableDirection.NONE)
.palette(this.createInheritedCompartmentItemNodePalette())
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java
index 9d2a9f5b4..6aa4bdc7d 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java
@@ -27,7 +27,7 @@
import org.eclipse.sirius.components.view.diagram.NodePalette;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
import org.eclipse.sirius.components.view.diagram.UserResizableDirection;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
@@ -92,7 +92,7 @@ private List getEdgeTools(IViewDiagramElementFinder cache) {
.iconURLsExpression("/icons/full/obj16/Succession.svg")
.body(this.viewBuilderHelper.newChangeContext()
.expression(
- ServiceMethod.of5(ViewCreateService::createSuccessionEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
+ ServiceMethod.of5(DiagramMutationAQLService::createSuccessionEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
EdgeDescription.EDGE_TARGET, IEditingContext.EDITING_CONTEXT, IDiagramService.DIAGRAM_SERVICES))
.build())
.targetElementDescriptions(targetElementDescriptions.toArray(NodeDescription[]::new))
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StateTransitionCompartmentNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StateTransitionCompartmentNodeDescriptionProvider.java
index cd073f7c2..cd08d1ef4 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StateTransitionCompartmentNodeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StateTransitionCompartmentNodeDescriptionProvider.java
@@ -32,8 +32,8 @@
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
import org.eclipse.sirius.components.view.diagram.UserResizableDirection;
import org.eclipse.syson.diagram.common.view.services.description.ToolConstants;
-import org.eclipse.syson.diagram.common.view.tools.ExhibitStateNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.DoneStateNodeToolProvider;
+import org.eclipse.syson.diagram.common.view.tools.ExhibitStateNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.StartStateNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.StateTransitionCompartmentNodeToolProvider;
import org.eclipse.syson.sysml.SysmlPackage;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewCreateService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewCreateService.java
deleted file mode 100644
index 1b0a094fc..000000000
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewCreateService.java
+++ /dev/null
@@ -1,1280 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2023, 2026 Obeo.
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Obeo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.syson.diagram.common.view.services;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import org.apache.commons.lang3.StringUtils;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext;
-import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramService;
-import org.eclipse.sirius.components.core.api.IEditingContext;
-import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
-import org.eclipse.sirius.components.core.api.IObjectSearchService;
-import org.eclipse.sirius.components.core.api.IReadOnlyObjectPredicate;
-import org.eclipse.sirius.components.diagrams.Diagram;
-import org.eclipse.sirius.components.diagrams.Node;
-import org.eclipse.sirius.components.representations.Message;
-import org.eclipse.sirius.components.representations.MessageLevel;
-import org.eclipse.syson.services.DeleteService;
-import org.eclipse.syson.services.UtilService;
-import org.eclipse.syson.sysml.AcceptActionUsage;
-import org.eclipse.syson.sysml.ActionDefinition;
-import org.eclipse.syson.sysml.ActionUsage;
-import org.eclipse.syson.sysml.AllocationUsage;
-import org.eclipse.syson.sysml.BindingConnectorAsUsage;
-import org.eclipse.syson.sysml.CaseDefinition;
-import org.eclipse.syson.sysml.CaseUsage;
-import org.eclipse.syson.sysml.ConnectionDefinition;
-import org.eclipse.syson.sysml.Definition;
-import org.eclipse.syson.sysml.Element;
-import org.eclipse.syson.sysml.EndFeatureMembership;
-import org.eclipse.syson.sysml.Feature;
-import org.eclipse.syson.sysml.FeatureDirectionKind;
-import org.eclipse.syson.sysml.FeatureMembership;
-import org.eclipse.syson.sysml.FeatureTyping;
-import org.eclipse.syson.sysml.FlowUsage;
-import org.eclipse.syson.sysml.IncludeUseCaseUsage;
-import org.eclipse.syson.sysml.InterfaceDefinition;
-import org.eclipse.syson.sysml.InterfaceUsage;
-import org.eclipse.syson.sysml.ItemDefinition;
-import org.eclipse.syson.sysml.ItemUsage;
-import org.eclipse.syson.sysml.Membership;
-import org.eclipse.syson.sysml.Namespace;
-import org.eclipse.syson.sysml.Package;
-import org.eclipse.syson.sysml.ParameterMembership;
-import org.eclipse.syson.sysml.PartDefinition;
-import org.eclipse.syson.sysml.PartUsage;
-import org.eclipse.syson.sysml.PerformActionUsage;
-import org.eclipse.syson.sysml.PortUsage;
-import org.eclipse.syson.sysml.ReferenceSubsetting;
-import org.eclipse.syson.sysml.ReferenceUsage;
-import org.eclipse.syson.sysml.RequirementConstraintKind;
-import org.eclipse.syson.sysml.RequirementConstraintMembership;
-import org.eclipse.syson.sysml.RequirementDefinition;
-import org.eclipse.syson.sysml.RequirementUsage;
-import org.eclipse.syson.sysml.Specialization;
-import org.eclipse.syson.sysml.StakeholderMembership;
-import org.eclipse.syson.sysml.StateDefinition;
-import org.eclipse.syson.sysml.StateSubactionKind;
-import org.eclipse.syson.sysml.StateSubactionMembership;
-import org.eclipse.syson.sysml.StateUsage;
-import org.eclipse.syson.sysml.SubjectMembership;
-import org.eclipse.syson.sysml.Succession;
-import org.eclipse.syson.sysml.SysmlFactory;
-import org.eclipse.syson.sysml.SysmlPackage;
-import org.eclipse.syson.sysml.TransitionUsage;
-import org.eclipse.syson.sysml.Type;
-import org.eclipse.syson.sysml.Usage;
-import org.eclipse.syson.sysml.UseCaseDefinition;
-import org.eclipse.syson.sysml.UseCaseUsage;
-import org.eclipse.syson.sysml.ViewUsage;
-import org.eclipse.syson.sysml.metamodel.services.ElementInitializerSwitch;
-import org.eclipse.syson.sysml.metamodel.services.MetamodelMutationElementService;
-import org.eclipse.syson.sysml.metamodel.util.ElementUtil;
-import org.eclipse.syson.util.NodeFinder;
-
-/**
- * Creation-related Java shared services used by several diagrams.
- *
- * @author arichard
- */
-public class ViewCreateService {
-
- private final IObjectSearchService objectSearchService;
-
- private final IReadOnlyObjectPredicate readOnlyObjectPredicate;
-
- private final ShowDiagramsInheritedMembersService showDiagramsInheritedMembersService;
-
- private final ElementInitializerSwitch elementInitializerSwitch;
-
- private final DeleteService deleteService;
-
- private final UtilService utilService;
-
- private final IFeedbackMessageService feedbackMessageService;
-
- private final MetamodelMutationElementService metamodelElementMutationService;
-
- public ViewCreateService(IObjectSearchService objectSearchService, IReadOnlyObjectPredicate readOnlyObjectPredicate,
- ShowDiagramsInheritedMembersService showDiagramsInheritedMembersService, IFeedbackMessageService feedbackMessageService) {
- this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService);
- this.objectSearchService = Objects.requireNonNull(objectSearchService);
- this.readOnlyObjectPredicate = Objects.requireNonNull(readOnlyObjectPredicate);
- this.showDiagramsInheritedMembersService = Objects.requireNonNull(showDiagramsInheritedMembersService);
- this.elementInitializerSwitch = new ElementInitializerSwitch();
- this.deleteService = new DeleteService();
- this.utilService = new UtilService();
- this.metamodelElementMutationService = new MetamodelMutationElementService();
- }
-
- /**
- * Returns {@code true} if the diagram can be created on the provided {@code element}.
- *
- * @param element
- * the element to check
- * @return {@code true} if the diagram can be created on the provided {@code element}
- */
- public boolean canCreateDiagram(Element element) {
- return true;
- }
-
- /**
- * Call the {@link ElementInitializerSwitch} on the given {@link Element}. Allows to set various
- * attributes/references.
- *
- * @param element
- * the given {@link Element}.
- * @return the given {@link Element}.
- */
- public Element elementInitializer(Element element) {
- return this.elementInitializerSwitch.doSwitch(element);
- }
-
- /**
- * Create the appropriate {@link Membership} child according to the given {@link EClass} type.
- *
- * @param element
- * the given {@link Element}.
- * @param membershipType
- * the type of {@link Membership} to create.
- * @return the newly created {@link Membership}.
- */
- public Membership createMembership(Element element, EClass membershipType) {
- Membership membership = null;
- var eObject = SysmlFactory.eINSTANCE.create(membershipType);
- if (eObject instanceof Membership m) {
- membership = m;
- element.getOwnedRelationship().add(membership);
- }
- return membership;
- }
-
- public Element createCompartmentItem(Element element, String eReferenceName) {
- EStructuralFeature feature = element.eClass().getEStructuralFeature(eReferenceName);
- Element result = element;
- if (feature.getEType() instanceof EClass itemEClass) {
- var item = SysmlFactory.eINSTANCE.create(itemEClass);
- if (item instanceof Element elementItem) {
- var membership = this.createAppropriateMembership(feature);
- element.getOwnedRelationship().add(membership);
- membership.getOwnedRelatedElement().add(elementItem);
- result = this.elementInitializer(elementItem);
- }
- }
- return result;
- }
-
- public Element createCompartmentItemWithDirection(Element element, String eReferenceName, String directionLiteral) {
- EStructuralFeature structuralFeature = element.eClass().getEStructuralFeature(eReferenceName);
- Element result = element;
- if (structuralFeature.getEType() instanceof EClass itemEClass) {
- var item = SysmlFactory.eINSTANCE.create(itemEClass);
- if (item instanceof Element elementItem) {
- var membership = this.createAppropriateMembership(structuralFeature);
- element.getOwnedRelationship().add(membership);
- membership.getOwnedRelatedElement().add(elementItem);
- result = this.elementInitializer(elementItem);
- if (directionLiteral != null && elementItem instanceof Feature feature) {
- feature.setDirection(FeatureDirectionKind.get(directionLiteral));
- result.setDeclaredName(result.getName() + StringUtils.capitalize(directionLiteral));
- }
- }
- }
- return result;
- }
-
- private Membership createAppropriateMembership(EStructuralFeature feature) {
- Membership result = SysmlFactory.eINSTANCE.createFeatureMembership();
- if (feature.getEType().equals(SysmlPackage.eINSTANCE.getEnumerationUsage())) {
- result = SysmlFactory.eINSTANCE.createVariantMembership();
- } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_AssumedConstraint())
- || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_AssumedConstraint())) {
- result = SysmlFactory.eINSTANCE.createRequirementConstraintMembership();
- ((RequirementConstraintMembership) result).setKind(RequirementConstraintKind.ASSUMPTION);
- } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint())
- || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_RequiredConstraint())) {
- result = SysmlFactory.eINSTANCE.createRequirementConstraintMembership();
- ((RequirementConstraintMembership) result).setKind(RequirementConstraintKind.REQUIREMENT);
- } else if (feature.equals(SysmlPackage.eINSTANCE.getElement_Documentation())) {
- result = SysmlFactory.eINSTANCE.createOwningMembership();
- } else if (feature.equals(SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern()) || feature.equals(SysmlPackage.eINSTANCE.getRequirementDefinition_FramedConcern())) {
- result = SysmlFactory.eINSTANCE.createFramedConcernMembership();
- }
- return result;
- }
-
- /**
- * Create a new RequirementUsage and set it as the objective requirement of the self element.
- *
- * @param self
- * the element usage to set the objective for
- * @return the created RequirementUsage
- */
- public Element createRequirementUsageAsObjectiveRequirement(Element self, Element selectedObject) {
- Element result = self;
- if (self instanceof CaseUsage
- || self instanceof CaseDefinition) {
- RequirementUsage newRequirementUsage = SysmlFactory.eINSTANCE.createRequirementUsage();
- result = newRequirementUsage;
- var objectiveMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getObjectiveMembership());
- objectiveMembership.getOwnedRelatedElement().add(newRequirementUsage);
- this.elementInitializerSwitch.doSwitch(newRequirementUsage);
- if (selectedObject instanceof RequirementUsage requirementUsage) {
- this.utilService.setSubsetting(newRequirementUsage, requirementUsage);
- } else if (selectedObject instanceof RequirementDefinition requirementDefinition) {
- this.utilService.setFeatureTyping(newRequirementUsage, requirementDefinition);
- }
- }
- return result;
- }
-
- public Element createReferenceUsageAsSubject(Element self, Element selectedObject) {
- Element result = self;
- if (self instanceof CaseUsage
- || self instanceof CaseDefinition
- || self instanceof RequirementUsage
- || self instanceof RequirementDefinition) {
- ReferenceUsage newReferenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- var subjectMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getSubjectMembership());
- subjectMembership.getOwnedRelatedElement().add(newReferenceUsage);
- this.elementInitializerSwitch.doSwitch(newReferenceUsage);
- if (selectedObject instanceof Usage usage) {
- this.utilService.setSubsetting(newReferenceUsage, usage);
- } else if (selectedObject instanceof Definition definition) {
- this.utilService.setFeatureTyping(newReferenceUsage, definition);
- }
- result = newReferenceUsage;
- }
- return result;
- }
-
- public Element createPartUsageAsActor(Element self, Element selectedObject) {
- Element result = self;
- if (self instanceof CaseUsage
- || self instanceof CaseDefinition
- || self instanceof RequirementUsage
- || self instanceof RequirementDefinition) {
- PartUsage newPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
- var actorMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getActorMembership());
- actorMembership.getOwnedRelatedElement().add(newPartUsage);
- this.elementInitializerSwitch.doSwitch(newPartUsage);
- if (selectedObject instanceof ItemUsage usage) {
- this.utilService.setSubsetting(newPartUsage, usage);
- } else if (selectedObject instanceof ItemDefinition definition) {
- this.utilService.setFeatureTyping(newPartUsage, definition);
- }
- result = newPartUsage;
- }
- return result;
- }
-
- /**
- * Service to create a new stakeholder {@link PartUsage} for a {@link RequirementUsage} or
- * {@link RequirementDefinition}.
- *
- * @param self
- * a {@link RequirementUsage} or {@link RequirementDefinition}, otherwise no {@link PartUsage} will be
- * created.
- * @param selectedObject
- * an {@link ItemUsage} or {@link ItemDefinition} that will be subsetted by (respectively that will type)
- * the created {@link PartUsage}.
- * If {@code null} then the stakeholder {@link PartUsage} will not be subsetted.
- * @return the newly-created {@link PartUsage}, contained by {@code self} through a {@link StakeholderMembership}.
- * If {@code self} was neither a {@link RequirementUsage} nor a {@link RequirementDefinition}, {@code self}
- * is returned as-is.
- */
- public Element createPartUsageAsStakeholder(Element self, Element selectedObject) {
- Element result = self;
- if (self instanceof RequirementUsage || self instanceof RequirementDefinition) {
- var createdPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
- var stakeholderMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getStakeholderMembership());
- stakeholderMembership.getOwnedRelatedElement().add(createdPartUsage);
- this.elementInitializerSwitch.doSwitch(createdPartUsage);
-
- if (selectedObject instanceof ItemUsage selectedItemUsage) {
- this.utilService.setSubsetting(createdPartUsage, selectedItemUsage);
- } else if (selectedObject instanceof ItemDefinition selectedItemDefinition) {
- this.utilService.setFeatureTyping(createdPartUsage, selectedItemDefinition);
- }
-
- result = createdPartUsage;
- }
- return result;
- }
-
- public Element createActionParameter(Element self, String direction) {
- var newReferenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- var featureMembership = this.createMembership(self, SysmlPackage.eINSTANCE.getFeatureMembership());
- featureMembership.getOwnedRelatedElement().add(newReferenceUsage);
- this.elementInitializerSwitch.doSwitch(newReferenceUsage);
- newReferenceUsage.setDirection(FeatureDirectionKind.getByName(direction));
- return newReferenceUsage;
- }
-
- /**
- * Service to check whether the given element has a subject defined or not.
- *
- * @param self
- * a {@link RequirementUsage} or a {@link RequirementDefinition} or a {@link CaseUsage} or a
- * {@link CaseDefinition}
- * @return {@code true} if {@code self} contains a subject and {@code false} otherwise.
- */
- public boolean isEmptySubjectCompartment(Element self) {
- if (self instanceof RequirementUsage
- || self instanceof RequirementDefinition
- || self instanceof CaseUsage
- || self instanceof CaseDefinition) {
- return self.getOwnedRelationship().stream()
- .filter(SubjectMembership.class::isInstance)
- .map(SubjectMembership.class::cast)
- .findFirst()
- .isEmpty();
- }
- // irrelevant case, this service should only be used upon a RequirementUsage/RequirementDefinition/UseCaseUsage
- // or UseCaseDefinition
- return true;
- }
-
- /**
- * Service to check whether the given UseCaseUsage or UseCaseDefinition has an objective requirement defined or not.
- *
- * @param self
- * a {@link UseCaseUsage} or a {@link UseCaseDefinition}
- * @return {@code true} if {@code self} contains a subject and {@code false} otherwise.
- */
- public boolean isEmptyObjectiveRequirementCompartment(Element self) {
- return this.utilService.isEmptyObjectiveRequirement(self);
- }
-
- /**
- * Service to check whether the given element has a subaction of Kind {@code kind} subject defined or not.
- *
- * @param self
- * a {@link StateUsage} or a {@link StateDefinition}
- * @return {@code true} if {@code self} contains a subaction of the specified kind and {@code false} otherwise.
- */
- public boolean isEmptyOfActionKindCompartment(Element self, String kind) {
- if (self instanceof StateUsage
- || self instanceof StateDefinition) {
- return self.getOwnedRelationship().stream()
- .filter(StateSubactionMembership.class::isInstance)
- .map(StateSubactionMembership.class::cast)
- .noneMatch(mem -> mem.getKind().getLiteral().equalsIgnoreCase(kind));
- }
- // irrelevant case, this service should only be used upon a StateUsage/StateDefinition
- return true;
- }
-
- /**
- * Create a new connection end (a ReferenceUsage) in a given ConnectionDefinition.
- *
- * @param self
- * the ConnectionDefinition in which the new end is added.
- * @return the self modified element is returned
- */
- public Element createConnectionDefinitionEnd(ConnectionDefinition self) {
- int suffix = self.getOwnedEndFeature().size() + 1;
- this.addConnectionEnd(self, "end" + suffix);
- return self;
- }
-
- private void addConnectionEnd(ConnectionDefinition connectionDefinition, String name) {
- var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- new ElementInitializerSwitch().doSwitch(referenceUsage);
- referenceUsage.setDeclaredName(name);
- referenceUsage.setIsEnd(true);
- var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- featureMembership.getOwnedRelatedElement().add(referenceUsage);
- connectionDefinition.getOwnedRelationship().add(featureMembership);
- }
-
- /**
- * Create a new interface end (a PortUsage) in a given InterfaceDefinition.
- *
- * @param self
- * the InterfaceDefinition in which the new end is added.
- * @return the self modified element is returned
- */
- public Element createInterfaceDefinitionEnd(InterfaceDefinition self) {
- int suffix = self.getOwnedEndFeature().size() + 1;
- this.addPort(self, "port" + suffix);
- return self;
- }
-
- private void addPort(InterfaceDefinition interfaceDefinition, String name) {
- var portUsage = SysmlFactory.eINSTANCE.createPortUsage();
- new ElementInitializerSwitch().doSwitch(portUsage);
- portUsage.setDeclaredName(name);
- portUsage.setIsEnd(true);
- var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- featureMembership.getOwnedRelatedElement().add(portUsage);
- interfaceDefinition.getOwnedRelationship().add(featureMembership);
- }
-
- /**
- * Create a new IncludeUseCaseUsage.
- *
- * @param source
- * the source usage.
- * @param target
- * the target usage.
- * @return a new {@link IncludeUseCaseUsage}.
- */
- public IncludeUseCaseUsage createIncludeUseCaseUsage(UseCaseUsage source, UseCaseUsage target) {
- var ownerMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- source.getOwnedRelationship().add(ownerMembership);
-
- IncludeUseCaseUsage includeUsage = SysmlFactory.eINSTANCE.createIncludeUseCaseUsage();
- ownerMembership.getOwnedRelatedElement().add(includeUsage);
-
- ReferenceSubsetting refSub = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- includeUsage.getOwnedRelationship().add(refSub);
-
- refSub.setReferencedFeature(target);
- return includeUsage;
- }
-
- public Element createAllocateEdge(Element source, Element target, Node sourceNode, IEditingContext editingContext, IDiagramService diagramService) {
- var owner = source.getOwner();
- var ownerMembership = SysmlFactory.eINSTANCE.createOwningMembership();
- owner.getOwnedRelationship().add(ownerMembership);
- var allocation = SysmlFactory.eINSTANCE.createAllocationUsage();
- ownerMembership.getOwnedRelatedElement().add(allocation);
- // create both ends ReferenceSubsetting
- this.addEndToAllocateEdge(allocation, source);
- this.addEndToAllocateEdge(allocation, target);
- return source;
- }
-
- private void addEndToAllocateEdge(AllocationUsage edge, Element end) {
- if (end instanceof Usage usage) {
- var featureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
- edge.getOwnedRelationship().add(featureMembership);
- var feature = SysmlFactory.eINSTANCE.createFeature();
- featureMembership.getOwnedRelatedElement().add(feature);
- var reference = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- feature.getOwnedRelationship().add(reference);
- reference.setReferencedFeature(usage);
- }
- }
-
- /**
- * Retrieve the parent node's semantic element of the given node
- *
- * @param sourceNode
- * a {@link Node}
- * @param editingContext
- * the {@link IEditingContext} of the tool. It corresponds to a variable accessible from the variable
- * manager.
- * @param diagramService
- * the {@link IDiagramService} used to retrieve diagram
- * @return the semantic element of the parent graphical node of the given Node or null if unable to
- * find it.
- */
- private Element getSourceOwner(Node sourceNode, IEditingContext editingContext, IDiagramService diagramService) {
- Diagram diagram = diagramService.getDiagramContext().diagram();
- var parentNode = new NodeFinder(diagram).getParent(sourceNode);
- if (parentNode instanceof Node node) {
- return this.objectSearchService.getObject(editingContext, node.getTargetObjectId())
- .filter(Element.class::isInstance)
- .map(Element.class::cast)
- .orElse(null);
- }
- return this.objectSearchService.getObject(editingContext, diagram.getTargetObjectId())
- .filter(Element.class::isInstance)
- .map(Element.class::cast)
- .map(this::resolveSemanticOwnerForBackgroundNodeInDiagramContext)
- .orElse(null);
- }
-
- private Element resolveSemanticOwnerForBackgroundNodeInDiagramContext(Element diagramTarget) {
- if (diagramTarget instanceof ViewUsage viewUsage && viewUsage.getOwner() != null) {
- return viewUsage.getOwner();
- }
- return diagramTarget;
- }
-
- public List getInheritedCompartmentItems(Type type, String eReferenceName) {
- boolean showInheritedMembers = this.showDiagramsInheritedMembersService.getShowInheritedMembers();
- boolean showInheritedMembersFromStandardLibraries = this.showDiagramsInheritedMembersService.getShowInheritedMembersFromStandardLibraries();
-
- if (!showInheritedMembers && !showInheritedMembersFromStandardLibraries) {
- return List.of();
- }
-
- List inheritedElements = new ArrayList<>();
- EStructuralFeature eStructuralFeature = type.eClass().getEStructuralFeature(eReferenceName);
- if (eStructuralFeature instanceof EReference eReference) {
- type.getInheritedFeature().stream()
- .filter(feature -> new InheritedCompartmentItemFilterSwitch(eReference).doSwitch(feature))
- .forEach(inheritedElements::add);
- }
- // Removes all features that have been redefined, subsetted, subclassed...
- var alreadySpecializedFeatures = new ArrayList();
- type.getOwnedFeature().stream()
- .flatMap(f -> this.getSpecializationTypeHierarchy(f).stream())
- .filter(Feature.class::isInstance)
- .map(Feature.class::cast)
- .filter(inheritedElements::contains)
- .forEach(alreadySpecializedFeatures::add);
- inheritedElements.stream()
- .flatMap(f -> this.getSpecializationTypeHierarchy(f).stream())
- .filter(Feature.class::isInstance)
- .map(Feature.class::cast)
- .filter(inheritedElements::contains)
- .forEach(alreadySpecializedFeatures::add);
- inheritedElements.removeAll(alreadySpecializedFeatures);
- inheritedElements.remove(type);
-
- if (showInheritedMembers && !showInheritedMembersFromStandardLibraries) {
- inheritedElements.removeIf(ElementUtil::isFromStandardLibrary);
- } else if (showInheritedMembersFromStandardLibraries && !showInheritedMembers) {
- inheritedElements.removeIf(elt -> !ElementUtil.isFromStandardLibrary(elt));
- }
- return inheritedElements;
- }
-
- private List getSpecializationTypeHierarchy(Type type) {
- List specializationTypeHierarchy = new ArrayList<>();
- this.getSpecializationTypeHierarchy(type, specializationTypeHierarchy);
- return specializationTypeHierarchy;
- }
-
- private void getSpecializationTypeHierarchy(Type type, List specializationTypeHierarchy) {
- if (type != null) {
- List specializationTypes = new ArrayList<>();
- type.getOwnedSpecialization().stream()
- .map(Specialization::getGeneral)
- .forEach(general -> {
- if (general != null && !specializationTypeHierarchy.contains(general) && !specializationTypes.contains(general)) {
- specializationTypes.add(general);
- specializationTypeHierarchy.add(general);
- }
- });
- specializationTypes.forEach(speType -> {
- this.getSpecializationTypeHierarchy(speType, specializationTypeHierarchy);
- });
- }
- }
-
- private Package getClosestContainingPackageFrom(Element element) {
- var owner = element.eContainer();
- while (!(owner instanceof Package) && owner != null) {
- owner = owner.eContainer();
- }
- return (Package) owner;
- }
-
- public Element createAcceptAction(Element ownerElement) {
- if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMember);
- var acceptAction = SysmlFactory.eINSTANCE.createAcceptActionUsage();
- featureMember.getOwnedRelatedElement().add(acceptAction);
- this.elementInitializerSwitch.doSwitch(acceptAction);
- return acceptAction;
- }
- return ownerElement;
- }
-
- public Element createAcceptActionPayload(AcceptActionUsage self, String payloadEClassName) {
- var classifier = SysmlPackage.eINSTANCE.getEClassifier(payloadEClassName);
- if (classifier instanceof EClass eClass) {
- var payload = SysmlFactory.eINSTANCE.create(eClass);
- if (payload instanceof Type payloadType) {
- // create the payload definition which is the type of the payload
- payloadType.setDeclaredName(self.getDeclaredName() + "PayloadType");
- var membership = SysmlFactory.eINSTANCE.createOwningMembership();
- membership.getOwnedRelatedElement().add(payloadType);
- var payloadParent = this.getClosestContainingPackageFrom(self);
- payloadParent.getOwnedRelationship().add(membership);
- // reference this payload in the accept action
- var featureTyping = SysmlFactory.eINSTANCE.createFeatureTyping();
- featureTyping.setType(payloadType);
- var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- referenceUsage.setDeclaredName("payload");
- referenceUsage.setDirection(FeatureDirectionKind.INOUT);
- referenceUsage.getOwnedRelationship().add(featureTyping);
- var parameterMembership = this.getPayloadParameterMembership(self);
- var oldParameterContent = parameterMembership.getOwnedMemberParameter();
- if (oldParameterContent != null) {
- // there is already a playload parameter, we need to delete it.
- // its' membership container will be automatically deleted with it
- this.deleteService.deleteFromModel(oldParameterContent);
- }
- parameterMembership = this.getPayloadParameterMembership(self);
- parameterMembership.getOwnedRelatedElement().add(referenceUsage);
- self.getOwnedRelationship().add(parameterMembership);
- }
- }
- return self;
- }
-
- private ParameterMembership getPayloadParameterMembership(AcceptActionUsage acceptActionUsage) {
- var membership = acceptActionUsage.getOwnedRelationship().stream()
- .filter(ParameterMembership.class::isInstance)
- .map(ParameterMembership.class::cast)
- .findFirst()
- .orElse(null);
- if (membership == null) {
- membership = SysmlFactory.eINSTANCE.createParameterMembership();
- } else {
- membership.getOwnedRelatedElement().clear();
- }
- return membership;
- }
-
- private ParameterMembership getReceiverParameterMembership(AcceptActionUsage acceptActionUsage) {
- final ParameterMembership result;
- var memberships = acceptActionUsage.getOwnedRelationship().stream()
- .filter(ParameterMembership.class::isInstance)
- .map(ParameterMembership.class::cast)
- .toList();
- if (memberships.isEmpty()) {
- // add an empty payload
- acceptActionUsage.getOwnedRelationship().add(this.createParameterMembershipWithReferenceUsage());
- result = SysmlFactory.eINSTANCE.createParameterMembership();
- } else if (memberships.size() == 1) {
- result = SysmlFactory.eINSTANCE.createParameterMembership();
- } else {
- result = memberships.get(1);
- }
- return result;
- }
-
- private ParameterMembership createParameterMembershipWithReferenceUsage() {
- var reference = SysmlFactory.eINSTANCE.createReferenceUsage();
- var pm = SysmlFactory.eINSTANCE.createParameterMembership();
- pm.getOwnedRelatedElement().add(reference);
- return pm;
- }
-
- public Element createAcceptActionReceiver(AcceptActionUsage self) {
- // create the port usage
- var newPort = SysmlFactory.eINSTANCE.createPortUsage();
- newPort.setDeclaredName(self.getDeclaredName() + "'s receiver");
- var owningMembership = SysmlFactory.eINSTANCE.createOwningMembership();
- owningMembership.getOwnedRelatedElement().add(newPort);
- var receiverParent = this.getClosestContainingPackageFrom(self);
- receiverParent.getOwnedRelationship().add(owningMembership);
- // reference this port usage as the receiver of the accept action
- var feature = SysmlFactory.eINSTANCE.createFeature();
- feature.setDirection(FeatureDirectionKind.OUT);
- var returnParameterMembership = SysmlFactory.eINSTANCE.createReturnParameterMembership();
- returnParameterMembership.getOwnedRelatedElement().add(feature);
- var membership = SysmlFactory.eINSTANCE.createMembership();
- membership.setMemberElement(newPort);
- var featureReferenceExpression = SysmlFactory.eINSTANCE.createFeatureReferenceExpression();
- featureReferenceExpression.getOwnedRelationship().add(membership);
- featureReferenceExpression.getOwnedRelationship().add(returnParameterMembership);
- var featureValue = SysmlFactory.eINSTANCE.createFeatureValue();
- featureValue.getOwnedRelatedElement().add(featureReferenceExpression);
- var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- referenceUsage.setDeclaredName("receiver");
- referenceUsage.setDirection(FeatureDirectionKind.IN);
- referenceUsage.getOwnedRelationship().add(featureValue);
- var parameterMembership = this.getReceiverParameterMembership(self);
- Feature oldParameterContent = parameterMembership.getOwnedMemberParameter();
- if (oldParameterContent != null) {
- // there is already an element, we need to delete this element
- // its' membership container will be automatically deleted with it
- this.deleteService.deleteFromModel(oldParameterContent);
- }
- parameterMembership = this.getReceiverParameterMembership(self);
- parameterMembership.getOwnedRelatedElement().add(referenceUsage);
- self.getOwnedRelationship().add(parameterMembership);
- return self;
- }
-
- public boolean isEmptyAcceptActionUsageReceiver(Element element) {
- if (element instanceof AcceptActionUsage aau) {
- var receiverExp = aau.getReceiverArgument();
- if (receiverExp != null) {
- var receiverMembership = receiverExp.getOwnedRelationship().stream()
- .filter(Membership.class::isInstance)
- .map(Membership.class::cast)
- .findFirst()
- .orElse(null);
- if (receiverMembership != null) {
- return receiverMembership.getMemberElement() == null;
- }
- }
- }
- return true;
- }
-
- public boolean isEmptyAcceptActionUsagePayload(Element element) {
- boolean result = true;
- if (element instanceof AcceptActionUsage aau) {
- var payloadParameter = aau.getPayloadParameter();
- if (payloadParameter != null && !payloadParameter.getOwnedRelationship().isEmpty()) {
- var type = payloadParameter.getOwnedRelationship().stream()
- .filter(FeatureTyping.class::isInstance)
- .map(FeatureTyping.class::cast)
- .map(FeatureTyping::getType)
- .filter(Objects::nonNull)
- .findFirst()
- .orElse(null);
- return type == null;
- }
- }
- return result;
- }
-
-
- public Element createSuccessionEdge(Element successionSource, Element successionTarget, Node sourceNode, Node targetNode, IEditingContext editingContext, IDiagramService diagramService) {
- if (!this.isInSameGraphicalContainer(sourceNode, targetNode, diagramService)) {
- // The current implementation only rely on the semantic features "sourceFeature" and "targetFeature" to find source and target
- // In order to avoid duplicated edges in case the source/target is displayed more than once we forbid the display of cross container edge
- this.feedbackMessageService.addFeedbackMessage(new Message("Can't create cross container SuccessionAsUsage", MessageLevel.WARNING));
- return successionSource;
- }
- EObject successionOwner = this.getSourceOwner(sourceNode, editingContext, diagramService);
- return this.createSuccessionEdge(successionSource, successionTarget, successionOwner);
- }
-
- private Element createSuccessionEdge(Element successionSource, Element successionTarget, EObject successionOwner) {
- if (successionOwner instanceof Element ownerElement) {
- var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMembership);
- var succession = SysmlFactory.eINSTANCE.createSuccessionAsUsage();
- featureMembership.getOwnedRelatedElement().add(succession);
- this.elementInitializerSwitch.doSwitch(succession);
- var sourceEnd = this.createEndFeatureMembershipFor(successionSource);
- var targetEnd = this.createEndFeatureMembershipFor(successionTarget);
- succession.getOwnedRelationship().add(sourceEnd);
- succession.getOwnedRelationship().add(targetEnd);
- }
- return successionSource;
- }
-
- private EndFeatureMembership createEndFeatureMembershipFor(Element sourceOrTarget) {
- var endFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
- var referenceUsage = SysmlFactory.eINSTANCE.createReferenceUsage();
- referenceUsage.setIsEnd(true);
- var referenceSubSetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- if (sourceOrTarget instanceof Membership membership) {
- // this is a standard start or end action, the actual action is inside the memberElement feature.
- if (membership.getMemberElement() instanceof ActionUsage au) {
- referenceSubSetting.setReferencedFeature(au);
- }
- } else if (sourceOrTarget instanceof ActionUsage au) {
- referenceSubSetting.setReferencedFeature(au);
- }
- referenceUsage.getOwnedRelationship().add(referenceSubSetting);
- endFeatureMembership.getOwnedRelatedElement().add(referenceUsage);
- return endFeatureMembership;
- }
-
- /**
- * Add the standard start action as the child of the given element.
- *
- * @param ownerElement
- * an element that will own the standard start action.
- * @return the {@link Membership} element containing the start action in its memberElement feature.
- */
- public ActionUsage addStartAction(Element ownerElement) {
- return this.utilService.retrieveStandardStartAction(ownerElement);
- }
-
- /**
- * Add the standard start state as the child of the given element.
- *
- * @param ownerElement
- * an element that will own the standard start state.
- * @return the {@link Membership} element containing the start state in its memberElement feature.
- */
- public ActionUsage addStartState(Element ownerElement) {
- return this.utilService.retrieveStandardStartState(ownerElement);
- }
-
- /**
- * Add the standard done action as the child of the given element.
- *
- * @param ownerElement
- * an element that will own the standard done action.
- * @return the {@link Membership} element containing the done action in its memberElement feature.
- */
- public ActionUsage addDoneAction(Element ownerElement) {
- return this.utilService.retrieveStandardDoneAction(ownerElement);
- }
-
- /**
- * Add the standard done state as the child of the given element.
- *
- * @param ownerElement
- * an element that will own the standard done state.
- * @return the {@link Membership} element containing the done state in its memberElement feature.
- */
- public ActionUsage addDoneState(Element ownerElement) {
- return this.utilService.retrieveStandardDoneState(ownerElement);
- }
-
- /**
- * Create a new action {@link ActionUsage} inside the given element which should be an {@link ActionUsage} or an {@link ActionDefinition}.
- *
- * @param ownerElement
- * the owner of the new action usage.
- * @return the newly created action usage.
- */
- public ActionUsage createSubActionUsage(Element ownerElement) {
- var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMembership);
- var newActionUsage = SysmlFactory.eINSTANCE.createActionUsage();
- featureMembership.getOwnedRelatedElement().add(newActionUsage);
- this.elementInitializerSwitch.doSwitch(newActionUsage);
- return newActionUsage;
- }
-
- /**
- * Creation of the semantic elements associated to a Join action.
- *
- * @param ownerElement
- * the element owning the new Join action.
- * @return the new Join action if it has been successfully created or ownerElement otherwise.
- */
- public Element createJoinAction(Element ownerElement) {
- if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- var join = SysmlFactory.eINSTANCE.createJoinNode();
- featureMember.getOwnedRelatedElement().add(join);
- ownerElement.getOwnedRelationship().add(featureMember);
- this.elementInitializerSwitch.doSwitch(join);
- return join;
- }
- return ownerElement;
- }
-
- /**
- * Creation of the semantic elements associated to a Fork action.
- *
- * @param ownerElement
- * the element owning the new Fork action.
- * @return the new Fork action if it has been successfully created or ownerElement otherwise.
- */
- public Element createForkAction(Element ownerElement) {
- if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMember);
- var fork = SysmlFactory.eINSTANCE.createForkNode();
- featureMember.getOwnedRelatedElement().add(fork);
- this.elementInitializerSwitch.doSwitch(fork);
- return fork;
- }
- return ownerElement;
- }
-
- /**
- * Creation of the semantic elements associated to a Merge action.
- *
- * @param ownerElement
- * the element owning the new Merge action.
- * @return the new Merge action if it has been successfully created or ownerElement otherwise.
- */
- public Element createMergeAction(Element ownerElement) {
- if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- var merge = SysmlFactory.eINSTANCE.createMergeNode();
- featureMember.getOwnedRelatedElement().add(merge);
- ownerElement.getOwnedRelationship().add(featureMember);
- this.elementInitializerSwitch.doSwitch(merge);
- return merge;
- }
- return ownerElement;
- }
-
- /**
- * Creation of the semantic elements associated to a Decision action.
- *
- * @param ownerElement
- * the element owning the new Decision action.
- * @return the new Decision action if it has been successfully created or ownerElement otherwise.
- */
- public Element createDecisionAction(Element ownerElement) {
- if (this.isPart(ownerElement) || this.isAction(ownerElement)) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMember);
- var decision = SysmlFactory.eINSTANCE.createDecisionNode();
- featureMember.getOwnedRelatedElement().add(decision);
- this.elementInitializerSwitch.doSwitch(decision);
- return decision;
- }
- return ownerElement;
- }
-
- /**
- * Creation of the semantic elements associated to an Assignment action inside an Action or ActionDefinition.
- *
- * @param ownerElement
- * the element owning the new Assignment action.
- * @return the new Assignment action if it has been successfully created or ownerElement otherwise.
- */
- public Element createAssignmentAction(Element ownerElement) {
- if (ownerElement instanceof ActionUsage || ownerElement instanceof ActionDefinition) {
- var featureMember = SysmlFactory.eINSTANCE.createFeatureMembership();
- ownerElement.getOwnedRelationship().add(featureMember);
- var assignmentAction = SysmlFactory.eINSTANCE.createAssignmentActionUsage();
- featureMember.getOwnedRelatedElement().add(assignmentAction);
- this.elementInitializerSwitch.doSwitch(assignmentAction);
- return assignmentAction;
- }
- return ownerElement;
- }
-
- public Element createPerformAction(Element ownerElement) {
- // no subsetting relationship for the performed action since it is the same as the perform action
- var featureMember = this.metamodelElementMutationService.createMembership(ownerElement);
- ownerElement.getOwnedRelationship().add(featureMember);
- var perform = SysmlFactory.eINSTANCE.createPerformActionUsage();
- featureMember.getOwnedRelatedElement().add(perform);
- this.elementInitializerSwitch.doSwitch(perform);
- return perform;
- }
-
- private boolean isPart(Element element) {
- return element instanceof PartUsage || element instanceof PartDefinition;
- }
-
- private boolean isAction(Element element) {
- return element instanceof ActionUsage || element instanceof ActionDefinition;
- }
-
- /**
- * Creates a new sibling part usage as well as a subsetting edge between those parts.
- *
- * @param self
- * the {@link PartUsage} to subset by a new part usage
- * @return the new part usage or self if something went wrong.
- */
- public PartUsage createPartUsageAndSubsetting(PartUsage self) {
- var parent = self.getOwner();
- if (parent != null) {
- // create a new part usage
- var membership = SysmlFactory.eINSTANCE.createOwningMembership();
- parent.getOwnedRelationship().add(membership);
- var newPartUsage = SysmlFactory.eINSTANCE.createPartUsage();
- membership.getOwnedRelatedElement().add(newPartUsage);
- this.elementInitializer(newPartUsage);
- // create subsetting edge between self and new part usage
- this.utilService.setSubsetting(self, newPartUsage);
- return newPartUsage;
- }
- return self;
- }
-
- /**
- * Creates a new sibling part definition as well as a feature typing edge between the part usage and the part definition.
- *
- * @param self
- * the {@link PartUsage} to type by a new part definition
- * @return the new part definition or self if something went wrong.
- */
- public Element createPartDefinitionAndFeatureTyping(PartUsage self) {
- var parent = self.getOwner();
- if (parent != null) {
- // create a new definition associated to the given part usage
- var membership = SysmlFactory.eINSTANCE.createOwningMembership();
- parent.getOwnedRelationship().add(membership);
- var newPartDefinition = this.utilService.createPartDefinitionFrom(self);
- membership.getOwnedRelatedElement().add(newPartDefinition);
- this.elementInitializerSwitch.doSwitch(newPartDefinition);
- // create feature typing edge between self and new part definition
- this.utilService.setFeatureTyping(self, newPartDefinition);
- return newPartDefinition;
- }
- return self;
- }
-
- public Element createNamespaceImport(Element self, Namespace importedNamespace) {
- if (self instanceof Namespace namespace) {
- var namespaceImport = SysmlFactory.eINSTANCE.createNamespaceImport();
- namespace.getOwnedRelationship().add(namespaceImport);
- this.elementInitializer(namespaceImport);
- namespaceImport.setImportedNamespace(importedNamespace);
- return namespaceImport;
- }
- return self;
- }
-
- /**
- * Deprecated. Prefer the use of :
- *
- *
- * {@link org.eclipse.syson.diagram.services.DiagramMutationElementService#createInterfaceUsage(PortUsage, PortUsage, Node, Node, IEditingContext, DiagramContext)}
- * {@link MetamodelMutationElementService#createInterfaceUsage(PortUsage, PortUsage, Namespace)}
- *
- */
- @Deprecated
- public InterfaceUsage createInterfaceUsage(PortUsage sourcePort, PortUsage targetPort) {
- Namespace interfaceContainer = this.getClosestContainingDefinitionOrPackageFrom(sourcePort);
- if (interfaceContainer == null) {
- return null;
- }
-
- InterfaceUsage interfaceUsage = SysmlFactory.eINSTANCE.createInterfaceUsage();
- this.metamodelElementMutationService.addChildInParent(interfaceContainer, interfaceUsage);
- this.elementInitializer(interfaceUsage);
- // Edges should have an empty default name. This is not the case when using the initializer, because
- // InterfaceUsage can be a node, which requires a default name.
- interfaceUsage.setDeclaredName("");
-
- EndFeatureMembership sourceEndFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
- interfaceUsage.getOwnedRelationship().add(sourceEndFeatureMembership);
- Feature sourceFeature = SysmlFactory.eINSTANCE.createFeature();
- sourceFeature.setIsEnd(true);
- sourceEndFeatureMembership.getOwnedRelatedElement().add(sourceFeature);
- this.elementInitializer(sourceFeature);
- ReferenceSubsetting sourceReferenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- sourceFeature.getOwnedRelationship().add(sourceReferenceSubsetting);
- this.elementInitializer(sourceReferenceSubsetting);
- sourceReferenceSubsetting.setReferencedFeature(sourcePort);
-
- EndFeatureMembership targetEndFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
- interfaceUsage.getOwnedRelationship().add(targetEndFeatureMembership);
- Feature targetFeature = SysmlFactory.eINSTANCE.createFeature();
- targetFeature.setIsEnd(true);
- targetEndFeatureMembership.getOwnedRelatedElement().add(targetFeature);
- this.elementInitializer(targetFeature);
- ReferenceSubsetting targetReferenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- targetFeature.getOwnedRelationship().add(targetReferenceSubsetting);
- this.elementInitializer(targetReferenceSubsetting);
- targetReferenceSubsetting.setReferencedFeature(targetPort);
-
- return interfaceUsage;
- }
-
- /**
- * Deprecated. Prefer the use of :
- *
- *
- * {@link org.eclipse.syson.diagram.services.DiagramMutationElementService#createFlowUsage(Feature, Feature, Node, Node, IEditingContext, DiagramContext)}
- * {@link MetamodelMutationElementService#createFlowUsage(Feature, Feature, Namespace)}
- *
- */
- @Deprecated
- public FlowUsage createFlowUsage(Feature source, Feature target) {
- Namespace flowContainer = this.getClosestContainingDefinitionOrPackageFrom(source);
- if (flowContainer == null) {
- return null;
- }
- FeatureMembership featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- flowContainer.getOwnedRelationship().add(featureMembership);
-
- FlowUsage flowUsage = SysmlFactory.eINSTANCE.createFlowUsage();
- this.metamodelElementMutationService.addChildInParent(flowContainer, flowUsage);
- this.elementInitializer(flowUsage);
-
- // Once this method is removed, set MetamodelMutationElementService.createFlowConnectionEnd private
- flowUsage.getOwnedRelationship().add(this.metamodelElementMutationService.createFlowConnectionEnd(source));
- flowUsage.getOwnedRelationship().add(this.metamodelElementMutationService.createFlowConnectionEnd(target));
-
- return flowUsage;
- }
-
- /**
- * Deprecated. Prefer the use of :
- *
- *
- * {@link org.eclipse.syson.diagram.services.DiagramMutationElementService#createBindingConnectorAsUsage(Feature, Feature, Node, Node, IEditingContext, DiagramContext)}
- * {@link MetamodelMutationElementService#createBindingConnectorAsUsage(Feature, Feature, Namespace)}
- *
- */
- public BindingConnectorAsUsage createBindingConnectorAsUsage(Feature source, Feature target) {
-
- var connectorContainer = this.utilService.getConnectorContainer(source, target);
- if (connectorContainer == null) {
- this.feedbackMessageService.addFeedbackMessage(new Message("Unable to find a suitable Type to hold the new binding connector.", MessageLevel.WARNING));
- return null;
- }
-
- var bindingConnectorAsUsage = SysmlFactory.eINSTANCE.createBindingConnectorAsUsage();
- this.metamodelElementMutationService.addChildInParent(connectorContainer, bindingConnectorAsUsage);
- this.elementInitializer(bindingConnectorAsUsage);
-
- Element sourceContainer = null;
- Element targetContainer = null;
- this.metamodelElementMutationService.setConnectorEnds(bindingConnectorAsUsage, source, target, sourceContainer, targetContainer, connectorContainer);
-
- return bindingConnectorAsUsage;
- }
-
- /**
- * Creates a state sub action (entry, do or exit actions) as a child of the given StateUsage or StateDefinition.
- *
- * @param self
- * the StateUsage or StateDefinition owning the sub action
- * @param performedAction
- * an ActionUsage or null. If set the new PerformAction should reference this action.
- * @param kindLiteral
- * the kind of the StateSubactionMembership owning the PerformAction
- * @return the new PerformAction or null if self is not a State
- */
- public PerformActionUsage createStateSubaction(Element self, ActionUsage performedAction, String kindLiteral) {
- if (self instanceof StateUsage || self instanceof StateDefinition) {
- StateSubactionMembership stateSubactionMembership = (StateSubactionMembership) this.createMembership(self, SysmlPackage.eINSTANCE.getStateSubactionMembership());
- stateSubactionMembership.setKind(StateSubactionKind.get(kindLiteral));
- var performAction = SysmlFactory.eINSTANCE.createPerformActionUsage();
- stateSubactionMembership.getOwnedRelatedElement().add(performAction);
- this.elementInitializerSwitch.doSwitch(performAction);
- if (performedAction != null) {
- // set the reference subsetting relationship to the performed action
- var referenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- referenceSubsetting.setReferencedFeature(performedAction);
- performAction.getOwnedRelationship().add(referenceSubsetting);
- }
- return performAction;
- }
- return null;
- }
-
- /**
- * Create a new TransitionUsage and set it as the child of the parent of the source {@link Feature}. Sets its source
- * and target.
- *
- * @param sourceUsage
- * the {@link Feature} used as a source for the transition
- * @param targetUsage
- * the {@link Feature} used as a target for the transition
- * @param source
- * the node of the source
- * @param target
- * the node of the target
- * @param diagramService
- * service used to navigate inside the diagram
- * @param editingContext
- * the current editing context
- * @return the given source {@link Feature}.
- */
- public Feature createTransitionUsage(Feature sourceUsage, Feature targetUsage, Node source, Node target, IDiagramService diagramService, IEditingContext editingContext) {
- if (!this.isInSameGraphicalContainer(source, target, diagramService)) {
- // The current implementation only rely on the semantic features "sourceFeature" and "targetFeature" to find source and target
- // In order to avoid duplicated edges in case the source/target is displayed more than once we forbid the display of cross container edge
- this.feedbackMessageService.addFeedbackMessage(new Message("Can't create cross container TransitionUsage", MessageLevel.WARNING));
- return sourceUsage;
- }
- EObject transitionOwner = this.getSourceOwner(source, editingContext, diagramService);
- return this.createTransitionUsage(sourceUsage, targetUsage, transitionOwner);
- }
-
- private Feature createTransitionUsage(Feature sourceUsage, Feature targetUsage , EObject transitionOwner) {
- if (transitionOwner instanceof Element ownerElement) {
- // Create transition usage and add it to the parent element
- // sourceParentElement <>-> FeatureMembership -> RelatedElement = TransitionUsage
- TransitionUsage newTransitionUsage = SysmlFactory.eINSTANCE.createTransitionUsage();
- var featureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- featureMembership.getOwnedRelatedElement().add(newTransitionUsage);
- ownerElement.getOwnedRelationship().add(featureMembership);
-
- // Create EndFeature
- // TransitionUsage <>-> Membership -> MemberElement = sourceAction
- var sourceMembership = SysmlFactory.eINSTANCE.createMembership();
- newTransitionUsage.getOwnedRelationship().add(sourceMembership);
- sourceMembership.setMemberElement(sourceUsage);
-
- // Create Succession
- // TransitionUsage <>-> FeatureMembership -> RelatedElement = succession
- Succession succession = SysmlFactory.eINSTANCE.createSuccession();
- this.elementInitializerSwitch.doSwitch(succession);
- var successionFeatureMembership = SysmlFactory.eINSTANCE.createFeatureMembership();
- successionFeatureMembership.getOwnedRelatedElement().add(succession);
- newTransitionUsage.getOwnedRelationship().add(successionFeatureMembership);
-
- // Set Succession Source and Target Features
- succession.getOwnedRelationship().add(this.createConnectorEndFeatureMembership(sourceUsage));
- succession.getOwnedRelationship().add(this.createConnectorEndFeatureMembership(targetUsage));
- this.elementInitializerSwitch.doSwitch(newTransitionUsage);
- } else {
- this.feedbackMessageService.addFeedbackMessage(new Message("Unable to find a suitable semantic owner for the new transition", MessageLevel.WARNING));
- }
- return sourceUsage;
- }
-
-
- private Element getEdgeSemanticContainer(Node source, Node target, Diagram diagram, IEditingContext editingContext) {
- final Element semanticContainer;
- Element semanticSourceGraphicalParent = this.getGraphicalContainerSemanticElement(source, diagram, editingContext);
- if (semanticSourceGraphicalParent != null && !this.readOnlyObjectPredicate.test(semanticSourceGraphicalParent)) {
- semanticContainer = semanticSourceGraphicalParent;
- } else {
- Element semanticTargetGraphicalParent = this.getGraphicalContainerSemanticElement(target, diagram, editingContext);
- if (semanticTargetGraphicalParent != null && !this.readOnlyObjectPredicate.test(semanticTargetGraphicalParent)) {
- semanticContainer = semanticTargetGraphicalParent;
- } else {
- semanticContainer = null;
- }
- }
- return semanticContainer;
- }
-
- private Element getGraphicalContainerSemanticElement(Node node, Diagram diagram, IEditingContext editingContext) {
- Object parent = new NodeFinder(diagram).getParent(node);
- final Element semanticParent;
- if (parent instanceof Node parentNode) {
- semanticParent = this.objectSearchService.getObject(editingContext, parentNode.getTargetObjectId())
- .filter(Element.class::isInstance)
- .map(Element.class::cast)
- .orElse(null);
- } else if (parent instanceof Diagram parentDiagram) {
- semanticParent = this.objectSearchService.getObject(editingContext, parentDiagram.getTargetObjectId())
- .filter(Element.class::isInstance)
- .map(Element.class::cast)
- .orElse(null);
-
- } else {
- semanticParent = null;
- }
- return semanticParent;
- }
-
- /**
- * <>-> EndFeatureMembership -> RelatedElement = Feature <>-> ReferenceSubsetting -> ReferencedFeature = feature
- *
- * @param feature
- * The feature to reference subset
- * @return
- */
- private EndFeatureMembership createConnectorEndFeatureMembership(Feature feature) {
- var successionSourceEndFeatureMembership = SysmlFactory.eINSTANCE.createEndFeatureMembership();
- var successionSourceEndFeatureFeature = SysmlFactory.eINSTANCE.createFeature();
- successionSourceEndFeatureMembership.getOwnedRelatedElement().add(successionSourceEndFeatureFeature);
-
- var successionSourceRefSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting();
- successionSourceRefSubsetting.setReferencedFeature(feature);
- successionSourceEndFeatureFeature.getOwnedRelationship().add(successionSourceRefSubsetting);
- return successionSourceEndFeatureMembership;
- }
-
- private boolean isInSameGraphicalContainer(Node sourceNode, Node targetNode, IDiagramService diagramService) {
- Diagram diagram = diagramService.getDiagramContext().diagram();
- var sourceParentNode = new NodeFinder(diagram).getParent(sourceNode);
- var targetParentNode = new NodeFinder(diagram).getParent(targetNode);
- return Objects.equals(sourceParentNode, targetParentNode);
- }
-
- private Namespace getClosestContainingDefinitionOrPackageFrom(Element element) {
- var owner = element.eContainer();
- while (!(owner instanceof Package || owner instanceof Definition) && owner != null) {
- owner = owner.eContainer();
- }
- return (Namespace) owner;
- }
-
-
-}
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java
index c157463b5..33defbde8 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java
@@ -90,7 +90,7 @@ public EdgeTool createDependencyEdgeTool(List targetElementDesc
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setClient = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getDependency_Client().getName())
@@ -136,7 +136,7 @@ public EdgeTool createSubclassificationEdgeTool(List targetElem
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setSubclassifier = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getSubclassification_Subclassifier().getName())
@@ -199,7 +199,7 @@ public EdgeTool createRedefinitionEdgeTool(List targetElementDe
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setRedefiningFeature = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getRedefinition_RedefiningFeature().getName())
@@ -272,7 +272,7 @@ public EdgeTool createSubsettingEdgeTool(List targetElementDesc
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setSubsettingFeature = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getSubsetting_SubsettingFeature().getName())
@@ -336,7 +336,7 @@ public EdgeTool createReferenceSubsettingEdgeTool(List targetEl
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setReferencedFeature = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().getName())
@@ -476,7 +476,7 @@ public EdgeTool createFeatureTypingEdgeTool(List targetElementD
var builder = this.diagramBuilderHelper.newEdgeTool();
var callElementInitializerService = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aqlSelf());
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aqlSelf());
var setTypedFeature = this.viewBuilderHelper.newSetValue()
.featureName(SysmlPackage.eINSTANCE.getFeatureTyping_TypedFeature().getName())
@@ -581,7 +581,7 @@ public EdgeTool createTransitionUsageEdgeTool(EClass eClass, List targetElemen
.findFirst().get();
var body = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of1(ViewCreateService::createIncludeUseCaseUsage).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET));
+ .expression(ServiceMethod.of1(DiagramMutationAQLService::createIncludeUseCaseUsage).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET));
return builder.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getIncludeUseCaseUsage()))
.iconURLsExpression(METAMODEL_ICONS_PATH + SysmlPackage.eINSTANCE.getIncludeUseCaseUsage().getName() + SVG)
@@ -615,7 +615,7 @@ public EdgeTool createAllocateEdgeTool(List targetElementDescri
.toArray(NodeDescription[]::new);
var body = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of4(ViewCreateService::createAllocateEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
+ .expression(ServiceMethod.of4(DiagramMutationAQLService::createAllocateEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
IEditingContext.EDITING_CONTEXT, IDiagramService.DIAGRAM_SERVICES));
return builder.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getAllocationUsage()))
@@ -628,7 +628,7 @@ public EdgeTool createAllocateEdgeTool(List targetElementDescri
public EdgeTool createSuccessionEdgeTool(List targetElementDescriptions) {
var builder = this.diagramBuilderHelper.newEdgeTool();
var body = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of5(ViewCreateService::createSuccessionEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
+ .expression(ServiceMethod.of5(DiagramMutationAQLService::createSuccessionEdge).aql(EdgeDescription.SEMANTIC_EDGE_SOURCE, EdgeDescription.SEMANTIC_EDGE_TARGET, EdgeDescription.EDGE_SOURCE,
EdgeDescription.EDGE_TARGET, IEditingContext.EDITING_CONTEXT, IDiagramService.DIAGRAM_SERVICES));
return builder.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getSuccession()))
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersDataFetcher.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersDataFetcher.java
index e183f7cb8..1d8524188 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersDataFetcher.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersDataFetcher.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher;
import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates;
-import org.eclipse.syson.diagram.common.view.services.ShowDiagramsInheritedMembersService;
+import org.eclipse.syson.diagram.services.ShowDiagramsInheritedMembersService;
import graphql.schema.DataFetchingEnvironment;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersFromStandardLibrariesDataFetcher.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersFromStandardLibrariesDataFetcher.java
index 0dd92ba79..388c672d5 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersFromStandardLibrariesDataFetcher.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/datafetchers/ShowDiagramsInheritedMembersFromStandardLibrariesDataFetcher.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher;
import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates;
-import org.eclipse.syson.diagram.common.view.services.ShowDiagramsInheritedMembersService;
+import org.eclipse.syson.diagram.services.ShowDiagramsInheritedMembersService;
import graphql.schema.DataFetchingEnvironment;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/description/ToolDescriptionService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/description/ToolDescriptionService.java
index 65ec2e8ce..33428bb41 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/description/ToolDescriptionService.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/description/ToolDescriptionService.java
@@ -32,9 +32,8 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.NodeToolSection;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.Element;
@@ -197,7 +196,6 @@ public NodeToolSection relatedElementsGroupToolSection() {
public NodeTool addExistingElementsTool(boolean recursive, boolean nested) {
var builder = this.diagramBuilderHelper.newNodeTool();
-
var addToExposedElements = this.viewBuilderHelper.newChangeContext()
.expression(
ServiceMethod.of5(DiagramMutationAQLService.class, DiagramMutationAQLService::addToExposedElements, Element.class, boolean.class, IEditingContext.class, DiagramContext.class,
@@ -475,7 +473,7 @@ public NodeTool createNodeToolFromDiagramWithDirection(NodeDescription nodeDescr
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql(NEW_INSTANCE));
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql(NEW_INSTANCE));
var createDiagramIfNeeded = this.viewBuilderHelper.newChangeContext()
.expression(ServiceMethod.of1(DiagramMutationAQLService::createDiagram).aqlSelf(IEditingContext.EDITING_CONTEXT));
@@ -563,7 +561,7 @@ public NodeTool createNodeToolWithDirection(NodeDescription nodeDescription, ECl
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql(NEW_INSTANCE));
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql(NEW_INSTANCE));
if (direction != null) {
changeContextNewInstance.children(setDirection.build(), updateExposedElements.build());
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersEventHandler.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersEventHandler.java
index fe0ee5391..5299f3198 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersEventHandler.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersEventHandler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 2025 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -24,9 +24,9 @@
import org.eclipse.sirius.components.core.api.ErrorPayload;
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.core.api.IPayload;
-import org.eclipse.syson.diagram.common.view.services.ShowDiagramsInheritedMembersService;
import org.eclipse.syson.diagram.common.view.services.dto.ShowDiagramsInheritedMembersInput;
import org.eclipse.syson.diagram.common.view.services.dto.ShowDiagramsInheritedMembersSuccessPayload;
+import org.eclipse.syson.diagram.services.ShowDiagramsInheritedMembersService;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Sinks.Many;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersFromStandardLibrariesEventHandler.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersFromStandardLibrariesEventHandler.java
index bf8df720e..d4e598428 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersFromStandardLibrariesEventHandler.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/handlers/ShowDiagramsInheritedMembersFromStandardLibrariesEventHandler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 2025 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -24,9 +24,9 @@
import org.eclipse.sirius.components.core.api.ErrorPayload;
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.core.api.IPayload;
-import org.eclipse.syson.diagram.common.view.services.ShowDiagramsInheritedMembersService;
import org.eclipse.syson.diagram.common.view.services.dto.ShowDiagramsInheritedMembersFromStandardLibrariesInput;
import org.eclipse.syson.diagram.common.view.services.dto.ShowDiagramsInheritedMembersFromStandardLibrariesSuccessPayload;
+import org.eclipse.syson.diagram.services.ShowDiagramsInheritedMembersService;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Sinks.Many;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionNodeToolProvider.java
index fa9aba40b..bd26e6cce 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionNodeToolProvider.java
@@ -14,7 +14,7 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -37,7 +37,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createAcceptAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createAcceptAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionPortUsageReceiverToolNodeProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionPortUsageReceiverToolNodeProvider.java
index f0f603c46..7599c5033 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionPortUsageReceiverToolNodeProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AcceptActionPortUsageReceiverToolNodeProvider.java
@@ -17,7 +17,8 @@
import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders;
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.PortUsage;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLConstants;
@@ -39,7 +40,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
var builder = this.diagramBuilderHelper.newNodeTool();
var creationPayloadServiceCall = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::createAcceptActionReceiver).aqlSelf())
+ .expression(ServiceMethod.of0(DiagramMutationAQLService::createAcceptActionReceiver).aqlSelf())
.build();
var rootChangContext = this.viewBuilderHelper.newChangeContext()
@@ -50,7 +51,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
return builder.name("New Port as Receiver")
.iconURLsExpression("/icons/full/obj16/" + SysmlPackage.eINSTANCE.getPortUsage().getName() + ".svg")
.body(rootChangContext)
- .preconditionExpression(ServiceMethod.of0(ViewCreateService::isEmptyAcceptActionUsageReceiver).aqlSelf())
+ .preconditionExpression(ServiceMethod.of0(DiagramQueryAQLService::isEmptyAcceptActionUsageReceiver).aqlSelf())
.build();
}
}
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActionFlowCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActionFlowCompartmentNodeToolProvider.java
index fe8fa5080..19ffe6327 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActionFlowCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActionFlowCompartmentNodeToolProvider.java
@@ -21,7 +21,6 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
@@ -58,7 +57,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
var letNewInstance = this.viewBuilderHelper.newLet()
.variableName(NEW_INSTANCE)
- .valueExpression(ServiceMethod.of0(ViewCreateService::createSubActionUsage).aqlSelf())
+ .valueExpression(ServiceMethod.of0(DiagramMutationAQLService::createSubActionUsage).aqlSelf())
.children(creationServiceCall)
.build();
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActorCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActorCompartmentNodeToolProvider.java
index 42619b285..2ee615c5d 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActorCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ActorCompartmentNodeToolProvider.java
@@ -15,9 +15,9 @@
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.trees.renderer.TreeRenderer;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -31,7 +31,7 @@ public class ActorCompartmentNodeToolProvider extends AbstractCompartmentNodeToo
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of1(ViewCreateService::createPartUsageAsActor).aqlSelf("selectedObject");
+ return ServiceMethod.of1(DiagramMutationAQLService::createPartUsageAsActor).aqlSelf("selectedObject");
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AnnotatingElementOnRelationshipNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AnnotatingElementOnRelationshipNodeToolProvider.java
index 23ea24dd5..ae4f2290e 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AnnotatingElementOnRelationshipNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AnnotatingElementOnRelationshipNodeToolProvider.java
@@ -24,8 +24,8 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.AnnotatingElement;
import org.eclipse.syson.sysml.Relationship;
import org.eclipse.syson.sysml.SysmlPackage;
@@ -63,7 +63,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance"))
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newInstance"))
.children(updateExposedElements.build());
var setAnnotatedElement = this.viewBuilderHelper.newSetValue()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AssignmentActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AssignmentActionNodeToolProvider.java
index 884691dac..49bdf9209 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AssignmentActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AssignmentActionNodeToolProvider.java
@@ -14,7 +14,7 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -37,7 +37,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createAssignmentAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createAssignmentAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/CompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/CompartmentNodeToolProvider.java
index 11ea0d97b..da8783c12 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/CompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/CompartmentNodeToolProvider.java
@@ -14,7 +14,7 @@
import org.apache.commons.lang3.StringUtils;
import org.eclipse.emf.ecore.EReference;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.FeatureDirectionKind;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.IDescriptionNameGenerator;
@@ -51,10 +51,10 @@ public IDescriptionNameGenerator getDescriptionNameGenerator() {
@Override
protected String getServiceCallExpression() {
if (this.featureDirectionKind != null) {
- return ServiceMethod.of2(ViewCreateService::createCompartmentItemWithDirection).aqlSelf(AQLUtils.aqlString(this.eReference.getName()),
+ return ServiceMethod.of2(DiagramMutationAQLService::createCompartmentItemWithDirection).aqlSelf(AQLUtils.aqlString(this.eReference.getName()),
AQLUtils.aqlString(this.featureDirectionKind.getLiteral()));
} else {
- return ServiceMethod.of1(ViewCreateService::createCompartmentItem).aqlSelf(AQLUtils.aqlString(this.eReference.getName()));
+ return ServiceMethod.of1(DiagramMutationAQLService::createCompartmentItem).aqlSelf(AQLUtils.aqlString(this.eReference.getName()));
}
}
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ConnectionDefinitionEndCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ConnectionDefinitionEndCompartmentNodeToolProvider.java
index aa1d22d1d..19190360b 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ConnectionDefinitionEndCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ConnectionDefinitionEndCompartmentNodeToolProvider.java
@@ -12,7 +12,7 @@
*******************************************************************************/
package org.eclipse.syson.diagram.common.view.tools;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.util.ServiceMethod;
/**
@@ -24,7 +24,7 @@ public class ConnectionDefinitionEndCompartmentNodeToolProvider extends Abstract
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createConnectionDefinitionEnd).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createConnectionDefinitionEnd).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java
index 6ae460945..74577eee8 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.DecisionActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createDecisionAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createDecisionAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java
index 958d93449..d858bef2a 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.DoneActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::addDoneAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::addDoneAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneStateNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneStateNodeToolProvider.java
index e18f75690..947743cfd 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneStateNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneStateNodeToolProvider.java
@@ -15,7 +15,7 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.diagram.common.view.nodes.DoneStateNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StateTransitionCompartmentNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -37,7 +37,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::addDoneState).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::addDoneState).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ExhibitStateNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ExhibitStateNodeToolProvider.java
index f90d4cb4d..59d6b3c54 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ExhibitStateNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ExhibitStateNodeToolProvider.java
@@ -23,11 +23,11 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -62,7 +62,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.children(setReferencedFeature.build());
var initializeReferenceSubsetting = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newRefSubsetting"));
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newRefSubsetting"));
var createReferenceSubsettingInstance = this.viewBuilderHelper.newCreateInstance()
.typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getReferenceSubsetting()))
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FlowNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FlowNodeToolProvider.java
index ae4b65cd0..96a768131 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FlowNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FlowNodeToolProvider.java
@@ -20,12 +20,12 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.ConnectionUsage;
import org.eclipse.syson.sysml.Flow;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java
index 942ad997d..0e6220f6a 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.ForkActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createForkAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createForkAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java
index 2bab79b63..4f96ed131 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java
@@ -23,10 +23,10 @@
import org.eclipse.sirius.components.view.diagram.DialogDescription;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/InterfaceDefinitionEndCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/InterfaceDefinitionEndCompartmentNodeToolProvider.java
index 7f2b86a49..b7024a07e 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/InterfaceDefinitionEndCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/InterfaceDefinitionEndCompartmentNodeToolProvider.java
@@ -12,7 +12,7 @@
*******************************************************************************/
package org.eclipse.syson.diagram.common.view.tools;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.util.ServiceMethod;
/**
@@ -24,7 +24,7 @@ public class InterfaceDefinitionEndCompartmentNodeToolProvider extends AbstractC
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createInterfaceDefinitionEnd).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createInterfaceDefinitionEnd).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java
index 35a672c91..90f14b4c2 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.JoinActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createJoinAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createJoinAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java
index 1b5dc15f5..155ee2a1b 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.MergeActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createMergeAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createMergeAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/NamespaceImportNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/NamespaceImportNodeToolProvider.java
index 090ba422e..8e514052c 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/NamespaceImportNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/NamespaceImportNodeToolProvider.java
@@ -25,11 +25,11 @@
import org.eclipse.sirius.components.view.diagram.NodeDescription;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.NamespaceImport;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -66,7 +66,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.semanticElementExpression(AQLConstants.AQL_SELF);
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of1(ViewCreateService::createNamespaceImport).aqlSelf("selectedObject"))
+ .expression(ServiceMethod.of1(DiagramMutationAQLService::createNamespaceImport).aqlSelf("selectedObject"))
.children(createView.build());
var changeContextViewUsageOwner = this.viewBuilderHelper.newChangeContext()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementCompartmentNodeToolProvider.java
index ce85b41c8..4ef0e56a4 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementCompartmentNodeToolProvider.java
@@ -15,10 +15,11 @@
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.trees.renderer.TreeRenderer;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.RequirementUsage;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -37,7 +38,7 @@ public class ObjectiveRequirementCompartmentNodeToolProvider extends AbstractCom
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of1(ViewCreateService::createRequirementUsageAsObjectiveRequirement).aqlSelf("selectedObject");
+ return ServiceMethod.of1(DiagramMutationAQLService::createRequirementUsageAsObjectiveRequirement).aqlSelf("selectedObject");
}
@Override
@@ -79,7 +80,7 @@ protected String getNodeToolIconURLsExpression() {
@Override
protected String getPreconditionExpression() {
- return ServiceMethod.of0(ViewCreateService::isEmptyObjectiveRequirementCompartment).aqlSelf();
+ return ServiceMethod.of0(DiagramQueryAQLService::isEmptyObjectiveRequirementCompartment).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageSnapshotNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageSnapshotNodeToolProvider.java
index b408ce15b..d4ee85266 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageSnapshotNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageSnapshotNodeToolProvider.java
@@ -23,8 +23,8 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogTreeDescription;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.PortionKind;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
@@ -63,7 +63,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance"))
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newInstance"))
.children(
updateExposedElements.build(),
setSnapshot.build()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageTimesliceNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageTimesliceNodeToolProvider.java
index 9d15f3c2c..cb4bd32c0 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageTimesliceNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/OccurrenceUsageTimesliceNodeToolProvider.java
@@ -23,7 +23,6 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogTreeDescription;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.PortionKind;
@@ -64,7 +63,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance"))
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newInstance"))
.children(
updateExposedElements.build(),
setTimeSlice.build()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ParameterCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ParameterCompartmentNodeToolProvider.java
index 9fff5e401..8e8ff87a4 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ParameterCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ParameterCompartmentNodeToolProvider.java
@@ -14,7 +14,7 @@
import java.util.Objects;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.FeatureDirectionKind;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.ServiceMethod;
@@ -34,7 +34,7 @@ public ParameterCompartmentNodeToolProvider(FeatureDirectionKind direction) {
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of1(ViewCreateService::createActionParameter).aqlSelf(AQLUtils.aqlString(this.direction.getName()));
+ return ServiceMethod.of1(DiagramMutationAQLService::createActionParameter).aqlSelf(AQLUtils.aqlString(this.direction.getName()));
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageBindingConnectorAsUsageNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageBindingConnectorAsUsageNodeToolProvider.java
index 6da551935..f384bca38 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageBindingConnectorAsUsageNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageBindingConnectorAsUsageNodeToolProvider.java
@@ -71,4 +71,3 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.build();
}
}
-
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFeatureTypingNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFeatureTypingNodeToolProvider.java
index 4da0fa017..687b15c4f 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFeatureTypingNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFeatureTypingNodeToolProvider.java
@@ -24,7 +24,6 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLConstants;
@@ -57,7 +56,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var creationFeatureTypingServiceCall = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::createPartDefinitionAndFeatureTyping).aqlSelf())
+ .expression(ServiceMethod.of0(DiagramMutationAQLService::createPartDefinitionAndFeatureTyping).aqlSelf())
.children(updateExposedElements.build());
var rootChangContext = this.viewBuilderHelper.newChangeContext()
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFlowConnectionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFlowConnectionNodeToolProvider.java
index ed55d608f..ed4e9f8eb 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFlowConnectionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageFlowConnectionNodeToolProvider.java
@@ -71,4 +71,3 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.build();
}
}
-
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageInterfaceNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageInterfaceNodeToolProvider.java
index ae37f82c8..0b39abc98 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageInterfaceNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageInterfaceNodeToolProvider.java
@@ -71,4 +71,3 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.build();
}
}
-
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageSubsettingNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageSubsettingNodeToolProvider.java
index f39f0fc73..d9e7dcd6d 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageSubsettingNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PartUsageSubsettingNodeToolProvider.java
@@ -24,7 +24,6 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLConstants;
@@ -57,7 +56,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var creationSubsettingServiceCall = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::createPartUsageAndSubsetting).aqlSelf())
+ .expression(ServiceMethod.of0(DiagramMutationAQLService::createPartUsageAndSubsetting).aqlSelf())
.children(updateExposedElements.build())
.build();
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java
index 9a20d982f..0709dad54 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java
@@ -20,10 +20,10 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -37,7 +37,7 @@ public class PerformActionNodeToolProvider extends AbstractCompartmentNodeToolPr
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::createPerformAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::createPerformAction).aqlSelf();
}
@Override
@@ -68,7 +68,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.children(setReferencedFeature.build());
var initializeReferenceSubsetting = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newRefSubsetting"));
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newRefSubsetting"));
var createReferenceSubsettingInstance = this.viewBuilderHelper.newCreateInstance()
.typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getReferenceSubsetting()))
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyNodeToolProvider.java
index c2cd1363d..477d4c1b1 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyNodeToolProvider.java
@@ -24,10 +24,10 @@
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.ServiceMethod;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyRequirementNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyRequirementNodeToolProvider.java
index 6ef0b3fec..8c02a43b7 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyRequirementNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SatisfyRequirementNodeToolProvider.java
@@ -25,10 +25,10 @@
import org.eclipse.sirius.components.view.diagram.DialogDescription;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.ServiceMethod;
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java
index bd9f24403..4bb8d3750 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StakeholdersCompartmentNodeToolProvider.java
@@ -15,11 +15,11 @@
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.trees.renderer.TreeRenderer;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.sysml.RequirementDefinition;
import org.eclipse.syson.sysml.RequirementUsage;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -34,7 +34,7 @@ public class StakeholdersCompartmentNodeToolProvider extends AbstractCompartment
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of1(ViewCreateService::createPartUsageAsStakeholder).aqlSelf("selectedObject");
+ return ServiceMethod.of1(DiagramMutationAQLService::createPartUsageAsStakeholder).aqlSelf("selectedObject");
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java
index f2ccee66d..fb955a61e 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java
@@ -18,7 +18,7 @@
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -41,7 +41,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::addStartAction).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::addStartAction).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartStateNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartStateNodeToolProvider.java
index 905672351..3b0b9d3cd 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartStateNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartStateNodeToolProvider.java
@@ -15,7 +15,7 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.diagram.common.view.nodes.StartStateNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StateTransitionCompartmentNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
@@ -37,7 +37,7 @@ protected String getNodeDescriptionName() {
@Override
protected String getCreationServiceCallExpression() {
- return ServiceMethod.of0(ViewCreateService::addStartState).aqlSelf();
+ return ServiceMethod.of0(DiagramMutationAQLService::addStartState).aqlSelf();
}
@Override
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StateSubactionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StateSubactionNodeToolProvider.java
index 9c0794d44..c63e0d98f 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StateSubactionNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StateSubactionNodeToolProvider.java
@@ -28,11 +28,11 @@
import org.eclipse.sirius.components.view.diagram.DialogDescription;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.StateSubactionKind;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.ServiceMethod;
@@ -61,7 +61,7 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.name(this.getNodeToolLabel())
.iconURLsExpression("/icons/full/obj16/PerformActionUsage.svg")
.body(this.getCreateSubactionOperation())
- .preconditionExpression(ServiceMethod.of1(ViewCreateService::isEmptyOfActionKindCompartment).aqlSelf(AQLUtils.aqlString(this.kind.getLiteral())))
+ .preconditionExpression(ServiceMethod.of1(DiagramQueryAQLService::isEmptyOfActionKindCompartment).aqlSelf(AQLUtils.aqlString(this.kind.getLiteral())))
.dialogDescription(this.getExistingActionSelectionDialog())
.build();
}
@@ -76,7 +76,7 @@ private ChangeContext getCreateSubactionOperation() {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
return this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of2(ViewCreateService::createStateSubaction).aqlSelf("selectedObject", AQLUtils.aqlString(this.kind.getLiteral())))
+ .expression(ServiceMethod.of2(DiagramMutationAQLService::createStateSubaction).aqlSelf("selectedObject", AQLUtils.aqlString(this.kind.getLiteral())))
.children(revealOperation.build())
.build();
}
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SubjectCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SubjectCompartmentNodeToolProvider.java
index 11f14983a..32e91febc 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SubjectCompartmentNodeToolProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/SubjectCompartmentNodeToolProvider.java
@@ -15,9 +15,10 @@
import org.eclipse.sirius.components.core.api.IEditingContext;
import org.eclipse.sirius.components.trees.renderer.TreeRenderer;
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
-import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.tree.services.aql.TreeQueryAQLService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -31,7 +32,7 @@ public class SubjectCompartmentNodeToolProvider extends AbstractCompartmentNodeT
@Override
protected String getServiceCallExpression() {
- return ServiceMethod.of1(ViewCreateService::createReferenceUsageAsSubject).aqlSelf("selectedObject");
+ return ServiceMethod.of1(DiagramMutationAQLService::createReferenceUsageAsSubject).aqlSelf("selectedObject");
}
@Override
@@ -71,7 +72,7 @@ protected String getNodeToolIconURLsExpression() {
@Override
protected String getPreconditionExpression() {
- return ServiceMethod.of0(ViewCreateService::isEmptySubjectCompartment).aqlSelf();
+ return ServiceMethod.of0(DiagramQueryAQLService::isEmptySubjectCompartment).aqlSelf();
}
@Override
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java
index f6600f759..136594b9f 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java
@@ -71,7 +71,6 @@
import org.eclipse.syson.diagram.common.view.nodes.StateTransitionCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StatesCompartmentItemNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StatesCompartmentNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.description.ToolConstants;
import org.eclipse.syson.diagram.common.view.services.description.ToolDescriptionService;
import org.eclipse.syson.diagram.common.view.tools.DecisionActionNodeToolProvider;
@@ -85,6 +84,7 @@
import org.eclipse.syson.diagram.common.view.tools.StartActionNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.ToolSectionDescription;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.standard.diagrams.view.edges.AllocateEdgeDescriptionProvider;
import org.eclipse.syson.standard.diagrams.view.edges.BindingConnectorAsUsageEdgeDescriptionProvider;
import org.eclipse.syson.standard.diagrams.view.edges.ConnectionUsageEdgeDescriptionProvider;
@@ -349,7 +349,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
.domainType(domainType)
.layoutOption(DiagramLayoutOption.NONE)
.minimapVisible(true)
- .preconditionExpression(ServiceMethod.of0(ViewCreateService::canCreateDiagram).aqlSelf())
+ .preconditionExpression(ServiceMethod.of0(DiagramQueryAQLService::canCreateDiagram).aqlSelf())
.name(DESCRIPTION_NAME)
.style(new DiagramBuilders().newDiagramStyleDescription().build())
.conditionalStyles(emptyDiagramStyle)
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVJavaServiceProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVJavaServiceProvider.java
index e8699f656..e2f1270ed 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVJavaServiceProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVJavaServiceProvider.java
@@ -16,7 +16,6 @@
import org.eclipse.sirius.components.view.View;
import org.eclipse.sirius.components.view.emf.IJavaServiceProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.ViewLabelService;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
@@ -45,7 +44,6 @@ public List> getServiceClasses(View view) {
.findFirst();
if (optGVDescription.isPresent()) {
return List.of(DeleteService.class,
- ViewCreateService.class,
ViewLabelService.class,
UtilService.class,
DiagramMutationAQLService.class,
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/DefinitionNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/DefinitionNodeDescriptionProvider.java
index 3cceba6bb..cbe98e514 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/DefinitionNodeDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/DefinitionNodeDescriptionProvider.java
@@ -35,8 +35,8 @@
import org.eclipse.syson.diagram.common.view.nodes.JoinActionNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.MergeActionNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.diagram.common.view.nodes.StartStateNodeDescriptionProvider;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator;
import org.eclipse.syson.standard.diagrams.view.SDVDiagramDescriptionProvider;
import org.eclipse.syson.standard.diagrams.view.services.SDVNodeToolSectionSwitch;
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/InheritedPortUsageBorderNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/InheritedPortUsageBorderNodeDescriptionProvider.java
index 0bda79ede..cb8bead6d 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/InheritedPortUsageBorderNodeDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/InheritedPortUsageBorderNodeDescriptionProvider.java
@@ -24,7 +24,7 @@
import org.eclipse.sirius.components.view.diagram.OutsideLabelDescription;
import org.eclipse.sirius.components.view.diagram.OutsideLabelPosition;
import org.eclipse.syson.diagram.common.view.nodes.AbstractPortUsageBorderNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
@@ -44,7 +44,7 @@ public InheritedPortUsageBorderNodeDescriptionProvider(EReference eReference, IC
@Override
protected String getSemanticCandidatesExpression() {
- return ServiceMethod.of1(ViewCreateService::getInheritedCompartmentItems).aqlSelf(AQLUtils.aqlString(this.eReference.getName()));
+ return ServiceMethod.of1(DiagramQueryAQLService::getInheritedCompartmentItems).aqlSelf(AQLUtils.aqlString(this.eReference.getName()));
}
@Override
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java
index 12bee5bff..a068dea55 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/UsageNodeDescriptionProvider.java
@@ -35,8 +35,8 @@
import org.eclipse.syson.diagram.common.view.nodes.JoinActionNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.MergeActionNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider;
-import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.diagram.common.view.nodes.StartStateNodeDescriptionProvider;
+import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator;
import org.eclipse.syson.standard.diagrams.view.SDVDiagramDescriptionProvider;
import org.eclipse.syson.standard.diagrams.view.services.SDVNodeToolSectionSwitch;
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ViewUsageNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ViewUsageNodeDescriptionProvider.java
index d3a359927..ea17e0cce 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ViewUsageNodeDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ViewUsageNodeDescriptionProvider.java
@@ -45,7 +45,6 @@
import org.eclipse.sirius.components.view.diagram.UserResizableDirection;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
import org.eclipse.syson.diagram.common.view.nodes.AbstractNodeDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.ViewLabelService;
import org.eclipse.syson.diagram.common.view.services.description.ToolConstants;
import org.eclipse.syson.diagram.common.view.services.description.ToolDescriptionService;
@@ -55,6 +54,7 @@
import org.eclipse.syson.diagram.common.view.tools.ToolSectionDescription;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
+import org.eclipse.syson.model.services.aql.ModelMutationAQLService;
import org.eclipse.syson.services.DeleteService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.standard.diagrams.view.SDVDiagramDescriptionProvider;
@@ -248,7 +248,7 @@ protected NodeTool createNodeTool(NodeDescription nodeDescription, EClass eClass
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
- .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance"))
+ .expression(ServiceMethod.of0(ModelMutationAQLService::initialize).aql("newInstance"))
.children(updateExposedElements.build());
var createEClassInstance = this.viewBuilderHelper.newCreateInstance()
diff --git a/scripts/check-coverage.jsh b/scripts/check-coverage.jsh
index e2dd45cd8..d00a6a38f 100755
--- a/scripts/check-coverage.jsh
+++ b/scripts/check-coverage.jsh
@@ -34,7 +34,7 @@ var moduleCoverageData = List.of(
new ModuleCoverage("syson-application", 37.0),
new ModuleCoverage("syson-application-configuration", 77.0),
new ModuleCoverage("syson-common-view", 100.0),
- new ModuleCoverage("syson-diagram-common-view", 94.0),
+ new ModuleCoverage("syson-diagram-common-view", 97.0),
new ModuleCoverage("syson-diagram-services", 81.0),
new ModuleCoverage("syson-direct-edit-grammar", 66.0),
new ModuleCoverage("syson-form-services", 100.0),
@@ -43,7 +43,7 @@ var moduleCoverageData = List.of(
new ModuleCoverage("syson-services", 70.0),
new ModuleCoverage("syson-siriusweb-customnodes-metamodel", 41.0),
new ModuleCoverage("syson-siriusweb-customnodes-metamodel-edit", 0.0),
- new ModuleCoverage("syson-standard-diagrams-view", 98.0),
+ new ModuleCoverage("syson-standard-diagrams-view", 97.0),
new ModuleCoverage("syson-sysml-export", 71.0),
new ModuleCoverage("syson-sysml-import", 86.0),
new ModuleCoverage("syson-sysml-metamodel", 76.0),