From 0102961c91e599838da2f5b04d46dd76b0530477 Mon Sep 17 00:00:00 2001 From: Jerome Gout Date: Thu, 22 Aug 2024 17:59:41 +0200 Subject: [PATCH] [3875] Refactor the tree event classes related to the explorer Bug: https://github.com/eclipse-sirius/sirius-web/issues/3875 Signed-off-by: Jerome Gout --- CHANGELOG.adoc | 1 + .../ModelBrowsersDescriptionProvider.java | 8 +-- .../reference/provider/ModelBrowserTests.java | 6 +-- .../src/components/ModelBrowserTreeView.tsx | 8 +-- .../explorer/ExplorerConfiguration.java} | 12 ++--- .../views/explorer/ExplorerEventInput.java} | 6 +-- .../ExplorerEventProcessorFactory.java} | 16 +++--- ...SubscriptionExplorerEventDataFetcher.java} | 14 +++-- .../main/resources/schema/explorer.graphqls | 11 ++++ .../ExplorerEventSubscriptionRunner.java} | 14 ++--- .../ExplorerExpandAllControllerTests.java | 10 ++-- ...orerNonSemanticElementControllerTests.java | 10 ++-- .../ExplorerTreeFilterControllerTests.java | 10 ++-- .../ExplorerTreePathControllerTests.java | 8 +-- .../ModelBrowserExpandAllControllerTests.java | 10 ++-- .../trees/TreeControllerIntegrationTests.java | 22 ++++---- .../collaborative/trees/TreeService.java | 4 +- .../trees/api/ITreeConfiguration.java | 25 +++++++++ .../src/main/resources/schema/tree.graphqls | 12 ----- .../src/views/ExplorerView.tsx | 2 + .../src/views/TreeView.tsx | 51 ++++++++++--------- .../src/views/TreeView.types.ts | 2 + .../src/views/getTreeEventSubscription.ts | 6 +-- 23 files changed, 150 insertions(+), 118 deletions(-) rename packages/{trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/TreeConfiguration.java => sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerConfiguration.java} (80%) rename packages/{trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/dto/TreeEventInput.java => sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventInput.java} (71%) rename packages/{trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeEventProcessorFactory.java => sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventProcessorFactory.java} (86%) rename packages/{trees/backend/sirius-components-trees-graphql/src/main/java/org/eclipse/sirius/components/trees/graphql/datafetchers/subscription/SubscriptionTreeEventDataFetcher.java => sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/SubscriptionExplorerEventDataFetcher.java} (76%) create mode 100644 packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/explorer.graphqls rename packages/{trees/backend/sirius-components-trees-tests/src/main/java/org/eclipse/sirius/components/trees/tests/graphql/TreeEventSubscriptionRunner.java => sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/explorer/ExplorerEventSubscriptionRunner.java} (72%) create mode 100644 packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/ITreeConfiguration.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index d790eca54a0..98c0fc6ec42 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -104,6 +104,7 @@ A migration participant has been added to automatically keep compatible all diag - https://github.com/eclipse-sirius/sirius-web/issues/3776[#3776] [trees] Remove unwanted dependency from the reference widget in the explorer - https://github.com/eclipse-sirius/sirius-web/issues/3777[#3777] [sirius-web] Add support for any kind of object as semantic element in the tree representation - https://github.com/eclipse-sirius/sirius-web/issues/3392[#3392] [diagram] Prevent edge from passing through another node +- https://github.com/eclipse-sirius/sirius-web/issues/3875[#3875] [sirius-web] Move explorer related code from components-trees to sirius-web-application == v2024.7.0 diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java index 11c316b9dda..6f503347871 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java @@ -32,7 +32,7 @@ import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.command.CommandParameter; import org.eclipse.emf.edit.domain.EditingDomain; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; +import org.eclipse.sirius.components.collaborative.trees.api.ITreeConfiguration; import org.eclipse.sirius.components.collaborative.widget.reference.api.IReferenceWidgetRootCandidateSearchProvider; import org.eclipse.sirius.components.core.CoreImageConstants; import org.eclipse.sirius.components.core.URLParser; @@ -95,7 +95,7 @@ public ModelBrowsersDescriptionProvider(IObjectService objectService, IURLParser @Override public List getRepresentationDescriptions(IEditingContext editingContext) { - Predicate containerDescriptionCanCreatePredicate = variableManager -> variableManager.get(TreeConfiguration.TREE_ID, String.class) + Predicate containerDescriptionCanCreatePredicate = variableManager -> variableManager.get(ITreeConfiguration.TREE_ID, String.class) .map(treeId -> treeId.startsWith(MODEL_BROWSER_CONTAINER_PREFIX)) .orElse(false); Function containerDescriptionIsSelectableProvider = variableManager -> { @@ -104,7 +104,7 @@ public List getRepresentationDescriptions(IEditingCo }; var containerDescription = this.getModelBrowserDescription(CONTAINER_DESCRIPTION_ID, containerDescriptionCanCreatePredicate, containerDescriptionIsSelectableProvider, this::getCreationScopeElements); - Predicate referenceDescriptionCanCreatePredicate = variableManager -> variableManager.get(TreeConfiguration.TREE_ID, String.class) + Predicate referenceDescriptionCanCreatePredicate = variableManager -> variableManager.get(ITreeConfiguration.TREE_ID, String.class) .map(treeId -> treeId.startsWith(MODEL_BROWSER_REFERENCE_PREFIX)) .orElse(false); Function referenceDescriptionIsSelectableProvider = variableManager -> { @@ -122,7 +122,7 @@ private TreeDescription getModelBrowserDescription(String descriptionId, Predica return TreeDescription.newTreeDescription(descriptionId) .label(REPRESENTATION_NAME) - .idProvider(variableManager -> variableManager.get(TreeConfiguration.TREE_ID, String.class).orElse(null)) + .idProvider(variableManager -> variableManager.get(ITreeConfiguration.TREE_ID, String.class).orElse(null)) .treeItemIdProvider(this::getTreeItemId) .kindProvider(this::getKind) .labelProvider(this::getLabel) diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/provider/ModelBrowserTests.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/provider/ModelBrowserTests.java index 76e4b11181c..1fc5a9e0f78 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/provider/ModelBrowserTests.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/provider/ModelBrowserTests.java @@ -16,7 +16,7 @@ import java.util.List; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; +import org.eclipse.sirius.components.collaborative.trees.api.ITreeConfiguration; import org.eclipse.sirius.components.collaborative.widget.reference.browser.ModelBrowsersDescriptionProvider; import org.eclipse.sirius.components.core.URLParser; import org.eclipse.sirius.components.core.api.IEditingContext; @@ -55,7 +55,7 @@ public void testModelBrowserDescriptionProvider() { variableManager.put(IEditingContext.EDITING_CONTEXT, editingContext); var referenceTreeId = "modelBrowser://reference"; - variableManager.put(TreeConfiguration.TREE_ID, referenceTreeId); + variableManager.put(ITreeConfiguration.TREE_ID, referenceTreeId); var tree = new TreeRenderer(variableManager, referenceBrowserDescription.get()).render(); assertThat(tree).isNotNull(); assertThat(tree.getId()).isEqualTo(referenceTreeId); @@ -63,7 +63,7 @@ public void testModelBrowserDescriptionProvider() { assertThat(tree.getKind()).isEqualTo(Tree.KIND); var containerTreeId = "modelBrowser://container"; - variableManager.put(TreeConfiguration.TREE_ID, containerTreeId); + variableManager.put(ITreeConfiguration.TREE_ID, containerTreeId); tree = new TreeRenderer(variableManager, containerBrowserDescription.get()).render(); assertThat(tree).isNotNull(); assertThat(tree.getId()).isEqualTo(containerTreeId); diff --git a/packages/forms/frontend/sirius-components-widget-reference/src/components/ModelBrowserTreeView.tsx b/packages/forms/frontend/sirius-components-widget-reference/src/components/ModelBrowserTreeView.tsx index 9db03cfedde..66622afdbfc 100644 --- a/packages/forms/frontend/sirius-components-widget-reference/src/components/ModelBrowserTreeView.tsx +++ b/packages/forms/frontend/sirius-components-widget-reference/src/components/ModelBrowserTreeView.tsx @@ -11,11 +11,11 @@ * Obeo - initial API and implementation *******************************************************************************/ -import { TreeView, TreeItemActionProps } from '@eclipse-sirius/sirius-components-trees'; -import IconButton from '@mui/material/IconButton'; -import { makeStyles } from 'tss-react/mui'; +import { TreeItemActionProps, TreeView } from '@eclipse-sirius/sirius-components-trees'; import UnfoldMoreIcon from '@mui/icons-material/UnfoldMore'; +import IconButton from '@mui/material/IconButton'; import { useState } from 'react'; +import { makeStyles } from 'tss-react/mui'; import { ModelBrowserFilterBar } from './ModelBrowserFilterBar'; import { ModelBrowserTreeViewProps, ModelBrowserTreeViewState } from './ModelBrowserTreeView.types'; @@ -69,6 +69,8 @@ export const ModelBrowserTreeView = ({ textToHighlight={state.filterBarText} markedItemIds={markedItemIds} treeItemActionRender={(props) => } + eventType="explorerEvent" + eventInputType="ExplorerEventInput" /> diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/TreeConfiguration.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerConfiguration.java similarity index 80% rename from packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/TreeConfiguration.java rename to packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerConfiguration.java index fe1e07153a7..750005e96d1 100644 --- a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/TreeConfiguration.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerConfiguration.java @@ -10,23 +10,21 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.collaborative.trees.api; +package org.eclipse.sirius.web.application.views.explorer; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; -import org.eclipse.sirius.components.collaborative.api.IRepresentationConfiguration; +import org.eclipse.sirius.components.collaborative.trees.api.ITreeConfiguration; /** - * The configuration of the tree event processor. + * The configuration of the explorer event processor. * * @author sbegaudeau */ -public class TreeConfiguration implements IRepresentationConfiguration { - - public static final String TREE_ID = "treeId"; +public class ExplorerConfiguration implements ITreeConfiguration { private final String treeId; @@ -34,7 +32,7 @@ public class TreeConfiguration implements IRepresentationConfiguration { private final List expanded; - public TreeConfiguration(String editingContextId, String treeId, List expanded, List activeFilters) { + public ExplorerConfiguration(String editingContextId, String treeId, List expanded, List activeFilters) { this.activeFilterIds = Objects.requireNonNull(activeFilters); this.expanded = Objects.requireNonNull(expanded); diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/dto/TreeEventInput.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventInput.java similarity index 71% rename from packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/dto/TreeEventInput.java rename to packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventInput.java index 51051c087e4..bc063a2e2ad 100644 --- a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/dto/TreeEventInput.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventInput.java @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.collaborative.trees.dto; +package org.eclipse.sirius.web.application.views.explorer; import java.util.List; import java.util.UUID; @@ -18,9 +18,9 @@ import org.eclipse.sirius.components.core.api.IInput; /** - * The input of the tree event subscription. + * The input of the explorer event subscription. * * @author sbegaudeau */ -public record TreeEventInput(UUID id, String editingContextId, String treeId, List expanded, List activeFilterIds) implements IInput { +public record ExplorerEventInput(UUID id, String editingContextId, String treeId, List expanded, List activeFilterIds) implements IInput { } diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeEventProcessorFactory.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventProcessorFactory.java similarity index 86% rename from packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeEventProcessorFactory.java rename to packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventProcessorFactory.java index d911fe13363..10131037d8f 100644 --- a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeEventProcessorFactory.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/ExplorerEventProcessorFactory.java @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.collaborative.trees; +package org.eclipse.sirius.web.application.views.explorer; import java.util.List; import java.util.Objects; @@ -22,9 +22,9 @@ import org.eclipse.sirius.components.collaborative.api.IRepresentationEventProcessorFactory; import org.eclipse.sirius.components.collaborative.api.IRepresentationRefreshPolicyRegistry; import org.eclipse.sirius.components.collaborative.api.ISubscriptionManagerFactory; +import org.eclipse.sirius.components.collaborative.trees.TreeEventProcessor; import org.eclipse.sirius.components.collaborative.trees.api.ITreeEventHandler; import org.eclipse.sirius.components.collaborative.trees.api.ITreeService; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; import org.eclipse.sirius.components.collaborative.trees.api.TreeCreationParameters; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; @@ -40,7 +40,7 @@ * @author sbegaudeau */ @Service -public class TreeEventProcessorFactory implements IRepresentationEventProcessorFactory { +public class ExplorerEventProcessorFactory implements IRepresentationEventProcessorFactory { public static final String TREE_ID = UUID.nameUUIDFromBytes("explorer_tree_description".getBytes()).toString(); @@ -54,7 +54,7 @@ public class TreeEventProcessorFactory implements IRepresentationEventProcessorF private final IRepresentationRefreshPolicyRegistry representationRefreshPolicyRegistry; - public TreeEventProcessorFactory(IRepresentationDescriptionSearchService representationDescriptionSearchService, ITreeService treeService, List treeEventHandlers, + public ExplorerEventProcessorFactory(IRepresentationDescriptionSearchService representationDescriptionSearchService, ITreeService treeService, List treeEventHandlers, ISubscriptionManagerFactory subscriptionManagerFactory, IRepresentationRefreshPolicyRegistry representationRefreshPolicyRegistry) { this.representationDescriptionSearchService = Objects.requireNonNull(representationDescriptionSearchService); this.treeService = Objects.requireNonNull(treeService); @@ -65,12 +65,12 @@ public TreeEventProcessorFactory(IRepresentationDescriptionSearchService represe @Override public boolean canHandle(IRepresentationConfiguration configuration) { - return configuration instanceof TreeConfiguration; + return configuration instanceof ExplorerConfiguration; } @Override public Optional createRepresentationEventProcessor(IRepresentationConfiguration configuration, IEditingContext editingContext) { - if (configuration instanceof TreeConfiguration treeConfiguration) { + if (configuration instanceof ExplorerConfiguration treeConfiguration) { Optional optionalTreeDescription = this.findTreeDescription(editingContext, treeConfiguration); if (optionalTreeDescription.isPresent()) { @@ -91,9 +91,9 @@ public Optional createRepresentationEventProcesso return Optional.empty(); } - private Optional findTreeDescription(IEditingContext editingContext, TreeConfiguration treeConfiguration) { + private Optional findTreeDescription(IEditingContext editingContext, ExplorerConfiguration treeConfiguration) { VariableManager variableManager = new VariableManager(); - variableManager.put(TreeConfiguration.TREE_ID, treeConfiguration.getId()); + variableManager.put(ExplorerConfiguration.TREE_ID, treeConfiguration.getId()); return this.representationDescriptionSearchService .findAll(editingContext).values().stream() .filter(TreeDescription.class::isInstance) diff --git a/packages/trees/backend/sirius-components-trees-graphql/src/main/java/org/eclipse/sirius/components/trees/graphql/datafetchers/subscription/SubscriptionTreeEventDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/SubscriptionExplorerEventDataFetcher.java similarity index 76% rename from packages/trees/backend/sirius-components-trees-graphql/src/main/java/org/eclipse/sirius/components/trees/graphql/datafetchers/subscription/SubscriptionTreeEventDataFetcher.java rename to packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/SubscriptionExplorerEventDataFetcher.java index 09dd6db54d7..c8b8fc28448 100644 --- a/packages/trees/backend/sirius-components-trees-graphql/src/main/java/org/eclipse/sirius/components/trees/graphql/datafetchers/subscription/SubscriptionTreeEventDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/SubscriptionExplorerEventDataFetcher.java @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.trees.graphql.datafetchers.subscription; +package org.eclipse.sirius.web.application.views.explorer; import com.fasterxml.jackson.databind.ObjectMapper; @@ -19,8 +19,6 @@ import java.util.Objects; import org.eclipse.sirius.components.annotations.spring.graphql.SubscriptionDataFetcher; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.core.api.IPayload; import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates; import org.eclipse.sirius.components.graphql.api.IEventProcessorSubscriptionProvider; @@ -37,8 +35,8 @@ * @author hmarchadour * @author pcdavid */ -@SubscriptionDataFetcher(type = "Subscription", field = "treeEvent") -public class SubscriptionTreeEventDataFetcher implements IDataFetcherWithFieldCoordinates>> { +@SubscriptionDataFetcher(type = "Subscription", field = "explorerEvent") +public class SubscriptionExplorerEventDataFetcher implements IDataFetcherWithFieldCoordinates>> { private static final String INPUT_ARGUMENT = "input"; @@ -48,7 +46,7 @@ public class SubscriptionTreeEventDataFetcher implements IDataFetcherWithFieldCo private final IEventProcessorSubscriptionProvider eventProcessorSubscriptionProvider; - public SubscriptionTreeEventDataFetcher(ObjectMapper objectMapper, IExceptionWrapper exceptionWrapper, IEventProcessorSubscriptionProvider eventProcessorSubscriptionProvider) { + public SubscriptionExplorerEventDataFetcher(ObjectMapper objectMapper, IExceptionWrapper exceptionWrapper, IEventProcessorSubscriptionProvider eventProcessorSubscriptionProvider) { this.objectMapper = Objects.requireNonNull(objectMapper); this.exceptionWrapper = Objects.requireNonNull(exceptionWrapper); this.eventProcessorSubscriptionProvider = Objects.requireNonNull(eventProcessorSubscriptionProvider); @@ -57,8 +55,8 @@ public SubscriptionTreeEventDataFetcher(ObjectMapper objectMapper, IExceptionWra @Override public Publisher> get(DataFetchingEnvironment environment) throws Exception { Object argument = environment.getArgument(INPUT_ARGUMENT); - var input = this.objectMapper.convertValue(argument, TreeEventInput.class); - var treeConfiguration = new TreeConfiguration(input.editingContextId(), input.treeId(), input.expanded(), input.activeFilterIds()); + var input = this.objectMapper.convertValue(argument, ExplorerEventInput.class); + var treeConfiguration = new ExplorerConfiguration(input.editingContextId(), input.treeId(), input.expanded(), input.activeFilterIds()); Map localContext = new HashMap<>(); localContext.put(LocalContextConstants.EDITING_CONTEXT_ID, input.editingContextId()); diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/explorer.graphqls b/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/explorer.graphqls new file mode 100644 index 00000000000..e93489e9e62 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/explorer.graphqls @@ -0,0 +1,11 @@ +extend type Subscription { + explorerEvent(input: ExplorerEventInput!): TreeEventPayload! +} + +input ExplorerEventInput { + id: ID! + treeId: String! + editingContextId: ID! + expanded: [String!]! + activeFilterIds: [String!]! +} \ No newline at end of file diff --git a/packages/trees/backend/sirius-components-trees-tests/src/main/java/org/eclipse/sirius/components/trees/tests/graphql/TreeEventSubscriptionRunner.java b/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/explorer/ExplorerEventSubscriptionRunner.java similarity index 72% rename from packages/trees/backend/sirius-components-trees-tests/src/main/java/org/eclipse/sirius/components/trees/tests/graphql/TreeEventSubscriptionRunner.java rename to packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/explorer/ExplorerEventSubscriptionRunner.java index 7eeff525780..5607de109e7 100644 --- a/packages/trees/backend/sirius-components-trees-tests/src/main/java/org/eclipse/sirius/components/trees/tests/graphql/TreeEventSubscriptionRunner.java +++ b/packages/sirius-web/backend/sirius-web-tests/src/main/java/org/eclipse/sirius/web/tests/services/explorer/ExplorerEventSubscriptionRunner.java @@ -10,13 +10,13 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.trees.tests.graphql; +package org.eclipse.sirius.web.tests.services.explorer; import java.util.Objects; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.graphql.tests.api.IGraphQLRequestor; import org.eclipse.sirius.components.graphql.tests.api.ISubscriptionRunner; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; @@ -27,11 +27,11 @@ * @author gdaniel */ @Service -public class TreeEventSubscriptionRunner implements ISubscriptionRunner { +public class ExplorerEventSubscriptionRunner implements ISubscriptionRunner { private static final String TREE_EVENT_SUBSCRIPTION = """ - subscription treeEvent($input: TreeEventInput!) { - treeEvent(input: $input) { + subscription explorerEvent($input: ExplorerEventInput!) { + explorerEvent(input: $input) { __typename } } @@ -39,12 +39,12 @@ subscription treeEvent($input: TreeEventInput!) { private final IGraphQLRequestor graphQLRequestor; - public TreeEventSubscriptionRunner(IGraphQLRequestor graphQLRequestor) { + public ExplorerEventSubscriptionRunner(IGraphQLRequestor graphQLRequestor) { this.graphQLRequestor = Objects.requireNonNull(graphQLRequestor); } @Override - public Flux run(TreeEventInput input) { + public Flux run(ExplorerEventInput input) { return this.graphQLRequestor.subscribe(TREE_EVENT_SUBSCRIPTION, input); } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerExpandAllControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerExpandAllControllerTests.java index 0d47c8d2983..64d3eb77ede 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerExpandAllControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerExpandAllControllerTests.java @@ -33,7 +33,6 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.sirius.components.collaborative.api.ChangeDescription; import org.eclipse.sirius.components.collaborative.api.ChangeKind; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IIdentityService; @@ -45,14 +44,15 @@ import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionSuccessPayload; import org.eclipse.sirius.components.trees.Tree; import org.eclipse.sirius.components.trees.tests.graphql.ExpandAllTreePathQueryRunner; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.components.view.RepresentationDescription; import org.eclipse.sirius.web.AbstractIntegrationTests; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.services.PapayaViewInjector; import org.eclipse.sirius.web.services.TaskViewInjector; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -79,7 +79,7 @@ public class ExplorerExpandAllControllerTests extends AbstractIntegrationTests { private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private ExecuteEditingContextFunctionRunner executeEditingContextFunctionRunner; @@ -118,7 +118,7 @@ public void givenStudioWhenWeAskForTheTreePathOfTaskViewObjectThenItsPathInTheEx } public void givenStudioWhenWeAskForTheTreePathOfAnObjectThenItsPathInTheExplorerIsReturned(BiFunction objectInjector) { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); var treeId = new AtomicReference(); @@ -192,7 +192,7 @@ public void givenStudioWhenWeAskForTheTreePathOfAnObjectThenItsPathInTheExplorer .thenCancel() .verify(Duration.ofSeconds(10)); - var expandedTreeInput = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); + var expandedTreeInput = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); var expandedTreeFlux = this.treeEventSubscriptionRunner.run(expandedTreeInput); Consumer initialExpandedTreeContentConsumer = this.getTreeSubscriptionConsumer(tree -> { diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerNonSemanticElementControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerNonSemanticElementControllerTests.java index 70f780ed8ec..1e8a1a16cfb 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerNonSemanticElementControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerNonSemanticElementControllerTests.java @@ -25,16 +25,16 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.trees.Tree; import org.eclipse.sirius.components.trees.TreeItem; import org.eclipse.sirius.components.trees.tests.graphql.ExpandAllTreePathQueryRunner; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.web.AbstractIntegrationTests; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -61,7 +61,7 @@ public class ExplorerNonSemanticElementControllerTests extends AbstractIntegrati private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private ExpandAllTreePathQueryRunner expandAllTreePathQueryRunner; @@ -76,7 +76,7 @@ public void beforeEach() { @Sql(scripts = {"/scripts/studio.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = {"/scripts/cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenStudioWhenWeAskForTheTreePathOfPapayaViewObjectThenItsPathInTheExplorerIsReturned() { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); var treeId = new AtomicReference(); @@ -118,7 +118,7 @@ public void givenStudioWhenWeAskForTheTreePathOfPapayaViewObjectThenItsPathInThe .verify(Duration.ofSeconds(10)); - var expandedTreeInput = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); + var expandedTreeInput = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); var expandedTreeFlux = this.treeEventSubscriptionRunner.run(expandedTreeInput); Consumer initialExpandedTreeContentConsumer = this.getTreeSubscriptionConsumer(tree -> { diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreeFilterControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreeFilterControllerTests.java index 85b64051380..3820a0d0dbb 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreeFilterControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreeFilterControllerTests.java @@ -24,17 +24,17 @@ import java.util.UUID; import java.util.function.Consumer; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.components.trees.tests.graphql.TreeFiltersQueryRunner; import org.eclipse.sirius.components.view.util.services.ColorPaletteService; import org.eclipse.sirius.web.AbstractIntegrationTests; import org.eclipse.sirius.web.application.studio.services.StudioExplorerTreeFilterProvider; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -60,7 +60,7 @@ public class ExplorerTreeFilterControllerTests extends AbstractIntegrationTests private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private TreeFiltersQueryRunner treeFiltersQueryRunner; @@ -92,7 +92,7 @@ public void givenTreeIdWhenWeRequestItsTreeFiltersThenTheListIsReturned() { @Sql(scripts = {"/scripts/studio.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = {"/scripts/cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenStudioWhenFilterToHideDefaultPaletteIsActiveThenTheDefaultPaletteIsHidden() { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of(StudioExplorerTreeFilterProvider.HIDE_STUDIO_COLOR_PALETTES_TREE_FILTER_ID)); + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of(StudioExplorerTreeFilterProvider.HIDE_STUDIO_COLOR_PALETTES_TREE_FILTER_ID)); var flux = this.treeEventSubscriptionRunner.run(input); Consumer projectContentConsumer = object -> Optional.of(object) @@ -117,7 +117,7 @@ public void givenStudioWhenFilterToHideDefaultPaletteIsActiveThenTheDefaultPalet @Sql(scripts = {"/scripts/studio.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = {"/scripts/cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenStudioWhenFilterToHideDefaultPaletteIsInactiveThenTheDefaultPaletteIsHidden() { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); var defaultPaletteTreeItemId = ColorPaletteService.SIRIUS_STUDIO_COLOR_PALETTES_URI.substring((IEMFEditingContext.RESOURCE_SCHEME + ":///").length()); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreePathControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreePathControllerTests.java index eefcec1b125..74c4a2ae919 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreePathControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ExplorerTreePathControllerTests.java @@ -31,7 +31,6 @@ import org.eclipse.sirius.components.collaborative.api.ChangeDescription; import org.eclipse.sirius.components.collaborative.api.ChangeKind; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IIdentityService; @@ -41,14 +40,15 @@ import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionInput; import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionRunner; import org.eclipse.sirius.components.graphql.tests.ExecuteEditingContextFunctionSuccessPayload; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.components.trees.tests.graphql.TreePathQueryRunner; import org.eclipse.sirius.components.view.diagram.RectangularNodeStyleDescription; import org.eclipse.sirius.web.AbstractIntegrationTests; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.services.PapayaViewInjector; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -74,7 +74,7 @@ public class ExplorerTreePathControllerTests extends AbstractIntegrationTests { private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private ExecuteEditingContextFunctionRunner executeEditingContextFunctionRunner; @@ -98,7 +98,7 @@ public void beforeEach() { @Sql(scripts = {"/scripts/studio.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = {"/scripts/cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenStudioWhenWeAskForTheTreePathOfAnObjectThenItsPathInTheExplorerIsReturned() { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); var treeId = new AtomicReference(); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ModelBrowserExpandAllControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ModelBrowserExpandAllControllerTests.java index 8416789a415..08df05038f7 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ModelBrowserExpandAllControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/ModelBrowserExpandAllControllerTests.java @@ -25,15 +25,15 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.trees.Tree; import org.eclipse.sirius.components.trees.tests.graphql.ExpandAllTreePathQueryRunner; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.web.AbstractIntegrationTests; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -60,7 +60,7 @@ public class ModelBrowserExpandAllControllerTests extends AbstractIntegrationTes private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private ExpandAllTreePathQueryRunner expandAllTreePathQueryRunner; @@ -76,7 +76,7 @@ public void beforeEach() { @Sql(scripts = { "/scripts/studio.sql" }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenReferenceWidgetWhenWeAskForTheTreePathToExpandAllThenItsPathInTheExplorerIsReturned() { - var input = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), "modelBrowser://container?ownerKind=siriusComponents%3A%2F%2Fsemantic%3Fdomain%3Dview%26entity%3DUserColor&targetType=siriusComponents%3A%2F%2Fsemantic%3Fdomain%3Dview%26entity%3DUserColor" + + var input = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), "modelBrowser://container?ownerKind=siriusComponents%3A%2F%2Fsemantic%3Fdomain%3Dview%26entity%3DUserColor&targetType=siriusComponents%3A%2F%2Fsemantic%3Fdomain%3Dview%26entity%3DUserColor" + "&ownerId=7ec7c9bf-96a1-4f69-8441-176161c08877&descriptionId=rectangular.nodestyle.background&isContainment=false", List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); @@ -115,7 +115,7 @@ public void givenReferenceWidgetWhenWeAskForTheTreePathToExpandAllThenItsPathInT .thenCancel() .verify(Duration.ofSeconds(10)); - var expandedTreeInput = new TreeEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); + var expandedTreeInput = new ExplorerEventInput(UUID.randomUUID(), StudioIdentifiers.EMPTY_STUDIO_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, treeItemIds.get(), List.of()); var expandedTreeFlux = this.treeEventSubscriptionRunner.run(expandedTreeInput); Consumer initialExpandedTreeContentConsumer = this.getTreeSubscriptionConsumer(tree -> { diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/TreeControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/TreeControllerIntegrationTests.java index 24b4b2c9361..70d4b44460d 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/TreeControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/trees/TreeControllerIntegrationTests.java @@ -29,10 +29,8 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.sirius.components.collaborative.portals.dto.PortalEventInput; import org.eclipse.sirius.components.collaborative.portals.dto.PortalRefreshedEventPayload; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; import org.eclipse.sirius.components.collaborative.trees.dto.DeleteTreeItemInput; import org.eclipse.sirius.components.collaborative.trees.dto.RenameTreeItemInput; -import org.eclipse.sirius.components.collaborative.trees.dto.TreeEventInput; import org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload; import org.eclipse.sirius.components.core.api.IEditingContextSearchService; import org.eclipse.sirius.components.core.api.IIdentityService; @@ -44,11 +42,13 @@ import org.eclipse.sirius.components.trees.tests.graphql.DeleteTreeItemMutationRunner; import org.eclipse.sirius.components.trees.tests.graphql.InitialDirectEditTreeItemLabelQueryRunner; import org.eclipse.sirius.components.trees.tests.graphql.RenameTreeItemMutationRunner; -import org.eclipse.sirius.components.trees.tests.graphql.TreeEventSubscriptionRunner; import org.eclipse.sirius.web.AbstractIntegrationTests; +import org.eclipse.sirius.web.application.views.explorer.ExplorerConfiguration; +import org.eclipse.sirius.web.application.views.explorer.ExplorerEventInput; import org.eclipse.sirius.web.application.views.explorer.services.ExplorerDescriptionProvider; import org.eclipse.sirius.web.data.TestIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; +import org.eclipse.sirius.web.tests.services.explorer.ExplorerEventSubscriptionRunner; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -124,7 +124,7 @@ private record TreeItemMatcher(Function treeItemFinder, Predicat private IGivenInitialServerState givenInitialServerState; @Autowired - private TreeEventSubscriptionRunner treeEventSubscriptionRunner; + private ExplorerEventSubscriptionRunner treeEventSubscriptionRunner; @Autowired private DeleteTreeItemMutationRunner deleteTreeItemMutationRunner; @@ -154,7 +154,7 @@ public void beforeEach() { @Sql(scripts = { "/scripts/initialize.sql" }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenProjectWhenWeSubscribeToTreeEventsOfItsExplorerThenTheTreeOfTheExplorerIsSent() { - var input = new TreeEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, List.of(), List.of()); var flux = this.treeEventSubscriptionRunner.run(input); Predicate projectContentMatcher = object -> Optional.of(object) @@ -176,7 +176,7 @@ public void givenProjectWhenWeSubscribeToTreeEventsOfItsExplorerThenTheTreeOfThe @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenExplorerOfProjectWhenWeDeleteTreeItemsThenTheTreeIsRefreshed() { var expandedIds = this.getAllTreeItemIdsForEcoreSampleProject(); - var input = new TreeEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); + var input = new ExplorerEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); var flux = this.treeEventSubscriptionRunner.run(input); var hasProjectContent = this.getTreeRefreshedEventPayloadMatcher(List.of(this.rootDocumentIsNamedEcore, this.ePackageIsNamedSample, this.representationIsAPortal)); @@ -193,7 +193,7 @@ public void givenExplorerOfProjectWhenWeDeleteTreeItemsThenTheTreeIsRefreshed() .filter(tree -> tree.getChildren().isEmpty()) .isPresent(); - var treeId = new TreeConfiguration(input.editingContextId(), input.treeId(), input.expanded(), input.activeFilterIds()).getId(); + var treeId = new ExplorerConfiguration(input.editingContextId(), input.treeId(), input.expanded(), input.activeFilterIds()).getId(); StepVerifier.create(flux) .expectNextMatches(hasProjectContent) @@ -213,12 +213,12 @@ public void givenExplorerOfProjectWhenWeDeleteTreeItemsThenTheTreeIsRefreshed() @Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void givenExplorerOfProjectWhenWeTriggerATreeItemRenameThenTheInitialDirectEditTreeItemLabelIsExecuted() { var expandedIds = this.getAllTreeItemIdsForEcoreSampleProject(); - var treeEventInput = new TreeEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); + var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); var treeFlux = this.treeEventSubscriptionRunner.run(treeEventInput); var hasProjectContent = this.getTreeRefreshedEventPayloadMatcher(List.of(this.rootDocumentIsNamedEcore, this.ePackageIsNamedSample)); - var treeId = new TreeConfiguration(treeEventInput.editingContextId(), treeEventInput.treeId(), treeEventInput.expanded(), treeEventInput.activeFilterIds()).getId(); + var treeId = new ExplorerConfiguration(treeEventInput.editingContextId(), treeEventInput.treeId(), treeEventInput.expanded(), treeEventInput.activeFilterIds()).getId(); StepVerifier.create(treeFlux) .expectNextMatches(hasProjectContent) @@ -245,14 +245,14 @@ public void givenExplorerOfProjectWhenWeRenameTreeItemThenTheTreeIsRefreshed() { }; var expandedIds = this.getAllTreeItemIdsForEcoreSampleProject(); - var treeEventInput = new TreeEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); + var treeEventInput = new ExplorerEventInput(UUID.randomUUID(), TestIdentifiers.ECORE_SAMPLE_PROJECT.toString(), ExplorerDescriptionProvider.PREFIX, expandedIds, List.of()); var treeFlux = this.treeEventSubscriptionRunner.run(treeEventInput); var hasProjectContent = this.getTreeRefreshedEventPayloadMatcher(List.of(this.rootDocumentIsNamedEcore, this.ePackageIsNamedSample, this.representationIsAPortal)); var hasObjectNewLabel = this.getTreeRefreshedEventPayloadMatcher(List.of(this.ePackageIsNamedSampleRenamed)); var hasDocumentNewLabel = this.getTreeRefreshedEventPayloadMatcher(List.of(this.rootDocumentIsNamedEcoreRenamed)); - var treeId = new TreeConfiguration(treeEventInput.editingContextId(), treeEventInput.treeId(), treeEventInput.expanded(), treeEventInput.activeFilterIds()).getId(); + var treeId = new ExplorerConfiguration(treeEventInput.editingContextId(), treeEventInput.treeId(), treeEventInput.expanded(), treeEventInput.activeFilterIds()).getId(); StepVerifier.create(Flux.merge(portalFlux, treeFlux)) .expectNextMatches(portalRefreshedEventPayloadMatcher) diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeService.java b/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeService.java index 1aaf08a576d..25ba1f6d6c9 100644 --- a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeService.java +++ b/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/TreeService.java @@ -12,8 +12,8 @@ *******************************************************************************/ package org.eclipse.sirius.components.collaborative.trees; +import org.eclipse.sirius.components.collaborative.trees.api.ITreeConfiguration; import org.eclipse.sirius.components.collaborative.trees.api.ITreeService; -import org.eclipse.sirius.components.collaborative.trees.api.TreeConfiguration; import org.eclipse.sirius.components.collaborative.trees.api.TreeCreationParameters; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.representations.GetOrCreateRandomIdProvider; @@ -34,7 +34,7 @@ public class TreeService implements ITreeService { public Tree create(TreeCreationParameters treeCreationParameters) { VariableManager variableManager = new VariableManager(); variableManager.put(GetOrCreateRandomIdProvider.PREVIOUS_REPRESENTATION_ID, treeCreationParameters.getId()); - variableManager.put(TreeConfiguration.TREE_ID, treeCreationParameters.getId()); + variableManager.put(ITreeConfiguration.TREE_ID, treeCreationParameters.getId()); variableManager.put(IEditingContext.EDITING_CONTEXT, treeCreationParameters.getEditingContext()); variableManager.put(TreeRenderer.EXPANDED, treeCreationParameters.getExpanded()); variableManager.put(TreeRenderer.ACTIVE_FILTER_IDS, treeCreationParameters.getActiveFilterIds()); diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/ITreeConfiguration.java b/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/ITreeConfiguration.java new file mode 100644 index 00000000000..097288244e4 --- /dev/null +++ b/packages/trees/backend/sirius-components-collaborative-trees/src/main/java/org/eclipse/sirius/components/collaborative/trees/api/ITreeConfiguration.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * 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.components.collaborative.trees.api; + +import org.eclipse.sirius.components.collaborative.api.IRepresentationConfiguration; + +/** + * The configuration of the tree event processor. + * + * @author Jerome Gout + */ +public interface ITreeConfiguration extends IRepresentationConfiguration { + + String TREE_ID = "treeId"; +} diff --git a/packages/trees/backend/sirius-components-collaborative-trees/src/main/resources/schema/tree.graphqls b/packages/trees/backend/sirius-components-collaborative-trees/src/main/resources/schema/tree.graphqls index e58af61fdd1..b2bbade8a6b 100644 --- a/packages/trees/backend/sirius-components-collaborative-trees/src/main/resources/schema/tree.graphqls +++ b/packages/trees/backend/sirius-components-collaborative-trees/src/main/resources/schema/tree.graphqls @@ -1,7 +1,3 @@ -extend type Subscription { - treeEvent(input: TreeEventInput!): TreeEventPayload! -} - extend type EditingContext { treePath(treeId: ID!, selectionEntryIds: [ID!]!): TreePath! expandAllTreePath(treeId: ID!, treeItemId: ID!): TreePath! @@ -12,14 +8,6 @@ type TreePath { maxDepth: Int! } -input TreeEventInput { - id: ID! - treeId: String! - editingContextId: ID! - expanded: [String!]! - activeFilterIds: [String!]! -} - union TreeEventPayload = ErrorPayload | TreeRefreshedEventPayload type TreeRefreshedEventPayload { diff --git a/packages/trees/frontend/sirius-components-trees/src/views/ExplorerView.tsx b/packages/trees/frontend/sirius-components-trees/src/views/ExplorerView.tsx index eb9e4a72373..8b6a1888ce2 100644 --- a/packages/trees/frontend/sirius-components-trees/src/views/ExplorerView.tsx +++ b/packages/trees/frontend/sirius-components-trees/src/views/ExplorerView.tsx @@ -141,6 +141,8 @@ export const ExplorerView = ({ editingContextId, readOnly }: WorkbenchViewCompon activeFilterIds={activeTreeFilterIds} textToHighlight={state.filterBarText} textToFilter={state.filterBarTreeFiltering ? state.filterBarText : null} + eventType="explorerEvent" + eventInputType="ExplorerEventInput" /> diff --git a/packages/trees/frontend/sirius-components-trees/src/views/TreeView.tsx b/packages/trees/frontend/sirius-components-trees/src/views/TreeView.tsx index 77f07a839d3..bdc4d471304 100644 --- a/packages/trees/frontend/sirius-components-trees/src/views/TreeView.tsx +++ b/packages/trees/frontend/sirius-components-trees/src/views/TreeView.tsx @@ -83,6 +83,8 @@ export const TreeView = ({ textToFilter, markedItemIds = [], treeItemActionRender, + eventType, + eventInputType, }: TreeViewComponentProps) => { const [{ value, context }, dispatch] = useMachine(treeViewMachine, { context: { @@ -162,30 +164,33 @@ export const TreeView = ({ } }, [expandAllTreePathLoading, expandAllTreePathData, expandAllTreePathError]); - const { error } = useSubscription(gql(getTreeEventSubscription(maxDepth)), { - variables: { - input: { - id, - treeId, - editingContextId, - expanded, - activeFilterIds, + const { error } = useSubscription( + gql(getTreeEventSubscription(maxDepth, eventType, eventInputType)), + { + variables: { + input: { + id, + treeId, + editingContextId, + expanded, + activeFilterIds, + }, }, - }, - fetchPolicy: 'no-cache', - skip: treeView === 'complete', - onData: ({ data }) => { - const handleDataEvent: HandleSubscriptionResultEvent = { - type: 'HANDLE_SUBSCRIPTION_RESULT', - result: data, - }; - dispatch(handleDataEvent); - }, - onComplete: () => { - const completeEvent: HandleCompleteEvent = { type: 'HANDLE_COMPLETE' }; - dispatch(completeEvent); - }, - }); + fetchPolicy: 'no-cache', + skip: treeView === 'complete', + onData: ({ data }) => { + const handleDataEvent: HandleSubscriptionResultEvent = { + type: 'HANDLE_SUBSCRIPTION_RESULT', + result: data, + }; + dispatch(handleDataEvent); + }, + onComplete: () => { + const completeEvent: HandleCompleteEvent = { type: 'HANDLE_COMPLETE' }; + dispatch(completeEvent); + }, + } + ); useEffect(() => { if (error) { const { message } = error; diff --git a/packages/trees/frontend/sirius-components-trees/src/views/TreeView.types.ts b/packages/trees/frontend/sirius-components-trees/src/views/TreeView.types.ts index d31ffbe4514..3fc26eab9c6 100644 --- a/packages/trees/frontend/sirius-components-trees/src/views/TreeView.types.ts +++ b/packages/trees/frontend/sirius-components-trees/src/views/TreeView.types.ts @@ -23,6 +23,8 @@ export interface TreeViewComponentProps extends WorkbenchViewComponentProps { textToFilter: string | null; markedItemIds?: string[]; treeItemActionRender?: (props: TreeItemActionProps) => React.ReactNode; + eventType: string; + eventInputType: string; } export interface TreeConverter { diff --git a/packages/trees/frontend/sirius-components-trees/src/views/getTreeEventSubscription.ts b/packages/trees/frontend/sirius-components-trees/src/views/getTreeEventSubscription.ts index 455a15cc053..8fc52ed59cf 100644 --- a/packages/trees/frontend/sirius-components-trees/src/views/getTreeEventSubscription.ts +++ b/packages/trees/frontend/sirius-components-trees/src/views/getTreeEventSubscription.ts @@ -10,11 +10,11 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -export const getTreeEventSubscription = (depth: number): string => { +export const getTreeEventSubscription = (depth: number, eventType: string, eventInputType: string): string => { const treeChildren = recursiveGetChildren(depth); const subscription = ` -subscription treeEvent($input: TreeEventInput!) { - treeEvent(input: $input) { +subscription ${eventType}($input: ${eventInputType}!) { + ${eventType}(input: $input) { __typename ... on TreeRefreshedEventPayload { id