Skip to content

Commit

Permalink
[2236] Add support for For & If in Forms
Browse files Browse the repository at this point in the history
Bug: #2236
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
  • Loading branch information
pcdavid committed Aug 24, 2023
1 parent 296e9cc commit b7c067c
Show file tree
Hide file tree
Showing 99 changed files with 1,000 additions and 462 deletions.
@@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -44,16 +45,20 @@ public class EBooleanIfDescriptionProvider {

private final IPropertiesValidationProvider propertiesValidationProvider;

public EBooleanIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) {
private final Function<VariableManager, String> semanticTargetIdProvider;

public EBooleanIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function<VariableManager, String> 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
}
Expand All @@ -68,6 +73,7 @@ private Function<VariableManager, Boolean> getPredicate() {
private CheckboxDescription getCheckboxDescription() {
// @formatter:off
return CheckboxDescription.newCheckboxDescription(CHECKBOX_DESCRIPTION_ID)
.targetObjectIdProvider(this.semanticTargetIdProvider)
.idProvider(new WidgetIdProvider())
.labelProvider(this.getLabelProvider())
.valueProvider(this.getValueProvider())
Expand Down
@@ -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
Expand Down Expand Up @@ -58,16 +58,20 @@ public class EEnumIfDescriptionProvider {

private final IPropertiesValidationProvider propertiesValidationProvider;

public EEnumIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) {
private final Function<VariableManager, String> semanticTargetIdProvider;

public EEnumIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function<VariableManager, String> 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
}
Expand All @@ -86,6 +90,7 @@ private Function<VariableManager, Boolean> getPredicate() {
private RadioDescription getRadioDescription() {
// @formatter:off
return RadioDescription.newRadioDescription(RADIO_DESCRIPTION_ID)
.targetObjectIdProvider(this.semanticTargetIdProvider)
.idProvider(new WidgetIdProvider())
.labelProvider(this.getLabelProvider())
.optionsProvider(this.getOptionsProvider())
Expand Down
@@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -45,16 +46,20 @@ public class EStringIfDescriptionProvider {

private final IPropertiesValidationProvider propertiesValidationProvider;

public EStringIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider) {
private final Function<VariableManager, String> semanticTargetIdProvider;

public EStringIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider, Function<VariableManager, String> 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
}
Expand All @@ -72,6 +77,7 @@ private Function<VariableManager, Boolean> getPredicate() {
private TextareaDescription getTextareaDescription() {
// @formatter:off
return TextareaDescription.newTextareaDescription(TEXTAREA_DESCRIPTION_ID)
.targetObjectIdProvider(this.semanticTargetIdProvider)
.idProvider(new WidgetIdProvider())
.labelProvider(this.getLabelProvider())
.valueProvider(this.getValueProvider())
Expand Down
Expand Up @@ -53,18 +53,23 @@ public class MonoValuedNonContainmentReferenceIfDescriptionProvider {

private final Logger logger = LoggerFactory.getLogger(MonoValuedNonContainmentReferenceIfDescriptionProvider.class);

private final Function<VariableManager, String> semanticTargetIdProvider;

public MonoValuedNonContainmentReferenceIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IObjectService objectService,
IPropertiesValidationProvider propertiesValidationProvider) {
IPropertiesValidationProvider propertiesValidationProvider, Function<VariableManager, String> 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
}
Expand All @@ -84,6 +89,7 @@ private Function<VariableManager, Boolean> getPredicate() {
private SelectDescription getSelectDescription() {
// @formatter:off
return SelectDescription.newSelectDescription(SELECT_DESCRIPTION_ID)
.targetObjectIdProvider(this.semanticTargetIdProvider)
.idProvider(new WidgetIdProvider())
.labelProvider(this.getLabelProvider())
.valueProvider(this.getValueProvider())
Expand Down
Expand Up @@ -55,18 +55,22 @@ public class MultiValuedNonContainmentReferenceIfDescriptionProvider {

private final Logger logger = LoggerFactory.getLogger(MultiValuedNonContainmentReferenceIfDescriptionProvider.class);

private final Function<VariableManager, String> semanticTargetIdProvider;

public MultiValuedNonContainmentReferenceIfDescriptionProvider(ComposedAdapterFactory composedAdapterFactory, IObjectService objectService,
IPropertiesValidationProvider propertiesValidationProvider) {
IPropertiesValidationProvider propertiesValidationProvider, Function<VariableManager, String> 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
}
Expand All @@ -86,6 +90,7 @@ private Function<VariableManager, Boolean> 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())
Expand Down
@@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -48,19 +49,23 @@ public class NumberIfDescriptionProvider {

private final IEMFMessageService emfMessageService;

private final Function<VariableManager, String> semanticTargetIdProvider;

public NumberIfDescriptionProvider(EDataType eDataType, ComposedAdapterFactory composedAdapterFactory, IPropertiesValidationProvider propertiesValidationProvider,
IEMFMessageService emfMessageService) {
IEMFMessageService emfMessageService, Function<VariableManager, String> 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
}
Expand All @@ -75,6 +80,7 @@ private Function<VariableManager, Boolean> getPredicate() {
private TextfieldDescription getTextfieldDescription() {
// @formatter:off
return TextfieldDescription.newTextfieldDescription(TEXTFIELD_DESCRIPTION_ID)
.targetObjectIdProvider(this.semanticTargetIdProvider)
.idProvider(this.getIdProvider())
.labelProvider(this.getLabelProvider())
.valueProvider(this.getValueProvider())
Expand Down
Expand Up @@ -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;
Expand All @@ -59,12 +58,15 @@ public class PropertiesDefaultDescriptionProvider implements IPropertiesDefaultD

private final IEMFMessageService emfMessageService;

private final Function<VariableManager, String> 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
Expand Down Expand Up @@ -155,13 +157,13 @@ private GroupDescription getGroupDescription() {
return objects;
};

List<IfDescription> 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<AbstractControlDescription> 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(
Expand All @@ -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

Expand Down
Expand Up @@ -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();
Expand Down

0 comments on commit b7c067c

Please sign in to comment.