From 65ba3d846efeaa0f9f9c6a486472ef9b3030493b Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Fri, 7 Jul 2023 19:04:57 +0200 Subject: [PATCH] [KOGITO-9555] Adding generic endpoint --- .../executor/StaticWorkflowApplication.java | 4 ++ .../pom.xml | 4 ++ .../workflow/KogitoGenericResource.java | 67 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/serverless/workflow/KogitoGenericResource.java diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java index fa3cbbf0a47..17e40acdfc4 100644 --- a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java +++ b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java @@ -225,6 +225,10 @@ public void registerCloseable(AutoCloseable closeable) { closeables.add(closeable); } + public Optional> findProcessById(String id) { + return Optional.ofNullable((Process) processes.processById(id)); + } + private Optional> findProcessInstance(String id) { for (Process process : processes.map.values()) { Optional> pi = process.instances().findById(id); diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml index 2f0c60b6878..879a3c63419 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml @@ -26,6 +26,10 @@ io.quarkus quarkus-cache + + org.kie.kogito + kogito-serverless-workflow-executor-core + org.graalvm.nativeimage svm diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/serverless/workflow/KogitoGenericResource.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/serverless/workflow/KogitoGenericResource.java new file mode 100644 index 00000000000..40f5f3e0bb2 --- /dev/null +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/serverless/workflow/KogitoGenericResource.java @@ -0,0 +1,67 @@ +/* + * Copyright 2023 Red Hat, Inc. and/or its affiliates. + * + * Licensed 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.serverless.workflow; + +import java.io.IOException; +import java.io.StringReader; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.kie.kogito.serverless.workflow.executor.StaticWorkflowApplication; +import org.kie.kogito.serverless.workflow.models.JsonNodeModelInput; +import org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils; +import org.kie.kogito.serverless.workflow.utils.WorkflowFormat; + +@Path("/") +public class KogitoGenericResource { + + private StaticWorkflowApplication application; + + @PostConstruct + void init() { + application = StaticWorkflowApplication.create(); + } + + @PreDestroy + void cleanup() { + application.close(); + } + + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Path("{id}") + public Response executeProcess(@PathParam("id") String processId, JsonNodeModelInput input) { + return Response.status(200).entity( + application.execute(application.findProcessById(processId).orElseThrow(() -> new IllegalArgumentException("Cannot find process id " + processId)), input.toModel())).build(); + } + + @POST + @Consumes(MediaType.TEXT_PLAIN) + @Path("{id}/upload") + public Response uploadProcess(@PathParam("id") String processId, String content) throws IOException { + application.process(ServerlessWorkflowUtils.getWorkflow(new StringReader(content), content.startsWith("{") ? WorkflowFormat.JSON : WorkflowFormat.YAML)); + return Response.ok().build(); + } +}