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

egonzalez 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 b3e3d5a21 [kie-issues#1965] Support re-scheduling Process Instances 
and Node Instances SLA timers (#2230)
b3e3d5a21 is described below

commit b3e3d5a21fa8283f71e76ecb19a642fed7e48380
Author: Pere Fernández <[email protected]>
AuthorDate: Fri May 30 10:21:44 2025 +0200

    [kie-issues#1965] Support re-scheduling Process Instances and Node 
Instances SLA timers (#2230)
---
 .../kogito/app/audit/jpa/JPADataAuditStore.java    | 63 ++++++++++------------
 .../audit/jpa/model/ProcessInstanceNodeLog.java    |  3 +-
 .../audit/jpa/model/ProcessInstanceStateLog.java   |  1 +
 .../V1.4.1__Add_state_update_event_type_check.sql  | 23 ++++++++
 .../V1.4.1__Add_state_update_event_type_check.sql  | 24 +++++++++
 .../kie/kogito/index/api/KogitoRuntimeClient.java  |  5 ++
 .../graphql/AbstractGraphQLSchemaManager.java      | 25 +++++++++
 .../src/main/resources/basic.schema.graphqls       |  2 +
 .../index/service/api/KogitoRuntimeClientImpl.java | 15 ++++++
 .../service/graphql/GraphQLSchemaManagerImpl.java  |  2 +
 .../addon/api/KogitoAddonRuntimeClientImpl.java    | 17 ++++++
 .../graphql/GraphQLAddonSchemaManagerImpl.java     |  2 +
 .../kogito/jobs/embedded/EmbeddedJobsService.java  |  6 +++
 13 files changed, 152 insertions(+), 36 deletions(-)

diff --git 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/JPADataAuditStore.java
 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/JPADataAuditStore.java
index a8a4f89b0..089e22303 100644
--- 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/JPADataAuditStore.java
+++ 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/JPADataAuditStore.java
@@ -93,23 +93,22 @@ public class JPADataAuditStore implements DataAuditStore {
         setProcessCommonAttributes(log, event);
         log.setState(String.valueOf(event.getData().getState()));
         log.setRoles(event.getData().getRoles());
+        log.setSlaDueDate(event.getData().getSlaDueDate());
+        log.setEventType(fromProcessInstanceStateDataEvent(event));
 
         EntityManager entityManager = context.getContext();
-        switch (event.getData().getEventType()) {
-            case ProcessInstanceStateEventBody.EVENT_TYPE_STARTED:
-                log.setEventType(ProcessStateLogType.ACTIVE);
-                entityManager.persist(log);
-                break;
-            case ProcessInstanceStateEventBody.EVENT_TYPE_ENDED:
-                log.setEventType(ProcessStateLogType.COMPLETED);
-                entityManager.persist(log);
-                break;
-            case ProcessInstanceStateEventBody.EVENT_TYPE_MIGRATED:
-                log.setEventType(ProcessStateLogType.MIGRATED);
-                entityManager.persist(log);
-                break;
-        }
 
+        entityManager.persist(log);
+    }
+
+    private ProcessStateLogType 
fromProcessInstanceStateDataEvent(ProcessInstanceStateDataEvent event) {
+        return switch (event.getData().getEventType()) {
+            case ProcessInstanceStateEventBody.EVENT_TYPE_STARTED -> 
ProcessStateLogType.ACTIVE;
+            case ProcessInstanceStateEventBody.EVENT_TYPE_ENDED -> 
ProcessStateLogType.COMPLETED;
+            case ProcessInstanceStateEventBody.EVENT_TYPE_MIGRATED -> 
ProcessStateLogType.MIGRATED;
+            case ProcessInstanceStateEventBody.EVENT_TYPE_UPDATED -> 
ProcessStateLogType.STATE_UPDATED;
+            default -> throw new IllegalArgumentException("Unknown 
ProcessInstanceStateDataEvent type " + event.getData().getEventType());
+        };
     }
 
     @Override
@@ -134,37 +133,31 @@ public class JPADataAuditStore implements DataAuditStore {
         log.setConnection(event.getData().getConnectionNodeDefinitionId());
         log.setNodeDefinitionId(event.getData().getNodeDefinitionId());
         log.setNodeType(event.getData().getNodeType());
+        log.setSlaDueDate(event.getData().getSlaDueDate());
 
         log.setNodeInstanceId(event.getData().getNodeInstanceId());
         log.setNodeName(event.getData().getNodeName());
 
-        switch (event.getData().getEventType()) {
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER:
-                log.setEventType(NodeLogType.ENTER);
-                break;
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT:
-                log.setEventType(NodeLogType.EXIT);
-                break;
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_ABORTED:
-                log.setEventType(NodeLogType.ABORTED);
-                break;
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_SKIPPED:
-                log.setEventType(NodeLogType.SKIPPED);
-                break;
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_OBSOLETE:
-                log.setEventType(NodeLogType.OBSOLETE);
-                break;
-            case ProcessInstanceNodeEventBody.EVENT_TYPE_ERROR:
-                log.setEventType(NodeLogType.ERROR);
-                break;
-
-        }
+        log.setEventType(fromProcessInstanceNodeDataEvent(event));
 
         log.setWorkItemId(event.getData().getWorkItemId());
         EntityManager entityManager = context.getContext();
         entityManager.persist(log);
     }
 
+    private NodeLogType 
fromProcessInstanceNodeDataEvent(ProcessInstanceNodeDataEvent event) {
+        return switch (event.getData().getEventType()) {
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER -> 
NodeLogType.ENTER;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT -> 
NodeLogType.EXIT;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_ABORTED -> 
NodeLogType.ABORTED;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_SKIPPED -> 
NodeLogType.SKIPPED;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_OBSOLETE -> 
NodeLogType.OBSOLETE;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_ERROR -> 
NodeLogType.ERROR;
+            case ProcessInstanceNodeEventBody.EVENT_TYPE_UPDATED -> 
NodeLogType.STATE_UPDATED;
+            default -> throw new IllegalArgumentException("Unknown 
ProcessInstanceNodeDataEvent type " + event.getData().getEventType());
+        };
+    }
+
     @Override
     public void storeProcessInstanceDataEvent(DataAuditContext context, 
ProcessInstanceSLADataEvent event) {
         EntityManager entityManager = context.getContext();
diff --git 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceNodeLog.java
 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceNodeLog.java
index 21edd62e9..996321492 100644
--- 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceNodeLog.java
+++ 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceNodeLog.java
@@ -52,7 +52,8 @@ public class ProcessInstanceNodeLog extends 
AbstractProcessInstanceLog {
         OBSOLETE,
         SKIPPED,
         ERROR,
-        SLA_VIOLATION
+        SLA_VIOLATION,
+        STATE_UPDATED
     }
 
     @Id
diff --git 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceStateLog.java
 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceStateLog.java
index abb860806..18a6e55f8 100644
--- 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceStateLog.java
+++ 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/model/ProcessInstanceStateLog.java
@@ -55,6 +55,7 @@ public class ProcessInstanceStateLog extends 
AbstractProcessInstanceLog {
         COMPLETED,
         MIGRATED,
         SLA_VIOLATION,
+        STATE_UPDATED,
     }
 
     @Id
diff --git 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/h2/V1.4.1__Add_state_update_event_type_check.sql
 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/h2/V1.4.1__Add_state_update_event_type_check.sql
new file mode 100644
index 000000000..af3dad73d
--- /dev/null
+++ 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/h2/V1.4.1__Add_state_update_event_type_check.sql
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+alter table if exists Process_Instance_Node_Log drop constraint 
Process_Instance_Node_Log_event_type_check;
+alter table if exists Process_Instance_State_Log drop constraint 
Process_Instance_State_Log_event_type_check;
+alter table if exists Process_Instance_Node_Log add constraint 
Process_Instance_Node_Log_event_type_check check (event_type in 
('ENTER','EXIT','ABORTED','ASYNC_ENTER','OBSOLETE','SKIPPED','ERROR','SLA_VIOLATION','STATE_UPDATED'));
+alter table if exists Process_Instance_State_Log add constraint 
Process_Instance_State_Log_event_type_check check (event_type in 
('ACTIVE','STARTED','COMPLETED','ABORTED','SLA_VIOLATION','PENDING','SUSPENDING','ERROR','STATE_UPDATED'));
\ No newline at end of file
diff --git 
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/postgresql/V1.4.1__Add_state_update_event_type_check.sql
 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/postgresql/V1.4.1__Add_state_update_event_type_check.sql
new file mode 100644
index 000000000..75dd18035
--- /dev/null
+++ 
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/resources/kie-flyway/db/data-audit/postgresql/V1.4.1__Add_state_update_event_type_check.sql
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+alter table if exists Process_Instance_Node_Log drop constraint 
Process_Instance_Node_Log_event_type_check;
+alter table if exists Process_Instance_State_Log drop constraint 
Process_Instance_State_Log_event_type_check;
+
+alter table if exists Process_Instance_Node_Log add constraint 
Process_Instance_Node_Log_event_type_check check (event_type in 
('ENTER','EXIT','ABORTED','ASYNC_ENTER','OBSOLETE','SKIPPED','ERROR','SLA_VIOLATION','STATE_UPDATED'));
+alter table if exists Process_Instance_State_Log add constraint 
Process_Instance_State_Log_event_type_check check (event_type in 
('ACTIVE','STARTED','COMPLETED','ABORTED','SLA_VIOLATION','PENDING','SUSPENDING','ERROR','STATE_UPDATED'));
\ No newline at end of file
diff --git 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeClient.java
 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeClient.java
index f36312099..f25a95838 100644
--- 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeClient.java
+++ 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeClient.java
@@ -18,6 +18,7 @@
  */
 package org.kie.kogito.index.api;
 
+import java.time.ZonedDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
@@ -79,4 +80,8 @@ public interface KogitoRuntimeClient {
             List<String> groups, String attachmentId);
 
     CompletableFuture<List<Timer>> getProcessInstanceTimers(String serviceUrl, 
ProcessInstance processInstance);
+
+    CompletableFuture<String> rescheduleNodeInstanceSla(String serviceURL, 
ProcessInstance processInstance, String nodeInstanceId, ZonedDateTime 
expirationTime);
+
+    CompletableFuture<String> rescheduleProcessInstanceSla(String serviceURL, 
ProcessInstance processInstance, ZonedDateTime expirationTime);
 }
diff --git 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
index b852b322e..5447ab93e 100644
--- 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
+++ 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
@@ -463,6 +463,31 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
         return CompletableFuture.failedFuture(new 
DataIndexServiceException(format(UNABLE_TO_FIND_ERROR_MSG, ID, id)));
     }
 
+    public CompletableFuture<String> 
rescheduleNodeInstanceSla(DataFetchingEnvironment env) {
+        String id = env.getArgument("processInstanceId");
+        ProcessInstance processInstance = 
getCacheService().getProcessInstanceStorage().get(id);
+        if (processInstance != null) {
+            return getDataIndexApiExecutor().rescheduleNodeInstanceSla(
+                    getServiceUrl(processInstance.getEndpoint(), 
processInstance.getProcessId()),
+                    processInstance,
+                    env.getArgument("nodeInstanceId"),
+                    env.getArgument("expirationTime"));
+        }
+        return CompletableFuture.failedFuture(new 
DataIndexServiceException(format(UNABLE_TO_FIND_ERROR_MSG, ID, id)));
+    }
+
+    public CompletableFuture<String> 
rescheduleProcessInstanceSla(DataFetchingEnvironment env) {
+        String id = env.getArgument("id");
+        ProcessInstance processInstance = 
getCacheService().getProcessInstanceStorage().get(id);
+        if (processInstance != null) {
+            return getDataIndexApiExecutor().rescheduleProcessInstanceSla(
+                    getServiceUrl(processInstance.getEndpoint(), 
processInstance.getProcessId()),
+                    processInstance,
+                    env.getArgument("expirationTime"));
+        }
+        return CompletableFuture.failedFuture(new 
DataIndexServiceException(format(UNABLE_TO_FIND_ERROR_MSG, ID, id)));
+    }
+
     protected CompletableFuture<String> 
getUserTaskInstanceSchema(DataFetchingEnvironment env) {
         UserTaskInstance userTaskInstance = env.getSource();
         return 
getDataIndexApiExecutor().getUserTaskSchema(getServiceUrl(userTaskInstance.getEndpoint(),
 userTaskInstance.getProcessId()),
diff --git 
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls 
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 8f16ddab5..6df6e6700 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -19,6 +19,8 @@ type Mutation {
     ProcessInstanceRetry(id: String): String
     ProcessInstanceSkip(id: String): String
     ProcessInstanceUpdateVariables(id: String, variables: String): String
+    ProcessInstanceRescheduleSlaTimer(id: String!, expirationTime: DateTime!): 
String
+    NodeInstanceRescheduleSlaTimer(processInstanceId: String!, nodeInstanceId: 
String!, expirationTime: DateTime!): String
     NodeInstanceTrigger(id: String, nodeId: String): String
     NodeInstanceRetrigger(id: String, nodeInstanceId: String): String
     NodeInstanceCancel(id: String, nodeInstanceId: String): String
diff --git 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
index 85b5b3805..cf6411d29 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
@@ -18,6 +18,7 @@
  */
 package org.kie.kogito.index.service.api;
 
+import java.time.ZonedDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
@@ -62,6 +63,8 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
     public static final String TRIGGER_NODE_INSTANCE_PATH = 
"/management/processes/%s/instances/%s/nodes/%s"; //node def
     public static final String RETRIGGER_NODE_INSTANCE_PATH = 
"/management/processes/%s/instances/%s/nodeInstances/%s"; // nodeInstance Id
     public static final String CANCEL_NODE_INSTANCE_PATH = 
"/management/processes/%s/instances/%s/nodeInstances/%s"; // nodeInstance Id
+    public static final String UPDATE_NODE_INSTANCE_SLA_PATH = 
"/management/processes/%s/instances/%s/nodeInstances/%s/sla";
+    public static final String UPDATE_PROCESS_INSTANCE_SLA_PATH = 
"/management/processes/%s/instances/%s/sla";
 
     public static final String GET_TASK_SCHEMA_PATH = "/%s/%s/%s/%s/schema";
     public static final String UPDATE_USER_TASK_INSTANCE_PATH = 
"/management/usertasks/%s";
@@ -112,6 +115,18 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
         return sendJSONPutClientRequest(getWebClient(serviceURL), requestURI, 
"UPDATE VARIABLES of ProcessInstance with id: " + processInstance.getId(), 
variables);
     }
 
+    @Override
+    public CompletableFuture<String> rescheduleNodeInstanceSla(String 
serviceURL, ProcessInstance processInstance, String nodeInstanceId, 
ZonedDateTime expirationTime) {
+        String requestURI = format(UPDATE_NODE_INSTANCE_SLA_PATH, 
processInstance.getProcessId(), processInstance.getId(), nodeInstanceId);
+        return sendPatchClientRequest(getWebClient(serviceURL), requestURI, 
"Update SLA of NodesInstance with id: " + nodeInstanceId, new 
JsonObject(expirationTime.toString()));
+    }
+
+    @Override
+    public CompletableFuture<String> rescheduleProcessInstanceSla(String 
serviceURL, ProcessInstance processInstance, ZonedDateTime expirationTime) {
+        String requestURI = format(UPDATE_PROCESS_INSTANCE_SLA_PATH, 
processInstance.getProcessId(), processInstance.getId());
+        return sendPatchClientRequest(getWebClient(serviceURL), requestURI, 
"Update SLA of ProcessInstance with id: " + processInstance.getId(), new 
JsonObject(expirationTime.toString()));
+    }
+
     @Override
     public CompletableFuture<String> getProcessInstanceDiagram(String 
serviceURL, ProcessInstance processInstance) {
         String requestURI = format(GET_PROCESS_INSTANCE_DIAGRAM_PATH, 
processInstance.getProcessId(), processInstance.getId());
diff --git 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
index ca624dbaa..723defd48 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
@@ -98,6 +98,8 @@ public class GraphQLSchemaManagerImpl extends 
AbstractGraphQLSchemaManager {
                     builder.dataFetcher("NodeInstanceCancel", 
this::cancelNodeInstance);
                     builder.dataFetcher("JobCancel", this::cancelJob);
                     builder.dataFetcher("JobReschedule", this::rescheduleJob);
+                    builder.dataFetcher("NodeInstanceRescheduleSlaTimer", 
this::rescheduleNodeInstanceSla);
+                    builder.dataFetcher("ProcessInstanceRescheduleSlaTimer", 
this::rescheduleProcessInstanceSla);
                     builder.dataFetcher("UserTaskInstanceUpdate", 
this::updateUserTaskInstance);
                     builder.dataFetcher("UserTaskInstanceCommentCreate", 
this::createTaskInstanceComment);
                     builder.dataFetcher("UserTaskInstanceAttachmentCreate", 
this::createTaskInstanceAttachment);
diff --git 
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
 
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
index b9ea89d24..dea94ecff 100644
--- 
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
+++ 
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
@@ -20,6 +20,7 @@ package org.kie.kogito.index.addon.api;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
+import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
@@ -315,4 +316,20 @@ public class KogitoAddonRuntimeClientImpl extends 
KogitoRuntimeCommonClient impl
         pi.start();
         return 
CompletableFuture.completedFuture(fromValue(pi.variables().toMap()));
     }
+
+    @Override
+    public CompletableFuture<String> rescheduleNodeInstanceSla(String 
serviceURL, ProcessInstance processInstance, String nodeInstanceId, 
ZonedDateTime expirationTime) {
+        return 
CompletableFuture.completedFuture(executeOnProcessInstance(processInstance.getProcessId(),
 processInstance.getId(), pInstance -> {
+            pInstance.updateNodeInstanceSla(nodeInstanceId, expirationTime);
+            return "Updated SLA of node instance " + nodeInstanceId;
+        }));
+    }
+
+    @Override
+    public CompletableFuture<String> rescheduleProcessInstanceSla(String 
serviceURL, ProcessInstance processInstance, ZonedDateTime expirationTime) {
+        return 
CompletableFuture.completedFuture(executeOnProcessInstance(processInstance.getProcessId(),
 processInstance.getId(), pInstance -> {
+            pInstance.updateProcessInstanceSla(expirationTime);
+            return "Updated SLA of process instance " + 
processInstance.getId();
+        }));
+    }
 }
diff --git 
a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
 
b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
index 7c15e7539..f6f10fdfe 100644
--- 
a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
+++ 
b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
@@ -57,6 +57,8 @@ public class GraphQLAddonSchemaManagerImpl extends 
AbstractGraphQLSchemaManager
                     builder.dataFetcher("NodeInstanceCancel", 
this::cancelNodeInstance);
                     builder.dataFetcher("JobCancel", this::cancelJob);
                     builder.dataFetcher("JobReschedule", this::rescheduleJob);
+                    builder.dataFetcher("NodeInstanceRescheduleSlaTimer", 
this::rescheduleNodeInstanceSla);
+                    builder.dataFetcher("ProcessInstanceRescheduleSlaTimer", 
this::rescheduleProcessInstanceSla);
                     loadAdditionalMutations(builder);
                     return builder;
                 })
diff --git 
a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
 
b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
index 84754c6dc..d8cc49dfd 100644
--- 
a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
+++ 
b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs/src/main/java/org/kie/kogito/jobs/embedded/EmbeddedJobsService.java
@@ -88,4 +88,10 @@ public class EmbeddedJobsService implements JobsService {
         }
     }
 
+    @Override
+    public String rescheduleJob(JobDescription description) {
+        cancelJob(description.id());
+        return scheduleJob(description);
+    }
+
 }


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

Reply via email to