From a5494c49ceae8158e7542795fb854ff7913e14a4 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Fri, 30 Aug 2019 16:53:30 +0200 Subject: [PATCH] Fix the filter for claimable work items --- .../page/admin/cases/PageWorkItemsClaimable.java | 9 +-------- .../admin/workflow/dto/WorkItemDtoProvider.java | 2 +- .../com/evolveum/midpoint/wf/util/QueryUtils.java | 13 +++++++++---- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageWorkItemsClaimable.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageWorkItemsClaimable.java index 2f08b9724f6..a9841f37f51 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageWorkItemsClaimable.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageWorkItemsClaimable.java @@ -23,7 +23,6 @@ import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.result.OperationResultStatus; -import com.evolveum.midpoint.schema.util.CaseTypeUtil; import com.evolveum.midpoint.schema.util.CaseWorkItemUtil; import com.evolveum.midpoint.schema.util.WorkItemId; import com.evolveum.midpoint.security.api.AuthorizationConstants; @@ -36,13 +35,9 @@ import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction; import com.evolveum.midpoint.web.page.admin.workflow.PageAdminWorkItems; -import com.evolveum.midpoint.web.page.admin.workflow.PageWorkItems; -import com.evolveum.midpoint.web.page.admin.workflow.WorkItemsPageType; -import com.evolveum.midpoint.web.page.admin.workflow.dto.WorkItemDto; import com.evolveum.midpoint.web.security.SecurityUtils; import com.evolveum.midpoint.wf.util.QueryUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OtherPrivilegesLimitationType; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -51,8 +46,6 @@ import java.util.Arrays; import java.util.List; -import static com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractWorkItemType.F_CREATE_TIMESTAMP; - /** * @author lazyman */ @@ -79,7 +72,7 @@ public PageWorkItemsClaimable() { protected ObjectFilter getCaseWorkItemsFilter(){ OperationResult result = new OperationResult(OPERATION_LOAD_CLAIMABLE_WORK_ITEMS); try { - return QueryUtils.filterForGroups(getPrismContext().queryFor(CaseWorkItemType.class), + return QueryUtils.filterForClaimableItems(getPrismContext().queryFor(CaseWorkItemType.class), SecurityUtils.getPrincipalUser().getOid(), getRepositoryService(), getRelationRegistry(), result) .buildFilter(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/dto/WorkItemDtoProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/dto/WorkItemDtoProvider.java index 7bab51f571a..a97722c9cc1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/dto/WorkItemDtoProvider.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/dto/WorkItemDtoProvider.java @@ -175,7 +175,7 @@ private ObjectQuery createQuery(OperationResult result) throws SchemaException { if (WorkItemsPageType.ALL.equals(workItemsPageType) && authorizedToSeeAll) { return q.build(); } else if (WorkItemsPageType.CLAIMABLE.equals(workItemsPageType)) { - return QueryUtils.filterForGroups(q, currentUserOid(), getRepositoryService(), getRelationRegistry(), result).build(); + return QueryUtils.filterForClaimableItems(q, currentUserOid(), getRepositoryService(), getRelationRegistry(), result).build(); } else { // not authorized to see all => sees only allocated to him (not quite what is expected, but sufficient for the time being) return QueryUtils.filterForAssignees(q, SecurityUtils.getPrincipalUser(), diff --git a/model/workflow-api/src/main/java/com/evolveum/midpoint/wf/util/QueryUtils.java b/model/workflow-api/src/main/java/com/evolveum/midpoint/wf/util/QueryUtils.java index 6a3b87364fa..e13b1f2fc07 100644 --- a/model/workflow-api/src/main/java/com/evolveum/midpoint/wf/util/QueryUtils.java +++ b/model/workflow-api/src/main/java/com/evolveum/midpoint/wf/util/QueryUtils.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.wf.util; -import com.evolveum.midpoint.prism.PrismConstants; import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit; import com.evolveum.midpoint.prism.query.builder.S_FilterEntryOrEmpty; @@ -74,10 +73,12 @@ public static S_AtomicFilterExit filterForNotClosedStateAndAssignees(S_FilterEnt } } - public static S_FilterExit filterForGroups(S_FilterEntryOrEmpty q, String userOid, RepositoryService repositoryService, + public static S_FilterExit filterForClaimableItems(S_FilterEntryOrEmpty q, String userOid, RepositoryService repositoryService, RelationRegistry relationRegistry, OperationResult result) throws SchemaException { - return q.item(CaseWorkItemType.F_CANDIDATE_REF).ref(getGroupsForUser(userOid, repositoryService, relationRegistry, result)); + List candidates = getCandidatesForUser(userOid, repositoryService, relationRegistry, result); + return q.item(CaseWorkItemType.F_CANDIDATE_REF).ref(candidates) + .and().item(CaseWorkItemType.F_ASSIGNEE_REF).isNull(); } private static List getPotentialAssigneesForUser(MidPointPrincipal principal, @@ -94,7 +95,11 @@ private static List getPotentialAssigneesForUser(MidPointPr return rv; } - private static List getGroupsForUser(String userOid, RepositoryService repositoryService, + /** + * Returns values to look for in candidateRef field. Basically, all the groups a user is member of should be present here. + * The question is what to do if candidateRef points to another user or users. This case is obviously not supported yet. + */ + private static List getCandidatesForUser(String userOid, RepositoryService repositoryService, RelationRegistry relationRegistry, OperationResult result) throws SchemaException { List rv = new ArrayList<>(); UserType userType;