public static String makeNiceFromUri(String outcome) { Boolean value = approvalBooleanValueFromUri(outcome); if (value != null) { return value ? DECISION_APPROVED_NICE : DECISION_REJECTED_NICE; } else { return outcome; } }
public static boolean isApprovedFromUri(String uri) { return isApproved(fromUri(uri)); }
public static Boolean approvalBooleanValueFromUri(String uri) { return approvalBooleanValue(fromUri(uri)); }
private void executeCompleteAction(WorkItemType workItem, CompleteWorkItemActionType completeAction, OperationResult result) throws SchemaException, SecurityViolationException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException { WorkItemOutcomeType outcome = completeAction.getOutcome() != null ? ApprovalUtils.fromUri(completeAction.getOutcome()) : WorkItemOutcomeType.REJECT; workItemManager.completeWorkItem(workItem.getExternalId(), ApprovalUtils.toUri(outcome), null, null, WfContextUtil.createCause(completeAction), result); }
@NotNull private static Collection<String> getApproverComments(WfContextType wfc, PerformerCommentsFormatter formatter, Task opTask, OperationResult result) { if (wfc == null) { return emptySet(); } return wfc.getEvent().stream() .flatMap(MiscUtil.instancesOf(WorkItemCompletionEventType.class)) .filter(e -> ApprovalUtils.isApproved(e.getOutput()) && e.getInitiatorRef() != null) .map(e -> formatter.formatComment(e, opTask, result)) .filter(Objects::nonNull) .collect(Collectors.toSet()); }
@Override public AuditEventRecord prepareWorkItemDeletedAuditRecord(WorkItemType workItem, WorkItemEventCauseInformationType cause, TaskEvent taskEvent, WfTask wfTask, OperationResult result) throws WorkflowException { AuditEventRecord auditEventRecord = baseAuditHelper.prepareWorkItemDeletedAuditRecord(workItem, cause, wfTask, result); try { AbstractWorkItemOutputType output = workItem.getOutput(); // TODO - or merge with original deltas? if (output != null && ApprovalUtils.fromUri(output.getOutcome()) == WorkItemOutcomeType.APPROVE && output instanceof WorkItemResultType && ((WorkItemResultType) output).getAdditionalDeltas() != null) { addDeltasToEventRecord(auditEventRecord, ObjectTreeDeltas.fromObjectTreeDeltasType(((WorkItemResultType) output).getAdditionalDeltas(), getPrismContext())); } } catch (SchemaException e) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't retrieve deltas to be put into audit record", e); } return auditEventRecord; }
@Override public List<ObjectReferenceType> prepareApprovedBy(ProcessEvent event, PcpWfTask job, OperationResult result) { WfContextType wfc = job.getTask().getWorkflowContext(); List<ObjectReferenceType> rv = new ArrayList<>(); if (!ApprovalUtils.isApprovedFromUri(event.getOutcome())) { // wfc.approved is not filled in yet return rv; } for (WorkItemCompletionEventType completionEvent : WfContextUtil.getEvents(wfc, WorkItemCompletionEventType.class)) { if (ApprovalUtils.isApproved(completionEvent.getOutput()) && completionEvent.getInitiatorRef() != null) { rv.add(completionEvent.getInitiatorRef().clone()); } } return rv; }
public String getAnswerNice() { return ApprovalUtils.makeNiceFromUri(getOutcome()); }
public static boolean isApproved(AbstractWorkItemOutputType result) { return BooleanUtils.isTrue(approvalBooleanValue(result)); }
public static Boolean approvalBooleanValueNice(String decision) { return parse(decision, DECISION_APPROVED_NICE, DECISION_REJECTED_NICE); }
private static WorkflowResult fromWfAnswer(String answer) { if (answer == null) { return UNKNOWN; } else { Boolean booleanValue = ApprovalUtils.approvalBooleanValueNice(answer); if (booleanValue == null) { return OTHER; } else if (booleanValue) { return APPROVED; } else { return REJECTED; } } }
/** * Prepares deltaOut from deltaIn, based on process instance variables. * (Default implementation of the method from PrimaryChangeAspect.) * * In the default case, mapping deltaIn -> deltaOut is extremely simple. * DeltaIn contains a delta that has to be approved. Workflow answers simply yes/no. * Therefore, we either copy DeltaIn to DeltaOut, or generate an empty list of modifications. */ public ObjectTreeDeltas prepareDeltaOut(ProcessEvent event, PcpWfTask pcpJob, OperationResult result) throws SchemaException { ObjectTreeDeltas deltaIn = pcpJob.retrieveDeltasToProcess(); if (ApprovalUtils.isApprovedFromUri(event.getOutcome())) { return deltaIn; } else { return null; } }
rv.predeterminedOutcome = ApprovalUtils.approvalLevelOutcomeFromUri(outcome); rv.automatedCompletionReason = AUTO_COMPLETION_CONDITION;
@NotNull private static List<ObjectReferenceType> getApprovedBy(WfContextType wfc) { return wfc == null ? Collections.emptyList() : wfc.getEvent().stream() .flatMap(MiscUtil.instancesOf(WorkItemCompletionEventType.class)) .filter(e -> ApprovalUtils.isApproved(e.getOutput()) && e.getInitiatorRef() != null) .map(e -> e.getInitiatorRef()) .collect(Collectors.toList()); }
eventMap.put(c.getExternalWorkItemId(), c); assertNotNull("No result in "+c, c.getOutput()); assertEquals("Wrong outcome in "+c, WorkItemOutcomeType.REJECT, ApprovalUtils.fromUri(c.getOutput().getOutcome())); assertNotNull("No cause in "+c, c.getCause()); assertEquals("Wrong cause type in "+c, WorkItemEventCauseTypeType.TIMED_ACTION, c.getCause().getType());
String answer = ApprovalUtils.makeNiceFromUri(output.getOutcome()); record.setResult(answer); message.append(answer);
private static boolean isApproved(WorkItemOutcomeType outcome) { return BooleanUtils.isTrue(approvalBooleanValue(outcome)); }
@SuppressWarnings("unused") private void notUsed() { ApprovalUtils.approvalBooleanValueFromUri(""); }
public static Boolean approvalBooleanValue(AbstractWorkItemOutputType result) { return result != null ? approvalBooleanValue(fromUri(result.getOutcome())) : null; }
for (WorkItemCompletionEventType event : itemEvents) { LOGGER.trace(" - {}", event); allApproved &= ApprovalUtils.isApproved(event.getOutput()); itemEvents.sort(Comparator.nullsLast(Comparator.comparing(event -> XmlTypeConverter.toMillis(event.getTimestamp())))); WorkItemCompletionEventType first = itemEvents.get(0); approved = ApprovalUtils.isApproved(first.getOutput()); LOGGER.warn("Possible race condition, so taking the first one: {} ({})", approved, first);