diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/repositories/TaskRepository.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/repositories/TaskRepository.java index 5338d1d4ab..019b2d1bac 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/repositories/TaskRepository.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/repositories/TaskRepository.java @@ -26,9 +26,9 @@ public interface TaskRepository extends MongoRepository, QuerydslP List findAllByTransitionIdIn(Collection ids); - Page findByUserId(Pageable pageable, String userId); + Page findByAssignee_Id(Pageable pageable, String userId); - List findByUserIdAndFinishDateNotNull(Long userId); + List findByAssignee_IdAndFinishDateNotNull(String userId); Task findByTransitionIdAndCaseId(String transitionId, String caseId); @@ -36,7 +36,7 @@ public interface TaskRepository extends MongoRepository, QuerydslP List findAllBy_idIn(Iterable id); - void deleteAllByCaseIdAndUserIdIsNull(String caseId); + void deleteAllByCaseIdAndAssignee_IdIsNull(String caseId); void deleteAllByCaseIdAndFinishDateIsNotNull(String caseId); diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskSearchService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskSearchService.java index f887e87dd8..fb03f39944 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskSearchService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskSearchService.java @@ -221,7 +221,7 @@ private void buildUserQuery(TaskSearchRequest request, BooleanBuilder query) { } public Predicate userQuery(String userId) { - return QTask.task.userId.eq(userId); + return QTask.task.assignee.id.eq(userId); } private void buildProcessQuery(TaskSearchRequest request, BooleanBuilder query) { diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java index d54ca85a7a..26be3a46e3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java @@ -2,6 +2,7 @@ import com.google.common.collect.Ordering; import com.netgrif.application.engine.objects.auth.domain.AbstractUser; +import com.netgrif.application.engine.objects.auth.domain.ActorTransformer; import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.auth.service.UserService; import com.netgrif.application.engine.elastic.service.interfaces.IElasticTaskMappingService; @@ -166,8 +167,7 @@ protected Case assignTaskToUser(AbstractUser user, Task task, Case useCase, Tran startExecution(transition, useCase); // TODO: impersonation - task.setUserId(user.getStringId()); - task.setUserRealmId(user.getRealmId()); + task.setAssignee(ActorTransformer.toActorRef(user)); task.setStartDate(LocalDateTime.now()); // TODO: impersonation task.setUser(user); @@ -398,8 +398,7 @@ private Case returnTokens(Task task, Case useCase) { }); workflowService.updateMarking(useCase); - task.setUserId(null); - task.setUserRealmId(null); + task.setAssignee(null); task.setStartDate(null); useCase = workflowService.save(useCase); @@ -452,8 +451,7 @@ public DelegateTaskEventOutcome delegateTask(DelegateTaskParams delegateTaskPara protected Case delegate(AbstractUser delegated, Task task, Case useCase, Transition transition) throws TransitionNotExecutableException { if (task.getUserId() != null) { - task.setUserId(delegated.getStringId()); - task.setUserRealmId(delegated.getRealmId()); + task.setAssignee(ActorTransformer.toActorRef(delegated)); task.setUser(delegated); save(task); return useCase; @@ -572,8 +570,7 @@ protected Case finishExecution(Transition transition, Task task, Case useCase) t task.setFinishDate(LocalDateTime.now()); task.setFinishedBy(task.getUserId()); - task.setUserId(null); - task.setUserRealmId(null); + task.setAssignee(null); save(task); return workflowService.save(useCase); @@ -762,7 +759,7 @@ public List findAllById(List ids) { public Page findByUser(Pageable pageable, AbstractUser user) { // TODO: impersonation // return loadUsers(taskRepository.findByUserId(pageable, user.getSelfOrImpersonated().getStringId())); - return loadUsers(taskRepository.findByUserId(pageable, user.getStringId())); + return loadUsers(taskRepository.findByAssignee_Id(pageable, user.getStringId())); } @Override diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java index b226b7e889..d261e28cbf 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java @@ -1,6 +1,7 @@ package com.netgrif.application.engine.workflow.web.responsebodies; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.netgrif.application.engine.objects.auth.domain.ActorRef; import com.netgrif.application.engine.objects.elastic.domain.ElasticTask; import com.netgrif.application.engine.objects.petrinet.domain.dataset.Field; import com.netgrif.application.engine.objects.petrinet.domain.events.EventType; @@ -36,9 +37,7 @@ public class Task { private Integer priority; - private String userId; - - private String userRealmId; + private ActorRef assignee; private Map> roles; @@ -85,8 +84,7 @@ public Task(com.netgrif.application.engine.objects.workflow.domain.Task task, Lo this.caseColor = task.getCaseColor(); this.caseTitle = task.getCaseTitle(); this.priority = task.getPriority(); - this.userId = task.getUser() != null ? task.getUser().getStringId() : null; - this.userRealmId = task.getUser() != null ? task.getUser().getRealmId() : null; + this.assignee = task.getAssignee(); this.roles = task.getRoles(); this.users = task.getUsers(); this.startDate = task.getStartDate(); diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/ipc/TaskApiTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/ipc/TaskApiTest.groovy index 0708b93a2b..b34a519ba9 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/ipc/TaskApiTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/ipc/TaskApiTest.groovy @@ -230,7 +230,7 @@ class TaskApiTest { helper.assignTaskToSuper(TASK_BULK_TASK, control.stringId) helper.finishTaskAsSuper(TASK_BULK_TASK, control.stringId) - assert taskRepository.findAll(QTask.task.userId.eq(userService.system.getStringId())).size() == 2 + assert taskRepository.findAll(QTask.task.assignee.id.eq(userService.system.getStringId())).size() == 2 } public static final String TASK_GETTER_NET_FILE = "ipc_data.xml" diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/elastic/domain/ElasticTask.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/elastic/domain/ElasticTask.java index db7babc19e..db3616f9bf 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/elastic/domain/ElasticTask.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/elastic/domain/ElasticTask.java @@ -51,6 +51,10 @@ public abstract class ElasticTask implements Serializable { private String userRealmId; + private String userFullName; + + private String username; + private LocalDateTime startDate; private String transactionId; @@ -93,8 +97,12 @@ public ElasticTask(Task task) { this.caseTitleSortable = this.caseTitle; if (task.getPriority() != null) this.priority = task.getPriority(); - this.userId = task.getUserId(); - this.userRealmId = task.getUserRealmId(); + if (task.getAssignee() != null) { + this.userId = task.getAssignee().getId(); + this.userRealmId = task.getAssignee().getRealmId(); + this.username = task.getAssignee().getUsername(); + this.userFullName = task.getAssignee().getFullName(); + } this.startDate = task.getStartDate(); this.roles = task.getRoles(); this.userRefs = task.getUserRefs(); @@ -118,6 +126,8 @@ public void update(ElasticTask task) { this.priority = task.getPriority(); this.userId = task.getUserId(); this.userRealmId = task.getUserRealmId(); + this.userFullName = task.getUserFullName(); + this.username = task.getUsername(); this.startDate = task.getStartDate(); this.roles = task.getRoles(); this.viewRoles = task.getViewRoles(); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java index d1f5ea315c..f918b55c65 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java @@ -4,6 +4,7 @@ import com.netgrif.application.engine.objects.annotations.Indexable; import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.auth.domain.AbstractUser; +import com.netgrif.application.engine.objects.auth.domain.ActorRef; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; import com.netgrif.application.engine.objects.petrinet.domain.dataset.Field; import com.netgrif.application.engine.objects.petrinet.domain.events.EventType; @@ -69,12 +70,10 @@ public abstract class Task implements Serializable { @Setter private Integer priority; + @Getter @Setter @Indexed - private String userId; - - @Setter - private String userRealmId; + private ActorRef assignee; @Getter @Setter @@ -281,12 +280,12 @@ public void addEventTitle(EventType type, I18nString title) { @JsonIgnore public String getUserId() { - return userId; + return assignee != null ? assignee.getId() : null; } @JsonIgnore public String getUserRealmId() { - return userRealmId; + return assignee != null ? assignee.getRealmId() : null; } public String getTranslatedEventTitle(EventType assign, Locale locale) { diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/Task.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/Task.java index ce9702a0f9..1706fb4be9 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/Task.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/Task.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.netgrif.application.engine.objects.auth.domain.AbstractUser; +import com.netgrif.application.engine.objects.auth.domain.ActorRef; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; import com.netgrif.application.engine.objects.petrinet.domain.dataset.Field; import com.netgrif.application.engine.objects.petrinet.domain.events.EventType; @@ -29,8 +30,8 @@ public Task() { } @Builder(builderMethodName = "with") - public Task(ProcessResourceId _id, String processId, String caseId, String transitionId, TaskLayout layout, I18nString title, String caseColor, String caseTitle, Integer priority, String userId, String userRealmId, AbstractUser user, List triggers, Map> roles, Map> userRefs, Map> users, List viewRoles, List viewUserRefs, List viewUsers, List negativeViewRoles, List negativeViewUsers, LocalDateTime startDate, LocalDateTime finishDate, String finishedBy, String transactionId, Boolean requiredFilled, LinkedHashSet immediateDataFields, List> immediateData, String icon, AssignPolicy assignPolicy, DataFocusPolicy dataFocusPolicy, FinishPolicy finishPolicy, Map eventTitles, Map assignedUserPolicy, Map consumedTokens, Map tags) { - super(_id, processId, caseId, transitionId, layout, title, caseColor, caseTitle, priority, userId, userRealmId, user, triggers, roles, userRefs, users, viewRoles, viewUserRefs, viewUsers, negativeViewRoles, negativeViewUsers, startDate, finishDate, finishedBy, transactionId, requiredFilled, immediateDataFields, immediateData, icon, assignPolicy, dataFocusPolicy, finishPolicy, eventTitles, assignedUserPolicy, consumedTokens, tags); + public Task(ProcessResourceId _id, String processId, String caseId, String transitionId, TaskLayout layout, I18nString title, String caseColor, String caseTitle, Integer priority, ActorRef assignee, AbstractUser user, List triggers, Map> roles, Map> userRefs, Map> users, List viewRoles, List viewUserRefs, List viewUsers, List negativeViewRoles, List negativeViewUsers, LocalDateTime startDate, LocalDateTime finishDate, String finishedBy, String transactionId, Boolean requiredFilled, LinkedHashSet immediateDataFields, List> immediateData, String icon, AssignPolicy assignPolicy, DataFocusPolicy dataFocusPolicy, FinishPolicy finishPolicy, Map eventTitles, Map assignedUserPolicy, Map consumedTokens, Map tags) { + super(_id, processId, caseId, transitionId, layout, title, caseColor, caseTitle, priority, assignee, user, triggers, roles, userRefs, users, viewRoles, viewUserRefs, viewUsers, negativeViewRoles, negativeViewUsers, startDate, finishDate, finishedBy, transactionId, requiredFilled, immediateDataFields, immediateData, icon, assignPolicy, dataFocusPolicy, finishPolicy, eventTitles, assignedUserPolicy, consumedTokens, tags); } @Id