public ApprovalStageDefinitionType approverRelation(QName value) { getApproverRelation().add(value); return this; }
private boolean shouldBeSkipped(ApprovalStageDefinitionType stage) { if (!stage.getApproverRelation().isEmpty()) { throw new IllegalStateException("Schema stage was not prepared correctly; contains unresolved approver relations: " + stage); } return stage.getOutcomeIfNoApprovers() == ApprovalLevelOutcomeType.SKIP && stage.getApproverRef().isEmpty() && stage.getApproverExpression().isEmpty(); } }
public List<QName> createApproverRelationList() { PrismForJAXBUtil.createProperty(asPrismContainerValue(), F_APPROVER_RELATION); return getApproverRelation(); }
public void prepareStage(ApprovalStageDefinitionType stageDef, RelationResolver relationResolver, ReferenceResolver referenceResolver) { try { // resolves filters in approvers List<ObjectReferenceType> resolvedApprovers = new ArrayList<>(); for (ObjectReferenceType ref : stageDef.getApproverRef()) { resolvedApprovers.addAll(referenceResolver.resolveReference(ref, "approver ref")); } // resolves approver relations resolvedApprovers.addAll(relationResolver.getApprovers(stageDef.getApproverRelation())); stageDef.getApproverRef().clear(); stageDef.getApproverRef().addAll(resolvedApprovers); stageDef.getApproverRelation().clear(); // default values if (stageDef.getOutcomeIfNoApprovers() == null) { stageDef.setOutcomeIfNoApprovers(ApprovalLevelOutcomeType.REJECT); } if (stageDef.getGroupExpansion() == null) { stageDef.setGroupExpansion(GroupExpansionType.BY_CLAIMING_WORK_ITEMS); } } catch (ExpressionEvaluationException | ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | SecurityViolationException e) { throw new SystemException("Couldn't prepare approval schema for execution: " + e.getMessage(), e); // todo propagate these exceptions? } }
ApprovalSchemaType getSchemaFromAction(@NotNull ApprovalPolicyActionType approvalAction) { // TODO approval process if (approvalAction.getApprovalSchema() != null) { return approvalAction.getApprovalSchema().clone(); } else { ApprovalSchemaType rv = new ApprovalSchemaType(prismContext); ApprovalStageDefinitionType stageDef = new ApprovalStageDefinitionType(prismContext); stageDef.getApproverRef().addAll(CloneUtil.cloneCollectionMembers(approvalAction.getApproverRef())); stageDef.getApproverRelation().addAll(approvalAction.getApproverRelation()); stageDef.getApproverExpression().addAll(approvalAction.getApproverExpression()); stageDef.setAutomaticallyApproved(approvalAction.getAutomaticallyApproved()); // TODO maybe use name + description as well rv.getStage().add(stageDef); return rv; } }