UpdateScript.groovy revision c8408fe9c4eb7f97ffa5b6aafcd4157afd478bc8
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
c8408fe9c4eb7f97ffa5b6aafcd4157afd478bc8Jon Branch * Copyright 2014-2015 ForgeRock AS
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * The contents of this file are subject to the terms
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * of the Common Development and Distribution License
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * (the License). You may not use this file except in
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * compliance with the License.
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * You can obtain a copy of the License at
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * See the License for the specific language governing
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * permission and limitations under the License.
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * When distributing Covered Code, include this CDDL
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * Header Notice in each file and include the License file
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * If applicable, add the following below the CDDL Header,
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * with the fields enclosed by brackets [] replaced by
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * your own identifying information:
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay * "Portions Copyrighted [year] [name of copyright owner]"
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.forgerock.json.resource.NotFoundException
c8408fe9c4eb7f97ffa5b6aafcd4157afd478bc8Jon Branchimport org.forgerock.json.resource.ResourceResponse
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.forgerock.openicf.connectors.scriptedcrest.ScriptedCRESTConfiguration
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.forgerock.openicf.misc.scriptedcommon.OperationType
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.exceptions.ConnectorException
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.exceptions.InvalidAttributeValueException
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.exceptions.UnknownUidException
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.objects.Attribute
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.objects.ObjectClass
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.objects.OperationOptions
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.objects.Schema
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemayimport org.identityconnectors.framework.common.objects.Uid
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemaydef updateAttributes = attributes as Set<Attribute>
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemaydef configuration = configuration as ScriptedCRESTConfiguration
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay Map<String, Object> objectClassInfo = configuration.propertyBag[objectClass.objectClassValue];
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay ReadRequest request = Requests.newReadRequest(objectClassInfo.resourceContainer, uid.uidValue)
c8408fe9c4eb7f97ffa5b6aafcd4157afd478bc8Jon Branch ResourceResponse resource = connection.read(new RootContext(), request)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay if (null != info && info.attributeInfo.isUpdateable()) {
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay if (null != resource.content.get(info.jsonName)) {
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay resource.content.addPermissive(info.jsonName, null)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay } else if (info.attributeInfo.isMultiValued()) {
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay resource.content.addPermissive(info.jsonName, it.value)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay resource.content.addPermissive(info.jsonName, it.value.each { a ->
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay CRESTHelper.fromAttributeToJSON(info.attributeInfo, a)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay new StringBuilder("The ").append(it.name).append(
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay " attribute is not single value attribute.");
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new InvalidAttributeValueException(msg.toString());
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay if (null != resource.content.get(info.jsonName)) {
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay resource.content.addPermissive(info.jsonName, null)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay resource.content.addPermissive(info.jsonName, CRESTHelper.fromAttributeToJSON(info.attributeInfo, it.value.get(0)))
e2cd22a6774d3e0685b065c43a4078728bb6e279Jake Feasel UpdateRequest updateRequest = Requests.newUpdateRequest(request.resourcePath, resource.content)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay def r = connection.update(new RootContext(), updateRequest)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new UnknownUidException(uid, objectClass).initCause(e)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay PatchRequest request = Requests.newPatchRequest(objectClassInfo.resourceContainer, uid.uidValue)
c8408fe9c4eb7f97ffa5b6aafcd4157afd478bc8Jon Branch ResourceResponse resource = connection.patch(new RootContext(), request)
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay return new Uid(resource.getId(), resource.getRevision())
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new UnsupportedOperationException(operation.name() + " operation of type:" +
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay objectClass.objectClassValue + " is not supported.")
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new UnsupportedOperationException(operation.name() + " operation of type:" +
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay objectClass.objectClassValue + " is not supported.")
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new UnsupportedOperationException(operation.name() + " operation of type:" +
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay objectClass.objectClassValue + " is not supported.")
3b9de50fdf0980762d6930a49e1a0f20b61a6f6bJason Lemay throw new ConnectorException("UpdateScript can not handle operation:" + operation.name())