Skip to content

Commit

Permalink
[incubator-kie-issues-1485] Reenable event test in ProcessTestEvents …
Browse files Browse the repository at this point in the history
…in kogito-apps
  • Loading branch information
elguardian committed Oct 16, 2024
1 parent f4d543d commit 609c452
Show file tree
Hide file tree
Showing 18 changed files with 176 additions and 189 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -112,6 +113,25 @@ public void setInputParams(Map<String, Object> inputParams) {
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=" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -80,61 +93,31 @@ private void setMap(Consumer<Map<String, Object>> allConsumer,
}

@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();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public interface UserTask {
*
* @return task priority if present
*/
Integer getTaskPriority();
String getTaskPriority();

/**
* Returns reference name of the task
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public interface UserTaskInstance {

String getTaskDescription();

Integer getTaskPriority();
String getTaskPriority();

Map<String, Object> getMetadata();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,20 @@ public AttachmentInfo(URI uri, String name) {
this.name = name;
}

public void setUri(URI uri) {
this.uri = uri;
}

public void setName(String name) {
this.name = name;
}

public URI getUri() {
return uri;
}

public String getName() {
return name;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -87,11 +87,11 @@ public void setTaskDescription(String taskDescription) {
this.taskDescription = taskDescription;
}

public Integer getTaskPriority() {
public String getTaskPriority() {
return taskPriority;
}

public void setTaskPriority(Integer taskPriority) {
public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public static Map<String, Object> buildUserTaskMetadata(UserTaskInstance pi) {
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());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ public boolean accept(Object payload) {
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())
Expand All @@ -52,7 +50,7 @@ public DataEvent<?> adapt(Object payload) {
.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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,19 +69,12 @@ public Optional<WorkItemTransition> activateWorkItemHandler(KogitoWorkItemManage
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -116,11 +116,11 @@ public void setTaskDescription(String taskDescription) {
}

@Override
public Integer getTaskPriority() {
public String getTaskPriority() {
return this.taskPriority;
}

public void setTaskPriority(Integer taskPriority) {
public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -282,11 +282,11 @@ public void setTaskDescription(String taskDescription) {
* @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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ private UserTaskView toUserTaskView(UserTaskInstance instance) {
view.setInputs(instance.getInputs());
view.setOutputs(instance.getOutputs());
view.setMetadata(instance.getMetadata());
view.setExternalReferenceId(instance.getExternalReferenceId());
return view;
}

Expand Down
Loading

0 comments on commit 609c452

Please sign in to comment.