Skip to content

Commit d0364d5

Browse files
committed
[3647] Add support for diagram style with background customization
Bug: #3647 Signed-off-by: Florian ROUËNÉ <florian.rouene@obeosoft.com>
1 parent bc1844c commit d0364d5

File tree

68 files changed

+2413
-176
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+2413
-176
lines changed

CHANGELOG.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ More existing APIs will be migrated to this new common pattern.
6363
- https://github.com/eclipse-sirius/sirius-web/issues/3616[#3616] [diagram] Fix potential exceptions due to duplicate keys in diagram event processing
6464
- https://github.com/eclipse-sirius/sirius-web/issues/3624[#3624] [diagram] Fix an issue where the header separator does not fill the entire width of the node
6565
- https://github.com/eclipse-sirius/sirius-web/issues/3531[#3531] [diagram] Fix unnecessary edges label re render
66-
- https://github.com/eclipse-sirius/sirius-web/issues/3650[#3650] [diagram] Fix potential NPE in DiagramNavigator and Node toString method
66+
- https://github.com/eclipse-sirius/sirius-web/issues/3650[#3650] [diagram] Fix potential NPE in DiagramNavigator and Node toString method
6767

6868
=== New Features
6969

@@ -82,6 +82,7 @@ This dialog presents diagram elements in a tree and allows to select them and up
8282
image:doc/screenshots/diagramFilterView.png[Diagram Filter View, 70%]
8383
- https://github.com/eclipse-sirius/sirius-web/issues/3523[#3523] [gantt] Support rounding dates when changing dates from gantt
8484
- https://github.com/eclipse-sirius/sirius-web/issues/3655[#3655] [gantt] Support "Delete Task Dependency" tool in gantt
85+
- https://github.com/eclipse-sirius/sirius-web/issues/3647[#3647] [diagram] Add support for diagram style with background customization
8586

8687
=== Improvements
8788

packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/CreateViewOperationHandlerTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.eclipse.sirius.components.compatibility.emf.modeloperations.CreateViewOperationHandler;
2929
import org.eclipse.sirius.components.core.api.IEditingContext;
3030
import org.eclipse.sirius.components.diagrams.Diagram;
31+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
3132
import org.eclipse.sirius.components.diagrams.FreeFormLayoutStrategy;
3233
import org.eclipse.sirius.components.diagrams.INodeStyle;
3334
import org.eclipse.sirius.components.diagrams.InsideLabelLocation;
@@ -88,6 +89,7 @@ public void initialize() {
8889
.nodeDescriptions(List.of(this.getNodeDescription(UUID.randomUUID().toString())))
8990
.edgeDescriptions(List.of())
9091
.dropHandler(variableManager -> new Failure(""))
92+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().build())
9193
.build();
9294

9395
Diagram diagram = Diagram.newDiagram(UUID.randomUUID().toString())

packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/DeleteViewOperationHandlerTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.eclipse.sirius.components.core.api.IEditingContext;
2929
import org.eclipse.sirius.components.diagrams.CollapsingState;
3030
import org.eclipse.sirius.components.diagrams.Diagram;
31+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
3132
import org.eclipse.sirius.components.diagrams.FreeFormLayoutStrategy;
3233
import org.eclipse.sirius.components.diagrams.INodeStyle;
3334
import org.eclipse.sirius.components.diagrams.ImageNodeStyle;
@@ -91,6 +92,7 @@ public void initialize() {
9192
.nodeDescriptions(List.of(this.getNodeDescription(UUID.randomUUID().toString())))
9293
.edgeDescriptions(List.of())
9394
.dropHandler(variableManager -> new Failure(""))
95+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().build())
9496
.build();
9597

9698
Node node = Node.newNode(UUID.randomUUID().toString())

packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/diagrams/DiagramDescriptionConverter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.sirius.components.compatibility.diagrams.DiagramLabelProvider;
2525
import org.eclipse.sirius.components.compatibility.services.diagrams.api.IDiagramDescriptionConverter;
2626
import org.eclipse.sirius.components.diagrams.ArrangeLayoutDirection;
27+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
2728
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
2829
import org.eclipse.sirius.components.diagrams.description.DiagramDescription.Builder;
2930
import org.eclipse.sirius.components.interpreter.AQLInterpreter;
@@ -41,6 +42,8 @@ public class DiagramDescriptionConverter implements IDiagramDescriptionConverter
4142

4243
private static final String FORCE_AUTO_LAYOUT = "FORCE_AUTO_LAYOUT";
4344

45+
private static final String DEFAULT_BACKGROUND_COLOR = "#FAFAFA";
46+
4447
private final List<IDiagramDescriptionPopulator> diagramDescriptionPopulators;
4548

4649
private final IAQLInterpreterFactory interpreterFactory;
@@ -67,7 +70,8 @@ public DiagramDescription convert(org.eclipse.sirius.diagram.description.Diagram
6770
.canCreatePredicate(canCreatePredicate)
6871
.labelProvider(labelProvider)
6972
.autoLayout(this.isAutoLayoutMode(siriusDiagramDescription))
70-
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED);
73+
.arrangeLayoutDirection(ArrangeLayoutDirection.UNDEFINED)
74+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().background(DEFAULT_BACKGROUND_COLOR).build());
7175

7276
for (IDiagramDescriptionPopulator diagramDescriptionPopulator : this.diagramDescriptionPopulators) {
7377
diagramDescriptionPopulator.populate(builder, siriusDiagramDescription, interpreter);

packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@ type Diagram implements Representation {
3737
position: Position!
3838
nodes: [Node!]!
3939
edges: [Edge!]!
40+
style: DiagramStyle!
4041
layoutData: DiagramLayoutData!
4142
}
4243

44+
type DiagramStyle {
45+
background: String
46+
}
47+
4348
type DiagramLayoutData {
4449
nodeLayoutData: [NodeLayoutData!]!
4550
}

packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/CreateDiagramEventHandlerTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.eclipse.sirius.components.core.api.IPayload;
3333
import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService;
3434
import org.eclipse.sirius.components.diagrams.Diagram;
35+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
3536
import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
3637
import org.eclipse.sirius.components.representations.Failure;
3738
import org.eclipse.sirius.components.representations.IRepresentationDescription;
@@ -64,6 +65,7 @@ public Optional<IRepresentationDescription> findById(IEditingContext editingCont
6465
.nodeDescriptions(new ArrayList<>())
6566
.targetObjectIdProvider(variableManager -> "targetObjectId")
6667
.dropHandler(variableManager -> new Failure(""))
68+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().build())
6769
.build();
6870
// @formatter:on
6971

packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService;
3333
import org.eclipse.sirius.components.diagrams.CollapsingState;
3434
import org.eclipse.sirius.components.diagrams.Diagram;
35+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
3536
import org.eclipse.sirius.components.diagrams.FreeFormLayoutStrategy;
3637
import org.eclipse.sirius.components.diagrams.InsideLabel;
3738
import org.eclipse.sirius.components.diagrams.InsideLabelLocation;
@@ -171,6 +172,7 @@ public void testGetConnectorTools() {
171172
.edgeDescriptions(new ArrayList<>())
172173
.palettes(List.of(palette))
173174
.dropHandler(variableManager -> new Failure(""))
175+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().build())
174176
.build();
175177

176178
Node sourceNode = this.getNode(SOURCE_NODE_ID, SOURCE_NODE_TARGET_ID);

packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/TestDiagramDescriptionBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.function.Function;
1818

1919
import org.eclipse.sirius.components.diagrams.ArrowStyle;
20+
import org.eclipse.sirius.components.diagrams.DiagramStyle;
2021
import org.eclipse.sirius.components.diagrams.EdgeStyle;
2122
import org.eclipse.sirius.components.diagrams.FreeFormLayoutStrategy;
2223
import org.eclipse.sirius.components.diagrams.INodeStyle;
@@ -55,6 +56,7 @@ public DiagramDescription getDiagramDescription(String diagramDescriptionId, Lis
5556
.edgeDescriptions(edgeDescriptions)
5657
.palettes(palettes)
5758
.dropHandler(variableManager -> new Failure(""))
59+
.styleProvider(variableManager -> DiagramStyle.newDiagramStyle().build())
5860
.build();
5961
}
6062

packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/Diagram.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
*/
2929
@Immutable
3030
public final class Diagram implements IRepresentation {
31+
3132
public static final String KIND = IRepresentation.KIND_PREFIX + "?type=Diagram";
3233

3334
private String id;
@@ -50,6 +51,8 @@ public final class Diagram implements IRepresentation {
5051

5152
private DiagramLayoutData layoutData;
5253

54+
private DiagramStyle style;
55+
5356
private Diagram() {
5457
// Prevent instantiation
5558
}
@@ -99,6 +102,10 @@ public DiagramLayoutData getLayoutData() {
99102
return this.layoutData;
100103
}
101104

105+
public DiagramStyle getStyle() {
106+
return this.style;
107+
}
108+
102109
public static Builder newDiagram(String id) {
103110
return new Builder(id);
104111
}
@@ -120,9 +127,10 @@ public String toString() {
120127
*/
121128
@SuppressWarnings("checkstyle:HiddenField")
122129
public static final class Builder {
123-
private String id;
124130

125-
private String kind = KIND;
131+
private final String id;
132+
133+
private final String kind = KIND;
126134

127135
private String targetObjectId;
128136

@@ -138,6 +146,8 @@ public static final class Builder {
138146

139147
private List<Edge> edges;
140148

149+
private DiagramStyle style;
150+
141151
private DiagramLayoutData layoutData = new DiagramLayoutData(Map.of(), Map.of(), Map.of());
142152

143153
private Builder(String id) {
@@ -153,6 +163,7 @@ private Builder(Diagram diagram) {
153163
this.size = diagram.getSize();
154164
this.nodes = diagram.getNodes();
155165
this.edges = diagram.getEdges();
166+
this.style = diagram.getStyle();
156167
this.layoutData = diagram.getLayoutData();
157168
}
158169

@@ -191,6 +202,11 @@ public Builder edges(List<Edge> edges) {
191202
return this;
192203
}
193204

205+
public Builder style(DiagramStyle style) {
206+
this.style = Objects.requireNonNull(style);
207+
return this;
208+
}
209+
194210
public Builder layoutData(DiagramLayoutData layoutData) {
195211
this.layoutData = Objects.requireNonNull(layoutData);
196212
return this;
@@ -207,6 +223,7 @@ public Diagram build() {
207223
diagram.size = Objects.requireNonNull(this.size);
208224
diagram.nodes = Objects.requireNonNull(this.nodes);
209225
diagram.edges = Objects.requireNonNull(this.edges);
226+
diagram.style = Objects.requireNonNull(this.style);
210227
diagram.layoutData = Objects.requireNonNull(this.layoutData);
211228
return diagram;
212229
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Obeo.
3+
* This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v2.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Obeo - initial API and implementation
12+
*******************************************************************************/
13+
package org.eclipse.sirius.components.diagrams;
14+
15+
import java.util.Objects;
16+
17+
import org.eclipse.sirius.components.annotations.Immutable;
18+
19+
/**
20+
* A diagram style.
21+
*
22+
* @author frouene
23+
*/
24+
@Immutable
25+
public final class DiagramStyle {
26+
27+
private String background;
28+
29+
private DiagramStyle() {
30+
// prevent initialisation
31+
}
32+
33+
public static Builder newDiagramStyle() {
34+
return new Builder();
35+
}
36+
37+
public String getBackground() {
38+
return this.background;
39+
}
40+
41+
/**
42+
* The builder used to create the diagram style.
43+
*
44+
* @author frouene
45+
*/
46+
@SuppressWarnings("checkstyle:HiddenField")
47+
public static final class Builder {
48+
49+
private String background;
50+
51+
public Builder background(String background) {
52+
this.background = Objects.requireNonNull(background);
53+
return this;
54+
}
55+
56+
public DiagramStyle build() {
57+
DiagramStyle diagramStyle = new DiagramStyle();
58+
diagramStyle.background = Objects.requireNonNull(this.background);
59+
return diagramStyle;
60+
}
61+
62+
}
63+
}

0 commit comments

Comments
 (0)