Skip to content

Commit 5300b89

Browse files
committed
[1589] Add filter to hide expose elements in SysON Explorer View
Bug: #1589 Signed-off-by: Florian ROUËNÉ <florian.rouene@obeosoft.com>
1 parent f55acbe commit 5300b89

13 files changed

Lines changed: 118 additions & 6 deletions

File tree

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
=== New features
1818

1919
- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Display inherited `PortUsages` as border nodes in diagrams
20+
- https://github.com/eclipse-syson/syson/issues/1589[#1589] [explorer] Add a filter to hide expose elements in `ViewUsage`
2021

2122
== v2025.10.0
2223

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/explorer/view/ExplorerViewControllerIntegrationTests.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,28 @@ public void testDirectEditOnViewUsage() {
142142

143143
}
144144

145+
@DisplayName("GIVEN the SysON Explorer View, WHEN hide expose element filter is active, THEN the expose element are not return as tree item")
146+
@Sql(scripts = { ExplorerViewDirectEditTestProjectData.SCRIPT_PATH }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
147+
config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
148+
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
149+
@Test
150+
public void testHideExposeElementFilter() {
151+
var expandedIds = this.getAllTreeItemIds();
152+
var activatedFilters = List.of(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID, SysONTreeFilterProvider.HIDE_MEMBERSHIPS_TREE_ITEM_FILTER_ID, SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID);
153+
var treeRepresentationId = this.representationIdBuilder.buildExplorerRepresentationId(this.sysONTreeViewDescriptionProvider.getDescriptionId(), expandedIds, activatedFilters);
154+
155+
var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID, treeRepresentationId);
156+
var treeFlux = this.treeEventSubscriptionRunner.run(treeEventInput);
157+
158+
var hasNoExposeElement = assertRefreshedTreeThat(tree -> assertThat(tree.getChildren()).allSatisfy(this::assertNoExposeChildren));
159+
160+
StepVerifier.create(treeFlux)
161+
.consumeNextWith(hasNoExposeElement)
162+
.thenCancel()
163+
.verify(Duration.ofSeconds(100));
164+
165+
}
166+
145167
private List<String> getAllTreeItemIds() {
146168
var optionalEditingContext = this.editingContextSearchService.findById(ExplorerViewDirectEditTestProjectData.EDITING_CONTEXT_ID)
147169
.filter(IEMFEditingContext.class::isInstance)
@@ -179,4 +201,17 @@ private Runnable triggerDirectEditTreeItemLabel(String editingContextId, String
179201
assertThat(initialDirectEditLabel).isEqualTo(expectedLabel);
180202
};
181203
}
204+
205+
private void assertNoExposeChildren(TreeItem item) {
206+
if (item == null) {
207+
return;
208+
}
209+
assertThat(item.getKind()).doesNotEndWith("entity=MembershipExpose");
210+
List<TreeItem> children = item.getChildren();
211+
if (children != null) {
212+
for (TreeItem child : children) {
213+
this.assertNoExposeChildren(child);
214+
}
215+
}
216+
}
182217
}

backend/application/syson-application/src/test/resources/scripts/database-content/ExplorerView-DirectEdit.sql

Lines changed: 4 additions & 2 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Obeo.
3+
* This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v2.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Obeo - initial API and implementation
12+
*******************************************************************************/
13+
package org.eclipse.syson.tree.explorer.view.filters;
14+
15+
import java.util.List;
16+
import java.util.Objects;
17+
18+
import org.eclipse.sirius.components.representations.VariableManager;
19+
import org.eclipse.sirius.web.application.views.explorer.services.api.IExplorerTreeItemAlteredContentProvider;
20+
import org.eclipse.syson.tree.explorer.view.services.api.ISysONExplorerFilterService;
21+
import org.springframework.stereotype.Service;
22+
23+
/**
24+
* An implementation of {@link IExplorerTreeItemAlteredContentProvider} allowing to hide exposed elements tree items from
25+
* Explorer tree.
26+
*
27+
* @author frouene
28+
*/
29+
@Service
30+
public class HideExposeElementsTreeItemAlteredContentProvider implements IExplorerTreeItemAlteredContentProvider {
31+
32+
private final ISysONExplorerFilterService filterService;
33+
34+
public HideExposeElementsTreeItemAlteredContentProvider(ISysONExplorerFilterService filterService) {
35+
this.filterService = Objects.requireNonNull(filterService);
36+
}
37+
38+
@Override
39+
public boolean canHandle(Object object, List<String> activeFilterIds) {
40+
return activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID);
41+
}
42+
43+
@Override
44+
public List<Object> apply(List<Object> computedChildren, VariableManager variableManager) {
45+
return this.filterService.hideExposeElements(computedChildren);
46+
}
47+
}

backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/filters/SysONTreeFilterProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2024 Obeo.
2+
* Copyright (c) 2024, 2025 Obeo.
33
* This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v2.0
55
* which accompanies this distribution, and is available at
@@ -39,6 +39,8 @@ public class SysONTreeFilterProvider implements ITreeFilterProvider {
3939

4040
public static final String HIDE_ROOT_NAMESPACES_ID = UUID.nameUUIDFromBytes("SysONTreeRootNamespacesFilter".getBytes()).toString();
4141

42+
public static final String HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID = UUID.nameUUIDFromBytes("SysONTreeExposeElementsFilter".getBytes()).toString();
43+
4244
@Override
4345
public List<TreeFilter> get(String editingContextId, TreeDescription treeDescription, String representationId) {
4446
List<TreeFilter> filters = new ArrayList<>();
@@ -47,6 +49,7 @@ public List<TreeFilter> get(String editingContextId, TreeDescription treeDescrip
4749
filters.add(new TreeFilter(HIDE_SYSML_STANDARD_LIBRARIES_TREE_FILTER_ID, "Hide SysML Standard Libraries", false));
4850
filters.add(new TreeFilter(HIDE_USER_LIBRARIES_TREE_FILTER_ID, "Hide User Libraries", false));
4951
filters.add(new TreeFilter(HIDE_ROOT_NAMESPACES_ID, "Hide Root Namespaces", true));
52+
filters.add(new TreeFilter(HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID, "Hide Expose Elements", true));
5053
return filters;
5154
}
5255
}

backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerFilterService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.eclipse.emf.ecore.resource.Resource;
2020
import org.eclipse.syson.services.UtilService;
2121
import org.eclipse.syson.services.api.ISysONResourceService;
22+
import org.eclipse.syson.sysml.Expose;
2223
import org.eclipse.syson.sysml.Membership;
2324
import org.eclipse.syson.sysml.Namespace;
2425
import org.eclipse.syson.sysml.util.ElementUtil;
@@ -106,6 +107,13 @@ public List<Object> hideRootNamespace(List<Object> elements) {
106107
return alteredElements;
107108
}
108109

110+
@Override
111+
public List<Object> hideExposeElements(List<Object> elements) {
112+
return elements.stream()
113+
.filter(element -> !(element instanceof Expose))
114+
.toList();
115+
}
116+
109117
@Override
110118
public List<Object> applyFilters(List<?> elements, List<String> activeFilterIds) {
111119
List<Object> alteredElements = new ArrayList<>(elements);
@@ -124,6 +132,9 @@ public List<Object> applyFilters(List<?> elements, List<String> activeFilterIds)
124132
if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)) {
125133
alteredElements = this.hideRootNamespace(alteredElements);
126134
}
135+
if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) {
136+
alteredElements = this.hideExposeElements(alteredElements);
137+
}
127138
return alteredElements;
128139
}
129140

backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/SysONExplorerTreePathProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.eclipse.sirius.components.trees.Tree;
3434
import org.eclipse.sirius.components.trees.description.TreeDescription;
3535
import org.eclipse.syson.services.UtilService;
36+
import org.eclipse.syson.sysml.Expose;
3637
import org.eclipse.syson.sysml.Membership;
3738
import org.eclipse.syson.sysml.Namespace;
3839
import org.eclipse.syson.tree.explorer.view.SysONExplorerTreeDescriptionProvider;
@@ -150,6 +151,9 @@ private List<Object> applyFilters(List<Object> elements, List<String> activeFilt
150151
if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_ROOT_NAMESPACES_ID)) {
151152
alteredElements.removeIf(e -> e instanceof Namespace ns && this.utilService.isRootNamespace(ns));
152153
}
154+
if (activeFilterIds.contains(SysONTreeFilterProvider.HIDE_EXPOSE_ELEMENTS_TREE_ITEM_FILTER_ID)) {
155+
alteredElements.removeIf(Expose.class::isInstance);
156+
}
153157
return alteredElements;
154158
}
155159
}

backend/views/syson-tree-explorer-view/src/main/java/org/eclipse/syson/tree/explorer/view/services/api/ISysONExplorerFilterService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2024 Obeo.
2+
* Copyright (c) 2024, 2025 Obeo.
33
* This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v2.0
55
* which accompanies this distribution, and is available at
@@ -37,5 +37,7 @@ public interface ISysONExplorerFilterService {
3737

3838
List<Object> hideRootNamespace(List<Object> elements);
3939

40+
List<Object> hideExposeElements(List<Object> elements);
41+
4042
List<Object> applyFilters(List<?> elements, List<String> activeFilterIds);
4143
}
16.3 KB
Loading
17.3 KB
Loading

0 commit comments

Comments
 (0)