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-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 8525f22ade [incubator-kie-issues-1485] Reenable event test in
ProcessTestEvents in kogito-apps (#3722)
8525f22ade is described below
commit 8525f22adea5199e637a85b6e452b479e525ce0a
Author: Enrique <[email protected]>
AuthorDate: Tue Oct 22 22:39:08 2024 +0200
[incubator-kie-issues-1485] Reenable event test in ProcessTestEvents in
kogito-apps (#3722)
---
.../kogito/task/management/service/TaskInfo.java | 20 +++
.../service/TaskManagementOperations.java | 11 +-
.../management/service/TaskManagementService.java | 135 +++++++++------------
.../java/org/kie/kogito/usertask/UserTask.java | 2 +-
.../org/kie/kogito/usertask/UserTaskInstance.java | 2 +-
.../kie/kogito/usertask/model/AttachmentInfo.java | 9 ++
.../org/kie/kogito/usertask/view/UserTaskView.java | 6 +-
.../kogito/event/impl/adapter/AdapterHelper.java | 2 +-
.../UserTaskStateEventDataEventAdapter.java | 4 +-
.../handler/UserTaskKogitoWorkItemHandler.java | 9 +-
.../kie/kogito/usertask/impl/AbstractUserTask.java | 6 +-
.../usertask/impl/DefaultUserTaskInstance.java | 6 +-
.../kogito/usertask/impl/UserTaskServiceImpl.java | 1 +
.../kogito/codegen/process/util/CodegenUtil.java | 2 +-
.../kogito/codegen/usertask/UserTaskCodegen.java | 11 +-
.../RestResourceUserTaskSpringTemplate.java | 4 +-
.../task/management/TaskManagementResource.java | 34 +++---
.../kogito/integrationtests/quarkus/TaskIT.java | 55 ++++-----
.../management/TaskManagementRestController.java | 31 +++--
.../integrationtests/springboot/TaskTest.java | 24 ++--
20 files changed, 180 insertions(+), 194 deletions(-)
diff --git
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskInfo.java
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskInfo.java
index dd61e63536..30af391df9 100644
---
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskInfo.java
+++
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskInfo.java
@@ -19,6 +19,7 @@
package org.kie.kogito.task.management.service;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
public class TaskInfo {
@@ -112,6 +113,25 @@ public class TaskInfo {
this.inputParams = inputParams;
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(adminGroups, adminUsers, description,
excludedUsers, inputParams, potentialGroups, potentialUsers, priority);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ TaskInfo other = (TaskInfo) obj;
+ return Objects.equals(adminGroups, other.adminGroups) &&
Objects.equals(adminUsers, other.adminUsers) && Objects.equals(description,
other.description)
+ && Objects.equals(excludedUsers, other.excludedUsers) &&
Objects.equals(inputParams, other.inputParams) &&
Objects.equals(potentialGroups, other.potentialGroups)
+ && Objects.equals(potentialUsers, other.potentialUsers) &&
Objects.equals(priority, other.priority);
+ }
+
@Override
public String toString() {
return "TaskInfo [description=" + description + ", priority=" +
priority + ", potentialUsers=" +
diff --git
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
index 6e5f7711d8..185cfe4ac0 100644
---
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
+++
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementOperations.java
@@ -18,16 +18,9 @@
*/
package org.kie.kogito.task.management.service;
-import org.kie.kogito.internal.process.workitem.Policy;
-
public interface TaskManagementOperations {
- TaskInfo updateTask(String processId,
- String processInstanceId,
- String taskId,
- TaskInfo taskInfo,
- boolean replace,
- Policy... policies);
+ TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean replace);
- TaskInfo getTask(String processId, String processInstanceId, String
taskId, Policy... policies);
+ TaskInfo getTask(String taskId);
}
diff --git
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
index 450dc30d0b..f834191c9a 100644
---
a/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
+++
b/addons/common/task-management/src/main/java/org/kie/kogito/task/management/service/TaskManagementService.java
@@ -18,50 +18,63 @@
*/
package org.kie.kogito.task.management.service;
-import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
+import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import java.util.function.Supplier;
-import org.kie.kogito.internal.process.workitem.KogitoWorkItem;
-import org.kie.kogito.internal.process.workitem.Policy;
-import org.kie.kogito.process.Process;
import org.kie.kogito.process.ProcessConfig;
-import org.kie.kogito.process.ProcessInstance;
-import org.kie.kogito.process.ProcessInstanceNotFoundException;
-import org.kie.kogito.process.Processes;
-import org.kie.kogito.process.WorkItem;
-import org.kie.kogito.process.workitems.InternalKogitoWorkItem;
import org.kie.kogito.services.uow.UnitOfWorkExecutor;
+import org.kie.kogito.usertask.UserTaskConfig;
+import org.kie.kogito.usertask.UserTaskInstance;
+import org.kie.kogito.usertask.UserTaskInstanceNotFoundException;
+import org.kie.kogito.usertask.UserTasks;
+import org.kie.kogito.usertask.impl.DefaultUserTaskInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class TaskManagementService implements TaskManagementOperations {
- private Processes processes;
- private ProcessConfig processConfig;
+ private static final Logger LOG =
LoggerFactory.getLogger(TaskManagementService.class);
- public TaskManagementService(Processes processes, ProcessConfig
processConfig) {
- this.processes = processes;
- this.processConfig = processConfig;
+ private UserTasks userTasks;
+ // unit of work needs to add the publisher and this is not shared.
+ private UserTaskConfig userTaskConfig;
+ private ProcessConfig processesConfig;
+
+ public TaskManagementService(UserTasks userTasks, UserTaskConfig
userTaskConfig, ProcessConfig processConfig) {
+ this.userTasks = userTasks;
+ this.userTaskConfig = userTaskConfig;
+ this.processesConfig = processConfig;
}
@Override
- public TaskInfo updateTask(String processId,
- String processInstanceId,
- String taskId,
- TaskInfo taskInfo,
- boolean shouldReplace,
- Policy... policies) {
- ProcessInstance<?> pi = getProcessInstance(processId,
processInstanceId, taskId);
- KogitoWorkItem workItem =
UnitOfWorkExecutor.executeInUnitOfWork(processConfig.unitOfWorkManager(),
- () -> pi.updateWorkItem(taskId,
- wi -> {
- InternalKogitoWorkItem task =
(InternalKogitoWorkItem) wi;
- setMap(task::setParameters, task::setParameter,
taskInfo.getInputParams(), shouldReplace);
- return wi;
- }, policies));
- return convert(workItem);
+ public TaskInfo updateTask(String taskId, TaskInfo taskInfo, boolean
shouldReplace) {
+ UserTaskInstance userTaskInstance =
UnitOfWorkExecutor.executeInUnitOfWork(processesConfig.unitOfWorkManager(), ()
-> {
+ DefaultUserTaskInstance ut = (DefaultUserTaskInstance)
getUserTaskInstance(taskId);
+ setField(ut::setTaskDescription, taskInfo::getDescription,
shouldReplace);
+ setField(ut::setTaskPriority, taskInfo::getPriority,
shouldReplace);
+ setField(ut::setAdminGroups, taskInfo::getAdminGroups,
shouldReplace);
+ setField(ut::setAdminUsers, taskInfo::getAdminUsers,
shouldReplace);
+ setField(ut::setExcludedUsers, taskInfo::getExcludedUsers,
shouldReplace);
+ setField(ut::setPotentialUsers, taskInfo::getPotentialUsers,
shouldReplace);
+ setField(ut::setPotentialGroups, taskInfo::getPotentialGroups,
shouldReplace);
+ setMap(ut::setInputs, ut::setInput, taskInfo.getInputParams(),
shouldReplace);
+ return ut;
+ });
+ LOG.trace("updated task through management endpoint to {}",
userTaskInstance);
+ return convert(userTaskInstance);
+ }
+
+ private <T> boolean setField(Consumer<T> consumer, Supplier<T> supplier,
boolean shouldReplace) {
+ T value = supplier.get();
+ boolean result = shouldReplace || value != null;
+ if (result) {
+ consumer.accept(value);
+ }
+ return result;
}
private void setMap(Consumer<Map<String, Object>> allConsumer,
@@ -80,61 +93,31 @@ public class TaskManagementService implements
TaskManagementOperations {
}
@Override
- public TaskInfo getTask(String processId, String processInstanceId, String
taskId, Policy... policies) {
- WorkItem workItem = getProcessInstance(processId, processInstanceId,
taskId).workItem(taskId, policies);
- return convert(workItem);
- }
-
- private TaskInfo convert(WorkItem workItem) {
- return new TaskInfo(
- (String) workItem.getParameters().get("Description"),
- (String) workItem.getParameters().get("Priority"),
- toSet(workItem.getParameters().get("ActorId")),
- toSet(workItem.getParameters().get("GroupId")),
- toSet(workItem.getParameters().get("ExcludedUsersId")),
- toSet(workItem.getParameters().get("BusinessAdministratorId")),
- toSet(workItem.getParameters().get("BusinessGroupsId")),
- workItem.getParameters());
+ public TaskInfo getTask(String taskId) {
+ return convert(getUserTaskInstance(taskId));
}
- private TaskInfo convert(KogitoWorkItem workItem) {
+ private TaskInfo convert(UserTaskInstance userTaskInstance) {
return new TaskInfo(
- (String) workItem.getParameter("Description"),
- (String) workItem.getParameter("Priority"),
- toSet(workItem.getParameter("ActorId")),
- toSet(workItem.getParameter("GroupId")),
- toSet(workItem.getParameter("ExcludedUsersId")),
- toSet(workItem.getParameter("BusinessAdministratorId")),
- toSet(workItem.getParameter("BusinessGroupsId")),
- workItem.getParameters());
+ userTaskInstance.getTaskDescription(),
+ userTaskInstance.getTaskPriority(),
+ userTaskInstance.getPotentialUsers(),
+ userTaskInstance.getPotentialGroups(),
+ userTaskInstance.getExcludedUsers(),
+ userTaskInstance.getAdminUsers(),
+ userTaskInstance.getAdminGroups(),
+ userTaskInstance.getInputs());
}
- private Set<String> toSet(Object value) {
- if (value == null) {
- return Collections.emptySet();
- }
- if (value instanceof String string) {
- return Set.of(string.split(","));
- }
- return Collections.emptySet();
- }
-
- private ProcessInstance<?> getProcessInstance(String processId, String
processInstanceId, String taskId) {
- if (processId == null) {
- throw new IllegalArgumentException("Process id must be given");
- }
- if (processInstanceId == null) {
- throw new IllegalArgumentException("Process instance id must be
given");
- }
+ private UserTaskInstance getUserTaskInstance(String taskId) {
if (taskId == null) {
throw new IllegalArgumentException("Task id must be given");
}
- Process<?> process = processes.processById(processId);
- if (process == null) {
- throw new IllegalArgumentException(String.format("Process with id
%s not found", processId));
+ Optional<UserTaskInstance> userTaskInstance =
userTasks.instances().findById(taskId);
+ if (userTaskInstance.isEmpty()) {
+ throw new UserTaskInstanceNotFoundException(String.format("user
task instance with id %s not found", taskId));
}
- return process.instances().findById(processInstanceId).orElseThrow(
- () -> new ProcessInstanceNotFoundException(processInstanceId));
+ return userTaskInstance.get();
}
}
diff --git a/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTask.java
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTask.java
index 11d762195a..b07df5f2f3 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTask.java
+++ b/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTask.java
@@ -57,7 +57,7 @@ public interface UserTask {
*
* @return task priority if present
*/
- Integer getTaskPriority();
+ String getTaskPriority();
/**
* Returns reference name of the task
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTaskInstance.java
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTaskInstance.java
index 4a0023a0c4..9e101eb9d4 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTaskInstance.java
+++ b/api/kogito-api/src/main/java/org/kie/kogito/usertask/UserTaskInstance.java
@@ -51,7 +51,7 @@ public interface UserTaskInstance {
String getTaskDescription();
- Integer getTaskPriority();
+ String getTaskPriority();
Map<String, Object> getMetadata();
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/usertask/model/AttachmentInfo.java
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/model/AttachmentInfo.java
index c56ed6dd9d..2f09ad8c5b 100644
---
a/api/kogito-api/src/main/java/org/kie/kogito/usertask/model/AttachmentInfo.java
+++
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/model/AttachmentInfo.java
@@ -37,6 +37,14 @@ public class AttachmentInfo {
this.name = name;
}
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
public URI getUri() {
return uri;
}
@@ -44,4 +52,5 @@ public class AttachmentInfo {
public String getName() {
return name;
}
+
}
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/usertask/view/UserTaskView.java
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/view/UserTaskView.java
index 660ea4c844..6c7c47f345 100644
---
a/api/kogito-api/src/main/java/org/kie/kogito/usertask/view/UserTaskView.java
+++
b/api/kogito-api/src/main/java/org/kie/kogito/usertask/view/UserTaskView.java
@@ -33,7 +33,7 @@ public class UserTaskView {
private String taskName;
private String taskDescription;
- private Integer taskPriority;
+ private String taskPriority;
private Set<String> potentialUsers;
private Set<String> potentialGroups;
private Set<String> adminUsers;
@@ -87,11 +87,11 @@ public class UserTaskView {
this.taskDescription = taskDescription;
}
- public Integer getTaskPriority() {
+ public String getTaskPriority() {
return taskPriority;
}
- public void setTaskPriority(Integer taskPriority) {
+ public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
}
diff --git
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AdapterHelper.java
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AdapterHelper.java
index 224b1859aa..5fe0c4f1c8 100644
---
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AdapterHelper.java
+++
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AdapterHelper.java
@@ -54,7 +54,7 @@ public class AdapterHelper {
metadata.put(ProcessInstanceEventMetadata.ROOT_PROCESS_ID_META_DATA,
pi.getMetadata().get("RootProcessId"));
metadata.put(ProcessInstanceEventMetadata.ROOT_PROCESS_INSTANCE_ID_META_DATA,
pi.getMetadata().get("RootProcessInstanceId"));
-
metadata.put(UserTaskInstanceEventMetadata.USER_TASK_INSTANCE_ID_META_DATA,
pi.getExternalReferenceId());
+
metadata.put(UserTaskInstanceEventMetadata.USER_TASK_INSTANCE_ID_META_DATA,
pi.getId());
metadata.put(UserTaskInstanceEventMetadata.USER_TASK_INSTANCE_REFERENCE_ID_META_DATA,
pi.getUserTask().getReferenceName());
metadata.put(UserTaskInstanceEventMetadata.USER_TASK_INSTANCE_STATE_META_DATA,
pi.getStatus().getName());
diff --git
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/UserTaskStateEventDataEventAdapter.java
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/UserTaskStateEventDataEventAdapter.java
index 0993a1b407..68ade25916 100644
---
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/UserTaskStateEventDataEventAdapter.java
+++
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/UserTaskStateEventDataEventAdapter.java
@@ -42,8 +42,6 @@ public class UserTaskStateEventDataEventAdapter extends
AbstractDataEventAdapter
public DataEvent<?> adapt(Object payload) {
UserTaskStateEvent event = (UserTaskStateEvent) payload;
Map<String, Object> metadata =
AdapterHelper.buildUserTaskMetadata(event.getUserTaskInstance());
- Integer priority = event.getUserTaskInstance().getTaskPriority();
- String priorityStr = priority != null ? priority.toString() : null;
UserTaskInstanceStateEventBody.Builder builder =
UserTaskInstanceStateEventBody.create()
.eventDate(new Date())
@@ -52,7 +50,7 @@ public class UserTaskStateEventDataEventAdapter extends
AbstractDataEventAdapter
.userTaskInstanceId(event.getUserTaskInstance().getId())
.userTaskName(event.getUserTaskInstance().getTaskName())
.userTaskDescription(event.getUserTaskInstance().getTaskDescription())
- .userTaskPriority(priorityStr)
+
.userTaskPriority(event.getUserTaskInstance().getTaskPriority())
.userTaskReferenceName(event.getUserTask().getReferenceName())
.externalReferenceId(event.getUserTaskInstance().getExternalReferenceId())
.state(event.getNewStatus().getName())
diff --git
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
index d612a69296..78c5b21db1 100644
---
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
+++
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandler.java
@@ -69,19 +69,12 @@ public class UserTaskKogitoWorkItemHandler extends
DefaultKogitoWorkItemHandler
UserTasks userTasks = handler.getApplication().get(UserTasks.class);
Object priority = workItem.getParameter(PRIORITY);
- Integer priorityInteger = null;
- if (priority instanceof String priorityString) {
- priorityInteger = Integer.parseInt((String) priorityString);
- } else {
- priority = (Integer) priority;
- }
-
UserTask userTask = userTasks.userTaskById((String)
workItem.getParameter(KogitoWorkItem.PARAMETER_UNIQUE_TASK_ID));
DefaultUserTaskInstance instance = (DefaultUserTaskInstance)
userTask.createInstance();
instance.setTaskName((String) workItem.getParameter(TASK_NAME));
instance.setTaskDescription((String)
workItem.getParameter(DESCRIPTION));
- instance.setTaskPriority(priorityInteger);
+ instance.setTaskPriority(priority != null ? priority.toString() :
null);
instance.setExternalReferenceId(workItem.getStringId());
instance.setMetadata("ProcessId",
workItem.getProcessInstance().getProcessId());
diff --git
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/AbstractUserTask.java
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/AbstractUserTask.java
index 19a7d8c1e7..68f85aceb3 100644
---
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/AbstractUserTask.java
+++
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/AbstractUserTask.java
@@ -37,7 +37,7 @@ public abstract class AbstractUserTask implements UserTask {
private String taskName;
private String taskDescription;
private String referenceName;
- private Integer taskPriority;
+ private String taskPriority;
private Boolean skippable;
private Set<String> potentialUsers;
private Set<String> potentialGroups;
@@ -116,11 +116,11 @@ public abstract class AbstractUserTask implements
UserTask {
}
@Override
- public Integer getTaskPriority() {
+ public String getTaskPriority() {
return this.taskPriority;
}
- public void setTaskPriority(Integer taskPriority) {
+ public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
}
diff --git
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
index e5265ae3f7..fd6d3ce21c 100644
---
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
+++
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java
@@ -52,7 +52,7 @@ public class DefaultUserTaskInstance implements
UserTaskInstance {
private String actualOwner;
private String taskName;
private String taskDescription;
- private Integer taskPriority;
+ private String taskPriority;
private Set<String> potentialUsers;
private Set<String> potentialGroups;
private Set<String> adminUsers;
@@ -282,11 +282,11 @@ public class DefaultUserTaskInstance implements
UserTaskInstance {
* @return task priority if present
*/
@Override
- public Integer getTaskPriority() {
+ public String getTaskPriority() {
return this.taskPriority;
}
- public void setTaskPriority(Integer taskPriority) {
+ public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
if (this.userTaskEventSupport != null) {
this.userTaskEventSupport.fireOneUserTaskStateChange(this,
this.status, this.status);
diff --git
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/UserTaskServiceImpl.java
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/UserTaskServiceImpl.java
index da83176f6d..3f1009245e 100644
---
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/UserTaskServiceImpl.java
+++
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/UserTaskServiceImpl.java
@@ -73,6 +73,7 @@ public class UserTaskServiceImpl implements UserTaskService {
view.setInputs(instance.getInputs());
view.setOutputs(instance.getOutputs());
view.setMetadata(instance.getMetadata());
+ view.setExternalReferenceId(instance.getExternalReferenceId());
return view;
}
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/CodegenUtil.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/CodegenUtil.java
index 658507ca1b..ecf9737e17 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/CodegenUtil.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/CodegenUtil.java
@@ -66,7 +66,7 @@ public final class CodegenUtil {
*/
public static boolean isTransactionEnabled(Generator generator,
KogitoBuildContext context) {
boolean propertyValue = getProperty(generator, context,
TRANSACTION_ENABLED, Boolean::parseBoolean, true);
- LOG.info("trying to compute property {} for generator {} property with
value {}", TRANSACTION_ENABLED, generator.name(), propertyValue);
+ LOG.debug("trying to compute property {} for generator {} property
with value {}", TRANSACTION_ENABLED, generator.name(), propertyValue);
return propertyValue;
}
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
index c145c332ee..9c2fa55b1a 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
@@ -66,7 +66,6 @@ import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.CastExpr;
import com.github.javaparser.ast.expr.Expression;
-import com.github.javaparser.ast.expr.IntegerLiteralExpr;
import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.NullLiteralExpr;
@@ -217,7 +216,7 @@ public class UserTaskCodegen extends AbstractGenerator {
block.addStatement(new MethodCallExpr(new ThisExpr(),
"setExcludedUsers",
NodeList.nodeList(toStringExpression(info.getParameter(EXCLUDED_OWNER_ID)))));
block.addStatement(new MethodCallExpr(new ThisExpr(),
"setTaskDescription",
NodeList.nodeList(toStringExpression(info.getParameter(DESCRIPTION)))));
- block.addStatement(new MethodCallExpr(new ThisExpr(),
"setTaskPriority",
NodeList.nodeList(toIntegerExpression(info.getParameter(PRIORITY)))));
+ block.addStatement(new MethodCallExpr(new ThisExpr(),
"setTaskPriority",
NodeList.nodeList(toStringExpression(info.getParameter(PRIORITY)))));
block.addStatement(new MethodCallExpr(new ThisExpr(),
"setReferenceName",
NodeList.nodeList(toStringExpression(info.getParameter(NODE_NAME)))));
block.addStatement(new MethodCallExpr(new ThisExpr(),
"setSkippable",
NodeList.nodeList(toStringExpression(info.getParameter("Skippable")))));
@@ -231,14 +230,6 @@ public class UserTaskCodegen extends AbstractGenerator {
return generatedFiles;
}
- private Expression toIntegerExpression(Object value) {
- if (value == null) {
- return new
CastExpr(StaticJavaParser.parseType(Integer.class.getName()), new
NullLiteralExpr());
- }
-
- return new IntegerLiteralExpr(value.toString());
- }
-
private Expression toStringExpression(Object value) {
if (value == null) {
return new
CastExpr(StaticJavaParser.parseType(String.class.getName()), new
NullLiteralExpr());
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskSpringTemplate.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskSpringTemplate.java
index 6ca7d8e002..4e0e758027 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskSpringTemplate.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskSpringTemplate.java
@@ -144,7 +144,7 @@ public class UserTasksResource {
return userTaskService.updateComment(taskId, comment,
IdentityProviders.of(user, groups)).orElseThrow(() -> new
ResponseStatusException(HttpStatus.NOT_FOUND));
}
- @DeleteMapping("/{taskId}/comments/{commentId}")
+ @DeleteMapping(value = "/{taskId}/comments/{commentId}", consumes =
MediaType.ALL_VALUE)
public Comment deleteComment(
@PathVariable("taskId") String taskId,
@PathVariable("commentId") String commentId,
@@ -187,7 +187,7 @@ public class UserTasksResource {
.orElseThrow(() -> new
ResponseStatusException(HttpStatus.NOT_FOUND));
}
- @DeleteMapping("/{taskId}/attachments/{attachmentId}")
+ @DeleteMapping(value = "/{taskId}/attachments/{attachmentId}", consumes =
MediaType.ALL_VALUE)
public Attachment deleteAttachment(
@PathVariable("taskId") String taskId,
@PathVariable("attachmentId") String attachmentId,
diff --git
a/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
b/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
index 538d1e3b43..d87f5ca2fe 100644
---
a/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
+++
b/quarkus/addons/task-management/runtime/src/main/java/org/kie/kogito/task/management/TaskManagementResource.java
@@ -20,12 +20,12 @@ package org.kie.kogito.task.management;
import java.util.List;
-import org.kie.kogito.auth.SecurityPolicy;
import org.kie.kogito.process.ProcessConfig;
-import org.kie.kogito.process.Processes;
import org.kie.kogito.task.management.service.TaskInfo;
import org.kie.kogito.task.management.service.TaskManagementOperations;
import org.kie.kogito.task.management.service.TaskManagementService;
+import org.kie.kogito.usertask.UserTaskConfig;
+import org.kie.kogito.usertask.UserTasks;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
@@ -40,58 +40,58 @@ import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
-@Path("/management/processes")
+@Path("/management/usertasks")
public class TaskManagementResource {
private TaskManagementOperations taskService;
@Inject
- private Processes processes;
+ private UserTasks userTasks;
+
+ @Inject
+ private UserTaskConfig userTaskConfig;
@Inject
private ProcessConfig processConfig;
@PostConstruct
private void init() {
- taskService = new TaskManagementService(processes, processConfig);
+ taskService = new TaskManagementService(userTasks, userTaskConfig,
processConfig);
}
@PUT
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
- @Path("{processId}/instances/{processInstanceId}/tasks/{taskId}")
- public Response updateTask(@PathParam("processId") String processId,
- @PathParam("processInstanceId") String processInstanceId,
+ @Path("{taskId}")
+ public Response updateTask(
@PathParam("taskId") String taskId,
@QueryParam("user") final String user,
@QueryParam("group") final List<String> groups,
TaskInfo taskInfo) {
- taskService.updateTask(processId, processInstanceId, taskId, taskInfo,
true, SecurityPolicy.of(user, groups));
+ taskService.updateTask(taskId, taskInfo, true);
return Response.ok().build();
}
@PATCH
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
- @Path("{processId}/instances/{processInstanceId}/tasks/{taskId}")
- public TaskInfo partialUpdateTask(@PathParam("processId") String processId,
- @PathParam("processInstanceId") String processInstanceId,
+ @Path("{taskId}")
+ public TaskInfo partialUpdateTask(
@PathParam("taskId") String taskId,
@QueryParam("user") final String user,
@QueryParam("group") final List<String> groups,
TaskInfo taskInfo) {
- return taskService.updateTask(processId, processInstanceId, taskId,
taskInfo, false, SecurityPolicy.of(user, groups));
+ return taskService.updateTask(taskId, taskInfo, false);
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
- @Path("{processId}/instances/{processInstanceId}/tasks/{taskId}")
- public TaskInfo getTask(@PathParam("processId") String processId,
- @PathParam("processInstanceId") String processInstanceId,
+ @Path("{taskId}")
+ public TaskInfo getTask(
@PathParam("taskId") String taskId,
@QueryParam("user") final String user,
@QueryParam("group") final List<String> groups) {
- return taskService.getTask(processId, processInstanceId, taskId,
SecurityPolicy.of(user, groups));
+ return taskService.getTask(taskId);
}
}
diff --git
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
index 17cac753e5..0e5449be86 100644
---
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
+++
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/test/java/org/kie/kogito/integrationtests/quarkus/TaskIT.java
@@ -22,8 +22,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.Collections;
+import java.util.Iterator;
import java.util.Map;
-import java.util.Set;
import org.acme.travels.Traveller;
import org.junit.jupiter.api.Test;
@@ -307,7 +307,7 @@ class TaskIT {
void testUpdateTaskInfo() {
Traveller traveller = new Traveller("pepe", "rubiales",
"[email protected]", "Spanish");
- String processId = given()
+ given()
.contentType(ContentType.JSON)
.when()
.body(Collections.singletonMap("traveller", traveller))
@@ -321,61 +321,52 @@ class TaskIT {
.contentType(ContentType.JSON)
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.when()
- .get("/approvals/{processId}/tasks")
+ .get("/usertasks/instance")
.then()
.statusCode(200)
.extract()
.path("[0].id");
traveller.setEmail("[email protected]");
+
TaskInfo upTaskInfo = new TaskInfo("firstAproval", "high",
Collections.singleton("admin"),
Collections.singleton("managers"),
Collections.singleton("Javierito"), Collections.emptySet(),
- Collections.emptySet(), Collections.singletonMap("traveller",
traveller));
+ Collections.emptySet(), Collections.emptyMap());
+
given().contentType(ContentType.JSON)
.when()
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.pathParam("taskId", taskId)
.body(upTaskInfo)
-
.put("/management/processes/approvals/instances/{processId}/tasks/{taskId}")
+ .put("/management/usertasks/{taskId}")
.then()
.statusCode(200);
- ClientTaskInfo downTaskInfo = given().contentType(ContentType.JSON)
+ TaskInfo downTaskInfo = given().contentType(ContentType.JSON)
.when()
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.pathParam("taskId", taskId)
-
.get("/management/processes/approvals/instances/{processId}/tasks/{taskId}")
+ .get("/management/usertasks/{taskId}")
.then()
.statusCode(200)
.extract()
- .as(ClientTaskInfo.class);
- assertEquals(traveller, downTaskInfo.inputParams.traveller);
- }
-
- private static class ClientTaskInfo {
-
- public String description;
- public String priority;
- public Set<String> potentialUsers;
- public Set<String> potentialGroups;
- public Set<String> excludedUsers;
- public Set<String> adminUsers;
- public Set<String> adminGroups;
- public TravellerInputModel inputParams;
+ .as(TaskInfo.class);
+
+ // we are only interested in our inputs
+ Iterator<Map.Entry<String, Object>> iterator =
downTaskInfo.getInputParams().entrySet().iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<String, Object> item = iterator.next();
+ if (!upTaskInfo.getInputParams().keySet().contains(item.getKey()))
{
+ iterator.remove();
+ }
+ }
+ // we cannot compare yet because the json it is not properly
deserialize
+ assertThat(downTaskInfo).isEqualTo(upTaskInfo);
+ assertThat(downTaskInfo.getInputParams()).isNotNull();
+ assertThat(downTaskInfo.getInputParams().get("traveller")).isNull();
}
- private static class TravellerInputModel {
- public String TaskName;
- public String NodeName;
- public Boolean Skippable;
- public String ActorId;
- public String GroupId;
- public Traveller traveller;
- }
}
diff --git
a/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
b/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
index aa82dc81cb..8fdd0e8f6f 100644
---
a/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
+++
b/springboot/addons/task-management/src/main/java/org/kie/kogito/task/management/TaskManagementRestController.java
@@ -20,12 +20,12 @@ package org.kie.kogito.task.management;
import java.util.List;
-import org.kie.kogito.jbpm.usertask.handler.Policies;
import org.kie.kogito.process.ProcessConfig;
-import org.kie.kogito.process.Processes;
import org.kie.kogito.task.management.service.TaskInfo;
import org.kie.kogito.task.management.service.TaskManagementOperations;
import org.kie.kogito.task.management.service.TaskManagementService;
+import org.kie.kogito.usertask.UserTaskConfig;
+import org.kie.kogito.usertask.UserTasks;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
@@ -40,44 +40,41 @@ import
org.springframework.web.bind.annotation.RestController;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@RestController
-@RequestMapping("/management/processes")
+@RequestMapping("/management/usertasks/")
public class TaskManagementRestController {
TaskManagementOperations taskService;
@Autowired
- public TaskManagementRestController(Processes processes, ProcessConfig
processConfig) {
- this.taskService = new TaskManagementService(processes, processConfig);
+ public TaskManagementRestController(UserTasks userTasks, UserTaskConfig
userTaskConfig, ProcessConfig processConfig) {
+ this.taskService = new TaskManagementService(userTasks,
userTaskConfig, processConfig);
}
- @PutMapping(value =
"{processId}/instances/{processInstanceId}/tasks/{taskId}", produces =
APPLICATION_JSON_VALUE)
- public ResponseEntity<Void> updateTask(@PathVariable("processId") String
processId,
- @PathVariable("processInstanceId") String processInstanceId,
+ @PutMapping(value = "{taskId}", produces = APPLICATION_JSON_VALUE)
+ public ResponseEntity<Void> updateTask(
@PathVariable("taskId") String taskId,
@RequestParam(value = "user", required = false) String user,
@RequestParam(value = "group", required = false) List<String>
groups,
@RequestBody TaskInfo taskInfo) {
- taskService.updateTask(processId, processInstanceId, taskId, taskInfo,
true, Policies.of(user, groups));
+ taskService.updateTask(taskId, taskInfo, true);
return ResponseEntity.ok().build();
}
- @PatchMapping(value =
"{processId}/instances/{processInstanceId}/tasks/{taskId}", produces =
APPLICATION_JSON_VALUE)
- public TaskInfo partialUpdateTask(@PathVariable("processId") String
processId,
- @PathVariable("processInstanceId") String processInstanceId,
+ @PatchMapping(value = "{taskId}", produces = APPLICATION_JSON_VALUE)
+ public TaskInfo partialUpdateTask(
@PathVariable("taskId") String taskId,
@RequestParam(value = "user", required = false) String user,
@RequestParam(value = "group", required = false) List<String>
groups,
@RequestBody TaskInfo taskInfo) {
- return taskService.updateTask(processId, processInstanceId, taskId,
taskInfo, false, Policies.of(user, groups));
+ return taskService.updateTask(taskId, taskInfo, false);
}
- @GetMapping(value =
"{processId}/instances/{processInstanceId}/tasks/{taskId}", produces =
APPLICATION_JSON_VALUE)
- public TaskInfo getTask(@PathVariable("processId") String processId,
- @PathVariable("processInstanceId") String processInstanceId,
+ @GetMapping(value = "{taskId}", produces = APPLICATION_JSON_VALUE)
+ public TaskInfo getTask(
@PathVariable("taskId") String taskId,
@RequestParam(value = "user", required = false) String user,
@RequestParam(value = "group", required = false) List<String>
groups) {
- return taskService.getTask(processId, processInstanceId, taskId,
Policies.of(user, groups));
+ return taskService.getTask(taskId);
}
}
diff --git
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
index 5da1e8e6cd..f00a5267e0 100644
---
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
+++
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/TaskTest.java
@@ -25,6 +25,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
+import java.util.Iterator;
import java.util.Map;
import java.util.stream.Stream;
@@ -312,7 +313,7 @@ public class TaskTest extends BaseRestTest {
void testUpdateTaskInfo() {
Traveller traveller = new Traveller("pepe", "rubiales",
"[email protected]", "Spanish", new Address("Alfredo Di Stefano",
"Madrid", "28033", "Spain"));
- String processId = given()
+ given()
.contentType(ContentType.JSON)
.when()
.body(Collections.singletonMap("traveller", traveller))
@@ -326,9 +327,8 @@ public class TaskTest extends BaseRestTest {
.contentType(ContentType.JSON)
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.when()
- .get("/approvals/{processId}/tasks")
+ .get("/usertasks/instance")
.then()
.statusCode(200)
.extract()
@@ -341,10 +341,9 @@ public class TaskTest extends BaseRestTest {
.when()
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.pathParam("taskId", taskId)
.body(upTaskInfo)
-
.put("/management/processes/approvals/instances/{processId}/tasks/{taskId}")
+ .put("/management/usertasks/{taskId}")
.then()
.statusCode(200);
@@ -352,13 +351,24 @@ public class TaskTest extends BaseRestTest {
.when()
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", processId)
.pathParam("taskId", taskId)
-
.get("/management/processes/approvals/instances/{processId}/tasks/{taskId}")
+ .get("/management/usertasks/{taskId}")
.then()
.statusCode(200)
.extract()
.as(TaskInfo.class);
+
+ // we are only interested in our inputs
+ Iterator<Map.Entry<String, Object>> iterator =
downTaskInfo.getInputParams().entrySet().iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<String, Object> item = iterator.next();
+ if (!upTaskInfo.getInputParams().keySet().contains(item.getKey()))
{
+ iterator.remove();
+ }
+ }
+ // we cannot compare yet because the json it is not properly
deserialize
+ assertThat(downTaskInfo).isEqualTo(upTaskInfo);
assertThat(downTaskInfo.getInputParams()).isNotNull();
+ assertThat(downTaskInfo.getInputParams().get("traveller")).isNull();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]