Skip to content

Commit

Permalink
[2514] Change RectangularNodeSyle#withHeader for InsideLabel#isHeader
Browse files Browse the repository at this point in the history
Bug: #2514
Signed-off-by: Guillaume Coutable <guillaume.coutable@obeo.fr>
  • Loading branch information
gcoutable committed Oct 30, 2023
1 parent 864d905 commit 84271e2
Show file tree
Hide file tree
Showing 50 changed files with 213 additions and 280 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.adoc
Expand Up @@ -29,6 +29,9 @@ For example, Diagram & Form domains are not root domains because `DiagramDescrip
- https://github.com/eclipse-sirius/sirius-web/issues/1712[#1712] [diagram] The GraphQL type `Node` must now implement `isLabelEditable` boolean field.
- https://github.com/eclipse-sirius/sirius-web/issues/2456[#2456] [sirius-web] The GraphQL field `CreateChildSuccessPayload` now expects to have a list of messages.
- https://github.com/eclipse-sirius/sirius-web/issues/1982[#1982] [diagram] Change the diagram structure. The Node's 'label' attribute has been renamed into 'insideLabel' and its type changed from `Label` to `InsideLabel` (which is currently identical to `Label` except for the name).
- https://github.com/eclipse-sirius/sirius-web/issues/2514[#2514] [diagram] Move and rename the RectangleNodeStyle `withHeader` attribute to InsideLabel `isHeader`.
It requires to add a `isHeaderProvider` to the _LabelDescription_ of Node.
Update the graphql api accordingly.

=== Dependency update

Expand Down
Expand Up @@ -90,7 +90,6 @@ public String getIdentifier(Object element) {
}

private NodeDescription createNodeDescription(String id) {
// @formatter:off
LabelStyleDescription styleDescription = LabelStyleDescription.newLabelStyleDescription()
.colorProvider(variableManager -> "")
.fontSizeProvider(variableManager -> 0)
Expand All @@ -105,6 +104,7 @@ private NodeDescription createNodeDescription(String id) {
.idProvider(variableManager -> "")
.textProvider(variableManager -> "")
.styleDescriptionProvider(variableManager -> styleDescription)
.isHeaderProvider(vm -> false)
.build();

return NodeDescription.newNodeDescription(id)
Expand All @@ -122,7 +122,6 @@ private NodeDescription createNodeDescription(String id) {
.labelEditHandler((variableManager, newLabel) -> new Success())
.deleteHandler(variableManager -> new Success())
.build();
// @formatter:on
}

/**
Expand Down
Expand Up @@ -78,7 +78,6 @@ public class CreateViewOperationHandlerTests {
public void initialize() {
this.operationTestContext = new OperationTestContext();

// @formatter:off
DiagramDescription diagramDescription = DiagramDescription.newDiagramDescription(UUID.randomUUID().toString())
.label("DiagramDescriptionTest")
.targetObjectIdProvider(variableManager -> "diagramTargetObjectId")
Expand Down Expand Up @@ -107,7 +106,6 @@ public List<ViewCreationRequest> getViewCreationRequests() {
}
};
this.operationTestContext.getVariables().put(IDiagramContext.DIAGRAM_CONTEXT, diagramContext);
// @formatter:on

AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of());
Expand Down Expand Up @@ -185,7 +183,6 @@ private void handleAndCheckExecution(String variableName, ENamedElement renamedE
}

private NodeDescription getNodeDescription(String nodeDescriptionId) {
// @formatter:off
LabelStyleDescription labelStyleDescription = LabelStyleDescription.newLabelStyleDescription()
.colorProvider(variableManager -> "#000000")
.fontSizeProvider(variableManager -> 16)
Expand All @@ -200,6 +197,7 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) {
.idProvider(variableManager -> "labelId")
.textProvider(variableManager -> "Node")
.styleDescriptionProvider(variableManager -> labelStyleDescription)
.isHeaderProvider(vm -> false)
.build();

Function<VariableManager, INodeStyle> nodeStyleProvider = variableManager -> {
Expand Down Expand Up @@ -235,7 +233,6 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) {
.labelEditHandler((variableManager, newLabel) -> new Success())
.deleteHandler(variableManager -> new Success())
.build();
// @formatter:on
}

}
Expand Up @@ -81,7 +81,6 @@ public class DeleteViewOperationHandlerTests {
public void initialize() {
this.operationTestContext = new OperationTestContext();

// @formatter:off
DiagramDescription diagramDescription = DiagramDescription.newDiagramDescription(UUID.randomUUID().toString())
.label("DiagramDescriptionTest")
.targetObjectIdProvider(variableManager -> "diagramTargetObjectId")
Expand All @@ -107,6 +106,7 @@ public void initialize() {
.size(Size.of(10, 10))
.alignment(Position.at(0, 0))
.style(LabelStyle.newLabelStyle().color("").fontSize(0).iconURL("").build())
.isHeader(false)
.build())
.style(ImageNodeStyle.newImageNodeStyle().imageURL("").scalingFactor(0).build())
.position(Position.at(0, 0))
Expand Down Expand Up @@ -135,7 +135,6 @@ public List<ViewDeletionRequest> getViewDeletionRequests() {
}
};
this.operationTestContext.getVariables().put(IDiagramContext.DIAGRAM_CONTEXT, diagramContext);
// @formatter:on

AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of());
Expand All @@ -162,7 +161,6 @@ public void deleteViewOperationHandlerNominalCaseTest() {
}

private NodeDescription getNodeDescription(String nodeDescriptionId) {
// @formatter:off
LabelStyleDescription labelStyleDescription = LabelStyleDescription.newLabelStyleDescription()
.colorProvider(variableManager -> "#000000")
.fontSizeProvider(variableManager -> 16)
Expand All @@ -177,6 +175,7 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) {
.idProvider(variableManager -> "labelId")
.textProvider(variableManager -> "Node")
.styleDescriptionProvider(variableManager -> labelStyleDescription)
.isHeaderProvider(vm -> false)
.build();

Function<VariableManager, INodeStyle> nodeStyleProvider = variableManager -> {
Expand Down Expand Up @@ -212,7 +211,6 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) {
.labelEditHandler((variableManager, newLabel) -> new Success())
.deleteHandler(variableManager -> new Success())
.build();
// @formatter:on
}

}
Expand Up @@ -82,14 +82,14 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter
Function<VariableManager, String> labelIdProvider = this.getLabelIdProvider();
Function<VariableManager, String> labelExpressionProvider = this.getLabelExpressionProvider(interpreter, abstractNodeMappingDescriptionProvider);
Function<VariableManager, LabelStyleDescription> labelStyleDescriptionProvider = this.getLabelStyleDescriptionProvider(labelStyleDescriptionConverter, abstractNodeMappingDescriptionProvider);
Function<VariableManager, Boolean> isHeaderProvider = new AbstractNodeMappingIsHeaderProvider(interpreter, abstractNodeMapping);

// @formatter:off
LabelDescription labelDescription = LabelDescription.newLabelDescription(this.identifierProvider.getIdentifier(abstractNodeMapping) + LabelDescription.LABEL_SUFFIX)
.idProvider(labelIdProvider)
.textProvider(labelExpressionProvider)
.styleDescriptionProvider(labelStyleDescriptionProvider)
.isHeaderProvider(isHeaderProvider)
.build();
// @formatter:on

Function<VariableManager, String> semanticTargetIdProvider = variableManager -> {
return variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null);
Expand Down Expand Up @@ -124,11 +124,9 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter

List<NodeDescription> childNodeDescriptions = this.getChildNodeDescriptions(abstractNodeMapping, interpreter, id2NodeDescriptions);

// @formatter:off
List<NodeDescription> borderNodeDescriptions = abstractNodeMapping.getBorderedNodeMappings().stream()
.map(borderNodeMapping -> this.convert(borderNodeMapping, interpreter, id2NodeDescriptions))
.toList();
// @formatter:on

ToolConverter toolConverter = new ToolConverter(interpreter, this.editService, this.modelOperationHandlerSwitchProvider);
var deleteHandler = toolConverter.createDeleteToolHandler(abstractNodeMapping.getDeletionDescription());
Expand All @@ -144,7 +142,6 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter
collapsible = new ContainerMappingQuery(containerMapping).isRegion();
}

// @formatter:off
NodeDescription description = NodeDescription.newNodeDescription(this.identifierProvider.getIdentifier(abstractNodeMapping))
.typeProvider(typeProvider)
.targetObjectIdProvider(semanticTargetIdProvider)
Expand All @@ -162,7 +159,6 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter
.labelEditHandler(labelEditHandler)
.deleteHandler(deleteHandler)
.build();
// @formatter:on

id2NodeDescriptions.put(description.getId(), description);

Expand Down Expand Up @@ -195,7 +191,6 @@ private Function<VariableManager, String> getLabelIdProvider() {
}

private List<NodeDescription> getChildNodeDescriptions(AbstractNodeMapping abstractNodeMapping, AQLInterpreter interpreter, Map<String, NodeDescription> id2NodeDescriptions) {
// @formatter:off
List<NodeDescription> childNodeDescriptions = new ArrayList<>();

if (abstractNodeMapping instanceof ContainerMapping) {
Expand All @@ -211,7 +206,6 @@ private List<NodeDescription> getChildNodeDescriptions(AbstractNodeMapping abstr
childNodeDescriptions.addAll(childNodeMappingDescriptions);
childNodeDescriptions.addAll(childContainerMappingDescriptions);
}
// @formatter:on

return childNodeDescriptions;

Expand Down
@@ -0,0 +1,55 @@
/*******************************************************************************
* Copyright (c) 2023 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.compatibility.diagrams;

import java.util.Objects;
import java.util.function.Function;

import org.eclipse.sirius.components.interpreter.AQLInterpreter;
import org.eclipse.sirius.components.representations.VariableManager;
import org.eclipse.sirius.diagram.business.api.query.ContainerMappingQuery;
import org.eclipse.sirius.diagram.description.AbstractNodeMapping;
import org.eclipse.sirius.diagram.description.ContainerMapping;
import org.eclipse.sirius.diagram.description.style.FlatContainerStyleDescription;
import org.eclipse.sirius.viewpoint.description.style.LabelStyleDescription;

/**
* Used to return if the node mapping has a header.
*
* @author gcoutable
*/
public class AbstractNodeMappingIsHeaderProvider implements Function<VariableManager, Boolean> {

private final AQLInterpreter interpreter;

private final AbstractNodeMapping abstractNodeMapping;

public AbstractNodeMappingIsHeaderProvider(AQLInterpreter interpreter, AbstractNodeMapping abstractNodeMapping) {
this.interpreter = Objects.requireNonNull(interpreter);
this.abstractNodeMapping = Objects.requireNonNull(abstractNodeMapping);
}

@Override
public Boolean apply(VariableManager variableManager) {
LabelStyleDescription labelStyleDescription = new LabelStyleDescriptionProvider(this.interpreter, this.abstractNodeMapping).apply(variableManager);
return this.isHeader(variableManager, labelStyleDescription);
}

private Boolean isHeader(VariableManager variableManager, LabelStyleDescription labelStyleDescription) {
if (labelStyleDescription instanceof FlatContainerStyleDescription flatContainerStyleDescription) {
return this.abstractNodeMapping instanceof ContainerMapping && new ContainerMappingQuery((ContainerMapping) this.abstractNodeMapping).isListContainer();
}
return false;
}

}
Expand Up @@ -79,15 +79,12 @@ private INodeStyle getNodeStyle(VariableManager variableManager, LabelStyleDescr
style = workspaceImageDescriptionConverter.convert();
} else {
// Fallback on Rectangular node style for now, until other styles are supported

// @formatter:off
style = RectangularNodeStyle.newRectangularNodeStyle()
.color("rgb(200, 200, 200)")
.borderColor("rgb(0, 0, 0)")
.borderSize(1)
.borderStyle(LineStyle.Solid)
.build();
// @formatter:on
}

return style;
Expand All @@ -112,11 +109,9 @@ private boolean shouldBeConsideredAsListItemNodeStyle(VariableManager variableMa
}

private INodeStyle createListItemNodeStyle(VariableManager variableManager, LabelStyleDescription nodeStyleDescription) {
// @formatter:off
return IconLabelNodeStyle.newIconLabelNodeStyle()
.backgroundColor("transparent")
.build();
// @formatter:on
}

private INodeStyle createListNodeStyle(VariableManager variableManager, FlatContainerStyleDescription flatContainerStyleDescription) {
Expand All @@ -132,16 +127,13 @@ private INodeStyle createListNodeStyle(VariableManager variableManager, FlatCont
Result result = this.interpreter.evaluateExpression(variableManager.getVariables(), flatContainerStyleDescription.getBorderSizeComputationExpression());
int borderSize = result.asInt().getAsInt();

// @formatter:off
return RectangularNodeStyle.newRectangularNodeStyle()
.color(color)
.borderColor(borderColor)
.borderSize(borderSize)
.borderRadius(borderRadius)
.borderStyle(borderStyle)
.withHeader(true)
.build();
// @formatter:on
}

private int getBorderRadius(FlatContainerStyleDescription flatContainerStyleDescription) {
Expand All @@ -168,15 +160,12 @@ private RectangularNodeStyle createRectangularNodeStyle(VariableManager variable
Result result = this.interpreter.evaluateExpression(variableManager.getVariables(), squareDescription.getBorderSizeComputationExpression());
int borderSize = result.asInt().getAsInt();

// @formatter:off
return RectangularNodeStyle.newRectangularNodeStyle()
.color(color)
.borderColor(borderColor)
.borderSize(borderSize)
.borderStyle(borderStyle)
.withHeader(false)
.build();
// @formatter:on
}

private RectangularNodeStyle createRectangularNodeStyle(VariableManager variableManager, FlatContainerStyleDescription flatContainerStyleDescription) {
Expand All @@ -191,16 +180,13 @@ private RectangularNodeStyle createRectangularNodeStyle(VariableManager variable
Result result = this.interpreter.evaluateExpression(variables, flatContainerStyleDescription.getBorderSizeComputationExpression());
int borderSize = result.asInt().getAsInt();

// @formatter:off
return RectangularNodeStyle.newRectangularNodeStyle()
.color(color)
.borderColor(borderColor)
.borderSize(borderSize)
.borderRadius(borderRadius)
.borderStyle(borderStyle)
.withHeader(false)
.build();
// @formatter:on
}

private RectangularNodeStyle createRectangularNodeStyle(VariableManager variableManager, DotDescription dotDescription) {
Expand All @@ -215,16 +201,13 @@ private RectangularNodeStyle createRectangularNodeStyle(VariableManager variable
Result result = this.interpreter.evaluateExpression(variables, dotDescription.getBorderSizeComputationExpression());
int borderSize = result.asInt().getAsInt();

// @formatter:off
return RectangularNodeStyle.newRectangularNodeStyle()
.color(color)
.borderColor(borderColor)
.borderSize(borderSize)
.borderRadius(borderRadius)
.borderStyle(borderStyle)
.withHeader(false)
.build();
// @formatter:on
}

}

0 comments on commit 84271e2

Please sign in to comment.