Skip to content

Commit

Permalink
[1244] Add support for flexbox containers on FormDescriptions
Browse files Browse the repository at this point in the history
Bug: #1244
Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
  • Loading branch information
AxelRICHARD authored and gcoutable committed Jun 15, 2022
1 parent f0879dd commit a789fca
Show file tree
Hide file tree
Showing 39 changed files with 2,797 additions and 649 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
- https://github.com/eclipse-sirius/sirius-components/issues/1228[#1228] [charts] Add support for bar-chart in view DSL
- https://github.com/eclipse-sirius/sirius-components/issues/1248[#1248] [charts] Add support for pie-chart in Form representation
- https://github.com/eclipse-sirius/sirius-components/issues/1255[#1255] [form] Add support for charts in form descriptions editor
- https://github.com/eclipse-sirius/sirius-components/issues/1244[#1244] [form] Add support for flexbox containers on FormDescriptions

== v2022.5.0

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2021 Obeo.
* Copyright (c) 2021, 2022 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,12 +12,16 @@
*******************************************************************************/
package org.eclipse.sirius.components.collaborative.forms;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import org.eclipse.sirius.components.collaborative.forms.api.IFormQueryService;
import org.eclipse.sirius.components.forms.AbstractWidget;
import org.eclipse.sirius.components.forms.Form;
import org.eclipse.sirius.components.forms.Group;
import org.eclipse.sirius.components.forms.FlexboxContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
Expand All @@ -38,7 +42,7 @@ public Optional<AbstractWidget> findWidget(Form form, String widgetId) {
// @formatter:off
Optional<AbstractWidget> optionalWidget = form.getPages().stream()
.flatMap(page -> page.getGroups().stream())
.flatMap(group -> group.getWidgets().stream())
.flatMap(group -> this.getAllWidgets(group).stream())
.filter(widget -> Objects.equals(widgetId, widget.getId()))
.findFirst();
// @formatter:on
Expand All @@ -50,4 +54,27 @@ public Optional<AbstractWidget> findWidget(Form form, String widgetId) {
return optionalWidget;
}

private List<AbstractWidget> getAllWidgets(Group group) {
List<AbstractWidget> widgets = new ArrayList<>();
group.getWidgets().forEach(widget -> {
if (widget instanceof FlexboxContainer) {
widgets.addAll(this.getAllWidgets((FlexboxContainer) widget));
} else {
widgets.add(widget);
}
});
return widgets;
}

private List<AbstractWidget> getAllWidgets(FlexboxContainer flexboxContainer) {
List<AbstractWidget> widgets = new ArrayList<>();
flexboxContainer.getChildren().forEach(widget -> {
if (widget instanceof FlexboxContainer) {
widgets.addAll(this.getAllWidgets((FlexboxContainer) widget));
} else {
widgets.add(widget);
}
});
return widgets;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,16 @@ type ChartWidget implements Widget {
chart: Chart!
}

type FlexboxContainer implements Widget {
id: ID!
diagnostics: [Diagnostic!]!
label: String!
flexDirection: String!
flexWrap: String!
flexGrow: Int!
children: [Widget!]!
}

type FormDescription implements RepresentationDescription {
id: ID!
label: String!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.sirius.components.core.api.IObjectService;
import org.eclipse.sirius.components.emf.view.OperationInterpreter;
import org.eclipse.sirius.components.forms.CheckboxStyle;
import org.eclipse.sirius.components.forms.FlexDirection;
import org.eclipse.sirius.components.forms.MultiSelectStyle;
import org.eclipse.sirius.components.forms.RadioStyle;
import org.eclipse.sirius.components.forms.SelectStyle;
Expand All @@ -44,6 +45,7 @@
import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription;
import org.eclipse.sirius.components.forms.description.ChartWidgetDescription;
import org.eclipse.sirius.components.forms.description.CheckboxDescription;
import org.eclipse.sirius.components.forms.description.FlexboxContainerDescription;
import org.eclipse.sirius.components.forms.description.MultiSelectDescription;
import org.eclipse.sirius.components.forms.description.RadioDescription;
import org.eclipse.sirius.components.forms.description.SelectDescription;
Expand Down Expand Up @@ -324,20 +326,6 @@ public AbstractWidgetDescription caseRadioDescription(org.eclipse.sirius.compone

}

private Function<VariableManager, List<?>> getMultiValueProvider(String expression) {
String safeExpression = Optional.ofNullable(expression).orElse(""); //$NON-NLS-1$
return variableManager -> {
return this.interpreter.evaluateExpression(variableManager.getVariables(), safeExpression).asObjects().orElse(List.of());
};
}

private <T> Function<VariableManager, List<T>> getMultiValueProvider(String expression, Class<T> type) {
String safeExpression = Optional.ofNullable(expression).orElse(""); //$NON-NLS-1$
return variableManager -> {
return this.interpreter.evaluateExpression(variableManager.getVariables(), safeExpression).asObjects().orElse(List.of()).stream().map(type::cast).collect(Collectors.toList());
};
}

@Override
public AbstractWidgetDescription caseBarChartDescription(org.eclipse.sirius.components.view.BarChartDescription viewBarChartDescription) {
String labelExpression = viewBarChartDescription.getYAxisLabelExpression();
Expand Down Expand Up @@ -368,6 +356,44 @@ public AbstractWidgetDescription casePieChartDescription(org.eclipse.sirius.comp
return this.createChartWidgetDescription(viewPieChartDescription, chartDescription);
}

@Override
public AbstractWidgetDescription caseFlexboxContainerDescription(org.eclipse.sirius.components.view.FlexboxContainerDescription flexboxContainerDescription) {
String descriptionId = this.getDescriptionId(flexboxContainerDescription);
WidgetIdProvider idProvider = new WidgetIdProvider();
StringValueProvider labelProvider = this.getStringValueProvider(flexboxContainerDescription.getLabelExpression());
FlexDirection flexDirection = FlexDirection.valueOf(flexboxContainerDescription.getFlexDirection().getName());
List<AbstractWidgetDescription> children = new ArrayList<>();
flexboxContainerDescription.getChildren().forEach(widget -> {
children.add(ViewFormDescriptionConverterSwitch.this.doSwitch(widget));
});

// @formatter:off
return FlexboxContainerDescription.newFlexboxContainerDescription(descriptionId)
.idProvider(idProvider)
.labelProvider(labelProvider)
.flexDirection(flexDirection)
.children(children)
.diagnosticsProvider(variableManager -> List.of())
.kindProvider(object -> "") //$NON-NLS-1$
.messageProvider(object -> "") //$NON-NLS-1$
.build();
// @formatter:on
}

private Function<VariableManager, List<?>> getMultiValueProvider(String expression) {
String safeExpression = Optional.ofNullable(expression).orElse(""); //$NON-NLS-1$
return variableManager -> {
return this.interpreter.evaluateExpression(variableManager.getVariables(), safeExpression).asObjects().orElse(List.of());
};
}

private <T> Function<VariableManager, List<T>> getMultiValueProvider(String expression, Class<T> type) {
String safeExpression = Optional.ofNullable(expression).orElse(""); //$NON-NLS-1$
return variableManager -> {
return this.interpreter.evaluateExpression(variableManager.getVariables(), safeExpression).asObjects().orElse(List.of()).stream().map(type::cast).collect(Collectors.toList());
};
}

private AbstractWidgetDescription createChartWidgetDescription(org.eclipse.sirius.components.view.WidgetDescription widgetDescription, IChartDescription chartDescription) {
String descriptionId = this.getDescriptionId(widgetDescription);
WidgetIdProvider idProvider = new WidgetIdProvider();
Expand Down
Loading

0 comments on commit a789fca

Please sign in to comment.