diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 50cf099d7d2..80fbad3ff3f 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -116,6 +116,7 @@ A key binding needs to contain at least one of `Control`, `Alt`, or `Meta` to be
- https://github.com/eclipse-sirius/sirius-web/issues/5982[#5982] [tree] Add the ability to trigger context menu entries using key bindings.
As for diagram tools, it is now possible to add `KeyBinding` instances to context menu entries in trees.
Note that for the moment, only entries that aren't overridden in the frontend can be triggered with key bindings, although it is possible to define key bindings for any entry.
+- https://github.com/eclipse-sirius/sirius-web/issues/6118[#6118] [diagram] Add support for auto layout until change
=== Improvements
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/arrange-all.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/arrange-all.spec.ts
index d409e9dad1e..f6859a63b1f 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/arrange-all.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/arrange-all.spec.ts
@@ -35,19 +35,20 @@ test.describe('diagram - arrange all', () => {
test('when a arrange all is triggered, then a fit to screen is applied', async ({ page }) => {
await expect(page.getByTestId('rf__wrapper')).toBeAttached();
- await expect(page.getByTestId('FreeForm - Wifi')).toBeInViewport();
+ const wifiNode = new PlaywrightNode(page, 'Wifi');
+ await expect(wifiNode.nodeLocator).toBeInViewport();
//move view port to hide some nodes
await page.getByTestId('rf__wrapper').hover({ position: { x: 10, y: 10 } });
await page.mouse.down();
await page.mouse.move(10, 10, { steps: 2 });
await page.mouse.up();
- await expect(page.getByTestId('FreeForm - Wifi')).not.toBeInViewport();
+ await expect(wifiNode.nodeLocator).not.toBeInViewport();
await page.getByTestId('arrange-all-menu').click();
await page.getByTestId('arrange-all-elk-layered').click();
- await expect(page.getByTestId('FreeForm - Wifi')).toBeInViewport();
+ await expect(wifiNode.nodeLocator).toBeInViewport();
});
});
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/auto-layout.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/auto-layout.spec.ts
index 0fc4f838760..915794cc206 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/auto-layout.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/auto-layout.spec.ts
@@ -82,3 +82,40 @@ test.describe('diagram - auto-layout', () => {
);
});
});
+
+test.describe('diagram - auto-until-manual', () => {
+ let projectId;
+ test.beforeEach(async ({ page, request }) => {
+ const project = await new PlaywrightProject(request).createProject('Studio', 'studio-template');
+ projectId = project.projectId;
+
+ await page.goto(`/projects/${projectId}/edit/`);
+ });
+
+ test.afterEach(async ({ request }) => {
+ await new PlaywrightProject(request).deleteProject(projectId);
+ });
+
+ test('when a diagram with auto-until-manual is opened, then all nodes are positioned according to the elk layout', async ({
+ page,
+ }) => {
+ await expect(page.getByTestId('rf__wrapper')).toBeAttached();
+
+ const node = new PlaywrightNode(page, 'Entity1', 'List');
+ const position = await node.getReactFlowXYPosition();
+ expect(position.x).toBe(12);
+ expect(position.y).toBe(242);
+ });
+
+ test('when moving a node on an auto-until-manual diagram, then move is not reset', async ({ page }) => {
+ await expect(page.getByTestId('rf__wrapper')).toBeAttached();
+
+ const rootNode = new PlaywrightNode(page, 'Entity1', 'List');
+ const rootPositionBefore = await rootNode.getDOMXYPosition();
+ await rootNode.move({ x: 100, y: 100 });
+
+ const rootPositionAfter = await rootNode.getDOMXYPosition();
+ expect(rootPositionAfter.x).not.toBe(rootPositionBefore.x);
+ expect(rootPositionAfter.y).not.toBe(rootPositionBefore.y);
+ });
+});
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/edge-on-edge.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/edge-on-edge.spec.ts
index d9582a9ec37..7e08198067b 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/edge-on-edge.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/edge-on-edge.spec.ts
@@ -74,7 +74,7 @@ test.describe('edge on edge', () => {
await page.mouse.up();
await expect(edges).toHaveCount(2);
//Create node to edge
- playwrightNode2b.click();
+ await playwrightNode2b.click();
await page.getByTestId('creationhandle-bottom').hover();
await page.mouse.down();
const playwrightEdge = new PlaywrightEdge(page);
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/key-bindings.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/key-bindings.spec.ts
index 5f8a0c9dbb2..e776765dd0b 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/key-bindings.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/key-bindings.spec.ts
@@ -18,10 +18,6 @@ import { PlaywrightProject } from '../../helpers/PlaywrightProject';
test.describe('diagram - key bindings', () => {
let projectId;
test.beforeEach(async ({ page, request }) => {
- await page.addInitScript(() => {
- // @ts-expect-error: we use a variable in the DOM to disable `fitView` functionality for Cypress tests.
- window.document.DEACTIVATE_FIT_VIEW_FOR_CYPRESS_TESTS = true;
- });
const project = await new PlaywrightProject(request).createProject('Studio', 'blank-studio-template');
projectId = project.projectId;
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/multi-dnd.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/multi-dnd.spec.ts
index 814b2efa932..f6c8c73d30c 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/multi-dnd.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/multi-dnd.spec.ts
@@ -10,7 +10,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-import { expect, test } from '@playwright/test';
+import { expect, test, Page } from '@playwright/test';
import { PlaywrightExplorer } from '../../helpers/PlaywrightExplorer';
import { PlaywrightNode } from '../../helpers/PlaywrightNode';
import { PlaywrightProject } from '../../helpers/PlaywrightProject';
@@ -87,12 +87,17 @@ test.describe('diagram - drag and drop of multiple elements', () => {
// Now, inside the diagram, select both attributes from the 'Source' entity
const attr1NodeBefore = new PlaywrightNode(page, 'attr1', 'IconLabel');
await attr1NodeBefore.click();
+ // Hide Node Panel Info to avoid overlap in diagram
+ const panel = page.locator('.react-flow__panel.bottom.left').first();
+ await panel.evaluate((node) => {
+ node.style.visibility = 'hidden';
+ });
const attr2NodeBefore = new PlaywrightNode(page, 'attr2', 'IconLabel');
await attr2NodeBefore.controlClick();
// And move them inside the 'Target' entity
- await attr2NodeBefore.move({ x: 400, y: 0 });
+ await attr2NodeBefore.move({ x: 10, y: -300 });
await page.waitForFunction(
() => {
@@ -148,12 +153,17 @@ test.describe('diagram - drag and drop of multiple elements', () => {
// Now, inside the diagram, select both attributes from the 'Source' entity
const attr1NodeBefore = new PlaywrightNode(page, 'attr1', 'IconLabel');
await attr1NodeBefore.click();
+ // Hide Node Panel Info to avoid overlap in diagram
+ const panel = page.locator('.react-flow__panel.bottom.left').first();
+ await panel.evaluate((node) => {
+ node.style.visibility = 'hidden';
+ });
const attr2NodeBefore = new PlaywrightNode(page, 'attr2', 'IconLabel');
await attr2NodeBefore.controlClick();
// And move them directly on the diagram area (not on an entity)
- await attr2NodeBefore.move({ x: 200, y: 200 });
+ await attr2NodeBefore.move({ x: 400, y: 100 });
await page.waitForFunction(
() => {
diff --git a/integration-tests-playwright/playwright/e2e/diagrams/tool.spec.ts b/integration-tests-playwright/playwright/e2e/diagrams/tool.spec.ts
index c642ef608d1..fcb96b1bc12 100644
--- a/integration-tests-playwright/playwright/e2e/diagrams/tool.spec.ts
+++ b/integration-tests-playwright/playwright/e2e/diagrams/tool.spec.ts
@@ -52,10 +52,6 @@ test.describe('diagram - tool', () => {
test.describe('diagram - tool key bindings', () => {
let projectId;
test.beforeEach(async ({ page, request }) => {
- await page.addInitScript(() => {
- // @ts-expect-error: we use a variable in the DOM to disable `fitView` functionality for Cypress tests.
- window.document.DEACTIVATE_FIT_VIEW_FOR_CYPRESS_TESTS = true;
- });
const project = await new PlaywrightProject(request).createProject('Studio', 'blank-studio-template');
projectId = project.projectId;
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/DiagramCreationService.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/DiagramCreationService.java
index 9a616528bf0..5bda67c6e61 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/DiagramCreationService.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/DiagramCreationService.java
@@ -38,6 +38,7 @@
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps;
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps.Builder;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.events.IDiagramEvent;
import org.eclipse.sirius.components.diagrams.events.undoredo.DiagramEdgeLayoutEvent;
import org.eclipse.sirius.components.diagrams.events.undoredo.DiagramLabelLayoutEvent;
@@ -186,7 +187,8 @@ private Diagram doRender(Object targetObject, IEditingContext editingContext, Di
.filter(DiagramEdgeLayoutEvent.class::isInstance)
.map(DiagramEdgeLayoutEvent.class::cast).toList();
- var newLayoutData = optionalPreviousDiagram.map(Diagram::getLayoutData).orElse(new DiagramLayoutData(Map.of(), Map.of(), Map.of()));
+ var newLayoutData = optionalPreviousDiagram.map(Diagram::getLayoutData).orElse(new DiagramLayoutData(Map.of(), Map.of(), Map.of(),
+ !diagramDescription.getLayoutOption().equals(DiagramLayoutOption.NONE)));
diagramNodeLayoutEvents.forEach(nodeLayoutDataEvent ->
newLayoutData.nodeLayoutData().put(nodeLayoutDataEvent.nodeId(), nodeLayoutDataEvent.nodeLayoutData()));
@@ -230,7 +232,13 @@ public Diagram updateLayout(IEditingContext editingContext, Diagram diagram, Lay
(oldValue, newValue) -> newValue
));
- var layoutData = new DiagramLayoutData(nodeLayoutData, edgeLayoutData, labelLayoutData);
+ boolean autoLaidOut = switch (layoutDiagramInput.diagramLayoutData().autoLayoutState()) {
+ case ACTIVATE -> true;
+ case DEACTIVATE -> false;
+ case UNCHANGED -> diagram.getLayoutData().autoLaidOut();
+ };
+
+ var layoutData = new DiagramLayoutData(nodeLayoutData, edgeLayoutData, labelLayoutData, autoLaidOut);
var laidOutDiagram = Diagram.newDiagram(diagram)
.layoutData(layoutData)
.build();
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/AutoLayoutState.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/AutoLayoutState.java
new file mode 100644
index 00000000000..12d2b9fbdf6
--- /dev/null
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/AutoLayoutState.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.collaborative.diagrams.dto;
+
+/**
+ * Defines the possible actions for managing the autoLayout state.
+ *
+ * @author frouene
+ */
+public enum AutoLayoutState {
+ UNCHANGED,
+ ACTIVATE,
+ DEACTIVATE
+}
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataInput.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataInput.java
index 58f61271b9f..3e880378a68 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataInput.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataInput.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023, 2025 Obeo.
+ * Copyright (c) 2023, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -19,6 +19,9 @@
*
* @author sbegaudeau
*/
-public record DiagramLayoutDataInput(List nodeLayoutData, List edgeLayoutData, List labelLayoutData) {
+public record DiagramLayoutDataInput(List nodeLayoutData,
+ List edgeLayoutData,
+ List labelLayoutData,
+ AutoLayoutState autoLayoutState) {
}
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataPayload.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataPayload.java
index 1905811fa06..4ee1c84da22 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataPayload.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/java/org/eclipse/sirius/components/collaborative/diagrams/dto/DiagramLayoutDataPayload.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023, 2025 Obeo.
+ * Copyright (c) 2023, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -23,6 +23,6 @@
*
* @author sbegaudeau
*/
-public record DiagramLayoutDataPayload(List nodeLayoutData, List edgeLayoutData, List labelLayoutData) {
+public record DiagramLayoutDataPayload(List nodeLayoutData, List edgeLayoutData, List labelLayoutData, boolean autoLaidOut) {
}
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls
index bec9ad1bb8b..02d48e5b6cc 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls
@@ -41,6 +41,7 @@ type DiagramLayoutData {
nodeLayoutData: [NodeLayoutData!]!
edgeLayoutData: [EdgeLayoutData!]!
labelLayoutData: [LabelLayoutData!]!
+ autoLaidOut: Boolean!
}
type NodeLayoutData {
@@ -417,7 +418,7 @@ type SingleClickOnTwoDiagramElementsCandidate {
type DiagramDescription implements RepresentationDescription {
id: ID!
label: String!
- autoLayout: Boolean!
+ layoutOption: DiagramLayoutOption!
arrangeLayoutDirection: ArrangeLayoutDirection!
nodeDescriptions: [NodeDescription!]!
childNodeDescriptionIds: [ID!]!
@@ -445,6 +446,12 @@ enum ArrangeLayoutDirection {
UP
}
+enum DiagramLayoutOption {
+ NONE,
+ AUTO_LAYOUT,
+ AUTO_UNTIL_MANUAL
+}
+
type DropNodeCompatibilityEntry {
droppedNodeDescriptionId: ID!
droppableOnDiagram: Boolean!
@@ -723,6 +730,13 @@ input DiagramLayoutDataInput {
nodeLayoutData: [NodeLayoutDataInput!]!
edgeLayoutData: [EdgeLayoutDataInput!]!
labelLayoutData: [LabelLayoutDataInput!]!
+ autoLayoutState: AutoLayoutState!
+}
+
+enum AutoLayoutState {
+ UNCHANGED
+ ACTIVATE
+ DEACTIVATE
}
input NodeLayoutDataInput {
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/CreateDiagramEventHandlerTests.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/CreateDiagramEventHandlerTests.java
index f58dd4a6fa4..9b4d45fef97 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/CreateDiagramEventHandlerTests.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/CreateDiagramEventHandlerTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@
import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService;
import org.eclipse.sirius.components.diagrams.Diagram;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.representations.Failure;
import org.eclipse.sirius.components.representations.IRepresentationDescription;
import org.junit.jupiter.api.Test;
@@ -64,6 +65,7 @@ public Optional findById(IEditingContext editingCont
.targetObjectIdProvider(variableManager -> "targetObjectId")
.dropHandler(variableManager -> new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
return Optional.of(diagramDescription);
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java
index cbc2225be03..44247aacfd3 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022, 2025 Obeo.
+ * Copyright (c) 2022, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@
import org.eclipse.sirius.components.diagrams.ViewModifier;
import org.eclipse.sirius.components.diagrams.components.BorderNodePosition;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.NodeDescription;
import org.eclipse.sirius.components.representations.Failure;
import org.eclipse.sirius.components.representations.IRepresentationDescription;
@@ -143,6 +144,7 @@ public void testGetConnectorTools() {
.edgeDescriptions(new ArrayList<>())
.dropHandler(variableManager -> new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
Node sourceNode = this.getNode(SOURCE_NODE_ID, SOURCE_NODE_TARGET_ID);
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetNodeDescriptionsEventHandlerTests.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetNodeDescriptionsEventHandlerTests.java
index d6093cf8cbe..8fd3da9b3ac 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetNodeDescriptionsEventHandlerTests.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetNodeDescriptionsEventHandlerTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 2025 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public Optional findById(IEditingContext editingCont
}
return desc;
}
+
@Override
public Map findAll(IEditingContext editingContext) {
var descriptions = new HashMap();
@@ -103,7 +104,7 @@ public Map findAll(IEditingContext editingCo
var diagram = Diagram.newDiagram(UUID.randomUUID().toString())
.descriptionId(DIAGRAM_DESCRIPTION_ID)
.edges(List.of())
- .layoutData(new DiagramLayoutData(Map.of(), Map.of(), Map.of()))
+ .layoutData(new DiagramLayoutData(Map.of(), Map.of(), Map.of(), false))
.nodes(List.of())
.targetObjectId("")
.build();
diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/TestDiagramDescriptionBuilder.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/TestDiagramDescriptionBuilder.java
index 97a5921278a..8ff6a93cfa6 100644
--- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/TestDiagramDescriptionBuilder.java
+++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/TestDiagramDescriptionBuilder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@
import org.eclipse.sirius.components.diagrams.LineStyle;
import org.eclipse.sirius.components.diagrams.RectangularNodeStyle;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.EdgeDescription;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
import org.eclipse.sirius.components.diagrams.description.LabelStyleDescription;
@@ -56,6 +57,7 @@ public DiagramDescription getDiagramDescription(String diagramDescriptionId, Lis
.edgeDescriptions(edgeDescriptions)
.dropHandler(variableManager -> new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
}
@@ -64,14 +66,14 @@ public EdgeDescription getEdgeDescription(String edgeDescriptionId, NodeDescript
Function> targetProvider = variableManager -> List.of();
Function edgeStyleProvider = variableManager ->
- EdgeStyle.newEdgeStyle()
- .size(2)
- .lineStyle(LineStyle.Dash_Dot)
- .sourceArrow(ArrowStyle.InputArrowWithDiamond)
- .targetArrow(ArrowStyle.None)
- .color("rgb(1, 2, 3)")
- .edgeType(EdgeType.Manhattan)
- .build();
+ EdgeStyle.newEdgeStyle()
+ .size(2)
+ .lineStyle(LineStyle.Dash_Dot)
+ .sourceArrow(ArrowStyle.InputArrowWithDiamond)
+ .targetArrow(ArrowStyle.None)
+ .color("rgb(1, 2, 3)")
+ .edgeType(EdgeType.Manhattan)
+ .build();
Function idProvider = variableManager -> variableManager.get(VariableManager.SELF, String.class).orElse(null);
diff --git a/packages/diagrams/backend/sirius-components-diagrams-graphql/src/main/java/org/eclipse/sirius/components/diagrams/graphql/datafetchers/diagram/DiagramLayoutDataDataFetcher.java b/packages/diagrams/backend/sirius-components-diagrams-graphql/src/main/java/org/eclipse/sirius/components/diagrams/graphql/datafetchers/diagram/DiagramLayoutDataDataFetcher.java
index 979bac26310..826017aea23 100644
--- a/packages/diagrams/backend/sirius-components-diagrams-graphql/src/main/java/org/eclipse/sirius/components/diagrams/graphql/datafetchers/diagram/DiagramLayoutDataDataFetcher.java
+++ b/packages/diagrams/backend/sirius-components-diagrams-graphql/src/main/java/org/eclipse/sirius/components/diagrams/graphql/datafetchers/diagram/DiagramLayoutDataDataFetcher.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023, 2025 Obeo.
+ * Copyright (c) 2023, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -48,6 +48,6 @@ public DiagramLayoutDataPayload get(DataFetchingEnvironment environment) throws
.stream()
.toList();
- return new DiagramLayoutDataPayload(nodeLayoutData, edgeLayoutData, labelLayoutData);
+ return new DiagramLayoutDataPayload(nodeLayoutData, edgeLayoutData, labelLayoutData, diagram.getLayoutData().autoLaidOut());
}
}
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/Diagram.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/Diagram.java
index b69974add55..3d6f66ff5e0 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/Diagram.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/Diagram.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2024 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@
*/
@Immutable
public final class Diagram implements IRepresentation {
+
public static final String KIND = IRepresentation.KIND_PREFIX + "?type=Diagram";
private String id;
@@ -101,9 +102,10 @@ public String toString() {
*/
@SuppressWarnings("checkstyle:HiddenField")
public static final class Builder {
- private String id;
- private String kind = KIND;
+ private final String id;
+
+ private final String kind = KIND;
private String targetObjectId;
@@ -113,7 +115,7 @@ public static final class Builder {
private List edges;
- private DiagramLayoutData layoutData = new DiagramLayoutData(Map.of(), Map.of(), Map.of());
+ private DiagramLayoutData layoutData = new DiagramLayoutData(Map.of(), Map.of(), Map.of(), false);
private Builder(String id) {
this.id = Objects.requireNonNull(id);
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramDescription.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramDescription.java
index 213ba5c009d..278ad318f0a 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramDescription.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramDescription.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -29,9 +29,9 @@
* The root concept of the description of a diagram representation.
*
*
- * This description is used to hold both the data and behavior to be executed during the rendering of the diagram.
- * As such, it is divided into multiple description objects containing various pieces of information such as {@link NodeDescription}
- * or {@link EdgeDescription}.
+ * This description is used to hold both the data and behavior to be executed during the rendering of the diagram.
+ * As such, it is divided into multiple description objects containing various pieces of information such as {@link NodeDescription}
+ * or {@link EdgeDescription}.
*
*
* @author sbegaudeau
@@ -65,7 +65,7 @@ public final class DiagramDescription implements IRepresentationDescription {
private String label;
- private boolean autoLayout;
+ private DiagramLayoutOption layoutOption;
private ArrangeLayoutDirection arrangeLayoutDirection;
@@ -92,8 +92,8 @@ private DiagramDescription() {
/**
* Entry point of the creation of the diagram description.
*
- * @param id The unique identifier of the description
- *
+ * @param id
+ * The unique identifier of the description
* @return The builder used to create a diagram description
*/
public static Builder newDiagramDescription(String id) {
@@ -103,8 +103,8 @@ public static Builder newDiagramDescription(String id) {
/**
* Entry point used to duplicate and modify an existing diagram description.
*
- * @param diagramDescription The original description
- *
+ * @param diagramDescription
+ * The original description
* @return The builder used to create a diagram description
*/
public static Builder newDiagramDescription(DiagramDescription diagramDescription) {
@@ -121,15 +121,8 @@ public String getLabel() {
return this.label;
}
- /**
- * Used to indicate if the diagram created should be laid out automatically.
- *
- * @return true if the diagram should be laid out automatically, false otherwise
- *
- * @technical-debt This property should not exist on the diagram description since it is not used by the rendering.
- */
- public boolean isAutoLayout() {
- return this.autoLayout;
+ public DiagramLayoutOption getLayoutOption() {
+ return this.layoutOption;
}
/**
@@ -137,7 +130,6 @@ public boolean isAutoLayout() {
*
* @return The main direction to be used by some layout algorithm.
*
- * @technical-debt This property should not exist on the diagram description since it is not used by the rendering.
*/
public ArrangeLayoutDirection getArrangeLayoutDirection() {
return this.arrangeLayoutDirection;
@@ -161,7 +153,7 @@ public Predicate getCanCreatePredicate() {
* Provides a function which will be used when a new diagram is created in order to compute its label.
*
*
- * The following variables will at least be available when this behavior is executed:
+ * The following variables will at least be available when this behavior is executed:
*
*
*
@@ -170,7 +162,6 @@ public Predicate getCanCreatePredicate() {
*
*
* @return A function used to compute the label of the representation.
- *
* @technical-debt This function is not used by the rendering, and it should not exist on the diagram description since
* it is not relevant to the creation of a diagram. It is instead used to compute one specific kind of metadata (the label)
* for one specific use case. Applications integrating Sirius Components could choose not to have any label at all or
@@ -202,7 +193,7 @@ public List getEdgeDescriptions() {
* Provides a function which will be used when a semantic element is dropped in a diagram.
*
*
- * The following variables will at least be available when this behavior is executed:
+ * The following variables will at least be available when this behavior is executed:
*
*
*
@@ -212,7 +203,6 @@ public List getEdgeDescriptions() {
*
*
* @return A function used to execute some behavior when a semantic element is dropped in a diagram.
- *
* @technical-debt This function is unused during the rendering and should thus be removed. Hardcoding such behavior
* into the description also provides a poor extensibility of the diagram representation by preventing downstream
* consumers from updating the existing behavior or adding a new one easily
@@ -225,7 +215,7 @@ public Function getDropHandler() {
* Provides a function which will be used when a node is being dropped in a diagram.
*
*
- * The following variables will at least be available when this behavior is executed:
+ * The following variables will at least be available when this behavior is executed:
*
*
*
@@ -246,7 +236,6 @@ public Function getDropHandler() {
*
*
* @return A function used to execute some behavior when a node is dropped in a diagram.
- *
* @technical-debt This function is unused during the rendering and should thus be removed. Hardcoding such behavior
* into the description also provides a poor extensibility of the diagram representation by preventing downstream
* consumers from updating the existing behavior or adding a new one easily
@@ -259,7 +248,7 @@ public Function getDropNodeHandler() {
* Provides the function which will be used to retrieve the URL of the various images composing the icon of the diagram.
*
*
- * The following variables will at least be available when this behavior is executed:
+ * The following variables will at least be available when this behavior is executed:
*
*
*
@@ -267,7 +256,6 @@ public Function getDropNodeHandler() {
*
*
* @return A function used to compute the URLs of the icon associated with the diagram.
- *
* @technical-debt This function is not used by the rendering, and it should not exist on the diagram description since
* it is not relevant to the creation of a diagram. It is instead used to compute one specific kind of metadata (the icon)
* for one specific use case. Applications integrating Sirius Components could choose not to have any icon at all or
@@ -295,7 +283,7 @@ public static final class Builder {
private String label;
- private boolean autoLayout;
+ private DiagramLayoutOption layoutOption;
private ArrangeLayoutDirection arrangeLayoutDirection = ArrangeLayoutDirection.UNDEFINED;
@@ -322,7 +310,7 @@ private Builder(String id) {
private Builder(DiagramDescription diagramDescription) {
this.id = diagramDescription.getId();
this.label = diagramDescription.getLabel();
- this.autoLayout = diagramDescription.isAutoLayout();
+ this.layoutOption = diagramDescription.getLayoutOption();
this.arrangeLayoutDirection = diagramDescription.getArrangeLayoutDirection();
this.targetObjectIdProvider = diagramDescription.getTargetObjectIdProvider();
this.canCreatePredicate = diagramDescription.getCanCreatePredicate();
@@ -339,8 +327,8 @@ public Builder label(String label) {
return this;
}
- public Builder autoLayout(boolean autoLayout) {
- this.autoLayout = autoLayout;
+ public Builder layoutOption(DiagramLayoutOption layoutOption) {
+ this.layoutOption = Objects.requireNonNull(layoutOption);
return this;
}
@@ -385,7 +373,7 @@ public Builder dropNodeHandler(Function dropNodeHandle
}
public Builder iconURLsProvider(Function> iconURLsProvider) {
- this.iconURLsProvider = Objects.requireNonNull(iconURLsProvider);
+ this.iconURLsProvider = Objects.requireNonNull(iconURLsProvider);
return this;
}
@@ -393,7 +381,7 @@ public DiagramDescription build() {
DiagramDescription diagramDescription = new DiagramDescription();
diagramDescription.id = Objects.requireNonNull(this.id);
diagramDescription.label = Objects.requireNonNull(this.label);
- diagramDescription.autoLayout = this.autoLayout;
+ diagramDescription.layoutOption = Objects.requireNonNull(this.layoutOption);
diagramDescription.arrangeLayoutDirection = Objects.requireNonNull(this.arrangeLayoutDirection);
diagramDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider);
diagramDescription.canCreatePredicate = Objects.requireNonNull(this.canCreatePredicate);
@@ -402,7 +390,7 @@ public DiagramDescription build() {
diagramDescription.edgeDescriptions = Objects.requireNonNull(this.edgeDescriptions);
diagramDescription.dropHandler = Objects.requireNonNull(this.dropHandler);
diagramDescription.dropNodeHandler = this.dropNodeHandler; // Optional on purpose.
- diagramDescription.iconURLsProvider = Objects.requireNonNull(this.iconURLsProvider);
+ diagramDescription.iconURLsProvider = Objects.requireNonNull(this.iconURLsProvider);
return diagramDescription;
}
}
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramLayoutOption.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramLayoutOption.java
new file mode 100644
index 00000000000..8e4963384d5
--- /dev/null
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/DiagramLayoutOption.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.diagrams.description;
+
+/**
+ * Used to indicate the option for the diagram layout.
+ *
+ * @author frouene
+ */
+public enum DiagramLayoutOption {
+ NONE, AUTO_LAYOUT, AUTO_UNTIL_MANUAL
+}
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/layoutdata/DiagramLayoutData.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/layoutdata/DiagramLayoutData.java
index c279a044d17..7e398bbd800 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/layoutdata/DiagramLayoutData.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/layoutdata/DiagramLayoutData.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023 Obeo.
+ * Copyright (c) 2023, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -23,7 +23,9 @@
public record DiagramLayoutData(
Map nodeLayoutData,
Map edgeLayoutData,
- Map labelLayoutData) {
+ Map labelLayoutData,
+ boolean autoLaidOut) {
+
public DiagramLayoutData {
Objects.requireNonNull(nodeLayoutData);
Objects.requireNonNull(edgeLayoutData);
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java
index 9c25f0eb74f..fefc4a188f9 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022, 2025 Obeo.
+ * Copyright (c) 2022, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@
import org.eclipse.sirius.components.diagrams.components.DiagramComponent;
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.EdgeDescription;
import org.eclipse.sirius.components.diagrams.description.IDiagramElementDescription;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
@@ -195,6 +196,7 @@ private Diagram createDiagram(Optional previousDiagram, List new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
VariableManager variableManager = new VariableManager();
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java
index 26b3ecc8a98..9a79ee30a8a 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@
import org.eclipse.sirius.components.diagrams.components.DiagramComponent;
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.EdgeDescription;
import org.eclipse.sirius.components.diagrams.description.IDiagramElementDescription;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
@@ -151,6 +152,7 @@ private Diagram renderDiagram(List nodeDescriptions, List new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
VariableManager variableManager = new VariableManager();
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java
index 5fac8a5f5a0..c546bda887f 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@
import org.eclipse.sirius.components.diagrams.components.DiagramComponent;
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
import org.eclipse.sirius.components.diagrams.description.LabelStyleDescription;
import org.eclipse.sirius.components.diagrams.description.NodeDescription;
@@ -246,6 +247,7 @@ private Diagram createDiagram(Function styleProvide
.edgeDescriptions(new ArrayList<>())
.dropHandler(variableManager -> new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
VariableManager variableManager = new VariableManager();
diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java
index 149c3bf9e16..cd3bb2a46d9 100644
--- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java
+++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2025 Obeo.
+ * Copyright (c) 2019, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@
import org.eclipse.sirius.components.diagrams.components.DiagramComponentProps;
import org.eclipse.sirius.components.diagrams.components.NodeContainmentKind;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
import org.eclipse.sirius.components.diagrams.description.LabelStyleDescription;
import org.eclipse.sirius.components.diagrams.description.NodeDescription;
@@ -365,6 +366,7 @@ private DiagramDescription getDiagramDescription(Function new Failure(""))
.iconURLsProvider(variableManager -> List.of())
+ .layoutOption(DiagramLayoutOption.NONE)
.build();
}
}
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/contexts/DiagramDescriptionContext.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/contexts/DiagramDescriptionContext.ts
index c8ac4b36cda..120a645342d 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/contexts/DiagramDescriptionContext.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/contexts/DiagramDescriptionContext.ts
@@ -21,7 +21,7 @@ const defaultValue: DiagramDescriptionContextValue = {
dropNodeCompatibility: [],
debug: false,
arrangeLayoutDirection: 'RIGHT',
- autoLayout: false,
+ layoutOption: 'NONE',
},
};
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/converter/convertDiagram.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/converter/convertDiagram.ts
index c79858b315d..5fe4a9e0c91 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/converter/convertDiagram.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/converter/convertDiagram.ts
@@ -318,5 +318,6 @@ export const convertDiagram = (
return {
nodes: rawDiagram.nodes,
edges: rawDiagram.edges,
+ autoLaidOut: gqlDiagram.layoutData.autoLaidOut,
};
};
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.ts
index 7b97d1b43ca..b54eedc2292 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.ts
@@ -55,6 +55,7 @@ fragment diagramFragment on Diagram {
resizedByUser
movedByUser
}
+ autoLaidOut
}
nodes {
...nodeFragment
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.types.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.types.ts
index aef3fe8f6a5..d2dd854f772 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.types.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/graphql/subscription/diagramFragment.types.ts
@@ -28,6 +28,7 @@ export interface GQLDiagramLayoutData {
nodeLayoutData: GQLNodeLayoutData[];
edgeLayoutData: GQLEdgeLayoutData[];
labelLayoutData: GQLLabelLayoutData[];
+ autoLaidOut: boolean;
}
export interface GQLNodeLayoutData {
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.tsx
index cff566160bb..512fb3456ff 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.tsx
@@ -262,7 +262,7 @@ export const DiagramRenderer = memo(({ diagramRefreshedEventPayload }: DiagramRe
setNodes(laidOutDiagram.nodes);
if (!readOnly) {
- synchronizeLayoutData(diagramRefreshedEventPayload.id, 'refresh', laidOutDiagram);
+ synchronizeLayoutData(diagramRefreshedEventPayload.id, 'refresh', laidOutDiagram, 'UNCHANGED');
}
}
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.types.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.types.ts
index 8970f444a32..0919b285dde 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.types.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/DiagramRenderer.types.ts
@@ -28,6 +28,7 @@ export interface DiagramRendererProps {
export interface Diagram {
nodes: Node[];
edges: Edge[];
+ autoLaidOut: boolean;
}
export type OutsideLabelLocation = 'BOTTOM_BEGIN' | 'BOTTOM_MIDDLE' | 'BOTTOM_END';
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/adjust-size/useAdjustSize.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/adjust-size/useAdjustSize.tsx
index 205f8f0bc1f..11191f8246d 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/adjust-size/useAdjustSize.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/adjust-size/useAdjustSize.tsx
@@ -56,7 +56,7 @@ export const useAdjustSize = (): UseAdjustSizeValue => {
nodes: updatedNodesAfterLayout,
edges: laidOutDiagram.edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
});
}
};
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/edge/useEditableEdgePath.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/edge/useEditableEdgePath.ts
index 7e548782c06..7ce7961bbc9 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/edge/useEditableEdgePath.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/edge/useEditableEdgePath.ts
@@ -29,7 +29,7 @@ export const useEditableEdgePath = (): UseEditableEdgePathValue => {
nodes: nodes,
edges: edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[synchronizeLayoutData]
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/handles/useHandlesLayout.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/handles/useHandlesLayout.tsx
index 5bb6fb54e66..7ec00566bb3 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/handles/useHandlesLayout.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/handles/useHandlesLayout.tsx
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 2025 Obeo.
+ * Copyright (c) 2024, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ export const useHandlesLayout = (): UseHandlesLayoutValue => {
nodes: nodes,
edges: getEdges(),
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[getEdges, synchronizeLayoutData]
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout-events/useLayoutOnBoundsChange.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout-events/useLayoutOnBoundsChange.ts
index 509e30cbc13..2d163cbfc57 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout-events/useLayoutOnBoundsChange.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout-events/useLayoutOnBoundsChange.ts
@@ -115,8 +115,7 @@ export const useLayoutOnBoundsChange = (): UseLayoutOnBoundsChangeValue => {
nodes: updatedNodesAfterLayout,
edges: laidOutDiagram.edges,
};
-
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'DEACTIVATE');
});
}
},
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/ListNodeLayoutHandler.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/ListNodeLayoutHandler.ts
index 91cd5169aea..64dbf4925ad 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/ListNodeLayoutHandler.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/ListNodeLayoutHandler.ts
@@ -22,7 +22,6 @@ import { getBorderNodeExtent } from './layoutBorderNodes';
import {
applyRatioOnNewNodeSizeValue,
computeNodesBox,
- findNodeIndex,
getDefaultOrMinHeight,
getDefaultOrMinWidth,
getEastBorderNodeFootprintHeight,
@@ -41,6 +40,16 @@ const getChildNodeHeightMinFootPrint = (node: Node): number => {
return node.data.resizedByUser ? node.height ?? 0 : getDefaultOrMinHeight(node.data.minComputedHeight ?? 0, node);
};
+const getBorderWidthValue = (borderWidthStyle: string | number | undefined): number => {
+ if (borderWidthStyle === undefined) {
+ return 0;
+ }
+ if (typeof borderWidthStyle === 'string') {
+ return parseFloat(borderWidthStyle);
+ }
+ return borderWidthStyle;
+};
+
export class ListNodeLayoutHandler implements INodeLayoutHandler {
public canHandle(node: Node) {
return node.type === 'listNode';
@@ -49,19 +58,13 @@ export class ListNodeLayoutHandler implements INodeLayoutHandler {
public handle(
layoutEngine: ILayoutEngine,
previousDiagram: RawDiagram | null,
- node: Node,
+ node: Node,
visibleNodes: Node[],
directChildren: Node[],
newlyAddedNodes: Node[],
forceDimensions?: ForcedDimensions
) {
- const nodeIndex = findNodeIndex(visibleNodes, node.id);
- const nodeElement = document.getElementById(`${node.id}-listNode-${nodeIndex}`);
- const nodeElementChild =
- nodeElement?.children &&
- Array.from(nodeElement.children).filter((child) => !child.classList.contains('react-flow__resize-control'))[0];
- const borderWidth = nodeElementChild ? parseFloat(window.getComputedStyle(nodeElementChild).borderLeftWidth) : 0;
-
+ const borderWidth = getBorderWidthValue(node.data.style.borderLeftWidth ?? node.data.style.borderWidth);
if (directChildren.length > 0) {
this.handleParentNode(
layoutEngine,
@@ -80,7 +83,7 @@ export class ListNodeLayoutHandler implements INodeLayoutHandler {
handleLeafNode(
previousDiagram: RawDiagram | null,
- node: Node,
+ node: Node,
_visibleNodes: Node[],
borderWidth: number,
forceDimensions?: ForcedDimensions
@@ -124,7 +127,7 @@ export class ListNodeLayoutHandler implements INodeLayoutHandler {
private handleParentNode(
layoutEngine: ILayoutEngine,
previousDiagram: RawDiagram | null,
- node: Node,
+ node: Node,
visibleNodes: Node[],
directChildren: Node[],
newlyAddedNodes: Node[],
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/arrange-all/useArrangeAll.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/arrange-all/useArrangeAll.ts
index f7dd1e7e914..941a87f3802 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/arrange-all/useArrangeAll.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/arrange-all/useArrangeAll.ts
@@ -79,7 +79,7 @@ export const useArrangeAll = (): UseArrangeAllValue => {
edges: laidOutDiagram.edges,
};
fitView({ duration: 200, nodes: laidOutNodesWithElk });
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'ACTIVATE');
resolve();
});
});
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.tsx
index cd0ccf988ee..d078b5ae36c 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.tsx
@@ -36,6 +36,7 @@ import { RawDiagram } from './layout.types';
import { isEastBorderNode, isWestBorderNode } from './layoutBorderNodes';
import { getChildren, computeNewlyNodePosition } from './layoutNode';
import { gap } from './layoutParams';
+import { ListNodeLayoutHandler } from './ListNodeLayoutHandler';
const emptyNodeProps = {
selected: false,
@@ -389,6 +390,19 @@ export const prepareLayoutLabels = (previousDiagram: RawDiagram | null, diagram:
layoutEdgeLabels(previousDiagram, diagram.edges);
};
+export const prepareListNodeLayout = (previousDiagram: RawDiagram | null, diagram: RawDiagram): void => {
+ const listNodeLayoutHandler = new ListNodeLayoutHandler();
+ const layoutEngine: ILayoutEngine = new LayoutEngine();
+
+ const visibleNodes: Node[] = diagram.nodes.filter((node) => !node.hidden);
+ const listNodes: Node[] = visibleNodes.filter(isListNode);
+
+ listNodes.forEach((node: Node) => {
+ const directChildren = visibleNodes.filter((visibleNode) => visibleNode.parentId === node.id);
+ listNodeLayoutHandler.handle(layoutEngine, previousDiagram, node, visibleNodes, directChildren, []);
+ });
+};
+
const layoutNodeLabels = (previousDiagram: RawDiagram | null, nodes: Node[]) => {
nodes.forEach((node) => {
const previousNode = (previousDiagram?.nodes ?? []).find((prevNode) => prevNode.id === node.id);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.types.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.types.ts
index e79cdc64f2e..a14d510b108 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.types.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layout.types.ts
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2023, 2025 Obeo.
+ * Copyright (c) 2023, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import { DiagramNodeType } from '../node/NodeTypes.types';
export interface RawDiagram {
nodes: Node[];
edges: Edge[];
+ autoLaidOut?: boolean;
}
export interface ForcedDimensions {
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useDistributeElements.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useDistributeElements.ts
index 4abde935137..c1724f4924d 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useDistributeElements.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useDistributeElements.ts
@@ -77,7 +77,7 @@ export const useDistributeElements = (): UseDistributeElementsValue => {
nodes: laidOutDiagram.nodes as Node[],
edges: laidOutDiagram.edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
});
}
};
@@ -147,7 +147,7 @@ export const useDistributeElements = (): UseDistributeElementsValue => {
nodes: laidOutDiagram.nodes,
edges: laidOutDiagram.edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
});
}
}, []);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useLayout.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useLayout.ts
index eac802466c7..ca97a8e7154 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useLayout.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useLayout.ts
@@ -22,7 +22,7 @@ import { GQLArrangeLayoutDirection } from '../../representation/DiagramRepresent
import { EdgeData, NodeData } from '../DiagramRenderer.types';
import { useLayoutConfigurations } from './arrange-all/useLayoutConfigurations';
import { useElkLayout } from './elk/useElkLayout';
-import { cleanLayoutArea, layout, prepareLayoutArea, prepareLayoutLabels } from './layout';
+import { cleanLayoutArea, layout, prepareLayoutArea, prepareLayoutLabels, prepareListNodeLayout } from './layout';
import { RawDiagram } from './layout.types';
import { UseLayoutState, UseLayoutValue } from './useLayout.types';
@@ -98,7 +98,12 @@ export const useLayout = (): UseLayoutValue => {
}));
} else if (state.currentStep === 'LAYOUT' && state.hiddenContainer && state.diagramToLayout) {
prepareLayoutLabels(state.previousDiagram, state.diagramToLayout);
- if (diagramDescription?.autoLayout && layoutConfigurations[0]) {
+ if (
+ layoutConfigurations[0] &&
+ (diagramDescription?.layoutOption === 'AUTO_LAYOUT' ||
+ (diagramDescription?.layoutOption === 'AUTO_UNTIL_MANUAL' && state.diagramToLayout.autoLaidOut))
+ ) {
+ prepareListNodeLayout(state.previousDiagram, state.diagramToLayout);
elkLayout(state.diagramToLayout.nodes, state.diagramToLayout.edges, layoutConfigurations[0].layoutOptions).then(
(layoutNodes) => {
const updatedLayoutNodes = layoutNodes.map((n) => {
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.ts
index 699664171f2..02354667391 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.ts
@@ -96,7 +96,10 @@ export const useSynchronizeLayoutData = (): UseSynchronizeLayoutDataValue => {
}
}, [data, error]);
- const toDiagramLayoutData = (diagram: RawDiagram): GQLDiagramLayoutData => {
+ const toDiagramLayoutData = (
+ diagram: RawDiagram,
+ autoLayoutState: 'UNCHANGED' | 'ACTIVATE' | 'DEACTIVATE'
+ ): GQLDiagramLayoutData => {
const nodeId2node = new Map>();
diagram.nodes.forEach((node) => nodeId2node.set(node.id, node));
const nodeLayoutData: GQLNodeLayoutData[] = [];
@@ -264,11 +267,17 @@ export const useSynchronizeLayoutData = (): UseSynchronizeLayoutDataValue => {
nodeLayoutData,
edgeLayoutData,
labelLayoutData,
+ autoLayoutState,
};
};
- const synchronizeLayoutData = (id: string, cause: string, diagram: RawDiagram) => {
- const diagramLayoutData = toDiagramLayoutData(diagram);
+ const synchronizeLayoutData = (
+ id: string,
+ cause: string,
+ diagram: RawDiagram,
+ autoLayoutState: 'UNCHANGED' | 'ACTIVATE' | 'DEACTIVATE'
+ ) => {
+ const diagramLayoutData = toDiagramLayoutData(diagram, autoLayoutState);
const input: GQLLayoutDiagramInput = {
id,
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.types.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.types.ts
index 4d1e0f5b202..2db17f5c672 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.types.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/useSynchronizeLayoutData.types.ts
@@ -16,13 +16,19 @@ import { HandleType, Position } from '@xyflow/react';
import { RawDiagram } from './layout.types';
export interface UseSynchronizeLayoutDataValue {
- synchronizeLayoutData: (id: string, cause: string, diagram: RawDiagram) => void;
+ synchronizeLayoutData: (
+ id: string,
+ cause: string,
+ diagram: RawDiagram,
+ autoLayoutState: 'UNCHANGED' | 'ACTIVATE' | 'DEACTIVATE'
+ ) => void;
}
export interface GQLDiagramLayoutData {
nodeLayoutData: GQLNodeLayoutData[];
edgeLayoutData: GQLEdgeLayoutData[];
labelLayoutData: GQLLabelLayoutData[];
+ autoLayoutState: 'UNCHANGED' | 'ACTIVATE' | 'DEACTIVATE';
}
export interface GQLNodeLayoutData {
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelMove.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelMove.ts
index 0bb83f6b367..30d71ab1118 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelMove.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelMove.ts
@@ -38,7 +38,7 @@ export const useLabelMove = (): UseLabelMoveValue => {
nodes: nodes,
edges: getEdges(),
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[getNodes, synchronizeLayoutData]
);
@@ -76,7 +76,7 @@ export const useLabelMove = (): UseLabelMoveValue => {
nodes: [...getNodes()],
edges: edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[getEdges, synchronizeLayoutData]
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResetPosition.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResetPosition.tsx
index 5408bac313a..4250f8601e9 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResetPosition.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResetPosition.tsx
@@ -30,7 +30,7 @@ export const useLabelResetPosition = (): UseLabelResetPositionValue => {
nodes: nodes,
edges: edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[synchronizeLayoutData]
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResize.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResize.ts
index ab0b17b2c4d..9945e675d1c 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResize.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useLabelResize.ts
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2025 Obeo.
+ * Copyright (c) 2025, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ export const useLabelResize = (): UseLabelResizeValue => {
nodes: nodes,
edges: getEdges(),
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[synchronizeLayoutData]
);
@@ -74,7 +74,7 @@ export const useLabelResize = (): UseLabelResizeValue => {
nodes: [...getNodes()],
edges: edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
},
[getEdges, synchronizeLayoutData]
);
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useResetMovedByUser.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useResetMovedByUser.ts
index 8ae1663addb..92341289b8a 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useResetMovedByUser.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/move/useResetMovedByUser.ts
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2025 Obeo.
+ * Copyright (c) 2025, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ export const useResetMovedByUser = (): UseResetMovedByUserValue => {
}),
edges: getEdges(),
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
};
return { resetMovedByUser };
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/reconnect-edge/useReconnectEdge.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/reconnect-edge/useReconnectEdge.tsx
index ebdb8e23d28..4abcb5ce0fd 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/reconnect-edge/useReconnectEdge.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/reconnect-edge/useReconnectEdge.tsx
@@ -214,7 +214,7 @@ export const useReconnectEdge = (): UseReconnectEdge => {
edges: getEdges(),
};
updateNodeInternals(targetEdgeHovered.id);
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
}
}
};
@@ -368,7 +368,7 @@ export const useReconnectEdge = (): UseReconnectEdge => {
edges: newEdges,
};
updateNodeInternals(targetInternalNode.id);
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
} else {
const currentHandle = targetInternalNode.data.connectionHandles.find(
(connectionHandle) => connectionHandle.id === handleId
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/resize/useLabelResetSize.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/resize/useLabelResetSize.ts
index c13265924da..70da62b6bcb 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/resize/useLabelResetSize.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/resize/useLabelResetSize.ts
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2025 Obeo.
+ * Copyright (c) 2025, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ export const useLabelResetSize = (): UseLabelResetSizeValue => {
nodes: laidOutDiagram.nodes,
edges: laidOutDiagram.edges,
};
- synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram);
+ synchronizeLayoutData(crypto.randomUUID(), 'layout', finalDiagram, 'UNCHANGED');
});
},
[synchronizeLayoutData, layout]
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
index 9a963c223ca..eb24022f702 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.tsx
@@ -66,7 +66,7 @@ export const getDiagramDescription = gql`
}
debug
arrangeLayoutDirection
- autoLayout
+ layoutOption
}
}
}
diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.types.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.types.ts
index bb127048190..91444805e73 100644
--- a/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.types.ts
+++ b/packages/diagrams/frontend/sirius-components-diagrams/src/representation/DiagramRepresentation.types.ts
@@ -63,9 +63,11 @@ export interface GQLDiagramDescription {
dropNodeCompatibility: GQLDropNodeCompatibility[];
debug: boolean;
arrangeLayoutDirection: GQLArrangeLayoutDirection;
- autoLayout: boolean;
+ layoutOption: GQLDiagramLayoutOption;
}
+export type GQLDiagramLayoutOption = 'NONE' | 'AUTO_LAYOUT' | 'AUTO_UNTIL_MANUAL';
+
export interface GQLDiagramToolbar {
expandedByDefault: boolean;
}
diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/migration/participants/DiagramDescriptionLayoutOptionMigrationParticipant.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/migration/participants/DiagramDescriptionLayoutOptionMigrationParticipant.java
new file mode 100644
index 00000000000..da4da18d14a
--- /dev/null
+++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/migration/participants/DiagramDescriptionLayoutOptionMigrationParticipant.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.web.application.editingcontext.migration.participants;
+
+import com.google.gson.JsonObject;
+
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.sirius.components.emf.migration.api.IMigrationParticipant;
+import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
+import org.eclipse.sirius.emfjson.resource.JsonResource;
+import org.springframework.stereotype.Service;
+
+/**
+ * MigrationParticipant that update the LayoutOption of DiagramDescription, from a boolean to DiagramLayoutOption enum.
+ *
+ * @author frouene
+ */
+@Service
+public class DiagramDescriptionLayoutOptionMigrationParticipant implements IMigrationParticipant {
+
+ private static final String PARTICIPANT_VERSION = "2026.3.0-202601161500";
+
+ @Override
+ public String getVersion() {
+ return PARTICIPANT_VERSION;
+ }
+
+ @Override
+ public void postObjectLoading(JsonResource resource, EObject eObject, JsonObject jsonObject) {
+ if (eObject instanceof DiagramDescription diagramDescription) {
+ var optionalDiagramDescriptionData = Optional.ofNullable(jsonObject.getAsJsonObject("data"));
+ optionalDiagramDescriptionData.ifPresent(diagramDescriptionData -> {
+ var optionalAutoLayout = Optional.ofNullable(diagramDescriptionData.get("autoLayout"));
+ optionalAutoLayout.ifPresent(autoLayout -> {
+ if (autoLayout.getAsBoolean()) {
+ diagramDescription.setLayoutOption(DiagramLayoutOption.AUTO_LAYOUT);
+ } else {
+ diagramDescription.setLayoutOption(DiagramLayoutOption.NONE);
+ }
+ });
+ });
+ }
+ }
+}
diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/DiagramImporterUpdateService.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/DiagramImporterUpdateService.java
index db388bcf46e..f3bf512582c 100644
--- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/DiagramImporterUpdateService.java
+++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/DiagramImporterUpdateService.java
@@ -161,7 +161,7 @@ public void handle(Map semanticElementsIdMappings, ICause cause,
Map nodeLayoutData = new HashMap<>();
Map edgeLayoutData = new HashMap<>();
Map labelLayoutData = new HashMap<>();
- var newLayoutData = new DiagramLayoutData(nodeLayoutData, edgeLayoutData, labelLayoutData);
+ var newLayoutData = new DiagramLayoutData(nodeLayoutData, edgeLayoutData, labelLayoutData, false);
this.handleLayout(newLayoutData, oldRepresentation.getLayoutData(), nodeElementOldNewIds, edgeElementOldNewIds, labelElementOldNewIds);
var updatedDiagram = this.diagramCreationService.refresh(editingContext.get(), diagramContext)
diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/representations/DomainDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/representations/DomainDiagramDescriptionProvider.java
index 4b63e1e6c0c..7819014b648 100644
--- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/representations/DomainDiagramDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/representations/DomainDiagramDescriptionProvider.java
@@ -35,6 +35,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider;
import org.eclipse.sirius.emfjson.resource.JsonResource;
import org.eclipse.sirius.web.application.editingcontext.EditingContext;
@@ -117,11 +118,11 @@ private View createView() {
diagramElementDescriptionProviders.forEach(diagramElementDescriptionProvider -> diagramElementDescriptionProvider.link(domainDiagramDescription, cache));
domainDiagramDescription.getNodeDescriptions().stream()
- .filter(nodeDescription -> nodeDescription.getName().equals(EntityNodeDescriptionProvider.ENTITY_NODE_DESCRIPTION_NAME))
- .flatMap(entityNodeScription -> entityNodeScription.getChildrenDescriptions().stream())
- .filter(nodeDescription -> nodeDescription.getName().equals(EntityNodeDescriptionProvider.ATTRIBUTE_NODE_DESCRIPTION_NAME))
- .findFirst()
- .ifPresent(attributeNodeDescription -> domainDiagramDescription.getPalette().getDropNodeTool().getAcceptedNodeTypes().add(attributeNodeDescription));
+ .filter(nodeDescription -> nodeDescription.getName().equals(EntityNodeDescriptionProvider.ENTITY_NODE_DESCRIPTION_NAME))
+ .flatMap(entityNodeScription -> entityNodeScription.getChildrenDescriptions().stream())
+ .filter(nodeDescription -> nodeDescription.getName().equals(EntityNodeDescriptionProvider.ATTRIBUTE_NODE_DESCRIPTION_NAME))
+ .findFirst()
+ .ifPresent(attributeNodeDescription -> domainDiagramDescription.getPalette().getDropNodeTool().getAcceptedNodeTypes().add(attributeNodeDescription));
domainView.eAllContents().forEachRemaining(eObject -> {
var id = UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes());
@@ -138,7 +139,7 @@ private View createView() {
private DiagramDescription domainDiagramDescription() {
var newEntity = "newEntity";
- var newEntityExpr = "aql:newEntity";
+ var newEntityExpr = "aql:newEntity";
var initialChangeContext = new ViewBuilders().newChangeContext()
.expression("aql:self")
.children(this.withNewEntity("NewEntity", newEntity))
@@ -185,10 +186,10 @@ private DiagramDescription domainDiagramDescription() {
.build();
var toolbar = new DiagramBuilders().newDiagramToolbar()
- .expandedByDefault(true)
- .build();
+ .expandedByDefault(true)
+ .build();
- var diagramDescription = new DiagramBuilders()
+ return new DiagramBuilders()
.newDiagramDescription()
.name("Domain")
.domainType("domain::Domain")
@@ -196,9 +197,8 @@ private DiagramDescription domainDiagramDescription() {
.palette(palette)
.toolbar(toolbar)
.arrangeLayoutDirection(ArrangeLayoutDirection.DOWN)
+ .layoutOption(DiagramLayoutOption.AUTO_UNTIL_MANUAL)
.build();
-
- return diagramDescription;
}
/**
@@ -210,14 +210,14 @@ private Operation withNewEntity(String entityName, String variableName, Operatio
fullBody.addAll(Arrays.asList(body));
return new ViewBuilders().newCreateInstance()
- .referenceName("types")
- .typeName("domain::Entity")
- .variableName(variableName)
- .children(new ViewBuilders().newChangeContext()
- .expression("aql:" + variableName)
- .children(fullBody.toArray(new Operation[0]))
- .build())
- .build();
+ .referenceName("types")
+ .typeName("domain::Entity")
+ .variableName(variableName)
+ .children(new ViewBuilders().newChangeContext()
+ .expression("aql:" + variableName)
+ .children(fullBody.toArray(new Operation[0]))
+ .build())
+ .build();
}
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeHandlePositionViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeHandlePositionViewProvider.java
index b11032d0429..41f3e8b1f5d 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeHandlePositionViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeHandlePositionViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.EdgeDescription;
import org.eclipse.sirius.components.view.diagram.LineStyle;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
@@ -90,7 +91,7 @@ private DiagramDescription createDiagramDescription(IColorProvider colorProvider
.name(DiagramEdgeHandlePositionDomainProvider.DOMAIN_NAME + " - simple edge handle position " + arrangeLayoutDirection.name())
.domainType(DiagramEdgeHandlePositionDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramEdgeHandlePositionDomainProvider.DOMAIN_NAME + " diagram " + arrangeLayoutDirection.name())
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(arrangeLayoutDirection)
.nodeDescriptions(nodeDescription1, nodeDescription2)
.edgeDescriptions(edgeDescription1)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeIconLabelViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeIconLabelViewProvider.java
index edac184f6d3..086d145dd19 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeIconLabelViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeIconLabelViewProvider.java
@@ -25,6 +25,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.EdgeDescription;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
@@ -87,7 +88,7 @@ private DiagramDescription createDiagramDescription(IColorProvider colorProvider
.name(DiagramEdgeIconLabelDomainProvider.DOMAIN_NAME + " - simple edge icon label")
.domainType(DiagramEdgeIconLabelDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramEdgeIconLabelDomainProvider.DOMAIN_NAME + " diagram ")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.nodeDescriptions(nodeDescription1, nodeDescription2)
.edgeDescriptions(edgeDescription1)
.build();
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeOnBorderNodeViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeOnBorderNodeViewProvider.java
index 26fcf09c802..691a98a5e63 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeOnBorderNodeViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeOnBorderNodeViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.EdgeDescription;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -91,7 +92,7 @@ private DiagramDescription createDiagramDescription(IColorProvider colorProvider
.name(DiagramEdgeOnBorderNodeDomainProvider.DOMAIN_NAME + " - simple edge on border node")
.domainType(DiagramEdgeOnBorderNodeDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramEdgeOnBorderNodeDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(nodeDescription1, nodeDescription2)
.edgeDescriptions(edgeDescription1)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeViewProvider.java
index 398d53b6674..80bdbe8b7fb 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramEdge/DiagramEdgeViewProvider.java
@@ -28,6 +28,7 @@
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.EdgeDescription;
import org.eclipse.sirius.components.view.diagram.EdgeTool;
import org.eclipse.sirius.components.view.diagram.EdgeType;
@@ -119,7 +120,7 @@ private DiagramDescription createDiagramDescription(IColorProvider colorProvider
.name(DiagramEdgeDomainProvider.DOMAIN_NAME + " - simple edges")
.domainType(DiagramEdgeDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramEdgeDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(nodeDescription1, nodeDescription2)
.edgeDescriptions(edgeDescription1, edgeDescription2, edgeDescription3, edgeDescription4, edgeDescription5)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeViewProvider.java
index 8245216919d..cd521783723 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeViewProvider.java
@@ -27,6 +27,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -87,7 +88,7 @@ private DiagramDescription diagramDescription(IColorProvider colorProvider) {
.name(DiagramResizeDomainProvider.DOMAIN_NAME + " - simple resize node")
.domainType(DiagramResizeDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramResizeDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider, "Entity1 - Resize Both", "::Entity1", UserResizableDirection.BOTH),
this.getNodeDescription(colorProvider, "Entity2 - Resize NONE", "::Entity2", UserResizableDirection.NONE),
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeWithSameSemanticElementViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeWithSameSemanticElementViewProvider.java
index 444e96a3021..24d9f421a65 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeWithSameSemanticElementViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramResize/DiagramResizeWithSameSemanticElementViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -81,7 +82,7 @@ private DiagramDescription diagramDescription(IColorProvider colorProvider) {
.name(DiagramResizeDomainProvider.DOMAIN_NAME + " - resize node with same semantic element")
.domainType(DiagramResizeDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramResizeDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider).build())
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrambordernode/DiagramBorderNodeViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrambordernode/DiagramBorderNodeViewProvider.java
index c424921c660..1784d908e61 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrambordernode/DiagramBorderNodeViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrambordernode/DiagramBorderNodeViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -87,7 +88,7 @@ private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvi
.name(DiagramBorderNodeDomainProvider.DOMAIN_NAME + " - simple border")
.domainType(DiagramBorderNodeDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramBorderNodeDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramdnd/DiagramDnDViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramdnd/DiagramDnDViewProvider.java
index d8658ab8c36..28b897623f1 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramdnd/DiagramDnDViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramdnd/DiagramDnDViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.LineStyle;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
@@ -118,7 +119,7 @@ private DiagramDescription getDiagramDescription(IColorProvider colorProvider) {
.name(DiagramDnDDomainProvider.DOMAIN_NAME + " - simple dnd view")
.domainType(DiagramDnDDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramDnDDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(entity1NodeDescription, entity2NodeDescription, entity3NodeDescription, entity4NodeDescription)
.palette(new DiagramBuilders()
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlabel/DiagramLabelViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlabel/DiagramLabelViewProvider.java
index 1c4b8b942d2..f94ec352308 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlabel/DiagramLabelViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlabel/DiagramLabelViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.DiagramPalette;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
@@ -92,7 +93,7 @@ private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvi
.name(DiagramLabelDomainProvider.DOMAIN_NAME + " - Fully display the inside label Diagram")
.domainType(DiagramLabelDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramLabelDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.palette(this.getDiagramPalette())
.nodeDescriptions(this.getNodeDescription(colorProvider, LabelOverflowStrategy.NONE))
@@ -110,7 +111,7 @@ private DiagramDescription wrapLabelWithoutChangingNodeWidthDiagramDescription(I
.name(DiagramLabelDomainProvider.DOMAIN_NAME + " - Wrap the label without changing the node width")
.domainType(DiagramLabelDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramLabelDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.palette(this.getDiagramPalette())
.nodeDescriptions(this.getNodeDescription(colorProvider, LabelOverflowStrategy.WRAP))
@@ -128,7 +129,7 @@ private DiagramDescription labelIsTruncatedWithoutChangingNodeWidthDiagramDescri
.name(DiagramLabelDomainProvider.DOMAIN_NAME + " - The label is truncated without changing the node width")
.domainType(DiagramLabelDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramLabelDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.palette(this.getDiagramPalette())
.nodeDescriptions(this.getNodeDescription(colorProvider, LabelOverflowStrategy.ELLIPSIS))
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramGrowableListViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramGrowableListViewProvider.java
index 603a9860ade..1ff8a93aba6 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramGrowableListViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramGrowableListViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelDescription;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
@@ -81,15 +82,15 @@ public List createViews() {
private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvider colorProvider) {
var toolbar = new DiagramBuilders().newDiagramToolbar()
- .expandedByDefault(true)
- .build();
+ .expandedByDefault(true)
+ .build();
return new DiagramBuilders()
.newDiagramDescription()
.name(DiagramListDomainProvider.DOMAIN_NAME + " - multiple growable list nodes")
.domainType(DiagramListDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramListDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramListViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramListViewProvider.java
index 68e573299a4..89162f945d0 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramListViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramListViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -86,7 +87,7 @@ private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvi
.name(DiagramListDomainProvider.DOMAIN_NAME + " - simple list node")
.domainType(DiagramListDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramListDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramSubNodeListViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramSubNodeListViewProvider.java
index 5cd90343bfb..40b19d46b30 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramSubNodeListViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramlist/DiagramSubNodeListViewProvider.java
@@ -25,6 +25,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelDescription;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
@@ -77,15 +78,15 @@ public List createViews() {
private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvider colorProvider) {
var toolbar = new DiagramBuilders().newDiagramToolbar()
- .expandedByDefault(true)
- .build();
+ .expandedByDefault(true)
+ .build();
return new DiagramBuilders()
.newDiagramDescription()
.name(DiagramListDomainProvider.DOMAIN_NAME + " - list with subnode")
.domainType(DiagramListDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramListDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramnodecreation/DiagramNodeCreationViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramnodecreation/DiagramNodeCreationViewProvider.java
index 3896284c20c..bc9e1db3200 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramnodecreation/DiagramNodeCreationViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramnodecreation/DiagramNodeCreationViewProvider.java
@@ -27,6 +27,7 @@
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.EdgeDescription;
import org.eclipse.sirius.components.view.diagram.EdgeType;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
@@ -124,7 +125,7 @@ private DiagramDescription gegtDiagramDescription(IColorProvider colorProvider)
.name(DiagramNodeCreationDomainProvider.DOMAIN_NAME + " - node creation")
.domainType(DiagramNodeCreationDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramNodeCreationDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(nodeDescription1, nodeDescription2, this.getNode3Description(colorProvider))
.edgeDescriptions(edgeDescription)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrampalette/DiagramPaletteViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrampalette/DiagramPaletteViewProvider.java
index 3f83c5d994d..48c2cc4ab2d 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrampalette/DiagramPaletteViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagrampalette/DiagramPaletteViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.LineStyle;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
@@ -83,7 +84,7 @@ private DiagramDescription getDiagramDescription(IColorProvider colorProvider) {
.name(DiagramPaletteDomainProvider.DOMAIN_NAME + " - palette")
.domainType(DiagramPaletteDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramPaletteDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramselfcontained/DiagramSelfContainedViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramselfcontained/DiagramSelfContainedViewProvider.java
index 8daebfcb5d3..25f114ae6ec 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramselfcontained/DiagramSelfContainedViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramselfcontained/DiagramSelfContainedViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.LineStyle;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
@@ -83,7 +84,7 @@ private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvi
.name(DiagramSelfContainedDomainProvider.DOMAIN_NAME + " - self contained")
.domainType(DiagramSelfContainedDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramSelfContainedDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramtoolbar/DiagramToolbarViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramtoolbar/DiagramToolbarViewProvider.java
index 1cbf46fbb7d..b0efd369641 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramtoolbar/DiagramToolbarViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/diagramtoolbar/DiagramToolbarViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.LineStyle;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy;
@@ -79,15 +80,15 @@ public List createViews() {
private DiagramDescription getDiagramDescriptionWithToolbar(IColorProvider colorProvider) {
var toolbar = new DiagramBuilders().newDiagramToolbar()
- .expandedByDefault(true)
- .build();
+ .expandedByDefault(true)
+ .build();
return new DiagramBuilders()
.newDiagramDescription()
.name(DiagramToolbarDomainProvider.DOMAIN_NAME + " - with toolbar")
.domainType(DiagramToolbarDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramToolbarDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
@@ -96,19 +97,19 @@ private DiagramDescription getDiagramDescriptionWithToolbar(IColorProvider color
private DiagramDescription getDiagramDescriptionWithCollapsedToolbar(IColorProvider colorProvider) {
var toolbar = new DiagramBuilders().newDiagramToolbar()
- .expandedByDefault(false)
- .build();
+ .expandedByDefault(false)
+ .build();
return new DiagramBuilders()
- .newDiagramDescription()
- .name(DiagramToolbarDomainProvider.DOMAIN_NAME + " - with collapsed toolbar")
- .domainType(DiagramToolbarDomainProvider.DOMAIN_NAME + "::Root")
- .titleExpression(DiagramToolbarDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
- .arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
- .nodeDescriptions(this.getNodeDescription(colorProvider))
- .toolbar(toolbar)
- .build();
+ .newDiagramDescription()
+ .name(DiagramToolbarDomainProvider.DOMAIN_NAME + " - with collapsed toolbar")
+ .domainType(DiagramToolbarDomainProvider.DOMAIN_NAME + "::Root")
+ .titleExpression(DiagramToolbarDomainProvider.DOMAIN_NAME + " diagram")
+ .layoutOption(DiagramLayoutOption.NONE)
+ .arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
+ .nodeDescriptions(this.getNodeDescription(colorProvider))
+ .toolbar(toolbar)
+ .build();
}
private DiagramDescription getDiagramDescriptionWithoutToolbar(IColorProvider colorProvider) {
@@ -117,7 +118,7 @@ private DiagramDescription getDiagramDescriptionWithoutToolbar(IColorProvider co
.name(DiagramToolbarDomainProvider.DOMAIN_NAME + " - without toolbar")
.domainType(DiagramToolbarDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramToolbarDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.build();
diff --git a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/impactanalysis/DiagramImpactAnalysisViewProvider.java b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/impactanalysis/DiagramImpactAnalysisViewProvider.java
index 14f53dbfc0e..e7ca1e7c851 100644
--- a/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/impactanalysis/DiagramImpactAnalysisViewProvider.java
+++ b/packages/sirius-web/backend/sirius-web-e2e-tests/src/main/java/org/eclipse/sirius/web/e2e/tests/impactanalysis/DiagramImpactAnalysisViewProvider.java
@@ -26,6 +26,7 @@
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramDescription;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.HeaderSeparatorDisplayMode;
import org.eclipse.sirius.components.view.diagram.InsideLabelPosition;
import org.eclipse.sirius.components.view.diagram.LabelTextAlign;
@@ -86,7 +87,7 @@ private DiagramDescription fullyDisplayInsideLabelDiagramDescription(IColorProvi
.name(DiagramImpactAnalysisDomainProvider.DOMAIN_NAME + " - simple node")
.domainType(DiagramImpactAnalysisDomainProvider.DOMAIN_NAME + "::Root")
.titleExpression(DiagramImpactAnalysisDomainProvider.DOMAIN_NAME + " diagram")
- .autoLayout(false)
+ .layoutOption(DiagramLayoutOption.NONE)
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
.nodeDescriptions(this.getNodeDescription(colorProvider))
.toolbar(toolbar)
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/classdiagram/ClassDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/classdiagram/ClassDiagramDescriptionProvider.java
index d2dc48d8992..0d7705d9461 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/classdiagram/ClassDiagramDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/classdiagram/ClassDiagramDescriptionProvider.java
@@ -21,6 +21,7 @@
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramFactory;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.web.papaya.representations.classdiagram.edgedescriptions.ClassExtendsEdgeDescriptionProvider;
import org.eclipse.sirius.web.papaya.representations.classdiagram.edgedescriptions.ClassImplementsEdgeDescriptionProvider;
import org.eclipse.sirius.web.papaya.representations.classdiagram.edgedescriptions.InterfaceExtendsEdgeDescriptionProvider;
@@ -47,7 +48,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
classDiagramDescription.setName(NAME);
classDiagramDescription.setDomainType("papaya:Component");
classDiagramDescription.setTitleExpression("aql:self.name + ' class diagram'");
- classDiagramDescription.setAutoLayout(false);
+ classDiagramDescription.setLayoutOption(DiagramLayoutOption.NONE);
classDiagramDescription.setArrangeLayoutDirection(ArrangeLayoutDirection.UP);
classDiagramDescription.setIconExpression("aql:'/papaya-representations/class-diagram.svg'");
classDiagramDescription.setDescription("Represents a simplified Class Diagram. It can display classes, records, interfaces or enums. It can also represent the relationships between them.");
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/componentdiagram/ComponentDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/componentdiagram/ComponentDiagramDescriptionProvider.java
index e22d561f61d..cb259deeeeb 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/componentdiagram/ComponentDiagramDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/componentdiagram/ComponentDiagramDescriptionProvider.java
@@ -23,6 +23,7 @@
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramFactory;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.components.view.diagram.DiagramPalette;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.web.papaya.representations.componentdiagram.edgedescriptions.ComponentDependencyEdgeDescriptionProvider;
@@ -45,7 +46,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
componentDiagramDescription.setName(NAME);
componentDiagramDescription.setDomainType("papaya::Component");
componentDiagramDescription.setTitleExpression("aql:self.name + ' component diagram'");
- componentDiagramDescription.setAutoLayout(false);
+ componentDiagramDescription.setLayoutOption(DiagramLayoutOption.NONE);
componentDiagramDescription.setArrangeLayoutDirection(ArrangeLayoutDirection.DOWN);
componentDiagramDescription.setIconExpression("aql:'/papaya-representations/component-diagram.svg'");
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/dashboarddiagram/PapayaDashboardDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/dashboarddiagram/PapayaDashboardDiagramDescriptionProvider.java
index 22aa0dda068..17441824b35 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/dashboarddiagram/PapayaDashboardDiagramDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/dashboarddiagram/PapayaDashboardDiagramDescriptionProvider.java
@@ -34,6 +34,7 @@
import org.eclipse.sirius.components.diagrams.LineStyle;
import org.eclipse.sirius.components.diagrams.RectangularNodeStyle;
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.diagrams.description.DiagramLayoutOption;
import org.eclipse.sirius.components.diagrams.description.InsideLabelDescription;
import org.eclipse.sirius.components.diagrams.description.LabelStyleDescription;
import org.eclipse.sirius.components.diagrams.description.NodeDescription;
@@ -56,7 +57,7 @@ public class PapayaDashboardDiagramDescriptionProvider implements IEditingContex
public static final String NAME = "PapayaDashboardDiagram";
- public static final String DASHBOARD_REPRESENTATION_ID = UUID.nameUUIDFromBytes("papaya-dashboard-diagram".getBytes()).toString();;
+ public static final String DASHBOARD_REPRESENTATION_ID = UUID.nameUUIDFromBytes("papaya-dashboard-diagram".getBytes()).toString();
public static final String DASHBOARD_DESCRIPTION_ID = IDiagramIdProvider.DIAGRAM_DESCRIPTION_KIND + "papaya-dashboard-diagram-description";
@@ -71,15 +72,16 @@ public PapayaDashboardDiagramDescriptionProvider(IIdentityService identityServic
@Override
public List getRepresentationDescriptions(IEditingContext editingContext) {
var dashboardDescription = DiagramDescription.newDiagramDescription(DASHBOARD_DESCRIPTION_ID)
- .label("Papaya Dashboard Diagram")
- .iconURLsProvider(variableManager -> List.of())
- .nodeDescriptions(List.of(createProjectNodeDescription()))
- .edgeDescriptions(List.of())
- .dropHandler(variableManager -> new Failure(""))
- .canCreatePredicate(variableManager -> false)
- .labelProvider(variableManager -> "Papaya Dashboard Diagram")
- .targetObjectIdProvider(this::getDiagramTargetObjectId)
- .build();
+ .label("Papaya Dashboard Diagram")
+ .iconURLsProvider(variableManager -> List.of())
+ .nodeDescriptions(List.of(this.createProjectNodeDescription()))
+ .edgeDescriptions(List.of())
+ .dropHandler(variableManager -> new Failure(""))
+ .canCreatePredicate(variableManager -> false)
+ .labelProvider(variableManager -> "Papaya Dashboard Diagram")
+ .targetObjectIdProvider(this::getDiagramTargetObjectId)
+ .layoutOption(DiagramLayoutOption.NONE)
+ .build();
return List.of(dashboardDescription);
}
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/lifecyclediagram/LifecycleDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/lifecyclediagram/LifecycleDiagramDescriptionProvider.java
index a7e40321b11..89de57b593c 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/lifecyclediagram/LifecycleDiagramDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/lifecyclediagram/LifecycleDiagramDescriptionProvider.java
@@ -21,6 +21,7 @@
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.ArrangeLayoutDirection;
import org.eclipse.sirius.components.view.diagram.DiagramFactory;
+import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption;
import org.eclipse.sirius.web.papaya.representations.lifecyclediagram.edgedescriptions.ControllerCallsEdgeDescriptionProvider;
import org.eclipse.sirius.web.papaya.representations.lifecyclediagram.edgedescriptions.EventCausedByEdgeDescriptionProvider;
import org.eclipse.sirius.web.papaya.representations.lifecyclediagram.edgedescriptions.PublicationChannelEdgeDescriptionProvider;
@@ -54,7 +55,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
lifecycleDiagramDescription.setName(NAME);
lifecycleDiagramDescription.setDomainType("papaya:ApplicationConcern");
lifecycleDiagramDescription.setTitleExpression("aql:self.name + ' Lifecycle Diagram'");
- lifecycleDiagramDescription.setAutoLayout(false);
+ lifecycleDiagramDescription.setLayoutOption(DiagramLayoutOption.NONE);
lifecycleDiagramDescription.setArrangeLayoutDirection(ArrangeLayoutDirection.UP);
lifecycleDiagramDescription.setIconExpression("aql:'/papaya-representations/lifecycle-diagram.svg'");
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DefaultToolsControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DefaultToolsControllerTests.java
index d728c676929..a47d06c9515 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DefaultToolsControllerTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DefaultToolsControllerTests.java
@@ -25,6 +25,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
+import org.eclipse.sirius.components.collaborative.diagrams.dto.AutoLayoutState;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramLayoutDataInput;
import org.eclipse.sirius.components.collaborative.diagrams.dto.EdgeLayoutDataInput;
import org.eclipse.sirius.components.collaborative.diagrams.dto.LabelLayoutDataInput;
@@ -258,7 +259,7 @@ public void givenDiagramWithALayoutedElementWhenThePaletteIsRequestedThenTheDefa
var webApplicationToDomainEdgeLayoutData = new EdgeLayoutDataInput(webApplicationToDomainEdgeId.get(), bendingPoints, List.of());
var labelLayoutData = new LabelLayoutDataInput(webApplicationToDomainEdgeOutsideLabelId.get(), new Position(5, 5), new Size(10, 10), true, false);
- var layoutData = new DiagramLayoutDataInput(List.of(siriusWebDomainNodeLayout), List.of(webApplicationToDomainEdgeLayoutData), List.of(labelLayoutData));
+ var layoutData = new DiagramLayoutDataInput(List.of(siriusWebDomainNodeLayout), List.of(webApplicationToDomainEdgeLayoutData), List.of(labelLayoutData), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(UUID.randomUUID(), PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(), diagramId.get(), "layout", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DiagramPostProcessorControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DiagramPostProcessorControllerTests.java
index 281efb7d575..efb9569b21e 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DiagramPostProcessorControllerTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DiagramPostProcessorControllerTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2025 Obeo.
+ * Copyright (c) 2025, 2026 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@
import java.util.function.Consumer;
import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramPostProcessor;
+import org.eclipse.sirius.components.collaborative.diagrams.dto.AutoLayoutState;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramLayoutDataInput;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramRefreshedEventPayload;
import org.eclipse.sirius.components.collaborative.diagrams.dto.LayoutDiagramInput;
@@ -108,7 +109,7 @@ public void givenDiagramWhenItIsOpenedOrMdifiedThenDiagramIsUpdatedWithDiagramPo
Runnable initialDiagramLayout = () -> {
var humanNodeLayout = new NodeLayoutDataInput(nodeId.get(), new Position(0., 0.), new Size(50, 50), false, false, List.of(), new Size(0, 0));
- var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of());
+ var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of(), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(currentRevisionId.get(), StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID, diagramId.get(), "refresh", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DomainDiagramControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DomainDiagramControllerTests.java
index b3a6f09e9b9..190fd9175f8 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DomainDiagramControllerTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/DomainDiagramControllerTests.java
@@ -28,6 +28,7 @@
import org.eclipse.sirius.components.collaborative.api.ChangeKind;
import org.eclipse.sirius.components.collaborative.api.IEditingContextEventProcessor;
import org.eclipse.sirius.components.collaborative.api.IEditingContextEventProcessorRegistry;
+import org.eclipse.sirius.components.collaborative.diagrams.dto.AutoLayoutState;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramLayoutDataInput;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramRefreshedEventPayload;
import org.eclipse.sirius.components.collaborative.diagrams.dto.LabelLayoutDataInput;
@@ -155,7 +156,7 @@ public void givenDomainDiagramOnStudioWhenMovingNodeAndThenReloadingPreviousStat
Runnable initialDiagramLayout = () -> {
var humanNodeLayout = new NodeLayoutDataInput(humanNodeId.get(), initialPosition, initialSize, true, false, List.of(), new Size(0, 0));
- var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of());
+ var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of(), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(currentRevisionId.get(), StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID, diagramId.get(), "refresh", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
@@ -184,7 +185,7 @@ public void givenDomainDiagramOnStudioWhenMovingNodeAndThenReloadingPreviousStat
Runnable modifyDiagramLayout = () -> {
var humanNodeLayout = new NodeLayoutDataInput(humanNodeId.get(), modifiedPosition, modifiedSize, true, false, List.of(), new Size(0, 0));
- var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of());
+ var layoutData = new DiagramLayoutDataInput(List.of(humanNodeLayout), List.of(), List.of(), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(currentRevisionId.get(), StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID, diagramId.get(), "refresh", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
@@ -254,7 +255,7 @@ public void givenDomainDiagramOnStudioWhenMovingLabelAndThenReloadingPreviousSta
Runnable initialDiagramLayout = () -> {
var humansLabelLayout = new LabelLayoutDataInput(humansEdgeCenterLabelId.get(), initialPosition, initialSize, false, false);
- var layoutData = new DiagramLayoutDataInput(List.of(), List.of(), List.of(humansLabelLayout));
+ var layoutData = new DiagramLayoutDataInput(List.of(), List.of(), List.of(humansLabelLayout), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(currentRevisionId.get(), StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID, diagramId.get(), "refresh", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
@@ -282,7 +283,7 @@ public void givenDomainDiagramOnStudioWhenMovingLabelAndThenReloadingPreviousSta
Runnable modifyDiagramLayout = () -> {
var humansLabelLayout = new LabelLayoutDataInput(humansEdgeCenterLabelId.get(), modifiedPosition, modifiedSize, true, false);
- var layoutData = new DiagramLayoutDataInput(List.of(), List.of(), List.of(humansLabelLayout));
+ var layoutData = new DiagramLayoutDataInput(List.of(), List.of(), List.of(humansLabelLayout), AutoLayoutState.UNCHANGED);
var layoutInput = new LayoutDiagramInput(currentRevisionId.get(), StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID, diagramId.get(), "refresh", layoutData);
this.layoutDiagramMutationRunner.run(layoutInput);
};
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoEdgeLayoutDiagramControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoEdgeLayoutDiagramControllerTests.java
index 7a13a9cec89..84b701aaad9 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoEdgeLayoutDiagramControllerTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoEdgeLayoutDiagramControllerTests.java
@@ -12,7 +12,18 @@
*******************************************************************************/
package org.eclipse.sirius.web.application.controllers.diagrams.undo;
+import static org.eclipse.sirius.components.diagrams.tests.DiagramEventPayloadConsumer.assertRefreshedDiagramThat;
+import static org.eclipse.sirius.components.diagrams.tests.assertions.DiagramAssertions.assertThat;
+
import com.jayway.jsonpath.JsonPath;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
+
+import org.eclipse.sirius.components.collaborative.diagrams.dto.AutoLayoutState;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DeleteFromDiagramInput;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DeleteFromDiagramSuccessPayload;
import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramLayoutDataInput;
@@ -45,18 +56,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
+
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
-import java.time.Duration;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Consumer;
-
-import static org.eclipse.sirius.components.diagrams.tests.DiagramEventPayloadConsumer.assertRefreshedDiagramThat;
-import static org.eclipse.sirius.components.diagrams.tests.assertions.DiagramAssertions.assertThat;
-
/**
* Integration tests of undo redo for the edge layout of a diagram.
*
@@ -126,7 +129,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU
var nodeLayoutDataInput = new NodeLayoutDataInput(siriusWebApplicationNodeId.get(), new Position(10, 10), new Size(10, 10), false, false, List.of(handleLayoutData), new Size(10, 10));
var bendingPoints = List.of(new Position(10, 10), new Position(20, 20), new Position(30, 30));
var edgeLayoutDataInput = new EdgeLayoutDataInput(siriusWebApplicationEdgeId.get(), bendingPoints, List.of());
- var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(edgeLayoutDataInput), List.of());
+ var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(edgeLayoutDataInput), List.of(), AutoLayoutState.UNCHANGED);
var input = new LayoutDiagramInput(UUID.randomUUID(), PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(), diagramId.get(), LayoutDiagramInput.CAUSE_LAYOUT, diagramLayoutDataInput);
var result = this.layoutDiagramRunner.run(input);
String typename = JsonPath.read(result.data(), "$.data.layoutDiagram.__typename");
@@ -134,7 +137,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU
};
Consumer
*
- *
{@link org.eclipse.sirius.components.view.diagram.DiagramDescription#isAutoLayout Auto Layout}