diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index d00b913e81..4e185da685 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -81,6 +81,7 @@ Except for the specific case where `cause === 'refresh'` in `DiagramRenderer` (w - https://github.com/eclipse-sirius/sirius-web/issues/4451[#4451] [diagram] Keep using the same node after a refresh if possible in order to avoid rerendering all the nodes after converting the diagram - https://github.com/eclipse-sirius/sirius-web/issues/4575[#4575] [diagram] Memoize the style of a label to avoid rerendering them all when refreshing the diagram - https://github.com/eclipse-sirius/sirius-web/issues/4577[#4577] [diagram] Improve the performance of the diagram by removing useless data from `DiagramContext` +- https://github.com/eclipse-sirius/sirius-web/issues/4556[#4556] [table] Add the support of row hierarchy in tables @@ -289,7 +290,6 @@ To achieve that a new concept, `ProjectSemanticData` has been added along with a - https://github.com/eclipse-sirius/sirius-web/issues/4411[#4411] [sirius-web] Add support for expressions returning a collection of strings in the query view - == v2025.1.0 === Shapes diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java index 6a3e3b56dd..53f53df944 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java +++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java @@ -43,42 +43,46 @@ public AbstractWidgetDescription caseTableWidgetDescription(org.eclipse.sirius.c VariableManager childVariableManager = variableManager.createChild(); childVariableManager.put(VariableManager.SELF, viewTableDescription); String id = formDescriptionEditorDescription.getTargetObjectIdProvider().apply(childVariableManager); - var lineDescription = LineDescription.newLineDescription(UUID.randomUUID().toString()) - .targetObjectIdProvider(vm -> "") - .targetObjectKindProvider(vm -> "") - .semanticElementsProvider(vm -> new PaginatedData(List.of(), false, false, 0)) - .headerLabelProvider(vm -> "") - .headerIconURLsProvider(vm -> List.of()) - .headerIndexLabelProvider(vm -> "") - .isResizablePredicate(vm -> false) - .initialHeightProvider(vm -> -1) - .build(); - var tableDescription = TableDescription.newTableDescription(UUID.randomUUID().toString()) - .label("") - .labelProvider(vm -> TableWidgetPreviewConverterProvider.this.getWidgetLabel(viewTableDescription, "Table")) - .canCreatePredicate(vm -> true) - .targetObjectIdProvider(vm -> "") - .targetObjectKindProvider(vm -> "") - .isStripeRowPredicate(vm -> false) - .iconURLsProvider(vm -> List.of()) - .columnDescriptions(List.of()) - .cellDescriptions(List.of()) - .lineDescription(lineDescription) - .build(); - return TableWidgetDescription.newTableWidgetDescription(UUID.randomUUID().toString()) - .idProvider(vm -> id) - .targetObjectIdProvider(vm -> "") - .labelProvider(vm -> TableWidgetPreviewConverterProvider.this.getWidgetLabel(viewTableDescription, "Table")) - .diagnosticsProvider(vm -> List.of()) - .kindProvider(object -> "") - .messageProvider(object -> "") - .helpTextProvider(vm -> "") - .tableDescription(tableDescription) - .build(); + return TableWidgetPreviewConverterProvider.this.getTableWidgetDescription(viewTableDescription, id); } }; } + private TableWidgetDescription getTableWidgetDescription(org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription viewTableDescription, String id) { + var lineDescription = LineDescription.newLineDescription(UUID.randomUUID().toString()) + .targetObjectIdProvider(vm -> "") + .targetObjectKindProvider(vm -> "") + .semanticElementsProvider(vm -> new PaginatedData(List.of(), false, false, 0)) + .headerLabelProvider(vm -> "") + .headerIconURLsProvider(vm -> List.of()) + .headerIndexLabelProvider(vm -> "") + .isResizablePredicate(vm -> false) + .initialHeightProvider(vm -> -1) + .depthLevelProvider(vm -> 0) + .build(); + var tableDescription = TableDescription.newTableDescription(UUID.randomUUID().toString()) + .label("") + .labelProvider(vm -> this.getWidgetLabel(viewTableDescription, "Table")) + .canCreatePredicate(vm -> true) + .targetObjectIdProvider(vm -> "") + .targetObjectKindProvider(vm -> "") + .isStripeRowPredicate(vm -> false) + .iconURLsProvider(vm -> List.of()) + .columnDescriptions(List.of()) + .cellDescriptions(List.of()) + .lineDescription(lineDescription) + .build(); + return TableWidgetDescription.newTableWidgetDescription(UUID.randomUUID().toString()) + .idProvider(vm -> id) + .targetObjectIdProvider(vm -> "") + .labelProvider(vm -> this.getWidgetLabel(viewTableDescription, "Table")) + .diagnosticsProvider(vm -> List.of()) + .kindProvider(object -> "") + .messageProvider(object -> "") + .helpTextProvider(vm -> "") + .tableDescription(tableDescription) + .build(); + } public String getWidgetLabel(org.eclipse.sirius.components.view.form.WidgetDescription widgetDescription, String defaultLabel) { String widgetLabel = defaultLabel; @@ -91,5 +95,4 @@ public String getWidgetLabel(org.eclipse.sirius.components.view.form.WidgetDescr } return widgetLabel; } - } diff --git a/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPropertySection.tsx b/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPropertySection.tsx index eee67cc437..3d5ce63cd6 100644 --- a/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPropertySection.tsx +++ b/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPropertySection.tsx @@ -11,10 +11,10 @@ * Obeo - initial API and implementation *******************************************************************************/ import { + GQLWidget, PropertySectionComponent, PropertySectionComponentProps, PropertySectionLabel, - GQLWidget, } from '@eclipse-sirius/sirius-components-forms'; import { TableContent } from '@eclipse-sirius/sirius-components-tables'; import { makeStyles } from 'tss-react/mui'; @@ -57,6 +57,7 @@ const RawTableWidgetPropertySection: PropertySectionComponent = onPaginationChange={() => {}} onGlobalFilterChange={() => {}} onColumnFiltersChange={() => {}} + onExpandedElementChange={() => {}} enableColumnVisibility={false} enableColumnResizing={false} enableColumnFilters={false} @@ -64,6 +65,7 @@ const RawTableWidgetPropertySection: PropertySectionComponent = enableGlobalFilter={false} enablePagination={false} enableColumnOrdering={false} + expandedRowIds={[]} /> ); diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/PackageTableRepresentationDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/PackageTableRepresentationDescriptionProvider.java index 9cc841f149..2e038bf8ad 100644 --- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/PackageTableRepresentationDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/PackageTableRepresentationDescriptionProvider.java @@ -33,8 +33,11 @@ import org.eclipse.sirius.components.core.api.ILabelService; import org.eclipse.sirius.components.emf.tables.CursorBasedNavigationServices; import org.eclipse.sirius.components.papaya.AnnotableElement; +import org.eclipse.sirius.components.papaya.Operation; +import org.eclipse.sirius.components.papaya.Package; import org.eclipse.sirius.components.papaya.PapayaFactory; import org.eclipse.sirius.components.papaya.PapayaPackage; +import org.eclipse.sirius.components.papaya.Parameter; import org.eclipse.sirius.components.papaya.Type; import org.eclipse.sirius.components.papaya.spec.PackageSpec; import org.eclipse.sirius.components.representations.IRepresentationDescription; @@ -101,6 +104,7 @@ public List getRepresentationDescriptions(IEditingCo .headerIndexLabelProvider(headerIndexLabelProvider) .isResizablePredicate(variableManager -> true) .initialHeightProvider(variableManager -> 53) + .depthLevelProvider(this::getSemanticElementDepthLevel) .build(); var tableDescription = TableDescription.newTableDescription(TABLE_DESCRIPTION_ID) @@ -114,6 +118,7 @@ public List getRepresentationDescriptions(IEditingCo .cellDescriptions(this.getCellDescriptions()) .iconURLsProvider(variableManager -> List.of("/papaya-representations/package-table.svg")) .isStripeRowPredicate(variableManager -> true) + .enableSubRows(true) .build(); return List.of(tableDescription); @@ -133,11 +138,11 @@ private PaginatedData getSemanticElements(VariableManager variableManager) { var size = variableManager.get(TableRenderer.PAGINATION_SIZE, Integer.class).orElse(0); var globalFilter = variableManager.get(TableRenderer.GLOBAL_FILTER_DATA, String.class).orElse(null); List columnFilters = variableManager.get(TableRenderer.COLUMN_FILTERS, List.class).orElse(List.of()); + List expandedIds = variableManager.get(TableRenderer.EXPANDED_IDS, List.class).orElse(List.of()); Predicate predicate = eObject -> { - boolean isValidCandidate = eObject instanceof Type && EcoreUtil.isAncestor(self, eObject); - if (isValidCandidate) { - var type = (Type) eObject; + boolean isValidCandidate = this.isValidType(eObject, self) && this.hasExpandedParent(eObject, expandedIds); + if (isValidCandidate && eObject instanceof Type type) { if (globalFilter != null && !globalFilter.isBlank()) { isValidCandidate = type.getName() != null && type.getName().contains(globalFilter); isValidCandidate = isValidCandidate || type.getDescription() != null && type.getDescription().contains(globalFilter); @@ -146,12 +151,58 @@ private PaginatedData getSemanticElements(VariableManager variableManager) { } isValidCandidate = isValidCandidate && columnFilters.stream().allMatch(new PapayaColumnFilterPredicate(this.objectMapper, type)); } + if (isValidCandidate && eObject instanceof Operation operation) { + if (globalFilter != null && !globalFilter.isBlank()) { + isValidCandidate = operation.getName() != null && operation.getName().contains(globalFilter); + isValidCandidate = isValidCandidate || operation.getDescription() != null && operation.getDescription().contains(globalFilter); + isValidCandidate = isValidCandidate || operation.getVisibility() != null && operation.getVisibility().getLiteral().contains(globalFilter); + } + } + if (isValidCandidate && eObject instanceof Parameter parameter) { + if (globalFilter != null && !globalFilter.isBlank()) { + isValidCandidate = parameter.getName() != null && parameter.getName().contains(globalFilter); + isValidCandidate = isValidCandidate || parameter.getDescription() != null && parameter.getDescription().contains(globalFilter); + } + } return isValidCandidate; }; return new CursorBasedNavigationServices().collect(self, cursor, direction, size, predicate); } + private boolean isValidType(EObject eObject, EObject self) { + // first should be inside the self element + boolean isValid = EcoreUtil.isAncestor(self, eObject); + boolean isValidElement = eObject instanceof Type || + eObject instanceof Operation || + // only consider parameter of regular operation (not constructor) + (eObject instanceof Parameter && eObject.eContainer() instanceof Operation); + return isValid && isValidElement; + } + + private boolean hasExpandedParent(EObject eObject, List expandedIds) { + EObject parent = eObject.eContainer(); + if (parent != null && !(parent instanceof Package)) { + var parentId = this.identityService.getId(parent); + return expandedIds.contains(parentId) && this.hasExpandedParent(parent, expandedIds); + } + return true; + } + + private Integer getSemanticElementDepthLevel(VariableManager variableManager) { + return variableManager.get(VariableManager.SELF, EObject.class) + .map(this::getEObjectDepthLevel) + .orElse(0); + } + + private Integer getEObjectDepthLevel(EObject eObject) { + if (eObject instanceof Package) { + return -1; + } else { + return 1 + this.getEObjectDepthLevel(eObject.eContainer()); + } + } + private List getColumnDescriptions() { var provider = new StructuralFeatureToDisplayNameProvider(new DisplayNameProvider(this.composedAdapterFactory)); Map featureToDisplayName = provider.getColumnsStructuralFeaturesDisplayName(PapayaFactory.eINSTANCE.createClass(), PapayaPackage.eINSTANCE.getType()); diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/ProjectTableRepresentationDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/ProjectTableRepresentationDescriptionProvider.java index b6bd1df041..8895c7c354 100644 --- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/ProjectTableRepresentationDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/representations/table/ProjectTableRepresentationDescriptionProvider.java @@ -78,6 +78,7 @@ public List getRepresentationDescriptions(IEditingCo .headerIndexLabelProvider(variableManager -> "") .isResizablePredicate(variableManager -> false) .initialHeightProvider(variableManager -> -1) + .depthLevelProvider(variableManager -> 0) .build(); var tableDescription = TableDescription.newTableDescription(TABLE_DESCRIPTION_ID) @@ -91,6 +92,7 @@ public List getRepresentationDescriptions(IEditingCo .cellDescriptions(this.getCellDescriptions()) .iconURLsProvider(variableManager -> List.of("/papaya-representations/project-table.svg")) .isStripeRowPredicate(variableManager -> false) + .enableSubRows(false) .build(); return List.of(tableDescription); diff --git a/packages/sirius-web/backend/sirius-web-tests-data/src/main/resources/sirius-web-scripts/papaya.sql b/packages/sirius-web/backend/sirius-web-tests-data/src/main/resources/sirius-web-scripts/papaya.sql index b046b1a446..aa3c736793 100644 --- a/packages/sirius-web/backend/sirius-web-tests-data/src/main/resources/sirius-web-scripts/papaya.sql +++ b/packages/sirius-web/backend/sirius-web-tests-data/src/main/resources/sirius-web-scripts/papaya.sql @@ -96,7 +96,25 @@ INSERT INTO document ( "id": "b0f27d20-4705-40a7-9d28-67d605b5e9d1", "eClass": "papaya:Class", "data": { - "name": "Failure" + "name": "Failure", + "operations": [ + { + "eClass": "papaya:Operation", + "id": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "data": { + "name": "fooOperation", + "parameters": [ + { + "eClass": "papaya:Parameter", + "id": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "data": { + "name": "fooParameter" + } + } + ] + } + } + ] } } ] @@ -471,6 +489,134 @@ INSERT INTO representation_content ( "initialHeight": 53, "height":100, "resizable": true + }, + { + "cells": [ + { + "columnId": "d0fd98f3-dfae-3a2d-9cbe-f9a1d6ebee56", + "id": "4bf6dc01-4da7-330e-a7f6-18c9789408d7", + "targetObjectId": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Operation", + "type": "TEXTFIELD", + "value": "barOperation" + }, + { + "columnId": "b6e82202-fe33-3b19-bf2c-5c9648cb96ce", + "id": "8b566c5e-6877-3f35-91dc-dd27f3ead414", + "targetObjectId": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Operation", + "type": "TEXTAREA", + "value": "" + }, + { + "columnId": "eabb569d-f99e-3e6e-86a6-db600b1fa526", + "id": "c4dafa63-2bf8-3e8c-bdc0-fe8f93f70ca2", + "options": [ + { + "id": "PUBLIC", + "label": "PUBLIC" + }, + { + "id": "PROTECTED", + "label": "PROTECTED" + }, + { + "id": "PACKAGE", + "label": "PACKAGE" + }, + { + "id": "PRIVATE", + "label": "PRIVATE" + } + ], + "targetObjectId": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Operation", + "type": "SELECT", + "value": "" + }, + { + "columnId": "94277463-12c8-34bc-b69b-99bb5bfb0fc4", + "id": "580e07af-51cd-39f3-bffd-272ad274dcbd", + "options": [ + ], + "targetObjectId": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Operation", + "type": "MULTI_SELECT", + "values": [ + ] + } + ], + "id": "40ffe0b3-3fb4-35f1-b2bd-3634679398ad", + "targetObjectId": "6f531172-8314-4145-8b36-d8fa45bf3b20", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Operation", + "descriptionId": "6c9154c7-a924-3bd1-b5e4-28aff1d4e5c8", + "depthLevel": 1, + "initialHeight": 53, + "height": 53, + "resizable": true + }, + { + "id": "7127b7a2-50b0-3b39-8fcd-ad2910856e0a", + "targetObjectId": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Parameter", + "cells": [ + { + "columnId": "d0fd98f3-dfae-3a2d-9cbe-f9a1d6ebee56", + "id": "40c134b9-3969-398e-85fc-573ae8b18c05", + "targetObjectId": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Parameter", + "type": "TEXTFIELD", + "value": "fooParameter" + }, + { + "columnId": "b6e82202-fe33-3b19-bf2c-5c9648cb96ce", + "id": "f672ab49-a2d8-38d8-9600-60f736642cff", + "targetObjectId": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Parameter", + "type": "TEXTAREA", + "value": "" + }, + { + "columnId": "eabb569d-f99e-3e6e-86a6-db600b1fa526", + "id": "5404877a-fe46-3e00-ad3d-1dfe476a714f", + "options": [ + { + "id": "PUBLIC", + "label": "PUBLIC" + }, + { + "id": "PROTECTED", + "label": "PROTECTED" + }, + { + "id": "PACKAGE", + "label": "PACKAGE" + }, + { + "id": "PRIVATE", + "label": "PRIVATE" + } + ], + "targetObjectId": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Parameter", + "type": "SELECT", + "value": "" + }, + { + "columnId": "94277463-12c8-34bc-b69b-99bb5bfb0fc4", + "id": "7b212e76-3220-3235-9f25-df8724633bfc", + "options": [], + "targetObjectId": "69ead9da-9302-45a7-86d8-c4ad54056e39", + "targetObjectKind": "siriusComponents://semantic?domain=papaya&entity=Parameter", + "type": "MULTI_SELECT", + "values": [] + } + ], + "depthLevel": 2, + "descriptionId": "6c9154c7-a924-3bd1-b5e4-28aff1d4e5c8", + "headerLabel": "fooParameter", + "height": 53, + "resizable": true } ], "columns": [ diff --git a/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/representation/RepresentationIdBuilder.java b/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/representation/RepresentationIdBuilder.java index c9280edd65..88385434d0 100644 --- a/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/representation/RepresentationIdBuilder.java +++ b/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/representation/RepresentationIdBuilder.java @@ -103,12 +103,18 @@ public String buildTreeRepresentationId(String treeId, List expandedObje return treeId + "?expandedIds=[" + String.join(",", expandedObjectIds) + "]"; } - public String buildTableRepresentationId(String tableId, String cursor, String direction, int size) { + public String buildTableRepresentationId(String tableId, String cursor, String direction, int size, List expanded) { + var expandedIds = expanded.stream() + .map(id -> URLEncoder.encode(id, StandardCharsets.UTF_8)) + .toList(); return tableId + "?cursor=" + cursor + "&direction=" + direction + "&size=" + - size; + size + + "&expandedIds=[" + + String.join(",", expandedIds) + + "]"; } } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableCellControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableCellControllerIntegrationTests.java index 11491cd2d8..0de099e365 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableCellControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableCellControllerIntegrationTests.java @@ -92,7 +92,7 @@ public void givenTableWhenEditTextareaMutationTriggeredThenTheRepresentationIsRe Consumer initialTableContentConsumer = this.getTableSubscriptionConsumer(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getCells()).hasSize(6); assertThat(table.getLines().get(0).getCells().get(1)).isInstanceOf(TextareaCell.class); assertThat(table.getLines().get(0).getCells().get(1)).isInstanceOf(TextareaCell.class); @@ -118,7 +118,7 @@ public void givenTableWhenEditTextareaMutationTriggeredThenTheRepresentationIsRe Consumer updatedTableContentConsumer = this.getTableSubscriptionConsumer(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getCells()).hasSize(6); assertThat(table.getLines().get(0).getCells().get(1)).isInstanceOf(TextareaCell.class); assertThat(((TextareaCell) table.getLines().get(0).getCells().get(1)).getValue()).isEqualTo("new description"); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableControllerIntegrationTests.java index c2d5a1d8dd..270667992f 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableControllerIntegrationTests.java @@ -66,7 +66,7 @@ */ @Transactional @SuppressWarnings("checkstyle:MultipleStringLiterals") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"sirius.web.test.enabled=studio"}) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "sirius.web.test.enabled=studio" }) public class PapayaTableControllerIntegrationTests extends AbstractIntegrationTests { private static final String MISSING_TABLE = "Missing table"; @@ -122,7 +122,7 @@ public void givenTableRepresentationWhenWeSubscribeToItsEventThenTheRepresentati .ifPresentOrElse(table -> { assertThat(table).isNotNull(); assertThat(table.getColumns()).hasSize(6); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); }, () -> fail(MISSING_TABLE)); StepVerifier.create(flux) @@ -146,7 +146,7 @@ public void givenTableWhenRefreshTriggeredThenTableIsRefreshed() { .ifPresentOrElse(table -> { assertThat(table).isNotNull(); assertThat(table.getColumns()).hasSize(6); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); tableId.set(table.getId()); }, () -> fail("Missing table")); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableRowControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableRowControllerIntegrationTests.java index 9be8308cb0..423f4d9176 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableRowControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaTableRowControllerIntegrationTests.java @@ -65,7 +65,7 @@ */ @Transactional @SuppressWarnings("checkstyle:MultipleStringLiterals") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"sirius.web.test.enabled=studio"}) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "sirius.web.test.enabled=studio" }) public class PapayaTableRowControllerIntegrationTests extends AbstractIntegrationTests { private static final String MISSING_TABLE = "Missing table"; @@ -129,7 +129,7 @@ public void givenTableWhenRowResizeMutationTriggeredThenTheRepresentationIsRefre .ifPresentOrElse(table -> { tableId.set(table.getId()); assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); rowRef.set(table.getLines().get(0)); assertThat(table.getLines().get(0).getHeight()).isEqualTo(53); }, () -> fail(MISSING_TABLE)); @@ -152,7 +152,7 @@ public void givenTableWhenRowResizeMutationTriggeredThenTheRepresentationIsRefre .map(TableRefreshedEventPayload::table) .ifPresentOrElse(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getHeight()).isEqualTo(100); }, () -> fail(MISSING_TABLE)); @@ -189,7 +189,7 @@ public void givenTableWithAResizedRowWhenRowAResetRowsHeightMutationIsTriggeredT .ifPresentOrElse(table -> { tableId.set(table.getId()); assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(3); assertThat(table.getLines().get(1).getHeight()).isEqualTo(100); }, () -> fail(MISSING_TABLE)); @@ -213,7 +213,7 @@ public void givenTableWithAResizedRowWhenRowAResetRowsHeightMutationIsTriggeredT .map(TableRefreshedEventPayload::table) .ifPresentOrElse(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(3); assertThat(table.getLines().get(1).getHeight()).isEqualTo(53); }, () -> fail(MISSING_TABLE)); @@ -250,7 +250,7 @@ public void giveATableWhenRowContextMenuEntriesAreQueriedThenTheCorrectEntriesAr .map(TableRefreshedEventPayload::table) .ifPresentOrElse(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(3); tableId.set(table.getId()); rowId.set(table.getLines().get(0).getId()); }, () -> fail(MISSING_TABLE)); @@ -258,7 +258,7 @@ public void giveATableWhenRowContextMenuEntriesAreQueriedThenTheCorrectEntriesAr Runnable getContextMenuActions = () -> { Map variables = Map.of( "editingContextId", PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(), - "representationId", this.representationIdBuilder.buildTableRepresentationId(tableId.get(), null, "NEXT", 10), + "representationId", this.representationIdBuilder.buildTableRepresentationId(tableId.get(), null, "NEXT", 10, List.of()), "tableId", tableId.get(), "rowId", rowId.get().toString() ); @@ -280,7 +280,8 @@ public void giveATableWhenRowContextMenuEntriesAreQueriedThenTheCorrectEntriesAr @GivenSiriusWebServer @DisplayName("Given a table with pagination in next data, when row context menu entries are queried, then the correct entries are returned") public void giveATableWithPaginationInNextDataWhenRowContextMenuEntriesAreQueriedThenTheCorrectEntriesAreReturned() { - var representationId = this.representationIdBuilder.buildTableRepresentationId(PapayaIdentifiers.PAPAYA_PACKAGE_TABLE_REPRESENTATION.toString(), PapayaIdentifiers.PAPAYA_SUCCESS_CLASS_OBJECT.toString(), "NEXT", 1); + var representationId = this.representationIdBuilder.buildTableRepresentationId(PapayaIdentifiers.PAPAYA_PACKAGE_TABLE_REPRESENTATION.toString(), + PapayaIdentifiers.PAPAYA_SUCCESS_CLASS_OBJECT.toString(), "NEXT", 1, List.of()); var tableEventInput = new TableEventInput(UUID.randomUUID(), PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(), representationId); var flux = this.tableEventSubscriptionRunner.run(tableEventInput); @@ -308,7 +309,7 @@ public void giveATableWithPaginationInNextDataWhenRowContextMenuEntriesAreQuerie Runnable getContextMenuActions = () -> { Map variables = Map.of( "editingContextId", PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(), - "representationId", this.representationIdBuilder.buildTableRepresentationId(tableId.get(), PapayaIdentifiers.PAPAYA_SUCCESS_CLASS_OBJECT.toString(), "NEXT", 1), + "representationId", this.representationIdBuilder.buildTableRepresentationId(tableId.get(), PapayaIdentifiers.PAPAYA_SUCCESS_CLASS_OBJECT.toString(), "NEXT", 1, List.of()), "tableId", tableId.get(), "rowId", rowId.get().toString() ); @@ -352,7 +353,7 @@ public void giveATableWhenARowContextMenuEntryIsTriggeredThenTheEntryIsCorrectly .map(TableRefreshedEventPayload::table) .ifPresentOrElse(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(3); tableId.set(table.getId()); rowId.set(table.getLines().get(0).getId()); }, () -> fail(MISSING_TABLE)); @@ -381,7 +382,7 @@ public void giveATableWhenARowContextMenuEntryIsTriggeredThenTheEntryIsCorrectly .map(TableRefreshedEventPayload::table) .ifPresentOrElse(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(1); + assertThat(table.getLines()).hasSize(2); }, () -> fail(MISSING_TABLE)); StepVerifier.create(flux) @@ -391,4 +392,30 @@ public void giveATableWhenARowContextMenuEntryIsTriggeredThenTheEntryIsCorrectly .thenCancel() .verify(Duration.ofSeconds(10)); } + + @Test + @GivenSiriusWebServer + @DisplayName("Given a table representation, when we subscribe to its event, then the representation data has the correct row depth levels") + public void givenTableRepresentationWhenWeSubscribeToItsEventThenTheRepresentationDataHasTheCorrectRowDepthLevels() { + var flux = this.givenSubscriptionToTable(); + + Consumer initialTableContentConsumer = payload -> Optional.of(payload) + .filter(TableRefreshedEventPayload.class::isInstance) + .map(TableRefreshedEventPayload.class::cast) + .map(TableRefreshedEventPayload::table) + .ifPresentOrElse(table -> { + assertThat(table).isNotNull(); + assertThat(table.getColumns()).hasSize(6); + assertThat(table.getLines()).hasSize(4); + assertThat(table.getLines().get(0).getDepthLevel()).isEqualTo(0); + assertThat(table.getLines().get(1).getDepthLevel()).isEqualTo(0); + assertThat(table.getLines().get(2).getDepthLevel()).isEqualTo(1); + assertThat(table.getLines().get(3).getDepthLevel()).isEqualTo(2); + }, () -> fail(MISSING_TABLE)); + + StepVerifier.create(flux) + .consumeNextWith(initialTableContentConsumer) + .thenCancel() + .verify(Duration.ofSeconds(10)); + } } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewCellControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewCellControllerIntegrationTests.java index 5a44768319..b14121ae9b 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewCellControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewCellControllerIntegrationTests.java @@ -96,7 +96,7 @@ public void givenTableWhenCellEditMutationTriggeredThenTheRepresentationIsRefres Consumer initialTableContentConsumer = this.getTableSubscriptionConsumer(table -> { tableId.set(table.getId()); assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getCells()).hasSize(2); assertThat(table.getLines().get(0).getCells().get(0)).isInstanceOf(TextfieldCell.class); assertThat(((TextfieldCell) table.getLines().get(0).getCells().get(0)).getValue()).isEqualTo("Success"); @@ -113,7 +113,7 @@ public void givenTableWhenCellEditMutationTriggeredThenTheRepresentationIsRefres Consumer updatedTableContentConsumer = this.getTableSubscriptionConsumer(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(((TextfieldCell) table.getLines().get(0).getCells().get(0)).getValue()).isEqualTo("newName"); }); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewTableControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewTableControllerIntegrationTests.java index a33bd1874c..aa1c6d0aa9 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewTableControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/PapayaViewTableControllerIntegrationTests.java @@ -57,7 +57,7 @@ */ @Transactional @SuppressWarnings("checkstyle:MultipleStringLiterals") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"sirius.web.test.enabled=studio"}) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "sirius.web.test.enabled=studio" }) public class PapayaViewTableControllerIntegrationTests extends AbstractIntegrationTests { @Autowired @@ -104,7 +104,7 @@ public void givenSimpleViewTableDescriptionWhenSubscriptionIsCreatedThenTableIsR assertThat(table.getColumns().get(0).getHeaderIndexLabel()).isEqualTo("0"); assertThat(table.getColumns().get(1).getHeaderLabel()).isEqualTo("Description"); assertThat(table.getColumns().get(1).getHeaderIndexLabel()).isEqualTo("1"); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getHeaderIndexLabel()).isEqualTo("0"); assertThat(table.getLines().get(0).getCells().get(0)).isInstanceOf(TextfieldCell.class); assertThat(table.getLines().get(0).getCells().get(1)).isInstanceOf(TextareaCell.class); @@ -131,7 +131,7 @@ public void givenSimpleViewTableDescriptionWhenRowContextMenuEntryIsInvokedThenR var rowLabel = new AtomicReference(); Consumer tableContentConsumer = this.getTableSubscriptionConsumer(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); tableId.set(table.getId()); rowId.set(table.getLines().get(0).getId()); rowLabel.set(table.getLines().get(0).getHeaderLabel()); @@ -185,13 +185,13 @@ public void givenSimpleViewTableDescriptionWhenRowContextMenuEntryIsInvokedThenR @Test @GivenSiriusWebServer - @DisplayName("Given a view table description with a selected target object expression , when a subscription is created, then the cell target object data are correct") + @DisplayName("Given a view table description with a selected target object expression, when a subscription is created, then the cell target object data are correct") public void givenViewTableWithSelectedTargetObjectExpressionWhenSubscriptionIsCreatedThenCellTargetObjectDataAreCorrectlyExecuted() { var flux = this.givenSubscriptionToViewTableRepresentation(); Consumer tableContentConsumer = this.getTableSubscriptionConsumer(table -> { assertThat(table).isNotNull(); - assertThat(table.getLines()).hasSize(2); + assertThat(table.getLines()).hasSize(4); assertThat(table.getLines().get(0).getCells().get(0).getTargetObjectId()).isEqualTo(PapayaIdentifiers.SIRIUS_WEB_DOMAIN_PACKAGE.toString()); assertThat(table.getLines().get(0).getCells().get(0).getTargetObjectKind()).isEqualTo("siriusComponents://semantic?domain=papaya&entity=Package"); }); @@ -202,6 +202,28 @@ public void givenViewTableWithSelectedTargetObjectExpressionWhenSubscriptionIsCr .verify(Duration.ofSeconds(10)); } + @Test + @GivenSiriusWebServer + @DisplayName("Given a view table description with sub elements, when a subscription is created, then the depth levels are correct") + public void givenViewTableWithSubElementsWhenSubscriptionIsCreatedThenTheDepthLevelsAreCorrect() { + var flux = this.givenSubscriptionToViewTableRepresentation(); + + Consumer tableContentConsumer = this.getTableSubscriptionConsumer(table -> { + assertThat(table).isNotNull(); + assertThat(table.isEnableSubRows()).isTrue(); + assertThat(table.getLines()).hasSize(4); + assertThat(table.getLines().get(0).getDepthLevel()).isEqualTo(0); + assertThat(table.getLines().get(1).getDepthLevel()).isEqualTo(0); + assertThat(table.getLines().get(2).getDepthLevel()).isEqualTo(1); + assertThat(table.getLines().get(3).getDepthLevel()).isEqualTo(2); + }); + + StepVerifier.create(flux) + .consumeNextWith(tableContentConsumer) + .thenCancel() + .verify(Duration.ofSeconds(10)); + } + private Consumer getTableSubscriptionConsumer(Consumer tableConsumer) { return payload -> Optional.of(payload) .filter(TableRefreshedEventPayload.class::isInstance) diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/TableIconURLControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/TableIconURLControllerTests.java index 5046674826..ffaa034eca 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/TableIconURLControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/tables/TableIconURLControllerTests.java @@ -134,12 +134,14 @@ public void givenPapayaPackageWhenWeSubscribeToTableWithIconThenURLOfItsIconsAre }); List> rowIconURLs = JsonPath.read(body, "$.data.tableEvent.table.lines[*].headerIconURLs"); + assertThat(rowIconURLs).hasSize(4); + assertThat(rowIconURLs.get(0)).hasSize(2); + assertThat(rowIconURLs.get(1)).hasSize(2); + assertThat(rowIconURLs.get(2)).hasSize(2); + assertThat(rowIconURLs.get(3)).hasSize(1); assertThat(rowIconURLs) - .isNotEmpty() .allSatisfy(iconURLs -> { assertThat(iconURLs) - .isNotEmpty() - .hasSize(2) .allSatisfy(iconURL -> assertThat(iconURL).startsWith(URLConstants.IMAGE_BASE_PATH)); }); }, () -> fail("Missing table")); @@ -176,11 +178,15 @@ public void givenPapayaPackageWhenWeSubscribeToTableWithIconLabelCellThenURLOfIt assertThat(typename).isEqualTo(TableRefreshedEventPayload.class.getSimpleName()); List> iconLabelCellIconURLs = JsonPath.read(body, "$.data.tableEvent.table.lines[*].cells[*].iconURLs"); - assertThat(iconLabelCellIconURLs.stream().filter(iconURL -> !iconURL.isEmpty()).toList()) + List> filteredIconLavelCellIconURLs = iconLabelCellIconURLs.stream().filter(iconURL -> !iconURL.isEmpty()).toList(); + assertThat(filteredIconLavelCellIconURLs).hasSize(4); + assertThat(filteredIconLavelCellIconURLs.get(0)).hasSize(2); + assertThat(filteredIconLavelCellIconURLs.get(1)).hasSize(2); + assertThat(filteredIconLavelCellIconURLs.get(2)).hasSize(2); + assertThat(filteredIconLavelCellIconURLs.get(3)).hasSize(1); + assertThat(filteredIconLavelCellIconURLs) .isNotEmpty() .allSatisfy(iconURLs -> assertThat(iconURLs) - .isNotEmpty() - .hasSize(2) .allSatisfy(iconURL -> assertThat(iconURL).startsWith(URLConstants.IMAGE_BASE_PATH))); }, () -> fail("Missing table")); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithTableDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithTableDescriptionProvider.java index b0fcda9c1e..ad5d08921a 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithTableDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithTableDescriptionProvider.java @@ -143,6 +143,7 @@ private TableWidgetDescription getTableWidgetDescription() { .headerIndexLabelProvider(variableManager -> "") .isResizablePredicate(variableManager -> false) .initialHeightProvider(variableManager -> 0) + .depthLevelProvider(variableManager -> 0) .build(); TableDescription tableDescription = TableDescription.newTableDescription(FORM_WITH_TABLE_ID) @@ -155,6 +156,7 @@ private TableWidgetDescription getTableWidgetDescription() { .cellDescriptions(this.getCellDescriptions()) .iconURLsProvider(variableManager -> List.of()) .isStripeRowPredicate(variableManager -> false) + .enableSubRows(false) .build(); return TableWidgetDescription.newTableWidgetDescription("tasksTableWidgetId") diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/tables/ViewTableDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/tables/ViewTableDescriptionProvider.java index 3b5deb1745..84158bb781 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/tables/ViewTableDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/tables/ViewTableDescriptionProvider.java @@ -102,10 +102,12 @@ private TableDescription createTableDescription() { .build(); var rowDescription = new TableBuilders().newRowDescription() - .semanticCandidatesExpression("aql:self.eAllContents()->filter(papaya::Type)->toPaginatedData(cursor,direction,size)") + .semanticCandidatesExpression("aql:self.eAllContents()->filter({papaya::Type | papaya::Operation | papaya::Parameter})->toPaginatedData(cursor,direction,size)") .headerIndexLabelExpression("aql:rowIndex") .headerLabelExpression("aql:self.name") .contextMenuEntries(contextMenuEntry) + .depthLevelExpression( + "aql:if self.oclIsKindOf(papaya::Type) then 0 else if self.oclIsKindOf(papaya::Operation) then 1 else if self.oclIsKindOf(papaya::Parameter) then 2 else endif endif endif") .build(); var setNameOperation = new ViewBuilders().newSetValue() @@ -134,6 +136,7 @@ private TableDescription createTableDescription() { .rowDescription(rowDescription) .cellDescriptions(nameCellDescription, descriptionCellDescription) .useStripedRowsExpression("aql:false") + .enableSubRows(true) .build(); return this.tableDescription; diff --git a/packages/sirius-web/frontend/sirius-web-application/src/extension/TableWidgetDocumentTransform.ts b/packages/sirius-web/frontend/sirius-web-application/src/extension/TableWidgetDocumentTransform.ts index 928d8024ac..25fe3329b1 100644 --- a/packages/sirius-web/frontend/sirius-web-application/src/extension/TableWidgetDocumentTransform.ts +++ b/packages/sirius-web/frontend/sirius-web-application/src/extension/TableWidgetDocumentTransform.ts @@ -108,6 +108,7 @@ export const tableWidgetDocumentTransform = new DocumentTransform((document) => fieldBuilder('totalRowCount'), ]), fieldBuilder('stripeRow'), + fieldBuilder('enableSubRows'), fieldBuilder('globalFilter'), structuredFieldBuilder('columnFilters', [fieldBuilder('id'), fieldBuilder('value')]), structuredFieldBuilder('columns', [ @@ -131,6 +132,7 @@ export const tableWidgetDocumentTransform = new DocumentTransform((document) => fieldBuilder('headerIndexLabel'), fieldBuilder('height'), fieldBuilder('isResizable'), + fieldBuilder('depthLevel'), structuredFieldBuilder('cells', [ fieldBuilder('id'), fieldBuilder('targetObjectId'), diff --git a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableCreationParameters.java b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableCreationParameters.java index da30fc6b5d..698cb6d55b 100644 --- a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableCreationParameters.java +++ b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableCreationParameters.java @@ -42,6 +42,8 @@ public final class TableCreationParameters { private List columnFilters; + private List expanded; + private TableCreationParameters() { // Prevent instantiation } @@ -74,6 +76,10 @@ public List getColumnFilters() { return this.columnFilters; } + public List getExpanded() { + return this.expanded; + } + public static Builder newTableCreationParameters(String id) { return new Builder(id); } @@ -100,6 +106,8 @@ public static final class Builder { private List columnFilters; + private List expanded; + private Builder(String id) { this.id = id; } @@ -134,6 +142,11 @@ public Builder columnFilters(List columnFilters) { return this; } + public Builder expanded(List expanded) { + this.expanded = Objects.requireNonNull(expanded); + return this; + } + public TableCreationParameters build() { TableCreationParameters tableCreationParameters = new TableCreationParameters(); tableCreationParameters.id = Objects.requireNonNull(this.id); @@ -143,6 +156,7 @@ public TableCreationParameters build() { tableCreationParameters.targetObject = Objects.requireNonNull(this.targetObject); tableCreationParameters.globalFilter = Objects.requireNonNull(this.globalFilter); tableCreationParameters.columnFilters = Objects.requireNonNull(this.columnFilters); + tableCreationParameters.expanded = Objects.requireNonNull(this.expanded); return tableCreationParameters; } } diff --git a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessor.java b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessor.java index f58f5617a9..a82d0adff7 100644 --- a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessor.java +++ b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 CEA LIST. + * Copyright (c) 2024, 2025 CEA LIST. * 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 @@ -79,7 +79,8 @@ public class TableEventProcessor implements IRepresentationEventProcessor { private final Timer timer; public TableEventProcessor(TableCreationParameters tableCreationParameters, List tableEventHandlers, ITableContext tableContext, - ISubscriptionManager subscriptionManager, MeterRegistry meterRegistry, IRepresentationRefreshPolicyRegistry representationRefreshPolicyRegistry, IRepresentationPersistenceService representationPersistenceService) { + ISubscriptionManager subscriptionManager, MeterRegistry meterRegistry, IRepresentationRefreshPolicyRegistry representationRefreshPolicyRegistry, + IRepresentationPersistenceService representationPersistenceService) { this.logger.trace("Creating the table event processor {}", tableCreationParameters.getEditingContext().getId()); this.tableCreationParameters = Objects.requireNonNull(tableCreationParameters); @@ -206,6 +207,7 @@ private Table refreshTable() { variableManager.put(TableRenderer.PAGINATION_DIRECTION, this.tableCreationParameters.getCursorBasedPaginationData().direction()); variableManager.put(TableRenderer.PAGINATION_SIZE, this.tableCreationParameters.getCursorBasedPaginationData().size()); variableManager.put(TableRenderer.GLOBAL_FILTER_DATA, this.tableCreationParameters.getGlobalFilter()); + variableManager.put(TableRenderer.EXPANDED_IDS, this.tableCreationParameters.getExpanded()); TableComponentProps props = new TableComponentProps( variableManager, diff --git a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessorFactory.java b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessorFactory.java index 547b7a8274..f4e715d9e9 100644 --- a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessorFactory.java +++ b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/TableEventProcessorFactory.java @@ -49,6 +49,7 @@ public class TableEventProcessorFactory implements IRepresentationEventProcessor private static final String SIZE = "size"; private static final String GLOBAL_FILTER = "globalFilter"; private static final String COLUMN_FILTERS = "columnFilters"; + private static final String EXPANDED_IDS = "expandedIds"; private final IRepresentationSearchService representationSearchService; @@ -66,6 +67,8 @@ public class TableEventProcessorFactory implements IRepresentationEventProcessor private final IURLParser urlParser; + private final TableQueryService tableQueryService; + public TableEventProcessorFactory(RepresentationEventProcessorFactoryConfiguration configuration, IRepresentationPersistenceService representationPersistenceService, IObjectService objectService, List tableEventHandlers, IURLParser urlParser) { this.representationSearchService = Objects.requireNonNull(configuration.getRepresentationSearchService()); @@ -76,6 +79,7 @@ public TableEventProcessorFactory(RepresentationEventProcessorFactoryConfigurati this.subscriptionManagerFactory = Objects.requireNonNull(configuration.getSubscriptionManagerFactory()); this.representationRefreshPolicyRegistry = Objects.requireNonNull(configuration.getRepresentationRefreshPolicyRegistry()); this.urlParser = Objects.requireNonNull(urlParser); + this.tableQueryService = new TableQueryService(); } @Override @@ -104,6 +108,7 @@ public Optional createRepresentationEventProcesso .targetObject(object) .globalFilter(this.getGlobalFilter(representationId, table)) .columnFilters(this.getColumnFilters(representationId, table)) + .expanded(this.getExpandedIdsFromRepresentationId(representationId, table)) .build(); IRepresentationEventProcessor tableEventProcessor = new TableEventProcessor(tableCreationParameters, this.tableEventHandlers, new TableContext(table), @@ -170,5 +175,11 @@ private List getColumnFilters(String representationId, Table table return table.getColumnFilters(); } - + private List getExpandedIdsFromRepresentationId(String representationId, Table table) { + var param = this.urlParser.getParameterValues(representationId); + return Optional.ofNullable(param.get(EXPANDED_IDS)) + .map(expandedIds -> expandedIds.get(0)) + .map(this.urlParser::getParameterEntries) + .orElse(List.of()); + } } diff --git a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/services/TableCreationService.java b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/services/TableCreationService.java index cd3a7e17f0..5edf49505d 100644 --- a/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/services/TableCreationService.java +++ b/packages/tables/backend/sirius-components-collaborative-tables/src/main/java/org/eclipse/sirius/components/collaborative/tables/services/TableCreationService.java @@ -58,6 +58,7 @@ private Table doRender(String label, Object targetObject, IEditingContext editin variableManager.put(TableRenderer.PAGINATION_CURSOR, null); variableManager.put(TableRenderer.PAGINATION_SIZE, 0); variableManager.put(TableRenderer.PAGINATION_DIRECTION, "NEXT"); + variableManager.put(TableRenderer.EXPANDED_IDS, List.of()); TableComponentProps tableComponentProps = new TableComponentProps(variableManager, tableDescription, Optional.empty(), List.of(), "", List.of()); diff --git a/packages/tables/backend/sirius-components-collaborative-tables/src/main/resources/schema/table.graphqls b/packages/tables/backend/sirius-components-collaborative-tables/src/main/resources/schema/table.graphqls index 58dcfe9394..359b3ad550 100644 --- a/packages/tables/backend/sirius-components-collaborative-tables/src/main/resources/schema/table.graphqls +++ b/packages/tables/backend/sirius-components-collaborative-tables/src/main/resources/schema/table.graphqls @@ -41,6 +41,7 @@ type Table implements Representation { paginationData: PaginationData globalFilter: String columnFilters: [ColumnFilter!]! + enableSubRows: Boolean! } type Column { @@ -66,6 +67,7 @@ type Line { headerIndexLabel: String! height: Int! isResizable: Boolean! + depthLevel: Int! } type PaginationData { diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Line.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Line.java index 676a351b4c..f1353ce095 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Line.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Line.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Obeo. + * Copyright (c) 2024, 2025 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 @@ -47,6 +47,8 @@ public final class Line { private boolean resizable; + private int depthLevel; + private Line() { // Prevent instantiation } @@ -91,6 +93,10 @@ public boolean isResizable() { return this.resizable; } + public int getDepthLevel() { + return this.depthLevel; + } + public static Builder newLine(UUID id) { return new Builder(id); } @@ -129,6 +135,8 @@ public static final class Builder { private boolean resizable; + private int depthLevel; + private Builder(UUID id) { this.id = Objects.requireNonNull(id); } @@ -178,6 +186,11 @@ public Builder resizable(boolean resizable) { return this; } + public Builder depthLevel(int depthLevel) { + this.depthLevel = depthLevel; + return this; + } + public Line build() { Line line = new Line(); line.id = Objects.requireNonNull(this.id); @@ -190,6 +203,7 @@ public Line build() { line.headerIndexLabel = Objects.requireNonNull(this.headerIndexLabel); line.height = this.height; line.resizable = this.resizable; + line.depthLevel = this.depthLevel; return line; } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Table.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Table.java index 8787a78b73..d16de76afe 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Table.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/Table.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Obeo. + * Copyright (c) 2024, 2025 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 @@ -51,6 +51,8 @@ public final class Table implements IRepresentation { private List columnFilters; + private boolean enableSubRows; + private Table() { // Prevent instantiation } @@ -103,10 +105,14 @@ public List getColumnFilters() { return this.columnFilters; } + public boolean isEnableSubRows() { + return this.enableSubRows; + } + public static Builder newTable(String id) { return new Builder(id); } - + @Override public String toString() { String pattern = "{0} '{'id: {1}, targetObjectId: {2}, descriptionId: {3}'}'"; @@ -143,6 +149,8 @@ public static final class Builder { private List columnFilters; + private boolean enableSubRows; + private Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -192,6 +200,11 @@ public Builder columnFilters(List columnFilters) { return this; } + public Builder enableSubRows(boolean enableSubRows) { + this.enableSubRows = enableSubRows; + return this; + } + public Table build() { Table table = new Table(); table.id = Objects.requireNonNull(this.id); @@ -205,6 +218,7 @@ public Table build() { table.paginationData = Objects.requireNonNull(this.paginationData); table.globalFilter = Objects.requireNonNull(this.globalFilter); table.columnFilters = Objects.requireNonNull(this.columnFilters); + table.enableSubRows = this.enableSubRows; return table; } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/LineComponent.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/LineComponent.java index ef2019d8e8..21061864a0 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/LineComponent.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/LineComponent.java @@ -86,6 +86,7 @@ private Element doRender(VariableManager lineVariableManager, String targetObjec String headerLabel = lineDescription.getHeaderLabelProvider().apply(lineVariableManager); List headerIconURLs = lineDescription.getHeaderIconURLsProvider().apply(lineVariableManager); String headerIndexLabel = lineDescription.getHeaderIndexLabelProvider().apply(lineVariableManager); + Integer depthLevel = lineDescription.getDepthLevelProvider().apply(lineVariableManager); var cells = this.getCells(lineVariableManager, rowId); boolean resizable = lineDescription.getIsResizablePredicate().test(lineVariableManager); @@ -114,6 +115,7 @@ private Element doRender(VariableManager lineVariableManager, String targetObjec .headerIndexLabel(headerIndexLabel) .children(children) .resizable(resizable) + .depthLevel(depthLevel) .height(height); this.props.tableEvents().stream() diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/TableComponent.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/TableComponent.java index 233dd98a9f..fb0a298d00 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/TableComponent.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/components/TableComponent.java @@ -100,6 +100,7 @@ public Element render() { .paginationData(new PaginationData(paginatedData.hasPreviousPage(), paginatedData.hasNextPage(), paginatedData.totalRowCount())) .globalFilter(this.props.globalFilter()) .columnFilters(columnsFilters) + .enableSubRows(tableDescription.isEnableSubRows()) .build(); return new Element(TableElementProps.TYPE, tableElementProps); diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/LineDescription.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/LineDescription.java index 7757acd1ce..54b07c2d39 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/LineDescription.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/LineDescription.java @@ -52,6 +52,8 @@ public final class LineDescription { private Predicate isResizablePredicate; + private Function depthLevelProvider; + private LineDescription() { // Prevent instantiation } @@ -96,6 +98,10 @@ public Predicate getIsResizablePredicate() { return this.isResizablePredicate; } + public Function getDepthLevelProvider() { + return this.depthLevelProvider; + } + @Override public String toString() { String pattern = "{0} '{'id: {1}'}'"; @@ -128,6 +134,8 @@ public static final class Builder { private Predicate isResizablePredicate; + private Function depthLevelProvider; + public Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -172,6 +180,11 @@ public Builder isResizablePredicate(Predicate isResizablePredic return this; } + public Builder depthLevelProvider(Function depthLevelProvider) { + this.depthLevelProvider = Objects.requireNonNull(depthLevelProvider); + return this; + } + public LineDescription build() { LineDescription lineDescription = new LineDescription(); lineDescription.id = Objects.requireNonNull(this.id); @@ -183,6 +196,7 @@ public LineDescription build() { lineDescription.headerIndexLabelProvider = Objects.requireNonNull(this.headerIndexLabelProvider); lineDescription.initialHeightProvider = Objects.requireNonNull(this.initialHeightProvider); lineDescription.isResizablePredicate = Objects.requireNonNull(this.isResizablePredicate); + lineDescription.depthLevelProvider = Objects.requireNonNull(this.depthLevelProvider); return lineDescription; } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/TableDescription.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/TableDescription.java index 14c59668e9..74c837d110 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/TableDescription.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/descriptions/TableDescription.java @@ -60,6 +60,8 @@ public final class TableDescription implements IRepresentationDescription { private Function> iconURLsProvider; + private boolean enableSubRows; + private TableDescription() { // Prevent instantiation } @@ -110,6 +112,10 @@ public Function> getIconURLsProvider() { return this.iconURLsProvider; } + public boolean isEnableSubRows() { + return this.enableSubRows; + } + public static Builder newTableDescription(String id) { return new Builder(id); } @@ -150,6 +156,8 @@ public static final class Builder { private Function> iconURLsProvider; + private boolean enableSubRows; + private Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -200,7 +208,12 @@ public Builder cellDescriptions(List cellDescriptions) { } public Builder iconURLsProvider(Function> iconURLsProvider) { - this.iconURLsProvider = Objects.requireNonNull(iconURLsProvider); + this.iconURLsProvider = Objects.requireNonNull(iconURLsProvider); + return this; + } + + public Builder enableSubRows(boolean enableSubRows) { + this.enableSubRows = enableSubRows; return this; } @@ -217,6 +230,7 @@ public TableDescription build() { tableDescription.columnDescriptions = Objects.requireNonNull(this.columnDescriptions); tableDescription.cellDescriptions = Objects.requireNonNull(this.cellDescriptions); tableDescription.iconURLsProvider = Objects.requireNonNull(this.iconURLsProvider); + tableDescription.enableSubRows = this.enableSubRows; return tableDescription; } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/LineElementProps.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/LineElementProps.java index b087452266..27efc99f82 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/LineElementProps.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/LineElementProps.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Obeo. + * Copyright (c) 2024, 2025 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 @@ -34,7 +34,8 @@ public record LineElementProps( List headerIconURLs, String headerIndexLabel, int height, - boolean resizable) implements IProps { + boolean resizable, + int depthLevel) implements IProps { public static final String TYPE = "Line"; @@ -57,7 +58,7 @@ public List getChildren() { public static Builder newLineElementProps(UUID id) { return new Builder(id); } - + /** * The builder of the line element props. * @@ -86,6 +87,8 @@ public static final class Builder { private boolean resizable; + private int depthLevel; + private Builder(UUID id) { this.id = Objects.requireNonNull(id); } @@ -135,9 +138,15 @@ public Builder resizable(boolean resizable) { return this; } + public Builder depthLevel(int depthLevel) { + this.depthLevel = depthLevel; + return this; + } + public LineElementProps build() { - return new LineElementProps(this.id, this.descriptionId, this.targetObjectId, this.targetObjectKind, this.children, this.headerLabel, this.headerIconURLs, this.headerIndexLabel, this.height, this.resizable); + return new LineElementProps(this.id, this.descriptionId, this.targetObjectId, this.targetObjectKind, this.children, this.headerLabel, this.headerIconURLs, this.headerIndexLabel, + this.height, this.resizable, this.depthLevel); } } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/TableElementProps.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/TableElementProps.java index c66e577f6a..39d7497ef0 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/TableElementProps.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/elements/TableElementProps.java @@ -26,7 +26,7 @@ * @author lfasani */ public record TableElementProps(String id, String descriptionId, String targetObjectId, String targetObjectKind, - PaginationData paginationData, boolean stripeRow, List children, String globalFilter, List columnFilters) implements IProps { + PaginationData paginationData, boolean stripeRow, List children, String globalFilter, List columnFilters, boolean enableSubRows) implements IProps { public static final String TYPE = "Table"; @@ -76,6 +76,8 @@ public static final class Builder { private List columnFilters; + private boolean enableSubRows; + private Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -120,8 +122,14 @@ public Builder columnFilters(List columnFilters) { return this; } + public Builder enableSubRows(boolean enableSubRows) { + this.enableSubRows = enableSubRows; + return this; + } + public TableElementProps build() { - return new TableElementProps(this.id, this.descriptionId, this.targetObjectId, this.targetObjectKind, this.paginationData, this.stripeRow, this.children, this.globalFilter, this.columnFilters); + return new TableElementProps(this.id, this.descriptionId, this.targetObjectId, this.targetObjectKind, this.paginationData, this.stripeRow, this.children, this.globalFilter, + this.columnFilters, this.enableSubRows); } } } diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableElementFactory.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableElementFactory.java index 7d9bb6de7a..d1cc21b128 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableElementFactory.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableElementFactory.java @@ -81,6 +81,7 @@ private Table instantiateTable(IProps props, List children) { .paginationData(tableElementProps.paginationData()) .globalFilter(tableElementProps.globalFilter()) .columnFilters(tableElementProps.columnFilters()) + .enableSubRows(tableElementProps.enableSubRows()) .build(); } return null; @@ -128,6 +129,7 @@ private Line instantiateLine(IProps props, List children) { .cells(cells) .resizable(lineElementProps.resizable()) .height(lineElementProps.height()) + .depthLevel(lineElementProps.depthLevel()) .build(); } return null; diff --git a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableRenderer.java b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableRenderer.java index 1ad6bb6ccf..3e615f39e5 100644 --- a/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableRenderer.java +++ b/packages/tables/backend/sirius-components-tables/src/main/java/org/eclipse/sirius/components/tables/renderer/TableRenderer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Obeo. + * Copyright (c) 2024, 2025 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 @@ -30,6 +30,7 @@ public class TableRenderer { public static final String PAGINATION_SIZE = "size"; public static final String GLOBAL_FILTER_DATA = "globalFilterData"; public static final String COLUMN_FILTERS = "columnFilters"; + public static final String EXPANDED_IDS = "expandedIds"; private final BaseRenderer baseRenderer; diff --git a/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.tsx b/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.tsx index ffd6d3c4f1..72dee9102a 100644 --- a/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.tsx +++ b/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.tsx @@ -44,6 +44,7 @@ export const TableRepresentation = ({ editingContextId, representationId, readOn ...defaultPagination, globalFilter: null, columnFilters: null, + expanded: [], }); const tableId = tableIdProvider( @@ -52,7 +53,8 @@ export const TableRepresentation = ({ editingContextId, representationId, readOn state.direction, state.size, state.globalFilter, - state.columnFilters + state.columnFilters, + state.expanded ); const { complete, table } = useTableSubscription(editingContextId, tableId); @@ -78,6 +80,14 @@ export const TableRepresentation = ({ editingContextId, representationId, readOn })); }; + const onExpandedElementChange = (rowId: string) => { + if (state.expanded.includes(rowId)) { + setState((prev) => ({ ...prev, expanded: prev.expanded.filter((id) => id !== rowId) })); + } else { + setState((prev) => ({ ...prev, expanded: [...prev.expanded, rowId] })); + } + }; + let completeMessage: JSX.Element | null = null; if (complete) { completeMessage = ( @@ -100,6 +110,7 @@ export const TableRepresentation = ({ editingContextId, representationId, readOn onPaginationChange={onPaginationChange} onGlobalFilterChange={onGlobalFilterChange} onColumnFiltersChange={onColumnFiltersChange} + onExpandedElementChange={onExpandedElementChange} enableColumnVisibility enableColumnResizing enableColumnFilters @@ -107,6 +118,7 @@ export const TableRepresentation = ({ editingContextId, representationId, readOn enableGlobalFilter enablePagination enableColumnOrdering + expandedRowIds={state.expanded} /> ) : null} {completeMessage} diff --git a/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.types.ts b/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.types.ts index 19d691e091..d8a2915f99 100644 --- a/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.types.ts +++ b/packages/tables/frontend/sirius-components-tables/src/representation/TableRepresentation.types.ts @@ -15,6 +15,7 @@ import { ColumnFilter } from '../table/TableContent.types'; export interface TableRepresentationState extends TableRepresentationPagination { globalFilter: string | null; columnFilters: ColumnFilter[] | null; + expanded: string[]; } export interface TableRepresentationPagination { diff --git a/packages/tables/frontend/sirius-components-tables/src/representation/tableIdProvider.ts b/packages/tables/frontend/sirius-components-tables/src/representation/tableIdProvider.ts index 3dbec05d2a..3ec5342a09 100644 --- a/packages/tables/frontend/sirius-components-tables/src/representation/tableIdProvider.ts +++ b/packages/tables/frontend/sirius-components-tables/src/representation/tableIdProvider.ts @@ -19,7 +19,8 @@ export const tableIdProvider = ( direction: 'PREV' | 'NEXT', size: number, globalFilter: string | null, - columnFilters: ColumnFilter[] | null + columnFilters: ColumnFilter[] | null, + expanded: string[] ) => { const globalFilterParam: string = globalFilter !== null ? `&globalFilter=${encodeURIComponent(globalFilter)}` : ''; const columnFiltersParam: string = @@ -31,5 +32,6 @@ export const tableIdProvider = ( .map(encodeURIComponent) .join(',')}]` : ''; - return `${tableId}?cursor=${cursor}&direction=${direction}&size=${size}${globalFilterParam}${columnFiltersParam}`; + const expandIds: string = `&expandedIds=[${expanded.map(encodeURIComponent).join(',')}]`; + return `${tableId}?cursor=${cursor}&direction=${direction}&size=${size}${globalFilterParam}${columnFiltersParam}${expandIds}`; }; diff --git a/packages/tables/frontend/sirius-components-tables/src/representation/useTableSubscription.ts b/packages/tables/frontend/sirius-components-tables/src/representation/useTableSubscription.ts index 3a79ef120a..3d39999311 100644 --- a/packages/tables/frontend/sirius-components-tables/src/representation/useTableSubscription.ts +++ b/packages/tables/frontend/sirius-components-tables/src/representation/useTableSubscription.ts @@ -48,6 +48,7 @@ export const getTableEventSubscription = ` totalRowCount } stripeRow + enableSubRows globalFilter columnFilters { id @@ -74,6 +75,7 @@ export const getTableEventSubscription = ` headerIndexLabel height isResizable + depthLevel cells { __typename id diff --git a/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.tsx b/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.tsx index 03fe56025c..d58955f113 100644 --- a/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.tsx +++ b/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.tsx @@ -11,12 +11,16 @@ * Obeo - initial API and implementation *******************************************************************************/ import { IconOverlay } from '@eclipse-sirius/sirius-components-core'; + +import ChevronRightIcon from '@mui/icons-material/ChevronRight'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; import { useTheme } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import { RowHeaderProps } from './RowHeader.types'; -export const RowHeader = ({ row }: RowHeaderProps) => { +export const RowHeader = ({ row, disabled, isExpanded, onClick, enableSubRows }: RowHeaderProps) => { const theme = useTheme(); return ( { justifyContent="space-between" gap={theme.spacing(2)} data-testid="table-row-header"> - - {row.headerIndexLabel} - + {enableSubRows && ( + onClick(row.targetObjectId)} + sx={{ marginLeft: theme.spacing(row.depthLevel) }} + disabled={disabled}> + {isExpanded ? : } + + )} + {row.headerIndexLabel} {row.headerLabel} diff --git a/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.types.ts b/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.types.ts index 8610393f92..d392dea883 100644 --- a/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.types.ts +++ b/packages/tables/frontend/sirius-components-tables/src/rows/RowHeader.types.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 CEA LIST. + * Copyright (c) 2024, 2025 CEA LIST. * 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 @@ -14,4 +14,8 @@ import { GQLLine } from '../table/TableContent.types'; export interface RowHeaderProps { row: GQLLine; + isExpanded: boolean; + onClick: (rowId: string) => void; + disabled: boolean; + enableSubRows: boolean; } diff --git a/packages/tables/frontend/sirius-components-tables/src/table/TableContent.tsx b/packages/tables/frontend/sirius-components-tables/src/table/TableContent.tsx index 9381a835f4..826f06c3d4 100644 --- a/packages/tables/frontend/sirius-components-tables/src/table/TableContent.tsx +++ b/packages/tables/frontend/sirius-components-tables/src/table/TableContent.tsx @@ -11,10 +11,10 @@ * Obeo - initial API and implementation *******************************************************************************/ import { useSelection } from '@eclipse-sirius/sirius-components-core'; +import FormatLineSpacingIcon from '@mui/icons-material/FormatLineSpacing'; import Box from '@mui/material/Box'; import IconButton from '@mui/material/IconButton'; import { Theme, useTheme } from '@mui/material/styles'; -import FormatLineSpacingIcon from '@mui/icons-material/FormatLineSpacing'; import { MaterialReactTable, MRT_ShowHideColumnsButton, @@ -45,6 +45,7 @@ export const TableContent = memo( onPaginationChange, onGlobalFilterChange, onColumnFiltersChange, + onExpandedElementChange, enableColumnVisibility, enableColumnResizing, enableColumnFilters, @@ -52,6 +53,7 @@ export const TableContent = memo( enableGlobalFilter, enablePagination, enableColumnOrdering, + expandedRowIds, }: TableContentProps) => { const { selection } = useSelection(); const theme: Theme = useTheme(); @@ -70,7 +72,9 @@ export const TableContent = memo( enableColumnFilters, enableColumnOrdering, enableRowSizing, - handleRowHeightChange + handleRowHeightChange, + onExpandedElementChange, + expandedRowIds ); const { columnSizing, setColumnSizing } = useTableColumnSizing( editingContextId, @@ -172,7 +176,7 @@ export const TableContent = memo( enableGlobalFilter, manualFiltering: true, onGlobalFilterChange: setGlobalFilter, - enableColumnPinning: false, + enableColumnPinning: true, initialState: { showGlobalFilter: enableGlobalFilter, columnPinning: { left: ['mrt-row-header'], right: ['mrt-row-actions'] }, diff --git a/packages/tables/frontend/sirius-components-tables/src/table/TableContent.types.ts b/packages/tables/frontend/sirius-components-tables/src/table/TableContent.types.ts index 3c400670ed..ec733bdb80 100644 --- a/packages/tables/frontend/sirius-components-tables/src/table/TableContent.types.ts +++ b/packages/tables/frontend/sirius-components-tables/src/table/TableContent.types.ts @@ -20,6 +20,7 @@ export interface TableContentProps { onPaginationChange: (cursor: string | null, direction: 'PREV' | 'NEXT', size: number) => void; onGlobalFilterChange: (globalFilter: string) => void; onColumnFiltersChange: (columnFilters: ColumnFilter[]) => void; + onExpandedElementChange: (rowId: string) => void; enableColumnVisibility: boolean; enableColumnResizing: boolean; enableColumnFilters: boolean; @@ -27,6 +28,7 @@ export interface TableContentProps { enableGlobalFilter: boolean; enablePagination: boolean; enableColumnOrdering: boolean; + expandedRowIds: string[]; } export interface TablePaginationState { @@ -52,6 +54,7 @@ export interface GQLTable { id: string; targetObjectId: string; stripeRow: boolean; + enableSubRows: boolean; globalFilter: string | null; columns: GQLColumn[]; lines: GQLLine[]; @@ -94,6 +97,7 @@ export interface GQLLine { headerIndexLabel: string; height: number; isResizable: boolean; + depthLevel: number; } export interface GQLPaginationData { diff --git a/packages/tables/frontend/sirius-components-tables/src/table/useTableColumns.tsx b/packages/tables/frontend/sirius-components-tables/src/table/useTableColumns.tsx index b4bb7984c2..0fbd706e54 100644 --- a/packages/tables/frontend/sirius-components-tables/src/table/useTableColumns.tsx +++ b/packages/tables/frontend/sirius-components-tables/src/table/useTableColumns.tsx @@ -30,7 +30,9 @@ export const useTableColumns = ( enableColumnFilters: boolean, enableColumnOrdering: boolean, enableRowSizing: boolean, - handleRowHeightChange: (rowId: string, height: number) => void + handleRowHeightChange: (rowId: string, height: number) => void, + onExpandedElement: (rowId: string) => void, + expandedRowIds: string[] ): UseTableColumnsValue => { const { setSelection } = useSelection(); const columns = useMemo[]>(() => { @@ -80,7 +82,13 @@ export const useTableColumns = ( }; setSelection(newSelection); }}> - + {enableRowSizing ? ( caseTableWidgetDescription(org.eclips .cellDescriptions(new CellDescriptionConverter(this.tableIdProvider, this.objectService).convert(viewTableWidgetDescription.getCellDescriptions(), this.interpreter)) .lineDescription(new RowDescriptionConverter(this.tableIdProvider, this.semanticTargetIdProvider, variableManager -> "").convert(viewTableWidgetDescription.getRowDescription(), this.interpreter)) + .enableSubRows(false) .build(); var tableWidgetDescription = TableWidgetDescription.newTableWidgetDescription(descriptionId) .targetObjectIdProvider(this.semanticTargetIdProvider) diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java index 1296b633cf..b6d190c3d0 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java @@ -51,6 +51,7 @@ public LineDescription convert(org.eclipse.sirius.components.view.table.RowDescr .headerIndexLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, rowDescription.getHeaderIndexLabelExpression())) .isResizablePredicate(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), rowDescription.getIsResizableExpression()).asBoolean().orElse(false)) .initialHeightProvider(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), rowDescription.getInitialHeightExpression()).asInt().orElse(-1)) + .depthLevelProvider(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), rowDescription.getDepthLevelExpression()).asInt().orElse(0)) .build(); } diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java index 5bae2ee6fa..5d2925705d 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java @@ -88,6 +88,7 @@ public IRepresentationDescription convert(RepresentationDescription representati .cellDescriptions(new CellDescriptionConverter(this.tableIdProvider, this.objectService).convert(viewTableDescription.getCellDescriptions(), interpreter)) .isStripeRowPredicate(isStripeRowPredicate) .iconURLsProvider(new ViewIconURLsProvider(interpreter, viewTableDescription.getIconExpression())) + .enableSubRows(viewTableDescription.isEnableSubRows()) .build(); } diff --git a/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/RowDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/RowDescriptionItemProvider.java index f463c8e6c5..8d44f9a96d 100644 --- a/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/RowDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/RowDescriptionItemProvider.java @@ -72,6 +72,7 @@ public List getPropertyDescriptors(Object object) { this.addHeaderIndexLabelExpressionPropertyDescriptor(object); this.addInitialHeightExpressionPropertyDescriptor(object); this.addIsResizableExpressionPropertyDescriptor(object); + this.addDepthLevelExpressionPropertyDescriptor(object); } return this.itemPropertyDescriptors; } @@ -188,6 +189,19 @@ protected void addIsResizableExpressionPropertyDescriptor(Object object) { ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); } + /** + * This adds a property descriptor for the Depth Level Expression feature. + * + * @generated + */ + protected void addDepthLevelExpressionPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_RowDescription_depthLevelExpression_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_RowDescription_depthLevelExpression_feature", "_UI_RowDescription_type"), + TablePackage.Literals.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + /** * This specifies how to implement {@link #getChildren} and is used to deduce an * appropriate feature for an {@link org.eclipse.emf.edit.command.AddCommand}, @@ -273,6 +287,7 @@ public void notifyChanged(Notification notification) { case TablePackage.ROW_DESCRIPTION__HEADER_INDEX_LABEL_EXPRESSION: case TablePackage.ROW_DESCRIPTION__INITIAL_HEIGHT_EXPRESSION: case TablePackage.ROW_DESCRIPTION__IS_RESIZABLE_EXPRESSION: + case TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; case TablePackage.ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES: diff --git a/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/TableDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/TableDescriptionItemProvider.java index beea0a8abc..3e0ccfd560 100644 --- a/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/TableDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-table-edit/src/main/java/org/eclipse/sirius/components/view/table/provider/TableDescriptionItemProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 CEA LIST. + * Copyright (c) 2024, 2025 CEA LIST. * 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 @@ -60,6 +60,7 @@ public List getPropertyDescriptors(Object object) { this.addUseStripedRowsExpressionPropertyDescriptor(object); this.addRowDescriptionPropertyDescriptor(object); + this.addEnableSubRowsPropertyDescriptor(object); } return this.itemPropertyDescriptors; } @@ -95,6 +96,18 @@ protected void addRowDescriptionPropertyDescriptor(Object object) { TablePackage.Literals.TABLE_DESCRIPTION__ROW_DESCRIPTION, true, false, true, null, null, null)); } + /** + * This adds a property descriptor for the Enable Sub Rows feature. + * + * @generated + */ + protected void addEnableSubRowsPropertyDescriptor(Object object) { + this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(), + this.getString("_UI_TableDescription_enableSubRows_feature"), + this.getString("_UI_PropertyDescriptor_description", "_UI_TableDescription_enableSubRows_feature", "_UI_TableDescription_type"), + TablePackage.Literals.TABLE_DESCRIPTION__ENABLE_SUB_ROWS, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null)); + } + /** * This specifies how to implement {@link #getChildren} and is used to deduce an * appropriate feature for an {@link org.eclipse.emf.edit.command.AddCommand}, @@ -176,6 +189,7 @@ public void notifyChanged(Notification notification) { switch (notification.getFeatureID(TableDescription.class)) { case TablePackage.TABLE_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION: + case TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS: this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; case TablePackage.TABLE_DESCRIPTION__COLUMN_DESCRIPTIONS: diff --git a/packages/view/backend/sirius-components-view-table-edit/src/main/resources/plugin.properties b/packages/view/backend/sirius-components-view-table-edit/src/main/resources/plugin.properties index 63c2fe3962..5f14508430 100644 --- a/packages/view/backend/sirius-components-view-table-edit/src/main/resources/plugin.properties +++ b/packages/view/backend/sirius-components-view-table-edit/src/main/resources/plugin.properties @@ -40,6 +40,7 @@ _UI_TableDescription_useStripedRowsExpression_feature=Use Striped Rows Expressio _UI_TableDescription_columnDescriptions_feature=Column Descriptions _UI_TableDescription_rowDescription_feature=Row Description _UI_TableDescription_cellDescriptions_feature=Cell Descriptions +_UI_TableDescription_enableSubRows_feature=Enable Sub Rows _UI_ColumnDescription_name_feature=Name _UI_ColumnDescription_domainType_feature=Domain Type _UI_ColumnDescription_semanticCandidatesExpression_feature=Semantic Candidates Expression @@ -58,6 +59,7 @@ _UI_RowDescription_headerIndexLabelExpression_feature=Header Index Label Express _UI_RowDescription_initialHeightExpression_feature=Initial Height Expression _UI_RowDescription_isResizableExpression_feature=Is Resizable Expression _UI_RowDescription_contextMenuEntries_feature=Context Menu Entries +_UI_RowDescription_depthLevelExpression_feature=Depth Level Expression _UI_CellDescription_name_feature=Name _UI_CellDescription_preconditionExpression_feature=Precondition Expression _UI_CellDescription_selectedTargetObjectExpression_feature=Selected Target Object Expression diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/RowDescription.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/RowDescription.java index 2b27bb082d..696950aca0 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/RowDescription.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/RowDescription.java @@ -37,6 +37,8 @@ * Expression} *
  • {@link org.eclipse.sirius.components.view.table.RowDescription#getContextMenuEntries Context Menu * Entries}
  • + *
  • {@link org.eclipse.sirius.components.view.table.RowDescription#getDepthLevelExpression Depth Level + * Expression}
  • * * * @model @@ -219,4 +221,27 @@ public interface RowDescription extends EObject { */ EList getContextMenuEntries(); + /** + * Returns the value of the 'Depth Level Expression' attribute. + * + * @return the value of the 'Depth Level Expression' attribute. + * @model dataType="org.eclipse.sirius.components.view.InterpretedExpression" + * @generated + * @see #setDepthLevelExpression(String) + * @see org.eclipse.sirius.components.view.table.TablePackage#getRowDescription_DepthLevelExpression() + */ + String getDepthLevelExpression(); + + /** + * Sets the value of the '{@link org.eclipse.sirius.components.view.table.RowDescription#getDepthLevelExpression + * Depth Level Expression}' attribute. + * + * @param value + * the new value of the 'Depth Level Expression' attribute. + * @generated + * @see #getDepthLevelExpression() + */ + void setDepthLevelExpression(String value); + } // RowDescription diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TableDescription.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TableDescription.java index 07efeafc27..2718103ea4 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TableDescription.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TableDescription.java @@ -29,6 +29,7 @@ *
  • {@link org.eclipse.sirius.components.view.table.TableDescription#getRowDescription Row Description}
  • *
  • {@link org.eclipse.sirius.components.view.table.TableDescription#getCellDescriptions Cell * Descriptions}
  • + *
  • {@link org.eclipse.sirius.components.view.table.TableDescription#isEnableSubRows Enable Sub Rows}
  • * * * @model @@ -108,4 +109,27 @@ public interface TableDescription extends RepresentationDescription { */ EList getCellDescriptions(); + /** + * Returns the value of the 'Enable Sub Rows' attribute. + * + * @return the value of the 'Enable Sub Rows' attribute. + * @model required="true" + * @generated + * @see #setEnableSubRows(boolean) + * @see org.eclipse.sirius.components.view.table.TablePackage#getTableDescription_EnableSubRows() + */ + boolean isEnableSubRows(); + + /** + * Sets the value of the '{@link org.eclipse.sirius.components.view.table.TableDescription#isEnableSubRows + * Enable Sub Rows}' attribute. + * + * @param value + * the new value of the 'Enable Sub Rows' attribute. + * @generated + * @see #isEnableSubRows() + */ + void setEnableSubRows(boolean value); + } // TableDescription diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TablePackage.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TablePackage.java index 912164e201..912cc867a2 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TablePackage.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/TablePackage.java @@ -144,6 +144,14 @@ public interface TablePackage extends EPackage { */ int TABLE_DESCRIPTION__CELL_DESCRIPTIONS = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 3; + /** + * The feature id for the 'Enable Sub Rows' attribute. + * + * @generated + * @ordered + */ + int TABLE_DESCRIPTION__ENABLE_SUB_ROWS = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 4; + /** * The number of structural features of the 'Description' class. @@ -151,7 +159,7 @@ public interface TablePackage extends EPackage { * @generated * @ordered */ - int TABLE_DESCRIPTION_FEATURE_COUNT = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 4; + int TABLE_DESCRIPTION_FEATURE_COUNT = ViewPackage.REPRESENTATION_DESCRIPTION_FEATURE_COUNT + 5; /** * The number of operations of the 'Description' class. @@ -358,6 +366,15 @@ public interface TablePackage extends EPackage { */ int ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES = 7; + /** + * The feature id for the 'Depth Level Expression' attribute. + * + * @generated + * @ordered + */ + int ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION = 8; + /** * The number of structural features of the 'Row Description' class. @@ -365,7 +382,7 @@ public interface TablePackage extends EPackage { * @generated * @ordered */ - int ROW_DESCRIPTION_FEATURE_COUNT = 8; + int ROW_DESCRIPTION_FEATURE_COUNT = 9; /** * The number of operations of the 'Row Description' class. @@ -732,6 +749,18 @@ public interface TablePackage extends EPackage { */ EReference getTableDescription_CellDescriptions(); + /** + * Returns the meta object for the attribute + * '{@link org.eclipse.sirius.components.view.table.TableDescription#isEnableSubRows Enable Sub Rows}'. + * + * + * @return the meta object for the attribute 'Enable Sub Rows'. + * @generated + * @see org.eclipse.sirius.components.view.table.TableDescription#isEnableSubRows() + * @see #getTableDescription() + */ + EAttribute getTableDescription_EnableSubRows(); + /** * Returns the meta object for class '{@link org.eclipse.sirius.components.view.table.ColumnDescription Column * Description}'. @@ -967,6 +996,18 @@ public interface TablePackage extends EPackage { */ EReference getRowDescription_ContextMenuEntries(); + /** + * Returns the meta object for the attribute + * '{@link org.eclipse.sirius.components.view.table.RowDescription#getDepthLevelExpression Depth Level + * Expression}'. + * + * @return the meta object for the attribute 'Depth Level Expression'. + * @generated + * @see org.eclipse.sirius.components.view.table.RowDescription#getDepthLevelExpression() + * @see #getRowDescription() + */ + EAttribute getRowDescription_DepthLevelExpression(); + /** * Returns the meta object for class '{@link org.eclipse.sirius.components.view.table.CellDescription Cell * Description}'. @@ -1260,6 +1301,14 @@ interface Literals { */ EReference TABLE_DESCRIPTION__CELL_DESCRIPTIONS = eINSTANCE.getTableDescription_CellDescriptions(); + /** + * The meta object literal for the 'Enable Sub Rows' attribute feature. + * + * + * @generated + */ + EAttribute TABLE_DESCRIPTION__ENABLE_SUB_ROWS = eINSTANCE.getTableDescription_EnableSubRows(); + /** * The meta object literal for the '{@link org.eclipse.sirius.components.view.table.impl.ColumnDescriptionImpl * Column Description}' class. @@ -1424,6 +1473,14 @@ interface Literals { */ EReference ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES = eINSTANCE.getRowDescription_ContextMenuEntries(); + /** + * The meta object literal for the 'Depth Level Expression' attribute feature. + * + * @generated + */ + EAttribute ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION = eINSTANCE.getRowDescription_DepthLevelExpression(); + /** * The meta object literal for the '{@link org.eclipse.sirius.components.view.table.impl.CellDescriptionImpl * Cell Description}' class. diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/ColumnDescriptionImpl.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/ColumnDescriptionImpl.java index 8844f26c8d..007c122168 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/ColumnDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/ColumnDescriptionImpl.java @@ -12,6 +12,8 @@ *******************************************************************************/ package org.eclipse.sirius.components.view.table.impl; +import java.util.Objects; + import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; @@ -600,11 +602,11 @@ public void eUnset(int featureID) { public boolean eIsSet(int featureID) { switch (featureID) { case TablePackage.COLUMN_DESCRIPTION__NAME: - return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name); + return !Objects.equals(NAME_EDEFAULT, this.name); case TablePackage.COLUMN_DESCRIPTION__DOMAIN_TYPE: return DOMAIN_TYPE_EDEFAULT == null ? this.domainType != null : !DOMAIN_TYPE_EDEFAULT.equals(this.domainType); case TablePackage.COLUMN_DESCRIPTION__SEMANTIC_CANDIDATES_EXPRESSION: - return SEMANTIC_CANDIDATES_EXPRESSION_EDEFAULT == null ? this.semanticCandidatesExpression != null : !SEMANTIC_CANDIDATES_EXPRESSION_EDEFAULT.equals(this.semanticCandidatesExpression); + return !Objects.equals(SEMANTIC_CANDIDATES_EXPRESSION_EDEFAULT, this.semanticCandidatesExpression); case TablePackage.COLUMN_DESCRIPTION__PRECONDITION_EXPRESSION: return PRECONDITION_EXPRESSION_EDEFAULT == null ? this.preconditionExpression != null : !PRECONDITION_EXPRESSION_EDEFAULT.equals(this.preconditionExpression); case TablePackage.COLUMN_DESCRIPTION__HEADER_INDEX_LABEL_EXPRESSION: @@ -633,29 +635,28 @@ public String toString() { if (this.eIsProxy()) return super.toString(); - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (name: "); - result.append(this.name); - result.append(", domainType: "); - result.append(this.domainType); - result.append(", semanticCandidatesExpression: "); - result.append(this.semanticCandidatesExpression); - result.append(", preconditionExpression: "); - result.append(this.preconditionExpression); - result.append(", headerIndexLabelExpression: "); - result.append(this.headerIndexLabelExpression); - result.append(", headerLabelExpression: "); - result.append(this.headerLabelExpression); - result.append(", headerIconExpression: "); - result.append(this.headerIconExpression); - result.append(", initialWidthExpression: "); - result.append(this.initialWidthExpression); - result.append(", isResizableExpression: "); - result.append(this.isResizableExpression); - result.append(", filterWidgetExpression: "); - result.append(this.filterWidgetExpression); - result.append(')'); - return result.toString(); + String result = super.toString() + " (name: " + + this.name + + ", domainType: " + + this.domainType + + ", semanticCandidatesExpression: " + + this.semanticCandidatesExpression + + ", preconditionExpression: " + + this.preconditionExpression + + ", headerIndexLabelExpression: " + + this.headerIndexLabelExpression + + ", headerLabelExpression: " + + this.headerLabelExpression + + ", headerIconExpression: " + + this.headerIconExpression + + ", initialWidthExpression: " + + this.initialWidthExpression + + ", isResizableExpression: " + + this.isResizableExpression + + ", filterWidgetExpression: " + + this.filterWidgetExpression + + ')'; + return result; } } // ColumnDescriptionImpl diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/RowDescriptionImpl.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/RowDescriptionImpl.java index b4953479a4..81d989ac05 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/RowDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/RowDescriptionImpl.java @@ -108,6 +108,15 @@ public class RowDescriptionImpl extends MinimalEObjectImpl.Container implements * @see #getIsResizableExpression() */ protected static final String IS_RESIZABLE_EXPRESSION_EDEFAULT = ""; + /** + * The default value of the '{@link #getDepthLevelExpression() Depth Level Expression}' attribute. + * + * @generated + * @ordered + * @see #getDepthLevelExpression() + */ + protected static final String DEPTH_LEVEL_EXPRESSION_EDEFAULT = null; /** * The cached value of the '{@link #getName() Name}' attribute. @@ -171,7 +180,6 @@ public class RowDescriptionImpl extends MinimalEObjectImpl.Container implements * @see #getIsResizableExpression() */ protected String isResizableExpression = IS_RESIZABLE_EXPRESSION_EDEFAULT; - /** * The cached value of the '{@link #getContextMenuEntries() Context Menu Entries}' containment reference * list. @@ -181,6 +189,15 @@ public class RowDescriptionImpl extends MinimalEObjectImpl.Container implements * @see #getContextMenuEntries() */ protected EList contextMenuEntries; + /** + * The cached value of the '{@link #getDepthLevelExpression() Depth Level Expression}' attribute. + * + * @generated + * @ordered + * @see #getDepthLevelExpression() + */ + protected String depthLevelExpression = DEPTH_LEVEL_EXPRESSION_EDEFAULT; /** * @@ -376,6 +393,29 @@ public EList getContextMenuEntries() { return this.contextMenuEntries; } + /** + * + * + * @generated + */ + @Override + public String getDepthLevelExpression() { + return this.depthLevelExpression; + } + + /** + * + * + * @generated + */ + @Override + public void setDepthLevelExpression(String newDepthLevelExpression) { + String oldDepthLevelExpression = this.depthLevelExpression; + this.depthLevelExpression = newDepthLevelExpression; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION, oldDepthLevelExpression, this.depthLevelExpression)); + } + /** * * @@ -414,6 +454,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getIsResizableExpression(); case TablePackage.ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES: return this.getContextMenuEntries(); + case TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION: + return this.getDepthLevelExpression(); } return super.eGet(featureID, resolve, coreType); } @@ -452,6 +494,9 @@ public void eSet(int featureID, Object newValue) { this.getContextMenuEntries().clear(); this.getContextMenuEntries().addAll((Collection) newValue); return; + case TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION: + this.setDepthLevelExpression((String) newValue); + return; } super.eSet(featureID, newValue); } @@ -488,6 +533,9 @@ public void eUnset(int featureID) { case TablePackage.ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES: this.getContextMenuEntries().clear(); return; + case TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION: + this.setDepthLevelExpression(DEPTH_LEVEL_EXPRESSION_EDEFAULT); + return; } super.eUnset(featureID); } @@ -516,6 +564,8 @@ public boolean eIsSet(int featureID) { return IS_RESIZABLE_EXPRESSION_EDEFAULT == null ? this.isResizableExpression != null : !IS_RESIZABLE_EXPRESSION_EDEFAULT.equals(this.isResizableExpression); case TablePackage.ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES: return this.contextMenuEntries != null && !this.contextMenuEntries.isEmpty(); + case TablePackage.ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION: + return !Objects.equals(DEPTH_LEVEL_EXPRESSION_EDEFAULT, this.depthLevelExpression); } return super.eIsSet(featureID); } @@ -544,6 +594,8 @@ public String toString() { this.initialHeightExpression + ", isResizableExpression: " + this.isResizableExpression + + ", depthLevelExpression: " + + this.depthLevelExpression + ')'; return result; } diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TableDescriptionImpl.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TableDescriptionImpl.java index 3a839497d3..8bc708ed01 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TableDescriptionImpl.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TableDescriptionImpl.java @@ -13,6 +13,7 @@ package org.eclipse.sirius.components.view.table.impl; import java.util.Collection; +import java.util.Objects; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; @@ -43,6 +44,8 @@ * Description} *
  • {@link org.eclipse.sirius.components.view.table.impl.TableDescriptionImpl#getCellDescriptions Cell * Descriptions}
  • + *
  • {@link org.eclipse.sirius.components.view.table.impl.TableDescriptionImpl#isEnableSubRows Enable Sub + * Rows}
  • * * * @generated @@ -58,7 +61,15 @@ public class TableDescriptionImpl extends RepresentationDescriptionImpl implemen * @see #getUseStripedRowsExpression() */ protected static final String USE_STRIPED_ROWS_EXPRESSION_EDEFAULT = null; - + /** + * The default value of the '{@link #isEnableSubRows() Enable Sub Rows}' attribute. + * + * + * @generated + * @ordered + * @see #isEnableSubRows() + */ + protected static final boolean ENABLE_SUB_ROWS_EDEFAULT = false; /** * The cached value of the '{@link #getUseStripedRowsExpression() Use Striped Rows Expression}' attribute. * @@ -99,6 +110,16 @@ public class TableDescriptionImpl extends RepresentationDescriptionImpl implemen */ protected EList cellDescriptions; + /** + * The cached value of the '{@link #isEnableSubRows() Enable Sub Rows}' attribute. + * + * + * @generated + * @ordered + * @see #isEnableSubRows() + */ + protected boolean enableSubRows = ENABLE_SUB_ROWS_EDEFAULT; + /** * * @@ -215,6 +236,29 @@ public EList getCellDescriptions() { return this.cellDescriptions; } + /** + * + * + * @generated + */ + @Override + public boolean isEnableSubRows() { + return this.enableSubRows; + } + + /** + * + * + * @generated + */ + @Override + public void setEnableSubRows(boolean newEnableSubRows) { + boolean oldEnableSubRows = this.enableSubRows; + this.enableSubRows = newEnableSubRows; + if (this.eNotificationRequired()) + this.eNotify(new ENotificationImpl(this, Notification.SET, TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS, oldEnableSubRows, this.enableSubRows)); + } + /** * * @@ -249,6 +293,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return this.getRowDescription(); case TablePackage.TABLE_DESCRIPTION__CELL_DESCRIPTIONS: return this.getCellDescriptions(); + case TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS: + return this.isEnableSubRows(); } return super.eGet(featureID, resolve, coreType); } @@ -276,6 +322,9 @@ public void eSet(int featureID, Object newValue) { this.getCellDescriptions().clear(); this.getCellDescriptions().addAll((Collection) newValue); return; + case TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS: + this.setEnableSubRows((Boolean) newValue); + return; } super.eSet(featureID, newValue); } @@ -295,11 +344,14 @@ public void eUnset(int featureID) { this.getColumnDescriptions().clear(); return; case TablePackage.TABLE_DESCRIPTION__ROW_DESCRIPTION: - this.setRowDescription((RowDescription) null); + this.setRowDescription(null); return; case TablePackage.TABLE_DESCRIPTION__CELL_DESCRIPTIONS: this.getCellDescriptions().clear(); return; + case TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS: + this.setEnableSubRows(ENABLE_SUB_ROWS_EDEFAULT); + return; } super.eUnset(featureID); } @@ -313,13 +365,15 @@ public void eUnset(int featureID) { public boolean eIsSet(int featureID) { switch (featureID) { case TablePackage.TABLE_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION: - return USE_STRIPED_ROWS_EXPRESSION_EDEFAULT == null ? this.useStripedRowsExpression != null : !USE_STRIPED_ROWS_EXPRESSION_EDEFAULT.equals(this.useStripedRowsExpression); + return !Objects.equals(USE_STRIPED_ROWS_EXPRESSION_EDEFAULT, this.useStripedRowsExpression); case TablePackage.TABLE_DESCRIPTION__COLUMN_DESCRIPTIONS: return this.columnDescriptions != null && !this.columnDescriptions.isEmpty(); case TablePackage.TABLE_DESCRIPTION__ROW_DESCRIPTION: return this.rowDescription != null; case TablePackage.TABLE_DESCRIPTION__CELL_DESCRIPTIONS: return this.cellDescriptions != null && !this.cellDescriptions.isEmpty(); + case TablePackage.TABLE_DESCRIPTION__ENABLE_SUB_ROWS: + return this.enableSubRows != ENABLE_SUB_ROWS_EDEFAULT; } return super.eIsSet(featureID); } @@ -334,11 +388,12 @@ public String toString() { if (this.eIsProxy()) return super.toString(); - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (useStripedRowsExpression: "); - result.append(this.useStripedRowsExpression); - result.append(')'); - return result.toString(); + String result = super.toString() + " (useStripedRowsExpression: " + + this.useStripedRowsExpression + + ", enableSubRows: " + + this.enableSubRows + + ')'; + return result; } } // TableDescriptionImpl diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TablePackageImpl.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TablePackageImpl.java index 895335de76..ec4aa84783 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TablePackageImpl.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/impl/TablePackageImpl.java @@ -37,76 +37,66 @@ */ public class TablePackageImpl extends EPackageImpl implements TablePackage { + /** + * + * + * @generated + */ + private static boolean isInited = false; /** * * * @generated */ private EClass tableDescriptionEClass = null; - /** * * * @generated */ private EClass columnDescriptionEClass = null; - /** * * * @generated */ private EClass rowDescriptionEClass = null; - /** * * * @generated */ private EClass cellDescriptionEClass = null; - /** * * * @generated */ private EClass cellWidgetDescriptionEClass = null; - /** * * * @generated */ private EClass cellTextfieldWidgetDescriptionEClass = null; - /** * * * @generated */ private EClass cellLabelWidgetDescriptionEClass = null; - /** * * * @generated */ private EClass cellTextareaWidgetDescriptionEClass = null; - /** * * * @generated */ private EClass rowContextMenuEntryEClass = null; - - /** - * - * - * @generated - */ - private static boolean isInited = false; - /** * * @@ -228,6 +218,16 @@ public EReference getTableDescription_CellDescriptions() { return (EReference) this.tableDescriptionEClass.getEStructuralFeatures().get(3); } + /** + * + * + * @generated + */ + @Override + public EAttribute getTableDescription_EnableSubRows() { + return (EAttribute) this.tableDescriptionEClass.getEStructuralFeatures().get(4); + } + /** * * @@ -428,6 +428,16 @@ public EReference getRowDescription_ContextMenuEntries() { return (EReference) this.rowDescriptionEClass.getEStructuralFeatures().get(7); } + /** + * + * + * @generated + */ + @Override + public EAttribute getRowDescription_DepthLevelExpression() { + return (EAttribute) this.rowDescriptionEClass.getEStructuralFeatures().get(8); + } + /** * * @@ -655,6 +665,7 @@ public void createPackageContents() { this.createEReference(this.tableDescriptionEClass, TABLE_DESCRIPTION__COLUMN_DESCRIPTIONS); this.createEReference(this.tableDescriptionEClass, TABLE_DESCRIPTION__ROW_DESCRIPTION); this.createEReference(this.tableDescriptionEClass, TABLE_DESCRIPTION__CELL_DESCRIPTIONS); + this.createEAttribute(this.tableDescriptionEClass, TABLE_DESCRIPTION__ENABLE_SUB_ROWS); this.columnDescriptionEClass = this.createEClass(COLUMN_DESCRIPTION); this.createEAttribute(this.columnDescriptionEClass, COLUMN_DESCRIPTION__NAME); @@ -677,6 +688,7 @@ public void createPackageContents() { this.createEAttribute(this.rowDescriptionEClass, ROW_DESCRIPTION__INITIAL_HEIGHT_EXPRESSION); this.createEAttribute(this.rowDescriptionEClass, ROW_DESCRIPTION__IS_RESIZABLE_EXPRESSION); this.createEReference(this.rowDescriptionEClass, ROW_DESCRIPTION__CONTEXT_MENU_ENTRIES); + this.createEAttribute(this.rowDescriptionEClass, ROW_DESCRIPTION__DEPTH_LEVEL_EXPRESSION); this.cellDescriptionEClass = this.createEClass(CELL_DESCRIPTION); this.createEAttribute(this.cellDescriptionEClass, CELL_DESCRIPTION__NAME); @@ -747,6 +759,8 @@ public void initializePackageContents() { this.initEReference(this.getTableDescription_CellDescriptions(), this.getCellDescription(), null, "cellDescriptions", null, 0, -1, TableDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.getTableDescription_CellDescriptions().getEKeys().add(this.getCellDescription_Name()); + this.initEAttribute(this.getTableDescription_EnableSubRows(), this.ecorePackage.getEBoolean(), "enableSubRows", null, 1, 1, TableDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, + !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEClass(this.columnDescriptionEClass, ColumnDescription.class, "ColumnDescription", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); this.initEAttribute(this.getColumnDescription_Name(), theViewPackage.getIdentifier(), "name", null, 0, 1, ColumnDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, @@ -787,6 +801,8 @@ public void initializePackageContents() { !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEReference(this.getRowDescription_ContextMenuEntries(), this.getRowContextMenuEntry(), null, "contextMenuEntries", null, 0, -1, RowDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + this.initEAttribute(this.getRowDescription_DepthLevelExpression(), theViewPackage.getInterpretedExpression(), "depthLevelExpression", null, 0, 1, RowDescription.class, !IS_TRANSIENT, + !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); this.initEClass(this.cellDescriptionEClass, CellDescription.class, "CellDescription", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); this.initEAttribute(this.getCellDescription_Name(), theViewPackage.getIdentifier(), "name", null, 0, 1, CellDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableAdapterFactory.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableAdapterFactory.java index d9b3468033..827ba553b5 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableAdapterFactory.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableAdapterFactory.java @@ -86,13 +86,13 @@ public Adapter caseCellLabelWidgetDescription(CellLabelWidgetDescription object) } @Override - public Adapter caseCellTextareaWidgetDescription(CellTextareaWidgetDescription object) { - return TableAdapterFactory.this.createCellTextareaWidgetDescriptionAdapter(); + public Adapter caseRowContextMenuEntry(RowContextMenuEntry object) { + return TableAdapterFactory.this.createRowContextMenuEntryAdapter(); } @Override - public Adapter caseRowContextMenuEntry(RowContextMenuEntry object) { - return TableAdapterFactory.this.createRowContextMenuEntryAdapter(); + public Adapter caseCellTextareaWidgetDescription(CellTextareaWidgetDescription object) { + return TableAdapterFactory.this.createCellTextareaWidgetDescriptionAdapter(); } @Override @@ -268,8 +268,8 @@ public Adapter createCellTextareaWidgetDescriptionAdapter() { * end-user-doc --> * * @return the new adapter. - * @see org.eclipse.sirius.components.view.table.RowContextMenuEntry * @generated + * @see org.eclipse.sirius.components.view.table.RowContextMenuEntry */ public Adapter createRowContextMenuEntryAdapter() { return null; diff --git a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableSwitch.java b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableSwitch.java index 62c8691f90..55e905d227 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableSwitch.java +++ b/packages/view/backend/sirius-components-view-table/src/main/java/org/eclipse/sirius/components/view/table/util/TableSwitch.java @@ -134,6 +134,13 @@ protected T doSwitch(int classifierID, EObject theEObject) { result = this.defaultCase(theEObject); return result; } + case TablePackage.ROW_CONTEXT_MENU_ENTRY: { + RowContextMenuEntry rowContextMenuEntry = (RowContextMenuEntry) theEObject; + T result = this.caseRowContextMenuEntry(rowContextMenuEntry); + if (result == null) + result = this.defaultCase(theEObject); + return result; + } case TablePackage.CELL_TEXTAREA_WIDGET_DESCRIPTION: { CellTextareaWidgetDescription cellTextareaWidgetDescription = (CellTextareaWidgetDescription) theEObject; T result = this.caseCellTextareaWidgetDescription(cellTextareaWidgetDescription); @@ -143,13 +150,6 @@ protected T doSwitch(int classifierID, EObject theEObject) { result = this.defaultCase(theEObject); return result; } - case TablePackage.ROW_CONTEXT_MENU_ENTRY: { - RowContextMenuEntry rowContextMenuEntry = (RowContextMenuEntry) theEObject; - T result = this.caseRowContextMenuEntry(rowContextMenuEntry); - if (result == null) - result = this.defaultCase(theEObject); - return result; - } default: return this.defaultCase(theEObject); } @@ -280,10 +280,10 @@ public T caseCellTextareaWidgetDescription(CellTextareaWidgetDescription object) * end-user-doc --> * * @param object - * the target of the switch. + * the target of the switch. * @return the result of interpreting the object as an instance of 'Row Context Menu Entry'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) * @generated + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) */ public T caseRowContextMenuEntry(RowContextMenuEntry object) { return null; diff --git a/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.ecore b/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.ecore index ae74c07d09..90441b2654 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.ecore +++ b/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.ecore @@ -10,6 +10,8 @@ containment="true" eKeys="#//RowDescription/name"/> + @@ -58,6 +60,7 @@ defaultValueLiteral=""/> + diff --git a/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.genmodel b/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.genmodel index e7c97008ef..1472f58b59 100644 --- a/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.genmodel +++ b/packages/view/backend/sirius-components-view-table/src/main/resources/model/table.genmodel @@ -18,6 +18,7 @@ + @@ -40,6 +41,7 @@ +