From c258841dfe04849e4b2fa8c35d7e0c6c3367a7a9 Mon Sep 17 00:00:00 2001 From: "Katarina Valalikova (katkav)" Date: Thu, 2 Oct 2014 09:27:49 +0200 Subject: [PATCH] improving searching conflicting shadow (already exists situation) --- .../impl/ObjectAlreadyExistHandler.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java index 6f0375b0a92..400e58b1e88 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.provisioning.consistency.impl; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import javax.xml.namespace.QName; @@ -38,7 +39,9 @@ import com.evolveum.midpoint.provisioning.ucf.api.GenericFrameworkException; import com.evolveum.midpoint.schema.ResultHandler; import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.processor.ResourceAttribute; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ShadowUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.CommunicationException; @@ -120,8 +123,15 @@ public T handleError(T shadow, FailedOperation op, Except private ObjectQuery createQueryByIcfName(ShadowType shadow) throws SchemaException { // TODO: error handling TODO TODO TODO set matching rule instead of null in equlas filter - PrismProperty nameProperty = shadow.getAttributes().asPrismContainerValue() - .findProperty(new QName(SchemaConstants.NS_ICF_SCHEMA, "name")); + Collection> secondaryIdentifiers = ShadowUtil.getSecondaryIdentifiers(shadow); + PrismProperty nameProperty = null; + if (secondaryIdentifiers.size() != 1){ + nameProperty = shadow.getAttributes().asPrismContainerValue() + .findProperty(new QName(SchemaConstants.NS_ICF_SCHEMA, "name")); + } else { + nameProperty = secondaryIdentifiers.iterator().next(); + } + EqualFilter nameFilter = EqualFilter.createEqual(new ItemPath(ShadowType.F_ATTRIBUTES, nameProperty.getDefinition().getName()),nameProperty); RefFilter resourceRefFilter = RefFilter.createReferenceEqual(ShadowType.F_RESOURCE_REF, ShadowType.class, prismContext, shadow.getResourceRef().getOid());