This is an automated email from the ASF dual-hosted git repository.

tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new ead09da799e [kie-issues#2145] Loading WID File from /global or 
location of a BPMN file (#3312)
ead09da799e is described below

commit ead09da799ed4b002d706b5703f04b5c1df0201f
Author: Jozef Marko <[email protected]>
AuthorDate: Thu Nov 20 20:23:44 2025 +0100

    [kie-issues#2145] Loading WID File from /global or location of a BPMN file 
(#3312)
---
 packages/kie-editors-standalone/src/bpmn/index.ts  |  2 +-
 .../StandaloneEditorsEditorChannelApiImpl.ts       |  1 -
 .../client/session/BPMNSessionInitializer.java     | 23 ++---------
 .../client/session/BPMNSessionInitializerTest.java | 19 +---------
 .../WorkItemDefinitionStandaloneClientService.java | 38 +++++++++++++------
 .../selenium/BPMNDesignerKogitoSeleniumIT.java     |  2 +-
 .../marshall/service/BPMNClientDiagramService.java | 11 ++++--
 ...VsCodeResourceContentServiceForDanglingFiles.ts |  1 -
 .../VsCodeResourceContentServiceForWorkspaces.ts   | 44 ++++++++++++++++++----
 .../src/context/WorkspacesContextProvider.tsx      |  4 +-
 .../src/services/WorkspaceService.tsx              | 12 +++++-
 .../src/worker/WorkspacesWorkerApiImpl.ts          |  4 +-
 12 files changed, 90 insertions(+), 71 deletions(-)

diff --git a/packages/kie-editors-standalone/src/bpmn/index.ts 
b/packages/kie-editors-standalone/src/bpmn/index.ts
index 412d633f1ed..625cf8ef402 100644
--- a/packages/kie-editors-standalone/src/bpmn/index.ts
+++ b/packages/kie-editors-standalone/src/bpmn/index.ts
@@ -88,7 +88,7 @@ export function open(args: {
     stateControl,
     {
       normalizedPosixPathRelativeToTheWorkspaceRoot: "", // FIXME: 
https://github.com/apache/incubator-kie-issues/issues/811
-      fileName: "", // FIXME: 
https://github.com/apache/incubator-kie-issues/issues/811
+      fileName: "default", // FIXME: 
https://github.com/apache/incubator-kie-issues/issues/811
       fileExtension: "bpmn",
       getFileContents: () => Promise.resolve(args.initialContent),
       isReadOnly: args.readOnly ?? false,
diff --git 
a/packages/kie-editors-standalone/src/envelope/StandaloneEditorsEditorChannelApiImpl.ts
 
b/packages/kie-editors-standalone/src/envelope/StandaloneEditorsEditorChannelApiImpl.ts
index c85c703b52d..3f817b6b962 100644
--- 
a/packages/kie-editors-standalone/src/envelope/StandaloneEditorsEditorChannelApiImpl.ts
+++ 
b/packages/kie-editors-standalone/src/envelope/StandaloneEditorsEditorChannelApiImpl.ts
@@ -23,7 +23,6 @@ import {
   ResourceContentRequest,
   ResourceListRequest,
   ResourcesList,
-  ContentType,
 } from "@kie-tools-core/workspace/dist/api";
 import {
   EditorContent,
diff --git 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/main/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializer.java
 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/main/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializer.java
index dfc5ec3e0ab..96cf87f9973 100644
--- 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/main/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializer.java
+++ 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/main/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializer.java
@@ -20,19 +20,15 @@
 
 package org.kie.workbench.common.stunner.bpmn.client.session;
 
-import java.util.Collection;
 import java.util.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 
-import elemental2.promise.Promise;
 import 
org.kie.workbench.common.stunner.bpmn.client.dataproviders.CalledElementFormProvider;
 import 
org.kie.workbench.common.stunner.bpmn.client.dataproviders.RuleFlowGroupFormProvider;
 import 
org.kie.workbench.common.stunner.bpmn.client.diagram.DiagramTypeClientService;
-import 
org.kie.workbench.common.stunner.bpmn.client.workitem.WorkItemDefinitionClientService;
 import org.kie.workbench.common.stunner.bpmn.qualifiers.BPMN;
-import org.kie.workbench.common.stunner.bpmn.workitem.WorkItemDefinition;
 import 
org.kie.workbench.common.stunner.core.client.session.impl.SessionInitializer;
 import org.kie.workbench.common.stunner.core.diagram.Metadata;
 import org.uberfire.mvp.Command;
@@ -43,18 +39,15 @@ public class BPMNSessionInitializer implements 
SessionInitializer {
 
     private static Logger LOGGER = 
Logger.getLogger(BPMNSessionInitializer.class.getName());
 
-    private final WorkItemDefinitionClientService workItemDefinitionService;
     private final DiagramTypeClientService diagramTypeService;
 
     // CDI proxy.
     protected BPMNSessionInitializer() {
-        this(null, null);
+        this(null);
     }
 
     @Inject
-    public BPMNSessionInitializer(final WorkItemDefinitionClientService 
workItemDefinitionService,
-                                  final DiagramTypeClientService 
diagramTypeService) {
-        this.workItemDefinitionService = workItemDefinitionService;
+    public BPMNSessionInitializer(final DiagramTypeClientService 
diagramTypeService) {
         this.diagramTypeService = diagramTypeService;
     }
 
@@ -64,16 +57,6 @@ public class BPMNSessionInitializer implements 
SessionInitializer {
         diagramTypeService.loadDiagramType(metadata);
         CalledElementFormProvider.initServerData();
         RuleFlowGroupFormProvider.initServerData();
-        workItemDefinitionService
-                .call(metadata)
-                .then(workItemDefinitions -> {
-                    completeCallback.execute();
-                    return null;
-                })
-                
.catch_((Promise.CatchOnRejectedCallbackFn<Collection<WorkItemDefinition>>) 
error -> {
-                    LOGGER.severe("Error obtaining the work item definitions 
[error=" + error + "]");
-                    completeCallback.execute();
-                    return null;
-                });
+        completeCallback.execute();
     }
 }
diff --git 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/test/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializerTest.java
 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/test/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializerTest.java
index c9ce04aa08c..5b84788a740 100644
--- 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/test/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializerTest.java
+++ 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-client/src/test/java/org/kie/workbench/common/stunner/bpmn/client/session/BPMNSessionInitializerTest.java
@@ -20,34 +20,21 @@
 
 package org.kie.workbench.common.stunner.bpmn.client.session;
 
-import elemental2.promise.IThenable;
-import elemental2.promise.Promise;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import 
org.kie.workbench.common.stunner.bpmn.client.diagram.DiagramTypeClientService;
-import 
org.kie.workbench.common.stunner.bpmn.client.workitem.WorkItemDefinitionClientService;
 import org.kie.workbench.common.stunner.core.diagram.Metadata;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.uberfire.mvp.Command;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
 public class BPMNSessionInitializerTest {
 
-    @Mock
-    private WorkItemDefinitionClientService workItemDefinitionService;
-
-    @Mock
-    private Promise promise;
-
     @Mock
     private DiagramTypeClientService diagramTypeService;
 
@@ -56,10 +43,7 @@ public class BPMNSessionInitializerTest {
     @Before
     @SuppressWarnings("unchecked")
     public void setUp() {
-        
doReturn(promise).when(workItemDefinitionService).call(any(Metadata.class));
-        
doReturn(promise).when(promise).then(any(IThenable.ThenOnFulfilledCallbackFn.class));
-        
doReturn(promise).when(promise).catch_(any(Promise.CatchOnRejectedCallbackFn.class));
-        tested = new BPMNSessionInitializer(workItemDefinitionService, 
diagramTypeService);
+        tested = new BPMNSessionInitializer(diagramTypeService);
     }
 
     @Test
@@ -68,6 +52,5 @@ public class BPMNSessionInitializerTest {
         Command callback = mock(Command.class);
         tested.init(metadata, callback);
         verify(diagramTypeService).loadDiagramType(metadata);
-        verify(workItemDefinitionService, times(1)).call(eq(metadata));
     }
 }
diff --git 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/main/java/org/kie/workbench/common/stunner/kogito/client/services/WorkItemDefinitionStandaloneClientService.java
 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/main/java/org/kie/workbench/common/stunner/kogito/client/services/WorkI
 [...]
index a5d682bc211..ecf6747da9e 100644
--- 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/main/java/org/kie/workbench/common/stunner/kogito/client/services/WorkItemDefinitionStandaloneClientService.java
+++ 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/main/java/org/kie/workbench/common/stunner/kogito/client/services/WorkItemDefinitionStandaloneClientService.java
@@ -25,6 +25,8 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -43,16 +45,20 @@ import 
org.kie.workbench.common.stunner.bpmn.workitem.WorkItemDefinitionRegistry
 import org.kie.workbench.common.stunner.core.diagram.Metadata;
 import 
org.kie.workbench.common.stunner.kogito.client.services.util.WidPresetResources;
 import 
org.kie.workbench.common.stunner.kogito.client.services.util.WorkItemIconCache;
+import org.uberfire.backend.vfs.Path;
 import org.uberfire.client.promise.Promises;
 
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
 import static 
org.kie.workbench.common.stunner.bpmn.client.workitem.WorkItemDefinitionClientParser.parse;
+import static org.kie.workbench.common.stunner.core.util.StringUtils.isEmpty;
 import static org.kie.workbench.common.stunner.core.util.StringUtils.nonEmpty;
 
 @ApplicationScoped
 public class WorkItemDefinitionStandaloneClientService implements 
WorkItemDefinitionClientService {
 
+    private static Logger LOGGER = 
Logger.getLogger(WorkItemDefinitionStandaloneClientService.class.getName());
+
     private static final String RESOURCE_ALL_WID_PATTERN = "*.wid";
     private static final String RESOURCE_GLOBAL_DIRECTORY_WID_PATTERN = 
"global/*.wid";
     private static final String MILESTONE_ICON = "defaultmilestoneicon.png";
@@ -63,10 +69,6 @@ public class WorkItemDefinitionStandaloneClientService 
implements WorkItemDefini
     private final ResourceContentService resourceContentService;
     private final WorkItemIconCache workItemIconCache;
 
-    // Cache the promise, as by definition will be performed just once,
-    // so the available work item definitions will be also just registered 
once, by app.
-    private Promise<Collection<WorkItemDefinition>> loader;
-
     @Inject
     public WorkItemDefinitionStandaloneClientService(final Promises promises,
                                                      final 
WorkItemDefinitionCacheRegistry registry,
@@ -81,7 +83,6 @@ public class WorkItemDefinitionStandaloneClientService 
implements WorkItemDefini
 
     @PostConstruct
     public void init() {
-        loader = allWorkItemsLoader();
     }
 
     @Produces
@@ -93,24 +94,34 @@ public class WorkItemDefinitionStandaloneClientService 
implements WorkItemDefini
 
     @Override
     public Promise<Collection<WorkItemDefinition>> call(final Metadata input) {
-        return loader;
+        return allWorkItemsLoader(input.getPath());
     }
 
     @PreDestroy
     public void destroy() {
         registry.clear();
-        loader = null;
     }
 
-    private Promise<Collection<WorkItemDefinition>> allWorkItemsLoader() {
+
+    private Promise<Collection<WorkItemDefinition>> allWorkItemsLoader(Path 
openedDiagramPath) {
+
+        final int lastSlashIndex = openedDiagramPath != null ? 
openedDiagramPath.toURI().lastIndexOf('/') : -1;
+        final String directoryPath = (lastSlashIndex != -1) 
+            ? openedDiagramPath.toURI().substring(0, lastSlashIndex + 1) 
+            : ""; 
+
+        final String widPattern = (openedDiagramPath == null || 
isEmpty(directoryPath)) ?  RESOURCE_ALL_WID_PATTERN : directoryPath + 
RESOURCE_ALL_WID_PATTERN;
+        
         return promises.create((success, failure) -> {
             registry.clear();
             final List<WorkItemDefinition> loaded = new LinkedList<>();
+            LOGGER.log(Level.INFO, "Searching WID using pattern: " + 
RESOURCE_GLOBAL_DIRECTORY_WID_PATTERN);
             resourceContentService
-                    .list(RESOURCE_GLOBAL_DIRECTORY_WID_PATTERN, 
ResourceListOptions.traversal())
+                    .list(RESOURCE_GLOBAL_DIRECTORY_WID_PATTERN, 
ResourceListOptions.assetFolder())
                     .then(paths1 -> {
+                        LOGGER.log(Level.INFO, "Searching WID using pattern: " 
+ widPattern);
                         resourceContentService
-                                .list(RESOURCE_ALL_WID_PATTERN, 
ResourceListOptions.assetFolder())
+                                .list(widPattern, 
ResourceListOptions.assetFolder())
                                 .then(paths2 -> {
                                     String[] paths = mergeTwoArrays(paths1, 
paths2);
                                     if (paths.length > 0) {
@@ -158,7 +169,7 @@ public class WorkItemDefinitionStandaloneClientService 
implements WorkItemDefini
     private Promise<Collection<WorkItemDefinition>> workItemsLoader(final 
String path,
                                                                     final 
Collection<WorkItemDefinition> loaded) {
         int lastDirIndex = path.lastIndexOf('/');
-        final String directory = (lastDirIndex >= 0) ? path.substring(0, 
lastDirIndex) + "/" : path;
+        final String directory = (lastDirIndex >= 0) ? path.substring(0, 
lastDirIndex) + "/" : "";
         if (nonEmpty(path)) {
             return resourceContentService
                     .get(path)
@@ -198,7 +209,10 @@ public class WorkItemDefinitionStandaloneClientService 
implements WorkItemDefini
     }
 
     private Promise<Collection<WorkItemDefinition>> getPromises(final 
List<WorkItemDefinition> wids, final Collection<WorkItemDefinition> loaded, 
final String path) {
-        wids.forEach(w -> w.getIconDefinition().setUri(path + 
w.getIconDefinition().getUri()));
+        wids.forEach(w -> {
+            LOGGER.log(Level.INFO, "WID Icon: " + path + 
w.getIconDefinition().getUri());
+            w.getIconDefinition().setUri(path + 
w.getIconDefinition().getUri());
+        });
         return promises.create((success, failure) -> {
             promises.all(wids, this::workItemIconLoader)
                     .then(wid -> {
diff --git 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/test/java/org/kie/workbench/common/stunner/kogito/client/selenium/BPMNDesignerKogitoSeleniumIT.java
 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/test/java/org/kie/workbench/common/stunner/kogito/client/selenium/BPMNDesignerKogito
 [...]
index 6970f970dd8..c5bbfb3e2b5 100644
--- 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/test/java/org/kie/workbench/common/stunner/kogito/client/selenium/BPMNDesignerKogitoSeleniumIT.java
+++ 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-kogito-runtime/src/test/java/org/kie/workbench/common/stunner/kogito/client/selenium/BPMNDesignerKogitoSeleniumIT.java
@@ -60,7 +60,7 @@ public class BPMNDesignerKogitoSeleniumIT {
     private static final Logger LOG = 
LoggerFactory.getLogger(BPMNDesignerKogitoSeleniumIT.class);
 
     private static final String SET_CONTENT_TEMPLATE =
-            "gwtEditorBeans.get(\"BPMNDiagramEditor\").get().setContent(\"\", 
'%s')";
+            
"gwtEditorBeans.get(\"BPMNDiagramEditor\").get().setContent(\"default\", '%s')";
     private static final String GET_CONTENT_TEMPLATE =
             "return 
gwtEditorBeans.get(\"BPMNDiagramEditor\").get().getContent()";
 
diff --git 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-marshalling/src/main/java/org/kie/workbench/common/stunner/bpmn/client/marshall/service/BPMNClientDiagramService.java
 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-marshalling/src/main/java/org/kie/workbench/common/stunner/bpmn/client/marshall/service/BPMNClientDiagra
 [...]
index aeef760ffba..2ef7d0d5934 100644
--- 
a/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-marshalling/src/main/java/org/kie/workbench/common/stunner/bpmn/client/marshall/service/BPMNClientDiagramService.java
+++ 
b/packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-marshalling/src/main/java/org/kie/workbench/common/stunner/bpmn/client/marshall/service/BPMNClientDiagramService.java
@@ -22,6 +22,7 @@ package 
org.kie.workbench.common.stunner.bpmn.client.marshall.service;
 
 import java.util.Collection;
 import java.util.Objects;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -51,6 +52,7 @@ import 
org.kie.workbench.common.stunner.core.graph.content.definition.Definition
 import 
org.kie.workbench.common.stunner.core.graph.content.definition.DefinitionSet;
 import org.kie.workbench.common.stunner.core.graph.util.GraphUtils;
 import 
org.kie.workbench.common.stunner.kogito.client.service.AbstractKogitoClientDiagramService;
+import org.uberfire.backend.vfs.PathFactory;
 import org.uberfire.client.promise.Promises;
 
 import static 
org.kie.workbench.common.stunner.bpmn.util.XmlUtils.createValidId;
@@ -96,20 +98,23 @@ public class BPMNClientDiagramService extends 
AbstractKogitoClientDiagramService
     @Override
     public void transform(final String xml,
                           final ServiceCallback<Diagram> callback) {
-        doTransform(DEFAULT_DIAGRAM_ID, xml, callback);
+        doTransform(DEFAULT_DIAGRAM_ID, DEFAULT_DIAGRAM_ID, xml, callback);
     }
 
     @Override
     public void transform(final String fileName,
                           final String xml,
                           final ServiceCallback<Diagram> callback) {
-        doTransform(createDiagramTitleFromFilePath(fileName), xml, callback);
+        doTransform(createDiagramTitleFromFilePath(fileName), fileName, xml, 
callback);
     }
 
     private void doTransform(final String fileName,
+                             final String fileRelativePath,
                              final String xml,
                              final ServiceCallback<Diagram> callback) {
-        final Metadata metadata = createMetadata();
+        final Metadata metadata = createMetadata();        
+        metadata.setPath(PathFactory.newPath(fileName, fileRelativePath));
+        LOGGER.log(Level.INFO, "Loading a file: [fileRelativePath: " + 
fileRelativePath + ", fileName: " + fileName + "]");
         widService
                 .call(metadata)
                 .then(wid -> {
diff --git 
a/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForDanglingFiles.ts
 
b/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForDanglingFiles.ts
index 1e21bd24503..ce2b9b3d3b7 100644
--- 
a/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForDanglingFiles.ts
+++ 
b/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForDanglingFiles.ts
@@ -18,7 +18,6 @@
  */
 
 import {
-  ContentType,
   ResourceContent,
   ResourceContentOptions,
   ResourceContentService,
diff --git 
a/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForWorkspaces.ts
 
b/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForWorkspaces.ts
index e05423b23c6..f92be109b21 100644
--- 
a/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForWorkspaces.ts
+++ 
b/packages/vscode-extension/src/workspace/VsCodeResourceContentServiceForWorkspaces.ts
@@ -18,7 +18,6 @@
  */
 
 import {
-  ContentType,
   ResourceContent,
   ResourceContentOptions,
   ResourceContentService,
@@ -102,19 +101,48 @@ export class VsCodeResourceContentServiceForWorkspaces 
implements ResourceConten
           return matchesPattern && conformsToSearchType;
         }
       );
-      return new ResourcesList(pattern, 
matchingNormalizedPosixPathsRelativeToTheBasePath);
+
+      if (matchingNormalizedPosixPathsRelativeToTheBasePath.length > 0) {
+        return new ResourcesList(pattern, 
matchingNormalizedPosixPathsRelativeToTheBasePath);
+      } else {
+        console.debug(
+          "VS CODE RESOURCE CONTENT API IMPL FOR WORKSPACES: Git search 
returned no matches. Falling back to VS Code API."
+        );
+      }
     } catch (error) {
       console.debug(
-        "VS CODE RESOURCE CONTENT API IMPL FOR WORKSPACES: Failed to use 
isomorphic-git to read dir. Falling back to vscode's API.",
+        "VS CODE RESOURCE CONTENT API IMPL FOR WORKSPACES: Failed to use 
isomorphic-git to read dir. Falling back to VS Code API.",
         error
       );
-      const relativePattern = new RelativePattern(baseAbsoluteFsPath, pattern);
-      const files = await vscode.workspace.findFiles(relativePattern);
-      const normalizedPosixPathsRelativeToTheWorkspaceRoot = files.map((uri) =>
-        vscode.workspace.asRelativePath(uri, false)
+    }
+
+    const relativePattern = new 
RelativePattern(this.args.workspaceRootAbsoluteFsPath, pattern);
+
+    // Build exclude pattern from .gitignore
+    let excludePattern = 
"{node_modules,.git,dist,target,out,build,.vscode,.idea}/**"; // Default 
excludes
+    try {
+      const gitignorePath = __path.join(this.args.workspaceRootAbsoluteFsPath, 
".gitignore");
+      const content = (await 
vscode.workspace.fs.readFile(vscode.Uri.file(gitignorePath))).toString();
+      const lines = content
+        .split("\n")
+        .map((line) => line.trim())
+        .filter((line) => line && !line.startsWith("#"));
+      if (lines.length > 0) {
+        excludePattern += `,{${lines.join(",")}}/**`;
+      }
+    } catch {
+      console.debug(
+        "VS CODE RESOURCE CONTENT API IMPL FOR WORKSPACES: .gitignore not 
found or unreadable, using default excludes."
       );
-      return new ResourcesList(pattern, 
normalizedPosixPathsRelativeToTheWorkspaceRoot);
     }
+
+    const files = await vscode.workspace.findFiles(relativePattern, 
excludePattern);
+
+    const normalizedPosixPathsRelativeToTheWorkspaceRoot = files.map((uri) =>
+      vscode.workspace.asRelativePath(uri, false)
+    );
+
+    return new ResourcesList(pattern, 
normalizedPosixPathsRelativeToTheWorkspaceRoot);
   }
 
   public async get(
diff --git 
a/packages/workspaces-git-fs/src/context/WorkspacesContextProvider.tsx 
b/packages/workspaces-git-fs/src/context/WorkspacesContextProvider.tsx
index 84f1de1d3a0..665b89d7065 100644
--- a/packages/workspaces-git-fs/src/context/WorkspacesContextProvider.tsx
+++ b/packages/workspaces-git-fs/src/context/WorkspacesContextProvider.tsx
@@ -19,7 +19,7 @@
 
 import React, { useEffect, useState } from "react";
 import { useCallback, useMemo } from "react";
-import { ResourceContentOptions } from "@kie-tools-core/workspace/dist/api";
+import { ResourceContentOptions, ResourceListOptions } from 
"@kie-tools-core/workspace/dist/api";
 import { WorkspaceFile, WorkspacesContext } from "./WorkspacesContext";
 import { LocalFile } from "../worker/api/LocalFile";
 import {
@@ -486,7 +486,7 @@ export function WorkspacesContextProvider(props: Props) {
   );
 
   const resourceContentList = useCallback(
-    async (args: { workspaceId: string; globPattern: string }) =>
+    async (args: { workspaceId: string; globPattern: string; opts?: 
ResourceListOptions }) =>
       workspacesSharedWorker.withBus((workspacesWorkerBus) =>
         
workspacesWorkerBus.clientApi.requests.kieSandboxWorkspacesStorage_resourceContentList(args)
       ),
diff --git a/packages/workspaces-git-fs/src/services/WorkspaceService.tsx 
b/packages/workspaces-git-fs/src/services/WorkspaceService.tsx
index 41d69fa3196..91a86023551 100644
--- a/packages/workspaces-git-fs/src/services/WorkspaceService.tsx
+++ b/packages/workspaces-git-fs/src/services/WorkspaceService.tsx
@@ -37,6 +37,7 @@ import {
 } from "../worker/api/WorkspacesBroadcastEvents";
 import { FsSchema } from "./FsCache";
 import { extractExtension } from 
"../relativePath/WorkspaceFileRelativePathParser";
+import { SearchType } from "@kie-tools-core/workspace/dist/api";
 
 export class WorkspaceService {
   public constructor(
@@ -103,7 +104,8 @@ export class WorkspaceService {
   public async getFilteredWorkspaceFileDescriptors(
     schema: FsSchema,
     workspaceId: string,
-    globPattern?: string
+    globPattern?: string,
+    searchType?: SearchType
   ): Promise<WorkspaceWorkerFileDescriptor[]> {
     const matcher = globPattern ? new Minimatch(globPattern, { dot: true }) : 
undefined;
     const gitDirAbsolutePath = this.getAbsolutePath({ workspaceId, 
relativePath: ".git" });
@@ -113,7 +115,13 @@ export class WorkspaceService {
       baseAbsolutePath: this.getAbsolutePath({ workspaceId }),
       shouldExcludeAbsolutePath: (absolutePath) => 
absolutePath.startsWith(gitDirAbsolutePath),
       onVisit: async ({ relativePath }) => {
-        if (matcher && !matcher.match(basename(relativePath))) {
+        if (searchType !== undefined && searchType !== SearchType.ASSET_FOLDER 
&& searchType !== SearchType.TRAVERSAL) {
+          throw Error(
+            `Unhandled SearchType '${searchType}' detected. Such SearchType 
was not taken into account for 'getFilteredWorkspaceFileDescriptors' code`
+          );
+        }
+        const searchedRelativePath = searchType === SearchType.ASSET_FOLDER ? 
relativePath : basename(relativePath);
+        if (matcher && !matcher.match(searchedRelativePath)) {
           return undefined;
         } else {
           return { workspaceId, relativePath };
diff --git a/packages/workspaces-git-fs/src/worker/WorkspacesWorkerApiImpl.ts 
b/packages/workspaces-git-fs/src/worker/WorkspacesWorkerApiImpl.ts
index 9954bf79f3f..9fec67a3bc0 100644
--- a/packages/workspaces-git-fs/src/worker/WorkspacesWorkerApiImpl.ts
+++ b/packages/workspaces-git-fs/src/worker/WorkspacesWorkerApiImpl.ts
@@ -22,7 +22,6 @@ import {
   ResourcesList,
   ResourceContentOptions,
   ResourceContent,
-  ContentType,
 } from "@kie-tools-core/workspace/dist/api";
 import { join } from "path";
 import { GIT_DEFAULT_BRANCH } from "../constants/GitConstants";
@@ -229,7 +228,8 @@ export class WorkspacesWorkerApiImpl implements 
WorkspacesWorkerApi {
       const files = await 
this.args.services.workspaceService.getFilteredWorkspaceFileDescriptors(
         schema,
         args.workspaceId,
-        args.globPattern
+        args.globPattern,
+        args.opts?.type
       );
       return new ResourcesList(
         args.globPattern,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to