private static AssignmentType getAssignment(AssignmentPathSegmentType segment,
PrismObject<? extends ObjectType> candidate, ModelService modelService, Task task, OperationResult result)
throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException,
ConfigurationException, ExpressionEvaluationException {
if (segment.getSourceRef() == null || segment.getSourceRef().getOid() == null || segment.getAssignmentId() == null) {
return null;
}
PrismObject<? extends ObjectType> source;
if (candidate != null && segment.getSourceRef().getOid().equals(candidate.getOid()) && candidate.asObjectable() instanceof FocusType) {
source = candidate;
} else {
source = getObject(segment.getSourceRef(), modelService, task, result);
}
PrismContainer<AssignmentType> assignmentContainer = source.findContainer(FocusType.F_ASSIGNMENT);
if (assignmentContainer == null) {
return null;
}
return asContainerable(assignmentContainer.findValue(segment.getAssignmentId()));
}