private LocalizableMessage processNameFromApprovalActions(ApprovalSchemaBuilder.Result schemaBuilderResult, @Nullable EvaluatedAssignment<?> evaluatedAssignment, ModelInvocationContext<?> ctx, OperationResult result) { if (schemaBuilderResult.approvalDisplayName == null) { return null; } Map<QName, Object> variables = new HashMap<>(); variables.put(ExpressionConstants.VAR_OBJECT, getFocusObjectNewOrOld(ctx.modelContext)); variables.put(ExpressionConstants.VAR_OBJECT_DISPLAY_INFORMATION, createLocalizableMessageType(createDisplayInformation(asPrismObject(getFocusObjectNewOrOld(ctx.modelContext)), false))); if (evaluatedAssignment != null) { variables.put(ExpressionConstants.VAR_TARGET, evaluatedAssignment.getTarget()); variables.put(ExpressionConstants.VAR_TARGET_DISPLAY_INFORMATION, createLocalizableMessageType(createDisplayInformation(evaluatedAssignment.getTarget(), false))); variables.put(ExpressionConstants.VAR_EVALUATED_ASSIGNMENT, evaluatedAssignment); variables.put(ExpressionConstants.VAR_ASSIGNMENT, evaluatedAssignment.getAssignmentType()); } else { variables.put(ExpressionConstants.VAR_TARGET, null); variables.put(ExpressionConstants.VAR_TARGET_DISPLAY_INFORMATION, null); variables.put(ExpressionConstants.VAR_EVALUATED_ASSIGNMENT, null); variables.put(ExpressionConstants.VAR_ASSIGNMENT, null); } LocalizableMessageType localizableMessageType; try { localizableMessageType = modelInteractionService .createLocalizableMessageType(schemaBuilderResult.approvalDisplayName, variables, ctx.taskFromModel, result); } catch (CommonException|RuntimeException e) { throw new SystemException("Couldn't create localizable message for approval display name: " + e.getMessage(), e); } return LocalizationUtil.toLocalizableMessage(localizableMessageType); }
private ObjectDelta<? extends ObjectType> factorOutAssignmentValue(EvaluatedAssignment<?> evaluatedAssignment, PlusMinusZero assignmentMode, @NotNull ObjectTreeDeltas<?> objectTreeDeltas, ModelInvocationContext<?> ctx) throws SchemaException { assert assignmentMode == PLUS || assignmentMode == MINUS; @SuppressWarnings("unchecked") PrismContainerValue<AssignmentType> assignmentValue = evaluatedAssignment.getAssignmentType().asPrismContainerValue(); boolean assignmentRemoved = assignmentMode == MINUS; boolean reallyRemoved = objectTreeDeltas.subtractFromFocusDelta(FocusType.F_ASSIGNMENT, assignmentValue, assignmentRemoved, false); if (!reallyRemoved) { ObjectDelta<?> secondaryDelta = ctx.modelContext.getFocusContext().getSecondaryDelta(); if (secondaryDelta != null && secondaryDelta.subtract(FocusType.F_ASSIGNMENT, assignmentValue, assignmentRemoved, true)) { LOGGER.trace("Assignment to be added/deleted was not found in primary delta. It is present in secondary delta, so there's nothing to be approved."); return null; } String message = "Assignment to be added/deleted was not found in primary nor secondary delta." + "\nAssignment:\n" + assignmentValue.debugDump() + "\nPrimary delta:\n" + objectTreeDeltas.debugDump(); throw new IllegalStateException(message); } String objectOid = getFocusObjectOid(ctx.modelContext); return assignmentToDelta(ctx.modelContext.getFocusClass(), evaluatedAssignment.getAssignmentType(), assignmentRemoved, objectOid); }
@Override public EvaluatedExclusionTriggerType toEvaluatedPolicyRuleTriggerType(PolicyRuleExternalizationOptions options, PrismContext prismContext) { EvaluatedExclusionTriggerType rv = new EvaluatedExclusionTriggerType(); fillCommonContent(rv); if (options.getTriggeredRulesStorageStrategy() == FULL) { rv.setConflictingObjectRef(ObjectTypeUtil.createObjectRef(conflictingTarget, prismContext)); rv.setConflictingObjectDisplayName(ObjectTypeUtil.getDisplayName(conflictingTarget)); if (conflictingPath != null) { rv.setConflictingObjectPath(conflictingPath.toAssignmentPathType(options.isIncludeAssignmentsContent())); } if (options.isIncludeAssignmentsContent() && conflictingAssignment.getAssignmentType() != null) { rv.setConflictingAssignment(conflictingAssignment.getAssignmentType().clone()); } } return rv; } }
enforceOverride = true; } else { PrismContainerValue<AssignmentType> assignmentValueToRemove = conflictingAssignment.getAssignmentType() .asPrismContainerValue().clone(); PrismObjectDefinition<F> focusDef = context.getFocusContext().getObjectDefinition();