Skip to content
Open
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
18 changes: 18 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,24 @@ As a result, the following GraphQL mutations have been removed `exposeRequiremen
- https://github.com/eclipse-syson/syson/issues/2045[#2045] [diagrams] The service `ViewNodeService#revealCompartment` has been changed to reveal a compartment only when it is needed.
+ Only reveal a compartment of a node when none of the revealed compartment can display the `targetElement`.
+ If many compartment candidates exist, choose the first free form compartment.
- [services] As part of the migration to the new diagram service architecture, the following methods have been moved out of `ViewNodeService` (which as been deleted):
+
** `List<Element> getExposedElements(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.getExposedElements(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `List<Element> getExposedElements(Element self, Element parent, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.getExposedElements(Element self, Element parent, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `boolean isView(Element self, String viewDefinition, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.isView(Element self, String viewDefinition, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `boolean isView(Element self, String viewDefinition, Node selectedNode, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.isView(Element self, String viewDefinition, Node selectedNode, IEditingContext editingContext, DiagramContext diagramContext)`
** `boolean isHiddenByDefault(Element self, String compartmentName, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.isHiddenByDefault(Element self, String compartmentName, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `List<PartUsage> getExposedActors(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.getExposedActors(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `List<PartUsage> getExposedStakeholders(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.getExposedStakeholders(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `List<ReferenceUsage> getExposedSubjects(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)` to `DiagramQueryAQLService.getExposedSubjects(Element self, EClass domainType, List<Object> ancestors, IEditingContext editingContext, DiagramContext diagramContext)`
** `List<Element> getAllReachableRequirements(EObject self)` to `DiagramQueryAQLService.getAllReachableRequirements(EObject self)`
** `boolean isAncestorOf(org.eclipse.sirius.components.representations.Element parentNodeElement, org.eclipse.sirius.components.representations.Element childNodeElement, DiagramRenderingCache cache)` to `DiagramQueryAQLService.isAncestorOf(org.eclipse.sirius.components.representations.Element parentNodeElement, org.eclipse.sirius.components.representations.Element childNodeElement, DiagramRenderingCache cache)`
** `boolean showAnnotatingNode(Element self, DiagramContext diagramContext, IEditingContext editingContext)` to `DiagramQueryAQLService.showAnnotatingNode(Element self, DiagramContext diagramContext, IEditingContext editingContext)`
** `Node revealCompartment(Node selectedNode, Element targetElement, DiagramContext diagramContext, IEditingContext editingContext, Map<org.eclipse.sirius.components.view.diagram.NodeDescription, org.eclipse.sirius.components.diagrams.description.NodeDescription> convertedNodes)` to `DiagramMutationAQLService.revealCompartment(Node selectedNode, Element targetElement, DiagramContext diagramContext, IEditingContext editingContext, Map<org.eclipse.sirius.components.view.diagram.NodeDescription, org.eclipse.sirius.components.diagrams.description.NodeDescription> convertedNodes)`
** `org.eclipse.syson.diagram.common.view.services.ViewFilterSwitch` to `org.eclipse.syson.diagram.services.utils.ViewFilterSwitch`
** `org.eclipse.syson.diagram.common.view.services.RevealCompartmentSwitch` to `org.eclipse.syson.diagram.services.utils.RevealCompartmentSwitch`
+
Also, a new helper method `DiagramQueryAQLService.isNotAncestorOf(...)` has been added to support edge preconditions previously written as `aql:not graphicalEdgeSource.isAncestorOf(graphicalEdgeTarget, cache)`.

=== Dependency update

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@
import java.util.Objects;
import java.util.UUID;

import org.eclipse.acceleo.query.services.EObjectServices;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.syson.sysml.Element;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory.Descriptor;
import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistry;
import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer;
Expand Down Expand Up @@ -60,7 +65,6 @@
import org.eclipse.syson.model.services.aql.ModelQueryAQLService;
import org.eclipse.syson.services.UtilService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.helper.LabelConstants;
import org.eclipse.syson.util.AQLConstants;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.ServiceMethod;
Expand Down Expand Up @@ -140,7 +144,7 @@ public void addPropertiesDescriptions(IPropertiesDescriptionRegistry registry) {
// The FormDescription must be part of View inside a proper EMF Resource to be correctly handled
URI uri = URI.createURI(IEMFEditingContext.RESOURCE_SCHEME + ":///" + UUID.nameUUIDFromBytes(SysMLv2PropertiesConfigurer.class.getCanonicalName().getBytes()));
Resource resource = new XMIResourceImpl(uri);
View view = org.eclipse.sirius.components.view.ViewFactory.eINSTANCE.createView();
View view = ViewFactory.eINSTANCE.createView();

view.eAllContents().forEachRemaining(eObject -> {
eObject.eAdapters().add(new IDAdapter(UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes())));
Expand Down Expand Up @@ -263,8 +267,8 @@ private GroupDescription createExtraRedefinitionPropertiesGroup() {
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget.setExpression("aql:self.handleReferenceWidgetNewValue('" + SysmlPackage.eINSTANCE.getRedefinition_RedefinedFeature().getName() + "', " + ViewFormDescriptionConverter.NEW_VALUE
+ LabelConstants.CLOSE_PARENTHESIS);
setRefWidget.setExpression(ServiceMethod.of2(DetailsViewService::handleReferenceWidgetNewValue)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getRedefinition_RedefinedFeature().getName()), ViewFormDescriptionConverter.NEW_VALUE));
refWidget.getBody().add(setRefWidget);

group.getChildren().add(refWidget);
Expand All @@ -287,9 +291,8 @@ private GroupDescription createExtraReferenceSubsettingPropertiesGroup() {
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget
.setExpression("aql:self.handleReferenceWidgetNewValue('" + SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().getName() + "', " + ViewFormDescriptionConverter.NEW_VALUE
+ LabelConstants.CLOSE_PARENTHESIS);
setRefWidget.setExpression(ServiceMethod.of2(DetailsViewService::handleReferenceWidgetNewValue)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getReferenceSubsetting_ReferencedFeature().getName()), ViewFormDescriptionConverter.NEW_VALUE));
refWidget.getBody().add(setRefWidget);

group.getChildren().add(refWidget);
Expand All @@ -307,14 +310,15 @@ private GroupDescription createExtraStatesubactionMembershipKindPropertiesGroup(
RadioDescription radio = FormFactory.eINSTANCE.createRadioDescription();
radio.setName("ExtraRadioKindWidget");
radio.setLabelExpression("Kind");
radio.setCandidatesExpression(AQLUtils.getSelfServiceCallExpression("getEnumCandidates", AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName())));
radio.setCandidatesExpression(ServiceMethod.of1(DetailsViewService.class, DetailsViewService::getEnumCandidates, Element.class, String.class)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName())));
radio.setCandidateLabelExpression("aql:candidate.name");
radio.setValueExpression(AQLUtils.getSelfServiceCallExpression("getEnumValue", AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName())));
radio.setValueExpression(ServiceMethod.of1(DetailsViewService.class, DetailsViewService::getEnumValue, Element.class, String.class)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName())));
radio.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setNewValueOperation = ViewFactory.eINSTANCE.createChangeContext();
setNewValueOperation
.setExpression(
AQLUtils.getSelfServiceCallExpression("setNewValue", List.of(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName()), "newValue.instance")));
setNewValueOperation.setExpression(ServiceMethod.of2(DetailsViewService.class, DetailsViewService::setNewValue, Element.class, String.class, Object.class)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getStateSubactionMembership_Kind().getName()), "newValue.instance"));
radio.getBody().add(setNewValueOperation);

group.getChildren().add(radio);
Expand All @@ -337,8 +341,8 @@ private GroupDescription createExtraSubclassificationPropertiesGroup() {
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget.setExpression("aql:self.handleReferenceWidgetNewValue('" + SysmlPackage.eINSTANCE.getSubclassification_Superclassifier().getName() + "', " + ViewFormDescriptionConverter.NEW_VALUE
+ LabelConstants.CLOSE_PARENTHESIS);
setRefWidget.setExpression(ServiceMethod.of2(DetailsViewService::handleReferenceWidgetNewValue)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getSubclassification_Superclassifier().getName()), ViewFormDescriptionConverter.NEW_VALUE));
refWidget.getBody().add(setRefWidget);

group.getChildren().add(refWidget);
Expand All @@ -361,8 +365,8 @@ private GroupDescription createExtraSubsettingPropertiesGroup() {
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget.setExpression("aql:self.handleReferenceWidgetNewValue('" + SysmlPackage.eINSTANCE.getSubsetting_SubsettedFeature().getName() + "', " + ViewFormDescriptionConverter.NEW_VALUE
+ LabelConstants.CLOSE_PARENTHESIS);
setRefWidget.setExpression(ServiceMethod.of2(DetailsViewService::handleReferenceWidgetNewValue)
.aqlSelf(AQLUtils.aqlString(SysmlPackage.eINSTANCE.getSubsetting_SubsettedFeature().getName()), ViewFormDescriptionConverter.NEW_VALUE));
refWidget.getBody().add(setRefWidget);

group.getChildren().add(refWidget);
Expand Down Expand Up @@ -580,7 +584,7 @@ private WidgetDescription createLabelWidget() {
label.setName("LabelWidget");
label.setLabelExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewLabel).aqlSelf(E_STRUCTURAL_FEATURE));
label.setHelpExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewHelpText).aqlSelf(E_STRUCTURAL_FEATURE));
label.setValueExpression(AQLUtils.getSelfServiceCallExpression("eGet", E_STRUCTURAL_FEATURE));
label.setValueExpression(ServiceMethod.of1(EObjectServices.class, EObjectServices::eGet, EObject.class, EStructuralFeature.class).aqlSelf(E_STRUCTURAL_FEATURE));
return label;
}

Expand All @@ -589,10 +593,11 @@ private WidgetDescription createTextAreaFieldWidget() {
textArea.setName("TextAreaWidget");
textArea.setLabelExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewLabel).aqlSelf(E_STRUCTURAL_FEATURE));
textArea.setHelpExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewHelpText).aqlSelf(E_STRUCTURAL_FEATURE));
textArea.setValueExpression(AQLUtils.getSelfServiceCallExpression("eGet", E_STRUCTURAL_FEATURE));
textArea.setValueExpression(ServiceMethod.of1(EObjectServices.class, EObjectServices::eGet, EObject.class, EStructuralFeature.class).aqlSelf(E_STRUCTURAL_FEATURE));
textArea.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY_E_STRUCTURAL_FEATURE);
ChangeContext setNewValueOperation = ViewFactory.eINSTANCE.createChangeContext();
setNewValueOperation.setExpression(AQLUtils.getSelfServiceCallExpression("setNewValue", List.of(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE)));
setNewValueOperation.setExpression(ServiceMethod.of2(DetailsViewService.class, DetailsViewService::setNewValue, Element.class, EStructuralFeature.class, Object.class)
.aqlSelf(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE));
textArea.getBody().add(setNewValueOperation);
return textArea;
}
Expand All @@ -602,10 +607,11 @@ private WidgetDescription createTextfieldWidget() {
textfield.setName("TextfieldWidget");
textfield.setLabelExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewLabel).aqlSelf(E_STRUCTURAL_FEATURE));
textfield.setHelpExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewHelpText).aqlSelf(E_STRUCTURAL_FEATURE));
textfield.setValueExpression(AQLUtils.getSelfServiceCallExpression("eGet", E_STRUCTURAL_FEATURE));
textfield.setValueExpression(ServiceMethod.of1(EObjectServices.class, EObjectServices::eGet, EObject.class, EStructuralFeature.class).aqlSelf(E_STRUCTURAL_FEATURE));
textfield.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY_E_STRUCTURAL_FEATURE);
ChangeContext setNewValueOperation = ViewFactory.eINSTANCE.createChangeContext();
setNewValueOperation.setExpression(AQLUtils.getSelfServiceCallExpression("setNewValue", List.of(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE)));
setNewValueOperation.setExpression(ServiceMethod.of2(DetailsViewService.class, DetailsViewService::setNewValue, Element.class, EStructuralFeature.class, Object.class)
.aqlSelf(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE));
textfield.getBody().add(setNewValueOperation);
return textfield;
}
Expand All @@ -614,11 +620,12 @@ private WidgetDescription createCheckboxWidget() {
CheckboxDescription checkbox = FormFactory.eINSTANCE.createCheckboxDescription();
checkbox.setName("CheckboxWidget");
checkbox.setLabelExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewLabel).aqlSelf(E_STRUCTURAL_FEATURE));
checkbox.setValueExpression(AQLUtils.getSelfServiceCallExpression("eGet", E_STRUCTURAL_FEATURE));
checkbox.setValueExpression(ServiceMethod.of1(EObjectServices.class, EObjectServices::eGet, EObject.class, EStructuralFeature.class).aqlSelf(E_STRUCTURAL_FEATURE));
checkbox.setHelpExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewHelpText).aqlSelf(E_STRUCTURAL_FEATURE));
checkbox.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY_E_STRUCTURAL_FEATURE);
ChangeContext setNewValueOperation = ViewFactory.eINSTANCE.createChangeContext();
setNewValueOperation.setExpression(AQLUtils.getSelfServiceCallExpression("setNewValue", List.of(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE)));
setNewValueOperation.setExpression(ServiceMethod.of2(DetailsViewService.class, DetailsViewService::setNewValue, Element.class, EStructuralFeature.class, Object.class)
.aqlSelf(E_STRUCTURAL_FEATURE, ViewFormDescriptionConverter.NEW_VALUE));
checkbox.getBody().add(setNewValueOperation);
return checkbox;
}
Expand All @@ -628,12 +635,13 @@ private WidgetDescription createRadioWidget() {
radio.setName("RadioWidget");
radio.setLabelExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewLabel).aqlSelf(E_STRUCTURAL_FEATURE));
radio.setHelpExpression(ServiceMethod.of1(DetailsViewService::getDetailsViewHelpText).aqlSelf(E_STRUCTURAL_FEATURE));
radio.setCandidatesExpression(AQLUtils.getSelfServiceCallExpression("getEnumCandidates", E_STRUCTURAL_FEATURE));
radio.setCandidatesExpression(ServiceMethod.of1(DetailsViewService.class, DetailsViewService::getEnumCandidates, Element.class, EAttribute.class).aqlSelf(E_STRUCTURAL_FEATURE));
radio.setCandidateLabelExpression("aql:candidate.name");
radio.setValueExpression(AQLUtils.getSelfServiceCallExpression("getEnumValue", E_STRUCTURAL_FEATURE));
radio.setValueExpression(ServiceMethod.of1(DetailsViewService.class, DetailsViewService::getEnumValue, Element.class, EAttribute.class).aqlSelf(E_STRUCTURAL_FEATURE));
radio.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY_E_STRUCTURAL_FEATURE);
ChangeContext setNewValueOperation = ViewFactory.eINSTANCE.createChangeContext();
setNewValueOperation.setExpression(AQLUtils.getSelfServiceCallExpression("setNewValue", List.of(E_STRUCTURAL_FEATURE, "newValue.instance")));
setNewValueOperation.setExpression(
ServiceMethod.of2(DetailsViewService.class, DetailsViewService::setNewValue, Element.class, EStructuralFeature.class, Object.class).aqlSelf(E_STRUCTURAL_FEATURE, "newValue.instance"));
radio.getBody().add(setNewValueOperation);
return radio;
}
Expand All @@ -647,7 +655,7 @@ private WidgetDescription createReferenceWidget() {
refWidget.setReferenceOwnerExpression(AQLConstants.AQL_SELF);
refWidget.setIsEnabledExpression(AQL_NOT_SELF_IS_READ_ONLY_E_STRUCTURAL_FEATURE);
ChangeContext setRefWidget = ViewFactory.eINSTANCE.createChangeContext();
setRefWidget.setExpression(AQLUtils.getSelfServiceCallExpression("handleReferenceWidgetNewValue", List.of(E_STRUCTURAL_FEATURE + ".name", ViewFormDescriptionConverter.NEW_VALUE)));
setRefWidget.setExpression(ServiceMethod.of2(DetailsViewService::handleReferenceWidgetNewValue).aqlSelf(E_STRUCTURAL_FEATURE + ".name", ViewFormDescriptionConverter.NEW_VALUE));
refWidget.getBody().add(setRefWidget);
return refWidget;
}
Expand Down
Loading
Loading