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 updatedDiagramContentMatcher = assertRefreshedDiagramThat(diagram -> - assertUpdatedDiagram(diagram, siriusWebApplicationNodeId.get(), siriusWebApplicationEdgeId.get())); + this.assertUpdatedDiagram(diagram, siriusWebApplicationNodeId.get(), siriusWebApplicationEdgeId.get())); var mutationInputId = UUID.randomUUID(); Runnable secondLayout = () -> { @@ -142,7 +145,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU var bendingPoints = List.of(new Position(20, 20), new Position(30, 30), new Position(40, 40)); var nodeLayoutDataInput = new NodeLayoutDataInput(siriusWebApplicationNodeId.get(), new Position(10, 10), new Size(10, 10), true, true, List.of(handleLayoutData), new Size(10, 10)); 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(mutationInputId, 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"); @@ -221,7 +224,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAnDeletedUndoThenDiagramI 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"); @@ -229,7 +232,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAnDeletedUndoThenDiagramI }; Consumer updatedDiagramContentMatcher = assertRefreshedDiagramThat(diagram -> - assertUpdatedDiagram(diagram, siriusWebApplicationNodeId.get(), siriusWebApplicationEdgeId.get())); + this.assertUpdatedDiagram(diagram, siriusWebApplicationNodeId.get(), siriusWebApplicationEdgeId.get())); var mutationInputId = UUID.randomUUID(); Runnable deleteNode = () -> { @@ -280,6 +283,6 @@ private void assertUpdatedDiagram(Diagram diagram, String siriusWebApplicationNo assertThat(handleLayoutData.get(0).position()).isEqualTo(new Position(10, 10)); var edgeLayoutData = diagram.getLayoutData().edgeLayoutData().get(siriusWebApplicationEdgeId); assertThat(edgeLayoutData.bendingPoints()).contains(new Position(10, 10), new Position(20, 20), new Position(30, 30)); - }; + } -} \ No newline at end of file +} diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoLayoutDiagramControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoLayoutDiagramControllerTests.java index b21a6874010..a3af4cd4d47 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoLayoutDiagramControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/diagrams/undo/UndoLayoutDiagramControllerTests.java @@ -23,6 +23,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.DeleteFromDiagramInput; import org.eclipse.sirius.components.collaborative.diagrams.dto.DeleteFromDiagramSuccessPayload; import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramLayoutDataInput; @@ -112,7 +113,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU var diagramId = new AtomicReference(); var siriusWebApplicationNodeId = new AtomicReference(); - var siriusWebApplicationOutsideLabelId = new AtomicReference(); + var siriusWebApplicationOutsideLabelId = new AtomicReference(); Consumer initialDiagramContentConsumer = assertRefreshedDiagramThat(diagram -> { diagramId.set(diagram.getId()); @@ -124,7 +125,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU Runnable initialLayout = () -> { var nodeLayoutDataInput = new NodeLayoutDataInput(siriusWebApplicationNodeId.get(), new Position(10, 10), new Size(10, 10), false, false, List.of(), new Size(20, 20)); var labelLayoutDataInput = new LabelLayoutDataInput(siriusWebApplicationOutsideLabelId.get(), new Position(10, 10), new Size(10, 10), false, false); - var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput)); + var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput), 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"); @@ -138,7 +139,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAndUndoRedoThenDiagramIsU Runnable secondLayout = () -> { var nodeLayoutDataInput = new NodeLayoutDataInput(siriusWebApplicationNodeId.get(), new Position(20, 20), new Size(30, 30), true, true, List.of(), new Size(20, 20)); var labelLayoutDataInput = new LabelLayoutDataInput(siriusWebApplicationOutsideLabelId.get(), new Position(20, 20), new Size(30, 30), true, true); - var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput)); + var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput), AutoLayoutState.UNCHANGED); var input = new LayoutDiagramInput(mutationInputId, 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"); @@ -206,7 +207,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAnDeletedUndoThenDiagramI var diagramId = new AtomicReference(); var siriusWebApplicationNodeId = new AtomicReference(); - var siriusWebApplicationOutsideLabelId = new AtomicReference(); + var siriusWebApplicationOutsideLabelId = new AtomicReference(); Consumer initialDiagramContentConsumer = assertRefreshedDiagramThat(diagram -> { diagramId.set(diagram.getId()); @@ -218,7 +219,7 @@ public void givenDiagramWithNoInitialLayoutWhenWeLayoutAnDeletedUndoThenDiagramI Runnable initialLayout = () -> { var nodeLayoutDataInput = new NodeLayoutDataInput(siriusWebApplicationNodeId.get(), new Position(10, 10), new Size(10, 10), false, false, List.of(), new Size(10, 10)); var labelLayoutDataInput = new LabelLayoutDataInput(siriusWebApplicationOutsideLabelId.get(), new Position(10, 10), new Size(10, 10), false, false); - var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput)); + var diagramLayoutDataInput = new DiagramLayoutDataInput(List.of(nodeLayoutDataInput), List.of(), List.of(labelLayoutDataInput), 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"); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ActionDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ActionDiagramDescriptionProvider.java index 033d37a4d78..dede92df5e4 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ActionDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ActionDiagramDescriptionProvider.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 @@ -32,6 +32,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -140,7 +141,7 @@ private DiagramDescription createDiagramDescription() { .nodeDescriptions(nodeDescription) .edgeDescriptions() .palette(diagramPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/AncestorsVariableDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/AncestorsVariableDiagramDescriptionProvider.java index d2aef6c80be..21262d62a56 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/AncestorsVariableDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/AncestorsVariableDiagramDescriptionProvider.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 @@ -31,6 +31,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -159,7 +160,7 @@ private DiagramDescription createDiagramDescription() { .nodeDescriptions(rootNodeDescription) .edgeDescriptions() .palette(diagramPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/BorderNodeDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/BorderNodeDiagramDescriptionProvider.java index 0ec319d612b..b4b221e4434 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/BorderNodeDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/BorderNodeDiagramDescriptionProvider.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 @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.LayoutStrategyDescription; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -128,7 +129,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesDiagramDescriptionProvider.java index 9f57ac7df41..a03f5384f41 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesDiagramDescriptionProvider.java @@ -32,6 +32,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.LineStyle; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -131,7 +132,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesUnsynchonisedDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesUnsynchonisedDiagramDescriptionProvider.java index 13167f94c91..40a977ccfdf 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesUnsynchonisedDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/CustomNodesUnsynchonisedDiagramDescriptionProvider.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 @@ -29,6 +29,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.LineStyle; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; @@ -118,7 +119,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/DropNodeDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/DropNodeDiagramDescriptionProvider.java index e2472b556ee..3c12c3e169f 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/DropNodeDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/DropNodeDiagramDescriptionProvider.java @@ -27,6 +27,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DropNodeTool; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeDescription; @@ -156,7 +157,7 @@ private DiagramDescription createDiagramDescription() { .edgeDescriptions(edgeDescription) .palette(diagramPalette) .toolbar(toolbar) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgeDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgeDiagramDescriptionProvider.java index 2ba9eb9a07f..2235144cee6 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgeDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgeDiagramDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramElementDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.EdgeReconnectionTool; import org.eclipse.sirius.components.view.diagram.EdgeTool; import org.eclipse.sirius.components.view.diagram.EdgeType; @@ -180,7 +181,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions(edgeDescription) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .toolbar(toolbar) .build(); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgePaletteDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgePaletteDiagramDescriptionProvider.java index 9d192b2deaf..77a0d297306 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgePaletteDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EdgePaletteDiagramDescriptionProvider.java @@ -27,6 +27,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; import org.eclipse.sirius.emfjson.resource.JsonResource; @@ -149,7 +150,7 @@ private DiagramDescription createDiagramDescription() { .domainType("domain:domain") .nodeDescriptions(nodeDescription) .edgeDescriptions(edgeDescription) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .toolbar(toolbar) .build(); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EditableLabelDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EditableLabelDiagramDescriptionProvider.java index 478ad5d1386..a972be8d3b3 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EditableLabelDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/EditableLabelDiagramDescriptionProvider.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 @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.view.diagram.ArrowStyle; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.LineStyle; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -174,7 +175,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions(edgeDescription) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ExpandCollapseDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ExpandCollapseDiagramDescriptionProvider.java index 1e5f7bbff6a..df3e05d6853 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ExpandCollapseDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ExpandCollapseDiagramDescriptionProvider.java @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.view.diagram.DeleteTool; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -169,7 +170,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/GroupPaletteDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/GroupPaletteDiagramDescriptionProvider.java index 13d10241d6e..05dd47e0dc0 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/GroupPaletteDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/GroupPaletteDiagramDescriptionProvider.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 @@ -33,6 +33,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; @@ -52,6 +53,7 @@ @Conditional(OnStudioTests.class) @SuppressWarnings("checkstyle:MultipleStringLiterals") public class GroupPaletteDiagramDescriptionProvider implements IEditingContextProcessor { + private final IDiagramIdProvider diagramIdProvider; private final View view; @@ -157,7 +159,7 @@ private DiagramDescription createDiagramDescription() { .edgeDescriptions() .palette(diagramPalette) .groupPalette(groupPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ImageNodeDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ImageNodeDiagramDescriptionProvider.java index 8e0cc650b6b..c157d6d5a7d 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ImageNodeDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ImageNodeDiagramDescriptionProvider.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 @@ -32,6 +32,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.OutsideLabelPosition; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -135,7 +136,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ManageVisibilityActionDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ManageVisibilityActionDiagramDescriptionProvider.java index 903f00c3dcb..aeca3cf06e1 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ManageVisibilityActionDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ManageVisibilityActionDiagramDescriptionProvider.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 @@ -12,6 +12,9 @@ *******************************************************************************/ package org.eclipse.sirius.web.services.diagrams; +import java.util.Objects; +import java.util.UUID; + import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IEditingContextProcessor; @@ -26,6 +29,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.SynchronizationPolicy; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -35,9 +39,6 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; -import java.util.Objects; -import java.util.UUID; - /** * Used to provide a view based diagram description to test diagrams with manage visibility actions. * @@ -76,7 +77,7 @@ private View createView() { viewForDiagramDesc.getDescriptions().add(this.createDiagramDescription()); viewForDiagramDesc.eAllContents().forEachRemaining(eObject -> - eObject.eAdapters().add(new IDAdapter(UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes())))); + eObject.eAdapters().add(new IDAdapter(UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes())))); String resourcePath = UUID.nameUUIDFromBytes("ManageVisibilityActionDiagramDescription".getBytes()).toString(); JsonResource resource = new JSONResourceFactory().createResourceFromPath(resourcePath); @@ -120,9 +121,9 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; } -} \ No newline at end of file +} diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ModelOperationDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ModelOperationDiagramDescriptionProvider.java index 355d6aecbb7..bcfb45bf707 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ModelOperationDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/ModelOperationDiagramDescriptionProvider.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 @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.diagram.SelectionDialogTreeDescription; @@ -149,7 +150,7 @@ private DiagramDescription createDiagramDescription() { .nodeDescriptions(nodeDescription) .edgeDescriptions() .palette(diagramPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; @@ -215,16 +216,16 @@ private void createCreateNodeToolWithComputedNewSelection() { .expression("aql:self") .children( new ViewBuilders().newLet() - .variableName("project") - .valueExpression("aql:self") - .children( - new ViewBuilders().newChangeContext().expression("aql:project").build(), - this.createCreateNewComponentOperation("component1", "aql:'Component1'"), - new ViewBuilders().newChangeContext().expression("aql:project").build(), - this.createCreateNewComponentOperation("component2", "aql:'Component2'"), - new ViewBuilders().newChangeContext().expression("aql:project").build(), - this.createCreateNewComponentOperation("component3", "aql:'Component3'")) - .build() + .variableName("project") + .valueExpression("aql:self") + .children( + new ViewBuilders().newChangeContext().expression("aql:project").build(), + this.createCreateNewComponentOperation("component1", "aql:'Component1'"), + new ViewBuilders().newChangeContext().expression("aql:project").build(), + this.createCreateNewComponentOperation("component2", "aql:'Component2'"), + new ViewBuilders().newChangeContext().expression("aql:project").build(), + this.createCreateNewComponentOperation("component3", "aql:'Component3'")) + .build() ) .build() ) diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/RelationBasedEdgeDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/RelationBasedEdgeDiagramDescriptionProvider.java index daf7826d38b..b089682842f 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/RelationBasedEdgeDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/RelationBasedEdgeDiagramDescriptionProvider.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 @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.view.builder.generated.diagram.RectangularNodeStyleDescriptionBuilder; import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; +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; @@ -124,7 +125,7 @@ private DiagramDescription createDiagramDescription() { .domainType("rbeDomain::Root") .nodeDescriptions(entityNodeDescription) .edgeDescriptions(containmentEdgeDescription) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UndoRedoDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UndoRedoDiagramDescriptionProvider.java index 5ec1732c28a..ac90d2c8cba 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UndoRedoDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UndoRedoDiagramDescriptionProvider.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.components.view.diagram.DeleteTool; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -178,7 +179,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UnsynchronizedDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UnsynchronizedDiagramDescriptionProvider.java index 87c21e846f5..006c40bfe91 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UnsynchronizedDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/UnsynchronizedDiagramDescriptionProvider.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 @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DropTool; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeContainmentKind; @@ -199,7 +200,7 @@ private DiagramDescription createDiagramDescription() { .nodeDescriptions(nodeDescription) .edgeDescriptions() .palette(diagramPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/VisibilityDiagramDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/VisibilityDiagramDescriptionProvider.java index b18fa16bf47..733744f3792 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/VisibilityDiagramDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/diagrams/VisibilityDiagramDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Obeo. + * Copyright (c) 2024, 2026 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -32,6 +32,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -195,7 +196,7 @@ private DiagramDescription createDiagramDescription() { .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); return this.diagramDescription; diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/selection/SelectionDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/selection/SelectionDescriptionProvider.java index d4a08772505..763aa10f403 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/selection/SelectionDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/selection/SelectionDescriptionProvider.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.EdgeTool; import org.eclipse.sirius.components.view.diagram.InsideLabelPosition; import org.eclipse.sirius.components.view.diagram.NodeTool; @@ -61,12 +62,10 @@ public class SelectionDescriptionProvider implements IEditingContextProcessor { private final View view; - private DiagramDescription diagramDescription; + private final IDiagramIdProvider diagramIdProvider; private NodeTool createNodeTool; - private final IDiagramIdProvider diagramIdProvider; - private SelectionDialogTreeDescription selectionDialogTreeDescription; private SelectionDialogDescription selectionDialog; @@ -148,17 +147,15 @@ private DiagramDescription createDiagramDescription() { .nodeTools(this.createNodeTool) .build(); - this.diagramDescription = new DiagramDescriptionBuilder() + return new DiagramDescriptionBuilder() .name("Diagram") .titleExpression("aql:'SelectionDescriptionDiagram'") .domainType("papaya:Project") .nodeDescriptions(nodeDescription) .edgeDescriptions() .palette(diagramPalette) - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .build(); - - return this.diagramDescription; } private void createNodeTool() { diff --git a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyUnsynchronizedViewDiagramDescriptionProvider.java b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyUnsynchronizedViewDiagramDescriptionProvider.java index 667382a5290..d2793853fcf 100644 --- a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyUnsynchronizedViewDiagramDescriptionProvider.java +++ b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyUnsynchronizedViewDiagramDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.builder.providers.IColorProvider; import org.eclipse.sirius.components.view.builder.providers.IDiagramElementDescriptionProvider; import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolSection; import org.eclipse.sirius.components.view.diagram.DropTool; @@ -57,7 +58,7 @@ public RepresentationDescription create(IColorProvider colorProvider) { .build(); var diagramDescription = diagramDescriptionBuilder - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .domainType("flow::System") .name("Topography unsynchronized") .titleExpression("Topography unsynchronized") diff --git a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyViewDiagramDescriptionProvider.java b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyViewDiagramDescriptionProvider.java index e316642d86d..12593ac654c 100644 --- a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyViewDiagramDescriptionProvider.java +++ b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyViewDiagramDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.builder.providers.IColorProvider; import org.eclipse.sirius.components.view.builder.providers.IDiagramElementDescriptionProvider; import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolSection; import org.eclipse.sirius.components.view.diagram.NodeTool; @@ -56,7 +57,7 @@ public RepresentationDescription create(IColorProvider colorProvider) { .build(); var diagramDescription = diagramDescriptionBuilder - .autoLayout(false) + .layoutOption(DiagramLayoutOption.NONE) .domainType("flow::System") .name("Topography") .titleExpression("Topography") diff --git a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyWithAutoLayoutViewDiagramDescriptionProvider.java b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyWithAutoLayoutViewDiagramDescriptionProvider.java index f08ee846d13..2da009e6239 100644 --- a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyWithAutoLayoutViewDiagramDescriptionProvider.java +++ b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/view/FlowTopographyWithAutoLayoutViewDiagramDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.builder.providers.IColorProvider; import org.eclipse.sirius.components.view.builder.providers.IDiagramElementDescriptionProvider; import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolSection; import org.eclipse.sirius.components.view.diagram.NodeTool; @@ -56,7 +57,7 @@ public RepresentationDescription create(IColorProvider colorProvider) { .build(); var diagramDescription = diagramDescriptionBuilder - .autoLayout(true) + .layoutOption(DiagramLayoutOption.AUTO_LAYOUT) .domainType("flow::System") .name("Topography with auto layout") .titleExpression("Topography with auto layout") diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/diagram/DiagramDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/diagram/DiagramDescriptionBuilder.java index 987ba967257..b8fe82d2c1e 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/diagram/DiagramDescriptionBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/diagram/DiagramDescriptionBuilder.java @@ -22,12 +22,14 @@ public class DiagramDescriptionBuilder { /** * Create instance org.eclipse.sirius.components.view.diagram.DiagramDescription. + * * @generated */ private org.eclipse.sirius.components.view.diagram.DiagramDescription diagramDescription = org.eclipse.sirius.components.view.diagram.DiagramFactory.eINSTANCE.createDiagramDescription(); /** * Return instance org.eclipse.sirius.components.view.diagram.DiagramDescription. + * * @generated */ protected org.eclipse.sirius.components.view.diagram.DiagramDescription getDiagramDescription() { @@ -36,6 +38,7 @@ protected org.eclipse.sirius.components.view.diagram.DiagramDescription getDiagr /** * Return instance org.eclipse.sirius.components.view.diagram.DiagramDescription. + * * @generated */ public org.eclipse.sirius.components.view.diagram.DiagramDescription build() { @@ -51,6 +54,7 @@ public DiagramDescriptionBuilder name(java.lang.String value) { this.getDiagramDescription().setName(value); return this; } + /** * Setter for DomainType. * @@ -60,6 +64,7 @@ public DiagramDescriptionBuilder domainType(java.lang.String value) { this.getDiagramDescription().setDomainType(value); return this; } + /** * Setter for PreconditionExpression. * @@ -69,6 +74,7 @@ public DiagramDescriptionBuilder preconditionExpression(java.lang.String value) this.getDiagramDescription().setPreconditionExpression(value); return this; } + /** * Setter for TitleExpression. * @@ -78,6 +84,7 @@ public DiagramDescriptionBuilder titleExpression(java.lang.String value) { this.getDiagramDescription().setTitleExpression(value); return this; } + /** * Setter for IconExpression. * @@ -87,15 +94,17 @@ public DiagramDescriptionBuilder iconExpression(java.lang.String value) { this.getDiagramDescription().setIconExpression(value); return this; } + /** - * Setter for AutoLayout. + * Setter for LayoutOption. * * @generated */ - public DiagramDescriptionBuilder autoLayout(java.lang.Boolean value) { - this.getDiagramDescription().setAutoLayout(value); + public DiagramDescriptionBuilder layoutOption(org.eclipse.sirius.components.view.diagram.DiagramLayoutOption value) { + this.getDiagramDescription().setLayoutOption(value); return this; } + /** * Setter for Toolbar. * @@ -115,6 +124,7 @@ public DiagramDescriptionBuilder palette(org.eclipse.sirius.components.view.diag this.getDiagramDescription().setPalette(value); return this; } + /** * Setter for NodeDescriptions. * diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/DiagramDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/DiagramDescriptionItemProvider.java index 1f25793b9c0..bb645deac53 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/DiagramDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/DiagramDescriptionItemProvider.java @@ -58,22 +58,22 @@ public List getPropertyDescriptors(Object object) { if (this.itemPropertyDescriptors == null) { super.getPropertyDescriptors(object); - this.addAutoLayoutPropertyDescriptor(object); + this.addLayoutOptionPropertyDescriptor(object); this.addArrangeLayoutDirectionPropertyDescriptor(object); } return this.itemPropertyDescriptors; } /** - * This adds a property descriptor for the Auto Layout feature. + * This adds a property descriptor for the Layout Option feature. * * @generated */ - protected void addAutoLayoutPropertyDescriptor(Object object) { + protected void addLayoutOptionPropertyDescriptor(Object object) { this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), - this.getString("_UI_DiagramDescription_autoLayout_feature"), - this.getString("_UI_PropertyDescriptor_description", "_UI_DiagramDescription_autoLayout_feature", "_UI_DiagramDescription_type"), - DiagramPackage.Literals.DIAGRAM_DESCRIPTION__AUTO_LAYOUT, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); + this.getString("_UI_DiagramDescription_layoutOption_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_DiagramDescription_layoutOption_feature", "_UI_DiagramDescription_type"), + DiagramPackage.Literals.DIAGRAM_DESCRIPTION__LAYOUT_OPTION, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); } /** @@ -166,7 +166,7 @@ public void notifyChanged(Notification notification) { this.updateChildren(notification); switch (notification.getFeatureID(DiagramDescription.class)) { - case DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT: + case DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION: case DiagramPackage.DIAGRAM_DESCRIPTION__ARRANGE_LAYOUT_DIRECTION: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties index fbc7fe262eb..8e13d1598d3 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin.properties @@ -73,8 +73,8 @@ _UI_DiagramToolbar_type=Toolbar _UI_Unknown_type=Object _UI_Unknown_datatype=Value -_UI_DiagramDescription_autoLayout_feature=Auto Layout _UI_DiagramDescription_toolbar_feature=Toolbar +_UI_DiagramDescription_layoutOption_feature=Layout Option _UI_DiagramDescription_palette_feature=Palette _UI_DiagramDescription_groupPalette_feature=Group Palette _UI_GroupPalette_nodeTools_feature=Node Tools @@ -119,10 +119,10 @@ _UI_EdgeDescription_sourceExpression_feature=Source Expression _UI_EdgeDescription_targetExpression_feature=Target Expression _UI_EdgeDescription_style_feature=Style _UI_EdgeDescription_conditionalStyles_feature=Conditional Styles -_UI_LayoutStrategyDescription_onWestAtCreationBorderNodes_feature = On West At Creation Border Nodes -_UI_LayoutStrategyDescription_onEastAtCreationBorderNodes_feature = On East At Creation Border Nodes -_UI_LayoutStrategyDescription_onNorthAtCreationBorderNodes_feature = On North At Creation Border Nodes -_UI_LayoutStrategyDescription_onSouthAtCreationBorderNodes_feature = On South At Creation Border Nodes +_UI_LayoutStrategyDescription_onWestAtCreationBorderNodes_feature=On West At Creation Border Nodes +_UI_LayoutStrategyDescription_onEastAtCreationBorderNodes_feature=On East At Creation Border Nodes +_UI_LayoutStrategyDescription_onNorthAtCreationBorderNodes_feature=On North At Creation Border Nodes +_UI_LayoutStrategyDescription_onSouthAtCreationBorderNodes_feature=On South At Creation Border Nodes _UI_ListLayoutStrategyDescription_areChildNodesDraggableExpression_feature=Are Child Nodes Draggable Expression _UI_ListLayoutStrategyDescription_topGapExpression_feature=Top Gap Expression _UI_ListLayoutStrategyDescription_bottomGapExpression_feature=Bottom Gap Expression @@ -247,7 +247,7 @@ _UI_ArrowStyle_FillCircle_literal=FillCircle _UI_ArrowStyle_CrossedCircle_literal=CrossedCircle _UI_ArrowStyle_ClosedArrowWithVerticalBar_literal=ClosedArrowWithVerticalBar _UI_ArrowStyle_ClosedArrowWithDots_literal=ClosedArrowWithDots -_UI_ArrowStyle_ClosedArrowWith4Dots_literal = ClosedArrowWith4Dots +_UI_ArrowStyle_ClosedArrowWith4Dots_literal=ClosedArrowWith4Dots _UI_LayoutDirection_Column_literal=Column _UI_LineStyle_Solid_literal=Solid _UI_LineStyle_Dash_literal=Dash @@ -289,3 +289,6 @@ _UI_HeaderSeparatorDisplayMode_IF_CHILDREN_literal=IF_CHILDREN _UI_EdgeType_Manhattan_literal=Manhattan _UI_EdgeType_SmartManhattan_literal=SmartManhattan _UI_EdgeType_Oblique_literal=Oblique +_UI_DiagramLayoutOption_NONE_literal=NONE +_UI_DiagramLayoutOption_AUTO_LAYOUT_literal=AUTO_LAYOUT +_UI_DiagramLayoutOption_AUTO_UNTIL_MANUAL_literal=AUTO_UNTIL_MANUAL diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramDescription.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramDescription.java index 4769cec3643..b48ac738d39 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramDescription.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramDescription.java @@ -22,7 +22,7 @@ * The following features are supported: *

*
    - *
  • {@link org.eclipse.sirius.components.view.diagram.DiagramDescription#isAutoLayout Auto Layout}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getLayoutOption Layout Option}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getToolbar Toolbar}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getPalette Palette}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getGroupPalette Group Palette}
  • @@ -41,26 +41,30 @@ public interface DiagramDescription extends RepresentationDescription { /** - * Returns the value of the 'Auto Layout' attribute. + * Returns the value of the 'Layout Option' attribute. The literals are from the enumeration + * {@link org.eclipse.sirius.components.view.diagram.DiagramLayoutOption}. * - * @return the value of the 'Auto Layout' attribute. - * @see #setAutoLayout(boolean) - * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getDiagramDescription_AutoLayout() + * @return the value of the 'Layout Option' attribute. + * @see org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * @see #setLayoutOption(DiagramLayoutOption) + * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getDiagramDescription_LayoutOption() * @model required="true" * @generated */ - boolean isAutoLayout(); + DiagramLayoutOption getLayoutOption(); /** - * Sets the value of the '{@link org.eclipse.sirius.components.view.diagram.DiagramDescription#isAutoLayout Auto - * Layout}' attribute. + * Sets the value of the '{@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getLayoutOption + * Layout Option}' attribute. * * @param value - * the new value of the 'Auto Layout' attribute. - * @see #isAutoLayout() + * the new value of the 'Layout Option' attribute. + * @see org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * @see #getLayoutOption() * @generated */ - void setAutoLayout(boolean value); + void setLayoutOption(DiagramLayoutOption value); /** * Returns the value of the 'Toolbar' containment reference. A representation of the literals of the enumeration 'Layout Option', and + * utility methods for working with them. + * + * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getDiagramLayoutOption() + * @model + * @generated + */ +public enum DiagramLayoutOption implements Enumerator { + /** + * The 'NONE' literal object. + * + * @see #NONE_VALUE + * @generated + * @ordered + */ + NONE(0, "NONE", "NONE"), + + /** + * The 'AUTO LAYOUT' literal object. + * + * @see #AUTO_LAYOUT_VALUE + * @generated + * @ordered + */ + AUTO_LAYOUT(1, "AUTO_LAYOUT", "AUTO_LAYOUT"), + + /** + * The 'AUTO UNTIL MANUAL' literal object. + * + * @see #AUTO_UNTIL_MANUAL_VALUE + * @generated + * @ordered + */ + AUTO_UNTIL_MANUAL(2, "AUTO_UNTIL_MANUAL", "AUTO_UNTIL_MANUAL"); + + /** + * The 'NONE' literal value. + * + * @see #NONE + * @model + * @generated + * @ordered + */ + public static final int NONE_VALUE = 0; + + /** + * The 'AUTO LAYOUT' literal value. + * + * @see #AUTO_LAYOUT + * @model + * @generated + * @ordered + */ + public static final int AUTO_LAYOUT_VALUE = 1; + + /** + * The 'AUTO UNTIL MANUAL' literal value. + * + * @see #AUTO_UNTIL_MANUAL + * @model + * @generated + * @ordered + */ + public static final int AUTO_UNTIL_MANUAL_VALUE = 2; + + /** + * An array of all the 'Layout Option' enumerators. + * + * @generated + */ + private static final DiagramLayoutOption[] VALUES_ARRAY = new DiagramLayoutOption[] { NONE, AUTO_LAYOUT, AUTO_UNTIL_MANUAL, }; + + /** + * A public read-only list of all the 'Layout Option' enumerators. + * + * @generated + */ + public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY)); + + /** + * Returns the 'Layout Option' literal with the specified literal value. + * + * + * @param literal + * the literal. + * @return the matching enumerator or null. + * @generated + */ + public static DiagramLayoutOption get(String literal) { + for (int i = 0; i < VALUES_ARRAY.length; ++i) { + DiagramLayoutOption result = VALUES_ARRAY[i]; + if (result.toString().equals(literal)) { + return result; + } + } + return null; + } + + /** + * Returns the 'Layout Option' literal with the specified name. + * + * @param name + * the name. + * @return the matching enumerator or null. + * @generated + */ + public static DiagramLayoutOption getByName(String name) { + for (int i = 0; i < VALUES_ARRAY.length; ++i) { + DiagramLayoutOption result = VALUES_ARRAY[i]; + if (result.getName().equals(name)) { + return result; + } + } + return null; + } + + /** + * Returns the 'Layout Option' literal with the specified integer value. + * + * + * @param value + * the integer value. + * @return the matching enumerator or null. + * @generated + */ + public static DiagramLayoutOption get(int value) { + switch (value) { + case NONE_VALUE: + return NONE; + case AUTO_LAYOUT_VALUE: + return AUTO_LAYOUT; + case AUTO_UNTIL_MANUAL_VALUE: + return AUTO_UNTIL_MANUAL; + } + return null; + } + + /** + * + * + * @generated + */ + private final int value; + + /** + * + * + * @generated + */ + private final String name; + + /** + * + * + * @generated + */ + private final String literal; + + /** + * Only this class can construct instances. + * + * @generated + */ + private DiagramLayoutOption(int value, String name, String literal) { + this.value = value; + this.name = name; + this.literal = literal; + } + + /** + * + * + * @generated + */ + @Override + public int getValue() { + return this.value; + } + + /** + * + * + * @generated + */ + @Override + public String getName() { + return this.name; + } + + /** + * + * + * @generated + */ + @Override + public String getLiteral() { + return this.literal; + } + + /** + * Returns the literal value of the enumerator, which is its string representation. + * + * @generated + */ + @Override + public String toString() { + return this.literal; + } + +} // DiagramLayoutOption diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java index ce3b4b147ce..db969ae57b0 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/DiagramPackage.java @@ -118,12 +118,12 @@ public interface DiagramPackage extends EPackage { int DIAGRAM_DESCRIPTION__DESCRIPTION = ViewPackage.REPRESENTATION_DESCRIPTION__DESCRIPTION; /** - * The feature id for the 'Auto Layout' attribute. + * The feature id for the 'Layout Option' attribute. * * @generated * @ordered */ - int DIAGRAM_DESCRIPTION__AUTO_LAYOUT = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 0; + int DIAGRAM_DESCRIPTION__LAYOUT_OPTION = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 0; /** * The feature id for the 'Toolbar' containment reference. + * + * @see org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * @see org.eclipse.sirius.components.view.diagram.impl.DiagramPackageImpl#getDiagramLayoutOption() + * @generated + */ + int DIAGRAM_LAYOUT_OPTION = 62; + /** * Returns the meta object for class '{@link org.eclipse.sirius.components.view.diagram.DiagramDescription * Description}'. @@ -4294,16 +4304,15 @@ public interface DiagramPackage extends EPackage { /** * Returns the meta object for the attribute - * '{@link org.eclipse.sirius.components.view.diagram.DiagramDescription#isAutoLayout Auto Layout}'. + * '{@link org.eclipse.sirius.components.view.diagram.DiagramDescription#getLayoutOption Layout Option}'. + * * - * @generated - * @return the meta object for the attribute 'Auto Layout'. - * @generated - * @see org.eclipse.sirius.components.view.diagram.DiagramDescription#isAutoLayout() + * @return the meta object for the attribute 'Layout Option'. + * @see org.eclipse.sirius.components.view.diagram.DiagramDescription#getLayoutOption() * @see #getDiagramDescription() + * @generated */ - EAttribute getDiagramDescription_AutoLayout(); + EAttribute getDiagramDescription_LayoutOption(); /** * Returns the meta object for the reference @@ -6812,6 +6821,16 @@ public interface DiagramPackage extends EPackage { */ EEnum getEdgeType(); + /** + * Returns the meta object for enum '{@link org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * Layout Option}'. + * + * @return the meta object for enum 'Layout Option'. + * @see org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * @generated + */ + EEnum getDiagramLayoutOption(); + /** * Returns the factory that creates the instances of the model. * @@ -6847,12 +6866,12 @@ interface Literals { EClass DIAGRAM_DESCRIPTION = eINSTANCE.getDiagramDescription(); /** - * The meta object literal for the 'Auto Layout' attribute feature. + * The meta object literal for the 'Layout Option' attribute feature. + * * * @generated */ - EAttribute DIAGRAM_DESCRIPTION__AUTO_LAYOUT = eINSTANCE.getDiagramDescription_AutoLayout(); + EAttribute DIAGRAM_DESCRIPTION__LAYOUT_OPTION = eINSTANCE.getDiagramDescription_LayoutOption(); /** * The meta object literal for the 'Toolbar' containment reference feature. + * + * @see org.eclipse.sirius.components.view.diagram.DiagramLayoutOption + * @see org.eclipse.sirius.components.view.diagram.impl.DiagramPackageImpl#getDiagramLayoutOption() + * @generated + */ + EEnum DIAGRAM_LAYOUT_OPTION = eINSTANCE.getDiagramLayoutOption(); + } } // DiagramPackage diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramDescriptionImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramDescriptionImpl.java index bb89682b972..176d52f4f6b 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramDescriptionImpl.java @@ -24,6 +24,7 @@ import org.eclipse.emf.ecore.util.InternalEList; 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.DiagramPackage; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolbar; @@ -38,8 +39,8 @@ * The following features are implemented: *

    *
      - *
    • {@link org.eclipse.sirius.components.view.diagram.impl.DiagramDescriptionImpl#isAutoLayout Auto - * Layout}
    • + *
    • {@link org.eclipse.sirius.components.view.diagram.impl.DiagramDescriptionImpl#getLayoutOption Layout + * Option}
    • *
    • {@link org.eclipse.sirius.components.view.diagram.impl.DiagramDescriptionImpl#getToolbar Toolbar}
    • *
    • {@link org.eclipse.sirius.components.view.diagram.impl.DiagramDescriptionImpl#getPalette Palette}
    • *
    • {@link org.eclipse.sirius.components.view.diagram.impl.DiagramDescriptionImpl#getGroupPalette Group @@ -57,24 +58,24 @@ public class DiagramDescriptionImpl extends RepresentationDescriptionImpl implements DiagramDescription { /** - * The default value of the '{@link #isAutoLayout() Auto Layout}' attribute. + * The default value of the '{@link #getLayoutOption() Layout Option}' attribute. + * * - * @see #isAutoLayout() + * @see #getLayoutOption() * @generated * @ordered */ - protected static final boolean AUTO_LAYOUT_EDEFAULT = false; + protected static final DiagramLayoutOption LAYOUT_OPTION_EDEFAULT = DiagramLayoutOption.NONE; /** - * The cached value of the '{@link #isAutoLayout() Auto Layout}' attribute. + * The cached value of the '{@link #getLayoutOption() Layout Option}' attribute. + * * - * @see #isAutoLayout() + * @see #getLayoutOption() * @generated * @ordered */ - protected boolean autoLayout = AUTO_LAYOUT_EDEFAULT; + protected DiagramLayoutOption layoutOption = LAYOUT_OPTION_EDEFAULT; /** * The cached value of the '{@link #getToolbar() Toolbar}' containment reference. @@ -171,8 +172,8 @@ protected EClass eStaticClass() { * @generated */ @Override - public boolean isAutoLayout() { - return this.autoLayout; + public DiagramLayoutOption getLayoutOption() { + return this.layoutOption; } /** @@ -181,11 +182,11 @@ public boolean isAutoLayout() { * @generated */ @Override - public void setAutoLayout(boolean newAutoLayout) { - boolean oldAutoLayout = this.autoLayout; - this.autoLayout = newAutoLayout; + public void setLayoutOption(DiagramLayoutOption newLayoutOption) { + DiagramLayoutOption oldLayoutOption = this.layoutOption; + this.layoutOption = newLayoutOption == null ? LAYOUT_OPTION_EDEFAULT : newLayoutOption; if (this.eNotificationRequired()) - this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT, oldAutoLayout, this.autoLayout)); + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION, oldLayoutOption, this.layoutOption)); } /** @@ -411,8 +412,8 @@ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT: - return this.isAutoLayout(); + case DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION: + return this.getLayoutOption(); case DiagramPackage.DIAGRAM_DESCRIPTION__TOOLBAR: return this.getToolbar(); case DiagramPackage.DIAGRAM_DESCRIPTION__PALETTE: @@ -438,8 +439,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT: - this.setAutoLayout((Boolean) newValue); + case DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION: + this.setLayoutOption((DiagramLayoutOption) newValue); return; case DiagramPackage.DIAGRAM_DESCRIPTION__TOOLBAR: this.setToolbar((DiagramToolbar) newValue); @@ -473,8 +474,8 @@ public void eSet(int featureID, Object newValue) { @Override public void eUnset(int featureID) { switch (featureID) { - case DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT: - this.setAutoLayout(AUTO_LAYOUT_EDEFAULT); + case DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION: + this.setLayoutOption(LAYOUT_OPTION_EDEFAULT); return; case DiagramPackage.DIAGRAM_DESCRIPTION__TOOLBAR: this.setToolbar((DiagramToolbar) null); @@ -506,8 +507,8 @@ public void eUnset(int featureID) { @Override public boolean eIsSet(int featureID) { switch (featureID) { - case DiagramPackage.DIAGRAM_DESCRIPTION__AUTO_LAYOUT: - return this.autoLayout != AUTO_LAYOUT_EDEFAULT; + case DiagramPackage.DIAGRAM_DESCRIPTION__LAYOUT_OPTION: + return this.layoutOption != LAYOUT_OPTION_EDEFAULT; case DiagramPackage.DIAGRAM_DESCRIPTION__TOOLBAR: return this.toolbar != null; case DiagramPackage.DIAGRAM_DESCRIPTION__PALETTE: @@ -535,8 +536,8 @@ public String toString() { return super.toString(); StringBuilder result = new StringBuilder(super.toString()); - result.append(" (autoLayout: "); - result.append(this.autoLayout); + result.append(" (layoutOption: "); + result.append(this.layoutOption); result.append(", arrangeLayoutDirection: "); result.append(this.arrangeLayoutDirection); result.append(')'); diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramFactoryImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramFactoryImpl.java index 1f831344683..87468f07b01 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramFactoryImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramFactoryImpl.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.view.diagram.DeleteView; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DiagramPackage; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolSection; @@ -239,6 +240,8 @@ public Object createFromString(EDataType eDataType, String initialValue) { return this.createHeaderSeparatorDisplayModeFromString(eDataType, initialValue); case DiagramPackage.EDGE_TYPE: return this.createEdgeTypeFromString(eDataType, initialValue); + case DiagramPackage.DIAGRAM_LAYOUT_OPTION: + return this.createDiagramLayoutOptionFromString(eDataType, initialValue); default: throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); } @@ -278,6 +281,8 @@ public String convertToString(EDataType eDataType, Object instanceValue) { return this.convertHeaderSeparatorDisplayModeToString(eDataType, instanceValue); case DiagramPackage.EDGE_TYPE: return this.convertEdgeTypeToString(eDataType, instanceValue); + case DiagramPackage.DIAGRAM_LAYOUT_OPTION: + return this.convertDiagramLayoutOptionToString(eDataType, instanceValue); default: throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); } @@ -974,6 +979,27 @@ public String convertEdgeTypeToString(EDataType eDataType, Object instanceValue) return instanceValue == null ? null : instanceValue.toString(); } + /** + * + * + * @generated + */ + public DiagramLayoutOption createDiagramLayoutOptionFromString(EDataType eDataType, String initialValue) { + DiagramLayoutOption result = DiagramLayoutOption.get(initialValue); + if (result == null) + throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); + return result; + } + + /** + * + * + * @generated + */ + public String convertDiagramLayoutOptionToString(EDataType eDataType, Object instanceValue) { + return instanceValue == null ? null : instanceValue.toString(); + } + /** * * diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java index b5543309d9d..5249bcb192e 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/DiagramPackageImpl.java @@ -33,6 +33,7 @@ import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.DiagramElementDescription; import org.eclipse.sirius.components.view.diagram.DiagramFactory; +import org.eclipse.sirius.components.view.diagram.DiagramLayoutOption; import org.eclipse.sirius.components.view.diagram.DiagramPackage; import org.eclipse.sirius.components.view.diagram.DiagramPalette; import org.eclipse.sirius.components.view.diagram.DiagramToolSection; @@ -532,6 +533,13 @@ public class DiagramPackageImpl extends EPackageImpl implements DiagramPackage { */ private EEnum edgeTypeEEnum = null; + /** + * + * + * @generated + */ + private EEnum diagramLayoutOptionEEnum = null; + /** * * @@ -619,7 +627,7 @@ public EClass getDiagramDescription() { * @generated */ @Override - public EAttribute getDiagramDescription_AutoLayout() { + public EAttribute getDiagramDescription_LayoutOption() { return (EAttribute) this.diagramDescriptionEClass.getEStructuralFeatures().get(0); } @@ -2773,6 +2781,16 @@ public EEnum getEdgeType() { return this.edgeTypeEEnum; } + /** + * + * + * @generated + */ + @Override + public EEnum getDiagramLayoutOption() { + return this.diagramLayoutOptionEEnum; + } + /** * * @@ -2796,7 +2814,7 @@ public void createPackageContents() { // Create classes and their features this.diagramDescriptionEClass = this.createEClass(DIAGRAM_DESCRIPTION); - this.createEAttribute(this.diagramDescriptionEClass, DIAGRAM_DESCRIPTION__AUTO_LAYOUT); + this.createEAttribute(this.diagramDescriptionEClass, DIAGRAM_DESCRIPTION__LAYOUT_OPTION); this.createEReference(this.diagramDescriptionEClass, DIAGRAM_DESCRIPTION__TOOLBAR); this.createEReference(this.diagramDescriptionEClass, DIAGRAM_DESCRIPTION__PALETTE); this.createEReference(this.diagramDescriptionEClass, DIAGRAM_DESCRIPTION__GROUP_PALETTE); @@ -3062,6 +3080,7 @@ public void createPackageContents() { this.userResizableDirectionEEnum = this.createEEnum(USER_RESIZABLE_DIRECTION); this.headerSeparatorDisplayModeEEnum = this.createEEnum(HEADER_SEPARATOR_DISPLAY_MODE); this.edgeTypeEEnum = this.createEEnum(EDGE_TYPE); + this.diagramLayoutOptionEEnum = this.createEEnum(DIAGRAM_LAYOUT_OPTION); } /** @@ -3129,7 +3148,7 @@ public void initializePackageContents() { // Initialize classes, features, and operations; add parameters this.initEClass(this.diagramDescriptionEClass, DiagramDescription.class, "DiagramDescription", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - this.initEAttribute(this.getDiagramDescription_AutoLayout(), this.ecorePackage.getEBoolean(), "autoLayout", null, 1, 1, DiagramDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, + this.initEAttribute(this.getDiagramDescription_LayoutOption(), this.getDiagramLayoutOption(), "layoutOption", null, 1, 1, DiagramDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEReference(this.getDiagramDescription_Toolbar(), this.getDiagramToolbar(), null, "toolbar", null, 0, 1, DiagramDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -3644,6 +3663,11 @@ public void initializePackageContents() { this.addEEnumLiteral(this.edgeTypeEEnum, EdgeType.SMART_MANHATTAN); this.addEEnumLiteral(this.edgeTypeEEnum, EdgeType.OBLIQUE); + this.initEEnum(this.diagramLayoutOptionEEnum, DiagramLayoutOption.class, "DiagramLayoutOption"); + this.addEEnumLiteral(this.diagramLayoutOptionEEnum, DiagramLayoutOption.NONE); + this.addEEnumLiteral(this.diagramLayoutOptionEEnum, DiagramLayoutOption.AUTO_LAYOUT); + this.addEEnumLiteral(this.diagramLayoutOptionEEnum, DiagramLayoutOption.AUTO_UNTIL_MANUAL); + // Create resource this.createResource(eNS_URI); } diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore index dd90e01323a..127d980bc34 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore +++ b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.ecore @@ -85,9 +85,14 @@ + + + + + - + + + + + + - + diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java index 354a0336465..f90217233a7 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.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 @@ -43,6 +43,7 @@ import org.eclipse.sirius.components.diagrams.components.BorderNodePosition; import org.eclipse.sirius.components.diagrams.components.LabelIdProvider; 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.EdgeLabelKind; import org.eclipse.sirius.components.diagrams.description.IEdgeEditLabelHandler; @@ -160,7 +161,7 @@ public org.eclipse.sirius.components.view.diagram.DiagramDescription getSourceDi return viewDiagramDescription; } }) - .autoLayout(viewDiagramDescription.isAutoLayout()) + .layoutOption(DiagramLayoutOption.valueOf(viewDiagramDescription.getLayoutOption().getLiteral())) .arrangeLayoutDirection(ArrangeLayoutDirection.valueOf(viewDiagramDescription.getArrangeLayoutDirection().getLiteral())) .targetObjectIdProvider(this.semanticTargetIdProvider) .nodeDescriptions(nodeDescriptions)