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-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new e7680b4aa incubator-kie-issues#280: Fix `jbpm-quarkus-devui` to adapt
it to the new Quarkus 3 Dev UI. (#2018)
e7680b4aa is described below
commit e7680b4aaef743f8da308c39b43433cb694323fe
Author: Pere Fernández <[email protected]>
AuthorDate: Thu Mar 21 18:50:02 2024 +0100
incubator-kie-issues#280: Fix `jbpm-quarkus-devui` to adapt it to the new
Quarkus 3 Dev UI. (#2018)
* incubator-kie-issues#280: Fix `jbpm-quarkus-devui` to adapt it to the new
Quarkus 3 Dev UI.
* fixed `jbpm-quarkus-devui`: added Dev UI Cards, replaced Qute templates
to JS component, added recorder for static resources, fixed data-index url
lookup & restored badges
* fixed `sonataflow-quarkus-devui`: added recorder for static resources &
fixed data-index url lookup
* restoring `dynamicLabelJsonRPCMethodName`.
---
.../swf/tools/deployment/DevConsoleProcessor.java | 51 +++----
...erverlessWorkflowQuarkusExtensionProcessor.java | 2 +-
.../src/main/resources/dev-templates/embedded.html | 58 --------
.../main/resources/dev-templates/monitoring.html | 47 ------
.../resources/dev-templates/workflowInstances.html | 47 ------
.../config/DevUIStaticArtifactsRecorder.java | 44 ++++++
.../pom.xml | 4 +
.../extension/deployment/DevConsoleProcessor.java | 158 +++++++++++++++++----
.../RuntimeToolsQuarkusExtensionProcessor.java | 2 +-
.../extension/deployment/data/UserInfo.java} | 6 +-
.../src/main/resources/dev-templates/audit.html | 41 ------
.../src/main/resources/dev-templates/embedded.html | 96 -------------
.../src/main/resources/dev-templates/forms.html | 41 ------
.../src/main/resources/dev-templates/jobs.html | 41 ------
.../resources/dev-templates/processInstances.html | 41 ------
.../src/main/resources/dev-templates/tasks.html | 41 ------
.../resources/dev-ui/qwc-jbpm-quarkus-devui.js | 79 +++++++++++
.../config/DevUIStaticArtifactsRecorder.java | 45 ++++++
.../runtime/dataindex/DataIndexClient.java | 53 +++++++
.../{user/User.java => dataindex/jobs/Job.java} | 21 +--
.../UserInfo.java => dataindex/jobs/JobsData.java} | 29 ++--
.../runtime/dataindex/jobs/JobsResponse.java | 24 ++--
.../processes/ProcessInstance.java} | 21 +--
.../processes/ProcessInstancesData.java} | 27 ++--
.../processes/ProcessInstancesResponse.java} | 24 ++--
.../{user/User.java => dataindex/tasks/Task.java} | 21 +--
.../tasks/TaskResponseData.java} | 27 ++--
.../runtime/dataindex/tasks/TasksResponse.java | 20 +--
.../runtime/rpc/JBPMDevuiJsonRPCService.java | 79 +++++++++++
.../extension/runtime/user/UserInfoSupplier.java | 44 ------
.../main/resources/META-INF/quarkus-extension.yaml | 2 +-
.../src/main/resources/application.properties | 3 +-
.../runtime/user/UserInfoSupplierTest.java | 65 ---------
33 files changed, 584 insertions(+), 720 deletions(-)
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java
index 23998df8f..6d6d126d6 100644
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java
+++
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java
@@ -19,54 +19,48 @@
package org.kie.kogito.swf.tools.deployment;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
-import java.util.Optional;
+import java.util.List;
-import
org.kie.kogito.quarkus.extensions.spi.deployment.KogitoDataIndexServiceAvailableBuildItem;
+import org.kie.kogito.swf.tools.runtime.config.DevUIStaticArtifactsRecorder;
-import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.IsDevelopment;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.ConfigurationBuildItem;
-import io.quarkus.deployment.builditem.LaunchModeBuildItem;
-import io.quarkus.deployment.builditem.LiveReloadBuildItem;
-import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
+import io.quarkus.deployment.builditem.*;
import io.quarkus.deployment.pkg.builditem.CurateOutcomeBuildItem;
import io.quarkus.deployment.util.WebJarUtil;
-import io.quarkus.devconsole.spi.DevConsoleTemplateInfoBuildItem;
import io.quarkus.devui.spi.page.CardPageBuildItem;
import io.quarkus.devui.spi.page.Page;
import io.quarkus.maven.dependency.ResolvedDependency;
import io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem;
import io.quarkus.vertx.http.deployment.RouteBuildItem;
-import io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder;
import
io.quarkus.vertx.http.runtime.management.ManagementInterfaceBuildTimeConfig;
public class DevConsoleProcessor {
private static final String STATIC_RESOURCES_PATH = "dev-static/";
- private static final String BASE_RELATIVE_URL =
"/q/dev-v1/org.apache.kie.sonataflow.sonataflow-quarkus-devui";
- private static final String DATA_INDEX_CAPABILITY =
"org.kie.kogito.data-index";
+ private static final String BASE_RELATIVE_URL =
"/q/dev-ui/org.kie.kogito.sonataflow-quarkus-devui";
@BuildStep(onlyIf = IsDevelopment.class)
public CardPageBuildItem pages(NonApplicationRootPathBuildItem
nonApplicationRootPathBuildItem,
ManagementInterfaceBuildTimeConfig
managementInterfaceBuildTimeConfig,
LaunchModeBuildItem launchModeBuildItem,
- ConfigurationBuildItem configurationBuildItem) throws
UnsupportedEncodingException {
+ List<SystemPropertyBuildItem> systemPropertyBuildItems,
+ ConfigurationBuildItem configurationBuildItem) {
String uiPath =
nonApplicationRootPathBuildItem.resolveManagementPath(BASE_RELATIVE_URL,
managementInterfaceBuildTimeConfig, launchModeBuildItem, true);
- String devUIUrl = getProperty(configurationBuildItem,
"kogito.dev-ui.url");
- String devUIUrlQueryParam = devUIUrl != null ? "&devUIUrl=" +
URLEncoder.encode(devUIUrl, "UTF-8") : "";
+ String devUIUrl = getProperty(configurationBuildItem,
systemPropertyBuildItems, "kogito.dev-ui.url");
+ String devUIUrlQueryParam = devUIUrl != null ? "&devUIUrl=" +
URLEncoder.encode(devUIUrl, StandardCharsets.UTF_8) : "";
- String dataIndexUrl = getProperty(configurationBuildItem,
"kogito.data-index.url");
- String dataIndexUrlQueryParam = dataIndexUrl != null ?
"&dataIndexUrl=" + URLEncoder.encode(dataIndexUrl, "UTF-8") : "";
+ String dataIndexUrl = getProperty(configurationBuildItem,
systemPropertyBuildItems, "kogito.data-index.url");
+ String dataIndexUrlQueryParam = dataIndexUrl != null ?
"&dataIndexUrl=" + URLEncoder.encode(dataIndexUrl, StandardCharsets.UTF_8) : "";
CardPageBuildItem cardPageBuildItem = new CardPageBuildItem();
@@ -85,7 +79,7 @@ public class DevConsoleProcessor {
@BuildStep(onlyIf = IsDevelopment.class)
@Record(ExecutionTime.RUNTIME_INIT)
- public void deployStaticResources(final DevConsoleRecorder recorder,
+ public void deployStaticResources(final DevUIStaticArtifactsRecorder
devUIStaticArtifactsRecorder,
final CurateOutcomeBuildItem curateOutcomeBuildItem,
final LiveReloadBuildItem liveReloadBuildItem,
final LaunchModeBuildItem launchMode,
@@ -105,22 +99,13 @@ public class DevConsoleProcessor {
routeBuildItemBuildProducer.produce(new RouteBuildItem.Builder()
.route(BASE_RELATIVE_URL + "/*")
-
.handler(recorder.devConsoleHandler(devConsoleStaticResourcesDeploymentPath.toString(),
+
.handler(devUIStaticArtifactsRecorder.handler(devConsoleStaticResourcesDeploymentPath.toString(),
shutdownContext))
.build());
}
- @SuppressWarnings("unused")
- @BuildStep(onlyIf = IsDevelopment.class)
- public void
isDataIndexAvailable(BuildProducer<DevConsoleTemplateInfoBuildItem>
devConsoleTemplateInfoBuildItemBuildProducer,
- Optional<KogitoDataIndexServiceAvailableBuildItem>
dataIndexServiceAvailableBuildItem,
- Capabilities capabilities) {
- devConsoleTemplateInfoBuildItemBuildProducer.produce(new
DevConsoleTemplateInfoBuildItem("isDataIndexAvailable",
- dataIndexServiceAvailableBuildItem.isPresent() ||
capabilities.isPresent(DATA_INDEX_CAPABILITY)));
- }
-
private static String getProperty(ConfigurationBuildItem
configurationBuildItem,
- String propertyKey) {
+ List<SystemPropertyBuildItem> systemPropertyBuildItems, String
propertyKey) {
String propertyValue = configurationBuildItem
.getReadResult()
@@ -143,6 +128,12 @@ public class DevConsoleProcessor {
.get(propertyKey);
}
- return propertyValue;
+ if (propertyValue != null) {
+ return propertyValue;
+ }
+
+ return systemPropertyBuildItems.stream().filter(property ->
property.getKey().equals(propertyKey))
+ .findAny()
+ .map(SystemPropertyBuildItem::getValue).orElse(null);
}
}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
index e6908ca5a..2f9c2e336 100644
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
+++
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
@@ -23,7 +23,7 @@ import io.quarkus.deployment.builditem.FeatureBuildItem;
class ServerlessWorkflowQuarkusExtensionProcessor {
- private static final String FEATURE = "kogito-serverless-workflow-devui";
+ private static final String FEATURE = "sonataflow-quarkus-devui";
@BuildStep
FeatureBuildItem feature() {
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/embedded.html
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/embedded.html
deleted file mode 100644
index d61c149e6..000000000
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/embedded.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#if info:isDataIndexAvailable}
-<a href="{urlbase}/workflowInstances" class="badge badge-light">
- <i class="fa fa-project-diagram fa-fw"></i>
- Workflow Instances
- <span id="workflowInstancesCount" class="badge badge-light" />
-</a>
-<a href="{urlbase}/monitoring" class="badge badge-light">
- <i class="fa fa-tachometer fa-fw"></i>
- Monitoring
-</a>
-{/if} {#if info:isDataIndexAvailable == false}
-<p>No Kogito addons detected.</p>
-{/if} {#if info:isDataIndexAvailable}
-<script>
- const graphqlUrl = "{config:property('kogito.data-index.url') ?:
''}/graphql";
-
- {|
- const fillCount = () => {
- fetch(graphqlUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Accept: "application/json",
- },
- body: JSON.stringify({query: "query getAllProcessesIds{
ProcessInstances{ id } }"}),
- })
- .then(r => r.json())
- .then(json =>
$("#workflowInstancesCount").text(json.data.ProcessInstances.length))
- .catch(error => {
- console.log("Error while trying to fetch workflow instances
count.");
- console.error(error);
- });
- };
-
- fillCount();
- |}
-</script>
-{/if}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/monitoring.html
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/monitoring.html
deleted file mode 100644
index 160e99fbb..000000000
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/monitoring.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isDataIndexAvailable},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- page: "Monitoring",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "q/openapi.json",
- availablePages: ["Processes", "Monitoring", "CustomDashboard"],
- customLabels: {
- singularProcessLabel: "Workflow",
- pluralProcessLabel: "Workflows"
- },
- omittedProcessTimelineEvents: ["EmbeddedStart", "EmbeddedEnd", "Script"],
- diagramPreviewSize: {
- width: 1000,
- height: 1000
- }
- })
-</script>
-{/body} {/include}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/workflowInstances.html
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/workflowInstances.html
deleted file mode 100644
index 20024126b..000000000
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/resources/dev-templates/workflowInstances.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isDataIndexAvailable},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- page: "Processes",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "q/openapi.json",
- availablePages: ["Processes", "Monitoring", "CustomDashboard"],
- customLabels: {
- singularProcessLabel: "Workflow",
- pluralProcessLabel: "Workflows"
- },
- omittedProcessTimelineEvents: ["EmbeddedStart", "EmbeddedEnd", "Script"],
- diagramPreviewSize: {
- width: 1000,
- height: 1000
- }
- })
-</script>
-{/body} {/include}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui/src/main/java/org/kie/kogito/swf/tools/runtime/config/DevUIStaticArtifactsRecorder.java
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui/src/main/java/org/kie/kogito/swf/tools/runtime/config/DevUIStaticArtifactsRecorder.java
new file mode 100644
index 000000000..c564e0a0a
--- /dev/null
+++
b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui/src/main/java/org/kie/kogito/swf/tools/runtime/config/DevUIStaticArtifactsRecorder.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.swf.tools.runtime.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.quarkus.runtime.ShutdownContext;
+import io.quarkus.runtime.annotations.Recorder;
+import io.quarkus.vertx.http.runtime.devmode.FileSystemStaticHandler;
+import io.vertx.core.Handler;
+import io.vertx.ext.web.RoutingContext;
+
+@Recorder
+public class DevUIStaticArtifactsRecorder {
+ public Handler<RoutingContext> handler(String deploymentArtifactPath,
ShutdownContext shutdownContext) {
+ List<FileSystemStaticHandler.StaticWebRootConfiguration>
webRootConfigurations = new ArrayList<>();
+ webRootConfigurations.add(
+ new
FileSystemStaticHandler.StaticWebRootConfiguration(deploymentArtifactPath, ""));
+
+ FileSystemStaticHandler fileSystemStaticHandler = new
FileSystemStaticHandler(webRootConfigurations);
+
+ shutdownContext.addShutdownTask(new
ShutdownContext.CloseRunnable(fileSystemStaticHandler));
+
+ return fileSystemStaticHandler;
+ }
+}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/pom.xml
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/pom.xml
index f6937b6ed..a5525fec6 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/pom.xml
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/pom.xml
@@ -50,6 +50,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc-deployment</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-client-deployment</artifactId>
+ </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-deployment</artifactId>
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java
index 16ae6b420..803a79379 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java
@@ -20,12 +20,18 @@ package
org.kie.kogito.runtime.tools.quarkus.extension.deployment;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
import
org.kie.kogito.quarkus.extensions.spi.deployment.KogitoDataIndexServiceAvailableBuildItem;
import
org.kie.kogito.quarkus.extensions.spi.deployment.TrustyServiceAvailableBuildItem;
+import org.kie.kogito.runtime.tools.quarkus.extension.deployment.data.UserInfo;
import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.config.DevConsoleRuntimeConfig;
-import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.user.UserInfoSupplier;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.config.DevUIStaticArtifactsRecorder;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.rpc.JBPMDevuiJsonRPCService;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.IsDevelopment;
@@ -33,33 +39,27 @@ import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.LaunchModeBuildItem;
-import io.quarkus.deployment.builditem.LiveReloadBuildItem;
-import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
+import io.quarkus.deployment.builditem.*;
import io.quarkus.deployment.pkg.builditem.CurateOutcomeBuildItem;
import io.quarkus.deployment.util.WebJarUtil;
-import io.quarkus.devconsole.spi.DevConsoleTemplateInfoBuildItem;
+import io.quarkus.devui.spi.JsonRPCProvidersBuildItem;
+import io.quarkus.devui.spi.page.CardPageBuildItem;
+import io.quarkus.devui.spi.page.Page;
import io.quarkus.maven.dependency.ResolvedDependency;
+import io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem;
import io.quarkus.vertx.http.deployment.RouteBuildItem;
-import io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder;
+import
io.quarkus.vertx.http.runtime.management.ManagementInterfaceBuildTimeConfig;
public class DevConsoleProcessor {
private static final String STATIC_RESOURCES_PATH = "dev-static/";
- private static final String BASE_RELATIVE_URL =
"/q/dev-v1/org.jbpm.jbpm-quarkus-devui";
+ private static final String BASE_RELATIVE_URL =
"/q/dev-ui/org.jbpm.jbpm-quarkus-devui";
private static final String DATA_INDEX_CAPABILITY =
"org.kie.kogito.data-index";
@SuppressWarnings("unused")
- @BuildStep(onlyIf = IsDevelopment.class)
- public void collectUsersInfo(final
BuildProducer<DevConsoleTemplateInfoBuildItem>
devConsoleTemplateInfoBuildItemBuildProducer,
- final DevConsoleRuntimeConfig devConsoleRuntimeConfig) {
- devConsoleTemplateInfoBuildItemBuildProducer.produce(new
DevConsoleTemplateInfoBuildItem("userInfo",
- new
UserInfoSupplier(devConsoleRuntimeConfig.userConfigByUser).get()));
- }
-
@BuildStep(onlyIf = IsDevelopment.class)
@Record(ExecutionTime.RUNTIME_INIT)
- public void deployStaticResources(final DevConsoleRecorder recorder,
+ public void deployStaticResources(final DevUIStaticArtifactsRecorder
devUIStaticArtifactsRecorder,
final CurateOutcomeBuildItem curateOutcomeBuildItem,
final LiveReloadBuildItem liveReloadBuildItem,
final LaunchModeBuildItem launchMode,
@@ -79,31 +79,133 @@ public class DevConsoleProcessor {
routeBuildItemBuildProducer.produce(new RouteBuildItem.Builder()
.route(BASE_RELATIVE_URL + "/resources/*")
-
.handler(recorder.devConsoleHandler(devConsoleStaticResourcesDeploymentPath.toString(),
+
.handler(devUIStaticArtifactsRecorder.handler(devConsoleStaticResourcesDeploymentPath.toString(),
shutdownContext))
.build());
routeBuildItemBuildProducer.produce(new RouteBuildItem.Builder()
.route(BASE_RELATIVE_URL + "/*")
-
.handler(recorder.devConsoleHandler(devConsoleStaticResourcesDeploymentPath.toString(),
+
.handler(devUIStaticArtifactsRecorder.handler(devConsoleStaticResourcesDeploymentPath.toString(),
shutdownContext))
.build());
}
- @SuppressWarnings("unused")
@BuildStep(onlyIf = IsDevelopment.class)
- public void
isProcessEnabled(BuildProducer<DevConsoleTemplateInfoBuildItem>
devConsoleTemplateInfoBuildItemBuildProducer,
- Optional<KogitoDataIndexServiceAvailableBuildItem>
dataIndexServiceAvailableBuildItem,
- Capabilities capabilities) {
- devConsoleTemplateInfoBuildItemBuildProducer.produce(new
DevConsoleTemplateInfoBuildItem("isProcessEnabled",
- dataIndexServiceAvailableBuildItem.isPresent() ||
capabilities.isPresent(DATA_INDEX_CAPABILITY)));
+ public JsonRPCProvidersBuildItem createJsonRPCServiceForJBPMDevUi() {
+ return new JsonRPCProvidersBuildItem(JBPMDevuiJsonRPCService.class);
}
- @SuppressWarnings("unused")
@BuildStep(onlyIf = IsDevelopment.class)
- public void isTracingEnabled(final
BuildProducer<DevConsoleTemplateInfoBuildItem>
devConsoleTemplateInfoBuildItemBuildProducer,
- final Optional<TrustyServiceAvailableBuildItem>
trustyServiceAvailableBuildItem) {
- devConsoleTemplateInfoBuildItemBuildProducer.produce(new
DevConsoleTemplateInfoBuildItem("isTracingEnabled",
- trustyServiceAvailableBuildItem.isPresent()));
+ public CardPageBuildItem pages(
+ final NonApplicationRootPathBuildItem
nonApplicationRootPathBuildItem,
+ final DevConsoleRuntimeConfig devConsoleRuntimeConfig,
+ final ManagementInterfaceBuildTimeConfig
managementInterfaceBuildTimeConfig,
+ final LaunchModeBuildItem launchModeBuildItem,
+ final ConfigurationBuildItem configurationBuildItem,
+ final List<SystemPropertyBuildItem> systemPropertyBuildItems,
+ final Optional<KogitoDataIndexServiceAvailableBuildItem>
dataIndexServiceAvailableBuildItem,
+ final Optional<TrustyServiceAvailableBuildItem>
trustyServiceAvailableBuildItem,
+ final Capabilities capabilities) {
+
+ CardPageBuildItem cardPageBuildItem = new CardPageBuildItem();
+
+ String uiPath =
nonApplicationRootPathBuildItem.resolveManagementPath(BASE_RELATIVE_URL,
+ managementInterfaceBuildTimeConfig, launchModeBuildItem, true);
+
+ String openapiPath = getProperty(configurationBuildItem,
systemPropertyBuildItems, "quarkus.smallrye-openapi.path");
+ String devUIUrl = getProperty(configurationBuildItem,
systemPropertyBuildItems, "kogito.dev-ui.url");
+ String dataIndexUrl = getProperty(configurationBuildItem,
systemPropertyBuildItems, "kogito.data-index.url");
+ String trustyServiceUrl = getProperty(configurationBuildItem,
systemPropertyBuildItems, "kogito.trusty.http.url");
+
+ cardPageBuildItem.addBuildTimeData("extensionBasePath", uiPath);
+ cardPageBuildItem.addBuildTimeData("openapiPath", openapiPath);
+ cardPageBuildItem.addBuildTimeData("devUIUrl", devUIUrl);
+ cardPageBuildItem.addBuildTimeData("dataIndexUrl", dataIndexUrl);
+ cardPageBuildItem.addBuildTimeData("isTracingEnabled",
trustyServiceAvailableBuildItem.isPresent());
+ cardPageBuildItem.addBuildTimeData("trustyServiceUrl",
trustyServiceUrl);
+ cardPageBuildItem.addBuildTimeData("userData",
readUsersInfo(devConsoleRuntimeConfig));
+
+ if (dataIndexServiceAvailableBuildItem.isPresent() ||
capabilities.isPresent(DATA_INDEX_CAPABILITY)) {
+ cardPageBuildItem.addPage(Page.webComponentPageBuilder()
+ .componentLink("qwc-jbpm-quarkus-devui.js")
+ .metadata("page", "Processes")
+ .title("Process Instances")
+ .icon("font-awesome-solid:diagram-project")
+
.dynamicLabelJsonRPCMethodName("queryProcessInstancesCount"));
+
+ cardPageBuildItem.addPage(Page.webComponentPageBuilder()
+ .componentLink("qwc-jbpm-quarkus-devui.js")
+ .metadata("page", "TaskInbox")
+ .title("Tasks")
+ .icon("font-awesome-solid:bars-progress")
+ .dynamicLabelJsonRPCMethodName("queryTasksCount"));
+
+ cardPageBuildItem.addPage(Page.webComponentPageBuilder()
+ .componentLink("qwc-jbpm-quarkus-devui.js")
+ .metadata("page", "JobsManagement")
+ .title("Jobs")
+ .icon("font-awesome-solid:clock")
+ .dynamicLabelJsonRPCMethodName("queryJobsCount"));
+
+ cardPageBuildItem.addPage(Page.webComponentPageBuilder()
+ .componentLink("qwc-jbpm-quarkus-devui.js")
+ .metadata("page", "Forms")
+ .title("Forms")
+ .icon("font-awesome-solid:table-cells")
+ .dynamicLabelJsonRPCMethodName("getFormsCount"));
+ }
+
+ if (trustyServiceAvailableBuildItem.isPresent()) {
+ cardPageBuildItem.addPage(Page.webComponentPageBuilder()
+ .componentLink("qwc-jbpm-quarkus-devui.js")
+ .metadata("page", "Audit")
+ .title("Audit investigation")
+ .icon("font-awesome-solid:gauge-high"));
+ }
+
+ return cardPageBuildItem;
+ }
+
+ private Collection<UserInfo> readUsersInfo(DevConsoleRuntimeConfig
devConsoleRuntimeConfig) {
+ if (devConsoleRuntimeConfig.userConfigByUser.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ return devConsoleRuntimeConfig.userConfigByUser.entrySet().stream()
+ .map(entry -> new UserInfo(entry.getKey(),
entry.getValue().groups))
+ .collect(Collectors.toList());
+ }
+
+ private static String getProperty(ConfigurationBuildItem
configurationBuildItem,
+ List<SystemPropertyBuildItem> systemPropertyBuildItems, String
propertyKey) {
+
+ String propertyValue = configurationBuildItem
+ .getReadResult()
+ .getAllBuildTimeValues()
+ .get(propertyKey);
+
+ if (propertyValue == null) {
+ propertyValue = configurationBuildItem
+ .getReadResult()
+ .getBuildTimeRunTimeValues()
+ .get(propertyKey);
+ } else {
+ return propertyValue;
+ }
+
+ if (propertyValue == null) {
+ propertyValue = configurationBuildItem
+ .getReadResult()
+ .getRunTimeDefaultValues()
+ .get(propertyKey);
+ }
+
+ if (propertyValue != null) {
+ return propertyValue;
+ }
+
+ return systemPropertyBuildItems.stream().filter(property ->
property.getKey().equals(propertyKey))
+ .findAny()
+ .map(SystemPropertyBuildItem::getValue).orElse(null);
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/RuntimeToolsQuarkusExtensionProcessor.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/RuntimeToolsQuarkusExtensionProcessor.java
index 8b80a76d0..80d3ce521 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/RuntimeToolsQuarkusExtensionProcessor.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/RuntimeToolsQuarkusExtensionProcessor.java
@@ -23,7 +23,7 @@ import io.quarkus.deployment.builditem.FeatureBuildItem;
class RuntimeToolsQuarkusExtensionProcessor {
- private static final String FEATURE = "kogito-processes-devui";
+ private static final String FEATURE = "jbpm-quarkus-devui";
@BuildStep
FeatureBuildItem feature() {
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/data/UserInfo.java
similarity index 89%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/data/UserInfo.java
index 76d471ee0..142a15021 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/data/UserInfo.java
@@ -16,17 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
+package org.kie.kogito.runtime.tools.quarkus.extension.deployment.data;
import java.util.List;
-public class User {
+public class UserInfo {
private String id;
private List<String> groups;
- public User(final String id,
+ public UserInfo(final String id,
final List<String> groups) {
this.id = id;
this.groups = groups;
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/audit.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/audit.html
deleted file mode 100644
index 138e54cf1..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/audit.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isProcessEnabled},
- isTracingEnabled: {info:isTracingEnabled},
- users: {info:userInfo.arrayRepresentation.raw},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- trustyServiceUrl: "{config:property('kogito.trusty.http.url') ?:
'http://localhost:1336'}",
- page: "Audit",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "{config:property('quarkus.smallrye-openapi.path') or
'/q/openapi.json'}",
- availablePages: ["Processes", "Jobs", "Tasks", "Forms"]
- })
-</script>
-{/body} {/include}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/embedded.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/embedded.html
deleted file mode 100644
index 4f61d2f9b..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/embedded.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#if info:isProcessEnabled}
-<a href="{urlbase}/processInstances" class="badge badge-light">
- <i class="fa fa-project-diagram fa-fw"></i>
- Process Instances
- <span id="processInstancesCount" class="badge badge-light" />
-</a>
-<br />
-<a href="{urlbase}/tasks" class="badge badge-light">
- <i class="fa fa-tasks fa-fw"></i>
- Tasks <span id="tasksCount" class="badge badge-light" />
-</a>
-<br />
-<a href="{urlbase}/jobs" class="badge badge-light">
- <i class="fa fa-clock fa-fw"></i>
- Jobs <span id="jobsCount" class="badge badge-light" />
-</a>
-<br />
-<a href="{urlbase}/forms" class="badge badge-light">
- <i class="fab fa-wpforms fa-fw"></i>
- Forms <span id="formsCount" class="badge badge-light" />
-</a>
-{/if} {#if info:isTracingEnabled}
-<a href="{urlbase}/audit" class="badge badge-light">
- <i class="fab fa-wpforms fa-fw"></i>
- Audit investigation <span id="auditCount" class="badge badge-light" />
-</a>
-{/if} {#if info:isProcessEnabled == false && info:isTracingEnabled == false}
-<p>No Kogito addons detected.</p>
-{/if} {#if info:isProcessEnabled}
-<script>
- const graphqlUrl = "{config:property('kogito.data-index.url') ?:
''}/graphql";
-
- {|
- const fillFormsCount = () => {
- fetch("/forms/count")
- .then(response => response.text())
- .then(count => $("#formsCount").text(count))
- .catch(error => {
- console.log("Error while trying to fetch forms count.");
- console.error(error);
- });
- };
-
- const fillGraphqlCount = (callback, graphql) => {
- fetch(graphqlUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Accept: "application/json",
- },
- body: JSON.stringify({ query: graphql }),
- })
- .then(r => r.json())
- .then(callback)
- .catch(error => {
- console.log("Error while trying to fetch workflow instances
count.");
- console.error(error);
- });
- };
-
- fillGraphqlCount(function (json) {
- $("#processInstancesCount").text(json.data.ProcessInstances.length)
- }, "query getAllProcessesIds{ ProcessInstances{ id } }");
-
- fillGraphqlCount(function (json) {
- $("#tasksCount").text(json.data.UserTaskInstances.length)
- }, "query getAllTasksIds{ UserTaskInstances{ id } }");
-
- fillGraphqlCount(function (json) {
- $("#jobsCount").text(json.data.Jobs.length)
- }, "query getAllJobsIds{ Jobs{ id } }");
-
- fillFormsCount("forms");
- |}
-</script>
-{/if}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/forms.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/forms.html
deleted file mode 100644
index 39297c432..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/forms.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isProcessEnabled},
- isTracingEnabled: {info:isTracingEnabled},
- users: {info:userInfo.arrayRepresentation.raw},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- trustyServiceUrl: "{config:property('kogito.trusty.http.url') ?:
'http://localhost:1336'}",
- page: "Forms",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "{config:property('quarkus.smallrye-openapi.path') or
'/q/openapi.json'}",
- availablePages: ["Processes", "Jobs", "Tasks", "Forms"]
- })
-</script>
-{/body} {/include}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/jobs.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/jobs.html
deleted file mode 100644
index 4984ada1f..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/jobs.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isProcessEnabled},
- isTracingEnabled: {info:isTracingEnabled},
- users: {info:userInfo.arrayRepresentation.raw},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- trustyServiceUrl: "{config:property('kogito.trusty.http.url') ?:
'http://localhost:1336'}",
- page: "JobsManagement",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "{config:property('quarkus.smallrye-openapi.path') or
'/q/openapi.json'}",
- availablePages: ["Processes", "Jobs", "Tasks", "Forms"]
- })
-</script>
-{/body} {/include}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/processInstances.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/processInstances.html
deleted file mode 100644
index 2a80ab0d6..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/processInstances.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isProcessEnabled},
- isTracingEnabled: {info:isTracingEnabled},
- users: {info:userInfo.arrayRepresentation.raw},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- trustyServiceUrl: "{config:property('kogito.trusty.http.url') ?:
'http://localhost:1336'}",
- page: "Processes",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "{config:property('quarkus.smallrye-openapi.path') or
'/q/openapi.json'}",
- availablePages: ["Processes", "Jobs", "Tasks", "Forms"]
- })
-</script>
-{/body} {/include}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/tasks.html
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/tasks.html
deleted file mode 100644
index 95937835f..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-templates/tasks.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; }
-#envelope-app { width: 100vw; height: calc(100vh - 98px); } {/style}
-{#title}Runtime UI{/title} {#body}
-<div id="envelope-app"></div>
-
-<script src="resources/webapp/standalone.js"></script>
-<script>
- const devUI = RuntimeToolsDevUI.open({
- container: document.getElementById("envelope-app"),
- isDataIndexAvailable: {info:isProcessEnabled},
- isTracingEnabled: {info:isTracingEnabled},
- users: {info:userInfo.arrayRepresentation.raw},
- dataIndexUrl: "{config:property('kogito.data-index.url') ?: ''}/graphql",
- trustyServiceUrl: "{config:property('kogito.trusty.http.url') ?:
'http://localhost:1336'}",
- page: "TaskInbox",
- devUIUrl: {#if
config:property('kogito.dev-ui.url')}"{config:property('kogito.dev-ui.url')}"{#else}window.location.origin{/if},
- openApiPath: "{config:property('quarkus.smallrye-openapi.path') or
'/q/openapi.json'}",
- availablePages: ["Processes", "Jobs", "Tasks", "Forms"]
- })
-</script>
-{/body} {/include}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-ui/qwc-jbpm-quarkus-devui.js
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-ui/qwc-jbpm-quarkus-devui.js
new file mode 100644
index 000000000..d4de6dd65
--- /dev/null
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/resources/dev-ui/qwc-jbpm-quarkus-devui.js
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import {html, LitElement} from 'lit';
+import {
+ dataIndexUrl,
+ devUIUrl,
+ extensionBasePath,
+ isTracingEnabled,
+ openapiPath,
+ trustyServiceUrl,
+ userData
+} from 'build-time-data';
+import {RouterController} from 'router-controller';
+
+export class QwcJbpmQuarkusDevui extends LitElement {
+ _routerController = new RouterController(this);
+
+ constructor() {
+ super();
+ }
+
+ render() {
+ return html`
+ <div id="envelope-app" style="height: 100%"></div>`;
+ }
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await this.updateComplete
+ if (!document.querySelector('#jbpm-devui-script')) {
+ const script = document.createElement('script');
+ script.setAttribute("async", "");
+ script.setAttribute("id", "jbpm-devui-script");
+ script.setAttribute("src",
`${extensionBasePath}/resources/webapp/standalone.js`);
+ script.addEventListener("load", () => {
+ this.initUI()
+ })
+ document.head.appendChild(script);
+ } else {
+ this.initUI();
+ }
+ }
+
+ initUI() {
+ const metadata = this._routerController.getCurrentMetaData();
+ const container = this.renderRoot.querySelector("#envelope-app");
+ RuntimeToolsDevUI.open({
+ container: container,
+ isDataIndexAvailable: true,
+ isTracingEnabled: isTracingEnabled,
+ dataIndexUrl: `${dataIndexUrl ?? "http://localhost:8180"}/graphql`,
+ trustyServiceUrl: `${trustyServiceUrl ?? "http://localhost:1336"}`,
+ page: metadata.page ?? "Processes",
+ devUIUrl: `${devUIUrl ?? window.location.origin}`,
+ openApiPath: `${openapiPath ?? "q/openapi.json"}`,
+ availablePages: ["Processes", "Jobs", "Tasks", "Forms"],
+ users: userData ?? []
+ });
+ }
+}
+
+customElements.define('qwc-jbpm-quarkus-devui', QwcJbpmQuarkusDevui);
\ No newline at end of file
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/config/DevUIStaticArtifactsRecorder.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/config/DevUIStaticArtifactsRecorder.java
new file mode 100644
index 000000000..4c87f694c
--- /dev/null
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/config/DevUIStaticArtifactsRecorder.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.quarkus.runtime.ShutdownContext;
+import io.quarkus.runtime.annotations.Recorder;
+import io.quarkus.vertx.http.runtime.devmode.FileSystemStaticHandler;
+import io.vertx.core.Handler;
+import io.vertx.ext.web.RoutingContext;
+
+@Recorder
+public class DevUIStaticArtifactsRecorder {
+
+ public Handler<RoutingContext> handler(String deploymentArtifactPath,
ShutdownContext shutdownContext) {
+ List<FileSystemStaticHandler.StaticWebRootConfiguration>
webRootConfigurations = new ArrayList<>();
+ webRootConfigurations.add(
+ new
FileSystemStaticHandler.StaticWebRootConfiguration(deploymentArtifactPath, ""));
+
+ FileSystemStaticHandler fileSystemStaticHandler = new
FileSystemStaticHandler(webRootConfigurations);
+
+ shutdownContext.addShutdownTask(new
ShutdownContext.CloseRunnable(fileSystemStaticHandler));
+
+ return fileSystemStaticHandler;
+ }
+}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/DataIndexClient.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/DataIndexClient.java
new file mode 100644
index 000000000..6a9af3c58
--- /dev/null
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/DataIndexClient.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex;
+
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.jobs.JobsResponse;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.processes.ProcessInstancesResponse;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.tasks.TasksResponse;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+
+import static
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.DataIndexClient.DATA_INDEX_CONFIG_KEY;
+
+@Path("/graphql")
+@RegisterRestClient(configKey = DATA_INDEX_CONFIG_KEY)
+@ApplicationScoped
+public interface DataIndexClient {
+
+ String DATA_INDEX_CONFIG_KEY = "kogito.data-index.url";
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ ProcessInstancesResponse queryProcessInstances(String query);
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ TasksResponse queryTasks(String query);
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ JobsResponse queryJobs(String query);
+}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/Job.java
similarity index 74%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/Job.java
index 76d471ee0..5601fb387 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/Job.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-import java.util.List;
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.jobs;
-public class User {
+public class Job {
private String id;
- private List<String> groups;
+ public Job() {
+ }
- public User(final String id,
- final List<String> groups) {
+ public Job(final String id) {
this.id = id;
- this.groups = groups;
}
public String getId() {
return id;
}
- public List<String> getGroups() {
- return groups;
+ public void setId(final String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String toString() {
+ return id;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfo.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsData.java
similarity index 57%
rename from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfo.java
rename to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsData.java
index ec42ad9e3..0f1b0b9ff 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfo.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsData.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
+
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.jobs;
import java.util.List;
-import java.util.stream.Collectors;
-public class UserInfo {
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class JobsData {
- private List<User> users;
+ @JsonProperty("Jobs")
+ private List<Job> jobsList;
+
+ public JobsData() {
+ }
- public UserInfo(final List<User> users) {
- this.users = users;
+ public JobsData(final List<Job> jobsList) {
+ this.jobsList = jobsList;
}
- public List<User> getUsers() {
- return users;
+ public List<Job> getJobs() {
+ return jobsList;
}
- public String getArrayRepresentation() {
- return "[ "
- + users.stream().map(user -> "{ id: '" + user.getId() + "',
groups: [" + user.getGroups().stream().map(group -> "'" + group +
"'").collect(Collectors.joining(", ")) + "] }")
- .collect(Collectors.joining(", "))
- + " ]";
+ public void setJobs(final List<Job> jobsList) {
+ this.jobsList = jobsList;
}
}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsResponse.java
similarity index 68%
copy from
kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsResponse.java
index e6908ca5a..1286f7ba1 100644
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/jobs/JobsResponse.java
@@ -16,17 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.swf.tools.deployment;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.jobs;
-class ServerlessWorkflowQuarkusExtensionProcessor {
+public class JobsResponse {
- private static final String FEATURE = "kogito-serverless-workflow-devui";
+ private JobsData data;
- @BuildStep
- FeatureBuildItem feature() {
- return new FeatureBuildItem(FEATURE);
+ public JobsResponse() {
+ }
+
+ public JobsResponse(final JobsData data) {
+ this.data = data;
+ }
+
+ public JobsData getData() {
+ return data;
+ }
+
+ public void setData(final JobsData data) {
+ this.data = data;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstance.java
similarity index 73%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstance.java
index 76d471ee0..a25f9043a 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstance.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-import java.util.List;
+package
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.processes;
-public class User {
+public class ProcessInstance {
private String id;
- private List<String> groups;
+ public ProcessInstance() {
+ }
- public User(final String id,
- final List<String> groups) {
+ public ProcessInstance(final String id) {
this.id = id;
- this.groups = groups;
}
public String getId() {
return id;
}
- public List<String> getGroups() {
- return groups;
+ public void setId(final String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String toString() {
+ return id;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesData.java
similarity index 57%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesData.java
index 76d471ee0..4a74a6690 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesData.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
+
+package
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.processes;
import java.util.List;
-public class User {
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ProcessInstancesData {
- private String id;
+ @JsonProperty("ProcessInstances")
+ private List<ProcessInstance> instances;
- private List<String> groups;
+ public ProcessInstancesData() {
+ }
- public User(final String id,
- final List<String> groups) {
- this.id = id;
- this.groups = groups;
+ public ProcessInstancesData(final List<ProcessInstance> instances) {
+ this.instances = instances;
}
- public String getId() {
- return id;
+ public List<ProcessInstance> getProcessInstances() {
+ return instances;
}
- public List<String> getGroups() {
- return groups;
+ public void setProcessInstances(final List<ProcessInstance>
processInstancesList) {
+ this.instances = processInstancesList;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesResponse.java
similarity index 64%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesResponse.java
index 76d471ee0..51a64885d 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/processes/ProcessInstancesResponse.java
@@ -16,27 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-import java.util.List;
+package
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.processes;
-public class User {
+public class ProcessInstancesResponse {
- private String id;
+ private ProcessInstancesData data;
- private List<String> groups;
+ public ProcessInstancesResponse() {
+ }
- public User(final String id,
- final List<String> groups) {
- this.id = id;
- this.groups = groups;
+ public ProcessInstancesResponse(final ProcessInstancesData data) {
+ this.data = data;
}
- public String getId() {
- return id;
+ public ProcessInstancesData getData() {
+ return data;
}
- public List<String> getGroups() {
- return groups;
+ public void setData(final ProcessInstancesData data) {
+ this.data = data;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/Task.java
similarity index 74%
copy from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/Task.java
index 76d471ee0..935eceaf7 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/Task.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-import java.util.List;
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.tasks;
-public class User {
+public class Task {
private String id;
- private List<String> groups;
+ public Task() {
+ }
- public User(final String id,
- final List<String> groups) {
+ public Task(final String id) {
this.id = id;
- this.groups = groups;
}
public String getId() {
return id;
}
- public List<String> getGroups() {
- return groups;
+ public void setId(final String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String toString() {
+ return id;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TaskResponseData.java
similarity index 62%
rename from
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
rename to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TaskResponseData.java
index 76d471ee0..016c095cd 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/User.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TaskResponseData.java
@@ -16,27 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
+
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.tasks;
import java.util.List;
-public class User {
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class TaskResponseData {
- private String id;
+ @JsonProperty("UserTaskInstances")
+ private List<Task> tasks;
- private List<String> groups;
+ public TaskResponseData() {
+ }
- public User(final String id,
- final List<String> groups) {
- this.id = id;
- this.groups = groups;
+ public TaskResponseData(final List<Task> tasks) {
+ this.tasks = tasks;
}
- public String getId() {
- return id;
+ public List<Task> getTasks() {
+ return tasks;
}
- public List<String> getGroups() {
- return groups;
+ public void setTasks(final List<Task> userTaskInstancesList) {
+ this.tasks = userTaskInstancesList;
}
}
diff --git
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TasksResponse.java
similarity index 68%
copy from
kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
copy to
runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TasksResponse.java
index e6908ca5a..54a415dc5 100644
---
a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/ServerlessWorkflowQuarkusExtensionProcessor.java
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/dataindex/tasks/TasksResponse.java
@@ -16,17 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.swf.tools.deployment;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.tasks;
-class ServerlessWorkflowQuarkusExtensionProcessor {
+public class TasksResponse {
- private static final String FEATURE = "kogito-serverless-workflow-devui";
+ private TaskResponseData data;
- @BuildStep
- FeatureBuildItem feature() {
- return new FeatureBuildItem(FEATURE);
+ public TasksResponse() {
+ }
+
+ public TaskResponseData getData() {
+ return data;
+ }
+
+ public void setData(final TaskResponseData data) {
+ this.data = data;
}
}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/rpc/JBPMDevuiJsonRPCService.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/rpc/JBPMDevuiJsonRPCService.java
new file mode 100644
index 000000000..fd3f4070e
--- /dev/null
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/rpc/JBPMDevuiJsonRPCService.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.runtime.tools.quarkus.extension.runtime.rpc;
+
+import java.util.function.Supplier;
+
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.dataindex.DataIndexClient;
+import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.forms.FormsStorage;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.smallrye.common.annotation.NonBlocking;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+@ApplicationScoped
+public class JBPMDevuiJsonRPCService {
+ public static final String ALL_TASKS_IDS_QUERY = "{ \"operationName\":
\"getAllTasksIds\", \"query\": \"query getAllTasksIds{ UserTaskInstances{ id }
}\" }";
+ public static final String ALL_PROCESS_INSTANCES_IDS_QUERY = "{
\"operationName\": \"getAllProcessesIds\", \"query\": \"query
getAllProcessesIds{ ProcessInstances{ id } }\" }";
+ public static final String ALL_JOBS_IDS_QUERY = "{ \"operationName\":
\"getAllJobsIds\", \"query\": \"query getAllJobsIds{ Jobs{ id } }\" }";
+
+ private final ObjectMapper mapper;
+ private final DataIndexClient dataIndexClient;
+ private final FormsStorage formsStorage;
+
+ @Inject
+ public JBPMDevuiJsonRPCService(ObjectMapper mapper, @RestClient
DataIndexClient dataIndexClient, FormsStorage formsStorage) {
+ this.mapper = mapper;
+ this.dataIndexClient = dataIndexClient;
+ this.formsStorage = formsStorage;
+ }
+
+ @NonBlocking
+ public String queryProcessInstancesCount() {
+ return doQuery(() ->
this.dataIndexClient.queryProcessInstances(ALL_PROCESS_INSTANCES_IDS_QUERY).getData().getProcessInstances().size());
+ }
+
+ @NonBlocking
+ public String queryTasksCount() {
+ return doQuery(() ->
this.dataIndexClient.queryTasks(ALL_TASKS_IDS_QUERY).getData().getTasks().size());
+ }
+
+ @NonBlocking
+ public String queryJobsCount() {
+ return doQuery(() ->
this.dataIndexClient.queryJobs(ALL_JOBS_IDS_QUERY).getData().getJobs().size());
+ }
+
+ @NonBlocking
+ public String getFormsCount() {
+ return doQuery(this.formsStorage::getFormsCount);
+ }
+
+ private String doQuery(Supplier<Integer> countSupplier) {
+ try {
+ return String.valueOf(countSupplier.get());
+ } catch (Exception ex) {
+ return "-";
+ }
+ }
+}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplier.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplier.java
deleted file mode 100644
index 2e41d5019..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplier.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-
-import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.config.UserConfig;
-
-public class UserInfoSupplier implements Supplier<UserInfo> {
-
- private final Map<String, UserConfig> userConfigByUser;
-
- public UserInfoSupplier(final Map<String, UserConfig> userConfigByUser) {
- this.userConfigByUser = userConfigByUser;
- }
-
- public UserInfo get() {
- if (userConfigByUser == null || userConfigByUser.size() == 0) {
- return new UserInfo(Collections.emptyList());
- }
-
- return new UserInfo(userConfigByUser.entrySet().stream()
- .map(entry -> new User(entry.getKey(),
entry.getValue().groups)).collect(Collectors.toList()));
- }
-}
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/META-INF/quarkus-extension.yaml
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/META-INF/quarkus-extension.yaml
index 1e6efa0ff..913453b40 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/META-INF/quarkus-extension.yaml
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/META-INF/quarkus-extension.yaml
@@ -17,7 +17,7 @@
# under the License.
#
-name: jBPM Runtime Tools Quarkus Dev UI
+name: jBPM Quarkus Dev UI
description: Enables the jBPM Runtime tools in Quarkus Dev UI
metadata:
keywords:
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/application.properties
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/application.properties
index 44162f8bb..7f9b9ba1f 100644
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/application.properties
+++
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/main/resources/application.properties
@@ -17,4 +17,5 @@
# under the License.
#
-kogito.users.admin.groups=admin
\ No newline at end of file
+kogito.users.admin.groups=admin
+quarkus.rest-client."kogito.data-index.url".url=${kogito.data-index.url}/
diff --git
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/test/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplierTest.java
b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/test/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplierTest.java
deleted file mode 100644
index 21249b3ac..000000000
---
a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension/src/test/java/org/kie/kogito/runtime/tools/quarkus/extension/runtime/user/UserInfoSupplierTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.kie.kogito.runtime.tools.quarkus.extension.runtime.user;
-
-import java.util.*;
-
-import org.junit.jupiter.api.Test;
-import
org.kie.kogito.runtime.tools.quarkus.extension.runtime.config.UserConfig;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-class UserInfoSupplierTest {
-
- @Test
- void testNullGetUserInfo() {
- final UserInfoSupplier userInfoSupplier = new UserInfoSupplier(null);
- final UserInfo userInfo = userInfoSupplier.get();
-
- assertEquals(0, userInfo.getUsers().size());
- assertEquals("[ ]", userInfo.getArrayRepresentation());
- }
-
- @Test
- void testEmptyGetUserInfo() {
- final UserInfoSupplier userInfoSupplier = new
UserInfoSupplier(Collections.emptyMap());
- final UserInfo userInfo = userInfoSupplier.get();
-
- assertEquals(0, userInfo.getUsers().size());
- assertEquals("[ ]", userInfo.getArrayRepresentation());
- }
-
- @Test
- void testNotEmptyGetUserInfo() {
- final UserConfig userA = new UserConfig();
- userA.groups = Collections.singletonList("admin");
- final UserConfig userB = new UserConfig();
- userB.groups = Arrays.asList("admin", "user");
-
- final Map<String, UserConfig> userConfigByUser = new HashMap<>();
- userConfigByUser.put("userA", userA);
- userConfigByUser.put("userB", userB);
-
- final UserInfoSupplier userInfoSupplier = new
UserInfoSupplier(userConfigByUser);
- final UserInfo userInfo = userInfoSupplier.get();
-
- assertEquals(2, userInfo.getUsers().size());
- assertEquals("[ { id: 'userA', groups: ['admin'] }, { id: 'userB',
groups: ['admin', 'user'] } ]", userInfo.getArrayRepresentation());
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]