Skip to content

Commit 024de8c

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 024de8c

11 files changed

Lines changed: 67 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.

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/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
24.4 KB
Loading

doc/content/modules/user-manual/pages/hands-on/how-tos/explorer.adoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,14 @@ Ensure the desired tree items are expanded to effectively use the filter and hig
5858
[#filter-explorer]
5959
=== Filter from kind
6060

61-
Three filters are available in the {explorer} to filter element by kind:
61+
Six filters are available in the {explorer} to filter element by kind:
6262

6363
* Hide Memberships,
6464
* Hide {kerml} Standard Libraries,
6565
* Hide {sysml} Standard Libraries.
66+
* Hide Root Namespaces
67+
* Hide User Librairies
68+
* Hide Root Namespaces
6669

6770
These filters allow to clear the {explorer} view.
6871
By hiding the technical elements, only the data directly exploited by the user are displayed, which make the model more readable in the {explorer} view.
@@ -72,4 +75,4 @@ To filter elements in the {explorer} by their kind using the filter tool:
7275
. Click filter button,
7376
. Select filters to activate.
7477

75-
image::hands-on-filter-element.png[Filter kind]
78+
image::hands-on-filter-element.png[Filter kind]

0 commit comments

Comments
 (0)