Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,8 @@ private OutsideLabelStyle createOutsideLabelStyle() {

@Override
public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) {
// this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription
// children instead
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(this.getNodeDescriptionName())).ifPresent(nodeDescription -> {
diagramDescription.getNodeDescriptions().add(nodeDescription);
nodeDescription.setPalette(this.createNodePalette(cache));
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,18 +112,6 @@ protected NodeStyleDescription createFakeNodeStyle() {
}

protected void addReusableCustomNodes(IViewDiagramElementFinder cache, List<NodeDescription> childrenNodes) {
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DecisionActionNodeDescriptionProvider.DECISION_ACTION_NAME))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you want to change that?
Is there a problem with adding them as children of the FakeNodeDescription?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since there is no reusedChildren api on DiagramDescription, I don't see other option than moving all node descriptions as children of diagram description.

.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(ForkActionNodeDescriptionProvider.FORK_ACTION_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(JoinActionNodeDescriptionProvider.JOIN_ACTION_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(MergeActionNodeDescriptionProvider.MERGE_ACTION_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(StartActionNodeDescriptionProvider.START_ACTION_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DoneActionNodeDescriptionProvider.DONE_ACTION_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(StartStateNodeDescriptionProvider.START_STATE_NAME))
.ifPresent(childrenNodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DoneStateNodeDescriptionProvider.DONE_STATE_NAME))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class DecisionActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider {

public static final String DECISION_ACTION_NAME = "DecisionAction";
public static final String DECISION_ACTION_NAME = SysmlPackage.eINSTANCE.getDecisionNode().getName();

public DecisionActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider, descriptionNameGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,8 @@ public NodeDescription create() {

@Override
public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) {
// this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription
// children instead
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DONE_ACTION_NAME)).ifPresent(nodeDescription -> {
diagramDescription.getNodeDescriptions().add(nodeDescription);
nodeDescription.setPalette(this.createNodePalette());
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class ForkActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider {

public static final String FORK_ACTION_NAME = "ForkAction";
public static final String FORK_ACTION_NAME = SysmlPackage.eINSTANCE.getForkNode().getName();

public ForkActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider, descriptionNameGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class JoinActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider {

public static final String JOIN_ACTION_NAME = "JoinAction";
public static final String JOIN_ACTION_NAME = SysmlPackage.eINSTANCE.getJoinNode().getName();

public JoinActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider, descriptionNameGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class MergeActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider {

public static final String MERGE_ACTION_NAME = "MergeAction";
public static final String MERGE_ACTION_NAME = SysmlPackage.eINSTANCE.getMergeNode().getName();

public MergeActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider, descriptionNameGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,8 @@ public NodeDescription create() {

@Override
public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) {
// this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription
// children instead
cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(START_ACTION_NAME)).ifPresent(nodeDescription -> {
diagramDescription.getNodeDescriptions().add(nodeDescription);
nodeDescription.setPalette(this.createNodePalette(cache));
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,17 @@ public ViewToolService(IIdentityService identityService, IObjectSearchService ob
this.labelService = Objects.requireNonNull(labelService);
}

/**
* Check if a tool that will create a control node action (start, done, decision, fork, join, merge) should be available or not.
* @param element the given {@link Element}.
* @return <code>true</code> if the tool should be available, <code>false</code> otherwise.
*/
public boolean isControlNodeActionCreationToolInsideActionOnAFV(Element element, IEditingContext editingContext) {
ViewDefinitionKind viewDefinitionKind = this.utilService.getViewDefinitionKind(element, List.of(), editingContext);
var owner = this.utilService.getViewUsageOwner(element);
return viewDefinitionKind == ViewDefinitionKind.ACTION_FLOW_VIEW && (owner instanceof ActionUsage || owner instanceof ActionDefinition);
}

/**
* Check if a tool that will create an instance of the given type should be available for a diagram associated to
* the given {@link Element}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter;
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -115,18 +117,30 @@ public NodeTool create(IViewDiagramElementFinder cache) {
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));

var revealOperation = this.viewBuilderHelper.newChangeContext()
.expression(ServiceMethod.of4(DiagramMutationAQLService::revealCompartment)
.aql(Node.SELECTED_NODE, "self", DiagramContext.DIAGRAM_CONTEXT, IEditingContext.EDITING_CONTEXT, ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));
.expression(ServiceMethod.of4(DiagramMutationAQLService::revealCompartment).aql(Node.SELECTED_NODE, AQLConstants.SELF, DiagramContext.DIAGRAM_CONTEXT, IEditingContext.EDITING_CONTEXT,
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));

var conditionalRevealOperation = this.viewBuilderHelper.newIf()
.conditionExpression(AQLConstants.AQL + Node.SELECTED_NODE + " <> null")
.children(revealOperation.build());

var creationServiceCall = this.viewBuilderHelper.newChangeContext()
var changeContextCreateInstance = this.viewBuilderHelper.newChangeContext()
.expression(this.getCreationServiceCallExpression())
.children(addToExposedElements.build(), revealOperation.build());
.children(conditionalRevealOperation.build(), addToExposedElements.build());

var changeContextViewUsageOwner = this.viewBuilderHelper.newChangeContext()
.expression(ServiceMethod.of0(UtilService::getViewUsageOwner).aqlSelf())
.children(changeContextCreateInstance.build());

var changeContextRoot = this.viewBuilderHelper.newChangeContext()
.expression(AQLConstants.AQL_SELF)
.children(changeContextViewUsageOwner.build());

String preconditionExpression = this.getPreconditionServiceCallExpression();

return builder.name(this.getLabel())
.iconURLsExpression(this.getIconPath())
.body(creationServiceCall.build())
.body(changeContextRoot.build())
.preconditionExpression(preconditionExpression)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/full/obj16/DecisionNode.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/done_action.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/full/obj16/ForkNode.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/full/obj16/JoinNode.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/full/obj16/MergeNode.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.sirius.components.core.api.IEditingContext;
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.common.view.services.ViewToolService;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

Expand Down Expand Up @@ -49,4 +51,9 @@ protected String getLabel() {
protected String getIconPath() {
return "/icons/start_action.svg";
}

@Override
protected String getPreconditionServiceCallExpression() {
return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,15 @@
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;
import org.eclipse.syson.diagram.common.view.tools.DoneActionNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.ExhibitStateNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.ForkActionNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.JoinActionNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.MergeActionNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.NamespaceImportNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.SetAsViewToolProvider;
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.standard.diagrams.view.edges.AllocateEdgeDescriptionProvider;
Expand Down Expand Up @@ -1101,6 +1107,14 @@ private List<IDiagramElementDescriptionProvider<?>> createAllUsageBehaviorCompos
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getDecisionNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getForkNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getJoinNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getMergeNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getAllocationUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAllocation(),
colorProvider, this.getDescriptionNameGenerator()));
usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getExhibitStateUsage(), SysmlPackage.eINSTANCE.getUsage_NestedState(),
Expand Down Expand Up @@ -1629,6 +1643,12 @@ private List<NodeTool> addCustomTools(IViewDiagramElementFinder cache, String se
if (BEHAVIOR_TOOL_SECTION.name().equals(sectionName)) {
nodeTools.add(new ExhibitStateNodeToolProvider(false).create(cache));
nodeTools.add(new ExhibitStateNodeToolProvider(true).create(cache));
nodeTools.add(new StartActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
nodeTools.add(new DoneActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
nodeTools.add(new JoinActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
nodeTools.add(new DecisionActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
nodeTools.add(new ForkActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
nodeTools.add(new MergeActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache));
} else if (STRUCTURE_TOOL_SECTION.name().equals(sectionName)) {
NodeDescription nodeDescription = cache.getNodeDescription(this.getDescriptionNameGenerator().getNodeName(SysmlPackage.eINSTANCE.getNamespaceImport())).orElse(null);
nodeTools.add(new NamespaceImportNodeToolProvider(nodeDescription, this.getDescriptionNameGenerator()).create(cache));
Expand Down
Loading