private void collectMembershipRefVal(PrismReferenceValue membershipRefVal, Class<? extends ObjectType> targetClass, QName relation, Object targetDesc, EvaluationContext ctx) {
if (ctx.assignmentPath.getSegments().stream().anyMatch(aps -> DeputyUtils.isDelegationAssignment(aps.getAssignment(ctx.evaluateOld),
relationRegistry))) {
addIfNotThere(ctx.evalAssignment.getDelegationRefVals(), ctx.evalAssignment::addDelegationRefVal, membershipRefVal,
"delegationRef", targetDesc);
} else {
if (AbstractRoleType.class.isAssignableFrom(targetClass)) {
addIfNotThere(ctx.evalAssignment.getMembershipRefVals(), ctx.evalAssignment::addMembershipRefVal, membershipRefVal,
"membershipRef", targetDesc);
}
}
if (OrgType.class.isAssignableFrom(targetClass) && relationRegistry.isStoredIntoParentOrgRef(relation)) {
addIfNotThere(ctx.evalAssignment.getOrgRefVals(), ctx.evalAssignment::addOrgRefVal, membershipRefVal,
"orgRef", targetDesc);
}
if (ArchetypeType.class.isAssignableFrom(targetClass)) {
addIfNotThere(ctx.evalAssignment.getArchetypeRefVals(), ctx.evalAssignment::addArchetypeRefVal, membershipRefVal,
"archetypeRef", targetDesc);
}
}