diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 3a4a0ba54..b62adb2ac 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -53,6 +53,9 @@ Any `Namespace` stored in those libraries are now cached for quick access.
As a consequence, some coding rules violations have been fixed.
The `org.eclipse.syson.services.grammars` package in `syson-direct-edit-grammar` has been renamed into `org.eclipse.syson.direct.edit.grammars`.
`AbtractItemUsageBorderNodeDescriptionProvider` has been renamed to `AbstractItemUsageBorderNodeDescriptionProvider`.
+- https://github.com/eclipse-syson/syson/issues/1532[#1532] [tables] Add new Requirements table View.
+As a consequence, the `syson-table-requirements-view` and `syson-common-view` modules has been created.
+`IViewDescriptionProvider.java` and `SysONViewDescriptionProvider.java` have been moved from `syson-diagram-common-view` to `syson-common-view`.
=== Dependency update
@@ -98,6 +101,7 @@ This contribution allows to switch from one _ViewDefinition_ to another one in a
* `SysMLPackageNodeAppearanceHandler implements INodeAppearanceHandler` handles how the node is updated from the `appearanceChanges`.
* A GraphQL mutation is also added through `editSysMLPackageNodeAppearance`.
* Same mechanism is applied to `ImportedPackage`, `Note` and `ViewFrame` nodes.
+- https://github.com/eclipse-syson/syson/issues/1532[#1532] [tables] Add new Requirements table View.
== v2025.8.0
diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/migration/DiagramOnViewUsageMigrationHook.java b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/migration/DiagramOnViewUsageMigrationHook.java
index c83872520..5495cdc28 100644
--- a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/migration/DiagramOnViewUsageMigrationHook.java
+++ b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/migration/DiagramOnViewUsageMigrationHook.java
@@ -30,13 +30,13 @@
import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.RepresentationMetadata;
import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.repositories.IRepresentationContentRepository;
import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.services.api.IRepresentationMetadataUpdateService;
-import org.eclipse.syson.application.services.GetIntermediateContainerCreationSwitch;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Relationship;
import org.eclipse.syson.sysml.SysmlFactory;
import org.eclipse.syson.sysml.ViewDefinition;
import org.eclipse.syson.sysml.ViewUsage;
import org.eclipse.syson.sysml.util.ElementUtil;
+import org.eclipse.syson.util.GetIntermediateContainerCreationSwitch;
import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/SysMLv2EditService.java b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/SysMLv2EditService.java
index 37be31026..ad6ea5307 100644
--- a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/SysMLv2EditService.java
+++ b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/SysMLv2EditService.java
@@ -52,6 +52,7 @@
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.ViewUsage;
import org.eclipse.syson.sysml.util.ElementUtil;
+import org.eclipse.syson.util.GetIntermediateContainerCreationSwitch;
import org.eclipse.syson.util.SysMLMetamodelHelper;
import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers;
import org.springframework.stereotype.Service;
diff --git a/backend/application/syson-application/pom.xml b/backend/application/syson-application/pom.xml
index 82fcab6fa..68b8a0879 100644
--- a/backend/application/syson-application/pom.xml
+++ b/backend/application/syson-application/pom.xml
@@ -114,6 +114,11 @@
syson-standard-diagrams-view
2025.8.5
+
+ org.eclipse.syson
+ syson-table-requirements-view
+ 2025.8.5
+
org.eclipse.syson
syson-tree-explorer-view
@@ -148,6 +153,12 @@
${sirius.web.version}
test
+
+ org.eclipse.sirius
+ sirius-components-tables-tests
+ ${sirius.web.version}
+ test
+
org.eclipse.sirius
sirius-components-trees-tests
diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/CreateRequirementMutationRunner.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/CreateRequirementMutationRunner.java
new file mode 100644
index 000000000..c168651d5
--- /dev/null
+++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/CreateRequirementMutationRunner.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.application.controllers.diagrams.graphql;
+
+import java.util.Objects;
+
+import org.eclipse.sirius.components.graphql.tests.api.IGraphQLRequestor;
+import org.eclipse.sirius.components.graphql.tests.api.IMutationRunner;
+import org.eclipse.syson.table.requirements.view.dto.CreateRequirementInput;
+import org.springframework.stereotype.Service;
+
+/**
+ * Used to invoke a create requirement table action with the GraphQL API.
+ *
+ * @author arichard
+ */
+@Service
+public class CreateRequirementMutationRunner implements IMutationRunner {
+
+ private static final String CREATE_REQUIREMENT_MUTATION = """
+ mutation createRequirement($input: CreateRequirementInput!) {
+ createRequirement(input: $input) {
+ __typename
+ ... on ErrorPayload {
+ messages {
+ body
+ level
+ }
+ }
+ ... on SuccessPayload {
+ messages {
+ body
+ level
+ }
+ }
+ }
+ }
+ """;
+
+ private final IGraphQLRequestor graphQLRequestor;
+
+ public CreateRequirementMutationRunner(IGraphQLRequestor graphQLRequestor) {
+ this.graphQLRequestor = Objects.requireNonNull(graphQLRequestor);
+ }
+
+ @Override
+ public String run(CreateRequirementInput input) {
+ return this.graphQLRequestor.execute(CREATE_REQUIREMENT_MUTATION, input);
+ }
+}
\ No newline at end of file
diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/ExposeRequirementsMutationRunner.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/ExposeRequirementsMutationRunner.java
new file mode 100644
index 000000000..99e818a94
--- /dev/null
+++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/graphql/ExposeRequirementsMutationRunner.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.application.controllers.diagrams.graphql;
+
+import java.util.Objects;
+
+import org.eclipse.sirius.components.graphql.tests.api.IGraphQLRequestor;
+import org.eclipse.sirius.components.graphql.tests.api.IMutationRunner;
+import org.eclipse.syson.table.requirements.view.dto.ExposeRequirementsInput;
+import org.springframework.stereotype.Service;
+
+/**
+ * Used to invoke a expose requirements table action with the GraphQL API.
+ *
+ * @author arichard
+ */
+@Service
+public class ExposeRequirementsMutationRunner implements IMutationRunner {
+
+ private static final String EXPOSE_REQUIREMENTS_MUTATION = """
+ mutation exposeRequirements($input: ExposeRequirementsInput!) {
+ exposeRequirements(input: $input) {
+ __typename
+ ... on ErrorPayload {
+ messages {
+ body
+ level
+ }
+ }
+ ... on SuccessPayload {
+ messages {
+ body
+ level
+ }
+ }
+ }
+ }
+ """;
+
+ private final IGraphQLRequestor graphQLRequestor;
+
+ public ExposeRequirementsMutationRunner(IGraphQLRequestor graphQLRequestor) {
+ this.graphQLRequestor = Objects.requireNonNull(graphQLRequestor);
+ }
+
+ @Override
+ public String run(ExposeRequirementsInput input) {
+ return this.graphQLRequestor.execute(EXPOSE_REQUIREMENTS_MUTATION, input);
+ }
+}
\ No newline at end of file
diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/tables/RequirementsTableControllerIntegrationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/tables/RequirementsTableControllerIntegrationTests.java
new file mode 100644
index 000000000..a880d8378
--- /dev/null
+++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/tables/RequirementsTableControllerIntegrationTests.java
@@ -0,0 +1,426 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.application.controllers.tables;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.eclipse.sirius.components.tables.tests.TableEventPayloadConsumer.assertRefreshedTableThat;
+
+import com.jayway.jsonpath.JsonPath;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
+
+import org.eclipse.sirius.components.collaborative.dto.CreateRepresentationInput;
+import org.eclipse.sirius.components.collaborative.tables.TableEventInput;
+import org.eclipse.sirius.components.collaborative.tables.dto.InvokeRowContextMenuEntryInput;
+import org.eclipse.sirius.components.core.api.SuccessPayload;
+import org.eclipse.sirius.components.tables.TextareaCell;
+import org.eclipse.sirius.components.tables.TextfieldCell;
+import org.eclipse.sirius.components.tables.tests.graphql.InvokeRowContextMenuEntryMutationRunner;
+import org.eclipse.sirius.components.tables.tests.graphql.RowContextMenuQueryRunner;
+import org.eclipse.sirius.components.tables.tests.graphql.TableEventSubscriptionRunner;
+import org.eclipse.sirius.web.tests.services.api.IGivenCommittedTransaction;
+import org.eclipse.sirius.web.tests.services.api.IGivenCreatedTableSubscription;
+import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState;
+import org.eclipse.syson.AbstractIntegrationTests;
+import org.eclipse.syson.application.controllers.diagrams.graphql.CreateRequirementMutationRunner;
+import org.eclipse.syson.application.controllers.diagrams.graphql.ExposeRequirementsMutationRunner;
+import org.eclipse.syson.application.data.RequirementsTableTestProjectData;
+import org.eclipse.syson.table.requirements.view.dto.CreateRequirementInput;
+import org.eclipse.syson.table.requirements.view.dto.ExposeRequirementsInput;
+import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.jdbc.SqlConfig;
+import org.springframework.transaction.annotation.Transactional;
+
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+/**
+ * Integration tests of the Requirements view table description.
+ *
+ * @author arichard
+ */
+@Transactional
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class RequirementsTableControllerIntegrationTests extends AbstractIntegrationTests {
+
+ @Autowired
+ private IGivenInitialServerState givenInitialServerState;
+
+ @Autowired
+ private IGivenCommittedTransaction givenCommittedTransaction;
+
+ @Autowired
+ private IGivenCreatedTableSubscription givenCreatedTableSubscription;
+
+ @Autowired
+ private CreateRequirementMutationRunner createRequirementMutationRunner;
+
+ @Autowired
+ private ExposeRequirementsMutationRunner exposeRequirementsMutationRunner;
+
+ @Autowired
+ private RowContextMenuQueryRunner rowContextMenuQueryRunner;
+
+ @Autowired
+ private InvokeRowContextMenuEntryMutationRunner invokeRowContextMenuEntryMutationRunner;
+
+ @Autowired
+ private TableEventSubscriptionRunner tableEventSubscriptionRunner;
+
+ @BeforeEach
+ public void beforeEach() {
+ this.givenInitialServerState.initialize();
+ }
+
+ private Flux
+
+ org.eclipse.syson
+ syson-table-requirements-view
+ 2025.8.5
+
org.eclipse.syson
syson-tree-explorer-view
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/ElementInitializerSwitch.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/ElementInitializerSwitch.java
index 71f4cb908..b7928d7f7 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/ElementInitializerSwitch.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/ElementInitializerSwitch.java
@@ -119,7 +119,7 @@ public Element caseDependency(Dependency object) {
@Override
public Element caseDefinition(Definition object) {
- var existingElements = this.elementUtil.existingElementsCount(object);
+ var existingElements = this.existingElementsCount(object);
object.setDeclaredName(object.eClass().getName() + existingElements);
return object;
}
@@ -138,7 +138,7 @@ public Element caseElement(Element object) {
@Override
public Element caseEnumerationDefinition(EnumerationDefinition object) {
object.setIsVariation(true);
- var existingElements = this.elementUtil.existingElementsCount(object);
+ var existingElements = this.existingElementsCount(object);
object.setDeclaredName(object.eClass().getName() + existingElements);
return object;
}
@@ -155,7 +155,7 @@ public Element caseFlowUsage(FlowUsage object) {
@Override
public Element casePackage(Package object) {
- var existingElements = this.elementUtil.existingElementsCount(object);
+ var existingElements = this.existingElementsCount(object);
object.setDeclaredName(object.eClass().getName() + existingElements);
return object;
}
@@ -193,7 +193,7 @@ public Element casePerformActionUsage(PerformActionUsage object) {
@Override
public Element casePortDefinition(PortDefinition object) {
- var existingElements = this.elementUtil.existingElementsCount(object);
+ var existingElements = this.existingElementsCount(object);
object.setDeclaredName(object.eClass().getName() + existingElements);
OwningMembership owningMembership = SysmlFactory.eINSTANCE.createOwningMembership();
object.getOwnedRelationship().add(owningMembership);
@@ -272,7 +272,7 @@ public Element caseUsage(Usage object) {
defaultName = defaultName.substring(0, defaultName.length() - 5);
}
- var existingElements = this.elementUtil.existingElementsCount(object);
+ var existingElements = this.existingElementsCount(object);
object.setDeclaredName(defaultName + existingElements);
object.setIsComposite(true);
@@ -290,6 +290,25 @@ public Element caseViewUsage(ViewUsage object) {
return object;
}
+ /**
+ * Count the number of existing elements having the same type than the given Element inside the owning Namespace of
+ * the given Element.
+ *
+ * @param element
+ * the given {@link Element}.
+ * @return the number of existing elements having the same type than the given Element inside the owning Namespace
+ * of the given Element.
+ */
+ public long existingElementsCount(Element element) {
+ Namespace owningNamespace = element.getOwningNamespace();
+ if (owningNamespace != null) {
+ return owningNamespace.getOwnedMember().stream()
+ .filter(member -> element.eClass().equals(member.eClass()))
+ .count();
+ }
+ return 0;
+ }
+
private ParameterMembership createParameterMembershipWithReferenceUsage(String refName, FeatureDirectionKind direction) {
var reference = SysmlFactory.eINSTANCE.createReferenceUsage();
reference.setDirection(direction);
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/UtilService.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/UtilService.java
index 186ab3ddc..23fa9961d 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/UtilService.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/UtilService.java
@@ -1015,16 +1015,14 @@ public boolean isEmptyObjectiveRequirement(Element self) {
}
/**
- * Count the number of existing elements having the same type than the given Element inside the owning Namespace of
- * the given Element.
+ * Count the number of existing ViewUsages inside the given Namespace.
*
- * @param element
- * the given {@link Element}.
- * @return the number of existing elements having the same type than the given Element inside the owning Namespace
- * of the given Element.
+ * @param namespace
+ * the given {@link Namespace}.
+ * @return the number of existing ViewUsages inside the given Namespace.
*/
- public long existingElementsCount(Element element) {
- return this.elementUtil.existingElementsCount(element);
+ public long existingViewUsagesCountForRepresentationCreation(Namespace namespace) {
+ return this.elementUtil.existingViewUsagesCountForRepresentationCreation(namespace);
}
private ReferenceUsage addConnectorEnd(ConnectorAsUsage connectorAsUsage, Feature end, Type connectorContainer) {
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/util/AQLConstants.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/AQLConstants.java
index d50149ca4..2b5dc5456 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/util/AQLConstants.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/AQLConstants.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023 Obeo.
+ * Copyright (c) 2023, 2025 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
@@ -23,6 +23,10 @@ public class AQLConstants {
public static final String AQL_SELF = "aql:self";
+ public static final String AQL_TRUE = "aql:true";
+
+ public static final String AQL_FALSE = "aql:false";
+
public static final String DEFAULT_LABEL_EXPRESSION = "aql:self.declaredName";
public static final String DIAGRAM = "diagram";
diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/GetIntermediateContainerCreationSwitch.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/GetIntermediateContainerCreationSwitch.java
similarity index 95%
rename from backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/GetIntermediateContainerCreationSwitch.java
rename to backend/services/syson-services/src/main/java/org/eclipse/syson/util/GetIntermediateContainerCreationSwitch.java
index 733e72346..d6fa9f254 100644
--- a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/GetIntermediateContainerCreationSwitch.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/GetIntermediateContainerCreationSwitch.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 , 2025 Obeo.
+ * Copyright (c) 2024, 2025 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.application.services;
+package org.eclipse.syson.util;
import java.util.Objects;
import java.util.Optional;
@@ -30,10 +30,9 @@
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.TextualRepresentation;
import org.eclipse.syson.sysml.Usage;
-import org.eclipse.syson.util.SysmlEClassSwitch;
/**
- * Switch for retrieving the intermediate container of the element to create, if there is one..
+ * Switch for retrieving the intermediate container of the element to create, if there is one.
*
* @author arichard
*/
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/util/SysONRepresentationDescriptionIdentifiers.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/SysONRepresentationDescriptionIdentifiers.java
index ae611369a..5484b3275 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/util/SysONRepresentationDescriptionIdentifiers.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/util/SysONRepresentationDescriptionIdentifiers.java
@@ -19,11 +19,11 @@
*/
public final class SysONRepresentationDescriptionIdentifiers {
- // All the general view diagrams have the same description
+ // All standard diagrams have the same description
public static final String GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID = "siriusComponents://representationDescription?kind=diagramDescription&sourceKind=view&sourceId=8dcd14b0-6259-3193-ad2c-743f394c68e4&sourceElementId=db495705-e917-319b-af55-a32ad63f4089";
/**
- * All diagram descriptions have been merged into one.
+ * All standard diagram descriptions have been merged into one.
*
* @deprecated use GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID instead.
*/
@@ -31,7 +31,7 @@ public final class SysONRepresentationDescriptionIdentifiers {
public static final String INTERCONNECTION_VIEW_DIAGRAM_DESCRIPTION_ID = "siriusComponents://representationDescription?kind=diagramDescription&sourceKind=view&sourceId=74c5d045-51d7-359f-9634-611d0f1bef3d&sourceElementId=e1bd3b6d-357b-3068-b2e9-e0c1e19d6856";
/**
- * All diagram descriptions have been merged into one.
+ * All standard diagram descriptions have been merged into one.
*
* @deprecated use GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID instead.
*/
@@ -39,13 +39,15 @@ public final class SysONRepresentationDescriptionIdentifiers {
public static final String ACTION_FLOW_VIEW_DIAGRAM_DESCRIPTION_ID = "siriusComponents://representationDescription?kind=diagramDescription&sourceKind=view&sourceId=0d6e5145-02ea-336b-b4d4-9be6b0e63786&sourceElementId=ea3511e5-5ba5-3d2c-8e80-9182db336675";
/**
- * All diagram descriptions have been merged into one.
+ * All standard diagram descriptions have been merged into one.
*
* @deprecated use GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID instead.
*/
@Deprecated
public static final String STATE_TRANSITION_VIEW_DIAGRAM_DESCRIPTION_ID = "siriusComponents://representationDescription?kind=diagramDescription&sourceKind=view&sourceId=067eb84f-3fe2-3b1b-9d45-9ffb9b5bb65e&sourceElementId=be71dab0-25e1-3180-90d0-24b31f68df8f";
+ public static final String REQUIREMENTS_TABLE_VIEW_DESCRIPTION_ID = "siriusComponents://representationDescription?kind=tableDescription&sourceKind=view&sourceId=f445c867-006e-3b07-9385-40143a87f533&sourceElementId=05ffd328-a162-3d7e-b09b-7757ef23ef01";
+
private SysONRepresentationDescriptionIdentifiers() {
// Prevent instantiation
}
diff --git a/backend/views/pom.xml b/backend/views/pom.xml
index 82c7b3367..6850401ec 100644
--- a/backend/views/pom.xml
+++ b/backend/views/pom.xml
@@ -32,8 +32,10 @@
+ syson-common-view
syson-diagram-common-view
syson-standard-diagrams-view
+ syson-table-requirements-view
syson-tree-explorer-view
syson-diagram-tests
diff --git a/backend/views/syson-common-view/.checkstyle b/backend/views/syson-common-view/.checkstyle
new file mode 100644
index 000000000..c4ea6718a
--- /dev/null
+++ b/backend/views/syson-common-view/.checkstyle
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-common-view/.classpath b/backend/views/syson-common-view/.classpath
new file mode 100644
index 000000000..df66b20f8
--- /dev/null
+++ b/backend/views/syson-common-view/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-common-view/.project b/backend/views/syson-common-view/.project
new file mode 100644
index 000000000..db0980af9
--- /dev/null
+++ b/backend/views/syson-common-view/.project
@@ -0,0 +1,34 @@
+
+
+ syson-common-view
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.springframework.ide.eclipse.boot.validation.springbootbuilder
+
+
+
+
+ net.sf.eclipsecs.core.CheckstyleBuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ net.sf.eclipsecs.core.CheckstyleNature
+
+
diff --git a/backend/views/syson-common-view/.settings/org.eclipse.core.resources.prefs b/backend/views/syson-common-view/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..29abf9995
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/backend/views/syson-common-view/.settings/org.eclipse.jdt.apt.core.prefs b/backend/views/syson-common-view/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 000000000..d4313d4b2
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/backend/views/syson-common-view/.settings/org.eclipse.jdt.core.prefs b/backend/views/syson-common-view/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..26bbd1824
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,410 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
+org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_line_comments=false
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=200
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/backend/views/syson-common-view/.settings/org.eclipse.jdt.ui.prefs b/backend/views/syson-common-view/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..0848eaadb
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,297 @@
+cleanup.add_all=false
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.also_simplify_lambda=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=true
+cleanup.array_with_curly=false
+cleanup.arrays_fill=false
+cleanup.bitwise_conditional_expression=false
+cleanup.boolean_literal=false
+cleanup.boolean_value_rather_than_comparison=true
+cleanup.break_loop=false
+cleanup.collection_cloning=false
+cleanup.comparing_on_criteria=false
+cleanup.comparison_statement=false
+cleanup.controlflow_merge=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.convert_to_enhanced_for_loop_if_loop_var_used=true
+cleanup.convert_to_switch_expressions=false
+cleanup.correct_indentation=false
+cleanup.do_while_rather_than_while=true
+cleanup.double_negation=false
+cleanup.else_if=false
+cleanup.embedded_if=false
+cleanup.evaluate_nullable=false
+cleanup.extract_increment=false
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.hash=false
+cleanup.if_condition=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.instanceof=false
+cleanup.instanceof_keyword=false
+cleanup.invert_equals=false
+cleanup.join=false
+cleanup.lazy_logical_operator=false
+cleanup.make_local_variable_final=false
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=true
+cleanup.map_cloning=false
+cleanup.merge_conditional_blocks=false
+cleanup.multi_catch=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.no_string_creation=false
+cleanup.no_super=false
+cleanup.number_suffix=false
+cleanup.objects_equals=false
+cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=true
+cleanup.operand_factorization=false
+cleanup.organize_imports=true
+cleanup.overridden_assignment=false
+cleanup.overridden_assignment_move_decl=true
+cleanup.plain_replacement=false
+cleanup.precompile_regex=false
+cleanup.primitive_comparison=false
+cleanup.primitive_parsing=false
+cleanup.primitive_rather_than_wrapper=true
+cleanup.primitive_serialization=false
+cleanup.pull_out_if_from_if_else=false
+cleanup.pull_up_assignment=false
+cleanup.push_down_negation=false
+cleanup.qualify_static_field_accesses_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=true
+cleanup.reduce_indentation=false
+cleanup.redundant_comparator=false
+cleanup.redundant_falling_through_block_end=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_array_creation=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_method_parameters=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.replace_deprecated_calls=false
+cleanup.return_expression=false
+cleanup.simplify_lambda_expression_and_method_ref=false
+cleanup.single_used_field=false
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.standard_comparison=false
+cleanup.static_inner_class=false
+cleanup.strictly_equal_or_different=false
+cleanup.stringbuffer_to_stringbuilder=false
+cleanup.stringbuilder=false
+cleanup.stringbuilder_for_local_vars=true
+cleanup.stringconcat_stringbuffer_stringbuilder=false
+cleanup.stringconcat_to_textblock=false
+cleanup.substring=false
+cleanup.switch=false
+cleanup.system_property=false
+cleanup.system_property_boolean=false
+cleanup.system_property_file_encoding=false
+cleanup.system_property_file_separator=false
+cleanup.system_property_line_separator=false
+cleanup.system_property_path_separator=false
+cleanup.ternary_operator=false
+cleanup.try_with_resource=false
+cleanup.unlooped_while=false
+cleanup.unreachable_block=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_autoboxing=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_directly_map_method=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_string_is_blank=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+cleanup.use_unboxing=false
+cleanup.use_var=false
+cleanup.useless_continue=false
+cleanup.useless_return=false
+cleanup.valueof_rather_than_instantiation=false
+cleanup_profile=_SysON
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_SysON
+formatter_settings_version=23
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com;fr;java;javax;org;
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/*******************************************************************************\r\n * Copyright (c) ${year} Obeo.\r\n * This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v2.0\r\n * which accompanies this distribution, and is available at\r\n * https\://www.eclipse.org/legal/epl-2.0/\r\n *\r\n * SPDX-License-Identifier\: EPL-2.0\r\n *\r\n * Contributors\:\r\n * Obeo - initial API and implementation\r\n *******************************************************************************//**\r\n * @author ${user}\r\n *//**\r\n * \r\n *//**\r\n * ${tags}\r\n *//**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n *//**\r\n * ${tags}\r\n * ${see_to_target}\r\n */${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}\r\n\r\n\r\n\r\n\r\n${exception_var}.printStackTrace();${body_statement}${body_statement}return ${field};${field} \= ${param};
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.also_simplify_lambda=true
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=true
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=true
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=true
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.overridden_assignment_move_decl=true
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=true
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_method_parameters=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.replace_deprecated_calls=false
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=true
+sp_cleanup.stringconcat_stringbuffer_stringbuilder=false
+sp_cleanup.stringconcat_to_textblock=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/backend/views/syson-common-view/.settings/org.eclipse.m2e.core.prefs b/backend/views/syson-common-view/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 000000000..f897a7f1c
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/backend/views/syson-common-view/.settings/org.springframework.ide.eclipse.prefs b/backend/views/syson-common-view/.settings/org.springframework.ide.eclipse.prefs
new file mode 100644
index 000000000..a12794d68
--- /dev/null
+++ b/backend/views/syson-common-view/.settings/org.springframework.ide.eclipse.prefs
@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1
diff --git a/backend/views/syson-common-view/pom.xml b/backend/views/syson-common-view/pom.xml
new file mode 100644
index 000000000..1bce82573
--- /dev/null
+++ b/backend/views/syson-common-view/pom.xml
@@ -0,0 +1,167 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.5.5
+
+
+ org.eclipse.syson
+ syson-common-view
+ 2025.8.5
+ syson-common-view
+ SysON Sirius Web common elements for SysMLv2 views
+
+
+ 17
+ 2025.8.5
+
+
+
+
+ Central
+ https://repo.maven.apache.org/maven2
+
+
+ github-sirius-web
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-syson/syson
+
+
+
+
+
+ org.springframework.data
+ spring-data-commons
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.eclipse.sirius
+ sirius-web-application
+ ${sirius.web.version}
+
+
+ org.eclipse.sirius
+ org.eclipse.sirius.emfjson
+ 2.5.3-SNAPSHOT
+
+
+ org.eclipse.syson
+ syson-sysml-metamodel
+ 2025.8.5
+
+
+ org.eclipse.syson
+ syson-siriusweb-customnodes-metamodel
+ 2025.8.5
+
+
+ org.eclipse.syson
+ syson-siriusweb-customnodes-metamodel-edit
+ 2025.8.5
+
+
+ org.eclipse.syson
+ syson-services
+ 2025.8.5
+
+
+
+ org.testcontainers
+ junit-jupiter
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.4.0
+
+ ../../releng/syson-resources/checkstyle/CheckstyleConfiguration.xml
+ true
+ true
+
+
+
+ validate
+ validate
+
+ check
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.13
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/SysONViewDescriptionProvider.java b/backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/SysONViewDescriptionProvider.java
similarity index 92%
rename from backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/SysONViewDescriptionProvider.java
rename to backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/SysONViewDescriptionProvider.java
index 5ebf5e691..310ec9b8f 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/SysONViewDescriptionProvider.java
+++ b/backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/SysONViewDescriptionProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 Obeo.
+ * Copyright (c) 2024, 2025 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;
+package org.eclipse.syson.common.view;
import java.util.List;
@@ -18,6 +18,7 @@
import org.eclipse.sirius.components.core.api.IEditingContextProcessor;
import org.eclipse.sirius.components.view.View;
import org.eclipse.sirius.web.application.editingcontext.EditingContext;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
import org.springframework.stereotype.Service;
/**
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/IViewDescriptionProvider.java b/backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/api/IViewDescriptionProvider.java
similarity index 86%
rename from backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/IViewDescriptionProvider.java
rename to backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/api/IViewDescriptionProvider.java
index 097903dcf..1e290bf44 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/IViewDescriptionProvider.java
+++ b/backend/views/syson-common-view/src/main/java/org/eclipse/syson/common/view/api/IViewDescriptionProvider.java
@@ -10,7 +10,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.diagram.common.view;
+package org.eclipse.syson.common.view.api;
import java.util.List;
import java.util.UUID;
@@ -28,24 +28,24 @@
import org.eclipse.syson.services.ColorProvider;
/**
- * Abstract class used to register View diagram in the application.
+ * Abstract class used to register Views in the application.
*
* @author Jerome Gout
*/
public interface IViewDescriptionProvider {
/**
- * Implementers should provide the ID of the view diagram this description provider is for.
+ * Implementers should provide the ID of the view this description provider is for.
*
- * @return the Id of the view diagram
+ * @return the Id of the view
*/
- String getViewDiagramId();
+ String getViewId();
/**
- * Implementers should provide the {@link IRepresentationDescriptionProvider} of the view diagram this description
- * provider is for.
+ * Implementers should provide the {@link IRepresentationDescriptionProvider} of the view this description provider
+ * is for.
*
- * @return the representation description provider of the view diagram
+ * @return the representation description provider of the view
*/
IRepresentationDescriptionProvider getRepresentationDescriptionProvider();
@@ -66,9 +66,9 @@ default List getRepresentationDescriptions() {
});
// All programmatic Views need to be stored in a Resource and registered in IInMemoryViewRegistry
- String resourcePath = UUID.nameUUIDFromBytes(this.getViewDiagramId().getBytes()).toString();
+ String resourcePath = UUID.nameUUIDFromBytes(this.getViewId().getBytes()).toString();
JsonResource resource = new JSONResourceFactory().createResourceFromPath(resourcePath);
- resource.eAdapters().add(new ResourceMetadataAdapter(this.getViewDiagramId(), true));
+ resource.eAdapters().add(new ResourceMetadataAdapter(this.getViewId(), true));
resource.getContents().add(view);
return List.of(view);
diff --git a/backend/views/syson-common-view/src/main/resources/.gitkeep b/backend/views/syson-common-view/src/main/resources/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/ArchitectureConstants.java b/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/ArchitectureConstants.java
new file mode 100644
index 000000000..5971a3c0b
--- /dev/null
+++ b/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.common.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_COMMON_VIEW_ROOT_PACKAGE = "org.eclipse.syson.common.view..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_COMMON_VIEW_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/CodingRulesTests.java b/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/CodingRulesTests.java
new file mode 100644
index 000000000..48a04e405
--- /dev/null
+++ b/backend/views/syson-common-view/src/test/java/org/eclipse/syson/common/view/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.common.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_COMMON_VIEW_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/views/syson-standard-diagrams-view/pom.xml b/backend/views/syson-standard-diagrams-view/pom.xml
index f2be1647c..ffa278794 100644
--- a/backend/views/syson-standard-diagrams-view/pom.xml
+++ b/backend/views/syson-standard-diagrams-view/pom.xml
@@ -110,6 +110,11 @@
syson-services
2025.8.5
+
+ org.eclipse.syson
+ syson-common-view
+ 2025.8.5
+
org.eclipse.syson
syson-diagram-common-view
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/ActionFlowViewDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/ActionFlowViewDiagramDescriptionProvider.java
index 7bef6b2e0..7012ced25 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/ActionFlowViewDiagramDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/ActionFlowViewDiagramDescriptionProvider.java
@@ -17,7 +17,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
-import org.eclipse.syson.diagram.common.view.IViewDescriptionProvider;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -35,7 +35,7 @@ public class ActionFlowViewDiagramDescriptionProvider implements IViewDescriptio
public static final String DESCRIPTION_NAME = "Action Flow View";
@Override
- public String getViewDiagramId() {
+ public String getViewId() {
return "ActionFlowViewDiagram";
}
@@ -50,7 +50,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
.domainType(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getNamespace()))
.preconditionExpression(AQLUtils.getSelfServiceCallExpression("canCreateDiagram"))
.name(DESCRIPTION_NAME)
- .titleExpression("aql:'view'+ Sequence{self.existingElementsCount(), 1}->sum()")
+ .titleExpression("aql:'view'+ Sequence{self.existingViewUsagesCountForRepresentationCreation(), 1}->sum()")
.build();
}
};
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/InterconnectionViewDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/InterconnectionViewDiagramDescriptionProvider.java
index ba7b626e7..77b328c6a 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/InterconnectionViewDiagramDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/InterconnectionViewDiagramDescriptionProvider.java
@@ -17,7 +17,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
-import org.eclipse.syson.diagram.common.view.IViewDescriptionProvider;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -35,7 +35,7 @@ public class InterconnectionViewDiagramDescriptionProvider implements IViewDescr
public static final String DESCRIPTION_NAME = "Interconnection View";
@Override
- public String getViewDiagramId() {
+ public String getViewId() {
return "InterconnectionViewDiagram";
}
@@ -50,7 +50,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
.domainType(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getElement()))
.preconditionExpression(AQLUtils.getSelfServiceCallExpression("canCreateDiagram"))
.name(DESCRIPTION_NAME)
- .titleExpression("aql:'view'+ Sequence{self.existingElementsCount(), 1}->sum()")
+ .titleExpression("aql:'view'+ Sequence{self.existingViewUsagesCountForRepresentationCreation(), 1}->sum()")
.build();
}
};
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionProvider.java
index 27871f33e..be927d9c0 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionProvider.java
@@ -13,7 +13,7 @@
package org.eclipse.syson.standard.diagrams.view;
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
-import org.eclipse.syson.diagram.common.view.IViewDescriptionProvider;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
import org.springframework.stereotype.Service;
/**
@@ -29,7 +29,7 @@ public class SDVDescriptionProvider implements IViewDescriptionProvider {
* Descriptions Ids.
*/
@Override
- public String getViewDiagramId() {
+ public String getViewId() {
return "GeneralViewDiagram";
}
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 e9d5a00a7..1878c57cc 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
@@ -297,7 +297,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
.domainType(domainType)
.preconditionExpression(AQLUtils.getSelfServiceCallExpression("canCreateDiagram"))
.name(DESCRIPTION_NAME)
- .titleExpression("aql:'view'+ Sequence{self.existingElementsCount(), 1}->sum()");
+ .titleExpression("aql:'view'+ Sequence{self.existingViewUsagesCountForRepresentationCreation(), 1}->sum()");
var diagramDescription = diagramDescriptionBuilder.build();
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/StateTransitionViewDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/StateTransitionViewDiagramDescriptionProvider.java
index 5805ca9ff..eacc47d76 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/StateTransitionViewDiagramDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/StateTransitionViewDiagramDescriptionProvider.java
@@ -17,7 +17,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
-import org.eclipse.syson.diagram.common.view.IViewDescriptionProvider;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.SysMLMetamodelHelper;
@@ -36,7 +36,7 @@ public class StateTransitionViewDiagramDescriptionProvider implements IViewDescr
public static final String DESCRIPTION_NAME = "State Transition View";
@Override
- public String getViewDiagramId() {
+ public String getViewId() {
return "StateTransitionViewDiagram";
}
@@ -51,7 +51,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
.domainType(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getNamespace()))
.preconditionExpression(AQLUtils.getSelfServiceCallExpression("canCreateDiagram"))
.name(DESCRIPTION_NAME)
- .titleExpression("aql:'view'+ Sequence{self.existingElementsCount(), 1}->sum()")
+ .titleExpression("aql:'view'+ Sequence{self.existingViewUsagesCountForRepresentationCreation(), 1}->sum()")
.build();
}
};
diff --git a/backend/views/syson-table-requirements-view/.checkstyle b/backend/views/syson-table-requirements-view/.checkstyle
new file mode 100644
index 000000000..c4ea6718a
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.checkstyle
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-table-requirements-view/.classpath b/backend/views/syson-table-requirements-view/.classpath
new file mode 100644
index 000000000..df66b20f8
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-table-requirements-view/.project b/backend/views/syson-table-requirements-view/.project
new file mode 100644
index 000000000..05231ae66
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.project
@@ -0,0 +1,34 @@
+
+
+ syson-table-requirements-view
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.springframework.ide.eclipse.boot.validation.springbootbuilder
+
+
+
+
+ net.sf.eclipsecs.core.CheckstyleBuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ net.sf.eclipsecs.core.CheckstyleNature
+
+
diff --git a/backend/views/syson-table-requirements-view/.settings/org.eclipse.core.resources.prefs b/backend/views/syson-table-requirements-view/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..29abf9995
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.apt.core.prefs b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 000000000..d4313d4b2
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.core.prefs b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..26bbd1824
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,410 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
+org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_line_comments=false
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=200
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.ui.prefs b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..0848eaadb
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,297 @@
+cleanup.add_all=false
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.also_simplify_lambda=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=true
+cleanup.array_with_curly=false
+cleanup.arrays_fill=false
+cleanup.bitwise_conditional_expression=false
+cleanup.boolean_literal=false
+cleanup.boolean_value_rather_than_comparison=true
+cleanup.break_loop=false
+cleanup.collection_cloning=false
+cleanup.comparing_on_criteria=false
+cleanup.comparison_statement=false
+cleanup.controlflow_merge=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.convert_to_enhanced_for_loop_if_loop_var_used=true
+cleanup.convert_to_switch_expressions=false
+cleanup.correct_indentation=false
+cleanup.do_while_rather_than_while=true
+cleanup.double_negation=false
+cleanup.else_if=false
+cleanup.embedded_if=false
+cleanup.evaluate_nullable=false
+cleanup.extract_increment=false
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.hash=false
+cleanup.if_condition=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.instanceof=false
+cleanup.instanceof_keyword=false
+cleanup.invert_equals=false
+cleanup.join=false
+cleanup.lazy_logical_operator=false
+cleanup.make_local_variable_final=false
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=true
+cleanup.map_cloning=false
+cleanup.merge_conditional_blocks=false
+cleanup.multi_catch=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.no_string_creation=false
+cleanup.no_super=false
+cleanup.number_suffix=false
+cleanup.objects_equals=false
+cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=true
+cleanup.operand_factorization=false
+cleanup.organize_imports=true
+cleanup.overridden_assignment=false
+cleanup.overridden_assignment_move_decl=true
+cleanup.plain_replacement=false
+cleanup.precompile_regex=false
+cleanup.primitive_comparison=false
+cleanup.primitive_parsing=false
+cleanup.primitive_rather_than_wrapper=true
+cleanup.primitive_serialization=false
+cleanup.pull_out_if_from_if_else=false
+cleanup.pull_up_assignment=false
+cleanup.push_down_negation=false
+cleanup.qualify_static_field_accesses_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=true
+cleanup.reduce_indentation=false
+cleanup.redundant_comparator=false
+cleanup.redundant_falling_through_block_end=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_array_creation=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_method_parameters=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.replace_deprecated_calls=false
+cleanup.return_expression=false
+cleanup.simplify_lambda_expression_and_method_ref=false
+cleanup.single_used_field=false
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.standard_comparison=false
+cleanup.static_inner_class=false
+cleanup.strictly_equal_or_different=false
+cleanup.stringbuffer_to_stringbuilder=false
+cleanup.stringbuilder=false
+cleanup.stringbuilder_for_local_vars=true
+cleanup.stringconcat_stringbuffer_stringbuilder=false
+cleanup.stringconcat_to_textblock=false
+cleanup.substring=false
+cleanup.switch=false
+cleanup.system_property=false
+cleanup.system_property_boolean=false
+cleanup.system_property_file_encoding=false
+cleanup.system_property_file_separator=false
+cleanup.system_property_line_separator=false
+cleanup.system_property_path_separator=false
+cleanup.ternary_operator=false
+cleanup.try_with_resource=false
+cleanup.unlooped_while=false
+cleanup.unreachable_block=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_autoboxing=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_directly_map_method=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_string_is_blank=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+cleanup.use_unboxing=false
+cleanup.use_var=false
+cleanup.useless_continue=false
+cleanup.useless_return=false
+cleanup.valueof_rather_than_instantiation=false
+cleanup_profile=_SysON
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_SysON
+formatter_settings_version=23
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com;fr;java;javax;org;
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/*******************************************************************************\r\n * Copyright (c) ${year} Obeo.\r\n * This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v2.0\r\n * which accompanies this distribution, and is available at\r\n * https\://www.eclipse.org/legal/epl-2.0/\r\n *\r\n * SPDX-License-Identifier\: EPL-2.0\r\n *\r\n * Contributors\:\r\n * Obeo - initial API and implementation\r\n *******************************************************************************//**\r\n * @author ${user}\r\n *//**\r\n * \r\n *//**\r\n * ${tags}\r\n *//**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n *//**\r\n * ${tags}\r\n * ${see_to_target}\r\n */${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}\r\n\r\n\r\n\r\n\r\n${exception_var}.printStackTrace();${body_statement}${body_statement}return ${field};${field} \= ${param};
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.also_simplify_lambda=true
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=true
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=true
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=true
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.overridden_assignment_move_decl=true
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=true
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_method_parameters=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.replace_deprecated_calls=false
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=true
+sp_cleanup.stringconcat_stringbuffer_stringbuilder=false
+sp_cleanup.stringconcat_to_textblock=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/backend/views/syson-table-requirements-view/.settings/org.eclipse.m2e.core.prefs b/backend/views/syson-table-requirements-view/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 000000000..f897a7f1c
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/backend/views/syson-table-requirements-view/.settings/org.springframework.ide.eclipse.prefs b/backend/views/syson-table-requirements-view/.settings/org.springframework.ide.eclipse.prefs
new file mode 100644
index 000000000..a12794d68
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/.settings/org.springframework.ide.eclipse.prefs
@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1
diff --git a/backend/views/syson-table-requirements-view/pom.xml b/backend/views/syson-table-requirements-view/pom.xml
new file mode 100644
index 000000000..3ea82550c
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/pom.xml
@@ -0,0 +1,162 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.5.5
+
+
+ org.eclipse.syson
+ syson-table-requirements-view
+ 2025.8.5
+ syson-table-requirements-view
+ SysON Table Requirements View
+
+
+ 17
+ 2025.8.5
+
+
+
+
+ Central
+ https://repo.maven.apache.org/maven2
+
+
+ github-sirius-web
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-syson/syson
+
+
+
+
+
+ org.springframework.data
+ spring-data-commons
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.eclipse.sirius
+ sirius-web-application
+ ${sirius.web.version}
+
+
+ org.eclipse.sirius
+ org.eclipse.sirius.emfjson
+ 2.5.3-SNAPSHOT
+
+
+ org.eclipse.syson
+ syson-sysml-metamodel
+ 2025.8.5
+
+
+ org.eclipse.syson
+ syson-services
+ 2025.8.5
+
+
+ org.eclipse.syson
+ syson-common-view
+ 2025.8.5
+
+
+
+ org.testcontainers
+ junit-jupiter
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.4.0
+
+ ../../releng/syson-resources/checkstyle/CheckstyleConfiguration.xml
+ true
+ true
+
+
+
+ validate
+ validate
+
+ check
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.13
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
+
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVDescriptionProvider.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVDescriptionProvider.java
new file mode 100644
index 000000000..c40f3a6ac
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVDescriptionProvider.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2023, 2025 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.table.requirements.view;
+
+import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
+import org.eclipse.syson.common.view.api.IViewDescriptionProvider;
+import org.springframework.stereotype.Service;
+
+/**
+ * Allows to register the Requirements Table View in the application.
+ *
+ * @author arichard
+ */
+@Service
+public class RTVDescriptionProvider implements IViewDescriptionProvider {
+
+ @Override
+ public String getViewId() {
+ return "RequirementsTableView";
+ }
+
+ @Override
+ public IRepresentationDescriptionProvider getRepresentationDescriptionProvider() {
+ return new RTVTableDescriptionProvider();
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVJavaServiceProvider.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVJavaServiceProvider.java
new file mode 100644
index 000000000..726265b6d
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVJavaServiceProvider.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view;
+
+import java.util.List;
+
+import org.eclipse.sirius.components.view.View;
+import org.eclipse.sirius.components.view.emf.IJavaServiceProvider;
+import org.eclipse.syson.services.DeleteService;
+import org.eclipse.syson.services.UtilService;
+import org.eclipse.syson.table.requirements.view.services.RTVMutationServices;
+import org.eclipse.syson.table.requirements.view.services.RTVQueryServices;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * List of all Java services classes used by the {@link RTVTableDescriptionProvider}.
+ *
+ * @author arichard
+ */
+@Configuration
+public class RTVJavaServiceProvider implements IJavaServiceProvider {
+
+ @Override
+ public List> getServiceClasses(View view) {
+ var descriptions = view.getDescriptions();
+ var optGVDescription = descriptions.stream()
+ .filter(desc -> RTVTableDescriptionProvider.DESCRIPTION_NAME.equals(desc.getName()))
+ .findFirst();
+ if (optGVDescription.isPresent()) {
+ return List.of(RTVQueryServices.class,
+ RTVMutationServices.class,
+ DeleteService.class,
+ UtilService.class);
+ }
+ return List.of();
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVTableDescriptionProvider.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVTableDescriptionProvider.java
new file mode 100644
index 000000000..3baff30cb
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/RTVTableDescriptionProvider.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.tables.descriptions.TableDescription;
+import org.eclipse.sirius.components.view.RepresentationDescription;
+import org.eclipse.sirius.components.view.builder.generated.table.TableBuilders;
+import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders;
+import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
+import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
+import org.eclipse.sirius.components.view.table.CellDescription;
+import org.eclipse.sirius.components.view.table.ColumnDescription;
+import org.eclipse.sirius.components.view.table.RowContextMenuEntry;
+import org.eclipse.syson.sysml.SysmlPackage;
+import org.eclipse.syson.util.AQLConstants;
+import org.eclipse.syson.util.AQLUtils;
+import org.eclipse.syson.util.SysMLMetamodelHelper;
+
+/**
+ * Description of the Non-Standard Requirements Table Views using the ViewBuilder API from Sirius Web.
+ *
+ * @author arichard
+ */
+public class RTVTableDescriptionProvider implements IRepresentationDescriptionProvider {
+
+ public static final String DESCRIPTION_NAME = "Requirements Table View";
+
+ private final TableBuilders tableBuilders = new TableBuilders();
+
+ private final ViewBuilders viewBuilders = new ViewBuilders();
+
+ @Override
+ public RepresentationDescription create(IColorProvider colorProvider) {
+ String domainType = SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getNamespace());
+
+ var reqRowDescription = this.tableBuilders.newRowDescription()
+ .name("RTV-RowDescription-Requirement")
+ .semanticCandidatesExpression(
+ "aql:self.getExposedRequirements()->sortAndFilterRequirements(columnSort, columnFilters, globalFilterData)->toPaginatedData(cursor,direction,size)")
+ .contextMenuEntries(this.createContextMenuEntries().toArray(RowContextMenuEntry[]::new))
+ .depthLevelExpression("0")
+ .headerIconExpression("/icons/full/obj16/RequirementUsage.svg")
+ .headerLabelExpression("")
+ .initialHeightExpression("-1")
+ .isResizableExpression(AQLConstants.AQL_FALSE)
+ .build();
+
+ return this.tableBuilders.newTableDescription()
+ .name(DESCRIPTION_NAME)
+ .titleExpression("aql:'view'+ Sequence{self.existingViewUsagesCountForRepresentationCreation(), 1}->sum()")
+ .domainType(domainType)
+ .columnDescriptions(this.createColumns().toArray(ColumnDescription[]::new))
+ .cellDescriptions(this.createCells().toArray(CellDescription[]::new))
+ .rowDescription(reqRowDescription)
+ .pageSizeOptionsExpression("aql:Sequence{10,20,50}")
+ .useStripedRowsExpression("aql:true")
+ .build();
+ }
+
+ private List createColumns() {
+ List columns = new ArrayList<>();
+
+ var declaredNameColumnDescription = this.tableBuilders.newColumnDescription()
+ .name("RTV-ColumnDescription-DeclaredName")
+ .semanticCandidatesExpression("aql:'DeclaredName'")
+ .headerLabelExpression("DeclaredName")
+ .initialWidthExpression("250")
+ .isResizableExpression(AQLConstants.AQL_TRUE)
+ .isSortableExpression(AQLConstants.AQL_TRUE)
+ .build();
+
+ var reqIdColumnDescription = this.tableBuilders.newColumnDescription()
+ .name("RTV-ColumnDescription-ReqId")
+ .semanticCandidatesExpression("aql:'ReqId'")
+ .headerLabelExpression("ReqId")
+ .initialWidthExpression("150")
+ .isResizableExpression(AQLConstants.AQL_TRUE)
+ .isSortableExpression(AQLConstants.AQL_TRUE)
+ .build();
+
+ var docColumnDescription = this.tableBuilders.newColumnDescription()
+ .name("RTV-ColumnDescription-Documentation")
+ .semanticCandidatesExpression("aql:'Documentation'")
+ .headerLabelExpression("Documentation")
+ .initialWidthExpression("400")
+ .isResizableExpression(AQLConstants.AQL_TRUE)
+ .isSortableExpression(AQLConstants.AQL_TRUE)
+ .build();
+
+ columns.add(declaredNameColumnDescription);
+ columns.add(reqIdColumnDescription);
+ columns.add(docColumnDescription);
+
+ return columns;
+ }
+
+ private List createCells() {
+ List cells = new ArrayList<>();
+
+ var declaredNameCellDescription = this.tableBuilders.newCellDescription()
+ .name("RTV-CellDescription-DeclaredName")
+ .preconditionExpression("aql:columnTargetObject == 'DeclaredName'")
+ .valueExpression("aql:self.declaredName")
+ .cellWidgetDescription(this.tableBuilders.newCellTextfieldWidgetDescription()
+ .body(this.viewBuilders.newSetValue()
+ .featureName("declaredName")
+ .valueExpression("aql:newValue")
+ .build())
+ .build())
+ .build();
+
+ var reqIdCellDescription = this.tableBuilders.newCellDescription()
+ .name("RTV-CellDescription-ReqId")
+ .preconditionExpression("aql:columnTargetObject == 'ReqId'")
+ .valueExpression("aql:self.reqId")
+ .cellWidgetDescription(this.tableBuilders.newCellTextfieldWidgetDescription()
+ .body(this.viewBuilders.newSetValue()
+ .featureName("reqId")
+ .valueExpression("aql:newValue")
+ .build())
+ .build())
+ .build();
+
+ var docCellDescription = this.tableBuilders.newCellDescription()
+ .name("RTV-CellDescription-Documentation")
+ .preconditionExpression("aql:columnTargetObject == 'Documentation'")
+ .valueExpression("aql:self.getDocumentationBody()")
+ .cellWidgetDescription(this.tableBuilders.newCellTextareaWidgetDescription()
+ .body(this.viewBuilders.newChangeContext()
+ .expression(AQLUtils.getSelfServiceCallExpression("editDocumentation", "newValue"))
+ .build())
+ .build())
+ .build();
+
+ cells.add(declaredNameCellDescription);
+ cells.add(reqIdCellDescription);
+ cells.add(docCellDescription);
+
+ return cells;
+ }
+
+ private List createContextMenuEntries() {
+ List entries = new ArrayList<>();
+
+ var removeContextMenuEntry = this.tableBuilders.newRowContextMenuEntry()
+ .name("RTV-ContextMenuEntry-RemoveRequirement")
+ .labelExpression("Delete from table")
+ .iconURLExpression("/images/graphicalDelete.svg")
+ .body(this.viewBuilders.newChangeContext()
+ .expression(AQLUtils.getSelfServiceCallExpression("removeFromExposedElements", List.of(IEditingContext.EDITING_CONTEXT, TableDescription.TABLE)))
+ .build())
+ .build();
+
+ var deleteContextMenuEntry = this.tableBuilders.newRowContextMenuEntry()
+ .name("RTV-ContextMenuEntry-DeleteRequirement")
+ .labelExpression("Delete from model")
+ .iconURLExpression("/images/semanticDelete.svg")
+ .body(this.viewBuilders.newChangeContext()
+ .expression(AQLUtils.getSelfServiceCallExpression("deleteFromModel"))
+ .build())
+ .build();
+
+ entries.add(removeContextMenuEntry);
+ entries.add(deleteContextMenuEntry);
+
+ return entries;
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationCreateRequirementDataFetcher.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationCreateRequirementDataFetcher.java
new file mode 100644
index 000000000..85b59a244
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationCreateRequirementDataFetcher.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.datafetchers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+
+import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher;
+import org.eclipse.sirius.components.core.api.IPayload;
+import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates;
+import org.eclipse.sirius.components.graphql.api.IEditingContextDispatcher;
+import org.eclipse.sirius.components.graphql.api.IExceptionWrapper;
+import org.eclipse.syson.table.requirements.view.dto.CreateRequirementInput;
+
+import graphql.schema.DataFetchingEnvironment;
+
+/**
+ * Data fetcher for the field Mutation#exposeRequirements.
+ *
+ * @author arichard
+ */
+@QueryDataFetcher(type = "Mutation", field = "createRequirement")
+public class MutationCreateRequirementDataFetcher implements IDataFetcherWithFieldCoordinates> {
+
+ private static final String INPUT_ARGUMENT = "input";
+
+ private final ObjectMapper objectMapper;
+
+ private final IExceptionWrapper exceptionWrapper;
+
+ private final IEditingContextDispatcher editingContextDispatcher;
+
+ public MutationCreateRequirementDataFetcher(ObjectMapper objectMapper, IExceptionWrapper exceptionWrapper, IEditingContextDispatcher editingContextDispatcher) {
+ this.objectMapper = Objects.requireNonNull(objectMapper);
+ this.exceptionWrapper = Objects.requireNonNull(exceptionWrapper);
+ this.editingContextDispatcher = Objects.requireNonNull(editingContextDispatcher);
+ }
+
+ @Override
+ public CompletableFuture get(DataFetchingEnvironment environment) throws Exception {
+ Object argument = environment.getArgument(INPUT_ARGUMENT);
+ var input = this.objectMapper.convertValue(argument, CreateRequirementInput.class);
+
+ return this.exceptionWrapper.wrapMono(() -> this.editingContextDispatcher.dispatchMutation(input.editingContextId(), input), input).toFuture();
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationExposeRequirementsDataFetcher.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationExposeRequirementsDataFetcher.java
new file mode 100644
index 000000000..a5717b133
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/datafetchers/MutationExposeRequirementsDataFetcher.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.datafetchers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+
+import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher;
+import org.eclipse.sirius.components.core.api.IPayload;
+import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates;
+import org.eclipse.sirius.components.graphql.api.IEditingContextDispatcher;
+import org.eclipse.sirius.components.graphql.api.IExceptionWrapper;
+import org.eclipse.syson.table.requirements.view.dto.ExposeRequirementsInput;
+
+import graphql.schema.DataFetchingEnvironment;
+
+/**
+ * Data fetcher for the field Mutation#exposeRequirements.
+ *
+ * @author arichard
+ */
+@QueryDataFetcher(type = "Mutation", field = "exposeRequirements")
+public class MutationExposeRequirementsDataFetcher implements IDataFetcherWithFieldCoordinates> {
+
+ private static final String INPUT_ARGUMENT = "input";
+
+ private final ObjectMapper objectMapper;
+
+ private final IExceptionWrapper exceptionWrapper;
+
+ private final IEditingContextDispatcher editingContextDispatcher;
+
+ public MutationExposeRequirementsDataFetcher(ObjectMapper objectMapper, IExceptionWrapper exceptionWrapper, IEditingContextDispatcher editingContextDispatcher) {
+ this.objectMapper = Objects.requireNonNull(objectMapper);
+ this.exceptionWrapper = Objects.requireNonNull(exceptionWrapper);
+ this.editingContextDispatcher = Objects.requireNonNull(editingContextDispatcher);
+ }
+
+ @Override
+ public CompletableFuture get(DataFetchingEnvironment environment) throws Exception {
+ Object argument = environment.getArgument(INPUT_ARGUMENT);
+ var input = this.objectMapper.convertValue(argument, ExposeRequirementsInput.class);
+
+ return this.exceptionWrapper.wrapMono(() -> this.editingContextDispatcher.dispatchMutation(input.editingContextId(), input), input).toFuture();
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementEventHandler.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementEventHandler.java
new file mode 100644
index 000000000..614d0b08b
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementEventHandler.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.dto;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.sirius.components.collaborative.api.ChangeDescription;
+import org.eclipse.sirius.components.collaborative.api.ChangeKind;
+import org.eclipse.sirius.components.collaborative.api.IEditingContextEventHandler;
+import org.eclipse.sirius.components.collaborative.api.IRepresentationSearchService;
+import org.eclipse.sirius.components.collaborative.api.Monitoring;
+import org.eclipse.sirius.components.collaborative.messages.ICollaborativeMessageService;
+import org.eclipse.sirius.components.core.api.ErrorPayload;
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.IInput;
+import org.eclipse.sirius.components.core.api.IObjectSearchService;
+import org.eclipse.sirius.components.core.api.IPayload;
+import org.eclipse.sirius.components.core.api.SuccessPayload;
+import org.eclipse.sirius.components.representations.Message;
+import org.eclipse.sirius.components.representations.MessageLevel;
+import org.eclipse.sirius.components.tables.Table;
+import org.eclipse.syson.services.ElementInitializerSwitch;
+import org.eclipse.syson.sysml.Membership;
+import org.eclipse.syson.sysml.RequirementUsage;
+import org.eclipse.syson.sysml.SysmlFactory;
+import org.eclipse.syson.sysml.ViewUsage;
+import org.eclipse.syson.util.GetIntermediateContainerCreationSwitch;
+import org.springframework.stereotype.Service;
+
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.MeterRegistry;
+import reactor.core.publisher.Sinks.Many;
+import reactor.core.publisher.Sinks.One;
+
+/**
+ * Event handler for CreateRequirement mutation.
+ *
+ * @author arichard
+ */
+@Service
+public class CreateRequirementEventHandler implements IEditingContextEventHandler {
+
+ private final IObjectSearchService objectSearchService;
+
+ private final IRepresentationSearchService representationSearchService;
+
+ private final ICollaborativeMessageService messageService;
+
+ private final Counter counter;
+
+ public CreateRequirementEventHandler(IObjectSearchService objectSearchService, IRepresentationSearchService representationSearchService, ICollaborativeMessageService messageService,
+ MeterRegistry meterRegistry) {
+ this.objectSearchService = Objects.requireNonNull(objectSearchService);
+ this.representationSearchService = Objects.requireNonNull(representationSearchService);
+ this.messageService = Objects.requireNonNull(messageService);
+ this.counter = Counter.builder(Monitoring.EVENT_HANDLER)
+ .tag(Monitoring.NAME, this.getClass().getSimpleName())
+ .register(meterRegistry);
+ }
+
+ @Override
+ public boolean canHandle(IEditingContext editingContext, IInput input) {
+ return input instanceof CreateRequirementInput;
+ }
+
+ @Override
+ public void handle(One payloadSink, Many changeDescriptionSink, IEditingContext editingContext, IInput input) {
+ this.counter.increment();
+
+ List messages = List.of(new Message(this.messageService.invalidInput(input.getClass().getSimpleName(), CreateRequirementInput.class.getSimpleName()),
+ MessageLevel.ERROR));
+ ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, editingContext.getId(), input);
+
+ IPayload payload = null;
+
+ if (input instanceof CreateRequirementInput createRequirementInput) {
+ var tableId = createRequirementInput.tableId();
+ var viewUsage = this.getViewUsage(editingContext, tableId);
+ if (viewUsage != null) {
+ boolean sucess = this.createRequirement(editingContext, viewUsage);
+ if (sucess) {
+ payload = new SuccessPayload(input.id(), messages);
+ changeDescription = new ChangeDescription(ChangeKind.SEMANTIC_CHANGE, editingContext.getId(), input);
+ } else {
+ payload = new ErrorPayload(input.id(), "Unable to create a RequirementUsage");
+ }
+ }
+ }
+
+ if (payload == null) {
+ payload = new ErrorPayload(input.id(), messages);
+ }
+
+ payloadSink.tryEmitValue(payload);
+ changeDescriptionSink.tryEmitNext(changeDescription);
+ }
+
+ private ViewUsage getViewUsage(IEditingContext editingContext, String tableId) {
+ var optTable = this.representationSearchService.findById(editingContext, tableId, Table.class);
+ if (optTable.isPresent()) {
+ var objectId = optTable.get().getTargetObjectId();
+ var parentObject = this.objectSearchService.getObject(editingContext, objectId);
+ if (parentObject.isPresent()) {
+ var object = parentObject.get();
+ if (object instanceof ViewUsage viewUsage) {
+ return viewUsage;
+ }
+ }
+ }
+ return null;
+ }
+
+ private boolean createRequirement(IEditingContext editingContext, ViewUsage viewUsage) {
+ var owningNamespace = viewUsage.getOwningNamespace();
+ RequirementUsage newRequirementUsage = SysmlFactory.eINSTANCE.createRequirementUsage();
+ Optional optMembershipEClass = new GetIntermediateContainerCreationSwitch(owningNamespace).doSwitch(newRequirementUsage.eClass());
+ if (optMembershipEClass.isPresent()) {
+ var newMembership = SysmlFactory.eINSTANCE.create(optMembershipEClass.get());
+ if (newMembership instanceof Membership membership) {
+ owningNamespace.getOwnedRelationship().add(membership);
+ membership.getOwnedRelatedElement().add(newRequirementUsage);
+ new ElementInitializerSwitch().caseRequirementUsage(newRequirementUsage);
+ var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
+ viewUsage.getOwnedRelationship().add(membershipExpose);
+ membershipExpose.setImportedMembership(membership);
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementInput.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementInput.java
new file mode 100644
index 000000000..16927248f
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/CreateRequirementInput.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.dto;
+
+import java.util.UUID;
+
+import org.eclipse.sirius.components.core.api.IInput;
+
+/**
+ * The input object of the CreateRequirement mutation.
+ *
+ * @author arichard
+ */
+public record CreateRequirementInput(UUID id, String editingContextId, String tableId) implements IInput {
+
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsEventHandler.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsEventHandler.java
new file mode 100644
index 000000000..bd319c401
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsEventHandler.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.dto;
+
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.sirius.components.collaborative.api.ChangeDescription;
+import org.eclipse.sirius.components.collaborative.api.ChangeKind;
+import org.eclipse.sirius.components.collaborative.api.IEditingContextEventHandler;
+import org.eclipse.sirius.components.collaborative.api.IRepresentationSearchService;
+import org.eclipse.sirius.components.collaborative.api.Monitoring;
+import org.eclipse.sirius.components.collaborative.messages.ICollaborativeMessageService;
+import org.eclipse.sirius.components.core.api.ErrorPayload;
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.IInput;
+import org.eclipse.sirius.components.core.api.IObjectSearchService;
+import org.eclipse.sirius.components.core.api.IPayload;
+import org.eclipse.sirius.components.core.api.SuccessPayload;
+import org.eclipse.sirius.components.representations.Message;
+import org.eclipse.sirius.components.representations.MessageLevel;
+import org.eclipse.sirius.components.tables.Table;
+import org.eclipse.syson.sysml.RequirementUsage;
+import org.eclipse.syson.sysml.SysmlFactory;
+import org.eclipse.syson.sysml.ViewUsage;
+import org.springframework.stereotype.Service;
+
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.MeterRegistry;
+import reactor.core.publisher.Sinks.Many;
+import reactor.core.publisher.Sinks.One;
+
+/**
+ * Event handler for ExposeRequirements mutation.
+ *
+ * @author arichard
+ */
+@Service
+public class ExposeRequirementsEventHandler implements IEditingContextEventHandler {
+
+ private final IObjectSearchService objectSearchService;
+
+ private final IRepresentationSearchService representationSearchService;
+
+ private final ICollaborativeMessageService messageService;
+
+ private final Counter counter;
+
+ public ExposeRequirementsEventHandler(IObjectSearchService objectSearchService, IRepresentationSearchService representationSearchService, ICollaborativeMessageService messageService,
+ MeterRegistry meterRegistry) {
+ this.objectSearchService = Objects.requireNonNull(objectSearchService);
+ this.representationSearchService = Objects.requireNonNull(representationSearchService);
+ this.messageService = Objects.requireNonNull(messageService);
+ this.counter = Counter.builder(Monitoring.EVENT_HANDLER)
+ .tag(Monitoring.NAME, this.getClass().getSimpleName())
+ .register(meterRegistry);
+ }
+
+ @Override
+ public boolean canHandle(IEditingContext editingContext, IInput input) {
+ return input instanceof ExposeRequirementsInput;
+ }
+
+ @Override
+ public void handle(One payloadSink, Many changeDescriptionSink, IEditingContext editingContext, IInput input) {
+ this.counter.increment();
+
+ List messages = List.of(new Message(this.messageService.invalidInput(input.getClass().getSimpleName(), ExposeRequirementsInput.class.getSimpleName()),
+ MessageLevel.ERROR));
+ ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, editingContext.getId(), input);
+
+ IPayload payload = null;
+
+ if (input instanceof ExposeRequirementsInput exposeRequirementsInput) {
+ var tableId = exposeRequirementsInput.tableId();
+ var viewUsage = this.getViewUsage(editingContext, tableId);
+ if (viewUsage != null) {
+ this.exposeRequirements(editingContext, viewUsage);
+ payload = new SuccessPayload(input.id(), messages);
+ changeDescription = new ChangeDescription(ChangeKind.SEMANTIC_CHANGE, editingContext.getId(), input);
+ }
+ }
+
+ if (payload == null) {
+ payload = new ErrorPayload(input.id(), messages);
+ }
+
+ payloadSink.tryEmitValue(payload);
+ changeDescriptionSink.tryEmitNext(changeDescription);
+ }
+
+ private ViewUsage getViewUsage(IEditingContext editingContext, String tableId) {
+ var optTable = this.representationSearchService.findById(editingContext, tableId, Table.class);
+ if (optTable.isPresent()) {
+ var objectId = optTable.get().getTargetObjectId();
+ var parentObject = this.objectSearchService.getObject(editingContext, objectId);
+ if (parentObject.isPresent()) {
+ var object = parentObject.get();
+ if (object instanceof ViewUsage viewUsage) {
+ return viewUsage;
+ }
+ }
+ }
+ return null;
+ }
+
+ private void exposeRequirements(IEditingContext editingContext, ViewUsage viewUsage) {
+ var owningNamespace = viewUsage.getOwningNamespace();
+ owningNamespace.getOwnedMember().stream()
+ .filter(RequirementUsage.class::isInstance)
+ .map(RequirementUsage.class::cast)
+ .forEach(req -> {
+ if (!viewUsage.getExposedElement().contains(req)) {
+ var membershipExpose = SysmlFactory.eINSTANCE.createMembershipExpose();
+ viewUsage.getOwnedRelationship().add(membershipExpose);
+ membershipExpose.setImportedMembership(req.getOwningMembership());
+ }
+ });
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsInput.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsInput.java
new file mode 100644
index 000000000..6cb3a5d55
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/dto/ExposeRequirementsInput.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.dto;
+
+import java.util.UUID;
+
+import org.eclipse.sirius.components.core.api.IInput;
+
+/**
+ * The input object of the ExposeRequirements mutation.
+ *
+ * @author arichard
+ */
+public record ExposeRequirementsInput(UUID id, String editingContextId, String tableId) implements IInput {
+
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVMutationServices.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVMutationServices.java
new file mode 100644
index 000000000..e3f0ddc43
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVMutationServices.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.services;
+
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.IObjectSearchService;
+import org.eclipse.sirius.components.tables.Table;
+import org.eclipse.syson.services.DeleteService;
+import org.eclipse.syson.sysml.Documentation;
+import org.eclipse.syson.sysml.MembershipExpose;
+import org.eclipse.syson.sysml.RequirementUsage;
+import org.eclipse.syson.sysml.SysmlFactory;
+import org.eclipse.syson.sysml.ViewUsage;
+
+/**
+ * Mutation services for the Requirements Table View. The services declared in this class modify the model or the table
+ * view.
+ *
+ * @author arichard
+ */
+public class RTVMutationServices {
+
+ private final IObjectSearchService objectSearchService;
+
+ private final DeleteService deleteService;
+
+ public RTVMutationServices(IObjectSearchService objectSearchService) {
+ this.objectSearchService = Objects.requireNonNull(objectSearchService);
+ this.deleteService = new DeleteService();
+ }
+
+ public boolean removeFromExposedElements(RequirementUsage requirementUsage, IEditingContext editingContext, Table siriusTable) {
+ var tableTargetObjectId = siriusTable.getTargetObjectId();
+ var viewUsage = this.objectSearchService.getObject(editingContext, tableTargetObjectId).stream()
+ .filter(ViewUsage.class::isInstance)
+ .map(ViewUsage.class::cast)
+ .findFirst()
+ .orElse(null);
+ if (viewUsage != null) {
+ if (viewUsage.getExposedElement().contains(requirementUsage)) {
+ List membershipsExposed = viewUsage.getOwnedRelationship().stream()
+ .filter(MembershipExpose.class::isInstance)
+ .map(MembershipExpose.class::cast)
+ .filter(membershipExposed -> Objects.equals(membershipExposed.getImportedElement(), requirementUsage))
+ .toList();
+ var iterator = membershipsExposed.iterator();
+ while (iterator.hasNext()) {
+ var membershipExpose = iterator.next();
+ this.deleteService.deleteFromModel(membershipExpose);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean editDocumentation(RequirementUsage requirementUsage, String newValue) {
+ Documentation documentation = requirementUsage.getDocumentation().stream()
+ .findFirst()
+ .orElse(null);
+ if (documentation != null) {
+ documentation.setBody(newValue);
+ } else {
+ var newDocumentation = SysmlFactory.eINSTANCE.createDocumentation();
+ newDocumentation.setBody(newValue);
+ var owningMembership = SysmlFactory.eINSTANCE.createOwningMembership();
+ requirementUsage.getOwnedRelationship().add(owningMembership);
+ owningMembership.getOwnedRelatedElement().add(newDocumentation);
+ }
+ return true;
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVQueryServices.java b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVQueryServices.java
new file mode 100644
index 000000000..53f14a6d8
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/java/org/eclipse/syson/table/requirements/view/services/RTVQueryServices.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view.services;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.sirius.components.tables.ColumnFilter;
+import org.eclipse.sirius.components.tables.ColumnSort;
+import org.eclipse.syson.sysml.Documentation;
+import org.eclipse.syson.sysml.RequirementUsage;
+import org.eclipse.syson.sysml.ViewUsage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Query services for the Requirements Table View. The services declared in this class must not modify the model or the
+ * table view.
+ *
+ * @author arichard
+ */
+public class RTVQueryServices {
+
+ private final Logger logger = LoggerFactory.getLogger(RTVQueryServices.class);
+
+ private final ObjectMapper objectMapper;
+
+ public RTVQueryServices(ObjectMapper objectMapper) {
+ this.objectMapper = objectMapper;
+ }
+
+ public List getExposedRequirements(ViewUsage viewUsage) {
+ return viewUsage.getExposedElement().stream()
+ .filter(RequirementUsage.class::isInstance)
+ .map(RequirementUsage.class::cast)
+ .toList();
+ }
+
+ public String getDocumentationBody(RequirementUsage requirementUsage) {
+ return requirementUsage.getDocumentation().stream()
+ .map(Documentation::getBody)
+ .findFirst()
+ .orElse("");
+ }
+
+ public List sortAndFilterRequirements(List objects, List columnSort, List columnFilters, String gloablFilterData) {
+ var requirementsElements = objects.stream().filter(RequirementUsage.class::isInstance).map(RequirementUsage.class::cast).collect(Collectors.toList());
+ this.filterRequirements(columnFilters, gloablFilterData, requirementsElements);
+ this.sortRequirements(columnSort, requirementsElements);
+ return requirementsElements;
+ }
+
+ private void filterRequirements(List columnFilters, String gloablFilterData, List requirementsElements) {
+ if (gloablFilterData != null && !gloablFilterData.isBlank()) {
+ requirementsElements.removeIf(r -> !this.isValidGlobalFilterCandidate(r, gloablFilterData));
+ }
+ for (ColumnFilter columnFilter : columnFilters) {
+ if ("DeclaredName".equals(columnFilter.id())) {
+ requirementsElements.removeIf(r -> !this.isValidColumnFilterCandidate(r.getDeclaredName(), columnFilter));
+ } else if ("ReqId".equals(columnFilter.id())) {
+ requirementsElements.removeIf(r -> !this.isValidColumnFilterCandidate(r.getReqId(), columnFilter));
+ } else if ("Documentation".equals(columnFilter.id())) {
+ requirementsElements.removeIf(r -> !this.isValidColumnFilterCandidate(this.getDocumentationBody(r), columnFilter));
+ }
+ }
+ }
+
+ private void sortRequirements(List columnSort, List requirementsElements) {
+ for (ColumnSort colSort : columnSort) {
+ if ("DeclaredName".equals(colSort.id())) {
+ if (colSort.desc()) {
+ requirementsElements.sort(Comparator.comparing(RequirementUsage::getDeclaredName, String.CASE_INSENSITIVE_ORDER).reversed());
+ } else {
+ requirementsElements.sort(Comparator.comparing(RequirementUsage::getDeclaredName, String.CASE_INSENSITIVE_ORDER));
+ }
+ } else if ("ReqId".equals(colSort.id())) {
+ if (colSort.desc()) {
+ requirementsElements.sort(Comparator.comparing(RequirementUsage::getReqId, String.CASE_INSENSITIVE_ORDER).reversed());
+ } else {
+ requirementsElements.sort(Comparator.comparing(RequirementUsage::getReqId, String.CASE_INSENSITIVE_ORDER));
+ }
+ } else if ("Documentation".equals(colSort.id())) {
+ if (colSort.desc()) {
+ requirementsElements.sort(Comparator.comparing((RequirementUsage r) -> this.getDocumentationBody(r), String.CASE_INSENSITIVE_ORDER).reversed());
+ } else {
+ requirementsElements.sort(Comparator.comparing((RequirementUsage r) -> this.getDocumentationBody(r), String.CASE_INSENSITIVE_ORDER));
+ }
+ }
+ }
+ }
+
+ private boolean isValidColumnFilterCandidate(String candidate, ColumnFilter columnFilter) {
+ var isValid = true;
+ try {
+ String filterValue = this.objectMapper.readValue(columnFilter.value(), new TypeReference<>() {
+
+ });
+ isValid = candidate != null && candidate.contains(filterValue);
+ } catch (JsonProcessingException exception) {
+ this.logger.warn(exception.getMessage(), exception);
+ }
+ return isValid;
+ }
+
+ private boolean isValidGlobalFilterCandidate(RequirementUsage requirementUsage, String globalFilterData) {
+ boolean isValid = false;
+ // check declaredName
+ if (requirementUsage.getDeclaredName() != null && requirementUsage.getDeclaredName().contains(globalFilterData)) {
+ isValid = true;
+ }
+ // check reqId
+ if (!isValid && requirementUsage.getReqId() != null && requirementUsage.getReqId().contains(globalFilterData)) {
+ isValid = true;
+ }
+ // check documentation body
+ var documentationBody = this.getDocumentationBody(requirementUsage);
+ if (!isValid && documentationBody != null && documentationBody.contains(globalFilterData)) {
+ isValid = true;
+ }
+ return isValid;
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/main/resources/images/graphicalDelete.svg b/backend/views/syson-table-requirements-view/src/main/resources/images/graphicalDelete.svg
new file mode 100644
index 000000000..40ad08281
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/resources/images/graphicalDelete.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/backend/views/syson-table-requirements-view/src/main/resources/images/semanticDelete.svg b/backend/views/syson-table-requirements-view/src/main/resources/images/semanticDelete.svg
new file mode 100644
index 000000000..c3d65d14c
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/resources/images/semanticDelete.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/backend/views/syson-table-requirements-view/src/main/resources/schema/syson-table-requirements-view.graphqls b/backend/views/syson-table-requirements-view/src/main/resources/schema/syson-table-requirements-view.graphqls
new file mode 100644
index 000000000..44a4bb833
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/main/resources/schema/syson-table-requirements-view.graphqls
@@ -0,0 +1,20 @@
+extend type Mutation {
+ exposeRequirements(input: ExposeRequirementsInput!): ExposeRequirementsPayload!
+ createRequirement(input: CreateRequirementInput!): CreateRequirementPayload!
+}
+
+input ExposeRequirementsInput {
+ id: ID!
+ editingContextId: ID!
+ tableId: ID!
+}
+
+union ExposeRequirementsPayload = ErrorPayload | SuccessPayload
+
+input CreateRequirementInput {
+ id: ID!
+ editingContextId: ID!
+ tableId: ID!
+}
+
+union CreateRequirementPayload = ErrorPayload | SuccessPayload
diff --git a/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/ArchitectureConstants.java b/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/ArchitectureConstants.java
new file mode 100644
index 000000000..4e964fd92
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_TABLE_REQUIREMENTS_VIEW_ROOT_PACKAGE = "org.eclipse.syson.table.requirements.view..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_TABLE_REQUIREMENTS_VIEW_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/CodingRulesTests.java b/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/CodingRulesTests.java
new file mode 100644
index 000000000..0d8040c6e
--- /dev/null
+++ b/backend/views/syson-table-requirements-view/src/test/java/org/eclipse/syson/table/requirements/view/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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.table.requirements.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_TABLE_REQUIREMENTS_VIEW_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/menu/context/CreateRepresentationInputProcessor.java b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/menu/context/CreateRepresentationInputProcessor.java
index 86f7ebcd2..16818e67c 100644
--- a/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/menu/context/CreateRepresentationInputProcessor.java
+++ b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/menu/context/CreateRepresentationInputProcessor.java
@@ -25,13 +25,13 @@
import org.eclipse.sirius.components.core.api.IInput;
import org.eclipse.sirius.components.core.api.IObjectSearchService;
import org.eclipse.sirius.web.application.editingcontext.EditingContext;
-import org.eclipse.syson.application.services.GetIntermediateContainerCreationSwitch;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Relationship;
import org.eclipse.syson.sysml.SysmlFactory;
import org.eclipse.syson.sysml.ViewDefinition;
import org.eclipse.syson.sysml.ViewUsage;
import org.eclipse.syson.sysml.util.ElementUtil;
+import org.eclipse.syson.util.GetIntermediateContainerCreationSwitch;
import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers;
import org.springframework.stereotype.Service;
@@ -39,7 +39,7 @@
/**
* {@link IInputPreProcessor} and {@link IInputPostProcessor} allowing to create a ViewUsage element when creating a new
- * SysON SysMLv2 diagram. The SysON SysMLv2 diagram is then attached to this new ViewUsage.
+ * SysON SysMLv2 representation. The SysON SysMLv2 representation is then attached to this new ViewUsage.
*
* @author arichard
*/
@@ -60,7 +60,7 @@ public CreateRepresentationInputProcessor(IObjectSearchService objectSearchServi
@Override
public IInput preProcess(IEditingContext editingContext, IInput input, Many changeDescriptionSink) {
- if (editingContext instanceof EditingContext && input instanceof CreateRepresentationInput createRepresentationInput && canHandle(createRepresentationInput)) {
+ if (editingContext instanceof EditingContext && input instanceof CreateRepresentationInput createRepresentationInput && this.canHandle(createRepresentationInput)) {
var optElement = this.getObject(editingContext, createRepresentationInput);
if (optElement.isPresent()) {
Element containerElement = optElement.get();
@@ -73,8 +73,10 @@ public IInput preProcess(IEditingContext editingContext, IInput input, Many getObject(IEditingContext editingContext, CreateRepresentationInput input) {
return this.objectSearchService.getObject(editingContext, input.objectId())
.filter(Element.class::isInstance)
@@ -151,6 +171,8 @@ private Optional getViewDefinition(Element containerElement, Cre
} else if (Objects.equals(SysONRepresentationDescriptionIdentifiers.STATE_TRANSITION_VIEW_DIAGRAM_DESCRIPTION_ID, representationDescriptionId)) {
var generalViewViewDef = this.elementUtil.findByNameAndType(containerElement, "StandardViewDefinitions::StateTransitionView", ViewDefinition.class);
optViewDef = Optional.ofNullable(generalViewViewDef);
+ } else if (Objects.equals(SysONRepresentationDescriptionIdentifiers.REQUIREMENTS_TABLE_VIEW_DESCRIPTION_ID, representationDescriptionId)) {
+ optViewDef = Optional.empty();
}
return optViewDef;
}
diff --git a/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc b/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
index 4db5d5fe2..473b4523f 100644
--- a/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
+++ b/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
@@ -46,6 +46,8 @@ This contribution introduces some breaking changes:
- In diagrams, it is now possible to switch from one _ViewDefinition_ to another one without having to re-create the diagram.
- In diagrams, it is now possible to change the appearance (color, font...) of all diagram elements, through the new _Palette_ menu _Appearance_.
+- Add a new table view named _Requirements Table_ to display and edit requirements in a tabular way.
+This table is available on _ViewUsages_ elements.
== Bug fixes
diff --git a/frontend/syson-components/src/extensions/requirementsTable/CreateRequirementMenuEntry.tsx b/frontend/syson-components/src/extensions/requirementsTable/CreateRequirementMenuEntry.tsx
new file mode 100644
index 000000000..5c06a05fa
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/CreateRequirementMenuEntry.tsx
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+import { SettingsButtonMenuEntryProps } from '@eclipse-sirius/sirius-components-tables';
+import AddIcon from '@mui/icons-material/Add';
+import ListItemIcon from '@mui/material/ListItemIcon';
+import ListItemText from '@mui/material/ListItemText';
+import MenuItem from '@mui/material/MenuItem';
+
+import { useCreateRequirement } from './useCreateRequirement';
+
+export const CreateRequirementMenuEntry = ({ editingContextId, tableId }: SettingsButtonMenuEntryProps) => {
+ const { createRequirement } = useCreateRequirement();
+
+ return (
+
+ );
+};
diff --git a/frontend/syson-components/src/extensions/requirementsTable/ExposeRequirementsMenuEntry.tsx b/frontend/syson-components/src/extensions/requirementsTable/ExposeRequirementsMenuEntry.tsx
new file mode 100644
index 000000000..4de8c227b
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/ExposeRequirementsMenuEntry.tsx
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+import { SettingsButtonMenuEntryProps } from '@eclipse-sirius/sirius-components-tables';
+import FormatListBulletedAddIcon from '@mui/icons-material/FormatListBulletedAdd';
+import ListItemIcon from '@mui/material/ListItemIcon';
+import ListItemText from '@mui/material/ListItemText';
+import MenuItem from '@mui/material/MenuItem';
+
+import { useExposeRequirements } from './useExposeRequirements';
+
+export const ExposeRequirementsMenuEntry = ({ editingContextId, tableId }: SettingsButtonMenuEntryProps) => {
+ const { exposeRequirements } = useExposeRequirements();
+
+ return (
+
+ );
+};
diff --git a/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.ts b/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.ts
new file mode 100644
index 000000000..f3d05dfb9
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.ts
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+
+import { gql, useMutation } from '@apollo/client';
+import { GQLMessage, useMultiToast } from '@eclipse-sirius/sirius-components-core';
+import { useEffect } from 'react';
+import {
+ GQLCreateRequirementMutationData,
+ GQLCreateRequirementPayload,
+ GQLErrorPayload,
+ UseCreateRequirementValue,
+} from './useCreateRequirement.types';
+
+const createRequirementsMutation = gql`
+ mutation createRequirement($input: CreateRequirementInput!) {
+ createRequirement(input: $input) {
+ __typename
+ ... on ErrorPayload {
+ messages {
+ body
+ level
+ }
+ }
+ ... on SuccessPayload {
+ messages {
+ body
+ level
+ }
+ }
+ }
+ }
+`;
+
+const isErrorPayload = (payload: GQLCreateRequirementPayload): payload is GQLErrorPayload =>
+ payload.__typename === 'ErrorPayload';
+
+export const useCreateRequirement = (): UseCreateRequirementValue => {
+ const { addErrorMessage, addMessages } = useMultiToast();
+
+ const [mutationCreateRequirement, { loading, data, error }] =
+ useMutation(createRequirementsMutation);
+
+ useEffect(() => {
+ if (error) {
+ addErrorMessage('An unexpected error has occurred, please refresh the page');
+ }
+ if (data) {
+ const { createRequirement } = data;
+ if (isErrorPayload(createRequirement)) {
+ const { messages } = createRequirement;
+ addMessages(messages);
+ }
+ }
+ }, [data, error]);
+
+ const createRequirement = (editingContextId: string, tableId: string) => {
+ const input = {
+ id: crypto.randomUUID(),
+ editingContextId,
+ tableId,
+ };
+ mutationCreateRequirement({ variables: { input } });
+ };
+
+ const messages: GQLMessage[] = data?.createRequirement.messages || [];
+ return {
+ createRequirement,
+ loading,
+ messages,
+ };
+};
diff --git a/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.types.ts b/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.types.ts
new file mode 100644
index 000000000..b4f44ed57
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/useCreateRequirement.types.ts
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+
+import { GQLMessage } from '@eclipse-sirius/sirius-components-core';
+
+export interface UseCreateRequirementValue {
+ createRequirement: (editingContextId: string, tableId: string) => void;
+ loading: boolean;
+ messages: GQLMessage[];
+}
+
+export interface GQLCreateRequirementMutationData {
+ createRequirement: GQLCreateRequirementPayload;
+}
+
+export interface GQLCreateRequirementPayload {
+ __typename: string;
+ messages: GQLMessage[];
+}
+
+export interface GQLErrorPayload extends GQLCreateRequirementPayload {
+ messages: GQLMessage[];
+}
diff --git a/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.ts b/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.ts
new file mode 100644
index 000000000..ae913a881
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.ts
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+
+import { gql, useMutation } from '@apollo/client';
+import { GQLMessage, useMultiToast } from '@eclipse-sirius/sirius-components-core';
+import { useEffect } from 'react';
+import {
+ GQLErrorPayload,
+ GQLExposeRequirementsMutationData,
+ GQLExposeRequirementsPayload,
+ UseExposeRequirementsValue,
+} from './useExposeRequirements.types';
+
+const exposeRequirementsMutation = gql`
+ mutation exposeRequirements($input: ExposeRequirementsInput!) {
+ exposeRequirements(input: $input) {
+ __typename
+ ... on ErrorPayload {
+ messages {
+ body
+ level
+ }
+ }
+ ... on SuccessPayload {
+ messages {
+ body
+ level
+ }
+ }
+ }
+ }
+`;
+
+const isErrorPayload = (payload: GQLExposeRequirementsPayload): payload is GQLErrorPayload =>
+ payload.__typename === 'ErrorPayload';
+
+export const useExposeRequirements = (): UseExposeRequirementsValue => {
+ const { addErrorMessage, addMessages } = useMultiToast();
+
+ const [mutationExposeRequirements, { loading, data, error }] =
+ useMutation(exposeRequirementsMutation);
+
+ useEffect(() => {
+ if (error) {
+ addErrorMessage('An unexpected error has occurred, please refresh the page');
+ }
+ if (data) {
+ const { exposeRequirements } = data;
+ if (isErrorPayload(exposeRequirements)) {
+ const { messages } = exposeRequirements;
+ addMessages(messages);
+ }
+ }
+ }, [data, error]);
+
+ const exposeRequirements = (editingContextId: string, tableId: string) => {
+ const input = {
+ id: crypto.randomUUID(),
+ editingContextId,
+ tableId,
+ };
+ mutationExposeRequirements({ variables: { input } });
+ };
+
+ const messages: GQLMessage[] = data?.exposeRequirements.messages || [];
+ return {
+ exposeRequirements,
+ loading,
+ messages,
+ };
+};
diff --git a/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.types.ts b/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.types.ts
new file mode 100644
index 000000000..72de21143
--- /dev/null
+++ b/frontend/syson-components/src/extensions/requirementsTable/useExposeRequirements.types.ts
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2025 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
+ *******************************************************************************/
+
+import { GQLMessage } from '@eclipse-sirius/sirius-components-core';
+
+export interface UseExposeRequirementsValue {
+ exposeRequirements: (editingContextId: string, tableId: string) => void;
+ loading: boolean;
+ messages: GQLMessage[];
+}
+
+export interface GQLExposeRequirementsMutationData {
+ exposeRequirements: GQLExposeRequirementsPayload;
+}
+
+export interface GQLExposeRequirementsPayload {
+ __typename: string;
+ messages: GQLMessage[];
+}
+
+export interface GQLErrorPayload extends GQLExposeRequirementsPayload {
+ messages: GQLMessage[];
+}
diff --git a/frontend/syson-components/src/index.ts b/frontend/syson-components/src/index.ts
index 0e08a1455..487a0f462 100644
--- a/frontend/syson-components/src/index.ts
+++ b/frontend/syson-components/src/index.ts
@@ -17,6 +17,8 @@ export { InsertTextualSysMLv2Modal } from './extensions/InsertTextualSysMLv2Moda
export { SysONNavigationBarMenuIcon } from './extensions/navigationBarMenu/SysONNavigationBarMenuIcon';
export { PublishProjectSysMLContentsAsLibraryCommand } from './extensions/omnibox/PublishProjectSysMLContentsAsLibraryCommand';
export type { PublishProjectSysMLContentsAsLibraryCommandState } from './extensions/omnibox/PublishProjectSysMLContentsAsLibraryCommand.types';
+export { CreateRequirementMenuEntry } from './extensions/requirementsTable/CreateRequirementMenuEntry';
+export { ExposeRequirementsMenuEntry } from './extensions/requirementsTable/ExposeRequirementsMenuEntry';
export { ShowHideDiagramsIcons } from './extensions/ShowHideDiagramsIcons';
export { ShowHideDiagramsInheritedMembers } from './extensions/ShowHideDiagramsInheritedMembers';
export { ShowHideDiagramsInheritedMembersFromStandardLibraries } from './extensions/ShowHideDiagramsInheritedMembersFromStandardLibraries';
diff --git a/frontend/syson/src/index.tsx b/frontend/syson/src/index.tsx
index dd1be6f36..bf8943ddc 100644
--- a/frontend/syson/src/index.tsx
+++ b/frontend/syson/src/index.tsx
@@ -24,6 +24,7 @@ import {
OmniboxCommandOverrideContribution,
omniboxCommandOverrideContributionExtensionPoint,
} from '@eclipse-sirius/sirius-components-omnibox';
+import { settingButtonMenuEntryExtensionPoint } from '@eclipse-sirius/sirius-components-tables';
import {
GQLTreeItemContextMenuEntry,
treeItemContextMenuEntryExtensionPoint,
@@ -45,6 +46,8 @@ import {
UpdateLibraryTreeItemContextMenuContribution,
} from '@eclipse-sirius/sirius-web-application';
import {
+ CreateRequirementMenuEntry,
+ ExposeRequirementsMenuEntry,
InsertTextualSysMLMenuContribution,
PublishProjectSysMLContentsAsLibraryCommand,
SysMLImportedPackageNode,
@@ -159,6 +162,16 @@ extensionRegistry.addComponent(navigationBarMenuIconExtensionPoint, {
Component: SysONNavigationBarMenuIcon,
});
+extensionRegistry.addComponent(settingButtonMenuEntryExtensionPoint, {
+ identifier: `syson_${settingButtonMenuEntryExtensionPoint.identifier}`,
+ Component: CreateRequirementMenuEntry,
+});
+
+extensionRegistry.addComponent(settingButtonMenuEntryExtensionPoint, {
+ identifier: `syson_${settingButtonMenuEntryExtensionPoint.identifier}`,
+ Component: ExposeRequirementsMenuEntry,
+});
+
const treeItemContextMenuOverrideContributions: TreeItemContextMenuOverrideContribution[] = [
{
canHandle: (entry: GQLTreeItemContextMenuEntry) => {
diff --git a/scripts/check-coverage.jsh b/scripts/check-coverage.jsh
index 7f9a6e8a2..0aa8efcee 100755
--- a/scripts/check-coverage.jsh
+++ b/scripts/check-coverage.jsh
@@ -29,9 +29,9 @@ double checkCoverage(String module) {
}
record ModuleCoverage(String moduleName, double expectedCoverage) {}
-double expectedGlobalCoverage = 65.0;
+double expectedGlobalCoverage = 66.0;
var moduleCoverageData = List.of(
- new ModuleCoverage("syson-sysml-metamodel", 72.0),
+ new ModuleCoverage("syson-sysml-metamodel", 76.0),
new ModuleCoverage("syson-sysml-metamodel-edit", 16.0),
new ModuleCoverage("syson-siriusweb-customnodes-metamodel", 47.0),
new ModuleCoverage("syson-siriusweb-customnodes-metamodel-edit", 0.0),
@@ -41,10 +41,12 @@ var moduleCoverageData = List.of(
new ModuleCoverage("syson-sysml-import", 84.0),
new ModuleCoverage("syson-sysml-export", 63.0),
new ModuleCoverage("syson-sysml-validation", 99.0),
- new ModuleCoverage("syson-diagram-common-view", 84.0),
+ new ModuleCoverage("syson-common-view", 0.0),
+ new ModuleCoverage("syson-diagram-common-view", 85.0),
new ModuleCoverage("syson-standard-diagrams-view", 97.0),
- new ModuleCoverage("syson-tree-explorer-view", 79.0),
- new ModuleCoverage("syson-application-configuration", 67.0),
+ new ModuleCoverage("syson-table-requirements-view", 35.0),
+ new ModuleCoverage("syson-tree-explorer-view", 78.0),
+ new ModuleCoverage("syson-application-configuration", 71.0),
new ModuleCoverage("syson-application", 37.0)
);
diff --git a/scripts/update-sirius-web.js b/scripts/update-sirius-web.js
index a3a725494..5d6dce23e 100755
--- a/scripts/update-sirius-web.js
+++ b/scripts/update-sirius-web.js
@@ -38,8 +38,10 @@ projects.set("syson-siriusweb-customnodes-metamodel-edit", "metamodel");
projects.set("syson-direct-edit-grammar", "services");
projects.set("syson-services", "services");
projects.set("syson-sysml-rest-api-services", "services");
+projects.set("syson-common-view", "views");
projects.set("syson-diagram-common-view", "views");
projects.set("syson-standard-diagrams-view", "views");
+projects.set("syson-table-requirements-view", "views");
projects.set("syson-tree-explorer-view", "views");
projects.set("syson-diagram-tests", "views");