From 0e3aa83ffc50a06ebdf03519442f87099eb3a691 Mon Sep 17 00:00:00 2001 From: Axel RICHARD Date: Mon, 13 Jul 2026 19:12:17 +0200 Subject: [PATCH] [enh] Move view create services to new service architecture Signed-off-by: Axel RICHARD --- CHANGELOG.adoc | 5 + .../DiagramMutationElementService.java | 216 ++- .../services/DiagramMutationToolService.java | 702 ++++++++- .../services/DiagramQueryToolService.java | 182 ++- .../services/DiagramQueryViewService.java | 11 + .../InheritedCompartmentItemFilterSwitch.java | 140 +- .../ShowDiagramsInheritedMembersService.java | 4 +- .../aql/DiagramMutationAQLService.java | 227 ++- .../services/aql/DiagramQueryAQLService.java | 50 + .../services/aql/ModelMutationAQLService.java | 7 + ...nnectorAsUsageEdgeDescriptionProvider.java | 2 - ...tractFlowUsageEdgeDescriptionProvider.java | 2 - ...bstractPackageNodeDescriptionProvider.java | 5 +- ...ompartmentItemNodeDescriptionProvider.java | 4 +- .../StartActionNodeDescriptionProvider.java | 4 +- ...ionCompartmentNodeDescriptionProvider.java | 2 +- .../view/services/ViewCreateService.java | 1280 ----------------- .../view/services/ViewEdgeToolService.java | 20 +- ...owDiagramsInheritedMembersDataFetcher.java | 4 +- ...mbersFromStandardLibrariesDataFetcher.java | 4 +- .../description/ToolDescriptionService.java | 8 +- ...wDiagramsInheritedMembersEventHandler.java | 4 +- ...bersFromStandardLibrariesEventHandler.java | 4 +- .../tools/AcceptActionNodeToolProvider.java | 4 +- ...tionPortUsageReceiverToolNodeProvider.java | 7 +- ...ActionFlowCompartmentNodeToolProvider.java | 3 +- .../ActorCompartmentNodeToolProvider.java | 6 +- ...ElementOnRelationshipNodeToolProvider.java | 4 +- .../AssignmentActionNodeToolProvider.java | 4 +- .../tools/CompartmentNodeToolProvider.java | 6 +- ...initionEndCompartmentNodeToolProvider.java | 4 +- .../tools/DecisionActionNodeToolProvider.java | 4 +- .../tools/DoneActionNodeToolProvider.java | 4 +- .../view/tools/DoneStateNodeToolProvider.java | 4 +- .../tools/ExhibitStateNodeToolProvider.java | 6 +- .../view/tools/FlowNodeToolProvider.java | 2 +- .../tools/ForkActionNodeToolProvider.java | 4 +- .../tools/FramedConcernNodeToolProvider.java | 2 +- ...initionEndCompartmentNodeToolProvider.java | 4 +- .../tools/JoinActionNodeToolProvider.java | 4 +- .../tools/MergeActionNodeToolProvider.java | 4 +- .../NamespaceImportNodeToolProvider.java | 6 +- ...equirementCompartmentNodeToolProvider.java | 9 +- ...currenceUsageSnapshotNodeToolProvider.java | 4 +- ...urrenceUsageTimesliceNodeToolProvider.java | 3 +- .../ParameterCompartmentNodeToolProvider.java | 4 +- ...ndingConnectorAsUsageNodeToolProvider.java | 1 - ...artUsageFeatureTypingNodeToolProvider.java | 3 +- ...rtUsageFlowConnectionNodeToolProvider.java | 1 - .../PartUsageInterfaceNodeToolProvider.java | 1 - .../PartUsageSubsettingNodeToolProvider.java | 3 +- .../tools/PerformActionNodeToolProvider.java | 8 +- .../view/tools/SatisfyNodeToolProvider.java | 2 +- .../SatisfyRequirementNodeToolProvider.java | 2 +- ...akeholdersCompartmentNodeToolProvider.java | 6 +- .../tools/StartActionNodeToolProvider.java | 4 +- .../tools/StartStateNodeToolProvider.java | 4 +- .../tools/StateSubactionNodeToolProvider.java | 8 +- .../SubjectCompartmentNodeToolProvider.java | 9 +- .../view/SDVDiagramDescriptionProvider.java | 4 +- .../diagrams/view/SDVJavaServiceProvider.java | 2 - .../DefinitionNodeDescriptionProvider.java | 2 +- ...ortUsageBorderNodeDescriptionProvider.java | 4 +- .../nodes/UsageNodeDescriptionProvider.java | 2 +- .../ViewUsageNodeDescriptionProvider.java | 4 +- scripts/check-coverage.jsh | 4 +- 66 files changed, 1618 insertions(+), 1445 deletions(-) rename backend/{views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view => services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram}/services/InheritedCompartmentItemFilterSwitch.java (62%) rename backend/{views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view => services/syson-diagram-services/src/main/java/org/eclipse/syson/diagram}/services/ShowDiagramsInheritedMembersService.java (95%) delete mode 100644 backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewCreateService.java 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),