From 390e5428f9d61638fbec2bc8d6cd5e66d95bdeac Mon Sep 17 00:00:00 2001 From: Michael Charfadi Date: Tue, 30 May 2023 10:52:46 +0200 Subject: [PATCH] [2044] Custom icons to edges and nodes label in view dsl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://github.com/eclipse-sirius/sirius-web/issues/2044 Signed-off-by: Michaƫl Charfadi --- CHANGELOG.adoc | 2 + .../ConditionalEdgeStyleBuilder.java | 10 + .../builder/generated/EdgeStyleBuilder.java | 10 + .../IconLabelNodeStyleDescriptionBuilder.java | 10 + .../ImageNodeStyleDescriptionBuilder.java | 10 + .../NodeStyleDescriptionBuilder.java | 10 + ...ectangularNodeStyleDescriptionBuilder.java | 10 + .../ConditionalEdgeStyleItemProvider.java | 13 + .../provider/EdgeStyleItemProvider.java | 13 + ...LabelNodeStyleDescriptionItemProvider.java | 14 + ...ImageNodeStyleDescriptionItemProvider.java | 14 + ...gularNodeStyleDescriptionItemProvider.java | 14 + .../view/diagram/DiagramPackage.java | 94 ++++- .../components/view/diagram/EdgeStyle.java | 23 ++ .../view/diagram/NodeStyleDescription.java | 23 ++ .../impl/ConditionalEdgeStyleImpl.java | 61 +++ .../view/diagram/impl/DiagramPackageImpl.java | 26 ++ .../view/diagram/impl/EdgeStyleImpl.java | 56 +++ .../IconLabelNodeStyleDescriptionImpl.java | 57 +++ .../impl/ImageNodeStyleDescriptionImpl.java | 57 +++ .../RectangularNodeStyleDescriptionImpl.java | 57 +++ .../src/main/resources/model/diagram.ecore | 2 + .../src/main/resources/model/diagram.genmodel | 2 + ...opertiesDescriptionRegistryConfigurer.java | 3 +- .../IPropertiesConfigurerService.java | 32 ++ .../IPropertiesWidgetCreationService.java | 48 +++ .../PropertiesConfigurerService.java | 104 +++++ .../PropertiesWidgetCreationService.java | 204 +++++++++ .../EdgeStylePropertiesConfigurer.java | 339 +++++++++++++++ .../NodeStylePropertiesConfigurer.java | 386 ++++++------------ .../view/emf/diagram/StylesFactory.java | 10 +- 31 files changed, 1439 insertions(+), 275 deletions(-) create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesConfigurerService.java create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesWidgetCreationService.java create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesConfigurerService.java create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index bc7e4c5875..78a4cc2b69 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -91,6 +91,8 @@ This will be fixed in the next version. - https://github.com/eclipse-sirius/sirius-web/issues/2254[#2254] [diagram] Add the possibility to specify precondition on diagram tools - https://github.com/eclipse-sirius/sirius-web/issues/2252[#2252] [diagram] It's now possible to contribute custom frontend-defined tools in a React Flow diagram palette. To illustrate this new feature, we contribute a new tool on the _Papaya Diagram_, it's available only on _OperationalActivity_ and it simply opens a dialog with the node label content. +- https://github.com/eclipse-sirius/sirius-web/issues/2044[#2044] [view] Add custom icons to edges and nodes label in view dsl. + === Improvements diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ConditionalEdgeStyleBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ConditionalEdgeStyleBuilder.java index 795bdb4831..36690832d0 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ConditionalEdgeStyleBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ConditionalEdgeStyleBuilder.java @@ -151,5 +151,15 @@ public ConditionalEdgeStyleBuilder showIcon(java.lang.Boolean value) { return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public ConditionalEdgeStyleBuilder labelIcon(java.lang.String value) { + this.getConditionalEdgeStyle().setLabelIcon(value); + return this; + } + } diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeStyleBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeStyleBuilder.java index d3932d1160..3de943e97e 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeStyleBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/EdgeStyleBuilder.java @@ -142,5 +142,15 @@ public EdgeStyleBuilder showIcon(java.lang.Boolean value) { return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public EdgeStyleBuilder labelIcon(java.lang.String value) { + this.getEdgeStyle().setLabelIcon(value); + return this; + } + } diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/IconLabelNodeStyleDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/IconLabelNodeStyleDescriptionBuilder.java index 50b17c353d..efac81cc03 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/IconLabelNodeStyleDescriptionBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/IconLabelNodeStyleDescriptionBuilder.java @@ -169,5 +169,15 @@ public IconLabelNodeStyleDescriptionBuilder showIcon(java.lang.Boolean value) { return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public IconLabelNodeStyleDescriptionBuilder labelIcon(java.lang.String value) { + this.getIconLabelNodeStyleDescription().setLabelIcon(value); + return this; + } + } diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ImageNodeStyleDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ImageNodeStyleDescriptionBuilder.java index b96529f6cf..b4b9278303 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ImageNodeStyleDescriptionBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/ImageNodeStyleDescriptionBuilder.java @@ -168,6 +168,16 @@ public ImageNodeStyleDescriptionBuilder showIcon(java.lang.Boolean value) { this.getImageNodeStyleDescription().setShowIcon(value); return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public ImageNodeStyleDescriptionBuilder labelIcon(java.lang.String value) { + this.getImageNodeStyleDescription().setLabelIcon(value); + return this; + } + /** * Setter for Shape. * diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeStyleDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeStyleDescriptionBuilder.java index 99b73b101d..fd744be908 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeStyleDescriptionBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/NodeStyleDescriptionBuilder.java @@ -153,5 +153,15 @@ public NodeStyleDescriptionBuilder showIcon(java.lang.Boolean value) { return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public NodeStyleDescriptionBuilder labelIcon(java.lang.String value) { + this.getNodeStyleDescription().setLabelIcon(value); + return this; + } + } diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/RectangularNodeStyleDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/RectangularNodeStyleDescriptionBuilder.java index 48724af902..88e412a8a0 100644 --- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/RectangularNodeStyleDescriptionBuilder.java +++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/RectangularNodeStyleDescriptionBuilder.java @@ -168,6 +168,16 @@ public RectangularNodeStyleDescriptionBuilder showIcon(java.lang.Boolean value) this.getRectangularNodeStyleDescription().setShowIcon(value); return this; } + /** + * Setter for LabelIcon. + * + * @generated + */ + public RectangularNodeStyleDescriptionBuilder labelIcon(java.lang.String value) { + this.getRectangularNodeStyleDescription().setLabelIcon(value); + return this; + } + /** * Setter for WithHeader. * diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ConditionalEdgeStyleItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ConditionalEdgeStyleItemProvider.java index 87cd31e655..775014f519 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ConditionalEdgeStyleItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ConditionalEdgeStyleItemProvider.java @@ -64,6 +64,7 @@ public List getPropertyDescriptors(Object object) { this.addTargetArrowStylePropertyDescriptor(object); this.addEdgeWidthPropertyDescriptor(object); this.addShowIconPropertyDescriptor(object); + this.addLabelIconPropertyDescriptor(object); } return this.itemPropertyDescriptors; } @@ -189,6 +190,17 @@ protected void addShowIconPropertyDescriptor(Object object) { DiagramPackage.Literals.EDGE_STYLE__SHOW_ICON, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Label Icon feature. + * + * @generated + */ + protected void addLabelIconPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_EdgeStyle_labelIcon_feature"), this.getString("_UI_PropertyDescriptor_description", "_UI_EdgeStyle_labelIcon_feature", "_UI_EdgeStyle_type"), + DiagramPackage.Literals.EDGE_STYLE__LABEL_ICON, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This returns ConditionalEdgeStyle.gif. * @@ -243,6 +255,7 @@ public void notifyChanged(Notification notification) { case DiagramPackage.CONDITIONAL_EDGE_STYLE__TARGET_ARROW_STYLE: case DiagramPackage.CONDITIONAL_EDGE_STYLE__EDGE_WIDTH: case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; } diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/EdgeStyleItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/EdgeStyleItemProvider.java index 824d278f82..8e6b2f7f27 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/EdgeStyleItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/EdgeStyleItemProvider.java @@ -61,6 +61,7 @@ public List getPropertyDescriptors(Object object) { this.addTargetArrowStylePropertyDescriptor(object); this.addEdgeWidthPropertyDescriptor(object); this.addShowIconPropertyDescriptor(object); + this.addLabelIconPropertyDescriptor(object); } return this.itemPropertyDescriptors; } @@ -175,6 +176,17 @@ protected void addShowIconPropertyDescriptor(Object object) { DiagramPackage.Literals.EDGE_STYLE__SHOW_ICON, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Label Icon feature. + * + * @generated + */ + protected void addLabelIconPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_EdgeStyle_labelIcon_feature"), this.getString("_UI_PropertyDescriptor_description", "_UI_EdgeStyle_labelIcon_feature", "_UI_EdgeStyle_type"), + DiagramPackage.Literals.EDGE_STYLE__LABEL_ICON, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This returns EdgeStyle.gif. * @@ -228,6 +240,7 @@ public void notifyChanged(Notification notification) { case DiagramPackage.EDGE_STYLE__TARGET_ARROW_STYLE: case DiagramPackage.EDGE_STYLE__EDGE_WIDTH: case DiagramPackage.EDGE_STYLE__SHOW_ICON: + case DiagramPackage.EDGE_STYLE__LABEL_ICON: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; } diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/IconLabelNodeStyleDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/IconLabelNodeStyleDescriptionItemProvider.java index 78dca5b5d7..1a6adcd53c 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/IconLabelNodeStyleDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/IconLabelNodeStyleDescriptionItemProvider.java @@ -65,6 +65,7 @@ public List getPropertyDescriptors(Object object) { this.addWidthComputationExpressionPropertyDescriptor(object); this.addHeightComputationExpressionPropertyDescriptor(object); this.addShowIconPropertyDescriptor(object); + this.addLabelIconPropertyDescriptor(object); } return this.itemPropertyDescriptors; } @@ -218,6 +219,18 @@ protected void addShowIconPropertyDescriptor(Object object) { DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__SHOW_ICON, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Label Icon feature. + * + * @generated + */ + protected void addLabelIconPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_NodeStyleDescription_labelIcon_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_NodeStyleDescription_labelIcon_feature", "_UI_NodeStyleDescription_type"), + DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_ICON, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This returns IconLabelNodeStyleDescription.gif. * @@ -274,6 +287,7 @@ public void notifyChanged(Notification notification) { case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__WIDTH_COMPUTATION_EXPRESSION: case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION: case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON: + case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; } diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ImageNodeStyleDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ImageNodeStyleDescriptionItemProvider.java index 8e519e037f..4949f48d80 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ImageNodeStyleDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/ImageNodeStyleDescriptionItemProvider.java @@ -64,6 +64,7 @@ public List getPropertyDescriptors(Object object) { this.addWidthComputationExpressionPropertyDescriptor(object); this.addHeightComputationExpressionPropertyDescriptor(object); this.addShowIconPropertyDescriptor(object); + this.addLabelIconPropertyDescriptor(object); this.addShapePropertyDescriptor(object); } return this.itemPropertyDescriptors; @@ -218,6 +219,18 @@ protected void addShowIconPropertyDescriptor(Object object) { DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__SHOW_ICON, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Label Icon feature. + * + * @generated + */ + protected void addLabelIconPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_NodeStyleDescription_labelIcon_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_NodeStyleDescription_labelIcon_feature", "_UI_NodeStyleDescription_type"), + DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_ICON, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This adds a property descriptor for the Shape feature. * @@ -286,6 +299,7 @@ public void notifyChanged(Notification notification) { case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__WIDTH_COMPUTATION_EXPRESSION: case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION: case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON: + case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON: case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/RectangularNodeStyleDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/RectangularNodeStyleDescriptionItemProvider.java index 796e2d2bf1..25309bcf02 100644 --- a/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/RectangularNodeStyleDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/java/org/eclipse/sirius/components/view/diagram/provider/RectangularNodeStyleDescriptionItemProvider.java @@ -65,6 +65,7 @@ public List getPropertyDescriptors(Object object) { this.addWidthComputationExpressionPropertyDescriptor(object); this.addHeightComputationExpressionPropertyDescriptor(object); this.addShowIconPropertyDescriptor(object); + this.addLabelIconPropertyDescriptor(object); this.addWithHeaderPropertyDescriptor(object); } return this.itemPropertyDescriptors; @@ -219,6 +220,18 @@ protected void addShowIconPropertyDescriptor(Object object) { DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__SHOW_ICON, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Label Icon feature. + * + * @generated + */ + protected void addLabelIconPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_NodeStyleDescription_labelIcon_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_NodeStyleDescription_labelIcon_feature", "_UI_NodeStyleDescription_type"), + DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_ICON, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This adds a property descriptor for the With Header feature. * @@ -287,6 +300,7 @@ public void notifyChanged(Notification notification) { case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WIDTH_COMPUTATION_EXPRESSION: case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION: case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON: + case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON: case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; 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 72919629ec..44eec3c79b 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 @@ -880,6 +880,14 @@ public interface DiagramPackage extends EPackage { */ int NODE_STYLE_DESCRIPTION__SHOW_ICON = STYLE_FEATURE_COUNT + 12; + /** + * The feature id for the 'Label Icon' attribute. + * + * @generated + * @ordered + */ + int NODE_STYLE_DESCRIPTION__LABEL_ICON = STYLE_FEATURE_COUNT + 13; + /** * The number of structural features of the 'Node Style Description' class. @@ -887,7 +895,7 @@ public interface DiagramPackage extends EPackage { * @generated * @ordered */ - int NODE_STYLE_DESCRIPTION_FEATURE_COUNT = STYLE_FEATURE_COUNT + 13; + int NODE_STYLE_DESCRIPTION_FEATURE_COUNT = STYLE_FEATURE_COUNT + 14; /** * The number of operations of the 'Node Style Description' class. + * + * @generated + * @ordered + */ + int RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON = NODE_STYLE_DESCRIPTION__LABEL_ICON; + /** * The feature id for the 'With Header' attribute. * @@ -1220,6 +1236,14 @@ public interface DiagramPackage extends EPackage { */ int IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON = NODE_STYLE_DESCRIPTION__SHOW_ICON; + /** + * The feature id for the 'Label Icon' attribute. + * + * @generated + * @ordered + */ + int IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON = NODE_STYLE_DESCRIPTION__LABEL_ICON; + /** * The feature id for the 'Shape' attribute. * @@ -1372,6 +1396,14 @@ public interface DiagramPackage extends EPackage { */ int ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON = NODE_STYLE_DESCRIPTION__SHOW_ICON; + /** + * The feature id for the 'Label Icon' attribute. + * + * @generated + * @ordered + */ + int ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON = NODE_STYLE_DESCRIPTION__LABEL_ICON; + /** * The number of structural features of the 'Icon Label Node Style Description' class. @@ -1490,6 +1522,14 @@ public interface DiagramPackage extends EPackage { */ int EDGE_STYLE__SHOW_ICON = STYLE_FEATURE_COUNT + 9; + /** + * The feature id for the 'Label Icon' attribute. + * + * @generated + * @ordered + */ + int EDGE_STYLE__LABEL_ICON = STYLE_FEATURE_COUNT + 10; + /** * The number of structural features of the 'Edge Style' class. @@ -1497,7 +1537,7 @@ public interface DiagramPackage extends EPackage { * @generated * @ordered */ - int EDGE_STYLE_FEATURE_COUNT = STYLE_FEATURE_COUNT + 10; + int EDGE_STYLE_FEATURE_COUNT = STYLE_FEATURE_COUNT + 11; /** * The number of operations of the 'Edge Style' class. @@ -1615,6 +1655,14 @@ public interface DiagramPackage extends EPackage { */ int CONDITIONAL_EDGE_STYLE__SHOW_ICON = ViewPackage.CONDITIONAL_FEATURE_COUNT + 10; + /** + * The feature id for the 'Label Icon' attribute. + * + * @generated + * @ordered + */ + int CONDITIONAL_EDGE_STYLE__LABEL_ICON = ViewPackage.CONDITIONAL_FEATURE_COUNT + 11; + /** * The number of structural features of the 'Conditional Edge Style' class. @@ -1622,7 +1670,7 @@ public interface DiagramPackage extends EPackage { * @generated * @ordered */ - int CONDITIONAL_EDGE_STYLE_FEATURE_COUNT = ViewPackage.CONDITIONAL_FEATURE_COUNT + 11; + int CONDITIONAL_EDGE_STYLE_FEATURE_COUNT = ViewPackage.CONDITIONAL_FEATURE_COUNT + 12; /** * The number of operations of the 'Conditional Edge Style' class. + * + * @return the meta object for the attribute 'Label Icon'. + * @see org.eclipse.sirius.components.view.diagram.NodeStyleDescription#getLabelIcon() + * @see #getNodeStyleDescription() + * @generated + */ + EAttribute getNodeStyleDescription_LabelIcon(); + /** * Returns the meta object for class '{@link org.eclipse.sirius.components.view.diagram.ConditionalNodeStyle * Conditional Node Style}'. @@ -3468,6 +3528,18 @@ public interface DiagramPackage extends EPackage { */ EAttribute getEdgeStyle_ShowIcon(); + /** + * Returns the meta object for the attribute + * '{@link org.eclipse.sirius.components.view.diagram.EdgeStyle#getLabelIcon Label Icon}'. + * + * @return the meta object for the attribute 'Label Icon'. + * @see org.eclipse.sirius.components.view.diagram.EdgeStyle#getLabelIcon() + * @see #getEdgeStyle() + * @generated + */ + EAttribute getEdgeStyle_LabelIcon(); + /** * Returns the meta object for class '{@link org.eclipse.sirius.components.view.diagram.ConditionalEdgeStyle * Conditional Edge Style}'. @@ -4564,6 +4636,14 @@ interface Literals { */ EAttribute NODE_STYLE_DESCRIPTION__SHOW_ICON = eINSTANCE.getNodeStyleDescription_ShowIcon(); + /** + * The meta object literal for the 'Label Icon' attribute feature. + * + * @generated + */ + EAttribute NODE_STYLE_DESCRIPTION__LABEL_ICON = eINSTANCE.getNodeStyleDescription_LabelIcon(); + /** * The meta object literal for the * '{@link org.eclipse.sirius.components.view.diagram.impl.ConditionalNodeStyleImpl Conditional Node @@ -4682,6 +4762,14 @@ interface Literals { */ EAttribute EDGE_STYLE__SHOW_ICON = eINSTANCE.getEdgeStyle_ShowIcon(); + /** + * The meta object literal for the 'Label Icon' attribute feature. + * + * @generated + */ + EAttribute EDGE_STYLE__LABEL_ICON = eINSTANCE.getEdgeStyle_LabelIcon(); + /** * The meta object literal for the * '{@link org.eclipse.sirius.components.view.diagram.impl.ConditionalEdgeStyleImpl Conditional Edge diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/EdgeStyle.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/EdgeStyle.java index 5904b9c0c8..e92f76f0c4 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/EdgeStyle.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/EdgeStyle.java @@ -26,6 +26,7 @@ *
  • {@link org.eclipse.sirius.components.view.diagram.EdgeStyle#getTargetArrowStyle Target Arrow Style}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.EdgeStyle#getEdgeWidth Edge Width}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.EdgeStyle#isShowIcon Show Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.EdgeStyle#getLabelIcon Label Icon}
  • * * * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getEdgeStyle() @@ -157,4 +158,26 @@ public interface EdgeStyle extends Style, LabelStyle { */ void setShowIcon(boolean value); + /** + * Returns the value of the 'Label Icon' attribute. + * + * @return the value of the 'Label Icon' attribute. + * @see #setLabelIcon(String) + * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getEdgeStyle_LabelIcon() + * @model + * @generated + */ + String getLabelIcon(); + + /** + * Sets the value of the '{@link org.eclipse.sirius.components.view.diagram.EdgeStyle#getLabelIcon Label + * Icon}' attribute. + * + * @param value + * the new value of the 'Label Icon' attribute. + * @see #getLabelIcon() + * @generated + */ + void setLabelIcon(String value); + } // EdgeStyle diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/NodeStyleDescription.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/NodeStyleDescription.java index 1e89969249..fb547c8e58 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/NodeStyleDescription.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/NodeStyleDescription.java @@ -29,6 +29,7 @@ *
  • {@link org.eclipse.sirius.components.view.diagram.NodeStyleDescription#getHeightComputationExpression Height * Computation Expression}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.NodeStyleDescription#isShowIcon Show Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.NodeStyleDescription#getLabelIcon Label Icon}
  • * * * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getNodeStyleDescription() @@ -128,4 +129,26 @@ public interface NodeStyleDescription extends Style, LabelStyle, BorderStyle { */ void setShowIcon(boolean value); + /** + * Returns the value of the 'Label Icon' attribute. + * + * @return the value of the 'Label Icon' attribute. + * @see #setLabelIcon(String) + * @see org.eclipse.sirius.components.view.diagram.DiagramPackage#getNodeStyleDescription_LabelIcon() + * @model + * @generated + */ + String getLabelIcon(); + + /** + * Sets the value of the '{@link org.eclipse.sirius.components.view.diagram.NodeStyleDescription#getLabelIcon + * Label Icon}' attribute. + * + * @param value + * the new value of the 'Label Icon' attribute. + * @see #getLabelIcon() + * @generated + */ + void setLabelIcon(String value); + } // NodeStyleDescription diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ConditionalEdgeStyleImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ConditionalEdgeStyleImpl.java index 61c92cd135..0c443c728f 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ConditionalEdgeStyleImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ConditionalEdgeStyleImpl.java @@ -53,6 +53,8 @@ * Width
    } *
  • {@link org.eclipse.sirius.components.view.diagram.impl.ConditionalEdgeStyleImpl#isShowIcon Show * Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.impl.ConditionalEdgeStyleImpl#getLabelIcon Label + * Icon}
  • * * * @generated @@ -268,6 +270,26 @@ public class ConditionalEdgeStyleImpl extends ConditionalImpl implements Conditi */ protected boolean showIcon = SHOW_ICON_EDEFAULT; + /** + * The default value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected static final String LABEL_ICON_EDEFAULT = null; + + /** + * The cached value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected String labelIcon = LABEL_ICON_EDEFAULT; + /** * * @@ -557,6 +579,29 @@ public void setShowIcon(boolean newShowIcon) { this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON, oldShowIcon, this.showIcon)); } + /** + * + * + * @generated + */ + @Override + public String getLabelIcon() { + return this.labelIcon; + } + + /** + * + * + * @generated + */ + @Override + public void setLabelIcon(String newLabelIcon) { + String oldLabelIcon = this.labelIcon; + this.labelIcon = newLabelIcon; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON, oldLabelIcon, this.labelIcon)); + } + /** * * @@ -589,6 +634,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getEdgeWidth(); case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: return this.isShowIcon(); + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: + return this.getLabelIcon(); } return super.eGet(featureID, resolve, coreType); } @@ -634,6 +681,9 @@ public void eSet(int featureID, Object newValue) { case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: this.setShowIcon((Boolean) newValue); return; + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: + this.setLabelIcon((String) newValue); + return; } super.eSet(featureID, newValue); } @@ -679,6 +729,9 @@ public void eUnset(int featureID) { case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: this.setShowIcon(SHOW_ICON_EDEFAULT); return; + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: + this.setLabelIcon(LABEL_ICON_EDEFAULT); + return; } super.eUnset(featureID); } @@ -713,6 +766,8 @@ public boolean eIsSet(int featureID) { return this.edgeWidth != EDGE_WIDTH_EDEFAULT; case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: return this.showIcon != SHOW_ICON_EDEFAULT; + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: + return LABEL_ICON_EDEFAULT == null ? this.labelIcon != null : !LABEL_ICON_EDEFAULT.equals(this.labelIcon); } return super.eIsSet(featureID); } @@ -760,6 +815,8 @@ public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) { return DiagramPackage.EDGE_STYLE__EDGE_WIDTH; case DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON: return DiagramPackage.EDGE_STYLE__SHOW_ICON; + case DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON: + return DiagramPackage.EDGE_STYLE__LABEL_ICON; default: return -1; } @@ -810,6 +867,8 @@ public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) { return DiagramPackage.CONDITIONAL_EDGE_STYLE__EDGE_WIDTH; case DiagramPackage.EDGE_STYLE__SHOW_ICON: return DiagramPackage.CONDITIONAL_EDGE_STYLE__SHOW_ICON; + case DiagramPackage.EDGE_STYLE__LABEL_ICON: + return DiagramPackage.CONDITIONAL_EDGE_STYLE__LABEL_ICON; default: return -1; } @@ -848,6 +907,8 @@ public String toString() { result.append(this.edgeWidth); result.append(", showIcon: "); result.append(this.showIcon); + result.append(", labelIcon: "); + result.append(this.labelIcon); result.append(')'); return result.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 c550101983..d195b479f4 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 @@ -902,6 +902,16 @@ public EAttribute getNodeStyleDescription_ShowIcon() { return (EAttribute) this.nodeStyleDescriptionEClass.getEStructuralFeatures().get(3); } + /** + * + * + * @generated + */ + @Override + public EAttribute getNodeStyleDescription_LabelIcon() { + return (EAttribute) this.nodeStyleDescriptionEClass.getEStructuralFeatures().get(4); + } + /** * * @@ -1032,6 +1042,16 @@ public EAttribute getEdgeStyle_ShowIcon() { return (EAttribute) this.edgeStyleEClass.getEStructuralFeatures().get(4); } + /** + * + * + * @generated + */ + @Override + public EAttribute getEdgeStyle_LabelIcon() { + return (EAttribute) this.edgeStyleEClass.getEStructuralFeatures().get(5); + } + /** * * @@ -1709,6 +1729,7 @@ public void createPackageContents() { this.createEAttribute(this.nodeStyleDescriptionEClass, NODE_STYLE_DESCRIPTION__WIDTH_COMPUTATION_EXPRESSION); this.createEAttribute(this.nodeStyleDescriptionEClass, NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION); this.createEAttribute(this.nodeStyleDescriptionEClass, NODE_STYLE_DESCRIPTION__SHOW_ICON); + this.createEAttribute(this.nodeStyleDescriptionEClass, NODE_STYLE_DESCRIPTION__LABEL_ICON); this.conditionalNodeStyleEClass = this.createEClass(CONDITIONAL_NODE_STYLE); this.createEReference(this.conditionalNodeStyleEClass, CONDITIONAL_NODE_STYLE__STYLE); @@ -1727,6 +1748,7 @@ public void createPackageContents() { this.createEAttribute(this.edgeStyleEClass, EDGE_STYLE__TARGET_ARROW_STYLE); this.createEAttribute(this.edgeStyleEClass, EDGE_STYLE__EDGE_WIDTH); this.createEAttribute(this.edgeStyleEClass, EDGE_STYLE__SHOW_ICON); + this.createEAttribute(this.edgeStyleEClass, EDGE_STYLE__LABEL_ICON); this.conditionalEdgeStyleEClass = this.createEClass(CONDITIONAL_EDGE_STYLE); @@ -1970,6 +1992,8 @@ public void initializePackageContents() { !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEAttribute(this.getNodeStyleDescription_ShowIcon(), this.ecorePackage.getEBoolean(), "showIcon", null, 0, 1, NodeStyleDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + this.initEAttribute(this.getNodeStyleDescription_LabelIcon(), this.ecorePackage.getEString(), "labelIcon", null, 0, 1, NodeStyleDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, + !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEClass(this.conditionalNodeStyleEClass, ConditionalNodeStyle.class, "ConditionalNodeStyle", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); this.initEReference(this.getConditionalNodeStyle_Style(), this.getNodeStyleDescription(), null, "style", null, 0, 1, ConditionalNodeStyle.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, @@ -1996,6 +2020,8 @@ public void initializePackageContents() { IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEAttribute(this.getEdgeStyle_ShowIcon(), this.ecorePackage.getEBoolean(), "showIcon", "false", 0, 1, EdgeStyle.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + this.initEAttribute(this.getEdgeStyle_LabelIcon(), this.ecorePackage.getEString(), "labelIcon", null, 0, 1, EdgeStyle.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEClass(this.conditionalEdgeStyleEClass, ConditionalEdgeStyle.class, "ConditionalEdgeStyle", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/EdgeStyleImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/EdgeStyleImpl.java index 51bc7411d8..1511227c01 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/EdgeStyleImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/EdgeStyleImpl.java @@ -41,6 +41,7 @@ * Style
    } *
  • {@link org.eclipse.sirius.components.view.diagram.impl.EdgeStyleImpl#getEdgeWidth Edge Width}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.impl.EdgeStyleImpl#isShowIcon Show Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.impl.EdgeStyleImpl#getLabelIcon Label Icon}
  • * * * @generated @@ -246,6 +247,26 @@ public class EdgeStyleImpl extends StyleImpl implements EdgeStyle { */ protected boolean showIcon = SHOW_ICON_EDEFAULT; + /** + * The default value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected static final String LABEL_ICON_EDEFAULT = null; + + /** + * The cached value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected String labelIcon = LABEL_ICON_EDEFAULT; + /** * * @@ -495,6 +516,29 @@ public void setShowIcon(boolean newShowIcon) { this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.EDGE_STYLE__SHOW_ICON, oldShowIcon, this.showIcon)); } + /** + * + * + * @generated + */ + @Override + public String getLabelIcon() { + return this.labelIcon; + } + + /** + * + * + * @generated + */ + @Override + public void setLabelIcon(String newLabelIcon) { + String oldLabelIcon = this.labelIcon; + this.labelIcon = newLabelIcon; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.EDGE_STYLE__LABEL_ICON, oldLabelIcon, this.labelIcon)); + } + /** * * @@ -523,6 +567,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getEdgeWidth(); case DiagramPackage.EDGE_STYLE__SHOW_ICON: return this.isShowIcon(); + case DiagramPackage.EDGE_STYLE__LABEL_ICON: + return this.getLabelIcon(); } return super.eGet(featureID, resolve, coreType); } @@ -565,6 +611,9 @@ public void eSet(int featureID, Object newValue) { case DiagramPackage.EDGE_STYLE__SHOW_ICON: this.setShowIcon((Boolean) newValue); return; + case DiagramPackage.EDGE_STYLE__LABEL_ICON: + this.setLabelIcon((String) newValue); + return; } super.eSet(featureID, newValue); } @@ -607,6 +656,9 @@ public void eUnset(int featureID) { case DiagramPackage.EDGE_STYLE__SHOW_ICON: this.setShowIcon(SHOW_ICON_EDEFAULT); return; + case DiagramPackage.EDGE_STYLE__LABEL_ICON: + this.setLabelIcon(LABEL_ICON_EDEFAULT); + return; } super.eUnset(featureID); } @@ -639,6 +691,8 @@ public boolean eIsSet(int featureID) { return this.edgeWidth != EDGE_WIDTH_EDEFAULT; case DiagramPackage.EDGE_STYLE__SHOW_ICON: return this.showIcon != SHOW_ICON_EDEFAULT; + case DiagramPackage.EDGE_STYLE__LABEL_ICON: + return LABEL_ICON_EDEFAULT == null ? this.labelIcon != null : !LABEL_ICON_EDEFAULT.equals(this.labelIcon); } return super.eIsSet(featureID); } @@ -726,6 +780,8 @@ public String toString() { result.append(this.edgeWidth); result.append(", showIcon: "); result.append(this.showIcon); + result.append(", labelIcon: "); + result.append(this.labelIcon); result.append(')'); return result.toString(); } diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/IconLabelNodeStyleDescriptionImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/IconLabelNodeStyleDescriptionImpl.java index e1e64380bb..c067b3a9dc 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/IconLabelNodeStyleDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/IconLabelNodeStyleDescriptionImpl.java @@ -57,6 +57,8 @@ * Height Computation Expression} *
  • {@link org.eclipse.sirius.components.view.diagram.impl.IconLabelNodeStyleDescriptionImpl#isShowIcon Show * Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.impl.IconLabelNodeStyleDescriptionImpl#getLabelIcon Label + * Icon}
  • * * * @generated @@ -302,6 +304,26 @@ public class IconLabelNodeStyleDescriptionImpl extends StyleImpl implements Icon */ protected boolean showIcon = SHOW_ICON_EDEFAULT; + /** + * The default value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected static final String LABEL_ICON_EDEFAULT = null; + + /** + * The cached value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected String labelIcon = LABEL_ICON_EDEFAULT; + /** * * @@ -656,6 +678,29 @@ public void setShowIcon(boolean newShowIcon) { this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON, oldShowIcon, this.showIcon)); } + /** + * + * + * @generated + */ + @Override + public String getLabelIcon() { + return this.labelIcon; + } + + /** + * + * + * @generated + */ + @Override + public void setLabelIcon(String newLabelIcon) { + String oldLabelIcon = this.labelIcon; + this.labelIcon = newLabelIcon; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON, oldLabelIcon, this.labelIcon)); + } + /** * * @@ -694,6 +739,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getHeightComputationExpression(); case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.isShowIcon(); + case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return this.getLabelIcon(); } return super.eGet(featureID, resolve, coreType); } @@ -745,6 +792,9 @@ public void eSet(int featureID, Object newValue) { case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon((Boolean) newValue); return; + case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon((String) newValue); + return; } super.eSet(featureID, newValue); } @@ -796,6 +846,9 @@ public void eUnset(int featureID) { case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon(SHOW_ICON_EDEFAULT); return; + case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon(LABEL_ICON_EDEFAULT); + return; } super.eUnset(featureID); } @@ -834,6 +887,8 @@ public boolean eIsSet(int featureID) { return HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT == null ? this.heightComputationExpression != null : !HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT.equals(this.heightComputationExpression); case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.showIcon != SHOW_ICON_EDEFAULT; + case DiagramPackage.ICON_LABEL_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return LABEL_ICON_EDEFAULT == null ? this.labelIcon != null : !LABEL_ICON_EDEFAULT.equals(this.labelIcon); } return super.eIsSet(featureID); } @@ -951,6 +1006,8 @@ public String toString() { result.append(this.heightComputationExpression); result.append(", showIcon: "); result.append(this.showIcon); + result.append(", labelIcon: "); + result.append(this.labelIcon); result.append(')'); return result.toString(); } diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ImageNodeStyleDescriptionImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ImageNodeStyleDescriptionImpl.java index ea5a265cbc..1f458e96bd 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ImageNodeStyleDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/ImageNodeStyleDescriptionImpl.java @@ -56,6 +56,8 @@ * Height Computation Expression} *
  • {@link org.eclipse.sirius.components.view.diagram.impl.ImageNodeStyleDescriptionImpl#isShowIcon Show * Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.impl.ImageNodeStyleDescriptionImpl#getLabelIcon Label + * Icon}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.impl.ImageNodeStyleDescriptionImpl#getShape * Shape}
  • * @@ -303,6 +305,26 @@ public class ImageNodeStyleDescriptionImpl extends StyleImpl implements ImageNod */ protected boolean showIcon = SHOW_ICON_EDEFAULT; + /** + * The default value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected static final String LABEL_ICON_EDEFAULT = null; + + /** + * The cached value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected String labelIcon = LABEL_ICON_EDEFAULT; + /** * The default value of the '{@link #getShape() Shape}' attribute. @@ -677,6 +699,29 @@ public void setShowIcon(boolean newShowIcon) { this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON, oldShowIcon, this.showIcon)); } + /** + * + * + * @generated + */ + @Override + public String getLabelIcon() { + return this.labelIcon; + } + + /** + * + * + * @generated + */ + @Override + public void setLabelIcon(String newLabelIcon) { + String oldLabelIcon = this.labelIcon; + this.labelIcon = newLabelIcon; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON, oldLabelIcon, this.labelIcon)); + } + /** * * @@ -738,6 +783,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getHeightComputationExpression(); case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.isShowIcon(); + case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return this.getLabelIcon(); case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE: return this.getShape(); } @@ -791,6 +838,9 @@ public void eSet(int featureID, Object newValue) { case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon((Boolean) newValue); return; + case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon((String) newValue); + return; case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE: this.setShape((String) newValue); return; @@ -845,6 +895,9 @@ public void eUnset(int featureID) { case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon(SHOW_ICON_EDEFAULT); return; + case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon(LABEL_ICON_EDEFAULT); + return; case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE: this.setShape(SHAPE_EDEFAULT); return; @@ -886,6 +939,8 @@ public boolean eIsSet(int featureID) { return HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT == null ? this.heightComputationExpression != null : !HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT.equals(this.heightComputationExpression); case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.showIcon != SHOW_ICON_EDEFAULT; + case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return LABEL_ICON_EDEFAULT == null ? this.labelIcon != null : !LABEL_ICON_EDEFAULT.equals(this.labelIcon); case DiagramPackage.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE: return SHAPE_EDEFAULT == null ? this.shape != null : !SHAPE_EDEFAULT.equals(this.shape); } @@ -1005,6 +1060,8 @@ public String toString() { result.append(this.heightComputationExpression); result.append(", showIcon: "); result.append(this.showIcon); + result.append(", labelIcon: "); + result.append(this.labelIcon); result.append(", shape: "); result.append(this.shape); result.append(')'); diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/RectangularNodeStyleDescriptionImpl.java b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/RectangularNodeStyleDescriptionImpl.java index 4e76f516c3..5771f467fa 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/RectangularNodeStyleDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-diagram/src/main/java/org/eclipse/sirius/components/view/diagram/impl/RectangularNodeStyleDescriptionImpl.java @@ -57,6 +57,8 @@ * Height Computation Expression} *
  • {@link org.eclipse.sirius.components.view.diagram.impl.RectangularNodeStyleDescriptionImpl#isShowIcon Show * Icon}
  • + *
  • {@link org.eclipse.sirius.components.view.diagram.impl.RectangularNodeStyleDescriptionImpl#getLabelIcon Label + * Icon}
  • *
  • {@link org.eclipse.sirius.components.view.diagram.impl.RectangularNodeStyleDescriptionImpl#isWithHeader With * Header}
  • * @@ -304,6 +306,26 @@ public class RectangularNodeStyleDescriptionImpl extends StyleImpl implements Re */ protected boolean showIcon = SHOW_ICON_EDEFAULT; + /** + * The default value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected static final String LABEL_ICON_EDEFAULT = null; + + /** + * The cached value of the '{@link #getLabelIcon() Label Icon}' attribute. + * + * @see #getLabelIcon() + * @generated + * @ordered + */ + protected String labelIcon = LABEL_ICON_EDEFAULT; + /** * The default value of the '{@link #isWithHeader() With Header}' attribute. @@ -678,6 +700,29 @@ public void setShowIcon(boolean newShowIcon) { this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON, oldShowIcon, this.showIcon)); } + /** + * + * + * @generated + */ + @Override + public String getLabelIcon() { + return this.labelIcon; + } + + /** + * + * + * @generated + */ + @Override + public void setLabelIcon(String newLabelIcon) { + String oldLabelIcon = this.labelIcon; + this.labelIcon = newLabelIcon; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON, oldLabelIcon, this.labelIcon)); + } + /** * * @@ -739,6 +784,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getHeightComputationExpression(); case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.isShowIcon(); + case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return this.getLabelIcon(); case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER: return this.isWithHeader(); } @@ -792,6 +839,9 @@ public void eSet(int featureID, Object newValue) { case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon((Boolean) newValue); return; + case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon((String) newValue); + return; case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER: this.setWithHeader((Boolean) newValue); return; @@ -846,6 +896,9 @@ public void eUnset(int featureID) { case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON: this.setShowIcon(SHOW_ICON_EDEFAULT); return; + case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON: + this.setLabelIcon(LABEL_ICON_EDEFAULT); + return; case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER: this.setWithHeader(WITH_HEADER_EDEFAULT); return; @@ -887,6 +940,8 @@ public boolean eIsSet(int featureID) { return HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT == null ? this.heightComputationExpression != null : !HEIGHT_COMPUTATION_EXPRESSION_EDEFAULT.equals(this.heightComputationExpression); case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__SHOW_ICON: return this.showIcon != SHOW_ICON_EDEFAULT; + case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__LABEL_ICON: + return LABEL_ICON_EDEFAULT == null ? this.labelIcon != null : !LABEL_ICON_EDEFAULT.equals(this.labelIcon); case DiagramPackage.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER: return this.withHeader != WITH_HEADER_EDEFAULT; } @@ -1006,6 +1061,8 @@ public String toString() { result.append(this.heightComputationExpression); result.append(", showIcon: "); result.append(this.showIcon); + result.append(", labelIcon: "); + result.append(this.labelIcon); result.append(", withHeader: "); result.append(this.withHeader); result.append(')'); 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 8d5235f508..48afa496b1 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 @@ -131,6 +131,7 @@ eType="ecore:EDataType ../../../../../sirius-components-view/src/main/resources/model/view.ecore#//InterpretedExpression" defaultValueLiteral="1"/> + + diff --git a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel index 572ac29f0f..48cee7173d 100644 --- a/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel +++ b/packages/view/backend/sirius-components-view-diagram/src/main/resources/model/diagram.genmodel @@ -104,6 +104,7 @@ + @@ -121,6 +122,7 @@ + diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java index 1f748dcbc7..d9c24ed9fb 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewPropertiesDescriptionRegistryConfigurer.java @@ -73,7 +73,8 @@ public class ViewPropertiesDescriptionRegistryConfigurer implements IPropertiesD private static final List TYPES_WITH_CUSTOM_PROPERTIES = List.of( DiagramPackage.Literals.IMAGE_NODE_STYLE_DESCRIPTION, DiagramPackage.Literals.ICON_LABEL_NODE_STYLE_DESCRIPTION, - DiagramPackage.Literals.RECTANGULAR_NODE_STYLE_DESCRIPTION + DiagramPackage.Literals.RECTANGULAR_NODE_STYLE_DESCRIPTION, + DiagramPackage.Literals.EDGE_STYLE ); private final IObjectService objectService; diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesConfigurerService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesConfigurerService.java new file mode 100644 index 0000000000..953c867eba --- /dev/null +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesConfigurerService.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * 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.view.emf.compatibility; + +import java.util.List; +import java.util.function.Function; + +import org.eclipse.sirius.components.representations.VariableManager; + +/** + * Configuration for the properties view for some of the View DSL elements. + * + * @author mcharfadi + */ +public interface IPropertiesConfigurerService { + + Function getSemanticTargetIdProvider(); + Function> getSemanticElementsProvider(); + Function> getDiagnosticsProvider(Object feature); + Function getKindProvider(); + Function getMessageProvider(); +} diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesWidgetCreationService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesWidgetCreationService.java new file mode 100644 index 0000000000..8c47f0d12d --- /dev/null +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/IPropertiesWidgetCreationService.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * 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.view.emf.compatibility; + +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Predicate; + +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; +import org.eclipse.sirius.components.forms.description.CheckboxDescription; +import org.eclipse.sirius.components.forms.description.GroupDescription; +import org.eclipse.sirius.components.forms.description.PageDescription; +import org.eclipse.sirius.components.forms.description.TextareaDescription; +import org.eclipse.sirius.components.forms.description.TextfieldDescription; +import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.components.widget.reference.ReferenceWidgetDescription; + +/** + * Customizes the properties view for some of the View DSL elements. + * + * @author mcharfadi + */ +public interface IPropertiesWidgetCreationService { + + PageDescription createSimplePageDescription(String id, GroupDescription groupDescription, Predicate canCreatePredicate); + + GroupDescription createSimpleGroupDescription(List controls); + + CheckboxDescription createCheckbox(String id, String title, Function reader, BiConsumer writer, Object feature); + + TextareaDescription createExpressionField(String id, String title, Function reader, BiConsumer writer, Object feature); + + TextfieldDescription createTextField(String id, String title, Function reader, BiConsumer writer, Object feature); + + ReferenceWidgetDescription createReferenceWidget(String id, String label, Object feature, Function> optionsProvider); + +} diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesConfigurerService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesConfigurerService.java new file mode 100644 index 0000000000..874f7b8c0d --- /dev/null +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesConfigurerService.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * 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.view.emf.compatibility; + +import java.util.List; +import java.util.Objects; +import java.util.function.Function; + +import org.eclipse.emf.common.util.Diagnostic; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.sirius.components.collaborative.validation.api.IValidationService; +import org.eclipse.sirius.components.core.api.IObjectService; +import org.eclipse.sirius.components.representations.VariableManager; +import org.springframework.stereotype.Service; + +/** + * Configuration for the properties view for some of the View DSL elements. + * + * @author mcharfadi + */ +@Service +public class PropertiesConfigurerService implements IPropertiesConfigurerService { + + private final IValidationService validationService; + + private final Function> semanticElementsProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).stream().toList(); + + private final Function semanticTargetIdProvider; + + private final IObjectService objectService; + + public PropertiesConfigurerService(IValidationService validationService, IObjectService objectService) { + this.objectService = Objects.requireNonNull(objectService); + this.validationService = Objects.requireNonNull(validationService); + this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(objectService::getId).orElse(null); + } + + @Override + public Function> getSemanticElementsProvider() { + return semanticElementsProvider; + } + + @Override + public Function getSemanticTargetIdProvider() { + return semanticTargetIdProvider; + } + @Override + public Function> getDiagnosticsProvider(Object feature) { + return variableManager -> { + var optionalSelf = variableManager.get(VariableManager.SELF, EObject.class); + + if (optionalSelf.isPresent()) { + EObject self = optionalSelf.get(); + return this.validationService.validate(self, feature); + } + + return List.of(); + }; + } + + @Override + public Function getKindProvider() { + return object -> { + String kind = "Unknown"; + if (object instanceof Diagnostic diagnostic) { + switch (diagnostic.getSeverity()) { + case org.eclipse.emf.common.util.Diagnostic.ERROR: + kind = "Error"; + break; + case org.eclipse.emf.common.util.Diagnostic.WARNING: + kind = "Warning"; + break; + case org.eclipse.emf.common.util.Diagnostic.INFO: + kind = "Info"; + break; + default: + kind = "Unknown"; + break; + } + } + return kind; + }; + } + + @Override + public Function getMessageProvider() { + return object -> { + if (object instanceof Diagnostic diagnostic) { + return diagnostic.getMessage(); + } + return ""; + }; + } +} diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java new file mode 100644 index 0000000000..0b82340769 --- /dev/null +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/compatibility/PropertiesWidgetCreationService.java @@ -0,0 +1,204 @@ +/******************************************************************************* + * 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.view.emf.compatibility; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Predicate; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.sirius.components.core.api.IObjectService; +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; +import org.eclipse.sirius.components.forms.description.CheckboxDescription; +import org.eclipse.sirius.components.forms.description.GroupDescription; +import org.eclipse.sirius.components.forms.description.PageDescription; +import org.eclipse.sirius.components.forms.description.TextareaDescription; +import org.eclipse.sirius.components.forms.description.TextfieldDescription; +import org.eclipse.sirius.components.representations.Failure; +import org.eclipse.sirius.components.representations.IStatus; +import org.eclipse.sirius.components.representations.Success; +import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.components.view.emf.AQLTextfieldCustomizer; +import org.eclipse.sirius.components.widget.reference.ReferenceWidgetComponent; +import org.eclipse.sirius.components.widget.reference.ReferenceWidgetDescription; +import org.springframework.stereotype.Service; + +/** + * Customizes the properties view for some of the View DSL elements. + * + * @author mcharfadi + */ +@Service +public class PropertiesWidgetCreationService implements IPropertiesWidgetCreationService { + + private static final String EMPTY = ""; + private final IPropertiesConfigurerService propertiesConfigurerService; + private final IObjectService objectService; + private final AQLTextfieldCustomizer aqlTextfieldCustomizer; + public PropertiesWidgetCreationService(IPropertiesConfigurerService propertiesConfigurerService, IObjectService objectService, AQLTextfieldCustomizer aqlTextfieldCustomizer) { + this.propertiesConfigurerService = Objects.requireNonNull(propertiesConfigurerService); + this.objectService = Objects.requireNonNull(objectService); + this.aqlTextfieldCustomizer = Objects.requireNonNull(aqlTextfieldCustomizer); + } + + @Override + public PageDescription createSimplePageDescription(String id, GroupDescription groupDescription, Predicate canCreatePredicate) { + return PageDescription.newPageDescription(id) + .idProvider(variableManager -> "page") + .labelProvider(variableManager -> "Properties") + .semanticElementsProvider(this.propertiesConfigurerService.getSemanticElementsProvider()) + .canCreatePredicate(canCreatePredicate) + .groupDescriptions(List.of(groupDescription)) + .build(); + } + + @Override + public GroupDescription createSimpleGroupDescription(List controls) { + return GroupDescription.newGroupDescription("group") + .idProvider(variableManager -> "group") + .labelProvider(variableManager -> "General") + .semanticElementsProvider(this.propertiesConfigurerService.getSemanticElementsProvider()) + .controlDescriptions(controls) + .build(); + } + + @Override + public CheckboxDescription createCheckbox(String id, String title, Function reader, BiConsumer writer, Object feature) { + Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(Boolean.FALSE); + BiFunction newValueHandler = (variableManager, newValue) -> { + var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); + if (optionalDiagramMapping.isPresent()) { + writer.accept(optionalDiagramMapping.get(), newValue); + return new Success(); + } else { + return new Failure(""); + } + }; + + return CheckboxDescription.newCheckboxDescription(id) + .idProvider(variableManager -> id) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> title) + .valueProvider(valueProvider) + .newValueHandler(newValueHandler) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(feature)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + public TextareaDescription createExpressionField(String id, String title, Function reader, BiConsumer writer, Object feature) { + Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(EMPTY); + BiFunction newValueHandler = (variableManager, newValue) -> { + var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); + if (optionalDiagramMapping.isPresent()) { + writer.accept(optionalDiagramMapping.get(), newValue); + return new Success(); + } else { + return new Failure(""); + } + }; + + return TextareaDescription.newTextareaDescription(id) + .idProvider(variableManager -> id) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> title) + .valueProvider(valueProvider) + .newValueHandler(newValueHandler) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(feature)) + .completionProposalsProvider(aqlTextfieldCustomizer.getCompletionProposalsProvider()) + .styleProvider(aqlTextfieldCustomizer.getStyleProvider()) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + public TextfieldDescription createTextField(String id, String title, Function reader, BiConsumer writer, Object feature) { + Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(EMPTY); + BiFunction newValueHandler = (variableManager, newValue) -> { + var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); + if (optionalDiagramMapping.isPresent()) { + writer.accept(optionalDiagramMapping.get(), newValue); + return new Success(); + } else { + return new Failure(""); + } + }; + + return TextfieldDescription.newTextfieldDescription(id) + .idProvider(variableManager -> id) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> title) + .valueProvider(valueProvider) + .newValueHandler(newValueHandler) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(feature)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + public ReferenceWidgetDescription createReferenceWidget(String id, String label, Object feature, Function> optionsProvider) { + return ReferenceWidgetDescription.newReferenceWidgetDescription(id) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .idProvider(variableManager -> id) + .labelProvider(variableManager -> label) + .optionsProvider(optionsProvider) + .iconURLProvider(variableManager -> "") + .itemsProvider(variableManager -> this.getReferenceValue(variableManager, feature)) + .itemIdProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getId).orElse("")) + .itemKindProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getKind).orElse("")) + .itemLabelProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getLabel).orElse("")) + .itemImageURLProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getImagePath).orElse("")) + .settingProvider(variableManager -> this.resolveSetting(variableManager, feature)) + .styleProvider(variableManager -> null) + .ownerIdProvider(variableManager -> variableManager.get(VariableManager.SELF, EObject.class).map(this.objectService::getId).orElse("")) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(feature)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private Optional getItem(VariableManager variableManager) { + return variableManager.get(ReferenceWidgetComponent.ITEM_VARIABLE, Object.class); + } + + private List getReferenceValue(VariableManager variableManager, Object feature) { + List value = List.of(); + EStructuralFeature.Setting setting = this.resolveSetting(variableManager, feature); + if (setting != null) { + var rawValue = setting.get(true); + if (rawValue != null) { + value = List.of(rawValue); + } else { + value = List.of(); + } + } + return value; + } + + private EStructuralFeature.Setting resolveSetting(VariableManager variableManager, Object feature) { + EObject referenceOwner = variableManager.get(VariableManager.SELF, EObject.class).orElse(null); + if (referenceOwner != null && feature instanceof EReference reference) { + return ((InternalEObject) referenceOwner).eSetting(reference); + } else { + return null; + } + } +} diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java new file mode 100644 index 0000000000..6aba85d78f --- /dev/null +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/EdgeStylePropertiesConfigurer.java @@ -0,0 +1,339 @@ +/******************************************************************************* + * 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.view.emf.diagram; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.Enumerator; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistry; +import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.components.forms.SelectStyle; +import org.eclipse.sirius.components.forms.components.SelectComponent; +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; +import org.eclipse.sirius.components.forms.description.GroupDescription; +import org.eclipse.sirius.components.forms.description.SelectDescription; +import org.eclipse.sirius.components.representations.Failure; +import org.eclipse.sirius.components.representations.IStatus; +import org.eclipse.sirius.components.representations.Success; +import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.components.view.ColorPalette; +import org.eclipse.sirius.components.view.LabelStyle; +import org.eclipse.sirius.components.view.UserColor; +import org.eclipse.sirius.components.view.View; +import org.eclipse.sirius.components.view.ViewPackage; +import org.eclipse.sirius.components.view.diagram.ArrowStyle; +import org.eclipse.sirius.components.view.diagram.DiagramPackage; +import org.eclipse.sirius.components.view.diagram.EdgeStyle; +import org.eclipse.sirius.components.view.diagram.LineStyle; +import org.eclipse.sirius.components.view.emf.CustomImageMetadata; +import org.eclipse.sirius.components.view.emf.ICustomImageMetadataSearchService; +import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesConfigurerService; +import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesWidgetCreationService; +import org.eclipse.sirius.components.view.emf.compatibility.PropertiesConfigurerService; +import org.springframework.stereotype.Component; + +/** + * Customizes the properties view for some of the View DSL elements. + * + * @author mcharfadi + */ +@Component +public class EdgeStylePropertiesConfigurer implements IPropertiesDescriptionRegistryConfigurer { + + private static final String EMPTY = ""; + private static final String INT_PATTERN = "\\d+"; + private final ICustomImageMetadataSearchService customImageSearchService; + private final IPropertiesConfigurerService propertiesConfigurerService; + private final IPropertiesWidgetCreationService propertiesWidgetCreationService; + + public EdgeStylePropertiesConfigurer(ICustomImageMetadataSearchService customImageSearchService, + PropertiesConfigurerService propertiesConfigurerService, IPropertiesWidgetCreationService propertiesWidgetCreationService) { + this.customImageSearchService = Objects.requireNonNull(customImageSearchService); + this.propertiesConfigurerService = Objects.requireNonNull(propertiesConfigurerService); + this.propertiesWidgetCreationService = Objects.requireNonNull(propertiesWidgetCreationService); + } + + @Override + public void addPropertiesDescriptions(IPropertiesDescriptionRegistry registry) { + + String formDescriptionId = UUID.nameUUIDFromBytes("edgestyle".getBytes()).toString(); + + List controls = new ArrayList<>(this.getGeneralControlDescription()); + + Predicate canCreatePagePredicate = variableManager -> variableManager.get(VariableManager.SELF, Object.class) + .filter(EdgeStyle.class::isInstance) + .isPresent(); + + GroupDescription groupDescription = this.propertiesWidgetCreationService.createSimpleGroupDescription(controls); + + registry.add(this.propertiesWidgetCreationService.createSimplePageDescription(formDescriptionId, groupDescription, canCreatePagePredicate)); + + } + + private List getGeneralControlDescription() { + List controls = new ArrayList<>(); + + var fontSize = this.propertiesWidgetCreationService.createTextField("nodestyle.fontSize", "Font Size", + style -> String.valueOf(((LabelStyle) style).getFontSize()), + (style, newColor) -> { + try { + ((LabelStyle) style).setFontSize(Integer.parseInt(newColor)); + } catch (NumberFormatException nfe) { + // Ignore. + } + }, + ViewPackage.Literals.LABEL_STYLE__FONT_SIZE); + controls.add(fontSize); + + var italic = this.propertiesWidgetCreationService.createCheckbox("nodestyle.italic", "Italic", + style -> ((LabelStyle) style).isItalic(), + (style, newItalic) -> ((LabelStyle) style).setItalic(newItalic), + ViewPackage.Literals.LABEL_STYLE__ITALIC); + controls.add(italic); + + var bold = this.propertiesWidgetCreationService.createCheckbox("nodestyle.bold", "Bold", + style -> ((LabelStyle) style).isBold(), + (style, newBold) -> ((LabelStyle) style).setBold(newBold), + ViewPackage.Literals.LABEL_STYLE__BOLD); + controls.add(bold); + + var underline = this.propertiesWidgetCreationService.createCheckbox("nodestyle.underline", "Underline", + style -> ((LabelStyle) style).isUnderline(), + (style, newUnderline) -> ((LabelStyle) style).setUnderline(newUnderline), + ViewPackage.Literals.LABEL_STYLE__UNDERLINE); + controls.add(underline); + + var strikeThrough = this.propertiesWidgetCreationService.createCheckbox("nodestyle.strikeThrough", "Strike Through", + style -> ((LabelStyle) style).isStrikeThrough(), + (style, newStrikeThrough) -> ((LabelStyle) style).setStrikeThrough(newStrikeThrough), + ViewPackage.Literals.LABEL_STYLE__STRIKE_THROUGH); + controls.add(strikeThrough); + + var showIcon = this.propertiesWidgetCreationService.createCheckbox("nodestyle.showIcon", "Show Icon", + style -> ((EdgeStyle) style).isShowIcon(), + (style, newValue) -> ((EdgeStyle) style).setShowIcon(newValue), + DiagramPackage.Literals.EDGE_STYLE__SHOW_ICON); + controls.add(showIcon); + + + controls.add(this.createIconSelectionField()); + controls.add(this.createLineStyleSelectionField()); + controls.add(this.createSourceArrowStyleSelectionField()); + controls.add(this.createTargetArrowStyleSelectionField()); + + Function> colorOptionsProvider = variableManager -> this.getColorsFromColorPalettesStream(variableManager).toList(); + var userColor = this.propertiesWidgetCreationService.createReferenceWidget("edgestyle.Color", "Color", DiagramPackage.Literals.STYLE__COLOR, colorOptionsProvider); + controls.add(userColor); + + return controls; + } + + private Stream getColorsFromColorPalettesStream(VariableManager variableManager) { + return variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class) + .filter(EditingContext.class::isInstance) + .map(EditingContext.class::cast) + .map(EditingContext::getDomain) + .map(EditingDomain::getResourceSet) + .map(ResourceSet::getResources) + .stream() + .flatMap(EList::stream) + .map(Resource::getContents) + .flatMap(EList::stream) + .filter(View.class::isInstance) + .map(View.class::cast) + .map(View::getColorPalettes) + .flatMap(EList::stream) + .map(ColorPalette::getColors) + .flatMap(EList::stream); + } + + private SelectDescription createSourceArrowStyleSelectionField() { + return SelectDescription.newSelectDescription("edgestyle.sourceArrowStyleSelector") + .idProvider(variableManager -> "edgestyle.sourceArrowStyleSelector") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> "Source Arrow Syle") + .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) + .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getSourceArrowStyle) + .map(ArrowStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionsProvider(variableManager -> ArrowStyle.VALUES) + .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) + .map(ArrowStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) + .map(Enumerator::getName) + .orElse(EMPTY)) + .optionIconURLProvider(variableManager -> "") + .newValueHandler(this.getSourceArrowValueHandler()) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.EDGE_STYLE__SOURCE_ARROW_STYLE)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private BiFunction getSourceArrowValueHandler() { + return (variableManager, newValue) -> { + var optionalEdgeStyle = variableManager.get(VariableManager.SELF, EdgeStyle.class); + if (optionalEdgeStyle.isPresent() && newValue != null && newValue.matches(INT_PATTERN)) { + int newArrowStyle = Integer.parseInt(newValue); + ArrowStyle arrowStyle = ArrowStyle.get(newArrowStyle); + if (arrowStyle != null) { + optionalEdgeStyle.get().setSourceArrowStyle(arrowStyle); + return new Success(); + } + } + return new Failure(""); + }; + } + + private SelectDescription createTargetArrowStyleSelectionField() { + return SelectDescription.newSelectDescription("edgestyle.targetArrowStyleSelector") + .idProvider(variableManager -> "edgestyle.targetArrowStyleSelector") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> "Target Arrow Syle") + .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) + .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getTargetArrowStyle) + .map(ArrowStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionsProvider(variableManager -> ArrowStyle.VALUES) + .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) + .map(ArrowStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, ArrowStyle.class) + .map(Enumerator::getName) + .orElse(EMPTY)) + .optionIconURLProvider(variableManager -> "") + .newValueHandler(this.getTargetArrowValueHandler()) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.EDGE_STYLE__TARGET_ARROW_STYLE)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private BiFunction getTargetArrowValueHandler() { + return (variableManager, newValue) -> { + var optionalEdgeStyle = variableManager.get(VariableManager.SELF, EdgeStyle.class); + if (optionalEdgeStyle.isPresent() && newValue != null && newValue.matches(INT_PATTERN)) { + int newArrowStyle = Integer.parseInt(newValue); + ArrowStyle arrowStyle = ArrowStyle.get(newArrowStyle); + if (arrowStyle != null) { + optionalEdgeStyle.get().setTargetArrowStyle(arrowStyle); + return new Success(); + } + } + return new Failure(""); + }; + } + + private SelectDescription createLineStyleSelectionField() { + return SelectDescription.newSelectDescription("edgestyle.lineStyleSelector") + .idProvider(variableManager -> "edgestyle.lineStyleSelector") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> "Line Syle") + .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) + .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getLineStyle) + .map(LineStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionsProvider(variableManager -> LineStyle.VALUES) + .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class) + .map(LineStyle::getValue) + .map(String::valueOf) + .orElse(EMPTY)) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, LineStyle.class) + .map(Enumerator::getName) + .orElse(EMPTY)) + .optionIconURLProvider(variableManager -> "") + .newValueHandler(this.getLineStyleValueHandler()) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.LINE_STYLE)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private BiFunction getLineStyleValueHandler() { + return (variableManager, newValue) -> { + var optionalEdgeStyle = variableManager.get(VariableManager.SELF, EdgeStyle.class); + if (optionalEdgeStyle.isPresent() && newValue != null && newValue.matches(INT_PATTERN)) { + int newLineStyle = Integer.parseInt(newValue); + LineStyle lineStyle = LineStyle.get(newLineStyle); + if (lineStyle != null) { + optionalEdgeStyle.get().setLineStyle(lineStyle); + return new Success(); + } + } + return new Failure(""); + }; + } + + private SelectDescription createIconSelectionField() { + return SelectDescription.newSelectDescription("edgestyle.iconLabelSelector") + .idProvider(variableManager -> "edgestyle.iconLabelSelector") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> "Custom Icon") + .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) + .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, EdgeStyle.class).map(EdgeStyle::getLabelIcon).orElse(EMPTY)) + .optionsProvider(variableManager -> variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class) + .map(IEditingContext::getId) + .map(this.customImageSearchService::getAvailableImages) + .orElse(List.of()) + ) + .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(customImageMetadataEntity -> String.format("/custom/%s", customImageMetadataEntity.getId().toString())) + .orElse(EMPTY)) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(CustomImageMetadata::getLabel) + .orElse(EMPTY)) + .optionIconURLProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(customImageMetadataEntity -> String.format("/custom/%s", customImageMetadataEntity.getId().toString())) + .orElse(EMPTY)) + .newValueHandler(this.getIconLabelValueHandler()) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_ICON)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private BiFunction getIconLabelValueHandler() { + return (variableManager, newValue) -> { + var optionalEdgeStyle = variableManager.get(VariableManager.SELF, EdgeStyle.class); + if (optionalEdgeStyle.isPresent()) { + String newIcon = newValue; + if (newValue != null && newValue.isBlank()) { + newIcon = null; + } + optionalEdgeStyle.get().setLabelIcon(newIcon); + return new Success(); + } + return new Failure(""); + }; + } + +} diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java index 3a7befdc06..d8c4333a4b 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/NodeStylePropertiesConfigurer.java @@ -18,38 +18,29 @@ import java.util.Objects; import java.util.Optional; import java.util.UUID; -import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Stream; -import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.sirius.components.collaborative.diagrams.api.IParametricSVGImageRegistry; import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistry; import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer; -import org.eclipse.sirius.components.collaborative.validation.api.IValidationService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.diagrams.NodeType; import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.components.forms.SelectStyle; import org.eclipse.sirius.components.forms.components.SelectComponent; import org.eclipse.sirius.components.forms.description.AbstractControlDescription; -import org.eclipse.sirius.components.forms.description.CheckboxDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; import org.eclipse.sirius.components.forms.description.ImageDescription; import org.eclipse.sirius.components.forms.description.PageDescription; import org.eclipse.sirius.components.forms.description.SelectDescription; -import org.eclipse.sirius.components.forms.description.TextareaDescription; -import org.eclipse.sirius.components.forms.description.TextfieldDescription; import org.eclipse.sirius.components.representations.Failure; import org.eclipse.sirius.components.representations.IStatus; import org.eclipse.sirius.components.representations.Success; @@ -66,11 +57,11 @@ import org.eclipse.sirius.components.view.diagram.LineStyle; import org.eclipse.sirius.components.view.diagram.NodeStyleDescription; import org.eclipse.sirius.components.view.diagram.RectangularNodeStyleDescription; -import org.eclipse.sirius.components.view.emf.AQLTextfieldCustomizer; import org.eclipse.sirius.components.view.emf.CustomImageMetadata; import org.eclipse.sirius.components.view.emf.ICustomImageMetadataSearchService; -import org.eclipse.sirius.components.widget.reference.ReferenceWidgetComponent; -import org.eclipse.sirius.components.widget.reference.ReferenceWidgetDescription; +import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesConfigurerService; +import org.eclipse.sirius.components.view.emf.compatibility.IPropertiesWidgetCreationService; +import org.eclipse.sirius.components.view.emf.compatibility.PropertiesConfigurerService; import org.springframework.stereotype.Component; /** @@ -82,29 +73,20 @@ public class NodeStylePropertiesConfigurer implements IPropertiesDescriptionRegistryConfigurer { private static final String EMPTY = ""; - - private final Function> semanticElementsProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).stream().toList(); - + private static final String CUSTOM = "/custom/%s"; private final List parametricSVGImageRegistries; - private final ICustomImageMetadataSearchService customImageSearchService; - - private final IValidationService validationService; - - private final AQLTextfieldCustomizer aqlTextfieldCustomizer; - + private final IPropertiesConfigurerService propertiesConfigurerService; + private final IPropertiesWidgetCreationService propertiesWidgetCreationService; private final IObjectService objectService; - private final Function semanticTargetIdProvider; - - public NodeStylePropertiesConfigurer(ICustomImageMetadataSearchService customImageSearchService, IValidationService validationService, - List parametricSVGImageRegistries, AQLTextfieldCustomizer aqlTextfieldCustomizer, IObjectService objectService) { - this.validationService = Objects.requireNonNull(validationService); + public NodeStylePropertiesConfigurer(ICustomImageMetadataSearchService customImageSearchService, + List parametricSVGImageRegistries, PropertiesConfigurerService propertiesConfigurerService, IPropertiesWidgetCreationService propertiesWidgetCreationService, IObjectService objectService) { this.customImageSearchService = Objects.requireNonNull(customImageSearchService); this.parametricSVGImageRegistries = parametricSVGImageRegistries; - this.aqlTextfieldCustomizer = Objects.requireNonNull(aqlTextfieldCustomizer); + this.propertiesConfigurerService = Objects.requireNonNull(propertiesConfigurerService); + this.propertiesWidgetCreationService = Objects.requireNonNull(propertiesWidgetCreationService); this.objectService = Objects.requireNonNull(objectService); - this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(objectService::getId).orElse(null); } @Override @@ -118,17 +100,17 @@ private PageDescription getImageNodeStyleProperties() { String id = UUID.nameUUIDFromBytes("nodestyle".getBytes()).toString(); List controls = new ArrayList<>(); - controls.add(this.createShapeSelectionField(DiagramPackage.Literals.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE)); + controls.add(this.createShapeSelectionField()); controls.add(this.createShapePreviewField()); controls.addAll(this.getGeneralControlDescription(NodeType.NODE_IMAGE)); - GroupDescription groupDescription = this.createSimpleGroupDescription(controls); + GroupDescription groupDescription = this.propertiesWidgetCreationService.createSimpleGroupDescription(controls); Predicate canCreatePagePredicate = variableManager -> variableManager.get(VariableManager.SELF, Object.class) .filter(ImageNodeStyleDescription.class::isInstance) .isPresent(); - return this.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); + return this.propertiesWidgetCreationService.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); } private PageDescription getIconLabelNodeStyleProperties() { @@ -136,13 +118,13 @@ private PageDescription getIconLabelNodeStyleProperties() { List controls = this.getGeneralControlDescription(NodeType.NODE_ICON_LABEL); - GroupDescription groupDescription = this.createSimpleGroupDescription(controls); + GroupDescription groupDescription = this.propertiesWidgetCreationService.createSimpleGroupDescription(controls); Predicate canCreatePagePredicate = variableManager -> variableManager.get(VariableManager.SELF, Object.class) .filter(IconLabelNodeStyleDescription.class::isInstance) .isPresent(); - return this.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); + return this.propertiesWidgetCreationService.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); } private PageDescription getRectangularNodeStyleProperties() { @@ -150,53 +132,57 @@ private PageDescription getRectangularNodeStyleProperties() { String id = UUID.nameUUIDFromBytes("rectangularnodestyle".getBytes()).toString(); List controls = new ArrayList<>(); - controls.add(this.createCheckbox("nodestyle.isWithHeader", "With Header", - style -> ((RectangularNodeStyleDescription) style).isWithHeader(), - (style, newWithHeaderValue) -> ((RectangularNodeStyleDescription) style).setWithHeader(newWithHeaderValue), + controls.add(this.propertiesWidgetCreationService.createCheckbox("nodestyle.isWithHeader", "With Header", + style -> ((RectangularNodeStyleDescription) style).isWithHeader(), + (style, newWithHeaderValue) -> ((RectangularNodeStyleDescription) style).setWithHeader(newWithHeaderValue), DiagramPackage.Literals.RECTANGULAR_NODE_STYLE_DESCRIPTION__WITH_HEADER)); + controls.addAll(this.getGeneralControlDescription(NodeType.NODE_RECTANGLE)); - GroupDescription groupDescription = this.createSimpleGroupDescription(controls); + GroupDescription groupDescription = this.propertiesWidgetCreationService.createSimpleGroupDescription(controls); Predicate canCreatePagePredicate = variableManager -> variableManager.get(VariableManager.SELF, Object.class) .filter(RectangularNodeStyleDescription.class::isInstance) .isPresent(); - return this.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); + return this.propertiesWidgetCreationService.createSimplePageDescription(id, groupDescription, canCreatePagePredicate); } private List getGeneralControlDescription(String nodeType) { List controls = new ArrayList<>(); - var widthExpression = this.createExpressionField("nodestyle.widthExpression", "Width Expression", + var widthExpression = this.propertiesWidgetCreationService.createExpressionField("nodestyle.widthExpression", "Width Expression", style -> ((NodeStyleDescription) style).getWidthComputationExpression(), (style, newWidthExpression) -> ((NodeStyleDescription) style).setWidthComputationExpression(newWidthExpression), DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__WIDTH_COMPUTATION_EXPRESSION); controls.add(widthExpression); - var heightExpression = this.createExpressionField("nodestyle.heightExpression", "Height Expression", - style -> ((NodeStyleDescription) style).getHeightComputationExpression(), - (style, newHeightExpression) -> ((NodeStyleDescription) style).setHeightComputationExpression(newHeightExpression), - DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION); + var heightExpression = this.propertiesWidgetCreationService.createExpressionField("nodestyle.heightExpression", "Height Expression", + style -> ((NodeStyleDescription) style).getHeightComputationExpression(), + (style, newHeightExpression) -> ((NodeStyleDescription) style).setHeightComputationExpression(newHeightExpression), + DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__HEIGHT_COMPUTATION_EXPRESSION); controls.add(heightExpression); - var showIcon = this.createCheckbox("nodestyle.showIcon", "Show Icon", - style -> ((NodeStyleDescription) style).isShowIcon(), - (style, newValue) -> ((NodeStyleDescription) style).setShowIcon(newValue), - DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__SHOW_ICON); + var showIcon = this.propertiesWidgetCreationService.createCheckbox("nodestyle.showIcon", "Show Icon", + style -> ((NodeStyleDescription) style).isShowIcon(), + (style, newValue) -> ((NodeStyleDescription) style).setShowIcon(newValue), + DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__SHOW_ICON); controls.add(showIcon); - var labelColor = this.createUserColorReferenceWidget("nodestyle.labelColor", "Label Color", DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_COLOR); + controls.add(this.createIconSelectionField()); + + Function> colorOptionsProvider = variableManager -> this.getColorsFromColorPalettesStream(variableManager).toList(); + var labelColor = this.propertiesWidgetCreationService.createReferenceWidget("nodestyle.labelColor", "Label Color", DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_COLOR, colorOptionsProvider); controls.add(labelColor); if (!Objects.equals(nodeType, NodeType.NODE_IMAGE)) { - var color = this.createUserColorReferenceWidget("nodestyle.color", "Color", DiagramPackage.Literals.STYLE__COLOR); + var color = this.propertiesWidgetCreationService.createReferenceWidget("nodestyle.color", "Color", DiagramPackage.Literals.STYLE__COLOR, colorOptionsProvider); controls.add(color); } - var borderColor = this.createUserColorReferenceWidget("nodestyle.borderColor", "Border Color", DiagramPackage.Literals.BORDER_STYLE__BORDER_COLOR); + var borderColor = this.propertiesWidgetCreationService.createReferenceWidget("nodestyle.borderColor", "Border Color", DiagramPackage.Literals.BORDER_STYLE__BORDER_COLOR, colorOptionsProvider); controls.add(borderColor); - var bordeRadius = this.createTextField("nodestyle.borderRadius", "Border Radius", + var borderRadius = this.propertiesWidgetCreationService.createTextField("nodestyle.borderRadius", "Border Radius", style -> String.valueOf(((NodeStyleDescription) style).getBorderRadius()), (style, newBorderRadius) -> { try { @@ -206,9 +192,9 @@ private List getGeneralControlDescription(String nod } }, DiagramPackage.Literals.BORDER_STYLE__BORDER_RADIUS); - controls.add(bordeRadius); + controls.add(borderRadius); - var borderSize = this.createTextField("nodestyle.borderSize", "Border Size", + var borderSize = this.propertiesWidgetCreationService.createTextField("nodestyle.borderSize", "Border Size", style -> String.valueOf(((NodeStyleDescription) style).getBorderSize()), (style, newBorderSize) -> { try { @@ -220,10 +206,10 @@ private List getGeneralControlDescription(String nod DiagramPackage.Literals.BORDER_STYLE__BORDER_SIZE); controls.add(borderSize); - var borderStyle = this.createBorderLineStyleSelectionField("nodestyle.borderstyle", DiagramPackage.Literals.BORDER_STYLE__BORDER_LINE_STYLE); + var borderStyle = this.createBorderLineStyleSelectionField(); controls.add(borderStyle); - var fontSize = this.createTextField("nodestyle.fontSize", "Font Size", + var fontSize = this.propertiesWidgetCreationService.createTextField("nodestyle.fontSize", "Font Size", style -> String.valueOf(((LabelStyle) style).getFontSize()), (style, newColor) -> { try { @@ -235,129 +221,37 @@ private List getGeneralControlDescription(String nod ViewPackage.Literals.LABEL_STYLE__FONT_SIZE); controls.add(fontSize); - var italic = this.createCheckbox("nodestyle.italic", "Italic", - style -> ((LabelStyle) style).isItalic(), - (style, newItalic) -> ((LabelStyle) style).setItalic(newItalic), - ViewPackage.Literals.LABEL_STYLE__ITALIC); + var italic = this.propertiesWidgetCreationService.createCheckbox("nodestyle.italic", "Italic", + style -> ((LabelStyle) style).isItalic(), + (style, newItalic) -> ((LabelStyle) style).setItalic(newItalic), + ViewPackage.Literals.LABEL_STYLE__ITALIC); controls.add(italic); - var bold = this.createCheckbox("nodestyle.bold", "Bold", - style -> ((LabelStyle) style).isBold(), - (style, newBold) -> ((LabelStyle) style).setBold(newBold), - ViewPackage.Literals.LABEL_STYLE__BOLD); + var bold = this.propertiesWidgetCreationService.createCheckbox("nodestyle.bold", "Bold", + style -> ((LabelStyle) style).isBold(), + (style, newBold) -> ((LabelStyle) style).setBold(newBold), + ViewPackage.Literals.LABEL_STYLE__BOLD); controls.add(bold); - var underline = this.createCheckbox("nodestyle.underline", "Underline", - style -> ((LabelStyle) style).isUnderline(), - (style, newUnderline) -> ((LabelStyle) style).setUnderline(newUnderline), - ViewPackage.Literals.LABEL_STYLE__UNDERLINE); + var underline = this.propertiesWidgetCreationService.createCheckbox("nodestyle.underline", "Underline", + style -> ((LabelStyle) style).isUnderline(), + (style, newUnderline) -> ((LabelStyle) style).setUnderline(newUnderline), + ViewPackage.Literals.LABEL_STYLE__UNDERLINE); controls.add(underline); - var strikeThrough = this.createCheckbox("nodestyle.strikeThrough", "Strike Through", - style -> ((LabelStyle) style).isStrikeThrough(), - (style, newStrikeThrough) -> ((LabelStyle) style).setStrikeThrough(newStrikeThrough), - ViewPackage.Literals.LABEL_STYLE__STRIKE_THROUGH); + var strikeThrough = this.propertiesWidgetCreationService.createCheckbox("nodestyle.strikeThrough", "Strike Through", + style -> ((LabelStyle) style).isStrikeThrough(), + (style, newStrikeThrough) -> ((LabelStyle) style).setStrikeThrough(newStrikeThrough), + ViewPackage.Literals.LABEL_STYLE__STRIKE_THROUGH); controls.add(strikeThrough); return controls; } - private PageDescription createSimplePageDescription(String id, GroupDescription groupDescription, Predicate canCreatePredicate) { - return PageDescription.newPageDescription(id) - .idProvider(variableManager -> "page") - .labelProvider(variableManager -> "Properties") - .semanticElementsProvider(this.semanticElementsProvider) - .canCreatePredicate(canCreatePredicate) - .groupDescriptions(List.of(groupDescription)) - .build(); - } - - private GroupDescription createSimpleGroupDescription(List controls) { - return GroupDescription.newGroupDescription("group") - .idProvider(variableManager -> "group") - .labelProvider(variableManager -> "General") - .semanticElementsProvider(this.semanticElementsProvider) - .controlDescriptions(controls) - .build(); - } - - private TextfieldDescription createTextField(String id, String title, Function reader, BiConsumer writer, Object feature) { - Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(EMPTY); - BiFunction newValueHandler = (variableManager, newValue) -> { - var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); - if (optionalDiagramMapping.isPresent()) { - writer.accept(optionalDiagramMapping.get(), newValue); - return new Success(); - } else { - return new Failure(""); - } - }; - - return TextfieldDescription.newTextfieldDescription(id) - .idProvider(variableManager -> id) - .targetObjectIdProvider(this.semanticTargetIdProvider) - .labelProvider(variableManager -> title) - .valueProvider(valueProvider) - .newValueHandler(newValueHandler) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) - .build(); - } - - private TextareaDescription createExpressionField(String id, String title, Function reader, BiConsumer writer, Object feature) { - Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(EMPTY); - BiFunction newValueHandler = (variableManager, newValue) -> { - var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); - if (optionalDiagramMapping.isPresent()) { - writer.accept(optionalDiagramMapping.get(), newValue); - return new Success(); - } else { - return new Failure(""); - } - }; - - return TextareaDescription.newTextareaDescription(id) - .idProvider(variableManager -> id) - .targetObjectIdProvider(this.semanticTargetIdProvider) - .labelProvider(variableManager -> title) - .valueProvider(valueProvider) - .newValueHandler(newValueHandler) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .completionProposalsProvider(this.aqlTextfieldCustomizer.getCompletionProposalsProvider()) - .styleProvider(this.aqlTextfieldCustomizer.getStyleProvider()) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) - .build(); - } - - private CheckboxDescription createCheckbox(String id, String title, Function reader, BiConsumer writer, Object feature) { - Function valueProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(reader).orElse(Boolean.FALSE); - BiFunction newValueHandler = (variableManager, newValue) -> { - var optionalDiagramMapping = variableManager.get(VariableManager.SELF, Object.class); - if (optionalDiagramMapping.isPresent()) { - writer.accept(optionalDiagramMapping.get(), newValue); - return new Success(); - } else { - return new Failure(""); - } - }; - return CheckboxDescription.newCheckboxDescription(id) - .targetObjectIdProvider(this.semanticTargetIdProvider) - .idProvider(variableManager -> id) - .labelProvider(variableManager -> title) - .valueProvider(valueProvider) - .newValueHandler(newValueHandler) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) - .build(); - } - - private SelectDescription createBorderLineStyleSelectionField(String id, Object feature) { - return SelectDescription.newSelectDescription(id) - .idProvider(variableManager -> id) - .targetObjectIdProvider(this.semanticTargetIdProvider) + private SelectDescription createBorderLineStyleSelectionField() { + return SelectDescription.newSelectDescription("nodestyle.borderstyle") + .idProvider(variableManager -> "nodestyle.borderstyle") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) .labelProvider(variableManager -> "Border Line Style") .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, BorderStyle.class).map(BorderStyle::getBorderLineStyle).map(LineStyle::toString).orElse(EMPTY)) .optionsProvider(variableManager -> LineStyle.VALUES.stream().toList()) @@ -376,59 +270,12 @@ private SelectDescription createBorderLineStyleSelectionField(String id, Object } return new Failure(""); }) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.BORDER_STYLE__BORDER_LINE_STYLE)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) .build(); } - private ReferenceWidgetDescription createUserColorReferenceWidget(String id, String label, Object feature) { - return ReferenceWidgetDescription.newReferenceWidgetDescription(id) - .targetObjectIdProvider(this.semanticTargetIdProvider) - .idProvider(variableManager -> id) - .labelProvider(variableManager -> label) - .optionsProvider(variableManager -> this.getColorsFromColorPalettesStream(variableManager).toList()) - .iconURLProvider(variableManager -> "") - .itemsProvider(variableManager -> this.getReferenceValue(variableManager, feature)) - .itemIdProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getId).orElse("")) - .itemKindProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getKind).orElse("")) - .itemLabelProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getLabel).orElse("")) - .itemImageURLProvider(variableManager -> this.getItem(variableManager).map(this.objectService::getImagePath).orElse("")) - .settingProvider(variableManager -> this.resolveSetting(variableManager, feature)) - .styleProvider(variableManager -> null) - .ownerIdProvider(variableManager -> variableManager.get(VariableManager.SELF, EObject.class).map(this.objectService::getId).orElse("")) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) - .build(); - } - - private Optional getItem(VariableManager variableManager) { - return variableManager.get(ReferenceWidgetComponent.ITEM_VARIABLE, Object.class); - } - - private List getReferenceValue(VariableManager variableManager, Object feature) { - List value = List.of(); - EStructuralFeature.Setting setting = this.resolveSetting(variableManager, feature); - if (setting != null) { - var rawValue = setting.get(true); - if (rawValue != null) { - value = List.of(rawValue); - } else { - value = List.of(); - } - } - return value; - } - - private EStructuralFeature.Setting resolveSetting(VariableManager variableManager, Object feature) { - EObject referenceOwner = variableManager.get(VariableManager.SELF, EObject.class).orElse(null); - if (referenceOwner != null && feature instanceof EReference reference) { - return ((InternalEObject) referenceOwner).eSetting(reference); - } else { - return null; - } - } private Stream getColorsFromColorPalettesStream(VariableManager variableManager) { return variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class) @@ -449,10 +296,38 @@ private Stream getColorsFromColorPalettesStream(VariableManager varia .flatMap(EList::stream); } - private SelectDescription createShapeSelectionField(Object feature) { + private SelectDescription createIconSelectionField() { + return SelectDescription.newSelectDescription("nodestyle.iconLabelSelector") + .idProvider(variableManager -> "nodestyle.iconLabelSelector") + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) + .labelProvider(variableManager -> "Custom Icon") + .styleProvider(vm -> SelectStyle.newSelectStyle().showIcon(true).build()) + .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, NodeStyleDescription.class).map(NodeStyleDescription::getLabelIcon).orElse(EMPTY)) + .optionsProvider(variableManager -> variableManager.get(IEditingContext.EDITING_CONTEXT, IEditingContext.class) + .map(IEditingContext::getId) + .map(this.customImageSearchService::getAvailableImages) + .orElse(List.of()) + ) + .optionIdProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(customImageMetadataEntity -> String.format(CUSTOM, customImageMetadataEntity.getId().toString())) + .orElse(EMPTY)) + .optionLabelProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(CustomImageMetadata::getLabel) + .orElse(EMPTY)) + .optionIconURLProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, CustomImageMetadata.class) + .map(customImageMetadataEntity -> String.format(CUSTOM, customImageMetadataEntity.getId().toString())) + .orElse(EMPTY)) + .newValueHandler(this.getIconLabelValueHandler()) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.NODE_STYLE_DESCRIPTION__LABEL_ICON)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) + .build(); + } + + private SelectDescription createShapeSelectionField() { return SelectDescription.newSelectDescription("nodestyle.shapeSelector") .idProvider(variableManager -> "nodestyle.shapeSelector") - .targetObjectIdProvider(this.semanticTargetIdProvider) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) .labelProvider(variableManager -> "Shape") .valueProvider(variableManager -> variableManager.get(VariableManager.SELF, ImageNodeStyleDescription.class).map(ImageNodeStyleDescription::getShape).orElse(EMPTY)) .optionsProvider(variableManager -> { @@ -477,31 +352,46 @@ private SelectDescription createShapeSelectionField(Object feature) { .orElse(EMPTY)) .optionIconURLProvider(variableManager -> variableManager.get(SelectComponent.CANDIDATE_VARIABLE, Object.class).map(this.objectService::getImagePath).orElse("")) .newValueHandler(this.getNewShapeValueHandler()) - .diagnosticsProvider(this.getDiagnosticsProvider(feature)) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) + .diagnosticsProvider(this.propertiesConfigurerService.getDiagnosticsProvider(DiagramPackage.Literals.IMAGE_NODE_STYLE_DESCRIPTION__SHAPE)) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) .build(); } private ImageDescription createShapePreviewField() { return ImageDescription.newImageDescription("nodestyle.shapePreview") - .targetObjectIdProvider(this.semanticTargetIdProvider) + .targetObjectIdProvider(this.propertiesConfigurerService.getSemanticTargetIdProvider()) .idProvider(variableManager -> "nodestyle.shapePreview") .labelProvider(variableManager -> "Shape Preview") .urlProvider(variableManager -> { var optionalShape = variableManager.get(VariableManager.SELF, ImageNodeStyleDescription.class).map(ImageNodeStyleDescription::getShape); if (optionalShape.isPresent()) { - return String.format("/custom/%s", optionalShape.get()); + return String.format(CUSTOM, optionalShape.get()); } return ""; }) .maxWidthProvider(variableManager -> "300px") .diagnosticsProvider(variableManager -> List.of()) - .kindProvider(this::kindProvider) - .messageProvider(this::messageProvider) + .kindProvider(this.propertiesConfigurerService.getKindProvider()) + .messageProvider(this.propertiesConfigurerService.getMessageProvider()) .build(); } + private BiFunction getIconLabelValueHandler() { + return (variableManager, newValue) -> { + var optionalNodeStyle = variableManager.get(VariableManager.SELF, NodeStyleDescription.class); + if (optionalNodeStyle.isPresent()) { + String newIcon = newValue; + if (newValue != null && newValue.isBlank()) { + newIcon = null; + } + optionalNodeStyle.get().setLabelIcon(newIcon); + return new Success(); + } + return new Failure(""); + }; + } + private BiFunction getNewShapeValueHandler() { return (variableManager, newValue) -> { var optionalNodeStyle = variableManager.get(VariableManager.SELF, ImageNodeStyleDescription.class); @@ -517,46 +407,4 @@ private BiFunction getNewShapeValueHandler() { }; } - private Function> getDiagnosticsProvider(Object feature) { - return variableManager -> { - var optionalSelf = variableManager.get(VariableManager.SELF, EObject.class); - - if (optionalSelf.isPresent()) { - EObject self = optionalSelf.get(); - List diagnostics = this.validationService.validate(self, feature); - return diagnostics; - } - - return List.of(); - }; - } - - private String kindProvider(Object object) { - String kind = "Unknown"; - if (object instanceof Diagnostic diagnostic) { - switch (diagnostic.getSeverity()) { - case org.eclipse.emf.common.util.Diagnostic.ERROR: - kind = "Error"; - break; - case org.eclipse.emf.common.util.Diagnostic.WARNING: - kind = "Warning"; - break; - case org.eclipse.emf.common.util.Diagnostic.INFO: - kind = "Info"; - break; - default: - kind = "Unknown"; - break; - } - } - return kind; - } - - private String messageProvider(Object object) { - if (object instanceof Diagnostic diagnostic) { - return diagnostic.getMessage(); - } - return ""; - } - } diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/StylesFactory.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/StylesFactory.java index 2b75a6169b..c05903d9dd 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/StylesFactory.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/StylesFactory.java @@ -65,9 +65,12 @@ public LabelStyleDescription createLabelStyleDescription(NodeStyleDescription no .strikeThroughProvider(variableManager -> nodeStyle.isStrikeThrough()) .iconURLProvider(variableManager -> { String iconURL = ""; - if (nodeStyle.isShowIcon()) { + if (nodeStyle.isShowIcon() && nodeStyle.getLabelIcon() == null) { iconURL = variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getImagePath).orElse(""); } + if (nodeStyle.isShowIcon() && !(nodeStyle.getLabelIcon() == null)) { + iconURL = nodeStyle.getLabelIcon(); + } return iconURL; }) .build(); @@ -87,9 +90,12 @@ public LabelStyleDescription createEdgeLabelStyleDescription(org.eclipse.sirius. .strikeThroughProvider(variableManager -> edgeStyle.isStrikeThrough()) .iconURLProvider(variableManager -> { String iconURL = ""; - if (edgeStyle.isShowIcon()) { + if (edgeStyle.isShowIcon() && edgeStyle.getLabelIcon() == null) { iconURL = variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getImagePath).orElse(""); } + if (edgeStyle.isShowIcon() && !(edgeStyle.getLabelIcon() == null)) { + iconURL = edgeStyle.getLabelIcon(); + } return iconURL; }) .build();