From 1d2464f3a6c4734affffc5372feee00d50c54007 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20ROU=C3=8BN=C3=89?=
Date: Fri, 31 Jan 2025 09:48:22 +0100
Subject: [PATCH] [4329] Add support for tables as widget in the form view DSL
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bug: https://github.com/eclipse-sirius/sirius-web/issues/4329
Signed-off-by: Florian ROUËNÉ
Signed-off-by: Guillaume Coutable
---
.github/workflows/build.yml | 3 +-
CHANGELOG.adoc | 1 +
package-lock.json | 106 ++++
.../tables/CursorBasedNavigationServices.java | 4 +
.../formdescriptioneditors/backend/pom.xml | 3 +-
.../.checkstyle | 11 +
.../.classpath | 57 ++
.../.project | 29 +
.../org.eclipse.core.resources.prefs | 6 +
.../.settings/org.eclipse.core.runtime.prefs | 3 +
.../.settings/org.eclipse.jdt.apt.core.prefs | 2 +
.../.settings/org.eclipse.jdt.core.prefs | 505 ++++++++++++++++++
.../.settings/org.eclipse.jdt.ui.prefs | 210 ++++++++
.../.settings/org.eclipse.m2e.core.prefs | 4 +
.../org.springframework.ide.eclipse.prefs | 2 +
.../README.adoc | 12 +
.../pom.xml | 121 +++++
.../table/TableWidgetDescriptionProvider.java | 40 ++
.../TableWidgetPreviewConverterProvider.java | 95 ++++
.../src/main/resources/.gitkeep | 0
.../architecture/ArchitectureConstants.java | 36 ++
.../table/architecture/CodingRulesTests.java | 43 ++
.../table/architecture/ImmutableTests.java | 36 ++
.../src/test/resources/logback-test.xml | 3 +
.../forms/description/GroupDescription.java | 21 +-
.../forms/description/PageDescription.java | 18 +-
.../sirius-components-widget-table/.gitignore | 1 +
.../.prettierrc | 22 +
.../package.json | 85 +++
.../src/TableWidgetPreview.tsx | 107 ++++
.../src/index.ts | 13 +
.../tsconfig.json | 16 +
.../vite.config.js | 24 +
.../vitestSetup.js | 15 +
.../backend/sirius-web-application/pom.xml | 10 +
.../StudioEditingContextInitializer.java | 2 +
.../emf/EMFAdapterFactoryConfiguration.java | 8 +-
...EMFChildExtenderProviderConfiguration.java | 8 +-
.../AttributesTableDescriptionProvider.java | 142 -----
.../details/ClassPageDescriptionProvider.java | 36 +-
.../details/FormDescriptionConverter.java | 5 +-
...ayaDetailsViewPageDescriptionProvider.java | 51 +-
.../backend/sirius-web-starter/pom.xml | 20 +
...ptionEditorControllerIntegrationTests.java | 14 +-
.../forms/TableControllerTests.java | 36 ++
...ectDownloadControllerIntegrationTests.java | 3 +-
.../FormWithViewTableDescriptionProvider.java | 145 +++++
.../sirius-web-application/package.json | 2 +
.../extension/DefaultExtensionRegistry.tsx | 10 +-
.../frontend/sirius-web-papaya/package.json | 2 +
.../sirius-web-view-fork/package.json | 2 +
.../components/tests/GeneralPurposeTests.java | 15 +-
packages/view/backend/pom.xml | 3 +
.../sirius-components-view-builder/pom.xml | 5 +
.../tablewidget/TableWidgetBuilders.java | 33 ++
.../TableWidgetDescriptionBuilder.java | 144 +++++
.../builder/generator/BuilderGenerator.java | 30 +-
.../.checkstyle | 11 +
.../.classpath | 57 ++
.../.project | 29 +
.../org.eclipse.core.resources.prefs | 6 +
.../.settings/org.eclipse.core.runtime.prefs | 3 +
.../.settings/org.eclipse.jdt.apt.core.prefs | 2 +
.../.settings/org.eclipse.jdt.core.prefs | 505 ++++++++++++++++++
.../.settings/org.eclipse.jdt.ui.prefs | 210 ++++++++
.../.settings/org.eclipse.m2e.core.prefs | 4 +
.../org.springframework.ide.eclipse.prefs | 2 +
.../README.adoc | 12 +
.../pom.xml | 132 +++++
...bleWidgetDescriptionConverterProvider.java | 51 ++
...TableWidgetDescriptionConverterSwitch.java | 115 ++++
.../src/main/resources/.gitkeep | 0
.../architecture/ArchitectureConstants.java | 36 ++
.../table/architecture/CodingRulesTests.java | 42 ++
.../architecture/SpringCodingRulesTests.java | 36 ++
.../src/test/resources/logback-test.xml | 3 +
.../converters/ReadOnlyValueProvider.java | 2 +-
.../emf/table/CellDescriptionConverter.java | 126 +++++
.../emf/table/ColumnDescriptionConverter.java | 93 ++++
.../emf/table/RowDescriptionConverter.java | 69 +++
.../emf/table/TableJavaServiceProvider.java | 6 +-
.../table/ViewTableDescriptionConverter.java | 277 ----------
...bleRepresentationDescriptionConverter.java | 126 +++++
.../.classpath | 51 ++
.../.project | 28 +
.../org.eclipse.core.resources.prefs | 4 +
.../.settings/org.eclipse.jdt.apt.core.prefs | 2 +
.../.settings/org.eclipse.jdt.core.prefs | 10 +
.../pom.xml | 108 ++++
.../TableWidgetDescriptionItemProvider.java | 228 ++++++++
.../provider/TableWidgetEditPlugin.java | 136 +++++
...TableWidgetItemProviderAdapterFactory.java | 360 +++++++++++++
.../full/obj16/TableWidgetDescription.svg | 1 +
.../src/main/resources/plugin.properties | 37 ++
.../.classpath | 51 ++
.../.project | 28 +
.../org.eclipse.core.resources.prefs | 5 +
.../.settings/org.eclipse.core.runtime.prefs | 3 +
.../.settings/org.eclipse.jdt.apt.core.prefs | 2 +
.../.settings/org.eclipse.jdt.core.prefs | 505 ++++++++++++++++++
.../.settings/org.eclipse.jdt.ui.prefs | 210 ++++++++
.../.settings/org.eclipse.m2e.core.prefs | 4 +
.../org.springframework.ide.eclipse.prefs | 2 +
.../pom.xml | 93 ++++
.../tablewidget/TableWidgetDescription.java | 142 +++++
.../tablewidget/TableWidgetFactory.java | 49 ++
.../tablewidget/TableWidgetPackage.java | 308 +++++++++++
.../impl/TableWidgetDescriptionImpl.java | 396 ++++++++++++++
.../impl/TableWidgetFactoryImpl.java | 104 ++++
.../impl/TableWidgetPackageImpl.java | 254 +++++++++
.../util/TableWidgetAdapterFactory.java | 162 ++++++
.../tablewidget/util/TableWidgetSwitch.java | 151 ++++++
.../main/resources/model/tablewidget.ecore | 18 +
.../main/resources/model/tablewidget.genmodel | 23 +
vscode-extension/package.json | 1 +
115 files changed, 7276 insertions(+), 535 deletions(-)
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.checkstyle
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.classpath
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.project
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.resources.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.runtime.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.core.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.ui.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.m2e.core.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.springframework.ide.eclipse.prefs
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/README.adoc
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/pom.xml
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetDescriptionProvider.java
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/resources/.gitkeep
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ArchitectureConstants.java
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/CodingRulesTests.java
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ImmutableTests.java
create mode 100644 packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/resources/logback-test.xml
create mode 100644 packages/forms/frontend/sirius-components-widget-table/.gitignore
create mode 100644 packages/forms/frontend/sirius-components-widget-table/.prettierrc
create mode 100644 packages/forms/frontend/sirius-components-widget-table/package.json
create mode 100644 packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPreview.tsx
create mode 100644 packages/forms/frontend/sirius-components-widget-table/src/index.ts
create mode 100644 packages/forms/frontend/sirius-components-widget-table/tsconfig.json
create mode 100644 packages/forms/frontend/sirius-components-widget-table/vite.config.js
create mode 100644 packages/forms/frontend/sirius-components-widget-table/vitestSetup.js
delete mode 100644 packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/AttributesTableDescriptionProvider.java
create mode 100644 packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithViewTableDescriptionProvider.java
create mode 100644 packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetBuilders.java
create mode 100644 packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetDescriptionBuilder.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.checkstyle
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.classpath
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.project
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.resources.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.runtime.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.core.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.ui.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.m2e.core.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.springframework.ide.eclipse.prefs
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/README.adoc
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/pom.xml
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterProvider.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterSwitch.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/main/resources/.gitkeep
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/ArchitectureConstants.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/CodingRulesTests.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/SpringCodingRulesTests.java
create mode 100644 packages/view/backend/sirius-components-view-emf-widget-table/src/test/resources/logback-test.xml
create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/CellDescriptionConverter.java
create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ColumnDescriptionConverter.java
create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java
delete mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableDescriptionConverter.java
create mode 100644 packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/.classpath
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/.project
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.core.resources.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.apt.core.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.core.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/pom.xml
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetDescriptionItemProvider.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetEditPlugin.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetItemProviderAdapterFactory.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/icons/full/obj16/TableWidgetDescription.svg
create mode 100644 packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/plugin.properties
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.classpath
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.project
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.resources.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.runtime.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.apt.core.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.core.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.ui.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.m2e.core.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/.settings/org.springframework.ide.eclipse.prefs
create mode 100644 packages/view/backend/sirius-components-widget-table-view/pom.xml
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetDescription.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetFactory.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetPackage.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetDescriptionImpl.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetFactoryImpl.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetPackageImpl.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetAdapterFactory.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetSwitch.java
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.ecore
create mode 100644 packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.genmodel
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6a47c6e0c9..bbbb9522d6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -100,11 +100,12 @@ jobs:
npx yalc add @eclipse-sirius/sirius-components-gantt
npx yalc add @eclipse-sirius/sirius-components-omnibox
npx yalc add @eclipse-sirius/sirius-components-portals
- npx yalc add @eclipse-sirius/sirius-components-widget-reference
npx yalc add @eclipse-sirius/sirius-components-selection
npx yalc add @eclipse-sirius/sirius-components-tables
npx yalc add @eclipse-sirius/sirius-components-trees
npx yalc add @eclipse-sirius/sirius-components-validation
+ npx yalc add @eclipse-sirius/sirius-components-widget-reference
+ npx yalc add @eclipse-sirius/sirius-components-widget-table
npx yalc add @eclipse-sirius/sirius-web-application
npm i
npm run compile
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 8ab47d1759..5b09a7689f 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -150,6 +150,7 @@ For that, a new page `/libraries` showing all the libraries has been contributed
- https://github.com/eclipse-sirius/sirius-web/issues/4428[#4428] [core] Allow to contribute custom commands in the command palette.
A new search command as been contributed to the palette in Sirius Web, which can be selected to set the palette in a 'search' mode that searches elements in the project.
- https://github.com/eclipse-sirius/sirius-web/issues/4584[#4584] [core] Allow the command palette to execute custom commands.
+- https://github.com/eclipse-sirius/sirius-web/issues/4329[#4329] [form] Add support for tables as widget in the form view DSL
=== Improvements
diff --git a/package-lock.json b/package-lock.json
index 05515b0e74..7afd431dbc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -450,6 +450,10 @@
"resolved": "packages/forms/frontend/sirius-components-widget-reference",
"link": true
},
+ "node_modules/@eclipse-sirius/sirius-components-widget-table": {
+ "resolved": "packages/forms/frontend/sirius-components-widget-table",
+ "link": true
+ },
"node_modules/@eclipse-sirius/sirius-web": {
"resolved": "packages/sirius-web/frontend/sirius-web",
"link": true
@@ -8409,6 +8413,64 @@
"xstate": "4.32.1"
}
},
+ "packages/forms/frontend/sirius-components-widget-table": {
+ "name": "@eclipse-sirius/sirius-components-widget-table",
+ "version": "2025.1.6",
+ "license": "EPL-2.0",
+ "devDependencies": {
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-charts": "*",
+ "@eclipse-sirius/sirius-components-core": "*",
+ "@eclipse-sirius/sirius-components-forms": "*",
+ "@eclipse-sirius/sirius-components-tables": "*",
+ "@lexical/react": "0.8.1",
+ "@mui/icons-material": "5.15.19",
+ "@mui/material": "5.15.19",
+ "@mui/x-tree-view": "7.6.1",
+ "@testing-library/react": "12.1.2",
+ "@testing-library/user-event": "13.2.1",
+ "@types/react": "18.3.3",
+ "@vitejs/plugin-react": "4.3.0",
+ "@vitest/coverage-v8": "1.6.0",
+ "@xstate/react": "3.0.0",
+ "d3": "7.0.0",
+ "export-to-csv": "1.3.0",
+ "graphql": "16.8.1",
+ "jsdom": "16.7.0",
+ "lexical": "0.8.1",
+ "material-react-table": "2.13.3",
+ "prettier": "2.7.1",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "rollup-plugin-peer-deps-external": "2.2.4",
+ "tss-react": "4.9.7",
+ "typescript": "5.4.5",
+ "vite": "5.2.11",
+ "vitest": "1.6.0",
+ "xstate": "4.32.1"
+ },
+ "peerDependencies": {
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-charts": "*",
+ "@eclipse-sirius/sirius-components-core": "*",
+ "@eclipse-sirius/sirius-components-forms": "*",
+ "@eclipse-sirius/sirius-components-tables": "*",
+ "@lexical/react": "0.8.1",
+ "@mui/icons-material": "5.15.19",
+ "@mui/material": "5.15.19",
+ "@mui/x-tree-view": "7.6.1",
+ "@xstate/react": "3.0.0",
+ "d3": "7.0.0",
+ "export-to-csv": "1.3.0",
+ "graphql": "16.8.1",
+ "lexical": "0.8.1",
+ "material-react-table": "2.13.3",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "tss-react": "4.9.7",
+ "xstate": "4.32.1"
+ }
+ },
"packages/gantt/frontend/sirius-components-gantt": {
"name": "@eclipse-sirius/sirius-components-gantt",
"version": "2025.1.6",
@@ -8638,6 +8700,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
"@mui/material": "5.15.19",
@@ -8690,6 +8753,7 @@
"@eclipse-sirius/sirius-components-trees": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
"@mui/material": "5.15.19",
@@ -8740,6 +8804,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
@@ -8793,6 +8858,7 @@
"@eclipse-sirius/sirius-components-trees": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
@@ -8949,6 +9015,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
@@ -9002,6 +9069,7 @@
"@eclipse-sirius/sirius-components-trees": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
@@ -9907,6 +9975,41 @@
"xstate": "4.32.1"
}
},
+ "@eclipse-sirius/sirius-components-widget-table": {
+ "version": "file:packages/forms/frontend/sirius-components-widget-table",
+ "requires": {
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-charts": "*",
+ "@eclipse-sirius/sirius-components-core": "*",
+ "@eclipse-sirius/sirius-components-forms": "*",
+ "@eclipse-sirius/sirius-components-tables": "*",
+ "@lexical/react": "0.8.1",
+ "@mui/icons-material": "5.15.19",
+ "@mui/material": "5.15.19",
+ "@mui/x-tree-view": "7.6.1",
+ "@testing-library/react": "12.1.2",
+ "@testing-library/user-event": "13.2.1",
+ "@types/react": "18.3.3",
+ "@vitejs/plugin-react": "4.3.0",
+ "@vitest/coverage-v8": "1.6.0",
+ "@xstate/react": "3.0.0",
+ "d3": "7.0.0",
+ "export-to-csv": "1.3.0",
+ "graphql": "16.8.1",
+ "jsdom": "16.7.0",
+ "lexical": "0.8.1",
+ "material-react-table": "2.13.3",
+ "prettier": "2.7.1",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "rollup-plugin-peer-deps-external": "2.2.4",
+ "tss-react": "4.9.7",
+ "typescript": "5.4.5",
+ "vite": "5.2.11",
+ "vitest": "1.6.0",
+ "xstate": "4.32.1"
+ }
+ },
"@eclipse-sirius/sirius-web": {
"version": "file:packages/sirius-web/frontend/sirius-web",
"requires": {
@@ -9991,6 +10094,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
"@mui/material": "5.15.19",
@@ -10047,6 +10151,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
@@ -10104,6 +10209,7 @@
"@eclipse-sirius/sirius-components-tsconfig": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@lexical/react": "0.8.1",
"@mui/icons-material": "5.15.19",
diff --git a/packages/emf/backend/sirius-components-emf-tables/src/main/java/org/eclipse/sirius/components/emf/tables/CursorBasedNavigationServices.java b/packages/emf/backend/sirius-components-emf-tables/src/main/java/org/eclipse/sirius/components/emf/tables/CursorBasedNavigationServices.java
index 9a9b27a5df..d912a051e6 100644
--- a/packages/emf/backend/sirius-components-emf-tables/src/main/java/org/eclipse/sirius/components/emf/tables/CursorBasedNavigationServices.java
+++ b/packages/emf/backend/sirius-components-emf-tables/src/main/java/org/eclipse/sirius/components/emf/tables/CursorBasedNavigationServices.java
@@ -98,4 +98,8 @@ public PaginatedData toPaginatedData(List objects, Object cursor, String
return new PaginatedData(subList, hasPrevious, hasNext, objects.size());
}
+
+ public PaginatedData toPaginatedData(List objects) {
+ return new PaginatedData(objects, false, false, objects.size());
+ }
}
diff --git a/packages/formdescriptioneditors/backend/pom.xml b/packages/formdescriptioneditors/backend/pom.xml
index acf4cc8894..7174fda449 100644
--- a/packages/formdescriptioneditors/backend/pom.xml
+++ b/packages/formdescriptioneditors/backend/pom.xml
@@ -12,7 +12,7 @@
Obeo - initial API and implementation
-->
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.eclipse.sirius
@@ -36,5 +36,6 @@
sirius-components-collaborative-formdescriptioneditors
sirius-components-formdescriptioneditors-graphql
sirius-components-collaborative-formdescriptioneditors-widget-reference
+ sirius-components-collaborative-formdescriptioneditors-widget-table
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.checkstyle b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.checkstyle
new file mode 100644
index 0000000000..9b6893c969
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.checkstyle
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.classpath b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.classpath
new file mode 100644
index 0000000000..2a5a91b976
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.project b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.project
new file mode 100644
index 0000000000..e65e7e0848
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.project
@@ -0,0 +1,29 @@
+
+
+ sirius-components-collaborative-formdescriptioneditors-widget-table
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ net.sf.eclipsecs.core.CheckstyleBuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ net.sf.eclipsecs.core.CheckstyleNature
+
+
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.resources.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..29abf99956
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.runtime.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000000..a287fefdba
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Mon Sep 24 15:04:19 CEST 2007
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.apt.core.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000..d4313d4b25
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.core.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..2ab93cd0a5
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,505 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=200
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.ui.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..f789e687ad
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,210 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=true
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=true
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+cleanup_profile=_Sirius
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Sirius
+formatter_settings_version=21
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com;fr;java;javax;org;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/*******************************************************************************\n * Copyright (c) ${year} Obeo.\n * This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v2.0\n * which accompanies this distribution, and is available at\n * https\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier\: EPL-2.0\n *\n * Contributors\:\n * Obeo - initial API and implementation\n *******************************************************************************/ /**\n * @author ${user}\n */ /**\n * \n */ /**\n * ${tags}\n */ /**\n * ${tags}\n * ${see_to_target}\n */ ${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration} \n \n \n \n ${exception_var}.printStackTrace(); ${body_statement} ${body_statement} return ${field}; ${field} \= ${param}; /**\n * @author ${user}\n *\n * ${tags}\n */ \n
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=true
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=false
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.overridden_assignment_move_decl=false
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=false
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_method_parameters=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=false
+sp_cleanup.stringconcat_to_textblock=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.m2e.core.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000..96b30f9805
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=pom.xml
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.springframework.ide.eclipse.prefs b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.springframework.ide.eclipse.prefs
new file mode 100644
index 0000000000..a12794d68f
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/.settings/org.springframework.ide.eclipse.prefs
@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/README.adoc b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/README.adoc
new file mode 100644
index 0000000000..6ce31f0b63
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/README.adoc
@@ -0,0 +1,12 @@
+= sirius-components-collaborative-formdescriptioneditors-widget-table
+
+== Goal
+
+This project is used to add support for the table widget to form description editors.
+
+== Dependencies
+
+- sirius-components-collaborative-formdescriptioneditors
+- sirius-components-widget-table-view
+
+This project should not depend on anything else without a good reason to do so.
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/pom.xml b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/pom.xml
new file mode 100644
index 0000000000..ab549c1c82
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/pom.xml
@@ -0,0 +1,121 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ org.eclipse.sirius
+ sirius-components-collaborative-formdescriptioneditors-widget-table
+ 2025.1.6
+ sirius-components-collaborative-formdescriptioneditors-widget-table
+ Sirius Components Collaborative FormDescriptionEditors Widget Table
+
+
+ 17
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ org.eclipse.sirius
+ sirius-components-collaborative-formdescriptioneditors
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.eclipse.sirius
+ sirius-components-tests
+ 2025.1.6
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.4.0
+
+ ../../../releng/backend/sirius-components-resources/checkstyle/CheckstyleConfiguration.xml
+ true
+ true
+ true
+
+
+
+ validate
+ validate
+
+ check
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.12
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetDescriptionProvider.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetDescriptionProvider.java
new file mode 100644
index 0000000000..1108cfa8cf
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetDescriptionProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.formdescriptioneditors.widget.table;
+
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.sirius.components.formdescriptioneditors.IWidgetDescriptionProvider;
+import org.eclipse.sirius.components.forms.elements.TableWidgetElementProps;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+import org.springframework.stereotype.Service;
+
+/**
+ * The IWidgetDescriptionProvider for the table widget.
+ *
+ * @author frouene
+ */
+@Service
+public class TableWidgetDescriptionProvider implements IWidgetDescriptionProvider {
+
+ @Override
+ public Optional getWidgetDescriptionType(String widgetKind) {
+ if (TableWidgetElementProps.TYPE.equals(widgetKind)) {
+ return Optional.of(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION);
+ } else {
+ return Optional.empty();
+ }
+ }
+
+}
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
new file mode 100644
index 0000000000..6a3e3b56dd
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/TableWidgetPreviewConverterProvider.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.formdescriptioneditors.widget.table;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.sirius.components.formdescriptioneditors.IWidgetPreviewConverterProvider;
+import org.eclipse.sirius.components.formdescriptioneditors.description.FormDescriptionEditorDescription;
+import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription;
+import org.eclipse.sirius.components.forms.description.TableWidgetDescription;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.LineDescription;
+import org.eclipse.sirius.components.tables.descriptions.PaginatedData;
+import org.eclipse.sirius.components.tables.descriptions.TableDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.util.TableWidgetSwitch;
+import org.springframework.stereotype.Service;
+
+/**
+ * Provides the widget converter needed for the table widget preview in the context of a Form Description Editor.
+ *
+ * @author frouene
+ */
+@Service
+public class TableWidgetPreviewConverterProvider implements IWidgetPreviewConverterProvider {
+
+ @Override
+ public Switch getWidgetConverter(FormDescriptionEditorDescription formDescriptionEditorDescription, VariableManager variableManager) {
+ return new TableWidgetSwitch<>() {
+ @Override
+ public AbstractWidgetDescription caseTableWidgetDescription(org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription viewTableDescription) {
+ 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();
+ }
+ };
+ }
+
+
+ public String getWidgetLabel(org.eclipse.sirius.components.view.form.WidgetDescription widgetDescription, String defaultLabel) {
+ String widgetLabel = defaultLabel;
+ String name = widgetDescription.getName();
+ String labelExpression = widgetDescription.getLabelExpression();
+ if (labelExpression != null && !labelExpression.isBlank() && !labelExpression.startsWith("aql:")) {
+ widgetLabel = labelExpression;
+ } else if (name != null && !name.isBlank()) {
+ widgetLabel = name;
+ }
+ return widgetLabel;
+ }
+
+}
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/resources/.gitkeep b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/main/resources/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ArchitectureConstants.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ArchitectureConstants.java
new file mode 100644
index 0000000000..16c49ed635
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ArchitectureConstants.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.formdescriptioneditors.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author frouene
+ */
+public final class ArchitectureConstants {
+
+ public static final String SIRIUS_COMPONENTS_FORMDESCRIPTIONEDITORS_WIDGET_TABLE_ROOT_PACKAGE = "org.eclipse.sirius.components.formdescriptioneditors.widget.table..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SIRIUS_COMPONENTS_FORMDESCRIPTIONEDITORS_WIDGET_TABLE_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/CodingRulesTests.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/CodingRulesTests.java
new file mode 100644
index 0000000000..985429eb89
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/CodingRulesTests.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.formdescriptioneditors.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.sirius.components.tests.architecture.AbstractCodingRulesTests;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Coding rules tests.
+ *
+ * @author frouene
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SIRIUS_COMPONENTS_FORMDESCRIPTIONEDITORS_WIDGET_TABLE_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+ @Test
+ @Override
+ public void noClassesShouldUseApacheCommons() {
+ super.noClassesShouldUseApacheCommons();
+ }
+
+}
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ImmutableTests.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ImmutableTests.java
new file mode 100644
index 0000000000..958f7f5763
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/java/org/eclipse/sirius/components/formdescriptioneditors/widget/table/architecture/ImmutableTests.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.formdescriptioneditors.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.sirius.components.tests.architecture.AbstractImmutableTests;
+
+/**
+ * Immutable tests.
+ *
+ * @author frouene
+ */
+public class ImmutableTests extends AbstractImmutableTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SIRIUS_COMPONENTS_FORMDESCRIPTIONEDITORS_WIDGET_TABLE_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+}
diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/resources/logback-test.xml b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..6e5a312958
--- /dev/null
+++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors-widget-table/src/test/resources/logback-test.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/GroupDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/GroupDescription.java
index 04c3e7ac4d..0395e733b2 100644
--- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/GroupDescription.java
+++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/GroupDescription.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2024 Obeo.
+ * Copyright (c) 2019, 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
@@ -29,6 +29,7 @@
*/
@Immutable
public final class GroupDescription {
+
private String id;
private Function idProvider;
@@ -85,10 +86,6 @@ public static Builder newGroupDescription(String id) {
return new Builder(id);
}
- public static Builder newGroupDescription(GroupDescription groupDescription) {
- return new Builder(groupDescription);
- }
-
@Override
public String toString() {
String pattern = "{0} '{'id: {1}'}'";
@@ -102,7 +99,8 @@ public String toString() {
*/
@SuppressWarnings("checkstyle:HiddenField")
public static final class Builder {
- private String id;
+
+ private final String id;
private Function idProvider;
@@ -122,17 +120,6 @@ private Builder(String id) {
this.id = Objects.requireNonNull(id);
}
- private Builder(GroupDescription groupDescription) {
- this.id = Objects.requireNonNull(groupDescription.getId());
- this.idProvider = Objects.requireNonNull(groupDescription.getIdProvider());
- this.labelProvider = Objects.requireNonNull(groupDescription.getLabelProvider());
- this.displayModeProvider = Objects.requireNonNull(groupDescription.getDisplayModeProvider());
- this.semanticElementsProvider = Objects.requireNonNull(groupDescription.getSemanticElementsProvider());
- this.toolbarActionDescriptions = Objects.requireNonNull(groupDescription.getToolbarActionDescriptions());
- this.controlDescriptions = Objects.requireNonNull(groupDescription.getControlDescriptions());
- this.borderStyleProvider = Objects.requireNonNull(groupDescription.getBorderStyleProvider());
- }
-
public Builder idProvider(Function idProvider) {
this.idProvider = Objects.requireNonNull(idProvider);
return this;
diff --git a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/PageDescription.java b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/PageDescription.java
index 32d4ab2835..2dab3a4fe5 100644
--- a/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/PageDescription.java
+++ b/packages/forms/backend/sirius-components-forms/src/main/java/org/eclipse/sirius/components/forms/description/PageDescription.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2024 Obeo.
+ * Copyright (c) 2019, 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
@@ -79,10 +79,6 @@ public static Builder newPageDescription(String id) {
return new Builder(id);
}
- public static Builder newPageDescription(PageDescription pageDescription) {
- return new Builder(pageDescription);
- }
-
@Override
public String toString() {
String pattern = "{0} '{'id: {1}'}'";
@@ -97,7 +93,7 @@ public String toString() {
@SuppressWarnings("checkstyle:HiddenField")
public static final class Builder {
- private String id;
+ private final String id;
private Function idProvider;
@@ -115,16 +111,6 @@ private Builder(String id) {
this.id = Objects.requireNonNull(id);
}
- private Builder(PageDescription pageDescription) {
- this.id = Objects.requireNonNull(pageDescription.getId());
- this.idProvider = Objects.requireNonNull(pageDescription.getIdProvider());
- this.labelProvider = Objects.requireNonNull(pageDescription.getLabelProvider());
- this.semanticElementsProvider = Objects.requireNonNull(pageDescription.getSemanticElementsProvider());
- this.groupDescriptions = Objects.requireNonNull(pageDescription.getGroupDescriptions());
- this.toolbarActionDescriptions = Objects.requireNonNull(pageDescription.getToolbarActionDescriptions());
- this.canCreatePredicate = Objects.requireNonNull(pageDescription.getCanCreatePredicate());
- }
-
public Builder idProvider(Function idProvider) {
this.idProvider = Objects.requireNonNull(idProvider);
return this;
diff --git a/packages/forms/frontend/sirius-components-widget-table/.gitignore b/packages/forms/frontend/sirius-components-widget-table/.gitignore
new file mode 100644
index 0000000000..53c37a1660
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/.gitignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/packages/forms/frontend/sirius-components-widget-table/.prettierrc b/packages/forms/frontend/sirius-components-widget-table/.prettierrc
new file mode 100644
index 0000000000..b936b2745a
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/.prettierrc
@@ -0,0 +1,22 @@
+{
+ "printWidth": 120,
+ "singleQuote": true,
+ "bracketSameLine": true,
+ "useTabs": false,
+ "tabWidth": 2,
+ "semi": true,
+ "overrides": [
+ {
+ "files": "*.js",
+ "options": {
+ "parser": "babel"
+ }
+ },
+ {
+ "files": "*.css",
+ "options": {
+ "parser": "css"
+ }
+ }
+ ]
+}
diff --git a/packages/forms/frontend/sirius-components-widget-table/package.json b/packages/forms/frontend/sirius-components-widget-table/package.json
new file mode 100644
index 0000000000..4acbbf2bcc
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "@eclipse-sirius/sirius-components-widget-table",
+ "version": "2025.1.6",
+ "author": "Eclipse Sirius",
+ "license": "EPL-2.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/eclipse-sirius/sirius-web"
+ },
+ "publishConfig": {
+ "registry": "https://npm.pkg.github.com/"
+ },
+ "main": "./dist/sirius-components-widget-table.umd.js",
+ "module": "./dist/sirius-components-widget-table.es.js",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "exports": {
+ ".": {
+ "require": "./dist/sirius-components-widget-table.umd.js",
+ "import": "./dist/sirius-components-widget-table.es.js"
+ }
+ },
+ "scripts": {
+ "build-dev": "vite build --mode 'development' && tsc",
+ "build": "vite build && tsc",
+ "format": "prettier --write \"src/**/*.{js,ts,tsx,css}\"",
+ "format-lint": "prettier --list-different \"src/**/*.{js,ts,tsx,css}\"",
+ "publish:local": "yalc push"
+ },
+ "peerDependencies": {
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-core": "*",
+ "@eclipse-sirius/sirius-components-charts": "*",
+ "@eclipse-sirius/sirius-components-forms": "*",
+ "@eclipse-sirius/sirius-components-tables": "*",
+ "@lexical/react": "0.8.1",
+ "@mui/material": "5.15.19",
+ "@mui/icons-material": "5.15.19",
+ "@mui/x-tree-view": "7.6.1",
+ "@xstate/react": "3.0.0",
+ "d3": "7.0.0",
+ "export-to-csv": "1.3.0",
+ "graphql": "16.8.1",
+ "lexical": "0.8.1",
+ "material-react-table": "2.13.3",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "tss-react": "4.9.7",
+ "xstate": "4.32.1"
+ },
+ "devDependencies": {
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-core": "*",
+ "@eclipse-sirius/sirius-components-charts": "*",
+ "@eclipse-sirius/sirius-components-forms": "*",
+ "@eclipse-sirius/sirius-components-tables": "*",
+ "@lexical/react": "0.8.1",
+ "@mui/material": "5.15.19",
+ "@mui/icons-material": "5.15.19",
+ "@mui/x-tree-view": "7.6.1",
+ "@testing-library/react": "12.1.2",
+ "@testing-library/user-event": "13.2.1",
+ "@types/react": "18.3.3",
+ "@vitejs/plugin-react": "4.3.0",
+ "@xstate/react": "3.0.0",
+ "@vitest/coverage-v8": "1.6.0",
+ "jsdom": "16.7.0",
+ "d3": "7.0.0",
+ "export-to-csv": "1.3.0",
+ "graphql": "16.8.1",
+ "prettier": "2.7.1",
+ "lexical": "0.8.1",
+ "material-react-table": "2.13.3",
+ "rollup-plugin-peer-deps-external": "2.2.4",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "xstate": "4.32.1",
+ "typescript": "5.4.5",
+ "tss-react": "4.9.7",
+ "vite": "5.2.11",
+ "vitest": "1.6.0"
+ }
+}
diff --git a/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPreview.tsx b/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPreview.tsx
new file mode 100644
index 0000000000..81c9bd2dee
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/src/TableWidgetPreview.tsx
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import { useSelection } from '@eclipse-sirius/sirius-components-core';
+import { PreviewWidgetProps } from '@eclipse-sirius/sirius-components-forms';
+import HelpOutlineOutlined from '@mui/icons-material/HelpOutlineOutlined';
+import Typography from '@mui/material/Typography';
+import { MaterialReactTable, MRT_ColumnDef, useMaterialReactTable } from 'material-react-table';
+import { useEffect, useMemo, useState, useRef } from 'react';
+import { makeStyles } from 'tss-react/mui';
+
+type TableElement = {
+ column1Value: string;
+ column2Value: string;
+};
+
+const data: TableElement[] = [
+ {
+ column1Value: 'row1.column1',
+ column2Value: 'row1.column2',
+ },
+ {
+ column1Value: 'row2.column1',
+ column2Value: 'row2.column2',
+ },
+];
+
+const useStyles = makeStyles()((theme) => ({
+ selected: {
+ color: theme.palette.primary.main,
+ },
+ propertySectionLabel: {
+ display: 'flex',
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+}));
+
+export const TableWidgetPreview = ({ widget }: PreviewWidgetProps) => {
+ const { classes } = useStyles();
+
+ const [selected, setSelected] = useState(false);
+ const { selection } = useSelection();
+ const ref = useRef(null);
+
+ useEffect(() => {
+ if (ref.current && selection.entries.find((entry) => entry.id === widget.id)) {
+ ref.current.focus();
+ setSelected(true);
+ } else {
+ setSelected(false);
+ }
+ }, [widget, selection]);
+
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorKey: 'column1Value',
+ header: 'Column1',
+ size: 150,
+ },
+ {
+ accessorKey: 'column2Value',
+ header: 'Column2',
+ size: 150,
+ },
+ ],
+ []
+ );
+
+ const table = useMaterialReactTable({
+ columns,
+ data,
+ enablePagination: false,
+ enableSorting: false,
+ enableHiding: false,
+ enableColumnFilters: false,
+ enableGlobalFilter: false,
+ });
+
+ return (
+ <>
+ setSelected(true)} onBlur={() => setSelected(false)} ref={ref} tabIndex={0}>
+
+
+ {widget.label}
+
+ {widget.hasHelpText ? (
+
+ ) : null}
+
+
+
+
+
+ >
+ );
+};
diff --git a/packages/forms/frontend/sirius-components-widget-table/src/index.ts b/packages/forms/frontend/sirius-components-widget-table/src/index.ts
new file mode 100644
index 0000000000..8925677104
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/src/index.ts
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+export * from './TableWidgetPreview';
diff --git a/packages/forms/frontend/sirius-components-widget-table/tsconfig.json b/packages/forms/frontend/sirius-components-widget-table/tsconfig.json
new file mode 100644
index 0000000000..74eb3a06c3
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "@eclipse-sirius/sirius-components-tsconfig/strict-react-library.json",
+ "compilerOptions": {
+ "emitDeclarationOnly": true,
+ "outDir": "./dist"
+ },
+ "include": [
+ "./src/index.ts"
+ ],
+ "exclude": [
+ "dist",
+ "build",
+ "node_modules"
+ ]
+}
diff --git a/packages/forms/frontend/sirius-components-widget-table/vite.config.js b/packages/forms/frontend/sirius-components-widget-table/vite.config.js
new file mode 100644
index 0000000000..ebd7d8c766
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/vite.config.js
@@ -0,0 +1,24 @@
+import react from '@vitejs/plugin-react';
+import path from 'node:path';
+import peerDepsExternal from 'rollup-plugin-peer-deps-external';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ plugins: [peerDepsExternal(), react()],
+ build: {
+ minify: false,
+ lib: {
+ name: 'sirius-components-widget-table',
+ entry: path.resolve(__dirname, 'src/index.ts'),
+ formats: ['es', 'umd'],
+ fileName: (format) => `sirius-components-widget-table.${format}.js`,
+ },
+ },
+ test: {
+ environment: 'jsdom',
+ coverage: {
+ reporter: ['text', 'html'],
+ },
+ setupFiles: ['vitestSetup.js'],
+ },
+});
diff --git a/packages/forms/frontend/sirius-components-widget-table/vitestSetup.js b/packages/forms/frontend/sirius-components-widget-table/vitestSetup.js
new file mode 100644
index 0000000000..85e47f7faf
--- /dev/null
+++ b/packages/forms/frontend/sirius-components-widget-table/vitestSetup.js
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import crypto from 'node:crypto';
+
+globalThis.crypto = crypto;
diff --git a/packages/sirius-web/backend/sirius-web-application/pom.xml b/packages/sirius-web/backend/sirius-web-application/pom.xml
index 02bfb54da9..e5d0d7c0f8 100644
--- a/packages/sirius-web/backend/sirius-web-application/pom.xml
+++ b/packages/sirius-web/backend/sirius-web-application/pom.xml
@@ -169,6 +169,16 @@
sirius-components-widget-reference-view-edit
2025.1.6
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view-edit
+ 2025.1.6
+
org.eclipse.sirius
sirius-components-view-gantt
diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/StudioEditingContextInitializer.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/StudioEditingContextInitializer.java
index 9690d8a4d7..427f772c50 100644
--- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/StudioEditingContextInitializer.java
+++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/studio/services/StudioEditingContextInitializer.java
@@ -30,6 +30,7 @@
import org.eclipse.sirius.components.view.table.TablePackage;
import org.eclipse.sirius.components.view.tree.TreePackage;
import org.eclipse.sirius.components.view.widget.reference.ReferencePackage;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
import org.eclipse.sirius.web.application.studio.services.api.IStudioCapableEditingContextPredicate;
import org.eclipse.sirius.web.application.studio.services.api.IStudioColorPalettesLoader;
import org.springframework.stereotype.Service;
@@ -66,6 +67,7 @@ public void preProcess(IEditingContext editingContext) {
packageRegistry.put(TreePackage.eNS_URI, TreePackage.eINSTANCE);
packageRegistry.put(TablePackage.eNS_URI, TablePackage.eINSTANCE);
packageRegistry.put(ReferencePackage.eNS_URI, ReferencePackage.eINSTANCE);
+ packageRegistry.put(TableWidgetPackage.eNS_URI, TableWidgetPackage.eINSTANCE);
var resourceSet = emfEditingContext.getDomain().getResourceSet();
this.studioColorPalettesLoader.loadStudioColorPalettes(resourceSet).ifPresent(view -> {
diff --git a/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFAdapterFactoryConfiguration.java b/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFAdapterFactoryConfiguration.java
index 191e73ce3f..f93ac5dfe8 100644
--- a/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFAdapterFactoryConfiguration.java
+++ b/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFAdapterFactoryConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 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
@@ -22,6 +22,7 @@
import org.eclipse.sirius.components.view.provider.ViewItemProviderAdapterFactory;
import org.eclipse.sirius.components.view.table.provider.TableItemProviderAdapterFactory;
import org.eclipse.sirius.components.view.tree.provider.TreeItemProviderAdapterFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.provider.TableWidgetItemProviderAdapterFactory;
import org.eclipse.sirius.components.widgets.reference.provider.ReferenceItemProviderAdapterFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -83,4 +84,9 @@ public AdapterFactory treeAdapterFactory() {
public AdapterFactory tableAdapterFactory() {
return new TableItemProviderAdapterFactory();
}
+
+ @Bean
+ public AdapterFactory tableWidgetAdapterFactory() {
+ return new TableWidgetItemProviderAdapterFactory();
+ }
}
diff --git a/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFChildExtenderProviderConfiguration.java b/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFChildExtenderProviderConfiguration.java
index 3f4203f225..494df0cbf9 100644
--- a/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFChildExtenderProviderConfiguration.java
+++ b/packages/sirius-web/backend/sirius-web-infrastructure/src/main/java/org/eclipse/sirius/web/infrastructure/configuration/emf/EMFChildExtenderProviderConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024, 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
@@ -23,6 +23,7 @@
import org.eclipse.sirius.components.view.gantt.provider.GanttItemProviderAdapterFactory;
import org.eclipse.sirius.components.view.table.provider.TableItemProviderAdapterFactory;
import org.eclipse.sirius.components.view.tree.provider.TreeItemProviderAdapterFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.provider.TableWidgetItemProviderAdapterFactory;
import org.eclipse.sirius.components.widgets.reference.provider.ReferenceItemProviderAdapterFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -74,4 +75,9 @@ public ChildExtenderProvider customNodesChildExtenderProvider() {
public ChildExtenderProvider referenceWidgetChildExtenderProvider() {
return new ChildExtenderProvider(FormPackage.eNS_URI, ReferenceItemProviderAdapterFactory.FormChildCreationExtender::new);
}
+
+ @Bean
+ public ChildExtenderProvider tableWidgetChildExtenderProvider() {
+ return new ChildExtenderProvider(FormPackage.eNS_URI, TableWidgetItemProviderAdapterFactory.FormChildCreationExtender::new);
+ }
}
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/AttributesTableDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/AttributesTableDescriptionProvider.java
deleted file mode 100644
index c27cb7a43f..0000000000
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/AttributesTableDescriptionProvider.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2024 Obeo.
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Obeo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.sirius.web.papaya.views.details;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.sirius.components.core.api.IIdentityService;
-import org.eclipse.sirius.components.core.api.ILabelService;
-import org.eclipse.sirius.components.papaya.Class;
-import org.eclipse.sirius.components.papaya.PapayaPackage;
-import org.eclipse.sirius.components.representations.VariableManager;
-import org.eclipse.sirius.components.tables.descriptions.ColumnDescription;
-import org.eclipse.sirius.components.tables.descriptions.ICellDescription;
-import org.eclipse.sirius.components.tables.descriptions.LineDescription;
-import org.eclipse.sirius.components.tables.descriptions.PaginatedData;
-import org.eclipse.sirius.components.tables.descriptions.TableDescription;
-import org.eclipse.sirius.components.tables.descriptions.TextfieldCellDescription;
-import org.eclipse.sirius.web.papaya.representations.table.CellTypePredicate;
-import org.eclipse.sirius.web.papaya.representations.table.ColumnTargetObjectIdProvider;
-import org.springframework.stereotype.Service;
-
-/**
- * Used to contribute the attributes table.
- *
- * @author sbegaudeau
- */
-@Service
-public class AttributesTableDescriptionProvider {
-
- private final IIdentityService identityService;
-
- private final ILabelService labelService;
-
- public AttributesTableDescriptionProvider(IIdentityService identityService, ILabelService labelService) {
- this.identityService = Objects.requireNonNull(identityService);
- this.labelService = Objects.requireNonNull(labelService);
- }
-
- public TableDescription getTableDescription() {
- Function targetObjectIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class)
- .map(this.identityService::getId)
- .orElse(null);
-
- Function targetObjectKind = variableManager -> variableManager.get(VariableManager.SELF, Object.class)
- .map(this.identityService::getKind)
- .orElse(null);
-
- Function labelProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class)
- .map(this.labelService::getLabel)
- .orElse(null);
-
- Function semanticElementsProvider = variableManager -> variableManager.get(VariableManager.SELF, Class.class)
- .map(aClass -> {
- List objects = new ArrayList<>();
- objects.addAll(aClass.getAttributes());
- return new PaginatedData(objects, false, false, objects.size());
- })
- .orElse(new PaginatedData(List.of(), false, false, 0));
-
- LineDescription lineDescription = LineDescription.newLineDescription(UUID.nameUUIDFromBytes("Table - Line".getBytes()).toString())
- .targetObjectIdProvider(targetObjectIdProvider)
- .targetObjectKindProvider(targetObjectKind)
- .semanticElementsProvider(semanticElementsProvider)
- .headerLabelProvider(variableManager -> "")
- .headerIconURLsProvider(variableManager -> List.of())
- .headerIndexLabelProvider(variableManager -> "")
- .isResizablePredicate(variableManager -> false)
- .initialHeightProvider(variableManager -> 0)
- .build();
-
- var nameColumnDescription = ColumnDescription.newColumnDescription("name")
- .semanticElementsProvider(variableManager -> List.of(PapayaPackage.eINSTANCE.getNamedElement_Name()))
- .targetObjectIdProvider(new ColumnTargetObjectIdProvider())
- .targetObjectKindProvider(variableManager -> "")
- .headerLabelProvider(variableManager -> "Name")
- .headerIconURLsProvider(variableManager -> List.of())
- .headerIndexLabelProvider(variableManager -> "")
- .initialWidthProvider(variableManager -> -1)
- .isResizablePredicate(variableManager -> false)
- .filterVariantProvider(variableManager -> "")
- .build();
-
- List columnDescriptions = List.of(nameColumnDescription);
-
- BiFunction valueProvider = (variableManager, columnTargetObject) -> {
- String value = "";
- Optional optionalEObject = variableManager.get(VariableManager.SELF, EObject.class);
- if (optionalEObject.isPresent() && columnTargetObject instanceof EStructuralFeature eStructuralFeature) {
- EObject eObject = optionalEObject.get();
- Object objectValue = eObject.eGet(eStructuralFeature);
- if (eStructuralFeature instanceof EReference eReference) {
- if (!eReference.isMany() && !eReference.isContainment()) {
- value = this.identityService.getId(objectValue);
- }
- } else if (objectValue != null) {
- value = objectValue.toString();
- }
- }
- return value;
- };
-
- var nameCellDescription = TextfieldCellDescription.newTextfieldCellDescription("name")
- .canCreatePredicate(new CellTypePredicate().isTextfieldCell())
- .targetObjectIdProvider(variableManager -> "")
- .targetObjectKindProvider(variableManager -> "")
- .cellValueProvider(valueProvider)
- .build();
-
- List cellDescriptions = List.of(nameCellDescription);
-
- return TableDescription.newTableDescription("table")
- .label("tasksTableLabel")
- .targetObjectIdProvider(targetObjectIdProvider)
- .targetObjectKindProvider(targetObjectKind)
- .labelProvider(labelProvider)
- .lineDescription(lineDescription)
- .columnDescriptions(columnDescriptions)
- .cellDescriptions(cellDescriptions)
- .iconURLsProvider(variableManager -> List.of())
- .isStripeRowPredicate(variableManager -> false)
- .build();
- }
-}
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/ClassPageDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/ClassPageDescriptionProvider.java
index b648b76f48..90b5219099 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/ClassPageDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/ClassPageDescriptionProvider.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
@@ -15,6 +15,8 @@
import java.util.Objects;
import org.eclipse.sirius.components.view.builder.generated.form.FormBuilders;
+import org.eclipse.sirius.components.view.builder.generated.table.TableBuilders;
+import org.eclipse.sirius.components.view.builder.generated.tablewidget.TableWidgetBuilders;
import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders;
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.form.CheckboxDescription;
@@ -22,6 +24,7 @@
import org.eclipse.sirius.components.view.form.GroupDisplayMode;
import org.eclipse.sirius.components.view.form.PageDescription;
import org.eclipse.sirius.components.view.form.SelectDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
import org.eclipse.sirius.web.papaya.views.details.api.IPageDescriptionProvider;
import org.springframework.stereotype.Service;
@@ -158,6 +161,37 @@ private GroupDescription getAdditionalInformationGroupDescription() {
.labelExpression("Additional Information")
.semanticCandidatesExpression("aql:self")
.displayMode(GroupDisplayMode.LIST)
+ .children(this.getAttributesWidget())
+ .build();
+ }
+
+ private TableWidgetDescription getAttributesWidget() {
+ var columnDescriptions = new TableBuilders().newColumnDescription()
+ .name("Name")
+ .semanticCandidatesExpression("aql:'NameColumn'")
+ .headerLabelExpression("Name")
+ .isResizableExpression("false")
+ .initialWidthExpression("-1")
+ .build();
+ var rowDescription = new TableBuilders().newRowDescription()
+ .name("AttributesRow")
+ .semanticCandidatesExpression("aql:self.attributes->toPaginatedData()")
+ .isResizableExpression("false")
+ .initialHeightExpression("-1")
+ .build();
+ var cellDescriptions = new TableBuilders().newCellDescription()
+ .name("AttributesCell")
+ .preconditionExpression("true")
+ .cellWidgetDescription(new TableBuilders().newCellTextfieldWidgetDescription().build())
+ .valueExpression("aql:self.name")
+ .build();
+ return new TableWidgetBuilders().newTableWidgetDescription()
+ .name("Attributes")
+ .labelExpression("Attributes")
+ .useStripedRowsExpression("true")
+ .columnDescriptions(columnDescriptions)
+ .rowDescription(rowDescription)
+ .cellDescriptions(cellDescriptions)
.build();
}
}
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/FormDescriptionConverter.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/FormDescriptionConverter.java
index 5f503981ba..5e600b5ddd 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/FormDescriptionConverter.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/FormDescriptionConverter.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
@@ -22,6 +22,7 @@
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.sirius.components.emf.services.IDAdapter;
import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext;
+import org.eclipse.sirius.components.emf.tables.CursorBasedNavigationServices;
import org.eclipse.sirius.components.forms.description.FormDescription;
import org.eclipse.sirius.components.interpreter.AQLInterpreter;
import org.eclipse.sirius.components.papaya.PapayaPackage;
@@ -55,7 +56,7 @@ public List convert(org.eclipse.sirius.components.view.View vie
});
// Convert the View-based FormDescription and register the result into the system
- AQLInterpreter interpreter = new AQLInterpreter(List.of(), List.of(), List.of(PapayaPackage.eINSTANCE));
+ AQLInterpreter interpreter = new AQLInterpreter(List.of(CursorBasedNavigationServices.class), List.of(), List.of(PapayaPackage.eINSTANCE));
return view.getDescriptions().stream()
.filter(org.eclipse.sirius.components.view.form.FormDescription.class::isInstance)
diff --git a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/PapayaDetailsViewPageDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/PapayaDetailsViewPageDescriptionProvider.java
index 83ffb981ed..ed36be7005 100644
--- a/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/PapayaDetailsViewPageDescriptionProvider.java
+++ b/packages/sirius-web/backend/sirius-web-papaya/src/main/java/org/eclipse/sirius/web/papaya/views/details/PapayaDetailsViewPageDescriptionProvider.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
@@ -12,21 +12,13 @@
*******************************************************************************/
package org.eclipse.sirius.web.papaya.views.details;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
-import java.util.function.Function;
import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistry;
import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer;
-import org.eclipse.sirius.components.core.api.IIdentityService;
-import org.eclipse.sirius.components.forms.WidgetIdProvider;
import org.eclipse.sirius.components.forms.description.FormDescription;
-import org.eclipse.sirius.components.forms.description.GroupDescription;
-import org.eclipse.sirius.components.forms.description.PageDescription;
-import org.eclipse.sirius.components.forms.description.TableWidgetDescription;
-import org.eclipse.sirius.components.representations.VariableManager;
import org.eclipse.sirius.components.view.ColorPalette;
import org.eclipse.sirius.components.view.builder.generated.form.FormBuilders;
import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders;
@@ -54,15 +46,10 @@ public class PapayaDetailsViewPageDescriptionProvider implements IPropertiesDesc
private final List pageDescriptionProviders;
- private final IIdentityService identityService;
- private final AttributesTableDescriptionProvider attributesTableDescriptionProvider;
-
- public PapayaDetailsViewPageDescriptionProvider(IFormDescriptionConverter formDescriptionConverter, List pageDescriptionProviders, IIdentityService identityService, AttributesTableDescriptionProvider attributesTableDescriptionProvider) {
+ public PapayaDetailsViewPageDescriptionProvider(IFormDescriptionConverter formDescriptionConverter, List pageDescriptionProviders) {
this.formDescriptionConverter = Objects.requireNonNull(formDescriptionConverter);
this.pageDescriptionProviders = Objects.requireNonNull(pageDescriptionProviders);
- this.identityService = Objects.requireNonNull(identityService);
- this.attributesTableDescriptionProvider = Objects.requireNonNull(attributesTableDescriptionProvider);
}
@Override
@@ -89,43 +76,9 @@ public void addPropertiesDescriptions(IPropertiesDescriptionRegistry registry) {
this.formDescriptionConverter.convert(view).stream()
.map(FormDescription::getPageDescriptions)
.flatMap(Collection::stream)
- .map(this::customize)
.forEach(registry::add);
}
- private PageDescription customize(PageDescription pageDescription) {
- if (pageDescription.getId().equals("siriusComponents://formElementDescription?kind=PageDescription&sourceKind=view&sourceId=papaya_details&sourceElementId=3e0650c4-57c9-308c-b35f-be1d9bff9ee6")) {
- Function targetObjectIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class)
- .map(this.identityService::getId)
- .orElse(null);
-
- var tableWidgetDescription = TableWidgetDescription.newTableWidgetDescription("table")
- .idProvider(new WidgetIdProvider())
- .labelProvider(variableManager -> "Attributes")
- .targetObjectIdProvider(targetObjectIdProvider)
- .diagnosticsProvider(variableManager -> List.of())
- .kindProvider(object -> "")
- .messageProvider(object -> "")
- .tableDescription(this.attributesTableDescriptionProvider.getTableDescription())
- .build();
-
- if (pageDescription.getGroupDescriptions().size() > 1) {
- var groupDescription = pageDescription.getGroupDescriptions().get(1);
- var controlDescriptions = new ArrayList<>(groupDescription.getControlDescriptions());
- controlDescriptions.add(tableWidgetDescription);
-
- var updatedGroupDescription = GroupDescription.newGroupDescription(groupDescription)
- .controlDescriptions(controlDescriptions)
- .build();
-
- return PageDescription.newPageDescription(pageDescription)
- .groupDescriptions(List.of(pageDescription.getGroupDescriptions().get(0), updatedGroupDescription))
- .build();
- }
- }
- return pageDescription;
- }
-
private ColorPalette getColorPalette() {
return new ViewBuilders().newColorPalette()
.colors(
diff --git a/packages/sirius-web/backend/sirius-web-starter/pom.xml b/packages/sirius-web/backend/sirius-web-starter/pom.xml
index 6b0d77bb7d..4225220128 100644
--- a/packages/sirius-web/backend/sirius-web-starter/pom.xml
+++ b/packages/sirius-web/backend/sirius-web-starter/pom.xml
@@ -84,6 +84,11 @@
sirius-components-collaborative-formdescriptioneditors-widget-reference
2025.1.6
+
+ org.eclipse.sirius
+ sirius-components-collaborative-formdescriptioneditors-widget-table
+ 2025.1.6
+
org.eclipse.sirius
sirius-components-formdescriptioneditors-graphql
@@ -229,6 +234,21 @@
sirius-components-widget-reference-view-edit
2025.1.6
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view-edit
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-view-emf-widget-table
+ 2025.1.6
+
org.eclipse.sirius
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/formdescriptioneditors/FormDescriptionEditorControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/formdescriptioneditors/FormDescriptionEditorControllerIntegrationTests.java
index 928fbca542..97ef66a2e5 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/formdescriptioneditors/FormDescriptionEditorControllerIntegrationTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/formdescriptioneditors/FormDescriptionEditorControllerIntegrationTests.java
@@ -42,6 +42,7 @@
import org.eclipse.sirius.components.forms.MultiSelect;
import org.eclipse.sirius.components.forms.Radio;
import org.eclipse.sirius.components.forms.Select;
+import org.eclipse.sirius.components.forms.TableWidget;
import org.eclipse.sirius.components.forms.Textarea;
import org.eclipse.sirius.components.forms.Textfield;
import org.eclipse.sirius.web.AbstractIntegrationTests;
@@ -91,7 +92,7 @@ public void beforeEach() {
private Flux givenSubscriptionToFormDescriptionEditor() {
var input = new CreateRepresentationInput(
UUID.randomUUID(),
- StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID.toString(),
+ StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID,
UUID.nameUUIDFromBytes("FormDescriptionEditor".getBytes()).toString(),
StudioIdentifiers.FORM_DESCRIPTION_OBJECT.toString(),
"FormDescriptionEditor"
@@ -231,6 +232,13 @@ public void givenFormDescriptionEditorWhenWeAddAnIfThenTheRepresentationIsUpdate
this.givenFormDescriptionEditorWhenWeAddSomethingThenTheRepresentationIsUpdated("FormElementIf", FormDescriptionEditorIf.class);
}
+ @Test
+ @GivenSiriusWebServer
+ @DisplayName("Given a form description editor, when we add a table widget, then the representation is updated")
+ public void givenFormDescriptionEditorWhenWeAddATableWidgetThenTheRepresentationIsUpdated() {
+ this.givenFormDescriptionEditorWhenWeAddSomethingThenTheRepresentationIsUpdated("TableWidget", TableWidget.class);
+ }
+
private void givenFormDescriptionEditorWhenWeAddSomethingThenTheRepresentationIsUpdated(String widgetKind, Class extends AbstractWidget> expectedWidgetClass) {
var flux = this.givenSubscriptionToFormDescriptionEditor();
@@ -251,7 +259,7 @@ private void givenFormDescriptionEditorWhenWeAddSomethingThenTheRepresentationIs
Runnable addWidget = () -> {
var addWidgetInput = new AddWidgetInput(
UUID.randomUUID(),
- StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID.toString(),
+ StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID,
formDescriptionEditorId.get(),
StudioIdentifiers.GROUP_OBJECT.toString(),
widgetKind,
@@ -303,7 +311,7 @@ public void givenFormDescriptionEditorWhenWeAddPageThenTheRepresentationIsUpdate
Runnable addPage = () -> {
var addPageInput = new AddPageInput(
UUID.randomUUID(),
- StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID.toString(),
+ StudioIdentifiers.SAMPLE_STUDIO_EDITING_CONTEXT_ID,
formDescriptionEditorId.get(),
0
);
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/TableControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/TableControllerTests.java
index 1eba108d3c..1fb551906b 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/TableControllerTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/TableControllerTests.java
@@ -45,6 +45,7 @@
import org.eclipse.sirius.web.AbstractIntegrationTests;
import org.eclipse.sirius.web.data.PapayaIdentifiers;
import org.eclipse.sirius.web.services.forms.FormWithTableDescriptionProvider;
+import org.eclipse.sirius.web.services.forms.FormWithViewTableDescriptionProvider;
import org.eclipse.sirius.web.tests.data.GivenSiriusWebServer;
import org.eclipse.sirius.web.tests.services.api.IGivenCreatedFormSubscription;
import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState;
@@ -86,6 +87,9 @@ public class TableControllerTests extends AbstractIntegrationTests {
@Autowired
private EditMultiSelectCellMutationRunner editMultiSelectCellMutationRunner;
+ @Autowired
+ private FormWithViewTableDescriptionProvider formWithViewTableDescriptionProvider;
+
@BeforeEach
public void beforeEach() {
this.givenInitialServerState.initialize();
@@ -206,6 +210,38 @@ public void givenTableWidgetWhenValuesAreEditedThenValuesAreUpdated() {
.verify(Duration.ofSeconds(10));
}
+ @Test
+ @GivenSiriusWebServer
+ @DisplayName("Given a form with a view based table widget, when it is displayed, then it is properly initialized")
+ public void givenFormWithViewBasedTableWidgetWhenItIsDisplayedThenItIsProperlyInitialized() {
+ var input = new CreateRepresentationInput(
+ UUID.randomUUID(),
+ PapayaIdentifiers.PAPAYA_EDITING_CONTEXT_ID.toString(),
+ this.formWithViewTableDescriptionProvider.getRepresentationDescriptionId(),
+ PapayaIdentifiers.SIRIUS_WEB_DOMAIN_PACKAGE.toString(),
+ "FormWithViewTable");
+ var flux = this.givenCreatedFormSubscription.createAndSubscribe(input);
+
+ Consumer initialFormContentConsumer = payload -> Optional.of(payload).filter(FormRefreshedEventPayload.class::isInstance).map(FormRefreshedEventPayload.class::cast)
+ .map(FormRefreshedEventPayload::form).ifPresentOrElse(form -> {
+ var tableWidget = new FormNavigator(form).page("Page").group("Group").findWidget("Types", TableWidget.class);
+ assertThat(tableWidget.getTable().getColumns()).hasSize(1);
+ assertThat(tableWidget.getTable().getLines()).hasSize(2);
+ assertThat(tableWidget.getTable().getLines().stream().flatMap(line -> line.getCells().stream()).toList()).hasSize(2);
+ Line line = tableWidget.getTable().getLines().get(0);
+ LineNavigator lineNavigator = new LineNavigator(line);
+
+ TableNavigator tableNavigator = new TableNavigator(tableWidget.getTable());
+ assertThat(lineNavigator.textfieldCellByColumnId(tableNavigator.column("Name").getId())).hasValue("Success");
+
+ }, () -> fail("Missing form"));
+
+ StepVerifier.create(flux)
+ .consumeNextWith(initialFormContentConsumer)
+ .thenCancel()
+ .verify(Duration.ofSeconds(10));
+ }
+
private Consumer getEditIsDoneConsumer() {
return payload -> Optional.of(payload)
.filter(FormRefreshedEventPayload.class::isInstance)
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/projects/ProjectDownloadControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/projects/ProjectDownloadControllerIntegrationTests.java
index 8bdb9f7bf4..4d88fe682a 100644
--- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/projects/ProjectDownloadControllerIntegrationTests.java
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/projects/ProjectDownloadControllerIntegrationTests.java
@@ -104,7 +104,8 @@ public void givenStudioWhenTheDownloadOfProjectIsRequestedThenTheManifestIsExpor
"http://www.eclipse.org/sirius-web/table",
"http://www.eclipse.org/sirius-web/tree",
"http://www.eclipse.org/sirius-web/view",
- "https://www.eclipse.org/sirius/widgets/reference"
+ "https://www.eclipse.org/sirius/widgets/reference",
+ "https://www.eclipse.org/sirius/widgets/tablewidget"
],
"representations":{}
}
diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithViewTableDescriptionProvider.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithViewTableDescriptionProvider.java
new file mode 100644
index 0000000000..d503c7d33c
--- /dev/null
+++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/services/forms/FormWithViewTableDescriptionProvider.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.web.services.forms;
+
+import java.util.Objects;
+import java.util.UUID;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.IEditingContextProcessor;
+import org.eclipse.sirius.components.emf.ResourceMetadataAdapter;
+import org.eclipse.sirius.components.emf.services.IDAdapter;
+import org.eclipse.sirius.components.emf.services.JSONResourceFactory;
+import org.eclipse.sirius.components.view.View;
+import org.eclipse.sirius.components.view.builder.generated.form.FormDescriptionBuilder;
+import org.eclipse.sirius.components.view.builder.generated.form.GroupDescriptionBuilder;
+import org.eclipse.sirius.components.view.builder.generated.form.PageDescriptionBuilder;
+import org.eclipse.sirius.components.view.builder.generated.table.TableBuilders;
+import org.eclipse.sirius.components.view.builder.generated.tablewidget.TableWidgetBuilders;
+import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilder;
+import org.eclipse.sirius.components.view.emf.form.IFormIdProvider;
+import org.eclipse.sirius.components.view.form.FormDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.emfjson.resource.JsonResource;
+import org.eclipse.sirius.web.application.editingcontext.EditingContext;
+import org.eclipse.sirius.web.services.OnStudioTests;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.stereotype.Service;
+
+/**
+ * Used to provide a view based form description to test table widget.
+ *
+ * @author frouene
+ */
+@Service
+@Conditional(OnStudioTests.class)
+@SuppressWarnings("checkstyle:MultipleStringLiterals")
+public class FormWithViewTableDescriptionProvider implements IEditingContextProcessor {
+
+ private final IFormIdProvider formIdProvider;
+
+ private final View view;
+
+ private FormDescription formDescription;
+
+ public FormWithViewTableDescriptionProvider(IFormIdProvider formIdProvider) {
+ this.formIdProvider = Objects.requireNonNull(formIdProvider);
+ this.view = this.createView();
+ }
+
+ @Override
+ public void preProcess(IEditingContext editingContext) {
+ if (editingContext instanceof EditingContext siriusWebEditingContext) {
+ siriusWebEditingContext.getViews().add(this.view);
+ }
+ }
+
+ public String getRepresentationDescriptionId() {
+ return this.formIdProvider.getId(this.formDescription);
+ }
+
+ private View createView() {
+ ViewBuilder viewBuilder = new ViewBuilder();
+ View tableFormView = viewBuilder.build();
+ tableFormView.getDescriptions().add(this.createFormDescription());
+
+ tableFormView.eAllContents().forEachRemaining(eObject -> {
+ eObject.eAdapters().add(new IDAdapter(UUID.nameUUIDFromBytes(EcoreUtil.getURI(eObject).toString().getBytes())));
+ });
+
+ String resourcePath = UUID.nameUUIDFromBytes("FormWithViewTableDescription".getBytes()).toString();
+ JsonResource resource = new JSONResourceFactory().createResourceFromPath(resourcePath);
+ resource.eAdapters().add(new ResourceMetadataAdapter("FormWithViewTableDescription"));
+ resource.getContents().add(tableFormView);
+
+ return tableFormView;
+ }
+
+ private FormDescription createFormDescription() {
+
+ var groupDescription = new GroupDescriptionBuilder()
+ .name("Group")
+ .labelExpression("Group")
+ .semanticCandidatesExpression("aql:self")
+ .children(this.getTypesWidget())
+ .build();
+
+ var pageDescription = new PageDescriptionBuilder()
+ .name("Page")
+ .labelExpression("Page")
+ .domainType("papaya:Package")
+ .semanticCandidatesExpression("aql:self")
+ .groups(groupDescription)
+ .build();
+
+ this.formDescription = new FormDescriptionBuilder()
+ .name("Form")
+ .titleExpression("aql:'FormWithViewTable'")
+ .domainType("papaya:Package")
+ .pages(pageDescription)
+ .build();
+
+ return this.formDescription;
+ }
+
+ private TableWidgetDescription getTypesWidget() {
+ var columnDescriptions = new TableBuilders().newColumnDescription()
+ .name("Name")
+ .semanticCandidatesExpression("aql:'NameColumn'")
+ .headerLabelExpression("Name")
+ .isResizableExpression("false")
+ .initialWidthExpression("-1")
+ .build();
+ var rowDescription = new TableBuilders().newRowDescription()
+ .name("TypesRow")
+ .semanticCandidatesExpression("aql:self.types->toPaginatedData()")
+ .isResizableExpression("false")
+ .initialHeightExpression("-1")
+ .build();
+ var cellDescriptions = new TableBuilders().newCellDescription()
+ .name("TypeCell")
+ .preconditionExpression("true")
+ .cellWidgetDescription(new TableBuilders().newCellTextfieldWidgetDescription().build())
+ .valueExpression("aql:self.name")
+ .build();
+ return new TableWidgetBuilders().newTableWidgetDescription()
+ .name("Types")
+ .labelExpression("Types")
+ .useStripedRowsExpression("true")
+ .columnDescriptions(columnDescriptions)
+ .rowDescription(rowDescription)
+ .cellDescriptions(cellDescriptions)
+ .build();
+ }
+}
diff --git a/packages/sirius-web/frontend/sirius-web-application/package.json b/packages/sirius-web/frontend/sirius-web-application/package.json
index 20c21dc426..4236f0e59a 100644
--- a/packages/sirius-web/frontend/sirius-web-application/package.json
+++ b/packages/sirius-web/frontend/sirius-web-application/package.json
@@ -45,6 +45,7 @@
"@eclipse-sirius/sirius-components-tables": "*",
"@eclipse-sirius/sirius-components-trees": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@ObeoNetwork/gantt-task-react": "0.6.1",
"@ObeoNetwork/react-trello": "2.4.11",
@@ -84,6 +85,7 @@
"@eclipse-sirius/sirius-components-forms": "*",
"@eclipse-sirius/sirius-components-selection": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-components-gantt": "*",
"@eclipse-sirius/sirius-components-omnibox": "*",
"@eclipse-sirius/sirius-components-portals": "*",
diff --git a/packages/sirius-web/frontend/sirius-web-application/src/extension/DefaultExtensionRegistry.tsx b/packages/sirius-web/frontend/sirius-web-application/src/extension/DefaultExtensionRegistry.tsx
index 889ecbecad..2fd830c03e 100644
--- a/packages/sirius-web/frontend/sirius-web-application/src/extension/DefaultExtensionRegistry.tsx
+++ b/packages/sirius-web/frontend/sirius-web-application/src/extension/DefaultExtensionRegistry.tsx
@@ -46,6 +46,7 @@ import {
ReferencePreview,
ReferencePropertySection,
} from '@eclipse-sirius/sirius-components-widget-reference';
+import { TableWidgetPreview } from '@eclipse-sirius/sirius-components-widget-table';
import AccountTreeIcon from '@mui/icons-material/AccountTree';
import FileCopyIcon from '@mui/icons-material/FileCopy';
import Filter from '@mui/icons-material/Filter';
@@ -54,6 +55,7 @@ import ImageIcon from '@mui/icons-material/Image';
import LinkIcon from '@mui/icons-material/Link';
import MenuIcon from '@mui/icons-material/Menu';
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
+import TableViewIcon from '@mui/icons-material/TableView';
import WarningIcon from '@mui/icons-material/Warning';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
@@ -381,7 +383,7 @@ defaultExtensionRegistry.putData(apolloClientOptionsConfigurersExtensionPoint, {
const isReferenceWidget = (widget: GQLWidget): widget is GQLReferenceWidget => widget.__typename === 'ReferenceWidget';
defaultExtensionRegistry.putData(widgetContributionExtensionPoint, {
- identifier: `siriusWeb_${widgetContributionExtensionPoint.identifier}_referenceWidget`,
+ identifier: `siriusWeb_${widgetContributionExtensionPoint.identifier}`,
data: [
{
name: 'ReferenceWidget',
@@ -396,6 +398,12 @@ defaultExtensionRegistry.putData(widgetContributionExtensionPoint, {
return propertySectionComponent;
},
},
+ {
+ name: 'TableWidget',
+ icon: ,
+ previewComponent: TableWidgetPreview,
+ component: (_widget: GQLWidget): PropertySectionComponent | null => null,
+ },
],
});
diff --git a/packages/sirius-web/frontend/sirius-web-papaya/package.json b/packages/sirius-web/frontend/sirius-web-papaya/package.json
index 90552239f1..4ac5cd89de 100644
--- a/packages/sirius-web/frontend/sirius-web-papaya/package.json
+++ b/packages/sirius-web/frontend/sirius-web-papaya/package.json
@@ -46,6 +46,7 @@
"@eclipse-sirius/sirius-components-selection": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@ObeoNetwork/gantt-task-react": "0.6.1",
"@ObeoNetwork/react-trello": "2.4.11",
@@ -82,6 +83,7 @@
"@eclipse-sirius/sirius-components-diagrams": "*",
"@eclipse-sirius/sirius-components-formdescriptioneditors": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-components-forms": "*",
"@eclipse-sirius/sirius-components-gantt": "*",
"@eclipse-sirius/sirius-components-deck": "*",
diff --git a/packages/sirius-web/frontend/sirius-web-view-fork/package.json b/packages/sirius-web/frontend/sirius-web-view-fork/package.json
index 1dd4223101..700f205ef3 100644
--- a/packages/sirius-web/frontend/sirius-web-view-fork/package.json
+++ b/packages/sirius-web/frontend/sirius-web-view-fork/package.json
@@ -46,6 +46,7 @@
"@eclipse-sirius/sirius-components-selection": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@ObeoNetwork/gantt-task-react": "0.6.1",
"@ObeoNetwork/react-trello": "2.4.11",
@@ -82,6 +83,7 @@
"@eclipse-sirius/sirius-components-diagrams": "*",
"@eclipse-sirius/sirius-components-formdescriptioneditors": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-components-forms": "*",
"@eclipse-sirius/sirius-components-gantt": "*",
"@eclipse-sirius/sirius-components-deck": "*",
diff --git a/packages/tests/backend/sirius-components-tests/src/test/java/org/eclipse/sirius/components/tests/GeneralPurposeTests.java b/packages/tests/backend/sirius-components-tests/src/test/java/org/eclipse/sirius/components/tests/GeneralPurposeTests.java
index 8c61cb5028..83aa6d7ae3 100644
--- a/packages/tests/backend/sirius-components-tests/src/test/java/org/eclipse/sirius/components/tests/GeneralPurposeTests.java
+++ b/packages/tests/backend/sirius-components-tests/src/test/java/org/eclipse/sirius/components/tests/GeneralPurposeTests.java
@@ -124,7 +124,8 @@ public class GeneralPurposeTests {
"/sirius-web-customwidgets",
"/sirius-components-widget-reference-view",
"/sirius-components-view-diagram-customnodes",
- "/sirius-components-papaya"
+ "/sirius-components-papaya",
+ "/sirius-components-widget-table-view"
);
/**
@@ -391,11 +392,11 @@ public void checkCSSCode() {
*
*
* @param index
- * The number of the line
+ * The number of the line
* @param line
- * The line to check
+ * The line to check
* @param cssFilePath
- * The path of the CSS file
+ * The path of the CSS file
*/
private void testHeight100Percent(int index, String line, Path cssFilePath) {
// @formatter:off
@@ -424,11 +425,11 @@ private void testHeight100Percent(int index, String line, Path cssFilePath) {
*
*
* @param index
- * The number of the line
+ * The number of the line
* @param line
- * The line to check
+ * The line to check
* @param cssFilePath
- * The path of the CSS file
+ * The path of the CSS file
*/
private void testWidth100Percent(int index, String line, Path cssFilePath) {
// @formatter:off
diff --git a/packages/view/backend/pom.xml b/packages/view/backend/pom.xml
index bbc80bce8a..e58d1772b9 100644
--- a/packages/view/backend/pom.xml
+++ b/packages/view/backend/pom.xml
@@ -53,5 +53,8 @@
sirius-components-view-table-edit
sirius-components-view-tree
sirius-components-view-tree-edit
+ sirius-components-widget-table-view
+ sirius-components-widget-table-view-edit
+ sirius-components-view-emf-widget-table
diff --git a/packages/view/backend/sirius-components-view-builder/pom.xml b/packages/view/backend/sirius-components-view-builder/pom.xml
index c3b2d9562d..87440286b3 100644
--- a/packages/view/backend/sirius-components-view-builder/pom.xml
+++ b/packages/view/backend/sirius-components-view-builder/pom.xml
@@ -105,6 +105,11 @@
sirius-components-widget-reference-view
2025.1.6
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
org.eclipse.sirius
sirius-components-tests
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetBuilders.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetBuilders.java
new file mode 100644
index 0000000000..ec6a538fb6
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetBuilders.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2023, 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.builder.generated.tablewidget;
+
+/**
+ * Use to instantiate a new builder.
+ *
+ * @author BuilderGenerator
+ * @generated
+ */
+public class TableWidgetBuilders {
+ /**
+ * Instantiate a TableWidgetDescriptionBuilder .
+ *
+ * @author BuilderGenerator
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder newTableWidgetDescription() {
+ return new TableWidgetDescriptionBuilder();
+ }
+
+
+}
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetDescriptionBuilder.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetDescriptionBuilder.java
new file mode 100644
index 0000000000..af1d95f29f
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generated/tablewidget/TableWidgetDescriptionBuilder.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2023, 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.builder.generated.tablewidget;
+
+/**
+ * Builder for TableWidgetDescriptionBuilder.
+ *
+ * @author BuilderGenerator
+ * @generated
+ */
+public class TableWidgetDescriptionBuilder {
+
+ /**
+ * Create instance org.eclipse.sirius.components.widget.tablewidget.TableWidgetDescription.
+ *
+ * @generated
+ */
+ private org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription tableWidgetDescription =
+ org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetFactory.eINSTANCE.createTableWidgetDescription();
+
+ /**
+ * Return instance org.eclipse.sirius.components.widget.tablewidget.TableWidgetDescription.
+ *
+ * @generated
+ */
+ protected org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription getTableWidgetDescription() {
+ return this.tableWidgetDescription;
+ }
+
+ /**
+ * Return instance org.eclipse.sirius.components.widget.tablewidget.TableWidgetDescription.
+ *
+ * @generated
+ */
+ public org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription build() {
+ return this.getTableWidgetDescription();
+ }
+
+ /**
+ * Setter for Name.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder name(java.lang.String value) {
+ this.getTableWidgetDescription().setName(value);
+ return this;
+ }
+
+ /**
+ * Setter for LabelExpression.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder labelExpression(java.lang.String value) {
+ this.getTableWidgetDescription().setLabelExpression(value);
+ return this;
+ }
+
+ /**
+ * Setter for HelpExpression.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder helpExpression(java.lang.String value) {
+ this.getTableWidgetDescription().setHelpExpression(value);
+ return this;
+ }
+
+ /**
+ * Setter for DiagnosticsExpression.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder diagnosticsExpression(java.lang.String value) {
+ this.getTableWidgetDescription().setDiagnosticsExpression(value);
+ return this;
+ }
+
+ /**
+ * Setter for ColumnDescriptions.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder columnDescriptions(org.eclipse.sirius.components.view.table.ColumnDescription ... values) {
+ for (org.eclipse.sirius.components.view.table.ColumnDescription value : values) {
+ this.getTableWidgetDescription().getColumnDescriptions().add(value);
+ }
+ return this;
+ }
+
+ /**
+ * Setter for RowDescription.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder rowDescription(org.eclipse.sirius.components.view.table.RowDescription value) {
+ this.getTableWidgetDescription().setRowDescription(value);
+ return this;
+ }
+
+ /**
+ * Setter for CellDescriptions.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder cellDescriptions(org.eclipse.sirius.components.view.table.CellDescription ... values) {
+ for (org.eclipse.sirius.components.view.table.CellDescription value : values) {
+ this.getTableWidgetDescription().getCellDescriptions().add(value);
+ }
+ return this;
+ }
+
+ /**
+ * Setter for UseStripedRowsExpression.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder useStripedRowsExpression(java.lang.String value) {
+ this.getTableWidgetDescription().setUseStripedRowsExpression(value);
+ return this;
+ }
+
+ /**
+ * Setter for IsEnabledExpression.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionBuilder isEnabledExpression(java.lang.String value) {
+ this.getTableWidgetDescription().setIsEnabledExpression(value);
+ return this;
+ }
+
+}
+
diff --git a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generator/BuilderGenerator.java b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generator/BuilderGenerator.java
index 9dcfa3aa8d..ec3c580f65 100644
--- a/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generator/BuilderGenerator.java
+++ b/packages/view/backend/sirius-components-view-builder/src/main/java/org/eclipse/sirius/components/view/builder/generator/BuilderGenerator.java
@@ -117,6 +117,10 @@ public static void main(String[] args) {
Resource referenceResource = resourceSet.getResource(referenceURI, true);
allViewContent.addAll(referenceResource.getContents());
+ URI tableWidgetURI = URI.createFileURI(args[1] + "/../sirius-components-widget-table-view/src/main/resources/model/tablewidget.genmodel");
+ Resource tableWidgetResource = resourceSet.getResource(tableWidgetURI, true);
+ allViewContent.addAll(tableWidgetResource.getContents());
+
URI customNodesURI = URI.createFileURI(args[1] + "/../sirius-components-view-diagram-customnodes/src/main/resources/model/customnodes.genmodel");
Resource customNodesResource = resourceSet.getResource(customNodesURI, true);
allViewContent.addAll(customNodesResource.getContents());
@@ -147,7 +151,7 @@ private StringBuilder getFactoryClassBody(GenPackage pak) {
public #builderClassName new#className() {
return new #builderClassName();
}
-
+
""".replace(BUILDER_CLASSNAME, this.builderClasssName(clazz))
.replace("#className", clazz.getName()));
}
@@ -171,7 +175,7 @@ private StringBuilder getFactory(GenPackage pak, String builderFactoryName, Stri
* Obeo - initial API and implementation
*******************************************************************************/
package #package;
-
+
/**
* Use to instantiate a new builder.
*
@@ -197,7 +201,7 @@ private StringBuilder getBody(GenClass clazz) {
* @generated
*/
private #eObjType #eObjNameLowerCase = #packageFactory.create#eObjName();
-
+
/**
* Return instance #eObjType.
* @generated
@@ -205,7 +209,7 @@ private StringBuilder getBody(GenClass clazz) {
protected #eObjType get#eObjName() {
return this.#eObjNameLowerCase;
}
-
+
/**
* Return instance #eObjType.
* @generated
@@ -213,7 +217,7 @@ private StringBuilder getBody(GenClass clazz) {
public #eObjType build() {
return this.get#eObjName();
}
-
+
""".replace("#packageFactory", clazz.getGenPackage().getQualifiedEFactoryInternalInstanceAccessor())
.replace("#eObjType", clazz.getQualifiedInterfaceName())
.replace("#eObjNameLowerCase", clazz.uncapPrefixedName(clazz.getSafeUncapName()))
@@ -253,7 +257,7 @@ private StringBuilder getBody(GenClass clazz) {
}
return this;
}
-
+
""".replace(BUILDER_CLASSNAME, this.builderClasssName(clazz))
.replace("#paramType", feat.getListItemType(clazz))
.replace("#accessor", feat.getAccessorName())
@@ -284,7 +288,7 @@ private StringBuilder getBuilder(GenPackage pak, GenClass clazz, StringBuilder b
* Obeo - initial API and implementation
*******************************************************************************/
package #package;
-
+
/**
* Builder for #qualifiedType.
*
@@ -292,16 +296,16 @@ private StringBuilder getBuilder(GenPackage pak, GenClass clazz, StringBuilder b
* @generated
*/
public abstract class #builderClassName {
-
+
/**
* Builder for #qualifiedType.
* @generated
*/
protected abstract #qualifiedType get#eObjName();
-
+
#classbody
}
-
+
""".replace(BUILDER_CLASSNAME, this.builderClasssName(clazz))
.replace("#qualifiedType", this.qualifiedNameFromGenClass(clazz))
.replace(CLASSBODY, body)
@@ -322,7 +326,7 @@ public abstract class #builderClassName {
* Obeo - initial API and implementation
*******************************************************************************/
package #package;
-
+
/**
* Builder for #builderClassName.
*
@@ -330,10 +334,10 @@ public abstract class #builderClassName {
* @generated
*/
public class #builderClassName {
-
+
#classbody
}
-
+
""".replace(BUILDER_CLASSNAME, this.builderClasssName(clazz))
.replace("#qualifiedType", clazz.getQualifiedInterfaceName())
.replace(CLASSBODY, body)
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.checkstyle b/packages/view/backend/sirius-components-view-emf-widget-table/.checkstyle
new file mode 100644
index 0000000000..9b6893c969
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.checkstyle
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.classpath b/packages/view/backend/sirius-components-view-emf-widget-table/.classpath
new file mode 100644
index 0000000000..2a5a91b976
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.project b/packages/view/backend/sirius-components-view-emf-widget-table/.project
new file mode 100644
index 0000000000..91b3c8f40b
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.project
@@ -0,0 +1,29 @@
+
+
+ sirius-components-view-emf-widget-table
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ net.sf.eclipsecs.core.CheckstyleBuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ net.sf.eclipsecs.core.CheckstyleNature
+
+
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.resources.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..29abf99956
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.runtime.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000000..a287fefdba
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Mon Sep 24 15:04:19 CEST 2007
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.apt.core.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000..d4313d4b25
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.core.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..2ab93cd0a5
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,505 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=200
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.ui.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..f789e687ad
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,210 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=true
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=true
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+cleanup_profile=_Sirius
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Sirius
+formatter_settings_version=21
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com;fr;java;javax;org;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/*******************************************************************************\n * Copyright (c) ${year} Obeo.\n * This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v2.0\n * which accompanies this distribution, and is available at\n * https\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier\: EPL-2.0\n *\n * Contributors\:\n * Obeo - initial API and implementation\n *******************************************************************************/ /**\n * @author ${user}\n */ /**\n * \n */ /**\n * ${tags}\n */ /**\n * ${tags}\n * ${see_to_target}\n */ ${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration} \n \n \n \n ${exception_var}.printStackTrace(); ${body_statement} ${body_statement} return ${field}; ${field} \= ${param}; /**\n * @author ${user}\n *\n * ${tags}\n */ \n
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=true
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=false
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.overridden_assignment_move_decl=false
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=false
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_method_parameters=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=false
+sp_cleanup.stringconcat_to_textblock=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.m2e.core.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000..96b30f9805
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=pom.xml
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.springframework.ide.eclipse.prefs b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.springframework.ide.eclipse.prefs
new file mode 100644
index 0000000000..a12794d68f
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/.settings/org.springframework.ide.eclipse.prefs
@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/README.adoc b/packages/view/backend/sirius-components-view-emf-widget-table/README.adoc
new file mode 100644
index 0000000000..fb26908744
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/README.adoc
@@ -0,0 +1,12 @@
+= sirius-components-view-emf-widget-table
+
+== Goal
+
+This project is used to add support for the table widget to the view converter.
+
+== Dependencies
+
+- sirius-components-view-emf
+- sirius-components-widget-table-view
+
+This project should not depend on anything else without a good reason to do so.
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/pom.xml b/packages/view/backend/sirius-components-view-emf-widget-table/pom.xml
new file mode 100644
index 0000000000..4c401fadf6
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/pom.xml
@@ -0,0 +1,132 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ org.eclipse.sirius
+ sirius-components-view-emf-widget-table
+ 2025.1.6
+ sirius-components-view-emf-widget-table
+ Sirius Components View EMF Widget Table
+
+
+ 17
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ org.eclipse.sirius
+ sirius-components-view-emf
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view-edit
+ 2025.1.6
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.eclipse.sirius
+ sirius-components-tests
+ 2025.1.6
+ test
+
+
+ org.eclipse.sirius
+ sirius-components-spring-tests
+ 2025.1.6
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.4.0
+
+ ../../../releng/backend/sirius-components-resources/checkstyle/CheckstyleConfiguration.xml
+ true
+ true
+ true
+
+
+
+ validate
+ validate
+
+ check
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.12
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterProvider.java b/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterProvider.java
new file mode 100644
index 0000000000..9378db1725
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.widget.table;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.sirius.components.core.api.IEditService;
+import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
+import org.eclipse.sirius.components.core.api.IObjectService;
+import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.view.emf.form.IFormIdProvider;
+import org.eclipse.sirius.components.view.emf.form.IWidgetConverterProvider;
+import org.eclipse.sirius.components.view.emf.table.ITableIdProvider;
+import org.springframework.stereotype.Service;
+
+/**
+ * Provides the widget converter needed for the table widget.
+ *
+ * @author frouene
+ */
+@Service
+public class TableWidgetDescriptionConverterProvider implements IWidgetConverterProvider {
+
+ private final IFormIdProvider formIdProvider;
+
+ private final ITableIdProvider tableIdProvider;
+
+
+ public TableWidgetDescriptionConverterProvider(IFormIdProvider formIdProvider, ITableIdProvider tableIdProvider) {
+ this.formIdProvider = Objects.requireNonNull(formIdProvider);
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ }
+
+ @Override
+ public Switch> getWidgetConverter(AQLInterpreter interpreter, IEditService editService, IObjectService objectService, IFeedbackMessageService feedbackMessageService) {
+ return new TableWidgetDescriptionConverterSwitch(interpreter, objectService, this.formIdProvider, this.tableIdProvider);
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterSwitch.java b/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterSwitch.java
new file mode 100644
index 0000000000..7a9db7b409
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/main/java/org/eclipse/sirius/components/view/emf/widget/table/TableWidgetDescriptionConverterSwitch.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.widget.table;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.sirius.components.core.api.IObjectService;
+import org.eclipse.sirius.components.forms.WidgetIdProvider;
+import org.eclipse.sirius.components.forms.description.AbstractWidgetDescription;
+import org.eclipse.sirius.components.forms.description.TableWidgetDescription;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.interpreter.StringValueProvider;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.TableDescription;
+import org.eclipse.sirius.components.view.emf.form.IFormIdProvider;
+import org.eclipse.sirius.components.view.emf.form.converters.ReadOnlyValueProvider;
+import org.eclipse.sirius.components.view.emf.form.converters.validation.DiagnosticKindProvider;
+import org.eclipse.sirius.components.view.emf.form.converters.validation.DiagnosticMessageProvider;
+import org.eclipse.sirius.components.view.emf.form.converters.validation.DiagnosticProvider;
+import org.eclipse.sirius.components.view.emf.table.CellDescriptionConverter;
+import org.eclipse.sirius.components.view.emf.table.ColumnDescriptionConverter;
+import org.eclipse.sirius.components.view.emf.table.ITableIdProvider;
+import org.eclipse.sirius.components.view.emf.table.RowDescriptionConverter;
+import org.eclipse.sirius.components.view.widget.tablewidget.util.TableWidgetSwitch;
+
+/**
+ * Converts a View-based TableWidgetDescription into its API equivalent.
+ *
+ * @author frouene
+ */
+public class TableWidgetDescriptionConverterSwitch extends TableWidgetSwitch> {
+
+ private final AQLInterpreter interpreter;
+
+ private final IObjectService objectService;
+
+ private final Function semanticTargetIdProvider;
+
+ private final IFormIdProvider widgetIdProvider;
+
+ private final ITableIdProvider tableIdProvider;
+
+
+ public TableWidgetDescriptionConverterSwitch(AQLInterpreter interpreter, IObjectService objectService,
+ IFormIdProvider widgetIdProvider, ITableIdProvider tableIdProvider) {
+ this.interpreter = Objects.requireNonNull(interpreter);
+ this.objectService = Objects.requireNonNull(objectService);
+ this.widgetIdProvider = Objects.requireNonNull(widgetIdProvider);
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ this.semanticTargetIdProvider = variableManager -> {
+ Optional optionalSelf = variableManager.get(VariableManager.SELF, Object.class);
+ return optionalSelf
+ .map(this.objectService::getId)
+ .orElseGet(() -> optionalSelf.map(Object::toString).orElse(""));
+ };
+ }
+
+ @Override
+ public Optional caseTableWidgetDescription(org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription viewTableWidgetDescription) {
+ String descriptionId = this.widgetIdProvider.getFormElementDescriptionId(viewTableWidgetDescription);
+ WidgetIdProvider idProvider = new WidgetIdProvider();
+ StringValueProvider labelProvider = this.getStringValueProvider(viewTableWidgetDescription.getLabelExpression());
+ Predicate isStripeRowPredicate = variableManager -> {
+ if (viewTableWidgetDescription.getUseStripedRowsExpression() != null) {
+ return this.interpreter.evaluateExpression(variableManager.getVariables(), viewTableWidgetDescription.getUseStripedRowsExpression()).asBoolean().orElse(false);
+ }
+ return false;
+ };
+ var tableDescription = TableDescription.newTableDescription(descriptionId)
+ .label("")
+ .labelProvider(labelProvider)
+ .canCreatePredicate(variableManager -> true)
+ .targetObjectIdProvider(this.semanticTargetIdProvider)
+ .targetObjectKindProvider(variableManager -> "")
+ .isStripeRowPredicate(isStripeRowPredicate)
+ .iconURLsProvider(variableManager -> List.of())
+ .columnDescriptions(new ColumnDescriptionConverter(this.tableIdProvider, this.semanticTargetIdProvider,
+ variableManager -> "").convert(viewTableWidgetDescription.getColumnDescriptions(), this.interpreter))
+ .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))
+ .build();
+ var tableWidgetDescription = TableWidgetDescription.newTableWidgetDescription(descriptionId)
+ .targetObjectIdProvider(this.semanticTargetIdProvider)
+ .idProvider(idProvider)
+ .labelProvider(labelProvider)
+ .tableDescription(tableDescription)
+ .diagnosticsProvider(new DiagnosticProvider(this.interpreter, viewTableWidgetDescription.getDiagnosticsExpression()))
+ .kindProvider(new DiagnosticKindProvider())
+ .messageProvider(new DiagnosticMessageProvider())
+ .helpTextProvider(new StringValueProvider(this.interpreter, viewTableWidgetDescription.getHelpExpression()))
+ .isReadOnlyProvider(new ReadOnlyValueProvider(this.interpreter, viewTableWidgetDescription.getIsEnabledExpression()))
+ .build();
+ return Optional.of(tableWidgetDescription);
+ }
+
+ private StringValueProvider getStringValueProvider(String valueExpression) {
+ String safeValueExpression = Optional.ofNullable(valueExpression).orElse("");
+ return new StringValueProvider(this.interpreter, safeValueExpression);
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/main/resources/.gitkeep b/packages/view/backend/sirius-components-view-emf-widget-table/src/main/resources/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/ArchitectureConstants.java b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/ArchitectureConstants.java
new file mode 100644
index 0000000000..48cba4f578
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/ArchitectureConstants.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author frouene
+ */
+public final class ArchitectureConstants {
+
+ public static final String SIRIUS_COMPONENTS_VIEW_EMF_WIDGET_TABLE_ROOT_PACKAGE = "org.eclipse.sirius.components.view.emf.widget.table..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SIRIUS_COMPONENTS_VIEW_EMF_WIDGET_TABLE_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/CodingRulesTests.java b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/CodingRulesTests.java
new file mode 100644
index 0000000000..1b293e82fa
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/CodingRulesTests.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.sirius.components.tests.architecture.AbstractCodingRulesTests;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Coding rules tests.
+ *
+ * @author frouene
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SIRIUS_COMPONENTS_VIEW_EMF_WIDGET_TABLE_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+ @Test
+ @Override
+ public void noClassesShouldUseApacheCommons() {
+ super.noClassesShouldUseApacheCommons();
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/SpringCodingRulesTests.java b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/SpringCodingRulesTests.java
new file mode 100644
index 0000000000..6ececc5900
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/java/org/eclipse/sirius/components/view/emf/widget/table/architecture/SpringCodingRulesTests.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.widget.table.architecture;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.sirius.components.spring.tests.architecture.AbstractSpringCodingRulesTests;
+
+/**
+ * Spring coding rules tests.
+ *
+ * @author frouene
+ */
+public class SpringCodingRulesTests extends AbstractSpringCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SIRIUS_COMPONENTS_VIEW_EMF_WIDGET_TABLE_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+}
diff --git a/packages/view/backend/sirius-components-view-emf-widget-table/src/test/resources/logback-test.xml b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..122c46e103
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf-widget-table/src/test/resources/logback-test.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/form/converters/ReadOnlyValueProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/form/converters/ReadOnlyValueProvider.java
index 6f47d68b1f..f12d881450 100644
--- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/form/converters/ReadOnlyValueProvider.java
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/form/converters/ReadOnlyValueProvider.java
@@ -41,7 +41,7 @@ public ReadOnlyValueProvider(AQLInterpreter interpreter, String expression) {
public Boolean apply(VariableManager variableManager) {
VariableManager childVariableManager = variableManager.createChild();
childVariableManager.put(VARIABLE_MANAGER, variableManager);
- Result result = this.interpreter.evaluateExpression(childVariableManager.getVariables(), expression);
+ Result result = this.interpreter.evaluateExpression(childVariableManager.getVariables(), this.expression);
return result.asBoolean()
.map(value -> !value)
.orElse(Boolean.FALSE);
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/CellDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/CellDescriptionConverter.java
new file mode 100644
index 0000000000..6f58097121
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/CellDescriptionConverter.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.table;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.sirius.components.core.api.IObjectService;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.ICellDescription;
+import org.eclipse.sirius.components.tables.descriptions.IconLabelCellDescription;
+import org.eclipse.sirius.components.tables.descriptions.TextareaCellDescription;
+import org.eclipse.sirius.components.tables.descriptions.TextfieldCellDescription;
+import org.eclipse.sirius.components.view.emf.ViewIconURLsProvider;
+import org.eclipse.sirius.components.view.table.CellLabelWidgetDescription;
+import org.eclipse.sirius.components.view.table.CellTextareaWidgetDescription;
+import org.eclipse.sirius.components.view.table.CellTextfieldWidgetDescription;
+
+/**
+ * Converts a View-based cell description into an equivalent ICellDescription.
+ *
+ * @author frouene
+ */
+public class CellDescriptionConverter {
+
+ private final ITableIdProvider tableIdProvider;
+
+ private final IObjectService objectService;
+
+ public CellDescriptionConverter(ITableIdProvider tableIdProvider, IObjectService objectService) {
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ this.objectService = Objects.requireNonNull(objectService);
+ }
+
+ public List convert(List cellDescriptions, AQLInterpreter interpreter) {
+ return cellDescriptions.stream()
+ .map(cellDescription -> this.convert(cellDescription, interpreter))
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .toList();
+ }
+
+
+ @SuppressWarnings("checkstyle:MultipleStringLiterals")
+ private Optional convert(org.eclipse.sirius.components.view.table.CellDescription viewCellDescription, AQLInterpreter interpreter) {
+ Optional optionalICellDescription = Optional.empty();
+
+ Function targetObjectIdProvider = variableManager -> {
+ Optional optionalSelf = variableManager.get(VariableManager.SELF, Object.class);
+ if (viewCellDescription.getSelectedTargetObjectExpression() != null && !viewCellDescription.getSelectedTargetObjectExpression().isBlank()) {
+ optionalSelf = interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getSelectedTargetObjectExpression()).asObject();
+ }
+ return optionalSelf
+ .map(this.objectService::getId)
+ .orElse("");
+ };
+
+ Function targetObjectKindProvider = variableManager -> {
+ Optional optionalSelf = variableManager.get(VariableManager.SELF, Object.class);
+ if (viewCellDescription.getSelectedTargetObjectExpression() != null && !viewCellDescription.getSelectedTargetObjectExpression().isBlank()) {
+ optionalSelf = interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getSelectedTargetObjectExpression()).asObject();
+ }
+ return optionalSelf
+ .map(this.objectService::getKind)
+ .orElse("");
+ };
+
+ Predicate canCreatePredicate =
+ variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getPreconditionExpression()).asBoolean().orElse(false);
+
+ BiFunction cellValueProvider = (variableManager, columnTargetObject) -> {
+ var child = variableManager.createChild();
+ child.put("columnTargetObject", columnTargetObject);
+ return this.evaluateString(interpreter, child, viewCellDescription.getValueExpression());
+ };
+
+ if (viewCellDescription.getCellWidgetDescription() instanceof CellTextfieldWidgetDescription cellTextfieldWidgetDescription) {
+ optionalICellDescription = Optional.of(TextfieldCellDescription.newTextfieldCellDescription(this.tableIdProvider.getId(viewCellDescription))
+ .targetObjectIdProvider(targetObjectIdProvider)
+ .targetObjectKindProvider(targetObjectKindProvider)
+ .canCreatePredicate(canCreatePredicate)
+ .cellValueProvider(cellValueProvider)
+ .build());
+ } else if (viewCellDescription.getCellWidgetDescription() instanceof CellLabelWidgetDescription cellLabelWidgetDescription) {
+ optionalICellDescription = Optional.of(IconLabelCellDescription.newIconLabelCellDescription(this.tableIdProvider.getId(viewCellDescription))
+ .targetObjectIdProvider(targetObjectIdProvider)
+ .targetObjectKindProvider(targetObjectKindProvider)
+ .canCreatePredicate(canCreatePredicate)
+ .cellValueProvider(cellValueProvider)
+ .cellIconURLsProvider((variableManager, columnTargetObject) -> {
+ var child = variableManager.createChild();
+ child.put("columnTargetObject", columnTargetObject);
+ return new ViewIconURLsProvider(interpreter, cellLabelWidgetDescription.getIconExpression()).apply(child);
+ })
+ .build());
+ } else if (viewCellDescription.getCellWidgetDescription() instanceof CellTextareaWidgetDescription) {
+ optionalICellDescription = Optional.of(TextareaCellDescription.newTextareaCellDescription(this.tableIdProvider.getId(viewCellDescription))
+ .targetObjectIdProvider(targetObjectIdProvider)
+ .targetObjectKindProvider(targetObjectKindProvider)
+ .canCreatePredicate(canCreatePredicate)
+ .cellValueProvider(cellValueProvider)
+ .build());
+ }
+ return optionalICellDescription;
+ }
+
+
+ private String evaluateString(AQLInterpreter interpreter, VariableManager variableManager, String expression) {
+ return interpreter.evaluateExpression(variableManager.getVariables(), expression).asString().orElse("");
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ColumnDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ColumnDescriptionConverter.java
new file mode 100644
index 0000000000..8f8c53ec1d
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ColumnDescriptionConverter.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.table;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.sirius.components.emf.DomainClassPredicate;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.interpreter.Result;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.ColumnDescription;
+import org.eclipse.sirius.components.view.emf.ViewIconURLsProvider;
+
+/**
+ * Converts a View-based column description into an equivalent ColumnDescription.
+ *
+ * @author frouene
+ */
+public class ColumnDescriptionConverter {
+
+ private final ITableIdProvider tableIdProvider;
+
+ private final Function semanticTargetIdProvider;
+
+ private final Function semanticTargetKindProvider;
+
+ public ColumnDescriptionConverter(ITableIdProvider tableIdProvider, Function semanticTargetIdProvider, Function semanticTargetKindProvider) {
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider);
+ this.semanticTargetKindProvider = Objects.requireNonNull(semanticTargetKindProvider);
+ }
+
+ public List convert(List columnDescriptions, AQLInterpreter interpreter) {
+ return columnDescriptions.stream().map(columnDescription -> this.convert(columnDescription, interpreter)).toList();
+ }
+
+ private ColumnDescription convert(org.eclipse.sirius.components.view.table.ColumnDescription columnDescription, AQLInterpreter interpreter) {
+ return ColumnDescription.newColumnDescription(this.tableIdProvider.getId(columnDescription))
+ .targetObjectKindProvider(this.semanticTargetKindProvider)
+ .targetObjectIdProvider(this.semanticTargetIdProvider)
+ .headerLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getHeaderLabelExpression()))
+ .headerIconURLsProvider(new ViewIconURLsProvider(interpreter, columnDescription.getHeaderIconExpression()))
+ .headerIndexLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getHeaderIndexLabelExpression()))
+ .semanticElementsProvider(this.getColumnSemanticElementsProvider(columnDescription, interpreter))
+ .shouldRenderPredicate(this.getShouldRenderPredicate(columnDescription.getPreconditionExpression(), interpreter))
+ .isResizablePredicate(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), columnDescription.getIsResizableExpression()).asBoolean().orElse(false))
+ .initialWidthProvider(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), columnDescription.getInitialWidthExpression()).asInt().orElse(-1))
+ .filterVariantProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getFilterWidgetExpression()))
+ .build();
+ }
+
+ private Function> getColumnSemanticElementsProvider(org.eclipse.sirius.components.view.table.ColumnDescription elementDescription, AQLInterpreter interpreter) {
+ return variableManager -> {
+ Result result = interpreter.evaluateExpression(variableManager.getVariables(), elementDescription.getSemanticCandidatesExpression());
+ List candidates = result.asObjects().orElse(List.of());
+ if (elementDescription.getDomainType() == null || elementDescription.getDomainType().isBlank()) {
+ return candidates;
+ }
+ return candidates.stream()
+ .filter(EObject.class::isInstance)
+ .map(EObject.class::cast)
+ .filter(candidate -> new DomainClassPredicate(Optional.ofNullable(elementDescription.getDomainType()).orElse("")).test(candidate.eClass()))
+ .map(Object.class::cast)
+ .toList();
+ };
+ }
+
+ private Predicate getShouldRenderPredicate(String preconditionExpression, AQLInterpreter interpreter) {
+ return variableManager -> {
+ Result result = interpreter.evaluateExpression(variableManager.getVariables(), preconditionExpression);
+ return result.asBoolean().orElse(true);
+ };
+ }
+
+ private String evaluateString(AQLInterpreter interpreter, VariableManager variableManager, String expression) {
+ return interpreter.evaluateExpression(variableManager.getVariables(), expression).asString().orElse("");
+ }
+}
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
new file mode 100644
index 0000000000..1296b633cf
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/RowDescriptionConverter.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.table;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.LineDescription;
+import org.eclipse.sirius.components.tables.descriptions.PaginatedData;
+import org.eclipse.sirius.components.view.emf.ViewIconURLsProvider;
+
+/**
+ * Converts a View-based line description into an equivalent LineDescription.
+ *
+ * @author frouene
+ */
+public class RowDescriptionConverter {
+
+ private final ITableIdProvider tableIdProvider;
+
+ private final Function semanticTargetIdProvider;
+
+ private final Function semanticTargetKindProvider;
+
+ public RowDescriptionConverter(ITableIdProvider tableIdProvider, Function semanticTargetIdProvider, Function semanticTargetKindProvider) {
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ this.semanticTargetIdProvider = Objects.requireNonNull(semanticTargetIdProvider);
+ this.semanticTargetKindProvider = Objects.requireNonNull(semanticTargetKindProvider);
+ }
+
+ public LineDescription convert(org.eclipse.sirius.components.view.table.RowDescription rowDescription, AQLInterpreter interpreter) {
+ return LineDescription.newLineDescription(this.tableIdProvider.getId(rowDescription))
+ .targetObjectIdProvider(this.semanticTargetIdProvider)
+ .targetObjectKindProvider(this.semanticTargetKindProvider)
+ .semanticElementsProvider(this.getRowSemanticElementsProvider(rowDescription, interpreter))
+ .headerLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, rowDescription.getHeaderLabelExpression()))
+ .headerIconURLsProvider(new ViewIconURLsProvider(interpreter, rowDescription.getHeaderIconExpression()))
+ .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))
+ .build();
+ }
+
+ private Function getRowSemanticElementsProvider(org.eclipse.sirius.components.view.table.RowDescription elementDescription, AQLInterpreter interpreter) {
+ return variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), elementDescription.getSemanticCandidatesExpression())
+ .asObject()
+ .filter(PaginatedData.class::isInstance)
+ .map(PaginatedData.class::cast)
+ .orElseGet(() -> new PaginatedData(List.of(), false, false, 0));
+ }
+
+
+ private String evaluateString(AQLInterpreter interpreter, VariableManager variableManager, String expression) {
+ return interpreter.evaluateExpression(variableManager.getVariables(), expression).asString().orElse("");
+ }
+}
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/TableJavaServiceProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/TableJavaServiceProvider.java
index 237ce3bc4f..63cf7b2e69 100644
--- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/TableJavaServiceProvider.java
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/TableJavaServiceProvider.java
@@ -17,6 +17,7 @@
import org.eclipse.sirius.components.emf.tables.CursorBasedNavigationServices;
import org.eclipse.sirius.components.view.View;
import org.eclipse.sirius.components.view.emf.IJavaServiceProvider;
+import org.eclipse.sirius.components.view.form.FormDescription;
import org.eclipse.sirius.components.view.table.TableDescription;
import org.springframework.stereotype.Service;
@@ -33,7 +34,10 @@ public List> getServiceClasses(View view) {
boolean isTableRelatedView = view.getDescriptions().stream()
.anyMatch(TableDescription.class::isInstance);
- if (isTableRelatedView) {
+ boolean isTableWidgetRelatedView = view.getDescriptions().stream()
+ .anyMatch(FormDescription.class::isInstance);
+
+ if (isTableRelatedView || isTableWidgetRelatedView) {
return List.of(CursorBasedNavigationServices.class);
}
return List.of();
diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableDescriptionConverter.java
deleted file mode 100644
index 7d46b5c406..0000000000
--- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableDescriptionConverter.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*******************************************************************************
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Obeo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.sirius.components.view.emf.table;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.sirius.components.core.api.IObjectService;
-import org.eclipse.sirius.components.emf.DomainClassPredicate;
-import org.eclipse.sirius.components.interpreter.AQLInterpreter;
-import org.eclipse.sirius.components.interpreter.Result;
-import org.eclipse.sirius.components.representations.IRepresentationDescription;
-import org.eclipse.sirius.components.representations.VariableManager;
-import org.eclipse.sirius.components.tables.descriptions.ColumnDescription;
-import org.eclipse.sirius.components.tables.descriptions.ICellDescription;
-import org.eclipse.sirius.components.tables.descriptions.IconLabelCellDescription;
-import org.eclipse.sirius.components.tables.descriptions.LineDescription;
-import org.eclipse.sirius.components.tables.descriptions.PaginatedData;
-import org.eclipse.sirius.components.tables.descriptions.TableDescription;
-import org.eclipse.sirius.components.tables.descriptions.TextareaCellDescription;
-import org.eclipse.sirius.components.tables.descriptions.TextfieldCellDescription;
-import org.eclipse.sirius.components.view.RepresentationDescription;
-import org.eclipse.sirius.components.view.emf.IRepresentationDescriptionConverter;
-import org.eclipse.sirius.components.view.emf.ViewIconURLsProvider;
-import org.eclipse.sirius.components.view.table.CellLabelWidgetDescription;
-import org.eclipse.sirius.components.view.table.CellTextareaWidgetDescription;
-import org.eclipse.sirius.components.view.table.CellTextfieldWidgetDescription;
-import org.springframework.stereotype.Service;
-
-/**
- * Converts a View-based table description into an equivalent TableDescription.
- *
- * @author frouene
- */
-@Service
-public class ViewTableDescriptionConverter implements IRepresentationDescriptionConverter {
-
- private static final String DEFAULT_TABLE_LABEL = "Table";
-
- private final ITableIdProvider tableIdProvider;
-
- private final IObjectService objectService;
-
- private final Function semanticTargetIdProvider;
-
- private final Function semanticTargetKindProvider;
-
- public ViewTableDescriptionConverter(ITableIdProvider tableIdProvider, IObjectService objectService) {
- this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
- this.objectService = Objects.requireNonNull(objectService);
-
- this.semanticTargetIdProvider = variableManager -> {
- Optional optionalSelf = this.self(variableManager);
- return optionalSelf
- .map(this.objectService::getId)
- .orElseGet(() -> optionalSelf.map(Object::toString).orElse(""));
- };
- this.semanticTargetKindProvider = variableManager -> this.self(variableManager).map(this.objectService::getKind).orElse("");
- }
-
- @Override
- public boolean canConvert(RepresentationDescription representationDescription) {
- return representationDescription instanceof org.eclipse.sirius.components.view.table.TableDescription;
- }
-
- @Override
- public IRepresentationDescription convert(RepresentationDescription representationDescription, List allRepresentationDescriptions, AQLInterpreter interpreter) {
- org.eclipse.sirius.components.view.table.TableDescription viewTableDescription = (org.eclipse.sirius.components.view.table.TableDescription) representationDescription;
-
- Predicate isStripeRowPredicate = variableManager -> {
- if (viewTableDescription.getUseStripedRowsExpression() != null) {
- return interpreter.evaluateExpression(variableManager.getVariables(), viewTableDescription.getUseStripedRowsExpression()).asBoolean().orElse(false);
- }
- return false;
- };
- return TableDescription.newTableDescription(this.tableIdProvider.getId(viewTableDescription))
- .label(Optional.ofNullable(viewTableDescription.getName()).orElse(DEFAULT_TABLE_LABEL))
- .labelProvider(variableManager -> this.computeTableLabel(viewTableDescription, variableManager, interpreter))
- .canCreatePredicate(variableManager -> this.canCreate(viewTableDescription.getDomainType(), viewTableDescription.getPreconditionExpression(), variableManager, interpreter))
- .targetObjectIdProvider(this.semanticTargetIdProvider)
- .targetObjectKindProvider(this.semanticTargetKindProvider)
- .columnDescriptions(this.getColumnDescriptions(viewTableDescription, interpreter))
- .lineDescription(this.getRowDescription(viewTableDescription, interpreter))
- .cellDescriptions(this.getCellDescriptions(viewTableDescription, interpreter))
- .isStripeRowPredicate(isStripeRowPredicate)
- .iconURLsProvider(new ViewIconURLsProvider(interpreter, viewTableDescription.getIconExpression()))
- .build();
- }
-
-
- private List getColumnDescriptions(org.eclipse.sirius.components.view.table.TableDescription viewTableDescription, AQLInterpreter interpreter) {
- return viewTableDescription.getColumnDescriptions().stream().map(columnDescription -> this.convertColumnDescription(columnDescription, interpreter)).toList();
- }
-
- private ColumnDescription convertColumnDescription(org.eclipse.sirius.components.view.table.ColumnDescription columnDescription, AQLInterpreter interpreter) {
- return ColumnDescription.newColumnDescription(this.tableIdProvider.getId(columnDescription))
- .targetObjectKindProvider(this.semanticTargetKindProvider)
- .targetObjectIdProvider(this.semanticTargetIdProvider)
- .headerLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getHeaderLabelExpression()))
- .headerIconURLsProvider(new ViewIconURLsProvider(interpreter, columnDescription.getHeaderIconExpression()))
- .headerIndexLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getHeaderIndexLabelExpression()))
- .semanticElementsProvider(this.getColumnSemanticElementsProvider(columnDescription, interpreter))
- .shouldRenderPredicate(this.getShouldRenderPredicate(columnDescription.getPreconditionExpression(), interpreter))
- .isResizablePredicate(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), columnDescription.getIsResizableExpression()).asBoolean().orElse(false))
- .initialWidthProvider(variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), columnDescription.getInitialWidthExpression()).asInt().orElse(-1))
- .filterVariantProvider(variableManager -> this.evaluateString(interpreter, variableManager, columnDescription.getFilterWidgetExpression()))
- .build();
- }
-
- private LineDescription getRowDescription(org.eclipse.sirius.components.view.table.TableDescription viewTableDescription, AQLInterpreter interpreter) {
- return this.convertRowDescription(viewTableDescription.getRowDescription(), interpreter);
- }
-
- private LineDescription convertRowDescription(org.eclipse.sirius.components.view.table.RowDescription rowDescription, AQLInterpreter interpreter) {
- return LineDescription.newLineDescription(this.tableIdProvider.getId(rowDescription))
- .targetObjectIdProvider(this.semanticTargetIdProvider)
- .targetObjectKindProvider(this.semanticTargetKindProvider)
- .semanticElementsProvider(this.getRowSemanticElementsProvider(rowDescription, interpreter))
- .headerLabelProvider(variableManager -> this.evaluateString(interpreter, variableManager, rowDescription.getHeaderLabelExpression()))
- .headerIconURLsProvider(new ViewIconURLsProvider(interpreter, rowDescription.getHeaderIconExpression()))
- .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))
- .build();
- }
-
- private List getCellDescriptions(org.eclipse.sirius.components.view.table.TableDescription viewTableDescription, AQLInterpreter interpreter) {
- return viewTableDescription.getCellDescriptions().stream()
- .map(cellDescription -> this.convertCellDescription(cellDescription, interpreter))
- .filter(Optional::isPresent)
- .map(Optional::get)
- .toList();
- }
-
- @SuppressWarnings("checkstyle:MultipleStringLiterals")
- private Optional convertCellDescription(org.eclipse.sirius.components.view.table.CellDescription viewCellDescription, AQLInterpreter interpreter) {
- Optional optionalICellDescription = Optional.empty();
-
- Function targetObjectIdProvider = variableManager -> {
- Optional optionalSelf = this.self(variableManager);
- if (viewCellDescription.getSelectedTargetObjectExpression() != null && !viewCellDescription.getSelectedTargetObjectExpression().isBlank()) {
- optionalSelf = interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getSelectedTargetObjectExpression()).asObject();
- }
- return optionalSelf
- .map(this.objectService::getId)
- .orElse("");
- };
-
- Function targetObjectKindProvider = variableManager -> {
- Optional optionalSelf = this.self(variableManager);
- if (viewCellDescription.getSelectedTargetObjectExpression() != null && !viewCellDescription.getSelectedTargetObjectExpression().isBlank()) {
- optionalSelf = interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getSelectedTargetObjectExpression()).asObject();
- }
- return optionalSelf
- .map(this.objectService::getKind)
- .orElse("");
- };
-
- Predicate canCreatePredicate =
- variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), viewCellDescription.getPreconditionExpression()).asBoolean().orElse(false);
-
- BiFunction cellValueProvider = (variableManager, columnTargetObject) -> {
- var child = variableManager.createChild();
- child.put("columnTargetObject", columnTargetObject);
- return this.evaluateString(interpreter, child, viewCellDescription.getValueExpression());
- };
-
- if (viewCellDescription.getCellWidgetDescription() instanceof CellTextfieldWidgetDescription cellTextfieldWidgetDescription) {
- optionalICellDescription = Optional.of(TextfieldCellDescription.newTextfieldCellDescription(this.tableIdProvider.getId(viewCellDescription))
- .targetObjectIdProvider(targetObjectIdProvider)
- .targetObjectKindProvider(targetObjectKindProvider)
- .canCreatePredicate(canCreatePredicate)
- .cellValueProvider(cellValueProvider)
- .build());
- } else if (viewCellDescription.getCellWidgetDescription() instanceof CellLabelWidgetDescription cellLabelWidgetDescription) {
- optionalICellDescription = Optional.of(IconLabelCellDescription.newIconLabelCellDescription(this.tableIdProvider.getId(viewCellDescription))
- .targetObjectIdProvider(targetObjectIdProvider)
- .targetObjectKindProvider(targetObjectKindProvider)
- .canCreatePredicate(canCreatePredicate)
- .cellValueProvider(cellValueProvider)
- .cellIconURLsProvider((variableManager, columnTargetObject) -> {
- var child = variableManager.createChild();
- child.put("columnTargetObject", columnTargetObject);
- return new ViewIconURLsProvider(interpreter, cellLabelWidgetDescription.getIconExpression()).apply(child);
- })
- .build());
- } else if (viewCellDescription.getCellWidgetDescription() instanceof CellTextareaWidgetDescription) {
- optionalICellDescription = Optional.of(TextareaCellDescription.newTextareaCellDescription(this.tableIdProvider.getId(viewCellDescription))
- .targetObjectIdProvider(targetObjectIdProvider)
- .targetObjectKindProvider(targetObjectKindProvider)
- .canCreatePredicate(canCreatePredicate)
- .cellValueProvider(cellValueProvider)
- .build());
- }
- return optionalICellDescription;
- }
-
- private String computeTableLabel(org.eclipse.sirius.components.view.table.TableDescription viewTableDescription, VariableManager variableManager, AQLInterpreter interpreter) {
- String title = variableManager.get(TableDescription.LABEL, String.class)
- .orElseGet(() -> this.evaluateString(interpreter, variableManager, viewTableDescription.getTitleExpression()));
- if (title.isBlank()) {
- return DEFAULT_TABLE_LABEL;
- } else {
- return title;
- }
- }
-
- private boolean canCreate(String domainType, String preconditionExpression, VariableManager variableManager, AQLInterpreter interpreter) {
- boolean result = false;
- Optional optionalEClass = variableManager.get(VariableManager.SELF, EObject.class).map(EObject::eClass).filter(new DomainClassPredicate(domainType));
- if (optionalEClass.isPresent()) {
- if (preconditionExpression != null && !preconditionExpression.isBlank()) {
- result = interpreter.evaluateExpression(variableManager.getVariables(), preconditionExpression).asBoolean().orElse(false);
- } else {
- result = true;
- }
- }
- return result;
- }
-
- private Function> getColumnSemanticElementsProvider(org.eclipse.sirius.components.view.table.ColumnDescription elementDescription, AQLInterpreter interpreter) {
- return variableManager -> {
- Result result = interpreter.evaluateExpression(variableManager.getVariables(), elementDescription.getSemanticCandidatesExpression());
- List candidates = result.asObjects().orElse(List.of());
- if (elementDescription.getDomainType() == null || elementDescription.getDomainType().isBlank()) {
- return candidates;
- }
- return candidates.stream()
- .filter(EObject.class::isInstance)
- .map(EObject.class::cast)
- .filter(candidate -> new DomainClassPredicate(Optional.ofNullable(elementDescription.getDomainType()).orElse("")).test(candidate.eClass()))
- .map(Object.class::cast)
- .toList();
- };
- }
-
- private Function getRowSemanticElementsProvider(org.eclipse.sirius.components.view.table.RowDescription elementDescription, AQLInterpreter interpreter) {
- return variableManager -> interpreter.evaluateExpression(variableManager.getVariables(), elementDescription.getSemanticCandidatesExpression())
- .asObject()
- .filter(PaginatedData.class::isInstance)
- .map(PaginatedData.class::cast)
- .orElseGet(() -> new PaginatedData(List.of(), false, false, 0));
- }
-
- private Predicate getShouldRenderPredicate(String preconditionExpression, AQLInterpreter interpreter) {
- return variableManager -> {
- Result result = interpreter.evaluateExpression(variableManager.getVariables(), preconditionExpression);
- return result.asBoolean().orElse(true);
- };
- }
-
-
- private String evaluateString(AQLInterpreter interpreter, VariableManager variableManager, String expression) {
- return interpreter.evaluateExpression(variableManager.getVariables(), expression).asString().orElse("");
- }
-
- private Optional self(VariableManager variableManager) {
- return variableManager.get(VariableManager.SELF, Object.class);
- }
-
-}
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
new file mode 100644
index 0000000000..5bae2ee6fa
--- /dev/null
+++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/table/ViewTableRepresentationDescriptionConverter.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.emf.table;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.sirius.components.core.api.IObjectService;
+import org.eclipse.sirius.components.emf.DomainClassPredicate;
+import org.eclipse.sirius.components.interpreter.AQLInterpreter;
+import org.eclipse.sirius.components.representations.IRepresentationDescription;
+import org.eclipse.sirius.components.representations.VariableManager;
+import org.eclipse.sirius.components.tables.descriptions.TableDescription;
+import org.eclipse.sirius.components.view.RepresentationDescription;
+import org.eclipse.sirius.components.view.emf.IRepresentationDescriptionConverter;
+import org.eclipse.sirius.components.view.emf.ViewIconURLsProvider;
+import org.springframework.stereotype.Service;
+
+/**
+ * Converts a View-based table description into an equivalent TableDescription.
+ *
+ * @author frouene
+ */
+@Service
+public class ViewTableRepresentationDescriptionConverter implements IRepresentationDescriptionConverter {
+
+ private static final String DEFAULT_TABLE_LABEL = "Table";
+
+ private final ITableIdProvider tableIdProvider;
+
+ private final IObjectService objectService;
+
+ private final Function semanticTargetIdProvider;
+
+ private final Function semanticTargetKindProvider;
+
+ public ViewTableRepresentationDescriptionConverter(ITableIdProvider tableIdProvider, IObjectService objectService) {
+ this.tableIdProvider = Objects.requireNonNull(tableIdProvider);
+ this.objectService = Objects.requireNonNull(objectService);
+
+ this.semanticTargetIdProvider = variableManager -> {
+ Optional optionalSelf = this.self(variableManager);
+ return optionalSelf
+ .map(this.objectService::getId)
+ .orElseGet(() -> optionalSelf.map(Object::toString).orElse(""));
+ };
+ this.semanticTargetKindProvider = variableManager -> this.self(variableManager).map(this.objectService::getKind).orElse("");
+ }
+
+ @Override
+ public boolean canConvert(RepresentationDescription representationDescription) {
+ return representationDescription instanceof org.eclipse.sirius.components.view.table.TableDescription;
+ }
+
+ @Override
+ public IRepresentationDescription convert(RepresentationDescription representationDescription, List allRepresentationDescriptions, AQLInterpreter interpreter) {
+ org.eclipse.sirius.components.view.table.TableDescription viewTableDescription = (org.eclipse.sirius.components.view.table.TableDescription) representationDescription;
+
+ Predicate isStripeRowPredicate = variableManager -> {
+ if (viewTableDescription.getUseStripedRowsExpression() != null) {
+ return interpreter.evaluateExpression(variableManager.getVariables(), viewTableDescription.getUseStripedRowsExpression()).asBoolean().orElse(false);
+ }
+ return false;
+ };
+ return TableDescription.newTableDescription(this.tableIdProvider.getId(viewTableDescription))
+ .label(Optional.ofNullable(viewTableDescription.getName()).orElse(DEFAULT_TABLE_LABEL))
+ .labelProvider(variableManager -> this.computeTableLabel(viewTableDescription, variableManager, interpreter))
+ .canCreatePredicate(variableManager -> this.canCreate(viewTableDescription.getDomainType(), viewTableDescription.getPreconditionExpression(), variableManager, interpreter))
+ .targetObjectIdProvider(this.semanticTargetIdProvider)
+ .targetObjectKindProvider(this.semanticTargetKindProvider)
+ .columnDescriptions(new ColumnDescriptionConverter(this.tableIdProvider, this.semanticTargetIdProvider, this.semanticTargetKindProvider).convert(viewTableDescription.getColumnDescriptions(), interpreter))
+ .lineDescription(new RowDescriptionConverter(this.tableIdProvider, this.semanticTargetIdProvider, this.semanticTargetKindProvider).convert(viewTableDescription.getRowDescription(), interpreter))
+ .cellDescriptions(new CellDescriptionConverter(this.tableIdProvider, this.objectService).convert(viewTableDescription.getCellDescriptions(), interpreter))
+ .isStripeRowPredicate(isStripeRowPredicate)
+ .iconURLsProvider(new ViewIconURLsProvider(interpreter, viewTableDescription.getIconExpression()))
+ .build();
+ }
+
+ private String computeTableLabel(org.eclipse.sirius.components.view.table.TableDescription viewTableDescription, VariableManager variableManager, AQLInterpreter interpreter) {
+ String title = variableManager.get(TableDescription.LABEL, String.class)
+ .orElseGet(() -> this.evaluateString(interpreter, variableManager, viewTableDescription.getTitleExpression()));
+ if (title.isBlank()) {
+ return DEFAULT_TABLE_LABEL;
+ } else {
+ return title;
+ }
+ }
+
+ private boolean canCreate(String domainType, String preconditionExpression, VariableManager variableManager, AQLInterpreter interpreter) {
+ boolean result = false;
+ Optional optionalEClass = variableManager.get(VariableManager.SELF, EObject.class).map(EObject::eClass).filter(new DomainClassPredicate(domainType));
+ if (optionalEClass.isPresent()) {
+ if (preconditionExpression != null && !preconditionExpression.isBlank()) {
+ result = interpreter.evaluateExpression(variableManager.getVariables(), preconditionExpression).asBoolean().orElse(false);
+ } else {
+ result = true;
+ }
+ }
+ return result;
+ }
+
+
+ private String evaluateString(AQLInterpreter interpreter, VariableManager variableManager, String expression) {
+ return interpreter.evaluateExpression(variableManager.getVariables(), expression).asString().orElse("");
+ }
+
+ private Optional self(VariableManager variableManager) {
+ return variableManager.get(VariableManager.SELF, Object.class);
+ }
+
+}
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/.classpath b/packages/view/backend/sirius-components-widget-table-view-edit/.classpath
new file mode 100644
index 0000000000..a3d07ff9b5
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/.classpath
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/.project b/packages/view/backend/sirius-components-widget-table-view-edit/.project
new file mode 100644
index 0000000000..3c8badda37
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/.project
@@ -0,0 +1,28 @@
+
+
+ sirius-components-widget-table-view-edit
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.springframework.ide.eclipse.boot.validation.springbootbuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.core.resources.prefs b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..abdea9ac03
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/=UTF-8
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.apt.core.prefs b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000..d4313d4b25
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.core.prefs b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..410f726333
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/pom.xml b/packages/view/backend/sirius-components-widget-table-view-edit/pom.xml
new file mode 100644
index 0000000000..5b22873b01
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/pom.xml
@@ -0,0 +1,108 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view-edit
+ 2025.1.6
+ sirius-components-widget-table-view-edit
+ View support for the table custom widget :: edit support
+
+
+ 17
+
+
+
+
+ Central
+ https://repo.maven.apache.org/maven2
+
+
+ github-sirius-emfjson
+ https://maven.pkg.github.com/eclipse-sirius/sirius-emf-json
+
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ org.eclipse.emf
+ org.eclipse.emf.common
+ 2.21.0
+
+
+ org.eclipse.emf
+ org.eclipse.emf.ecore
+ 2.23.0
+
+
+ org.eclipse.emf
+ org.eclipse.emf.edit
+ 2.16.0
+
+
+ org.eclipse.sirius
+ sirius-components-view-form
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-view-form-edit
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-view-table-edit
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetDescriptionItemProvider.java b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetDescriptionItemProvider.java
new file mode 100644
index 0000000000..e369223d78
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetDescriptionItemProvider.java
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.sirius.components.view.form.provider.WidgetDescriptionItemProvider;
+import org.eclipse.sirius.components.view.table.TableFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription}
+ * object.
+ *
+ * @generated
+ */
+public class TableWidgetDescriptionItemProvider extends WidgetDescriptionItemProvider {
+
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ * @generated
+ */
+ public TableWidgetDescriptionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (this.itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ this.addUseStripedRowsExpressionPropertyDescriptor(object);
+ this.addIsEnabledExpressionPropertyDescriptor(object);
+ }
+ return this.itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Use Striped Rows Expression feature.
+ *
+ *
+ * @generated
+ */
+ protected void addUseStripedRowsExpressionPropertyDescriptor(Object object) {
+ this.itemPropertyDescriptors
+ .add(this.createItemPropertyDescriptor(((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(),
+ this.getResourceLocator(), this.getString("_UI_TableWidgetDescription_useStripedRowsExpression_feature"),
+ this.getString("_UI_PropertyDescriptor_description",
+ "_UI_TableWidgetDescription_useStripedRowsExpression_feature",
+ "_UI_TableWidgetDescription_type"),
+ TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION, true, false,
+ false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Is Enabled Expression feature.
+ *
+ * @generated
+ */
+ protected void addIsEnabledExpressionPropertyDescriptor(Object object) {
+ this.itemPropertyDescriptors.add(this.createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) this.adapterFactory).getRootAdapterFactory(), this.getResourceLocator(),
+ this.getString("_UI_TableWidgetDescription_IsEnabledExpression_feature"),
+ this.getString("_UI_PropertyDescriptor_description",
+ "_UI_TableWidgetDescription_IsEnabledExpression_feature", "_UI_TableWidgetDescription_type"),
+ TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_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},
+ * {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (this.childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ this.childrenFeatures.add(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS);
+ this.childrenFeatures.add(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION);
+ this.childrenFeatures.add(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS);
+ }
+ return this.childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to
+ // use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns TableWidgetDescription.gif.
+ *
+ * @generated NOT
+ */
+ @Override
+ public Object getImage(Object object) {
+ return this.overlayImage(object, this.getResourceLocator().getImage("full/obj16/TableWidgetDescription.svg"));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((TableWidgetDescription) object).getName();
+ return label == null || label.length() == 0 ? this.getString("_UI_TableWidgetDescription_type")
+ : this.getString("_UI_TableWidgetDescription_type") + " " + label;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update
+ * any cached children and by creating a viewer notification, which it passes to
+ * {@link #fireNotifyChanged}.
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ this.updateChildren(notification);
+
+ switch (notification.getFeatureID(TableWidgetDescription.class)) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION:
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION:
+ this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ this.fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing
+ * the children that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors
+ .add(this.createChildParameter(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS,
+ TableFactory.eINSTANCE.createColumnDescription()));
+
+ newChildDescriptors
+ .add(this.createChildParameter(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION,
+ TableFactory.eINSTANCE.createRowDescription()));
+
+ newChildDescriptors
+ .add(this.createChildParameter(TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS,
+ TableFactory.eINSTANCE.createCellDescription()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return TableWidgetEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetEditPlugin.java b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetEditPlugin.java
new file mode 100644
index 0000000000..c90446c237
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetEditPlugin.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.provider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.sirius.components.view.form.provider.FormEditPlugin;
+import org.eclipse.sirius.components.view.provider.ViewEditPlugin;
+import org.eclipse.sirius.components.view.table.provider.TableEditPlugin;
+
+/**
+ * This is the central singleton for the TableWidget edit plugin.
+ *
+ * @generated
+ */
+public final class TableWidgetEditPlugin extends EMFPlugin {
+
+ /**
+ * Keep track of the singleton.
+ *
+ * @generated
+ */
+ public static final TableWidgetEditPlugin INSTANCE = new TableWidgetEditPlugin();
+
+ /**
+ * Keep track of the singleton.
+ *
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ *
+ * @generated
+ */
+ public TableWidgetEditPlugin() {
+ super(new ResourceLocator[] {FormEditPlugin.INSTANCE, ViewEditPlugin.INSTANCE, TableEditPlugin.INSTANCE,});
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ @Override
+ protected Object doGetImage(String key) throws IOException {
+ URL url = new URL(this.getBaseURL() + "icons/" + key + extensionFor(key));
+ InputStream inputStream = url.openStream();
+ inputStream.close();
+ return url;
+ }
+
+ /**
+ * Computes the file extension to be used with the key to specify an image resource.
+ *
+ * @param key
+ * the key for the imagine.
+ * @return the file extension to be used with the key to specify an image resource.
+ */
+ protected static String extensionFor(String key) {
+ String result = ".gif";
+ int index = key.lastIndexOf('.');
+ if (index != -1) {
+ String extension = key.substring(index + 1);
+ if ("png".equalsIgnoreCase(extension)
+ || "gif".equalsIgnoreCase(extension)
+ || "bmp".equalsIgnoreCase(extension)
+ || "ico".equalsIgnoreCase(extension)
+ || "jpg".equalsIgnoreCase(extension)
+ || "jpeg".equalsIgnoreCase(extension)
+ || "tif".equalsIgnoreCase(extension)
+ || "tiff".equalsIgnoreCase(extension)
+ || "svg".equalsIgnoreCase(extension)) {
+ result = "";
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The actual implementation of the Eclipse Plugin .
+ *
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+
+ /**
+ * Creates an instance.
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetItemProviderAdapterFactory.java b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetItemProviderAdapterFactory.java
new file mode 100644
index 0000000000..a824c699eb
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/provider/TableWidgetItemProviderAdapterFactory.java
@@ -0,0 +1,360 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.sirius.components.view.form.FlexboxContainerDescription;
+import org.eclipse.sirius.components.view.form.FormElementFor;
+import org.eclipse.sirius.components.view.form.FormElementIf;
+import org.eclipse.sirius.components.view.form.FormPackage;
+import org.eclipse.sirius.components.view.form.GroupDescription;
+import org.eclipse.sirius.components.view.form.util.FormSwitch;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.util.TableWidgetAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support
+ * Viewers. The adapters generated by this factory convert EMF adapter
+ * notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}. The
+ * adapters also support Eclipse property sheets. Note that most of the adapters
+ * are shared among multiple instances.
+ *
+ * @generated
+ */
+public class TableWidgetItemProviderAdapterFactory extends TableWidgetAdapterFactory
+ implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+
+ /**
+ * This keeps track of the root adapter factory that delegates to this adapter
+ * factory.
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory parentAdapterFactory;
+
+ /**
+ * This is used to implement
+ * {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+ *
+ * @generated
+ */
+ protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+ /**
+ * This keeps track of all the supported types checked by
+ * {@link #isFactoryForType isFactoryForType}.
+ *
+ * @generated
+ */
+ protected Collection supportedTypes = new ArrayList<>();
+ /**
+ * This keeps track of the one adapter used for all
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription}
+ * instances.
+ *
+ * @generated
+ */
+ protected TableWidgetDescriptionItemProvider tableWidgetDescriptionItemProvider;
+
+ /**
+ * This constructs an instance.
+ *
+ * @generated
+ */
+ public TableWidgetItemProviderAdapterFactory() {
+ this.supportedTypes.add(IEditingDomainItemProvider.class);
+ this.supportedTypes.add(IStructuredItemContentProvider.class);
+ this.supportedTypes.add(ITreeItemContentProvider.class);
+ this.supportedTypes.add(IItemLabelProvider.class);
+ this.supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This creates an adapter for a
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createTableWidgetDescriptionAdapter() {
+ if (this.tableWidgetDescriptionItemProvider == null) {
+ this.tableWidgetDescriptionItemProvider = new TableWidgetDescriptionItemProvider(this);
+ }
+
+ return this.tableWidgetDescriptionItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ *
+ * @generated
+ */
+ @Override
+ public ComposeableAdapterFactory getRootAdapterFactory() {
+ return this.parentAdapterFactory == null ? this : this.parentAdapterFactory.getRootAdapterFactory();
+ }
+
+ /**
+ * This sets the composed adapter factory that contains this factory.
+ *
+ * @generated
+ */
+ @Override
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+ this.parentAdapterFactory = parentAdapterFactory;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return this.supportedTypes.contains(type) || super.isFactoryForType(type);
+ }
+
+ /**
+ * This implementation substitutes the factory itself as the key for the
+ * adapter.
+ *
+ * @generated
+ */
+ @Override
+ public Adapter adapt(Notifier notifier, Object type) {
+ return super.adapt(notifier, this);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object adapt(Object object, Object type) {
+ if (this.isFactoryForType(type)) {
+ Object adapter = super.adapt(object, type);
+ if (!(type instanceof Class>) || (((Class>) type).isInstance(adapter))) {
+ return adapter;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This adds a listener.
+ *
+ * @generated
+ */
+ @Override
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ this.changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ *
+ * @generated
+ */
+ @Override
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ this.changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to
+ * {@link #parentAdapterFactory}.
+ *
+ * @generated
+ */
+ @Override
+ public void fireNotifyChanged(Notification notification) {
+ this.changeNotifier.fireNotifyChanged(notification);
+
+ if (this.parentAdapterFactory != null) {
+ this.parentAdapterFactory.fireNotifyChanged(notification);
+ }
+ }
+
+ /**
+ * This disposes all of the item providers created by this factory.
+ *
+ * @generated
+ */
+ @Override
+ public void dispose() {
+ if (this.tableWidgetDescriptionItemProvider != null)
+ this.tableWidgetDescriptionItemProvider.dispose();
+ }
+
+ /**
+ * A child creation extender for the {@link FormPackage}.
+ *
+ * @generated
+ */
+ public static class FormChildCreationExtender implements IChildCreationExtender {
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection getNewChildDescriptors(Object object, EditingDomain editingDomain) {
+ ArrayList result = new ArrayList<>();
+ new CreationSwitch(result, editingDomain).doSwitch((EObject) object);
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return TableWidgetEditPlugin.INSTANCE;
+ }
+
+ /**
+ * The switch for creating child descriptors specific to each extended class.
+ *
+ *
+ * @generated
+ */
+ protected static class CreationSwitch extends FormSwitch {
+
+ /**
+ * The child descriptors being populated.
+ *
+ * @generated
+ */
+ protected List newChildDescriptors;
+
+ /**
+ * The domain in which to create the children.
+ *
+ * @generated
+ */
+ protected EditingDomain editingDomain;
+
+ /**
+ * Creates the a switch for populating child descriptors in the given domain.
+ *
+ *
+ * @generated
+ */
+ CreationSwitch(List newChildDescriptors, EditingDomain editingDomain) {
+ this.newChildDescriptors = newChildDescriptors;
+ this.editingDomain = editingDomain;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object caseGroupDescription(GroupDescription object) {
+ this.newChildDescriptors.add(this.createChildParameter(FormPackage.Literals.GROUP_DESCRIPTION__CHILDREN,
+ TableWidgetFactory.eINSTANCE.createTableWidgetDescription()));
+
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object caseFlexboxContainerDescription(FlexboxContainerDescription object) {
+ this.newChildDescriptors
+ .add(this.createChildParameter(FormPackage.Literals.FLEXBOX_CONTAINER_DESCRIPTION__CHILDREN,
+ TableWidgetFactory.eINSTANCE.createTableWidgetDescription()));
+
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object caseFormElementFor(FormElementFor object) {
+ this.newChildDescriptors.add(this.createChildParameter(FormPackage.Literals.FORM_ELEMENT_FOR__CHILDREN,
+ TableWidgetFactory.eINSTANCE.createTableWidgetDescription()));
+
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object caseFormElementIf(FormElementIf object) {
+ this.newChildDescriptors.add(this.createChildParameter(FormPackage.Literals.FORM_ELEMENT_IF__CHILDREN,
+ TableWidgetFactory.eINSTANCE.createTableWidgetDescription()));
+
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected CommandParameter createChildParameter(Object feature, Object child) {
+ return new CommandParameter(null, feature, child);
+ }
+
+ }
+ }
+
+}
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/icons/full/obj16/TableWidgetDescription.svg b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/icons/full/obj16/TableWidgetDescription.svg
new file mode 100644
index 0000000000..2509139107
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/icons/full/obj16/TableWidgetDescription.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/plugin.properties b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/plugin.properties
new file mode 100644
index 0000000000..c1d94a9053
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view-edit/src/main/resources/plugin.properties
@@ -0,0 +1,37 @@
+################################################################################
+# Copyright (c) 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
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Obeo - initial API and implementation
+#################################################################################
+
+pluginName=TableWidget Edit Support
+providerName=www.example.org
+
+_UI_CreateChild_text={0}
+_UI_CreateChild_text2={1} {0}
+_UI_CreateChild_text3={1}
+_UI_CreateChild_tooltip=Create New {0} Under {1} Feature
+_UI_CreateChild_description=Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description=Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description=The {0} of the {1}
+
+_UI_TableWidgetDescription_type=Table Widget Description
+_UI_Unknown_type=Object
+
+_UI_Unknown_datatype=Value
+
+_UI_TableWidgetDescription_columnDescriptions_feature=Column Descriptions
+_UI_TableWidgetDescription_rowDescription_feature=Row Description
+_UI_TableWidgetDescription_cellDescriptions_feature=Cell Descriptions
+_UI_TableWidgetDescription_useStripedRowsExpression_feature=Use Striped Rows Expression
+_UI_TableWidgetDescription_IsEnabledExpression_feature=Is Enabled Expression
+_UI_Unknown_feature=Unspecified
+
diff --git a/packages/view/backend/sirius-components-widget-table-view/.classpath b/packages/view/backend/sirius-components-widget-table-view/.classpath
new file mode 100644
index 0000000000..a3d07ff9b5
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.classpath
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view/.project b/packages/view/backend/sirius-components-widget-table-view/.project
new file mode 100644
index 0000000000..e501383300
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.project
@@ -0,0 +1,28 @@
+
+
+ sirius-components-widget-table-view
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.springframework.ide.eclipse.boot.validation.springbootbuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.resources.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..839d647eef
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding/=UTF-8
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.runtime.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000000..a287fefdba
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Mon Sep 24 15:04:19 CEST 2007
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.apt.core.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000..d4313d4b25
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.core.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..7fe480caf6
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,505 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=200
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.ui.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..0df830c546
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,210 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=true
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=true
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+cleanup_profile=_Sirius
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Sirius
+formatter_settings_version=21
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com;fr;java;javax;org;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=/*******************************************************************************\n * Copyright (c) ${year} Obeo.\n * This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v2.0\n * which accompanies this distribution, and is available at\n * https\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier\: EPL-2.0\n *\n * Contributors\:\n * Obeo - initial API and implementation\n *******************************************************************************/ /**\n * @author ${user}\n */ /**\n * \n */ /**\n * ${tags}\n */ /**\n * ${tags}\n * ${see_to_target}\n */ ${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration} \n \n \n \n ${exception_var}.printStackTrace(); ${body_statement} ${body_statement} return ${field}; ${field} \= ${param}; /**\n * @author ${user}\n *\n * ${tags}\n */ \n
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=true
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=false
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.overridden_assignment_move_decl=false
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=false
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_method_parameters=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=false
+sp_cleanup.stringconcat_to_textblock=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.m2e.core.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000..f897a7f1cb
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/packages/view/backend/sirius-components-widget-table-view/.settings/org.springframework.ide.eclipse.prefs b/packages/view/backend/sirius-components-widget-table-view/.settings/org.springframework.ide.eclipse.prefs
new file mode 100644
index 0000000000..a12794d68f
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/.settings/org.springframework.ide.eclipse.prefs
@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1
diff --git a/packages/view/backend/sirius-components-widget-table-view/pom.xml b/packages/view/backend/sirius-components-widget-table-view/pom.xml
new file mode 100644
index 0000000000..ac2d7270d3
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/pom.xml
@@ -0,0 +1,93 @@
+
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.1
+
+
+ org.eclipse.sirius
+ sirius-components-widget-table-view
+ 2025.1.6
+ sirius-components-widget-table-view
+ View support for the table custom widget
+
+
+ 17
+
+
+
+
+ Central
+ https://repo.maven.apache.org/maven2
+
+
+ github-sirius-emfjson
+ https://maven.pkg.github.com/eclipse-sirius/sirius-emf-json
+
+
+
+
+
+ github
+ Apache Maven Packages
+ https://maven.pkg.github.com/eclipse-sirius/sirius-web
+
+
+
+
+
+ org.eclipse.emf
+ org.eclipse.emf.common
+ 2.21.0
+
+
+ org.eclipse.emf
+ org.eclipse.emf.ecore
+ 2.23.0
+
+
+ org.eclipse.sirius
+ sirius-components-view-form
+ 2025.1.6
+
+
+ org.eclipse.sirius
+ sirius-components-view-table
+ 2025.1.6
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetDescription.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetDescription.java
new file mode 100644
index 0000000000..540a0facf9
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetDescription.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.sirius.components.view.form.WidgetDescription;
+import org.eclipse.sirius.components.view.table.CellDescription;
+import org.eclipse.sirius.components.view.table.ColumnDescription;
+import org.eclipse.sirius.components.view.table.RowDescription;
+
+/**
+ * A representation of the model object 'Description '.
+ *
+ *
+ * The following features are supported:
+ *
+ *
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getColumnDescriptions
+ * Column Descriptions }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getRowDescription Row
+ * Description }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getCellDescriptions Cell
+ * Descriptions }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getUseStripedRowsExpression
+ * Use Striped Rows Expression }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getIsEnabledExpression Is
+ * Enabled Expression }
+ *
+ *
+ * @model
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription()
+ */
+public interface TableWidgetDescription extends WidgetDescription {
+
+ /**
+ * Returns the value of the 'Column Descriptions ' containment reference list. The list contents are
+ * of type {@link org.eclipse.sirius.components.view.table.ColumnDescription}.
+ *
+ * @return the value of the 'Column Descriptions ' containment reference list.
+ * @model containment="true"
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription_ColumnDescriptions()
+ */
+ EList getColumnDescriptions();
+
+ /**
+ * Returns the value of the 'Row Description ' containment reference.
+ *
+ * @return the value of the 'Row Description ' containment reference.
+ * @model containment="true"
+ * @generated
+ * @see #setRowDescription(RowDescription)
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription_RowDescription()
+ */
+ RowDescription getRowDescription();
+
+ /**
+ * Sets the value of the
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getRowDescription Row
+ * Description }' containment reference.
+ *
+ * @param value
+ * the new value of the 'Row Description ' containment reference.
+ * @generated
+ * @see #getRowDescription()
+ */
+ void setRowDescription(RowDescription value);
+
+ /**
+ * Returns the value of the 'Cell Descriptions ' containment reference list. The list contents are of
+ * type {@link org.eclipse.sirius.components.view.table.CellDescription}.
+ *
+ * @return the value of the 'Cell Descriptions ' containment reference list.
+ * @model containment="true"
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription_CellDescriptions()
+ */
+ EList getCellDescriptions();
+
+ /**
+ * Returns the value of the 'Use Striped Rows Expression ' attribute.
+ *
+ * @return the value of the 'Use Striped Rows Expression ' attribute.
+ * @model dataType="org.eclipse.sirius.components.view.InterpretedExpression"
+ * @generated
+ * @see #setUseStripedRowsExpression(String)
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription_UseStripedRowsExpression()
+ */
+ String getUseStripedRowsExpression();
+
+ /**
+ * Sets the value of the
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getUseStripedRowsExpression
+ * Use Striped Rows Expression }' attribute.
+ *
+ * @param value
+ * the new value of the 'Use Striped Rows Expression ' attribute.
+ * @generated
+ * @see #getUseStripedRowsExpression()
+ */
+ void setUseStripedRowsExpression(String value);
+
+ /**
+ * Returns the value of the 'Is Enabled Expression ' attribute.
+ *
+ * @return the value of the 'Is Enabled Expression ' attribute.
+ * @model dataType="org.eclipse.sirius.components.view.InterpretedExpression"
+ * @generated
+ * @see #setIsEnabledExpression(String)
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#getTableWidgetDescription_IsEnabledExpression()
+ */
+ String getIsEnabledExpression();
+
+ /**
+ * Sets the value of the
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getIsEnabledExpression
+ * Is Enabled Expression }' attribute.
+ *
+ * @param value
+ * the new value of the 'Is Enabled Expression ' attribute.
+ * @generated
+ * @see #getIsEnabledExpression()
+ */
+ void setIsEnabledExpression(String value);
+
+} // TableWidgetDescription
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetFactory.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetFactory.java
new file mode 100644
index 0000000000..2ae9860dd7
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetFactory.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * The Factory for the model. It provides a create method for each non-abstract class of
+ * the model.
+ *
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage
+ */
+public interface TableWidgetFactory extends EFactory {
+
+ /**
+ * The singleton instance of the factory.
+ *
+ * @generated
+ */
+ TableWidgetFactory eINSTANCE = org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Description '.
+ *
+ * @return a new object of class 'Description '.
+ * @generated
+ */
+ TableWidgetDescription createTableWidgetDescription();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ TableWidgetPackage getTableWidgetPackage();
+
+} // TableWidgetFactory
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetPackage.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetPackage.java
new file mode 100644
index 0000000000..b7d420308c
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/TableWidgetPackage.java
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.sirius.components.view.form.FormPackage;
+
+/**
+ * The Package for the model. It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ *
+ * @model kind="package"
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetFactory
+ */
+public interface TableWidgetPackage extends EPackage {
+
+ /**
+ * The package name.
+ *
+ * @generated
+ */
+ String eNAME = "tablewidget";
+
+ /**
+ * The package namespace URI.
+ *
+ * @generated
+ */
+ String eNS_URI = "https://www.eclipse.org/sirius/widgets/tablewidget";
+
+ /**
+ * The package namespace name.
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "tablewidget";
+ /**
+ * The meta object id for the
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl
+ * Description }' class.
+ *
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetPackageImpl#getTableWidgetDescription()
+ */
+ int TABLE_WIDGET_DESCRIPTION = 0;
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__NAME = FormPackage.WIDGET_DESCRIPTION__NAME;
+ /**
+ * The feature id for the 'Label Expression ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__LABEL_EXPRESSION = FormPackage.WIDGET_DESCRIPTION__LABEL_EXPRESSION;
+ /**
+ * The feature id for the 'Help Expression ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__HELP_EXPRESSION = FormPackage.WIDGET_DESCRIPTION__HELP_EXPRESSION;
+ /**
+ * The feature id for the 'Diagnostics Expression ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__DIAGNOSTICS_EXPRESSION = FormPackage.WIDGET_DESCRIPTION__DIAGNOSTICS_EXPRESSION;
+ /**
+ * The feature id for the 'Column Descriptions ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT;
+ /**
+ * The feature id for the 'Row Description ' containment reference.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT + 1;
+ /**
+ * The feature id for the 'Cell Descriptions ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT + 2;
+ /**
+ * The feature id for the 'Use Striped Rows Expression ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT + 3;
+ /**
+ * The feature id for the 'Is Enabled Expression ' attribute.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT + 4;
+ /**
+ * The singleton instance of the package.
+ *
+ * @generated
+ */
+ TableWidgetPackage eINSTANCE = org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetPackageImpl.init();
+ /**
+ * The number of structural features of the 'Description ' class.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION_FEATURE_COUNT = FormPackage.WIDGET_DESCRIPTION_FEATURE_COUNT + 5;
+
+ /**
+ * The number of operations of the 'Description ' class.
+ *
+ * @generated
+ * @ordered
+ */
+ int TABLE_WIDGET_DESCRIPTION_OPERATION_COUNT = FormPackage.WIDGET_DESCRIPTION_OPERATION_COUNT;
+
+ /**
+ * Returns the meta object for class
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription Description }'.
+ *
+ * @return the meta object for class 'Description '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription
+ */
+ EClass getTableWidgetDescription();
+
+ /**
+ * Returns the meta object for the containment reference list
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getColumnDescriptions
+ * Column Descriptions }'.
+ *
+ * @return the meta object for the containment reference list 'Column Descriptions '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getColumnDescriptions()
+ * @see #getTableWidgetDescription()
+ */
+ EReference getTableWidgetDescription_ColumnDescriptions();
+
+ /**
+ * Returns the meta object for the containment reference
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getRowDescription Row
+ * Description }'.
+ *
+ * @return the meta object for the containment reference 'Row Description '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getRowDescription()
+ * @see #getTableWidgetDescription()
+ */
+ EReference getTableWidgetDescription_RowDescription();
+
+ /**
+ * Returns the meta object for the containment reference list
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getCellDescriptions Cell
+ * Descriptions }'.
+ *
+ * @return the meta object for the containment reference list 'Cell Descriptions '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getCellDescriptions()
+ * @see #getTableWidgetDescription()
+ */
+ EReference getTableWidgetDescription_CellDescriptions();
+
+ /**
+ * Returns the meta object for the attribute
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getUseStripedRowsExpression
+ * Use Striped Rows Expression }'.
+ *
+ * @return the meta object for the attribute 'Use Striped Rows Expression '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getUseStripedRowsExpression()
+ * @see #getTableWidgetDescription()
+ */
+ EAttribute getTableWidgetDescription_UseStripedRowsExpression();
+
+ /**
+ * Returns the meta object for the attribute
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getIsEnabledExpression
+ * Is Enabled Expression }'.
+ *
+ * @return the meta object for the attribute 'Is Enabled Expression '.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription#getIsEnabledExpression()
+ * @see #getTableWidgetDescription()
+ */
+ EAttribute getTableWidgetDescription_IsEnabledExpression();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ TableWidgetFactory getTableWidgetFactory();
+
+ /**
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+
+ /**
+ * The meta object literal for the
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl
+ * Description }' class.
+ *
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetPackageImpl#getTableWidgetDescription()
+ */
+ EClass TABLE_WIDGET_DESCRIPTION = eINSTANCE.getTableWidgetDescription();
+
+ /**
+ * The meta object literal for the 'Column Descriptions ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS = eINSTANCE.getTableWidgetDescription_ColumnDescriptions();
+
+ /**
+ * The meta object literal for the 'Row Description ' containment reference feature.
+ *
+ * @generated
+ */
+ EReference TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION = eINSTANCE.getTableWidgetDescription_RowDescription();
+
+ /**
+ * The meta object literal for the 'Cell Descriptions ' containment reference list feature.
+ *
+ * @generated
+ */
+ EReference TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS = eINSTANCE.getTableWidgetDescription_CellDescriptions();
+
+ /**
+ * The meta object literal for the 'Use Striped Rows Expression ' attribute feature.
+ *
+ * @generated
+ */
+ EAttribute TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION = eINSTANCE.getTableWidgetDescription_UseStripedRowsExpression();
+
+ /**
+ * The meta object literal for the 'Is Enabled Expression ' attribute feature.
+ *
+ * @generated
+ */
+ EAttribute TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION = eINSTANCE.getTableWidgetDescription_IsEnabledExpression();
+
+ }
+
+} // TableWidgetPackage
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetDescriptionImpl.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetDescriptionImpl.java
new file mode 100644
index 0000000000..91abb83026
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetDescriptionImpl.java
@@ -0,0 +1,396 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.impl;
+
+import java.util.Collection;
+import java.util.Objects;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.sirius.components.view.form.impl.WidgetDescriptionImpl;
+import org.eclipse.sirius.components.view.table.CellDescription;
+import org.eclipse.sirius.components.view.table.ColumnDescription;
+import org.eclipse.sirius.components.view.table.RowDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * An implementation of the model object 'Description '.
+ *
+ * The following features are implemented:
+ *
+ *
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl#getColumnDescriptions
+ * Column Descriptions }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl#getRowDescription
+ * Row Description }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl#getCellDescriptions
+ * Cell Descriptions }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl#getUseStripedRowsExpression
+ * Use Striped Rows Expression }
+ * {@link org.eclipse.sirius.components.view.widget.tablewidget.impl.TableWidgetDescriptionImpl#getIsEnabledExpression
+ * Is Enabled Expression }
+ *
+ *
+ * @generated
+ */
+public class TableWidgetDescriptionImpl extends WidgetDescriptionImpl implements TableWidgetDescription {
+
+ /**
+ * The default value of the '{@link #getUseStripedRowsExpression() Use Striped Rows Expression }' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ * @see #getUseStripedRowsExpression()
+ */
+ protected static final String USE_STRIPED_ROWS_EXPRESSION_EDEFAULT = null;
+ /**
+ * The default value of the '{@link #getIsEnabledExpression() Is Enabled Expression }' attribute.
+ *
+ * @generated
+ * @ordered
+ * @see #getIsEnabledExpression()
+ */
+ protected static final String IS_ENABLED_EXPRESSION_EDEFAULT = null;
+ /**
+ * The cached value of the '{@link #getColumnDescriptions() Column Descriptions }' containment reference
+ * list.
+ *
+ * @generated
+ * @ordered
+ * @see #getColumnDescriptions()
+ */
+ protected EList columnDescriptions;
+ /**
+ * The cached value of the '{@link #getRowDescription() Row Description }' containment reference.
+ *
+ * @generated
+ * @ordered
+ * @see #getRowDescription()
+ */
+ protected RowDescription rowDescription;
+ /**
+ * The cached value of the '{@link #getCellDescriptions() Cell Descriptions }' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ * @see #getCellDescriptions()
+ */
+ protected EList cellDescriptions;
+ /**
+ * The cached value of the '{@link #getUseStripedRowsExpression() Use Striped Rows Expression }' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ * @see #getUseStripedRowsExpression()
+ */
+ protected String useStripedRowsExpression = USE_STRIPED_ROWS_EXPRESSION_EDEFAULT;
+ /**
+ * The cached value of the '{@link #getIsEnabledExpression() Is Enabled Expression }' attribute.
+ *
+ * @generated
+ * @ordered
+ * @see #getIsEnabledExpression()
+ */
+ protected String isEnabledExpression = IS_ENABLED_EXPRESSION_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TableWidgetDescriptionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return TableWidgetPackage.Literals.TABLE_WIDGET_DESCRIPTION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getColumnDescriptions() {
+ if (this.columnDescriptions == null) {
+ this.columnDescriptions = new EObjectContainmentEList(ColumnDescription.class, this, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS);
+ }
+ return this.columnDescriptions;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public RowDescription getRowDescription() {
+ return this.rowDescription;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setRowDescription(RowDescription newRowDescription) {
+ if (newRowDescription != this.rowDescription) {
+ NotificationChain msgs = null;
+ if (this.rowDescription != null)
+ msgs = ((InternalEObject) this.rowDescription).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION, null, msgs);
+ if (newRowDescription != null)
+ msgs = ((InternalEObject) newRowDescription).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION, null, msgs);
+ msgs = this.basicSetRowDescription(newRowDescription, msgs);
+ if (msgs != null)
+ msgs.dispatch();
+ } else if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION, newRowDescription, newRowDescription));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetRowDescription(RowDescription newRowDescription, NotificationChain msgs) {
+ RowDescription oldRowDescription = this.rowDescription;
+ this.rowDescription = newRowDescription;
+ if (this.eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION, oldRowDescription, newRowDescription);
+ if (msgs == null)
+ msgs = notification;
+ else
+ msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getCellDescriptions() {
+ if (this.cellDescriptions == null) {
+ this.cellDescriptions = new EObjectContainmentEList(CellDescription.class, this, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS);
+ }
+ return this.cellDescriptions;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getUseStripedRowsExpression() {
+ return this.useStripedRowsExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setUseStripedRowsExpression(String newUseStripedRowsExpression) {
+ String oldUseStripedRowsExpression = this.useStripedRowsExpression;
+ this.useStripedRowsExpression = newUseStripedRowsExpression;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION, oldUseStripedRowsExpression,
+ this.useStripedRowsExpression));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getIsEnabledExpression() {
+ return this.isEnabledExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setIsEnabledExpression(String newIsEnabledExpression) {
+ String oldIsEnabledExpression = this.isEnabledExpression;
+ this.isEnabledExpression = newIsEnabledExpression;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION, oldIsEnabledExpression, this.isEnabledExpression));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ return ((InternalEList>) this.getColumnDescriptions()).basicRemove(otherEnd, msgs);
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ return this.basicSetRowDescription(null, msgs);
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ return ((InternalEList>) this.getCellDescriptions()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ return this.getColumnDescriptions();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ return this.getRowDescription();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ return this.getCellDescriptions();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION:
+ return this.getUseStripedRowsExpression();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION:
+ return this.getIsEnabledExpression();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ this.getColumnDescriptions().clear();
+ this.getColumnDescriptions().addAll((Collection extends ColumnDescription>) newValue);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ this.setRowDescription((RowDescription) newValue);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ this.getCellDescriptions().clear();
+ this.getCellDescriptions().addAll((Collection extends CellDescription>) newValue);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION:
+ this.setUseStripedRowsExpression((String) newValue);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION:
+ this.setIsEnabledExpression((String) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ this.getColumnDescriptions().clear();
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ this.setRowDescription(null);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ this.getCellDescriptions().clear();
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION:
+ this.setUseStripedRowsExpression(USE_STRIPED_ROWS_EXPRESSION_EDEFAULT);
+ return;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION:
+ this.setIsEnabledExpression(IS_ENABLED_EXPRESSION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS:
+ return this.columnDescriptions != null && !this.columnDescriptions.isEmpty();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION:
+ return this.rowDescription != null;
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS:
+ return this.cellDescriptions != null && !this.cellDescriptions.isEmpty();
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION:
+ return !Objects.equals(USE_STRIPED_ROWS_EXPRESSION_EDEFAULT, this.useStripedRowsExpression);
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION:
+ return !Objects.equals(IS_ENABLED_EXPRESSION_EDEFAULT, this.isEnabledExpression);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ String result = super.toString() + " (useStripedRowsExpression: " +
+ this.useStripedRowsExpression +
+ ", IsEnabledExpression: " +
+ this.isEnabledExpression +
+ ')';
+ return result;
+ }
+
+} // TableWidgetDescriptionImpl
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetFactoryImpl.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetFactoryImpl.java
new file mode 100644
index 0000000000..4103e092b4
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetFactoryImpl.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class TableWidgetFactoryImpl extends EFactoryImpl implements TableWidgetFactory {
+
+ /**
+ * Creates an instance of the factory.
+ *
+ * @generated
+ */
+ public TableWidgetFactoryImpl() {
+ super();
+ }
+
+ /**
+ * Creates the default factory implementation.
+ *
+ * @generated
+ */
+ public static TableWidgetFactory init() {
+ try {
+ TableWidgetFactory theTableWidgetFactory = (TableWidgetFactory) EPackage.Registry.INSTANCE.getEFactory(TableWidgetPackage.eNS_URI);
+ if (theTableWidgetFactory != null) {
+ return theTableWidgetFactory;
+ }
+ } catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new TableWidgetFactoryImpl();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION:
+ return this.createTableWidgetDescription();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public TableWidgetDescription createTableWidgetDescription() {
+ TableWidgetDescriptionImpl tableWidgetDescription = new TableWidgetDescriptionImpl();
+ return tableWidgetDescription;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public TableWidgetPackage getTableWidgetPackage() {
+ return (TableWidgetPackage) this.getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ * @deprecated
+ */
+ @Deprecated
+ public static TableWidgetPackage getPackage() {
+ return TableWidgetPackage.eINSTANCE;
+ }
+
+} // TableWidgetFactoryImpl
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetPackageImpl.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetPackageImpl.java
new file mode 100644
index 0000000000..925a8cfc77
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/impl/TableWidgetPackageImpl.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.sirius.components.view.ViewPackage;
+import org.eclipse.sirius.components.view.form.FormPackage;
+import org.eclipse.sirius.components.view.table.TablePackage;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetFactory;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class TableWidgetPackageImpl extends EPackageImpl implements TableWidgetPackage {
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tableWidgetDescriptionEClass = null;
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Creates an instance of the model Package , registered with {@link org.eclipse.emf.ecore.EPackage.Registry
+ * EPackage.Registry} by the package package URI value.
+ *
+ * Note: the correct way to create the package is via the static factory method {@link #init init()}, which also
+ * performs initialization of the package, or returns the registered package, if one already exists.
+ *
+ * @generated
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage#eNS_URI
+ * @see #init()
+ */
+ private TableWidgetPackageImpl() {
+ super(eNS_URI, TableWidgetFactory.eINSTANCE);
+ }
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
+ * This method is used to initialize {@link TableWidgetPackage#eINSTANCE} when that field is accessed. Clients
+ * should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ * @generated
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ */
+ public static TableWidgetPackage init() {
+ if (isInited)
+ return (TableWidgetPackage) EPackage.Registry.INSTANCE.getEPackage(TableWidgetPackage.eNS_URI);
+
+ // Obtain or create and register package
+ Object registeredTableWidgetPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ TableWidgetPackageImpl theTableWidgetPackage = registeredTableWidgetPackage instanceof TableWidgetPackageImpl ? (TableWidgetPackageImpl) registeredTableWidgetPackage
+ : new TableWidgetPackageImpl();
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ FormPackage.eINSTANCE.eClass();
+ ViewPackage.eINSTANCE.eClass();
+ TablePackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theTableWidgetPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theTableWidgetPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theTableWidgetPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(TableWidgetPackage.eNS_URI, theTableWidgetPackage);
+ return theTableWidgetPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getTableWidgetDescription() {
+ return this.tableWidgetDescriptionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTableWidgetDescription_ColumnDescriptions() {
+ return (EReference) this.tableWidgetDescriptionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTableWidgetDescription_RowDescription() {
+ return (EReference) this.tableWidgetDescriptionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTableWidgetDescription_CellDescriptions() {
+ return (EReference) this.tableWidgetDescriptionEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTableWidgetDescription_UseStripedRowsExpression() {
+ return (EAttribute) this.tableWidgetDescriptionEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTableWidgetDescription_IsEnabledExpression() {
+ return (EAttribute) this.tableWidgetDescriptionEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public TableWidgetFactory getTableWidgetFactory() {
+ return (TableWidgetFactory) this.getEFactoryInstance();
+ }
+
+ /**
+ * Creates the meta-model objects for the package. This method is guarded to have no affect on any invocation but
+ * its first.
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (this.isCreated)
+ return;
+ this.isCreated = true;
+
+ // Create classes and their features
+ this.tableWidgetDescriptionEClass = this.createEClass(TABLE_WIDGET_DESCRIPTION);
+ this.createEReference(this.tableWidgetDescriptionEClass, TABLE_WIDGET_DESCRIPTION__COLUMN_DESCRIPTIONS);
+ this.createEReference(this.tableWidgetDescriptionEClass, TABLE_WIDGET_DESCRIPTION__ROW_DESCRIPTION);
+ this.createEReference(this.tableWidgetDescriptionEClass, TABLE_WIDGET_DESCRIPTION__CELL_DESCRIPTIONS);
+ this.createEAttribute(this.tableWidgetDescriptionEClass, TABLE_WIDGET_DESCRIPTION__USE_STRIPED_ROWS_EXPRESSION);
+ this.createEAttribute(this.tableWidgetDescriptionEClass, TABLE_WIDGET_DESCRIPTION__IS_ENABLED_EXPRESSION);
+ }
+
+ /**
+ * Complete the initialization of the package and its meta-model. This method is guarded to have no affect on any
+ * invocation but its first.
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (this.isInitialized)
+ return;
+ this.isInitialized = true;
+
+ // Initialize package
+ this.setName(eNAME);
+ this.setNsPrefix(eNS_PREFIX);
+ this.setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ FormPackage theFormPackage = (FormPackage) EPackage.Registry.INSTANCE.getEPackage(FormPackage.eNS_URI);
+ TablePackage theTablePackage = (TablePackage) EPackage.Registry.INSTANCE.getEPackage(TablePackage.eNS_URI);
+ ViewPackage theViewPackage = (ViewPackage) EPackage.Registry.INSTANCE.getEPackage(ViewPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ this.tableWidgetDescriptionEClass.getESuperTypes().add(theFormPackage.getWidgetDescription());
+
+ // Initialize classes, features, and operations; add parameters
+ this.initEClass(this.tableWidgetDescriptionEClass, TableWidgetDescription.class, "TableWidgetDescription", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEReference(this.getTableWidgetDescription_ColumnDescriptions(), theTablePackage.getColumnDescription(), null, "columnDescriptions", null, 0, -1, TableWidgetDescription.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getTableWidgetDescription_RowDescription(), theTablePackage.getRowDescription(), null, "rowDescription", null, 0, 1, TableWidgetDescription.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getTableWidgetDescription_CellDescriptions(), theTablePackage.getCellDescription(), null, "cellDescriptions", null, 0, -1, TableWidgetDescription.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getTableWidgetDescription_UseStripedRowsExpression(), theViewPackage.getInterpretedExpression(), "useStripedRowsExpression", null, 0, 1, TableWidgetDescription.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getTableWidgetDescription_IsEnabledExpression(), theViewPackage.getInterpretedExpression(), "IsEnabledExpression", null, 0, 1, TableWidgetDescription.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ this.createResource(eNS_URI);
+ }
+
+} // TableWidgetPackageImpl
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetAdapterFactory.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetAdapterFactory.java
new file mode 100644
index 0000000000..79f4042137
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetAdapterFactory.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.sirius.components.view.form.FormElementDescription;
+import org.eclipse.sirius.components.view.form.WidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * The Adapter Factory for the model. It provides an adapter createXXX
+ * method for each class of the model.
+ *
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage
+ */
+public class TableWidgetAdapterFactory extends AdapterFactoryImpl {
+
+ /**
+ * The cached model package.
+ *
+ * @generated
+ */
+ protected static TableWidgetPackage modelPackage;
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ * @generated
+ */
+ protected TableWidgetSwitch modelSwitch = new TableWidgetSwitch<>() {
+ @Override
+ public Adapter caseTableWidgetDescription(TableWidgetDescription object) {
+ return TableWidgetAdapterFactory.this.createTableWidgetDescriptionAdapter();
+ }
+
+ @Override
+ public Adapter caseFormElementDescription(FormElementDescription object) {
+ return TableWidgetAdapterFactory.this.createFormElementDescriptionAdapter();
+ }
+
+ @Override
+ public Adapter caseWidgetDescription(WidgetDescription object) {
+ return TableWidgetAdapterFactory.this.createWidgetDescriptionAdapter();
+ }
+
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return TableWidgetAdapterFactory.this.createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ * @generated
+ */
+ public TableWidgetAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = TableWidgetPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object. This
+ * implementation returns true
if the object is either the model's package or is an instance object of
+ * the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject) object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ * @param target
+ * the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return this.modelSwitch.doSwitch((EObject) target);
+ }
+
+ /**
+ * Creates a new adapter for an object of class
+ * '{@link org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription Description }'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription
+ */
+ public Adapter createTableWidgetDescriptionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class
+ * '{@link org.eclipse.sirius.components.view.form.FormElementDescription Element Description }'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @generated
+ * @see org.eclipse.sirius.components.view.form.FormElementDescription
+ */
+ public Adapter createFormElementDescriptionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.sirius.components.view.form.WidgetDescription
+ * Widget Description }'. This default implementation returns null so that we can
+ * easily ignore cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @generated
+ * @see org.eclipse.sirius.components.view.form.WidgetDescription
+ */
+ public Adapter createWidgetDescriptionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case. This default implementation returns null.
+ *
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} // TableWidgetAdapterFactory
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetSwitch.java b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetSwitch.java
new file mode 100644
index 0000000000..a2061c03b4
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/java/org/eclipse/sirius/components/view/widget/tablewidget/util/TableWidgetSwitch.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.components.view.widget.tablewidget.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.sirius.components.view.form.FormElementDescription;
+import org.eclipse.sirius.components.view.form.WidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetDescription;
+import org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage;
+
+/**
+ * The Switch for the model's inheritance hierarchy. It supports the call
+ * {@link #doSwitch(EObject) doSwitch(object)} to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object and proceeding up the inheritance hierarchy until a non-null result is
+ * returned, which is the result of the switch.
+ *
+ * @generated
+ * @see org.eclipse.sirius.components.view.widget.tablewidget.TableWidgetPackage
+ */
+public class TableWidgetSwitch extends Switch {
+
+ /**
+ * The cached model package
+ *
+ * @generated
+ */
+ protected static TableWidgetPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ * @generated
+ */
+ public TableWidgetSwitch() {
+ if (modelPackage == null) {
+ modelPackage = TableWidgetPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ * @param ePackage
+ * the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that
+ * result.
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case TableWidgetPackage.TABLE_WIDGET_DESCRIPTION: {
+ TableWidgetDescription tableWidgetDescription = (TableWidgetDescription) theEObject;
+ T result = this.caseTableWidgetDescription(tableWidgetDescription);
+ if (result == null)
+ result = this.caseWidgetDescription(tableWidgetDescription);
+ if (result == null)
+ result = this.caseFormElementDescription(tableWidgetDescription);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ default:
+ return this.defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Description '.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Description '.
+ * @generated
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ */
+ public T caseTableWidgetDescription(TableWidgetDescription object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Element Description '. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Element Description '.
+ * @generated
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ */
+ public T caseFormElementDescription(FormElementDescription object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Widget Description '. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Widget Description '.
+ * @generated
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ */
+ public T caseWidgetDescription(WidgetDescription object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '. This
+ * implementation returns null; returning a non-null result will terminate the switch, but this is the last case
+ * anyway.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @generated
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} // TableWidgetSwitch
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.ecore b/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.ecore
new file mode 100644
index 0000000000..183ba25447
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.ecore
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.genmodel b/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.genmodel
new file mode 100644
index 0000000000..8689e937bc
--- /dev/null
+++ b/packages/view/backend/sirius-components-widget-table-view/src/main/resources/model/tablewidget.genmodel
@@ -0,0 +1,23 @@
+
+
+ tablewidget.ecore
+
+
+
+
+
+
+
+
+
+
diff --git a/vscode-extension/package.json b/vscode-extension/package.json
index 3c92ac7382..ab43421770 100644
--- a/vscode-extension/package.json
+++ b/vscode-extension/package.json
@@ -140,6 +140,7 @@
"@eclipse-sirius/sirius-components-trees": "*",
"@eclipse-sirius/sirius-components-validation": "*",
"@eclipse-sirius/sirius-components-widget-reference": "*",
+ "@eclipse-sirius/sirius-components-widget-table": "*",
"@eclipse-sirius/sirius-web-application": "*",
"@mui/icons-material": "5.15.19",
"@mui/material": "5.15.19",