public List<PrismContainerValue<WorkItemType>> searchApprovalWorkItems(int days, QName sortColumn)
throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException,
ConfigurationException, ExpressionEvaluationException, DatatypeConfigurationException {
Task task = taskManager.createTaskInstance();
OperationResult result = task.getResult();
ObjectQuery query = prismContext.queryFor(AbstractWorkItemType.class).build();
if (days > 0) {
XMLGregorianCalendar since = (new Clock()).currentTimeXMLGregorianCalendar();
DatatypeFactory df = DatatypeFactory.newInstance();
since.add (df.newDuration(false, 0, 0, days, 0, 0, 0));
query.addFilter(prismContext.queryFor(AbstractWorkItemType.class)
.item(AbstractWorkItemType.F_CREATE_TIMESTAMP).lt(since).buildFilter());
}
if (sortColumn != null) {
query.addFilter(prismContext.queryFor(AbstractWorkItemType.class)
.asc(sortColumn)
.buildFilter());
}
Object[] itemsToResolve = { WorkItemType.F_ASSIGNEE_REF,
ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_OBJECT_REF),
ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_TARGET_REF),
ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_REQUESTER_REF) };
SearchResultList<WorkItemType> workItems = model.searchContainers(WorkItemType.class, query,
schemaHelper.getOperationOptionsBuilder().items(itemsToResolve).resolve().build(), task, result);
return PrismContainerValue.toPcvList(workItems);
}