From cfddbe6820e8dd983229361e822cf51f45d933fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20ROU=C3=8BN=C3=89?= Date: Tue, 30 Dec 2025 16:15:44 +0100 Subject: [PATCH] [1790] Add a condition to apply filters only to the SysON explorer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://github.com/eclipse-syson/syson/issues/1790 Signed-off-by: Florian ROUËNÉ --- CHANGELOG.adoc | 1 + .../explorer/view/SysONExplorerTests.java | 40 ++++++++++----- .../general/view/GVViewAsOnNodeTests.java | 19 ++++++- .../general/view/GVViewUsageTests.java | 19 ++++++- ...xplorerViewControllerIntegrationTests.java | 49 +++++++++++++++++-- .../handlers/DropTreeItemHandlerTest.java | 6 +-- ...lementsTreeItemAlteredContentProvider.java | 2 +- ...rdLibrariesTreeAlteredContentProvider.java | 2 +- ...ershipsTreeItemAlteredContentProvider.java | 2 +- ...mespaceTreeItemAlteredContentProvider.java | 2 +- ...rdLibrariesTreeAlteredContentProvider.java | 2 +- ...erLibrariesTreeAlteredContentProvider.java | 2 +- ...der.java => SysONTreeFilterConstants.java} | 28 ++--------- .../fragments/LibrariesDirectory.java | 14 +++--- .../services/SysONExplorerFilterService.java | 14 +++--- ...ysONChangeDescriptionDataTreeProvider.java | 14 +++--- .../view/SysONTreeFilterProvider.java | 45 +++++++++++++++++ .../SysONExplorerTreePathProvider.java | 14 +++--- 18 files changed, 194 insertions(+), 81 deletions(-) rename backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/{SysONTreeFilterProvider.java => SysONTreeFilterConstants.java} (52%) create mode 100644 backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/SysONTreeFilterProvider.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 97eb88da9..87454a938 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -44,6 +44,7 @@ This fix ensure that imported models containing, for example, a top-level `Libra A new compartment named _satisfy requirements_ has also been added to `PartDefinition` and `PartUsage` graphical nodes in diagrams. - https://github.com/eclipse-syson/syson/issues/1762[#1762] [diagrams] Increase the default size of nodes. - https://github.com/eclipse-syson/syson/issues/1752[#1752] [diagrams] In diagrams, hide the node displayed on the top of the diagram if the candidate compartment is not hidden. +- https://github.com/eclipse-syson/syson/issues/1790[#1790] [explorer] Add a condition to apply filters only to the SysON explorer. === New features diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controller/explorer/view/SysONExplorerTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controller/explorer/view/SysONExplorerTests.java index 7b3ca79b6..5556736da 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controller/explorer/view/SysONExplorerTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controller/explorer/view/SysONExplorerTests.java @@ -29,12 +29,15 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.sirius.components.collaborative.trees.api.TreeFilter; +import org.eclipse.sirius.components.core.api.IEditingContextSearchService; import org.eclipse.sirius.components.core.api.IIdentityService; import org.eclipse.sirius.components.core.api.IObjectSearchService; +import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionInput; import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionSuccessPayload; import org.eclipse.sirius.components.graphql.tests.api.IExecuteEditingContextFunctionRunner; import org.eclipse.sirius.components.trees.TreeItem; +import org.eclipse.sirius.components.trees.description.TreeDescription; import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerTreeItemContextMenuEntryProvider; @@ -56,7 +59,8 @@ import org.eclipse.syson.sysml.Namespace; import org.eclipse.syson.sysml.OwningMembership; import org.eclipse.syson.sysml.Package; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; +import org.eclipse.syson.tree.explorer.view.SysONTreeFilterProvider; import org.eclipse.syson.tree.explorer.view.SysONTreeViewDescriptionProvider; import org.eclipse.syson.tree.explorer.view.menu.context.SysONExplorerTreeItemContextMenuEntryProvider; import org.junit.jupiter.api.BeforeEach; @@ -119,6 +123,12 @@ public class SysONExplorerTests extends AbstractIntegrationTests { @Autowired private SysONTreeFilterProvider sysonTreeFilterProvider; + @Autowired + private IRepresentationDescriptionSearchService representationDescriptionSearchService; + + @Autowired + private IEditingContextSearchService editingContextSearchService; + private List defaultFilters; private String sysONExplorerTreeDescriptionId; @@ -127,7 +137,13 @@ public class SysONExplorerTests extends AbstractIntegrationTests { public void beforeEach() { this.sysONExplorerTreeDescriptionId = this.sysonTreeViewDescriptionProvider.getDescriptionId(); this.givenInitialServerState.initialize(); - this.defaultFilters = this.sysonTreeFilterProvider.get(null, null).stream() + var optionalEditingContext = this.editingContextSearchService.findById(GeneralViewEmptyTestProjectData.EDITING_CONTEXT); + TreeDescription treeDescription = optionalEditingContext + .flatMap(editingContext -> this.representationDescriptionSearchService.findById(editingContext, this.sysONExplorerTreeDescriptionId)) + .filter(TreeDescription.class::isInstance) + .map(TreeDescription.class::cast) + .orElse(null); + this.defaultFilters = this.sysonTreeFilterProvider.get(null, treeDescription).stream() .filter(TreeFilter::defaultState) .map(TreeFilter::id) .toList(); @@ -298,7 +314,7 @@ public void getExplorerContentWithKerMLAndSysMLExpanded() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getRootContentWithHideMembershipsAndHideKerMLStandardLibraries() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(GeneralViewEmptyTestProjectData.SemanticIds.MODEL_ID), filters); var input = new ExplorerEventInput(UUID.randomUUID(), GeneralViewEmptyTestProjectData.EDITING_CONTEXT, explorerRepresentationId); var flux = this.explorerEventSubscriptionRunner.run(input); @@ -389,7 +405,7 @@ public void getContextMenuOfModelAndLibraryDirectories() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void treePathQueryApplyExplorerFilters() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(GeneralViewEmptyTestProjectData.SemanticIds.MODEL_ID, GeneralViewEmptyTestProjectData.SemanticIds.PACKAGE_1_ID), filters); var input = new ExplorerEventInput(UUID.randomUUID(), GeneralViewEmptyTestProjectData.EDITING_CONTEXT, explorerRepresentationId); @@ -438,7 +454,7 @@ public void treePathQueryApplyExplorerFilters() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void treePathQueryInSiriusWebDefaultExplorerDoesNotApplyExplorerFilters() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(ExplorerDescriptionProvider.DESCRIPTION_ID, List.of(GeneralViewEmptyTestProjectData.SemanticIds.MODEL_ID, GeneralViewEmptyTestProjectData.SemanticIds.PACKAGE_1_ID), filters); var input = new ExplorerEventInput(UUID.randomUUID(), GeneralViewEmptyTestProjectData.EDITING_CONTEXT, explorerRepresentationId); @@ -509,7 +525,7 @@ public void treePathQueryInSiriusWebDefaultExplorerDoesNotApplyExplorerFilters() @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentWithImportedLibraryContainingOnePackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithUsedBatmobileLibraryDependencyTestProjectData.EDITING_CONTEXT, explorerRepresentationId); var flux = this.explorerEventSubscriptionRunner.run(input); @@ -538,7 +554,7 @@ public void getExplorerContentWithImportedLibraryContainingOnePackage() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentWithImportedLibraryContainingPackageAndLibraryPackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithLibraryDependencyContainingPackageAndLibraryPackageTestProjectData.EDITING_CONTEXT, explorerRepresentationId); var flux = this.explorerEventSubscriptionRunner.run(input); @@ -567,7 +583,7 @@ public void getExplorerContentWithImportedLibraryContainingPackageAndLibraryPack @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentWithImportedLibraryContainingLibraryPackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(UUID.nameUUIDFromBytes("SysON_Libraries_Directory".getBytes()).toString(), UUID.nameUUIDFromBytes("SysON_User_Libraries_Directory".getBytes()).toString()), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithLibraryDependencyContainingLibraryPackageTestProjectData.EDITING_CONTEXT, explorerRepresentationId); @@ -621,7 +637,7 @@ public void getExplorerContentWithImportedLibraryContainingLibraryPackage() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentWithImportedLibraryContainingCommentAndLibraryPackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(UUID.nameUUIDFromBytes("SysON_Libraries_Directory".getBytes()).toString(), UUID.nameUUIDFromBytes("SysON_User_Libraries_Directory".getBytes()).toString()), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithLibraryDependencyContainingCommentAndLibraryPackageTestProjectData.EDITING_CONTEXT, explorerRepresentationId); @@ -675,7 +691,7 @@ public void getExplorerContentWithImportedLibraryContainingCommentAndLibraryPack @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentOnLibrarySemanticDataWithLibraryPackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithLibraryDependencyContainingLibraryPackageTestProjectData.LIBRARY_EDITING_CONTEXT, explorerRepresentationId); @@ -703,7 +719,7 @@ public void getExplorerContentOnLibrarySemanticDataWithLibraryPackage() { @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) @Test public void getExplorerContentOnLibrarySemanticDataWithPackage() { - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, List.of(), filters); var input = new ExplorerEventInput(UUID.randomUUID(), ProjectWithLibraryDependencyContainingPackageAndLibraryPackageTestProjectData.LIBRARY_EDITING_CONTEXT, explorerRepresentationId); @@ -736,7 +752,7 @@ public void sysONExplorerTreeItemContextMenuEntriesTest() { GeneralViewEmptyTestProjectData.SemanticIds.PACKAGE_1_ID, GeneralViewEmptyTestProjectData.SemanticIds.VIEW_USAGE_ID); - List filters = List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + List filters = List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONExplorerTreeDescriptionId, expandedItemIds, filters); diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewAsOnNodeTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewAsOnNodeTests.java index 2b745164c..c1dde414f 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewAsOnNodeTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewAsOnNodeTests.java @@ -26,8 +26,11 @@ import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramEventInput; import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramRefreshedEventPayload; import org.eclipse.sirius.components.collaborative.trees.api.TreeFilter; +import org.eclipse.sirius.components.core.api.IEditingContextSearchService; +import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; import org.eclipse.sirius.components.diagrams.tests.navigation.DiagramNavigator; import org.eclipse.sirius.components.trees.TreeItem; +import org.eclipse.sirius.components.trees.description.TreeDescription; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.tests.services.api.IGivenCommittedTransaction; @@ -43,7 +46,7 @@ import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator; import org.eclipse.syson.sysml.SysmlPackage; import org.eclipse.syson.sysml.helper.LabelConstants; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.view.SysONTreeFilterProvider; import org.eclipse.syson.tree.explorer.view.SysONTreeViewDescriptionProvider; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers; @@ -98,6 +101,12 @@ public class GVViewAsOnNodeTests extends AbstractIntegrationTests { @Autowired private SysONTreeFilterProvider sysonTreeFilterProvider; + @Autowired + private IRepresentationDescriptionSearchService representationDescriptionSearchService; + + @Autowired + private IEditingContextSearchService editingContextSearchService; + private final IDescriptionNameGenerator descriptionNameGenerator = new SDVDescriptionNameGenerator(); private Flux givenSubscriptionToDiagram() { @@ -178,7 +187,13 @@ public void testViewAsIVOnPartUsage() { // the explorer view has a new ViewUsage with a diagram var sysONExplorerTreeDescriptionId = this.sysonTreeViewDescriptionProvider.getDescriptionId(); - var defaultFilters = this.sysonTreeFilterProvider.get(null, null).stream() + var optionalEditingContext = this.editingContextSearchService.findById(ViewAsOnNodeTestProjectData.EDITING_CONTEXT_ID); + TreeDescription treeDescription = optionalEditingContext + .flatMap(editingContext -> this.representationDescriptionSearchService.findById(editingContext, sysONExplorerTreeDescriptionId)) + .filter(TreeDescription.class::isInstance) + .map(TreeDescription.class::cast) + .orElse(null); + var defaultFilters = this.sysonTreeFilterProvider.get(null, treeDescription).stream() .filter(TreeFilter::defaultState) .map(TreeFilter::id) .toList(); diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewUsageTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewUsageTests.java index 4745f605f..2b64c50ed 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewUsageTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewUsageTests.java @@ -28,9 +28,12 @@ import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramEventInput; import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramRefreshedEventPayload; import org.eclipse.sirius.components.collaborative.trees.api.TreeFilter; +import org.eclipse.sirius.components.core.api.IEditingContextSearchService; +import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; import org.eclipse.sirius.components.diagrams.Diagram; import org.eclipse.sirius.components.diagrams.tests.navigation.DiagramNavigator; import org.eclipse.sirius.components.trees.TreeItem; +import org.eclipse.sirius.components.trees.description.TreeDescription; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; @@ -53,7 +56,7 @@ import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator; import org.eclipse.syson.sysml.SysmlPackage; import org.eclipse.syson.sysml.helper.LabelConstants; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.view.SysONTreeFilterProvider; import org.eclipse.syson.tree.explorer.view.SysONTreeViewDescriptionProvider; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers; @@ -131,6 +134,12 @@ public class GVViewUsageTests extends AbstractIntegrationTests { @Autowired private ExpandAllTreeItemTester expandAllTreeItemTester; + @Autowired + private IRepresentationDescriptionSearchService representationDescriptionSearchService; + + @Autowired + private IEditingContextSearchService editingContextSearchService; + private DiagramDescriptionIdProvider diagramDescriptionIdProvider; private StepVerifier.Step verifier; @@ -197,7 +206,13 @@ public void setUp() { this.diagramDescriptionIdProvider = new DiagramDescriptionIdProvider(this.diagramDescription, this.diagramIdProvider); this.sysONExplorerTreeDescriptionId = this.sysonTreeViewDescriptionProvider.getDescriptionId(); - this.defaultFilters = this.sysonTreeFilterProvider.get(null, null).stream() + var optionalEditingContext = this.editingContextSearchService.findById(GeneralViewViewTestProjectData.EDITING_CONTEXT_ID); + TreeDescription treeDescription = optionalEditingContext + .flatMap(editingContext -> this.representationDescriptionSearchService.findById(editingContext, this.sysONExplorerTreeDescriptionId)) + .filter(TreeDescription.class::isInstance) + .map(TreeDescription.class::cast) + .orElse(null); + this.defaultFilters = this.sysonTreeFilterProvider.get(null, treeDescription).stream() .filter(TreeFilter::defaultState) .map(TreeFilter::id) .toList(); diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/explorer/view/ExplorerViewControllerIntegrationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/explorer/view/ExplorerViewControllerIntegrationTests.java index 15db02cc0..fb46da10d 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/explorer/view/ExplorerViewControllerIntegrationTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/explorer/view/ExplorerViewControllerIntegrationTests.java @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.trees.Tree; import org.eclipse.sirius.components.trees.TreeItem; import org.eclipse.sirius.components.trees.tests.graphql.InitialDirectEditTreeItemLabelQueryRunner; +import org.eclipse.sirius.components.trees.tests.graphql.TreeFiltersQueryRunner; import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; @@ -42,7 +43,7 @@ import org.eclipse.syson.AbstractIntegrationTests; import org.eclipse.syson.application.data.ExplorerViewDirectEditTestProjectData; import org.eclipse.syson.application.data.GeneralViewEmptyTestProjectData; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.view.SysONTreeViewDescriptionProvider; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -126,6 +127,9 @@ private record TreeItemMatcher(Function treeItemFinder, Predicat @Autowired private SysONTreeViewDescriptionProvider sysONTreeViewDescriptionProvider; + @Autowired + private TreeFiltersQueryRunner treeFiltersQueryRunner; + @BeforeEach public void beforeEach() { this.givenInitialServerState.initialize(); @@ -174,7 +178,7 @@ public void canCreateInterconnectionViewOnPackage() { @Test public void testDirectEditOnViewUsage() { var expandedIds = this.getAllTreeItemIds(); - var activatedFilters = List.of(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + var activatedFilters = List.of(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var treeRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONTreeViewDescriptionProvider.getDescriptionId(), expandedIds, activatedFilters); var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, treeRepresentationId); @@ -204,7 +208,7 @@ public void testDirectEditOnViewUsage() { @Test public void testDirectEditOnElementWithShortName() { var expandedIds = this.getAllTreeItemIds(); - var activatedFilters = List.of(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + var activatedFilters = List.of(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); var treeRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONTreeViewDescriptionProvider.getDescriptionId(), expandedIds, activatedFilters); var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, treeRepresentationId); @@ -229,7 +233,7 @@ public void testDirectEditOnElementWithShortName() { @Test public void testHideExposeElementFilter() { var expandedIds = this.getAllTreeItemIds(); - var activatedFilters = List.of(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); + var activatedFilters = List.of(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); var treeRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONTreeViewDescriptionProvider.getDescriptionId(), expandedIds, activatedFilters); var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, treeRepresentationId); @@ -243,6 +247,43 @@ public void testHideExposeElementFilter() { .verify(Duration.ofSeconds(10)); } + @DisplayName("GIVEN the SysON Explorer View, WHEN querying the filters, THEN the syson filters are returned") + @Sql(scripts = { ExplorerViewDirectEditTestProjectData.SCRIPT_PATH }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, + config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) + @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) + @Test + public void testSysONFiltersOnSysONExplorer() { + Map variables = Map.of( + "editingContextId", ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, + "representationDescriptionId", this.sysONTreeViewDescriptionProvider.getDescriptionId() + ); + var result = this.treeFiltersQueryRunner.run(variables); + + List treeFilterIds = JsonPath.read(result, "$.data.viewer.editingContext.representationDescription.filters[*].id"); + assertThat(treeFilterIds).containsExactlyInAnyOrder(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, + SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID, + SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, + SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID, + SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, + SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); + } + + @DisplayName("GIVEN the Sirius Explorer View, WHEN querying the filters, THEN no syson filters are returned") + @Sql(scripts = { ExplorerViewDirectEditTestProjectData.SCRIPT_PATH }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, + config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) + @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) + @Test + public void testSysONFiltersOnSiriusExplorer() { + Map variables = Map.of( + "editingContextId", ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, + "representationDescriptionId", "explorer_tree_description" + ); + var result = this.treeFiltersQueryRunner.run(variables); + + List treeFilterIds = JsonPath.read(result, "$.data.viewer.editingContext.representationDescription.filters[*].id"); + assertThat(treeFilterIds).isEmpty(); + } + private List getAllTreeItemIds() { var optionalEditingContext = this.editingContextSearchService.findById(ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID) .filter(IEMFEditingContext.class::isInstance) diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/tree/explorer/view/handlers/DropTreeItemHandlerTest.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/tree/explorer/view/handlers/DropTreeItemHandlerTest.java index e98a3f960..8f6aa6016 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/tree/explorer/view/handlers/DropTreeItemHandlerTest.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/tree/explorer/view/handlers/DropTreeItemHandlerTest.java @@ -35,7 +35,7 @@ import org.eclipse.syson.AbstractIntegrationTests; import org.eclipse.syson.SysONTestsProperties; import org.eclipse.syson.application.data.SimpleProjectElementsTestProjectData; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.view.SysONTreeViewDescriptionProvider; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -93,7 +93,7 @@ public void checkDnDPartDefinitionOnPackage() { SimpleProjectElementsTestProjectData.DOCUMENT_ID.toString()); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.treeProvider.getDescriptionId(), expandedIds, - List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)); + List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID)); var input = new ExplorerEventInput(UUID.randomUUID(), SimpleProjectElementsTestProjectData.EDITING_CONTEXT_ID, explorerRepresentationId); var flux = this.treeEventSubscriptionRunner.run(input); @@ -161,7 +161,7 @@ public void checkForbiddenDropOnDescendant() { SimpleProjectElementsTestProjectData.DOCUMENT_ID.toString()); var explorerRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.treeProvider.getDescriptionId(), expandedIds, - List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)); + List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID)); var input = new ExplorerEventInput(UUID.randomUUID(), SimpleProjectElementsTestProjectData.EDITING_CONTEXT_ID, explorerRepresentationId); var flux = this.treeEventSubscriptionRunner.run(input); diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideExposeElementsTreeItemAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideExposeElementsTreeItemAlteredContentProvider.java index 4d00a84eb..10a21de1c 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideExposeElementsTreeItemAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideExposeElementsTreeItemAlteredContentProvider.java @@ -37,7 +37,7 @@ public HideExposeElementsTreeItemAlteredContentProvider(ISysONExplorerFilterServ @Override public boolean canHandle(Object object, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideKerMLStandardLibrariesTreeAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideKerMLStandardLibrariesTreeAlteredContentProvider.java index 83a3ddee9..ddcbbe401 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideKerMLStandardLibrariesTreeAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideKerMLStandardLibrariesTreeAlteredContentProvider.java @@ -37,7 +37,7 @@ public HideKerMLStandardLibrariesTreeAlteredContentProvider(ISysONExplorerFilter @Override public boolean canHandle(IEditingContext editingContext, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideMembershipsTreeItemAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideMembershipsTreeItemAlteredContentProvider.java index efeee4826..c216e1aa5 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideMembershipsTreeItemAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideMembershipsTreeItemAlteredContentProvider.java @@ -36,7 +36,7 @@ public HideMembershipsTreeItemAlteredContentProvider(ISysONExplorerFilterService @Override public boolean canHandle(Object object, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideRootNamespaceTreeItemAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideRootNamespaceTreeItemAlteredContentProvider.java index 82f706fee..59b118888 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideRootNamespaceTreeItemAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideRootNamespaceTreeItemAlteredContentProvider.java @@ -36,7 +36,7 @@ public HideRootNamespaceTreeItemAlteredContentProvider(ISysONExplorerFilterServi @Override public boolean canHandle(Object object, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideSysMLStandardLibrariesTreeAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideSysMLStandardLibrariesTreeAlteredContentProvider.java index 4a74eccce..b30dae7e5 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideSysMLStandardLibrariesTreeAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideSysMLStandardLibrariesTreeAlteredContentProvider.java @@ -37,7 +37,7 @@ public HideSysMLStandardLibrariesTreeAlteredContentProvider(ISysONExplorerFilter @Override public boolean canHandle(IEditingContext editingContext, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideUserLibrariesTreeAlteredContentProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideUserLibrariesTreeAlteredContentProvider.java index fc3292b3b..1e1eddb5f 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideUserLibrariesTreeAlteredContentProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/HideUserLibrariesTreeAlteredContentProvider.java @@ -42,7 +42,7 @@ public HideUserLibrariesTreeAlteredContentProvider(ISysONExplorerFilterService f @Override public boolean canHandle(IEditingContext editingContext, List activeFilterIds) { - return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_USER_LIBRARIES_TREE_FILTER_ID); + return activeFilterIds.contains(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID); } @Override diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterConstants.java similarity index 52% rename from backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterProvider.java rename to backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterConstants.java index b61343c69..94ed5012d 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/filters/SysONTreeFilterConstants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024, 2025 Obeo. + * 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 @@ -12,22 +12,14 @@ *******************************************************************************/ package org.eclipse.syson.tree.explorer.filters; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; -import org.eclipse.sirius.components.collaborative.trees.api.ITreeFilterProvider; -import org.eclipse.sirius.components.collaborative.trees.api.TreeFilter; -import org.eclipse.sirius.components.trees.description.TreeDescription; -import org.springframework.stereotype.Service; - /** - * Specific tree filter provider for SysON. + * SysON tree filter constants. * - * @author arichard + * @author frouene */ -@Service -public class SysONTreeFilterProvider implements ITreeFilterProvider { +public class SysONTreeFilterConstants { public static final String HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID = UUID.nameUUIDFromBytes("SysONTreeItemMembershipsFilter".getBytes()).toString(); @@ -40,16 +32,4 @@ public class SysONTreeFilterProvider implements ITreeFilterProvider { public static final String HIDE_ROOT_NAMESPACES_ID = UUID.nameUUIDFromBytes("SysONTreeRootNamespacesFilter".getBytes()).toString(); public static final String HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID = UUID.nameUUIDFromBytes("SysONTreeExposeElementsFilter".getBytes()).toString(); - - @Override - public List get(String editingContextId, TreeDescription treeDescription) { - List filters = new ArrayList<>(); - filters.add(new TreeFilter(HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, "Hide Memberships", true)); - filters.add(new TreeFilter(HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID, "Hide KerML Standard Libraries", false)); - filters.add(new TreeFilter(HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, "Hide SysML Standard Libraries", false)); - filters.add(new TreeFilter(HIDE_USER_LIBRARIES_TREE_FILTER_ID, "Hide User Libraries", false)); - filters.add(new TreeFilter(HIDE_ROOT_NAMESPACES_ID, "Hide Root Namespaces", true)); - filters.add(new TreeFilter(HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID, "Hide Expose Elements", true)); - return filters; - } } diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/fragments/LibrariesDirectory.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/fragments/LibrariesDirectory.java index 41bef75f7..16773ae5d 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/fragments/LibrariesDirectory.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/fragments/LibrariesDirectory.java @@ -19,7 +19,7 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.RepresentationMetadata; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.services.api.ISysONExplorerFilterService; import org.eclipse.syson.tree.explorer.services.api.ISysONExplorerFragment; @@ -71,13 +71,13 @@ public List getIconURL() { @Override public boolean hasChildren(IEditingContext editingContext, List existingRepresentations, List expandedIds, List activeFilterIds) { - boolean result = !activeFilterIds.contains(SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID) - || !activeFilterIds.contains(SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID); + boolean result = !activeFilterIds.contains(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID) + || !activeFilterIds.contains(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID); if (!result) { // Check if the user libraries directory contains children, we don't want to display the libraries directory // if it only contains empty directories. UserLibrariesDirectory userLibrariesDirectory = new UserLibrariesDirectory("User Libraries", this, this.filterService); - result = !activeFilterIds.contains(SysONTreeFilterProvider.HIDE_USER_LIBRARIES_TREE_FILTER_ID) + result = !activeFilterIds.contains(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID) && userLibrariesDirectory.hasChildren(editingContext, existingRepresentations, expandedIds, activeFilterIds); } return result; @@ -86,13 +86,13 @@ public boolean hasChildren(IEditingContext editingContext, List getChildren(IEditingContext editingContext, List existingRepresentations, List expandedIds, List activeFilterIds) { List result = new ArrayList<>(); - if (!activeFilterIds.contains(SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (!activeFilterIds.contains(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { result.add(new KerMLStandardLibraryDirectory(this, this.filterService)); } - if (!activeFilterIds.contains(SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (!activeFilterIds.contains(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { result.add(new SysMLStandardLibraryDirectory(this, this.filterService)); } - if (!activeFilterIds.contains(SysONTreeFilterProvider.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { + if (!activeFilterIds.contains(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { UserLibrariesDirectory userLibrariesDirectory = new UserLibrariesDirectory("User libraries", this, this.filterService); if (userLibrariesDirectory.hasChildren(editingContext, existingRepresentations, expandedIds, activeFilterIds)) { // Add the user libraries directory only if it contains children. diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/services/SysONExplorerFilterService.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/services/SysONExplorerFilterService.java index 777292f01..dfcb519c8 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/services/SysONExplorerFilterService.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/explorer/services/SysONExplorerFilterService.java @@ -25,7 +25,7 @@ import org.eclipse.syson.sysml.Membership; import org.eclipse.syson.sysml.Namespace; import org.eclipse.syson.sysml.util.ElementUtil; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.services.api.ISysONExplorerFilterService; import org.springframework.stereotype.Service; @@ -129,22 +129,22 @@ public List hideExposeElements(List elements) { @Override public List applyFilters(IEditingContext editingContext, List elements, List activeFilterIds) { List alteredElements = new ArrayList<>(elements); - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID)) { alteredElements = this.hideMemberships(alteredElements); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { alteredElements = this.hideKerMLStandardLibraries(alteredElements); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { alteredElements = this.hideSysMLStandardLibraries(alteredElements); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { alteredElements = this.hideUserLibraries(editingContext, alteredElements); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID)) { alteredElements = this.hideRootNamespace(alteredElements); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) { alteredElements = this.hideExposeElements(alteredElements); } return alteredElements; diff --git a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/impactanalysis/services/SysONChangeDescriptionDataTreeProvider.java b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/impactanalysis/services/SysONChangeDescriptionDataTreeProvider.java index 634bd24a8..bf759646b 100644 --- a/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/impactanalysis/services/SysONChangeDescriptionDataTreeProvider.java +++ b/backend/services/syson-tree-services/src/main/java/org/eclipse/syson/tree/impactanalysis/services/SysONChangeDescriptionDataTreeProvider.java @@ -46,7 +46,7 @@ import org.eclipse.sirius.web.application.impactanalysis.services.FeatureModification; import org.eclipse.sirius.web.application.impactanalysis.services.api.IChangeDescriptionDataTreeProviderDelegate; import org.eclipse.sirius.web.application.library.services.LibraryMetadataAdapter; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.services.api.ISysONExplorerFilterService; import org.springframework.stereotype.Service; @@ -54,7 +54,7 @@ * Provides a data tree representing a change description in SysON. *

* The returned data tree contains resource and object changes, but do not display intermediate elements (like Memberships). The filtered elements correspond to the default filters of the SysON - * explorer (see {@link SysONTreeFilterProvider}). + * explorer. *

* * @author gdaniel @@ -476,11 +476,11 @@ private Optional getParent(Object object) { } private List getDefaultFilters() { - return List.of(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, - SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID, - SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, - SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID, - SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); + return List.of(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, + SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID, + SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, + SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, + SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID); } private List getFeatureAsList(EObject eObject, EStructuralFeature eStructuralFeature) { diff --git a/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/SysONTreeFilterProvider.java b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/SysONTreeFilterProvider.java new file mode 100644 index 000000000..c037b5bba --- /dev/null +++ b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/SysONTreeFilterProvider.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * 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 + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.syson.tree.explorer.view; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.sirius.components.collaborative.trees.api.ITreeFilterProvider; +import org.eclipse.sirius.components.collaborative.trees.api.TreeFilter; +import org.eclipse.sirius.components.trees.description.TreeDescription; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; +import org.springframework.stereotype.Service; + +/** + * Specific tree filter provider for SysON. + * + * @author arichard + */ +@Service +public class SysONTreeFilterProvider implements ITreeFilterProvider { + + @Override + public List get(String editingContextId, TreeDescription treeDescription) { + List filters = new ArrayList<>(); + if (SysONExplorerTreeDescriptionProvider.SYSON_EXPLORER.equals(treeDescription.getLabel())) { + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, "Hide Memberships", true)); + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID, "Hide KerML Standard Libraries", false)); + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, "Hide SysML Standard Libraries", false)); + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID, "Hide User Libraries", false)); + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID, "Hide Root Namespaces", true)); + filters.add(new TreeFilter(SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID, "Hide Expose Elements", true)); + } + return filters; + } +} diff --git a/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerTreePathProvider.java b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerTreePathProvider.java index 0b51469f3..a236509db 100644 --- a/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerTreePathProvider.java +++ b/backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerTreePathProvider.java @@ -36,7 +36,7 @@ import org.eclipse.syson.sysml.Expose; import org.eclipse.syson.sysml.Membership; import org.eclipse.syson.sysml.Namespace; -import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterProvider; +import org.eclipse.syson.tree.explorer.filters.SysONTreeFilterConstants; import org.eclipse.syson.tree.explorer.services.api.ISysONExplorerFilterService; import org.eclipse.syson.tree.explorer.view.SysONExplorerTreeDescriptionProvider; import org.springframework.stereotype.Service; @@ -136,22 +136,22 @@ private Optional getTreeDescription(IEditingContext editingCont private List applyFilters(IEditingContext editingContext, List elements, List activeFilterIds) { var alteredElements = new ArrayList<>(elements); - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID)) { alteredElements.removeIf(Membership.class::isInstance); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_KERML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { alteredElements.removeIf(this.filterService::isKerMLStandardLibrary); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID)) { alteredElements.removeIf(this.filterService::isSysMLStandardLibrary); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_USER_LIBRARIES_TREE_FILTER_ID)) { alteredElements.removeIf(element -> this.filterService.isUserLibrary(editingContext, element)); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_ROOT_NAMESPACES_ID)) { alteredElements.removeIf(e -> e instanceof Namespace ns && this.utilService.isRootNamespace(ns)); } - if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) { + if (activeFilterIds.contains(SysONTreeFilterConstants.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) { alteredElements.removeIf(Expose.class::isInstance); } return alteredElements;