Skip to content

Commit

Permalink
Improve/fix UnassignExecutor a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly authored and skublik committed Mar 6, 2019
1 parent 416de2b commit 6f4dc24
Showing 1 changed file with 41 additions and 41 deletions.
Expand Up @@ -26,7 +26,6 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.QueryFactory;
import com.evolveum.midpoint.schema.constants.RelationTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.QNameUtil;
Expand All @@ -45,6 +44,7 @@

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
Expand Down Expand Up @@ -138,51 +138,51 @@ public PipelineData execute(ActionExpressionType expression, PipelineData input,
}

private ObjectDelta<? extends ObjectType> createDelta(AssignmentHolderType object, Collection<ObjectReferenceType> resources, Collection<ObjectReferenceType> roles, Collection<String> relations) throws ScriptExecutionException {
if (relations == null || relations.isEmpty()) {
QName defaultRelation = prismContext.getDefaultRelation() != null ?
prismContext.getDefaultRelation() : RelationTypes.MEMBER.getRelation();
relations = Collections.singletonList(QNameUtil.qNameToUri(defaultRelation));
}
List<AssignmentType> assignmentsForDelete = new ArrayList<>();

List<AssignmentType> oldAssignments = object.getAssignment();
if(oldAssignments != null) {
for (AssignmentType oldAssignment : oldAssignments) {
if(oldAssignment.getTargetRef() != null) {
if (roles != null) {
outerloop:
for (ObjectReferenceType roleRef : roles) {
if(oldAssignment.getTargetRef().getOid().equals(roleRef.getOid())) {
if(relations != null && !relations.isEmpty()) {
for (String relationQuery : relations) {
if(prismContext.relationMatches(QNameUtil.uriToQName(relationQuery, true), oldAssignment.getTargetRef().getRelation())) {
assignmentsForDelete.add(oldAssignment.clone());
break outerloop;
}
}
} else {
if(prismContext.relationMatches(RelationTypes.MEMBER.getRelation(), oldAssignment.getTargetRef().getRelation())) {
assignmentsForDelete.add(oldAssignment.clone());
break outerloop;
}
}
}
}
}
} else if(oldAssignment.getConstruction() != null) {
if (resources != null) {
for (ObjectReferenceType resourceRef : resources) {
if(oldAssignment.getConstruction().getResourceRef() != null
&& oldAssignment.getConstruction().getResourceRef().getOid().equals(resourceRef.getOid())) {
assignmentsForDelete.add(oldAssignment.clone());
break;
}
}
}
}
}
}

ObjectDelta<? extends ObjectType> delta = null;
for (AssignmentType oldAssignment : oldAssignments) {
ObjectReferenceType targetRef = oldAssignment.getTargetRef();
if (targetRef != null) {
if (roles != null) {
outerloop:
for (ObjectReferenceType roleRef : roles) {
if (targetRef.getOid() != null && targetRef.getOid().equals(roleRef.getOid())) {
for (String relationQuery : relations) {
if (prismContext.relationMatches(QNameUtil.uriToQName(relationQuery, true), targetRef.getRelation())) {
assignmentsForDelete.add(oldAssignment.clone());
break outerloop;
}
}
}
}
}
} else if (oldAssignment.getConstruction() != null) {
if (resources != null) {
for (ObjectReferenceType resourceRef : resources) {
if (oldAssignment.getConstruction().getResourceRef() != null &&
oldAssignment.getConstruction().getResourceRef().getOid() != null &&
oldAssignment.getConstruction().getResourceRef().getOid().equals(resourceRef.getOid())) {
assignmentsForDelete.add(oldAssignment.clone());
break;
}
}
}
}
}

ObjectDelta<? extends ObjectType> delta;

try {
delta = prismContext.deltaFor(object.getClass()).item(ItemPath.create(AssignmentHolderType.F_ASSIGNMENT))
.delete(assignmentsForDelete.toArray(new AssignmentType[0])).asObjectDelta(object.getOid());
delta = prismContext.deltaFor(object.getClass())
.item(ItemPath.create(AssignmentHolderType.F_ASSIGNMENT))
.deleteRealValues(assignmentsForDelete)
.asObjectDelta(object.getOid());
} catch (SchemaException e) {
throw new ScriptExecutionException("Couldn't prepare modification to delete resource/role assignments", e);
}
Expand Down

0 comments on commit 6f4dc24

Please sign in to comment.