diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EBooleanIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EBooleanIfDescriptionProvider.java index 1d712966da..d64eafce47 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EBooleanIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EBooleanIfDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.sirius.components.compatibility.emf.properties; +import java.util.List; import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Function; @@ -44,16 +45,20 @@ public class EBooleanIfDescriptionProvider { private final IPropertiesValidationProvider propertiesValidationProvider; - public EBooleanIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) { + private final Function semanticTargetIdProvider; + + public EBooleanIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function semanticTargetIdProvider) { this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(IF_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getCheckboxDescription()) + .childrenDescription(List.of(this.getCheckboxDescription())) .build(); // @formatter:on } @@ -68,6 +73,7 @@ private Function getPredicate() { private CheckboxDescription getCheckboxDescription() { // @formatter:off return CheckboxDescription.newCheckboxDescription(CHECKBOX_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(this.getLabelProvider()) .valueProvider(this.getValueProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EEnumIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EEnumIfDescriptionProvider.java index feeeb55d13..46dd7169c9 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EEnumIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EEnumIfDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -58,16 +58,20 @@ public class EEnumIfDescriptionProvider { private final IPropertiesValidationProvider propertiesValidationProvider; - public EEnumIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) { + private final Function semanticTargetIdProvider; + + public EEnumIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function semanticTargetIdProvider) { this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(IF_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getRadioDescription()) + .childrenDescription(List.of(this.getRadioDescription())) .build(); // @formatter:on } @@ -86,6 +90,7 @@ private Function getPredicate() { private RadioDescription getRadioDescription() { // @formatter:off return RadioDescription.newRadioDescription(RADIO_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(this.getLabelProvider()) .optionsProvider(this.getOptionsProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EStringIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EStringIfDescriptionProvider.java index c9049d919a..6b3f605df5 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EStringIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/EStringIfDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.sirius.components.compatibility.emf.properties; +import java.util.List; import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Function; @@ -45,16 +46,20 @@ public class EStringIfDescriptionProvider { private final IPropertiesValidationProvider propertiesValidationProvider; - public EStringIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) { + private final Function semanticTargetIdProvider; + + public EStringIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function semanticTargetIdProvider) { this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(IF_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getTextareaDescription()) + .childrenDescription(List.of(this.getTextareaDescription())) .build(); // @formatter:on } @@ -72,6 +77,7 @@ private Function getPredicate() { private TextareaDescription getTextareaDescription() { // @formatter:off return TextareaDescription.newTextareaDescription(TEXTAREA_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(this.getLabelProvider()) .valueProvider(this.getValueProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MonoValuedNonContainmentReferenceIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MonoValuedNonContainmentReferenceIfDescriptionProvider.java index ad0db7a47b..3fb07ed69d 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MonoValuedNonContainmentReferenceIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MonoValuedNonContainmentReferenceIfDescriptionProvider.java @@ -53,18 +53,23 @@ public class MonoValuedNonContainmentReferenceIfDescriptionProvider { private final Logger logger = LoggerFactory.getLogger(MonoValuedNonContainmentReferenceIfDescriptionProvider.class); + private final Function semanticTargetIdProvider; + public MonoValuedNonContainmentReferenceIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IObjectService objectService, - IPropertiesValidationProvider propertiesValidationProvider) { + IPropertiesValidationProvider propertiesValidationProvider, Function semanticTargetIdProvider) { this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.objectService = Objects.requireNonNull(objectService); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); + } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(ID_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getSelectDescription()) + .childrenDescription(List.of(this.getSelectDescription())) .build(); // @formatter:on } @@ -84,6 +89,7 @@ private Function getPredicate() { private SelectDescription getSelectDescription() { // @formatter:off return SelectDescription.newSelectDescription(SELECT_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(this.getLabelProvider()) .valueProvider(this.getValueProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MultiValuedNonContainmentReferenceIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MultiValuedNonContainmentReferenceIfDescriptionProvider.java index 532fc999bc..2144a92c33 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MultiValuedNonContainmentReferenceIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/MultiValuedNonContainmentReferenceIfDescriptionProvider.java @@ -55,18 +55,22 @@ public class MultiValuedNonContainmentReferenceIfDescriptionProvider { private final Logger logger = LoggerFactory.getLogger(MultiValuedNonContainmentReferenceIfDescriptionProvider.class); + private final Function semanticTargetIdProvider; + public MultiValuedNonContainmentReferenceIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IObjectService objectService, - IPropertiesValidationProvider propertiesValidationProvider) { + IPropertiesValidationProvider propertiesValidationProvider, Function semanticTargetIdProvider) { this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.objectService = Objects.requireNonNull(objectService); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(ID_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getMultiSelectDescription()) + .childrenDescription(List.of(this.getMultiSelectDescription())) .build(); // @formatter:on } @@ -86,6 +90,7 @@ private Function getPredicate() { private MultiSelectDescription getMultiSelectDescription() { // @formatter:off return MultiSelectDescription.newMultiSelectDescription(MULTI_SELECT_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(this.getLabelProvider()) .valuesProvider(this.getValuesProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/NumberIfDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/NumberIfDescriptionProvider.java index da790b2bbd..fd9a08fae5 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/NumberIfDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/NumberIfDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.sirius.components.compatibility.emf.properties; +import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.function.BiFunction; @@ -48,19 +49,23 @@ public class NumberIfDescriptionProvider { private final IEMFMessageService emfMessageService; + private final Function semanticTargetIdProvider; + public NumberIfDescriptionProvider(EDataType eDataType, ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, - IEMFMessageService emfMessageService) { + IEMFMessageService emfMessageService, Function semanticTargetIdProvider) { this.eDataType = Objects.requireNonNull(eDataType); this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); this.emfMessageService = Objects.requireNonNull(emfMessageService); + this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider); } public IfDescription getIfDescription() { // @formatter:off return IfDescription.newIfDescription(this.eDataType.getName()) + .targetObjectIdProvider(this.semanticTargetIdProvider) .predicate(this.getPredicate()) - .widgetDescription(this.getTextfieldDescription()) + .childrenDescription(List.of(this.getTextfieldDescription())) .build(); // @formatter:on } @@ -75,6 +80,7 @@ private Function getPredicate() { private TextfieldDescription getTextfieldDescription() { // @formatter:off return TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(this.getIdProvider()) .labelProvider(this.getLabelProvider()) .valueProvider(this.getValueProvider()) diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/PropertiesDefaultDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/PropertiesDefaultDescriptionProvider.java index e3d9ad07fb..72f9bd31e2 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/PropertiesDefaultDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/main/java/org/eclipse/sirius/components/compatibility/emf/properties/PropertiesDefaultDescriptionProvider.java @@ -35,7 +35,6 @@ import org.eclipse.sirius.components.forms.description.ForDescription; import org.eclipse.sirius.components.forms.description.FormDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; -import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.forms.description.PageDescription; import org.eclipse.sirius.components.representations.GetOrCreateRandomIdProvider; import org.eclipse.sirius.components.representations.VariableManager; @@ -59,12 +58,15 @@ public class PropertiesDefaultDescriptionProvider implements IPropertiesDefaultD private final IEMFMessageService emfMessageService; + private final Function semanticTargetIdProvider; + public PropertiesDefaultDescriptionProvider(IObjectService objectService, ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, IEMFMessageService emfMessageService) { this.objectService = Objects.requireNonNull(objectService); this.composedAdapterFactory = Objects.requireNonNull(composedAdapterFactory); this.propertiesValidationProvider = Objects.requireNonNull(propertiesValidationProvider); this.emfMessageService = Objects.requireNonNull(emfMessageService); + this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(objectService::getId).orElse(null); } @Override @@ -155,13 +157,13 @@ private GroupDescription getGroupDescription() { return objects; }; - List ifDescriptions = new ArrayList<>(); - ifDescriptions.add(new EStringIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider).getIfDescription()); - ifDescriptions.add(new EBooleanIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider).getIfDescription()); - ifDescriptions.add(new EEnumIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider).getIfDescription()); + List ifDescriptions = new ArrayList<>(); + ifDescriptions.add(new EStringIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider, this.semanticTargetIdProvider).getIfDescription()); + ifDescriptions.add(new EBooleanIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider, this.semanticTargetIdProvider).getIfDescription()); + ifDescriptions.add(new EEnumIfDescriptionProvider(this.composedAdapterFactory, this.propertiesValidationProvider, this.semanticTargetIdProvider).getIfDescription()); - ifDescriptions.add(new MonoValuedNonContainmentReferenceIfDescriptionProvider(this.composedAdapterFactory, this.objectService, this.propertiesValidationProvider).getIfDescription()); - ifDescriptions.add(new MultiValuedNonContainmentReferenceIfDescriptionProvider(this.composedAdapterFactory, this.objectService, this.propertiesValidationProvider).getIfDescription()); + ifDescriptions.add(new MonoValuedNonContainmentReferenceIfDescriptionProvider(this.composedAdapterFactory, this.objectService, this.propertiesValidationProvider, this.semanticTargetIdProvider).getIfDescription()); + ifDescriptions.add(new MultiValuedNonContainmentReferenceIfDescriptionProvider(this.composedAdapterFactory, this.objectService, this.propertiesValidationProvider, this.semanticTargetIdProvider).getIfDescription()); // @formatter:off var numericDataTypes = List.of( @@ -178,14 +180,15 @@ private GroupDescription getGroupDescription() { ); // @formatter:on for (var dataType : numericDataTypes) { - ifDescriptions.add(new NumberIfDescriptionProvider(dataType, this.composedAdapterFactory, this.propertiesValidationProvider, this.emfMessageService).getIfDescription()); + ifDescriptions.add(new NumberIfDescriptionProvider(dataType, this.composedAdapterFactory, this.propertiesValidationProvider, this.emfMessageService, this.semanticTargetIdProvider).getIfDescription()); } // @formatter:off ForDescription forDescription = ForDescription.newForDescription("forId") + .targetObjectIdProvider(this.semanticTargetIdProvider) .iterator(ESTRUCTURAL_FEATURE) .iterableProvider(iterableProvider) - .ifDescriptions(ifDescriptions) + .controlDescriptions(ifDescriptions) .build(); // @formatter:on diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/EStringIfDescriptionProviderTests.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/EStringIfDescriptionProviderTests.java index 54a27e350f..9475f261d8 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/EStringIfDescriptionProviderTests.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/EStringIfDescriptionProviderTests.java @@ -71,7 +71,7 @@ public void testEBooleanAttributeDoesNotProducesTextfieldDescription() { private Boolean checkPredicate(AdapterFactory adapterFactory, EAttribute attribute) { ComposedAdapterFactory composedAdapterFactory = new ComposedAdapterFactory(adapterFactory); - EStringIfDescriptionProvider descriptionProvider = new EStringIfDescriptionProvider(composedAdapterFactory, new IPropertiesValidationProvider.NoOp()); + EStringIfDescriptionProvider descriptionProvider = new EStringIfDescriptionProvider(composedAdapterFactory, new IPropertiesValidationProvider.NoOp(), (variableManager) -> ""); IfDescription ifDescription = descriptionProvider.getIfDescription(); VariableManager variableManager = new VariableManager(); diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/FormRendererTests.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/FormRendererTests.java index cc6a02d8cf..732c6dce3f 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/FormRendererTests.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/properties/FormRendererTests.java @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.forms.description.CheckboxDescription; import org.eclipse.sirius.components.forms.description.ForDescription; import org.eclipse.sirius.components.forms.description.FormDescription; +import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.forms.description.RadioDescription; import org.eclipse.sirius.components.forms.description.SelectDescription; import org.eclipse.sirius.components.forms.description.TextareaDescription; @@ -231,8 +232,8 @@ private void checkResult(FormDescription description) { .filter(ForDescription.class::isInstance) .map(ForDescription.class::cast).findFirst(); assertThat(forOptional).isNotEmpty(); - assertThat(forOptional.get().getIfDescriptions()).hasSize(1); - assertThat(forOptional.get().getIfDescriptions().stream().findFirst().get().getWidgetDescription()).isNotNull(); + assertThat(forOptional.get().getControlDescriptions()).hasSize(1); + assertThat(forOptional.get().getControlDescriptions().stream().filter(IfDescription.class::isInstance).map(IfDescription.class::cast).findFirst().get().getChildrenDescription()).isNotNull(); // Test FormRenderer VariableManager variableManager = new VariableManager(); variableManager.put(VariableManager.SELF, List.of(EcorePackage.eINSTANCE)); @@ -259,10 +260,8 @@ private void checkResult(FormDescription description) { private void checkIdsInGroups(List groups) { for (Group group : groups) { List widgets = group.getWidgets(); - for (int i = 0; i < widgets.size(); i++) { - AbstractWidget abstractWidget = widgets.get(i); - assertThat(abstractWidget.getId()).endsWith("#" + i); - } + long distincIds = widgets.stream().map(AbstractWidget::getId).distinct().count(); + assertThat(distincIds).isEqualTo(widgets.size()); } } } diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/ForDescriptionConverter.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/ForDescriptionConverter.java index 6b832697ed..2f9c6eebec 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/ForDescriptionConverter.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/ForDescriptionConverter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -21,8 +21,8 @@ import org.eclipse.sirius.components.compatibility.api.IIdentifierProvider; import org.eclipse.sirius.components.compatibility.api.IModelOperationHandlerSwitchProvider; import org.eclipse.sirius.components.core.api.IObjectService; +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.ForDescription; -import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.interpreter.AQLInterpreter; import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.properties.DynamicMappingForDescription; @@ -57,14 +57,15 @@ public ForDescription convert(org.eclipse.sirius.properties.DynamicMappingForDes .orElse(Collections.emptyList()); }; IfDescriptionConverter converter = new IfDescriptionConverter(this.interpreter, this.objectService, this.identifierProvider, this.modelOperationHandlerSwitchProvider); - List ifDescriptions = siriusForDescription.getIfs().stream() + List ifDescriptions = siriusForDescription.getIfs().stream() .flatMap(ifDescription -> converter.convert(ifDescription).stream()) .collect(Collectors.toUnmodifiableList()); return ForDescription.newForDescription(this.identifierProvider.getIdentifier(siriusForDescription)) + .targetObjectIdProvider(variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null)) .iterableProvider(iterableProvider) .iterator(siriusForDescription.getIterator()) - .ifDescriptions(ifDescriptions) + .controlDescriptions(ifDescriptions) .build(); // @formatter:on } diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/IfDescriptionConverter.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/IfDescriptionConverter.java index fb23f8c5f0..8f854812b8 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/IfDescriptionConverter.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/IfDescriptionConverter.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.sirius.components.compatibility.forms; +import java.util.List; import java.util.Objects; import java.util.Optional; @@ -22,6 +23,7 @@ import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.interpreter.AQLInterpreter; +import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.properties.DynamicMappingIfDescription; /** @@ -55,8 +57,9 @@ public Optional convert(org.eclipse.sirius.properties.DynamicMapp return optionalWidgetDescription.map(widgetDescription -> { // @formatter:off return IfDescription.newIfDescription(this.identifierProvider.getIdentifier(siriusIfDescription)) + .targetObjectIdProvider(variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null)) .predicate(predicate) - .widgetDescription(widgetDescription) + .childrenDescription(List.of(widgetDescription)) .build(); // @formatter:on }); diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetDescriptionConverter.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetDescriptionConverter.java index 13fb776dab..702a1d8c79 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetDescriptionConverter.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetDescriptionConverter.java @@ -66,12 +66,17 @@ public class WidgetDescriptionConverter { private final IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider; + private final Function semanticTargetIdProvider; + public WidgetDescriptionConverter(AQLInterpreter interpreter, IObjectService objectService, IIdentifierProvider identifierProvider, IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider) { this.interpreter = Objects.requireNonNull(interpreter); this.objectService = Objects.requireNonNull(objectService); this.identifierProvider = Objects.requireNonNull(identifierProvider); this.modelOperationHandlerSwitchProvider = Objects.requireNonNull(modelOperationHandlerSwitchProvider); + this.semanticTargetIdProvider = variableManager -> { + return variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null); + }; } public Optional convert(WidgetDescription controlDescription) { @@ -104,6 +109,7 @@ private TextfieldDescription convertTextfield(org.eclipse.sirius.properties.Text // @formatter:off return TextfieldDescription.newTextfieldDescription(this.identifierProvider.getIdentifier(textDescription)) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) @@ -135,6 +141,7 @@ private TextareaDescription convertTextarea(org.eclipse.sirius.properties.TextAr // @formatter:off return TextareaDescription.newTextareaDescription(this.identifierProvider.getIdentifier(textAreaDescription)) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) @@ -210,6 +217,7 @@ private RadioDescription convertRadio(org.eclipse.sirius.properties.RadioDescrip // @formatter:off return RadioDescription.newRadioDescription(this.identifierProvider.getIdentifier(radioDescription)) .idProvider(new WidgetIdProvider()) + .targetObjectIdProvider(this.semanticTargetIdProvider) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) .optionIdProvider(optionIdProvider) @@ -263,6 +271,7 @@ private SelectDescription convertSelect(org.eclipse.sirius.properties.SelectDesc // @formatter:off return SelectDescription.newSelectDescription(this.identifierProvider.getIdentifier(selectDescription)) .idProvider(new WidgetIdProvider()) + .targetObjectIdProvider(this.semanticTargetIdProvider) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) .valueProvider(valueProvider) @@ -301,6 +310,7 @@ private CheckboxDescription convertCheckbox(org.eclipse.sirius.properties.Checkb //@formatter:off return CheckboxDescription.newCheckboxDescription(this.identifierProvider.getIdentifier(checkboxDescription)) .idProvider(new WidgetIdProvider()) + .targetObjectIdProvider(this.semanticTargetIdProvider) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) .valueProvider(valueProvider) diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetIdProvider.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetIdProvider.java index 6acff361df..a7b0c60ccb 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetIdProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/forms/WidgetIdProvider.java @@ -12,13 +12,10 @@ *******************************************************************************/ package org.eclipse.sirius.components.compatibility.forms; -import java.util.Optional; +import java.util.UUID; import java.util.function.Function; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.sirius.components.forms.components.FormComponent; -import org.eclipse.sirius.components.forms.components.WidgetIdCounter; import org.eclipse.sirius.components.representations.VariableManager; /** @@ -30,24 +27,19 @@ public class WidgetIdProvider implements Function { @Override public String apply(VariableManager variableManager) { - // @formatter:off - var optionalEObject = Optional.of(variableManager.getVariables().get(VariableManager.SELF)) - .filter(EObject.class::isInstance) - .map(EObject.class::cast); - - Optional optionalCounter = Optional.of(variableManager.getVariables().get(FormComponent.WIDGET_ID_PROVIDER_COUNTER)) - .filter(WidgetIdCounter.class::isInstance) - .map(WidgetIdCounter.class::cast); - // @formatter:on - - if (optionalCounter.isPresent() && optionalEObject.isPresent()) { - WidgetIdCounter counter = optionalCounter.get(); - EObject eObject = optionalEObject.get(); - String id = EcoreUtil.getURI(eObject).toString() + "#" + counter.getCounter(); - counter.increment(); - return id; + var optionalParentElementId = variableManager.get(FormComponent.PARENT_ELEMENT_ID, String.class); + var optionalControlDescriptionId = variableManager.get(FormComponent.CONTROL_DESCRIPTION_ID, String.class); + var optionalTargetObjectId = variableManager.get(FormComponent.TARGET_OBJECT_ID, String.class); + var optionalWidgetLabel = variableManager.get(FormComponent.WIDGET_LABEL, String.class); + if (optionalParentElementId.isPresent() && optionalControlDescriptionId.isPresent() && optionalTargetObjectId.isPresent() && optionalWidgetLabel.isPresent()) { + return this.computeWidgetId(optionalParentElementId.get(), optionalControlDescriptionId.get(), optionalTargetObjectId.get(), optionalWidgetLabel.get()); } return ""; } + private String computeWidgetId(String parentElementId, String controlDescriptionId, String targetObjectId, String label) { + String rawIdentifier = parentElementId + controlDescriptionId + targetObjectId + label; + return UUID.nameUUIDFromBytes(rawIdentifier.getBytes()).toString(); + } + } diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandler.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandler.java index b65bb154fd..85641ba069 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandler.java +++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandler.java @@ -118,7 +118,7 @@ private boolean addWidget(IEditingContext editingContext, IFormDescriptionEditor if (widgetDescription instanceof WidgetDescription) { this.createStyle((WidgetDescription) widgetDescription); if (container instanceof GroupDescription) { - ((GroupDescription) container).getWidgets().add(index, (WidgetDescription) widgetDescription); + ((GroupDescription) container).getChildren().add(index, (WidgetDescription) widgetDescription); success = true; } else if (container instanceof FlexboxContainerDescription) { ((FlexboxContainerDescription) container).getChildren().add(index, (WidgetDescription) widgetDescription); diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/MoveWidgetEventHandler.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/MoveWidgetEventHandler.java index c7d472c60c..77bf5ea921 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/MoveWidgetEventHandler.java +++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/MoveWidgetEventHandler.java @@ -106,9 +106,9 @@ private boolean moveWidget(IEditingContext editingContext, IFormDescriptionEdito try { if (container instanceof GroupDescription) { if (container.equals(widgetToMove.eContainer())) { - ((GroupDescription) container).getWidgets().move(index, widgetToMove); + ((GroupDescription) container).getChildren().move(index, widgetToMove); } else { - ((GroupDescription) container).getWidgets().add(index, widgetToMove); + ((GroupDescription) container).getChildren().add(index, widgetToMove); } success = true; } else if (container instanceof FlexboxContainerDescription) { diff --git a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/FormDescriptionEditorGroupComponent.java b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/FormDescriptionEditorGroupComponent.java index ba8a4ab0d2..19820a7942 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/FormDescriptionEditorGroupComponent.java +++ b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/FormDescriptionEditorGroupComponent.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Stream; import org.eclipse.emf.ecore.util.ComposedSwitch; import org.eclipse.emf.ecore.util.Switch; @@ -29,7 +30,10 @@ import org.eclipse.sirius.components.representations.Element; import org.eclipse.sirius.components.representations.IComponent; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.components.view.form.FormElementFor; +import org.eclipse.sirius.components.view.form.FormElementIf; import org.eclipse.sirius.components.view.form.GroupDescription; +import org.eclipse.sirius.components.view.form.WidgetDescription; /** * The component used to render the form description editor group. @@ -67,19 +71,34 @@ public Element render() { VariableManager childVariableManager = variableManager.createChild(); childVariableManager.put(VariableManager.SELF, viewToolbarActionDescription); AbstractWidgetDescription toolbarActionDescription = this.converter.doSwitch(viewToolbarActionDescription); - if (toolbarActionDescription instanceof ButtonDescription) { - ToolbarActionComponentProps toolbarActionComponentProps = new ToolbarActionComponentProps(childVariableManager, (ButtonDescription) toolbarActionDescription); + if (toolbarActionDescription instanceof ButtonDescription buttonDescription) { + ToolbarActionComponentProps toolbarActionComponentProps = new ToolbarActionComponentProps(childVariableManager, buttonDescription); childrenWidgets.add(new Element(ToolbarActionComponent.class, toolbarActionComponentProps)); } }); - groupDescription.getWidgets().forEach(viewWidgetDescription -> { - VariableManager childVariableManager = variableManager.createChild(); - childVariableManager.put(VariableManager.SELF, viewWidgetDescription); - AbstractWidgetDescription widgetDescription = this.converter.doSwitch(viewWidgetDescription); - WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childVariableManager, widgetDescription, this.props.getWidgetDescriptors()); - childrenWidgets.add(new Element(WidgetComponent.class, widgetComponentProps)); - }); + groupDescription.getChildren().stream() + .flatMap(controlDescription -> { + Stream widgets = Stream.empty(); + if (controlDescription instanceof WidgetDescription viewWidgetDescription) { + widgets = Stream.of(viewWidgetDescription); + } else if (controlDescription instanceof FormElementFor formElementFor) { + // FIXME: Assumes the For can only contain Ifs + widgets = formElementFor.getChildren().stream() + .filter(FormElementIf.class::isInstance).map(FormElementIf.class::cast) + .flatMap(formElementIf -> formElementIf.getChildren().stream()) + .filter(WidgetDescription.class::isInstance) + .map(WidgetDescription.class::cast); + } + return widgets; + }) + .forEach(viewWidgetDescription -> { + VariableManager childVariableManager = variableManager.createChild(); + childVariableManager.put(VariableManager.SELF, viewWidgetDescription); + AbstractWidgetDescription widgetDescription = this.converter.doSwitch(viewWidgetDescription); + WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childVariableManager, widgetDescription, this.props.getWidgetDescriptors()); + childrenWidgets.add(new Element(WidgetComponent.class, widgetComponentProps)); + }); GroupElementProps.Builder groupElementPropsBuilder = GroupElementProps.newGroupElementProps(id) .label(label) diff --git a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/ViewFormDescriptionEditorConverterSwitch.java b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/ViewFormDescriptionEditorConverterSwitch.java index c04d625e72..fb58ea50a0 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/ViewFormDescriptionEditorConverterSwitch.java +++ b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/components/ViewFormDescriptionEditorConverterSwitch.java @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.forms.SelectStyle; import org.eclipse.sirius.components.forms.TextareaStyle; import org.eclipse.sirius.components.forms.TextfieldStyle; +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; import org.eclipse.sirius.components.forms.description.ButtonDescription; import org.eclipse.sirius.components.forms.description.ChartWidgetDescription; @@ -106,6 +107,7 @@ public AbstractWidgetDescription caseTextfieldDescription(org.eclipse.sirius.com TextfieldDescription.Builder builder = TextfieldDescription.newTextfieldDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewTextfieldDescription, "Textfield")) .valueProvider(vm -> "") .newValueHandler((vm, value) -> new Success()) @@ -135,6 +137,7 @@ public AbstractWidgetDescription caseCheckboxDescription(org.eclipse.sirius.comp CheckboxDescription.Builder builder = CheckboxDescription.newCheckboxDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewCheckboxDescription, "Checkbox")) .valueProvider(vm -> true) .newValueHandler((vm, value) -> new Success()) @@ -164,6 +167,7 @@ public AbstractWidgetDescription caseSelectDescription(org.eclipse.sirius.compon SelectDescription.Builder builder = SelectDescription.newSelectDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewSelectDescription, "Select")) .valueProvider(vm -> "") .optionIdProvider(vm -> "") @@ -197,6 +201,7 @@ public AbstractWidgetDescription caseTextAreaDescription(org.eclipse.sirius.comp TextareaDescription.Builder builder = TextareaDescription.newTextareaDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewTextareaDescription, "Textarea")) .valueProvider(vm -> "") .newValueHandler((vm, value) -> new Success()) @@ -226,6 +231,7 @@ public AbstractWidgetDescription caseMultiSelectDescription(org.eclipse.sirius.c MultiSelectDescription.Builder builder = MultiSelectDescription.newMultiSelectDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewMultiSelectDescription, "MultiSelect")) .valuesProvider(vm -> List.of()) .optionIdProvider(vm -> "") @@ -259,6 +265,7 @@ public AbstractWidgetDescription caseRadioDescription(org.eclipse.sirius.compone RadioDescription.Builder builder = RadioDescription.newRadioDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewRadioDescription, "Radio")) .optionIdProvider(vm -> "") .optionLabelProvider(vm -> "") @@ -283,7 +290,7 @@ public AbstractWidgetDescription caseFlexboxContainerDescription(org.eclipse.sir String id = this.formDescriptionEditorDescription.getTargetObjectIdProvider().apply(childVariableManager); FlexDirection flexDirection = FlexDirection.valueOf(viewFlexboxContainerDescription.getFlexDirection().getName()); - List children = new ArrayList<>(); + List children = new ArrayList<>(); viewFlexboxContainerDescription.getChildren().forEach(viewWidgetDescription -> { children.add(ViewFormDescriptionEditorConverterSwitch.this.doSwitch(viewWidgetDescription)); @@ -298,6 +305,7 @@ public AbstractWidgetDescription caseFlexboxContainerDescription(org.eclipse.sir FlexboxContainerDescription.Builder builder = FlexboxContainerDescription.newFlexboxContainerDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewFlexboxContainerDescription, "FlexboxContainer")) .flexDirection(flexDirection) .children(children) @@ -327,6 +335,7 @@ public AbstractWidgetDescription caseButtonDescription(org.eclipse.sirius.compon ButtonDescription.Builder builder = ButtonDescription.newButtonDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewButtonDescription, "Button")) .buttonLabelProvider(vm -> viewButtonDescription.getButtonLabelExpression()) .imageURLProvider(vm -> viewButtonDescription.getImageExpression()) @@ -357,6 +366,7 @@ public AbstractWidgetDescription caseLabelDescription(org.eclipse.sirius.compone LabelDescription.Builder builder = LabelDescription.newLabelDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewLabelDescription, "Label")) .valueProvider(vm -> "") .diagnosticsProvider(vm -> List.of()) @@ -385,6 +395,7 @@ public AbstractWidgetDescription caseLinkDescription(org.eclipse.sirius.componen LinkDescription.Builder builder = LinkDescription.newLinkDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewLinkDescription, "Link")) .urlProvider(vm -> "") .diagnosticsProvider(vm -> List.of()) @@ -413,6 +424,7 @@ public AbstractWidgetDescription caseListDescription(org.eclipse.sirius.componen ListDescription.Builder builder = ListDescription.newListDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewListDescription, "List")) .itemsProvider(vm -> List.of()) .itemKindProvider(vm -> "") @@ -440,6 +452,7 @@ public AbstractWidgetDescription caseImageDescription(org.eclipse.sirius.compone ImageDescription.Builder builder = ImageDescription.newImageDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewImageDescription, "Image")) .urlProvider(vm -> Optional.ofNullable(viewImageDescription.getUrlExpression()).orElse("")) .maxWidthProvider(vm -> viewImageDescription.getMaxWidthExpression()) @@ -459,6 +472,7 @@ public AbstractWidgetDescription caseRichTextDescription(org.eclipse.sirius.comp RichTextDescription.Builder builder = RichTextDescription.newRichTextDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(viewRichTextDescription, "RichText")) .valueProvider(vm -> "") .newValueHandler((vm, value) -> new Success()) @@ -523,6 +537,7 @@ private AbstractWidgetDescription createChartWidgetDescription(org.eclipse.siriu ChartWidgetDescription.Builder builder = ChartWidgetDescription.newChartWidgetDescription(chartDescription.getId()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> this.getWidgetLabel(widgetDescription, "Chart")) .chartDescription(chartDescription) .diagnosticsProvider(vm -> List.of()) diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ButtonComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ButtonComponent.java index ce33e47eeb..2dd6dd638e 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ButtonComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ButtonComponent.java @@ -45,8 +45,15 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ButtonDescription buttonDescription = this.props.getButtonDescription(); - String id = buttonDescription.getIdProvider().apply(variableManager); String label = buttonDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, buttonDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, buttonDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, buttonDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = buttonDescription.getIdProvider().apply(idVariableManager); + String iconURL = buttonDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = buttonDescription.getIsReadOnlyProvider().apply(variableManager); String buttonLabel = buttonDescription.getButtonLabelProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ChartWidgetComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ChartWidgetComponent.java index 9f62249ec6..a445c8d692 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ChartWidgetComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ChartWidgetComponent.java @@ -51,8 +51,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ChartWidgetDescription chartWidgetDescription = this.props.getChartWidgetDescription(); - String id = chartWidgetDescription.getIdProvider().apply(variableManager); String label = chartWidgetDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, chartWidgetDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, chartWidgetDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = chartWidgetDescription.getIdProvider().apply(idVariableManager); + String iconURL = chartWidgetDescription.getIconURLProvider().apply(variableManager); IChartDescription chartDescription = chartWidgetDescription.getChartDescription(); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/CheckboxComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/CheckboxComponent.java index 347f1c909d..310f15608d 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/CheckboxComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/CheckboxComponent.java @@ -45,8 +45,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); CheckboxDescription checkboxDescription = this.props.getCheckboxDescription(); - String id = checkboxDescription.getIdProvider().apply(variableManager); String label = checkboxDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, checkboxDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, checkboxDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = checkboxDescription.getIdProvider().apply(idVariableManager); + String iconURL = checkboxDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = checkboxDescription.getIsReadOnlyProvider().apply(variableManager); Boolean value = checkboxDescription.getValueProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FlexboxContainerComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FlexboxContainerComponent.java index e256ed2fa6..d2ca82b33c 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FlexboxContainerComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FlexboxContainerComponent.java @@ -17,7 +17,10 @@ import java.util.Objects; import org.eclipse.sirius.components.forms.FlexDirection; +import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; import org.eclipse.sirius.components.forms.description.FlexboxContainerDescription; +import org.eclipse.sirius.components.forms.description.ForDescription; +import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.forms.elements.FlexboxContainerElementProps; import org.eclipse.sirius.components.forms.validation.DiagnosticComponent; import org.eclipse.sirius.components.forms.validation.DiagnosticComponentProps; @@ -45,8 +48,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); FlexboxContainerDescription flexboxContainerDescription = this.props.getFlexboxContainerDescription(); - String id = flexboxContainerDescription.getIdProvider().apply(variableManager); String label = flexboxContainerDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, flexboxContainerDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, flexboxContainerDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = flexboxContainerDescription.getIdProvider().apply(idVariableManager); + Boolean readOnly = flexboxContainerDescription.getIsReadOnlyProvider().apply(variableManager); FlexDirection flexdirection = flexboxContainerDescription.getFlexDirection(); var borderStyle = flexboxContainerDescription.getBorderStyleProvider().apply(variableManager); @@ -54,14 +63,18 @@ public Element render() { List children = new ArrayList<>(); List childrenWidgets = new ArrayList<>(); - - flexboxContainerDescription.getChildren().forEach(widget -> { - var optionalSelf = variableManager.get(VariableManager.SELF, Object.class); - - if (optionalSelf.isPresent()) { - VariableManager childVariableManager = variableManager.createChild(); - childVariableManager.put(VariableManager.SELF, optionalSelf.get()); - childrenWidgets.add(new Element(WidgetComponent.class, new WidgetComponentProps(childVariableManager, widget, this.props.getWidgetDescriptors()))); + VariableManager childrenVariableManager = variableManager.createChild(); + childrenVariableManager.put("parentElementId", id); + flexboxContainerDescription.getChildren().forEach(controlDescription -> { + if (controlDescription instanceof AbstractWidgetDescription widgetDescription) { + WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childrenVariableManager, widgetDescription, this.props.getWidgetDescriptors()); + childrenWidgets.add(new Element(WidgetComponent.class, widgetComponentProps)); + } else if (controlDescription instanceof ForDescription forDescription) { + ForComponentProps forComponentProps = new ForComponentProps(childrenVariableManager, forDescription, this.props.getWidgetDescriptors()); + childrenWidgets.add(new Element(ForComponent.class, forComponentProps)); + } else if (controlDescription instanceof IfDescription ifDescription) { + IfComponentProps ifComponentProps = new IfComponentProps(childrenVariableManager, ifDescription, this.props.getWidgetDescriptors()); + childrenWidgets.add(new Element(IfComponent.class, ifComponentProps)); } }); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ForComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ForComponent.java index 97f984d34a..3cd109e2e9 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ForComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ForComponent.java @@ -15,6 +15,8 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.sirius.components.forms.description.AbstractControlDescription; +import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; import org.eclipse.sirius.components.forms.description.ForDescription; import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.representations.Element; @@ -48,13 +50,21 @@ public Element render() { for (Object object : objects) { VariableManager childVariableManager = variableManager.createChild(); childVariableManager.put(forDescription.getIterator(), object); - + childVariableManager.put("parentElementId", forDescription.getId()); List forChildren = new ArrayList<>(); - List ifDescriptions = forDescription.getIfDescriptions(); - for (IfDescription ifDescription : ifDescriptions) { - IfComponentProps ifComponentProps = new IfComponentProps(childVariableManager, ifDescription, this.props.getWidgetDescriptors()); - forChildren.add(new Element(IfComponent.class, ifComponentProps)); + List controlDescriptions = forDescription.getControlDescriptions(); + for (AbstractControlDescription controlDescription : controlDescriptions) { + if (controlDescription instanceof AbstractWidgetDescription widgetDescription) { + WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childVariableManager, widgetDescription, this.props.getWidgetDescriptors()); + forChildren.add(new Element(WidgetComponent.class, widgetComponentProps)); + } else if (controlDescription instanceof ForDescription subForDescription) { + ForComponentProps forComponentProps = new ForComponentProps(childVariableManager, subForDescription, this.props.getWidgetDescriptors()); + forChildren.add(new Element(ForComponent.class, forComponentProps)); + } else if (controlDescription instanceof IfDescription ifDescription) { + IfComponentProps ifComponentProps = new IfComponentProps(childVariableManager, ifDescription, this.props.getWidgetDescriptors()); + forChildren.add(new Element(IfComponent.class, ifComponentProps)); + } } FragmentProps fragmentProps = new FragmentProps(forChildren); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FormComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FormComponent.java index 6a7327f0ed..567b22f6cb 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FormComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/FormComponent.java @@ -36,6 +36,30 @@ public class FormComponent implements IComponent { */ public static final String WIDGET_ID_PROVIDER_COUNTER = "widgetIdProviderCounter"; + /** + * The name of the variable used to store the id of the parent element in the {@link VariableManager} for a widget + * to compute its own id. + */ + public static final String PARENT_ELEMENT_ID = "parentElementId"; + + /** + * The name of the variable used to store the id of widget's description in the {@link VariableManager} for a widget + * to compute its own id. + */ + public static final String CONTROL_DESCRIPTION_ID = "controlDescriptionId"; + + /** + * The name of the variable used to store the id of widget's description in the {@link VariableManager} for a widget + * to compute its own id. + */ + public static final String TARGET_OBJECT_ID = "targetObjectId"; + + /** + * The name of the variable used to store the id of widget's description in the {@link VariableManager} for a widget + * to compute its own id. + */ + public static final String WIDGET_LABEL = "widgetLabel"; + private final FormComponentProps props; public FormComponent(FormComponentProps props) { @@ -48,8 +72,14 @@ public Element render() { FormDescription formDescription = this.props.getFormDescription(); WidgetIdCounter widgetIdCounter = new WidgetIdCounter(); - String id = formDescription.getIdProvider().apply(variableManager); String label = formDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, formDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, formDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = formDescription.getIdProvider().apply(idVariableManager); + String targetObjectId = formDescription.getTargetObjectIdProvider().apply(variableManager); List pageDescriptions = formDescription.getPageDescriptions(); @@ -65,23 +95,16 @@ public Element render() { } } - List children = candidates - .stream() - .map(candidate -> { - VariableManager childVariableManager = variableManager.createChild(); - childVariableManager.put(VariableManager.SELF, candidate); - childVariableManager.put(WIDGET_ID_PROVIDER_COUNTER, widgetIdCounter); - return childVariableManager; - }) - .flatMap(childVariableManager -> pageDescriptions - .stream() - .filter(pageDescription -> pageDescription.getCanCreatePredicate().test(childVariableManager)) - .map(pageDescription -> { - PageComponentProps pageComponentProps = new PageComponentProps(childVariableManager, pageDescription, this.props.getWidgetDescriptors()); - return new Element(PageComponent.class, pageComponentProps); - }) - ) - .toList(); + List children = candidates.stream().map(candidate -> { + VariableManager childVariableManager = variableManager.createChild(); + childVariableManager.put(VariableManager.SELF, candidate); + childVariableManager.put(WIDGET_ID_PROVIDER_COUNTER, widgetIdCounter); + childVariableManager.put("parentElementId", id); + return childVariableManager; + }).flatMap(childVariableManager -> pageDescriptions.stream().filter(pageDescription -> pageDescription.getCanCreatePredicate().test(childVariableManager)).map(pageDescription -> { + PageComponentProps pageComponentProps = new PageComponentProps(childVariableManager, pageDescription, this.props.getWidgetDescriptors()); + return new Element(PageComponent.class, pageComponentProps); + })).toList(); FormElementProps formElementProps = FormElementProps.newFormElementProps(id) .label(label) diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/GroupComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/GroupComponent.java index 0a9481e106..11f0dcc6cf 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/GroupComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/GroupComponent.java @@ -22,6 +22,7 @@ import org.eclipse.sirius.components.forms.description.ButtonDescription; import org.eclipse.sirius.components.forms.description.ForDescription; import org.eclipse.sirius.components.forms.description.GroupDescription; +import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.forms.elements.GroupElementProps; import org.eclipse.sirius.components.representations.Element; import org.eclipse.sirius.components.representations.Fragment; @@ -60,19 +61,25 @@ public Element render() { String label = groupDescription.getLabelProvider().apply(groupVariableManager); GroupDisplayMode displayMode = groupDescription.getDisplayModeProvider().apply(groupVariableManager); + VariableManager childrenVariableManager = groupVariableManager.createChild(); + childrenVariableManager.put("parentElementId", id); + List groupChildren = new ArrayList<>(); for (ButtonDescription toolbarActionDescription : groupDescription.getToolbarActionDescriptions()) { - groupChildren.add(new Element(ToolbarActionComponent.class, new ToolbarActionComponentProps(groupVariableManager, toolbarActionDescription))); + groupChildren.add(new Element(ToolbarActionComponent.class, new ToolbarActionComponentProps(childrenVariableManager, toolbarActionDescription))); } List controlDescriptions = groupDescription.getControlDescriptions(); for (AbstractControlDescription controlDescription : controlDescriptions) { if (controlDescription instanceof AbstractWidgetDescription widgetDescription) { - WidgetComponentProps widgetComponentProps = new WidgetComponentProps(groupVariableManager, widgetDescription, this.props.getWidgetDescriptors()); + WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childrenVariableManager, widgetDescription, this.props.getWidgetDescriptors()); groupChildren.add(new Element(WidgetComponent.class, widgetComponentProps)); } else if (controlDescription instanceof ForDescription forDescription) { - ForComponentProps forComponentProps = new ForComponentProps(groupVariableManager, forDescription, this.props.getWidgetDescriptors()); + ForComponentProps forComponentProps = new ForComponentProps(childrenVariableManager, forDescription, this.props.getWidgetDescriptors()); groupChildren.add(new Element(ForComponent.class, forComponentProps)); + } else if (controlDescription instanceof IfDescription ifDescription) { + IfComponentProps ifComponentProps = new IfComponentProps(childrenVariableManager, ifDescription, this.props.getWidgetDescriptors()); + groupChildren.add(new Element(IfComponent.class, ifComponentProps)); } } diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/IfComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/IfComponent.java index 6e59883aab..21a6ffb576 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/IfComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/IfComponent.java @@ -12,8 +12,15 @@ *******************************************************************************/ package org.eclipse.sirius.components.forms.components; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; +import org.eclipse.sirius.components.forms.description.ForDescription; import org.eclipse.sirius.components.forms.description.IfDescription; import org.eclipse.sirius.components.representations.Element; +import org.eclipse.sirius.components.representations.Fragment; +import org.eclipse.sirius.components.representations.FragmentProps; import org.eclipse.sirius.components.representations.IComponent; import org.eclipse.sirius.components.representations.VariableManager; @@ -34,12 +41,28 @@ public IfComponent(IfComponentProps props) { public Element render() { VariableManager variableManager = this.props.getVariableManager(); IfDescription ifDescription = this.props.getIfDescription(); - Boolean result = ifDescription.getPredicate().apply(variableManager); - if (result.booleanValue()) { - WidgetComponentProps widgetComponentProps = new WidgetComponentProps(variableManager, ifDescription.getWidgetDescription(), this.props.getWidgetDescriptors()); - return new Element(WidgetComponent.class, widgetComponentProps); + Boolean testResult = ifDescription.getPredicate().apply(variableManager); + + List children = new ArrayList<>(); + if (testResult.booleanValue()) { + VariableManager childrenVariableManager = variableManager.createChild(); + childrenVariableManager.put("parentElementId", ifDescription.getId()); + for (var controlDescription : ifDescription.getChildrenDescription()) { + if (controlDescription instanceof AbstractWidgetDescription widgetDescription) { + WidgetComponentProps widgetComponentProps = new WidgetComponentProps(childrenVariableManager, widgetDescription, this.props.getWidgetDescriptors()); + children.add(new Element(WidgetComponent.class, widgetComponentProps)); + } else if (controlDescription instanceof ForDescription forDescription) { + ForComponentProps forComponentProps = new ForComponentProps(childrenVariableManager, forDescription, this.props.getWidgetDescriptors()); + children.add(new Element(ForComponent.class, forComponentProps)); + } else if (controlDescription instanceof IfDescription subIfDescription) { + IfComponentProps ifComponentProps = new IfComponentProps(childrenVariableManager, subIfDescription, this.props.getWidgetDescriptors()); + children.add(new Element(IfComponent.class, ifComponentProps)); + } + } } - return null; + + FragmentProps fragmentProps = new FragmentProps(children); + return new Fragment(fragmentProps); } } diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ImageComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ImageComponent.java index 9626825eae..44eca38bc2 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ImageComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ImageComponent.java @@ -42,8 +42,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ImageDescription imageDescription = this.props.getImageDescription(); - String id = imageDescription.getIdProvider().apply(variableManager); String label = imageDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, imageDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, imageDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = imageDescription.getIdProvider().apply(idVariableManager); + String iconURL = imageDescription.getIconURLProvider().apply(variableManager); String url = imageDescription.getUrlProvider().apply(variableManager); String maxWidth = imageDescription.getMaxWidthProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LabelWidgetComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LabelWidgetComponent.java index 85fce42a8d..26f10ca3a7 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LabelWidgetComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LabelWidgetComponent.java @@ -42,8 +42,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); LabelDescription labelDescription = this.props.getLabelDescription(); - String id = labelDescription.getIdProvider().apply(variableManager); String label = labelDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, labelDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, labelDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = labelDescription.getIdProvider().apply(idVariableManager); + String value = labelDescription.getValueProvider().apply(variableManager); var style = labelDescription.getStyleProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LinkComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LinkComponent.java index 22992eeb93..13a0cb6f98 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LinkComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/LinkComponent.java @@ -42,8 +42,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); LinkDescription linkDescription = this.props.getLinkDescription(); - String id = linkDescription.getIdProvider().apply(variableManager); String label = linkDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, linkDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, linkDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = linkDescription.getIdProvider().apply(idVariableManager); + String iconURL = linkDescription.getIconURLProvider().apply(variableManager); String url = linkDescription.getUrlProvider().apply(variableManager); LinkStyle style = linkDescription.getStyleProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ListComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ListComponent.java index 2d872bb7fc..9983219a1e 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ListComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ListComponent.java @@ -52,8 +52,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ListDescription listDescription = this.props.getListDescription(); - String id = listDescription.getIdProvider().apply(variableManager); String label = listDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, listDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, listDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = listDescription.getIdProvider().apply(idVariableManager); + String iconURL = listDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = listDescription.getIsReadOnlyProvider().apply(variableManager); List itemCandidates = listDescription.getItemsProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/MultiSelectComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/MultiSelectComponent.java index b1c81a03ce..5767463795 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/MultiSelectComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/MultiSelectComponent.java @@ -49,8 +49,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); MultiSelectDescription multiSelectDescription = this.props.getMultiSelectDescription(); - String id = multiSelectDescription.getIdProvider().apply(variableManager); String label = multiSelectDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, multiSelectDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, multiSelectDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = multiSelectDescription.getIdProvider().apply(idVariableManager); + String iconURL = multiSelectDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = multiSelectDescription.getIsReadOnlyProvider().apply(variableManager); List optionCandidates = multiSelectDescription.getOptionsProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/PageComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/PageComponent.java index 6ab490dc1e..59c6f2df77 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/PageComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/PageComponent.java @@ -49,17 +49,19 @@ public Element render() { VariableManager pageVariableManager = variableManager.createChild(); pageVariableManager.put(VariableManager.SELF, semanticElement); - String id = pageDescription.getIdProvider().apply(pageVariableManager); String label = pageDescription.getLabelProvider().apply(pageVariableManager); + String id = pageDescription.getIdProvider().apply(pageVariableManager); List pageChildren = new ArrayList<>(); + VariableManager childrenVariableManager = pageVariableManager.createChild(); + childrenVariableManager.put("parentElementId", id); pageDescription.getToolbarActionDescriptions().stream() - .map(toolbarActionDescription -> new Element(ToolbarActionComponent.class, new ToolbarActionComponentProps(pageVariableManager, toolbarActionDescription))) + .map(toolbarActionDescription -> new Element(ToolbarActionComponent.class, new ToolbarActionComponentProps(childrenVariableManager, toolbarActionDescription))) .forEach(pageChildren::add); pageDescription.getGroupDescriptions().stream() - .map(groupDescription -> new Element(GroupComponent.class, new GroupComponentProps(pageVariableManager, groupDescription, this.props.getWidgetDescriptors()))) + .map(groupDescription -> new Element(GroupComponent.class, new GroupComponentProps(childrenVariableManager, groupDescription, this.props.getWidgetDescriptors()))) .forEach(pageChildren::add); PageElementProps pageElementProps = PageElementProps.newPageElementProps(id) diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RadioComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RadioComponent.java index 7316f0a1f0..a9f75df94e 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RadioComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RadioComponent.java @@ -49,8 +49,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); RadioDescription radioDescription = this.props.getRadioDescription(); - String id = radioDescription.getIdProvider().apply(variableManager); String label = radioDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, radioDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, radioDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = radioDescription.getIdProvider().apply(idVariableManager); + String iconURL = radioDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = radioDescription.getIsReadOnlyProvider().apply(variableManager); List optionCandidates = radioDescription.getOptionsProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RichTextComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RichTextComponent.java index 9875bf3559..5dcf4465d3 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RichTextComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/RichTextComponent.java @@ -45,8 +45,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); RichTextDescription richTextDescription = this.props.getRichTextDescription(); - String id = richTextDescription.getIdProvider().apply(variableManager); String label = richTextDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, richTextDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, richTextDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = richTextDescription.getIdProvider().apply(idVariableManager); + String iconURL = richTextDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = richTextDescription.getIsReadOnlyProvider().apply(variableManager); String value = richTextDescription.getValueProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/SelectComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/SelectComponent.java index 32482f7da3..8d6b717d24 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/SelectComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/SelectComponent.java @@ -48,8 +48,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); SelectDescription selectDescription = this.props.getSelectDescription(); - String id = selectDescription.getIdProvider().apply(variableManager); String label = selectDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, selectDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, selectDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = selectDescription.getIdProvider().apply(idVariableManager); + String iconURL = selectDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = selectDescription.getIsReadOnlyProvider().apply(variableManager); List optionCandidates = selectDescription.getOptionsProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextareaComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextareaComponent.java index f52fc1b9d1..f316afdd8e 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextareaComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextareaComponent.java @@ -46,8 +46,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); TextareaDescription textareaDescription = this.props.getTextareaDescription(); - String id = textareaDescription.getIdProvider().apply(variableManager); String label = textareaDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, textareaDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, textareaDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = textareaDescription.getIdProvider().apply(idVariableManager); + String iconURL = textareaDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = textareaDescription.getIsReadOnlyProvider().apply(variableManager); String value = textareaDescription.getValueProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextfieldComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextfieldComponent.java index 6d174e1f4b..0ba8595b05 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextfieldComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TextfieldComponent.java @@ -46,8 +46,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); TextfieldDescription textfieldDescription = this.props.getTextfieldDescription(); - String id = textfieldDescription.getIdProvider().apply(variableManager); String label = textfieldDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, textfieldDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, textfieldDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = textfieldDescription.getIdProvider().apply(idVariableManager); + String iconURL = textfieldDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = textfieldDescription.getIsReadOnlyProvider().apply(variableManager); String value = textfieldDescription.getValueProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ToolbarActionComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ToolbarActionComponent.java index 29f7e26793..7c8e94c513 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ToolbarActionComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/ToolbarActionComponent.java @@ -45,8 +45,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ButtonDescription buttonDescription = this.props.getButtonDescription(); - String id = buttonDescription.getIdProvider().apply(variableManager); String label = buttonDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, buttonDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, buttonDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = buttonDescription.getIdProvider().apply(idVariableManager); + String iconURL = buttonDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = buttonDescription.getIsReadOnlyProvider().apply(variableManager); String toolbarActionLabel = buttonDescription.getButtonLabelProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TreeComponent.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TreeComponent.java index 29cbd1c314..c2d5d38c39 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TreeComponent.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/components/TreeComponent.java @@ -49,8 +49,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); TreeDescription treeDescription = this.props.getTreeDescription(); - String id = treeDescription.getIdProvider().apply(variableManager); String label = treeDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, treeDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, treeDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = treeDescription.getIdProvider().apply(idVariableManager); + String iconURL = treeDescription.getIconURLProvider().apply(variableManager); List children = List.of(new Element(DiagnosticComponent.class, new DiagnosticComponentProps(treeDescription, variableManager))); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/AbstractControlDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/AbstractControlDescription.java index 6025c0f8ee..3e72533256 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/AbstractControlDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/AbstractControlDescription.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2020 Obeo. + * Copyright (c) 2019, 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 @@ -12,6 +12,10 @@ *******************************************************************************/ package org.eclipse.sirius.components.forms.description; +import java.util.function.Function; + +import org.eclipse.sirius.components.representations.VariableManager; + /** * Common superclass of all the controls. * @@ -20,7 +24,13 @@ public abstract class AbstractControlDescription { protected String id; + protected Function targetObjectIdProvider; + public String getId() { return this.id; } + + public Function getTargetObjectIdProvider() { + return this.targetObjectIdProvider; + } } diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ButtonDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ButtonDescription.java index 909bf10328..65c2e476d7 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ButtonDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ButtonDescription.java @@ -97,6 +97,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -128,6 +130,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -186,6 +193,7 @@ public Builder helpTextProvider(Function helpTextProvid public ButtonDescription build() { ButtonDescription buttonDescription = new ButtonDescription(); buttonDescription.id = Objects.requireNonNull(this.id); + buttonDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); buttonDescription.idProvider = Objects.requireNonNull(this.idProvider); buttonDescription.labelProvider = Objects.requireNonNull(this.labelProvider); buttonDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ChartWidgetDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ChartWidgetDescription.java index 0d6cee27e4..0f9bbf3410 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ChartWidgetDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ChartWidgetDescription.java @@ -78,6 +78,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -103,6 +105,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -141,6 +148,7 @@ public Builder helpTextProvider(Function helpTextProvid public ChartWidgetDescription build() { ChartWidgetDescription chartDescription = new ChartWidgetDescription(); chartDescription.id = Objects.requireNonNull(this.id); + chartDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); chartDescription.idProvider = Objects.requireNonNull(this.idProvider); chartDescription.labelProvider = Objects.requireNonNull(this.labelProvider); chartDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/CheckboxDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/CheckboxDescription.java index ca26ebbdc7..4ed63b5790 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/CheckboxDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/CheckboxDescription.java @@ -93,6 +93,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -122,6 +124,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -175,6 +182,7 @@ public Builder helpTextProvider(Function helpTextProvid public CheckboxDescription build() { CheckboxDescription checkboxDescription = new CheckboxDescription(); checkboxDescription.id = Objects.requireNonNull(this.id); + checkboxDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); checkboxDescription.idProvider = Objects.requireNonNull(this.idProvider); checkboxDescription.labelProvider = Objects.requireNonNull(this.labelProvider); checkboxDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/FlexboxContainerDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/FlexboxContainerDescription.java index 47218cb61a..9c1237c465 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/FlexboxContainerDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/FlexboxContainerDescription.java @@ -36,7 +36,7 @@ public final class FlexboxContainerDescription extends AbstractWidgetDescription private FlexDirection flexDirection; - private List children; + private List children; private Function borderStyleProvider; @@ -56,7 +56,7 @@ public FlexDirection getFlexDirection() { return this.flexDirection; } - public List getChildren() { + public List getChildren() { return this.children; } @@ -86,13 +86,15 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function isReadOnlyProvider = variableManager -> false; private FlexDirection flexDirection; - private List children; + private List children; private Function> diagnosticsProvider; @@ -113,6 +115,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -128,7 +135,7 @@ public Builder flexDirection(FlexDirection flexDirection) { return this; } - public Builder children(List children) { + public Builder children(List children) { this.children = Objects.requireNonNull(children); return this; } @@ -161,6 +168,7 @@ public Builder borderStyleProvider(Function> iterableProvider; - private List ifDescriptions; + private List controlDescriptions; private ForDescription() { // Prevent instantiation @@ -46,8 +46,8 @@ public Function> getIterableProvider() { return this.iterableProvider; } - public List getIfDescriptions() { - return this.ifDescriptions; + public List getControlDescriptions() { + return this.controlDescriptions; } public static Builder newForDescription(String id) { @@ -69,16 +69,23 @@ public String toString() { public static final class Builder { private String id; + private Function targetObjectIdProvider; + private String iterator; private Function> iterableProvider; - private List ifDescriptions; + private List controlDescriptions; private Builder(String id) { this.id = Objects.requireNonNull(id); } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder iterator(String iterator) { this.iterator = Objects.requireNonNull(iterator); return this; @@ -89,17 +96,18 @@ public Builder iterableProvider(Function> iterableProvi return this; } - public Builder ifDescriptions(List ifDescriptions) { - this.ifDescriptions = Objects.requireNonNull(ifDescriptions); + public Builder controlDescriptions(List controlDescriptions) { + this.controlDescriptions = Objects.requireNonNull(controlDescriptions); return this; } public ForDescription build() { ForDescription forDescription = new ForDescription(); forDescription.id = Objects.requireNonNull(this.id); + forDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); forDescription.iterator = Objects.requireNonNull(this.iterator); forDescription.iterableProvider = Objects.requireNonNull(this.iterableProvider); - forDescription.ifDescriptions = Objects.requireNonNull(this.ifDescriptions); + forDescription.controlDescriptions = Objects.requireNonNull(this.controlDescriptions); return forDescription; } } diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/IfDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/IfDescription.java index b1700f8f94..0cc47028c0 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/IfDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/IfDescription.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. + * Copyright (c) 2019, 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 @@ -13,6 +13,7 @@ package org.eclipse.sirius.components.forms.description; import java.text.MessageFormat; +import java.util.List; import java.util.Objects; import java.util.function.Function; @@ -25,27 +26,22 @@ * @author sbegaudeau */ @Immutable -public final class IfDescription { - private String id; +public final class IfDescription extends AbstractControlDescription { private Function predicate; - private AbstractWidgetDescription widgetDescription; + private List childrenDescription; private IfDescription() { // Prevent instantiation } - public String getId() { - return this.id; - } - public Function getPredicate() { return this.predicate; } - public AbstractWidgetDescription getWidgetDescription() { - return this.widgetDescription; + public List getChildrenDescription() { + return this.childrenDescription; } public static Builder newIfDescription(String id) { @@ -66,30 +62,35 @@ public String toString() { @SuppressWarnings("checkstyle:HiddenField") public static final class Builder { private String id; - + private Function targetObjectIdProvider; private Function predicate; - - private AbstractWidgetDescription widgetDescription; + private List childrenDescription; private Builder(String id) { this.id = Objects.requireNonNull(id); } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder predicate(Function predicate) { this.predicate = Objects.requireNonNull(predicate); return this; } - public Builder widgetDescription(AbstractWidgetDescription widgetDescription) { - this.widgetDescription = Objects.requireNonNull(widgetDescription); + public Builder childrenDescription(List childrenDescription) { + this.childrenDescription = Objects.requireNonNull(childrenDescription); return this; } public IfDescription build() { IfDescription ifDescription = new IfDescription(); ifDescription.id = Objects.requireNonNull(this.id); + ifDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); ifDescription.predicate = Objects.requireNonNull(this.predicate); - ifDescription.widgetDescription = Objects.requireNonNull(this.widgetDescription); + ifDescription.childrenDescription = Objects.requireNonNull(this.childrenDescription); return ifDescription; } } diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ImageDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ImageDescription.java index 529ef53297..9fd2726f45 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ImageDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ImageDescription.java @@ -84,6 +84,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -111,6 +113,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -154,6 +161,7 @@ public Builder helpTextProvider(Function helpTextProvid public ImageDescription build() { ImageDescription imageDescription = new ImageDescription(); imageDescription.id = Objects.requireNonNull(this.id); + imageDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); imageDescription.idProvider = Objects.requireNonNull(this.idProvider); imageDescription.labelProvider = Objects.requireNonNull(this.labelProvider); imageDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LabelDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LabelDescription.java index 56b00ae889..80fee775ac 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LabelDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LabelDescription.java @@ -79,6 +79,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private final Function isReadOnlyProvider = variableManager -> true; @@ -104,6 +106,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -142,6 +149,7 @@ public Builder helpTextProvider(Function helpTextProvid public LabelDescription build() { LabelDescription textfieldDescription = new LabelDescription(); textfieldDescription.id = Objects.requireNonNull(this.id); + textfieldDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); textfieldDescription.idProvider = Objects.requireNonNull(this.idProvider); textfieldDescription.labelProvider = Objects.requireNonNull(this.labelProvider); textfieldDescription.isReadOnlyProvider = Objects.requireNonNull(this.isReadOnlyProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LinkDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LinkDescription.java index a3c339ca65..66e6312e49 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LinkDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/LinkDescription.java @@ -85,6 +85,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -112,6 +114,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -155,6 +162,7 @@ public Builder helpTextProvider(Function helpTextProvid public LinkDescription build() { LinkDescription linkDescription = new LinkDescription(); linkDescription.id = this.id; + linkDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); linkDescription.idProvider = Objects.requireNonNull(this.idProvider); linkDescription.labelProvider = Objects.requireNonNull(this.labelProvider); linkDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ListDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ListDescription.java index 97dbb79c88..4ee5eac338 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ListDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/ListDescription.java @@ -128,6 +128,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -169,6 +171,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -252,6 +259,7 @@ public Builder helpTextProvider(Function helpTextProvid public ListDescription build() { ListDescription listDescription = new ListDescription(); listDescription.id = Objects.requireNonNull(this.id); + listDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); listDescription.idProvider = Objects.requireNonNull(this.idProvider); listDescription.labelProvider = Objects.requireNonNull(this.labelProvider); listDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/MultiSelectDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/MultiSelectDescription.java index 47b7716227..345b29c896 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/MultiSelectDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/MultiSelectDescription.java @@ -119,6 +119,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -156,6 +158,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -229,6 +236,7 @@ public Builder helpTextProvider(Function helpTextProvid public MultiSelectDescription build() { MultiSelectDescription multiSelectDescription = new MultiSelectDescription(); multiSelectDescription.id = Objects.requireNonNull(this.id); + multiSelectDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); multiSelectDescription.idProvider = Objects.requireNonNull(this.idProvider); multiSelectDescription.labelProvider = Objects.requireNonNull(this.labelProvider); multiSelectDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RadioDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RadioDescription.java index 8b71c94ad7..f3ac74af6f 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RadioDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RadioDescription.java @@ -111,6 +111,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -146,6 +148,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -214,6 +221,7 @@ public Builder helpTextProvider(Function helpTextProvid public RadioDescription build() { RadioDescription radioDescription = new RadioDescription(); radioDescription.id = Objects.requireNonNull(this.id); + radioDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); radioDescription.idProvider = Objects.requireNonNull(this.idProvider); radioDescription.labelProvider = Objects.requireNonNull(this.labelProvider); radioDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RichTextDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RichTextDescription.java index 70a2540f36..e35e063709 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RichTextDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/RichTextDescription.java @@ -85,6 +85,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -112,6 +114,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -160,6 +167,7 @@ public Builder helpTextProvider(Function helpTextProvid public RichTextDescription build() { RichTextDescription richtextDescription = new RichTextDescription(); richtextDescription.id = Objects.requireNonNull(this.id); + richtextDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); richtextDescription.idProvider = Objects.requireNonNull(this.idProvider); richtextDescription.labelProvider = Objects.requireNonNull(this.labelProvider); richtextDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/SelectDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/SelectDescription.java index 94135e8b47..e917fd3f18 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/SelectDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/SelectDescription.java @@ -117,6 +117,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -154,6 +156,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -227,6 +234,7 @@ public Builder helpTextProvider(Function helpTextProvid public SelectDescription build() { SelectDescription selectDescription = new SelectDescription(); selectDescription.id = Objects.requireNonNull(this.id); + selectDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); selectDescription.idProvider = Objects.requireNonNull(this.idProvider); selectDescription.labelProvider = Objects.requireNonNull(this.labelProvider); selectDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextareaDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextareaDescription.java index a35999359f..3cf07c3ad5 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextareaDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextareaDescription.java @@ -99,6 +99,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -130,6 +132,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -188,6 +195,7 @@ public Builder helpTextProvider(Function helpTextProvid public TextareaDescription build() { TextareaDescription textareaDescription = new TextareaDescription(); textareaDescription.id = Objects.requireNonNull(this.id); + textareaDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); textareaDescription.idProvider = Objects.requireNonNull(this.idProvider); textareaDescription.labelProvider = Objects.requireNonNull(this.labelProvider); textareaDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextfieldDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextfieldDescription.java index eb3c6262d1..2534d2ef3d 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextfieldDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TextfieldDescription.java @@ -99,6 +99,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -130,6 +132,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -188,6 +195,7 @@ public Builder helpTextProvider(Function helpTextProvid public TextfieldDescription build() { TextfieldDescription textfieldDescription = new TextfieldDescription(); textfieldDescription.id = Objects.requireNonNull(this.id); + textfieldDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); textfieldDescription.idProvider = Objects.requireNonNull(this.idProvider); textfieldDescription.labelProvider = Objects.requireNonNull(this.labelProvider); textfieldDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TreeDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TreeDescription.java index a6080a6909..8a7b4399c4 100644 --- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TreeDescription.java +++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/TreeDescription.java @@ -114,6 +114,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -151,6 +153,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -219,6 +226,7 @@ public Builder helpTextProvider(Function helpTextProvid public TreeDescription build() { TreeDescription treeDescription = new TreeDescription(); treeDescription.id = Objects.requireNonNull(this.id); + treeDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); treeDescription.idProvider = Objects.requireNonNull(this.idProvider); treeDescription.labelProvider = Objects.requireNonNull(this.labelProvider); treeDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-forms/src/test/java/org/eclipse/sirius/components/forms/render/RenderTextfieldTest.java b/packages/forms/backend/sirius-components-forms/src/test/java/org/eclipse/sirius/components/forms/render/RenderTextfieldTest.java index 76aff95496..4a7198c64d 100644 --- a/packages/forms/backend/sirius-components-forms/src/test/java/org/eclipse/sirius/components/forms/render/RenderTextfieldTest.java +++ b/packages/forms/backend/sirius-components-forms/src/test/java/org/eclipse/sirius/components/forms/render/RenderTextfieldTest.java @@ -75,6 +75,7 @@ public void setup() { public void testRenderTextfieldWithoutProposalProvider() { // @formatter:off TextfieldDescription textDescription = TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID) + .targetObjectIdProvider(this.constantProvider(TEXTFIELD_ID)) .idProvider(this.constantProvider(TEXTFIELD_ID)) .labelProvider(this.constantProvider(LABEL)) .valueProvider(this.constantProvider(VALUE)) @@ -105,6 +106,7 @@ public void testRenderTextfieldWithProposalProvider() { // @formatter:off TextfieldDescription textDescription = TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID) + .targetObjectIdProvider(this.constantProvider(TEXTFIELD_ID)) .idProvider(this.constantProvider(TEXTFIELD_ID)) .labelProvider(this.constantProvider(LABEL)) .valueProvider(this.constantProvider(VALUE)) @@ -134,6 +136,7 @@ public void testRenderTextfieldWithProposalProvider() { public void testRenderTextfieldWithHelpTextProvider() { // @formatter:off TextfieldDescription textDescription = TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID) + .targetObjectIdProvider(this.constantProvider(TEXTFIELD_ID)) .idProvider(this.constantProvider(TEXTFIELD_ID)) .labelProvider(this.constantProvider(LABEL)) .valueProvider(this.constantProvider(VALUE)) @@ -168,6 +171,7 @@ public void testRenderTextfieldWithHelpTextProvider() { public void testRenderTextfieldWithReadOnlyProvider() { // @formatter:off TextfieldDescription textDescription = TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID) + .targetObjectIdProvider(this.constantProvider(TEXTFIELD_ID)) .idProvider(this.constantProvider(TEXTFIELD_ID)) .labelProvider(this.constantProvider(LABEL)) .valueProvider(this.constantProvider(VALUE)) @@ -223,6 +227,7 @@ private FormDescription createSingleWidgetForm(TextfieldDescription textDescript .semanticElementsProvider(this.constantProvider(List.of(this.self))) .build(); FormDescription formDescription = FormDescription.newFormDescription("formDescriptionId") + .targetObjectIdProvider(this.constantProvider(TEXTFIELD_ID)) .label("formDescriptionLabel") .idProvider(this.constantProvider("formId")) .labelProvider(this.constantProvider("formLabel")) diff --git a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetComponent.java b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetComponent.java index 6b84040745..916c47b7e1 100644 --- a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetComponent.java +++ b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetComponent.java @@ -18,6 +18,7 @@ import org.eclipse.emf.ecore.EStructuralFeature.Setting; import org.eclipse.sirius.components.forms.ClickEventKind; +import org.eclipse.sirius.components.forms.components.FormComponent; import org.eclipse.sirius.components.representations.Element; import org.eclipse.sirius.components.representations.IComponent; import org.eclipse.sirius.components.representations.IStatus; @@ -45,8 +46,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); ReferenceWidgetDescription referenceDescription = this.props.getReferenceWidgetDescription(); - String id = referenceDescription.getIdProvider().apply(variableManager); String label = referenceDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, referenceDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, referenceDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = referenceDescription.getIdProvider().apply(idVariableManager); + String iconURL = referenceDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = referenceDescription.getIsReadOnlyProvider().apply(variableManager); diff --git a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescription.java b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescription.java index 3dedc3543f..878ee5068f 100644 --- a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescription.java +++ b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescription.java @@ -122,6 +122,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -155,6 +157,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -218,6 +225,7 @@ public Builder styleProvider(Function sty public ReferenceWidgetDescription build() { ReferenceWidgetDescription referenceWidgetDescription = new ReferenceWidgetDescription(); referenceWidgetDescription.id = Objects.requireNonNull(this.id); + referenceWidgetDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); referenceWidgetDescription.idProvider = Objects.requireNonNull(this.idProvider); referenceWidgetDescription.labelProvider = Objects.requireNonNull(this.labelProvider); referenceWidgetDescription.iconURLProvider = Objects.requireNonNull(this.iconURLProvider); diff --git a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescriptionConverterSwitch.java b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescriptionConverterSwitch.java index 37c15ffab9..1a8759c748 100644 --- a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescriptionConverterSwitch.java +++ b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetDescriptionConverterSwitch.java @@ -61,11 +61,14 @@ public class ReferenceWidgetDescriptionConverterSwitch extends ReferenceSwitch semanticTargetIdProvider; + public ReferenceWidgetDescriptionConverterSwitch(AQLInterpreter interpreter, IObjectService objectService, IEditService editService, IFeedbackMessageService feedbackMessageService) { this.interpreter = Objects.requireNonNull(interpreter); this.objectService = Objects.requireNonNull(objectService); this.editService = editService; this.feedbackMessageService = feedbackMessageService; + this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(objectService::getId).orElse(null); } @Override @@ -85,6 +88,7 @@ public AbstractWidgetDescription caseReferenceWidgetDescription(ReferenceWidgetD }; var builder = org.eclipse.sirius.components.widget.reference.ReferenceWidgetDescription.newReferenceWidgetDescription(descriptionId) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(new WidgetIdProvider()) .labelProvider(variableManager -> this.getReferenceLabel(referenceDescription, variableManager)) .iconURLProvider(variableManager -> "") diff --git a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetPreviewConverterProvider.java b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetPreviewConverterProvider.java index e3002e380c..95b7a98bac 100644 --- a/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetPreviewConverterProvider.java +++ b/packages/forms/backend/sirius-components-widget-reference/src/main/java/org/eclipse/sirius/components/widget/reference/ReferenceWidgetPreviewConverterProvider.java @@ -46,6 +46,7 @@ public AbstractWidgetDescription caseReferenceWidgetDescription(org.eclipse.siri String id = formDescriptionEditorDescription.getTargetObjectIdProvider().apply(childVariableManager); var builder = ReferenceWidgetDescription.newReferenceWidgetDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> ReferenceWidgetPreviewConverterProvider.this.getWidgetLabel(referenceDescription, "Reference")) .iconURLProvider(variableManager -> "") .isReadOnlyProvider(variableManager -> false) diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java index d7d47dd917..b8e343acef 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java @@ -102,11 +102,11 @@ private GroupDescription createGroup() { group.setName("Core Properties"); group.setLabelExpression("Core Properties"); group.setSemanticCandidatesExpression("aql:self"); - group.getWidgets().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); - group.getWidgets().add(this.createTypeSelectorWidget()); - group.getWidgets().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getWidgets().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); - group.getWidgets().add(this.createCardinalityLabel()); + group.getChildren().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); + group.getChildren().add(this.createTypeSelectorWidget()); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createCardinalityLabel()); return group; } diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java index 12f9dfd171..b8e62b6b79 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java @@ -96,9 +96,9 @@ private GroupDescription createGroup() { group.setName("Core Properties"); group.setLabelExpression("Core Properties"); group.setSemanticCandidatesExpression("aql:self"); - group.getWidgets().add(this.createTypeSelectorWidget()); - group.getWidgets().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getWidgets().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createTypeSelectorWidget()); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); return group; } diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/papaya/view/overviewform/OverviewFormProvider.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/papaya/view/overviewform/OverviewFormProvider.java index 59e3932060..781bcf8a0f 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/papaya/view/overviewform/OverviewFormProvider.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/papaya/view/overviewform/OverviewFormProvider.java @@ -43,7 +43,7 @@ public RepresentationDescription create(IColorProvider colorProvider) { textfieldDescription.setLabelExpression("Root"); textfieldDescription.setValueExpression("root element"); textfieldDescription.setHelpExpression("aql:'This is a ' + self.eClass().name + ' element'"); - groupDescription.getWidgets().add(textfieldDescription); + groupDescription.getChildren().add(textfieldDescription); pageDescription.getGroups().add(groupDescription); formDescription.getPages().add(pageDescription); diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderComponent.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderComponent.java index 63e48184e9..554bf60b98 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderComponent.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderComponent.java @@ -15,6 +15,7 @@ import java.util.Objects; import java.util.function.Function; +import org.eclipse.sirius.components.forms.components.FormComponent; import org.eclipse.sirius.components.representations.Element; import org.eclipse.sirius.components.representations.IComponent; import org.eclipse.sirius.components.representations.IStatus; @@ -38,8 +39,14 @@ public Element render() { VariableManager variableManager = this.props.getVariableManager(); SliderDescription sliderDescription = this.props.getSliderDescription(); - String id = sliderDescription.getIdProvider().apply(variableManager); String label = sliderDescription.getLabelProvider().apply(variableManager); + + VariableManager idVariableManager = variableManager.createChild(); + idVariableManager.put(FormComponent.TARGET_OBJECT_ID, sliderDescription.getTargetObjectIdProvider().apply(variableManager)); + idVariableManager.put(FormComponent.CONTROL_DESCRIPTION_ID, sliderDescription.getId()); + idVariableManager.put(FormComponent.WIDGET_LABEL, label); + String id = sliderDescription.getIdProvider().apply(idVariableManager); + String iconURL = sliderDescription.getIconURLProvider().apply(variableManager); Boolean readOnly = sliderDescription.getIsReadOnlyProvider().apply(variableManager); int minValue = sliderDescription.getMinValueProvider().apply(variableManager); diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescription.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescription.java index 21be9a046e..d92975fabf 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescription.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescription.java @@ -95,6 +95,8 @@ public static final class Builder { private Function idProvider; + private Function targetObjectIdProvider; + private Function labelProvider; private Function iconURLProvider = variableManager -> null; @@ -120,6 +122,11 @@ public Builder idProvider(Function idProvider) { return this; } + public Builder targetObjectIdProvider(Function targetObjectIdProvider) { + this.targetObjectIdProvider = Objects.requireNonNull(targetObjectIdProvider); + return this; + } + public Builder labelProvider(Function labelProvider) { this.labelProvider = Objects.requireNonNull(labelProvider); return this; @@ -163,6 +170,7 @@ public Builder newValueHandler(Function newValueHandle public SliderDescription build() { SliderDescription sliderDescription = new SliderDescription(); sliderDescription.id = Objects.requireNonNull(this.id); + sliderDescription.targetObjectIdProvider = Objects.requireNonNull(this.targetObjectIdProvider); sliderDescription.idProvider = Objects.requireNonNull(this.idProvider); sliderDescription.labelProvider = Objects.requireNonNull(this.labelProvider); sliderDescription.iconURLProvider = this.iconURLProvider; // Optional on purpose diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterProvider.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterProvider.java index b2e3128cd8..a5103c258b 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterProvider.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterProvider.java @@ -31,7 +31,7 @@ public class SliderDescriptionConverterProvider implements IWidgetConverterProvi @Override public Switch getWidgetConverter(AQLInterpreter interpreter, IEditService editService, IObjectService objectService, IFeedbackMessageService feedbackMessageService) { - return new SliderDescriptionConverterSwitch(interpreter, editService, feedbackMessageService); + return new SliderDescriptionConverterSwitch(interpreter, editService, objectService, feedbackMessageService); } } diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterSwitch.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterSwitch.java index e7ac7790f0..0ae8b1699c 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterSwitch.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionConverterSwitch.java @@ -25,6 +25,7 @@ import org.eclipse.sirius.components.compatibility.utils.StringValueProvider; import org.eclipse.sirius.components.core.api.IEditService; import org.eclipse.sirius.components.core.api.IFeedbackMessageService; +import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription; import org.eclipse.sirius.components.interpreter.AQLInterpreter; import org.eclipse.sirius.components.interpreter.Result; @@ -52,10 +53,13 @@ public class SliderDescriptionConverterSwitch extends CustomwidgetsSwitch semanticTargetIdProvider; + + public SliderDescriptionConverterSwitch(AQLInterpreter interpreter, IEditService editService, IObjectService objectService, IFeedbackMessageService feedbackMessageService) { this.interpreter = Objects.requireNonNull(interpreter); this.editService = Objects.requireNonNull(editService); this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService); + this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(objectService::getId).orElse(null); } @Override @@ -70,6 +74,7 @@ public AbstractWidgetDescription caseSliderDescription(SliderDescription viewSli Function newValueHandler = this.getOperationsHandler(viewSliderDescription.getBody()); var builder = org.eclipse.sirius.web.sample.slider.SliderDescription.newSliderDescription(descriptionId) + .targetObjectIdProvider(this.semanticTargetIdProvider) .idProvider(idProvider) .labelProvider(labelProvider) .isReadOnlyProvider(isReadOnlyProvider) diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionPreviewConverterProvider.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionPreviewConverterProvider.java index ad847c0238..d5d7405577 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionPreviewConverterProvider.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/slider/SliderDescriptionPreviewConverterProvider.java @@ -42,6 +42,7 @@ public AbstractWidgetDescription caseSliderDescription(SliderDescription sliderD String id = formDescriptionEditorDescription.getTargetObjectIdProvider().apply(childVariableManager); var builder = org.eclipse.sirius.web.sample.slider.SliderDescription.newSliderDescription(UUID.randomUUID().toString()) .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") .labelProvider(vm -> SliderDescriptionPreviewConverterProvider.this.getWidgetLabel(sliderDescription, "Slider")) .minValueProvider(vm -> 0) .maxValueProvider(vm -> 100) diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Reference_Test_Form.view b/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Reference_Test_Form.view index 8897b29c94..deb99e3888 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Reference_Test_Form.view +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Reference_Test_Form.view @@ -3,10 +3,10 @@ - - + + - + diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Slider_Test_Form.view b/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Slider_Test_Form.view index 6da5af2c1a..e1fa39dc69 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Slider_Test_Form.view +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/resources/Slider_Test_Form.view @@ -3,14 +3,14 @@ - +