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]