/*
* DO NOT REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2012-2014 ForgeRock AS. All rights reserved.
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* http://forgerock.org/license/CDDLv1.0.html
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* at http://forgerock.org/license/CDDLv1.0.html
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*/
package org.forgerock.openicf.connectors.docbook;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
import org.identityconnectors.common.script.Script;
import org.identityconnectors.common.security.GuardedByteArray;
import org.identityconnectors.common.security.GuardedString;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeInfo;
import org.identityconnectors.framework.common.objects.AttributeInfoBuilder;
import org.identityconnectors.framework.common.objects.Name;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.ObjectClassInfoBuilder;
import org.identityconnectors.framework.common.objects.OperationOptionInfoBuilder;
import org.identityconnectors.framework.common.objects.OperationOptions;
import org.identityconnectors.framework.common.objects.OperationalAttributeInfos;
import org.identityconnectors.framework.common.objects.PredefinedAttributeInfos;
import org.identityconnectors.framework.common.objects.QualifiedUid;
import org.identityconnectors.framework.common.objects.ResultsHandler;
import org.identityconnectors.framework.common.objects.Schema;
import org.identityconnectors.framework.common.objects.SchemaBuilder;
import org.identityconnectors.framework.common.objects.ScriptContext;
import org.identityconnectors.framework.common.objects.SyncResultsHandler;
import org.identityconnectors.framework.common.objects.SyncToken;
import org.identityconnectors.framework.common.objects.Uid;
import org.identityconnectors.framework.common.objects.filter.FilterTranslator;
import org.identityconnectors.framework.spi.AttributeNormalizer;
import org.identityconnectors.framework.spi.Configuration;
import org.identityconnectors.framework.spi.Connector;
import org.identityconnectors.framework.spi.ConnectorClass;
import org.identityconnectors.framework.spi.operations.AuthenticateOp;
import org.identityconnectors.framework.spi.operations.CreateOp;
import org.identityconnectors.framework.spi.operations.DeleteOp;
import org.identityconnectors.framework.spi.operations.ResolveUsernameOp;
import org.identityconnectors.framework.spi.operations.SchemaOp;
import org.identityconnectors.framework.spi.operations.ScriptOnConnectorOp;
import org.identityconnectors.framework.spi.operations.ScriptOnResourceOp;
import org.identityconnectors.framework.spi.operations.SearchOp;
import org.identityconnectors.framework.spi.operations.SyncOp;
import org.identityconnectors.framework.spi.operations.TestOp;
import org.identityconnectors.framework.spi.operations.UpdateAttributeValuesOp;
import org.identityconnectors.framework.spi.operations.UpdateOp;
/**
* Main implementation of the DocBook Connector
*
* @author $author$
*/
@ConnectorClass(displayNameKey = "DocBook.connector.display", categoryKey = "sample1.category",
configurationClass = DocBookConfiguration.class)
public class DocBookConnector implements Connector, AttributeNormalizer, AuthenticateOp, CreateOp,
DeleteOp, ResolveUsernameOp, SchemaOp, ScriptOnConnectorOp, ScriptOnResourceOp,
SearchOp<String>, SyncOp, TestOp, UpdateAttributeValuesOp, UpdateOp {
/**
* Place holder for the {@link Configuration} passed into the init() method
* {@link DocBookConnector#init(org.identityconnectors.framework.spi.Configuration)}
* .
*/
private DocBookConfiguration configuration;
/**
* Gets the Configuration context for this connector.
*/
public Configuration getConfiguration() {
return this.configuration;
}
/**
* Callback method to receive the {@link Configuration}.
*
* @see org.identityconnectors.framework.spi.Connector#init(org.identityconnectors.framework.spi.Configuration)
*/
public void init(Configuration configuration1) {
this.configuration = (DocBookConfiguration) configuration1;
}
/**
* Disposes of the {@link DocBookConnector}'s resources.
*
* @see org.identityconnectors.framework.spi.Connector#dispose()
*/
public void dispose() {
configuration = null;
}
/**
* {@inheritDoc}
*/
public Attribute normalizeAttribute(ObjectClass oclass, Attribute attribute) {
return attribute;
}
/******************
* SPI Operations
*
* Implement the following operations using the contract and description
* found in the Javadoc for these methods.
******************/
/**
* {@inheritDoc}
*/
public Uid authenticate(final ObjectClass objectClass, final String userName,
final GuardedString password, final OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Uid resolveUsername(final ObjectClass objectClass, final String userName,
final OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Uid create(final ObjectClass objectClass, final Set<Attribute> createAttributes,
final OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public void delete(final ObjectClass objectClass, final Uid uid, final OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Schema schema() {
SchemaBuilder schemaBuilder = new SchemaBuilder(DocBookConnector.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildAttributesToGet(),
SearchOp.class, SyncOp.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildPageSize(),
SearchOp.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildPagedResultsCookie(),
SearchOp.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildPagedResultsOffset(),
SearchOp.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildSortKeys(),
SearchOp.class);
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildRunWithUser());
schemaBuilder.defineOperationOption(OperationOptionInfoBuilder.buildRunWithPassword());
schemaBuilder.defineOperationOption("_OperationOption-boolean", boolean.class);
schemaBuilder.defineOperationOption("_OperationOption-Boolean", Boolean.class);
schemaBuilder.defineOperationOption("_OperationOption-char", char.class);
schemaBuilder.defineOperationOption("_OperationOption-Character", Character.class);
schemaBuilder.defineOperationOption("_OperationOption-double", double.class);
schemaBuilder.defineOperationOption("_OperationOption-Double", Double.class);
schemaBuilder.defineOperationOption("_OperationOption-File", File.class);
schemaBuilder.defineOperationOption("_OperationOption-FileArray", File[].class);
schemaBuilder.defineOperationOption("_OperationOption-float", float.class);
schemaBuilder.defineOperationOption("_OperationOption-Float", Float.class);
schemaBuilder.defineOperationOption("_OperationOption-GuardedByteArray",
GuardedByteArray.class);
schemaBuilder.defineOperationOption("_OperationOption-GuardedString", GuardedString.class);
schemaBuilder.defineOperationOption("_OperationOption-int", int.class);
schemaBuilder.defineOperationOption("_OperationOption-Integer", Integer.class);
schemaBuilder.defineOperationOption("_OperationOption-long", long.class);
schemaBuilder.defineOperationOption("_OperationOption-Long", Long.class);
schemaBuilder.defineOperationOption("_OperationOption-ObjectClass", ObjectClass.class);
schemaBuilder.defineOperationOption("_OperationOption-QualifiedUid", QualifiedUid.class);
schemaBuilder.defineOperationOption("_OperationOption-Script", Script.class);
schemaBuilder.defineOperationOption("_OperationOption-String", String.class);
schemaBuilder.defineOperationOption("_OperationOption-StringArray", String[].class);
schemaBuilder.defineOperationOption("_OperationOption-Uid", Uid.class);
schemaBuilder.defineOperationOption("_OperationOption-URI", URI.class);
ObjectClassInfoBuilder ocBuilder = new ObjectClassInfoBuilder();
// Users
ocBuilder.setType(ObjectClass.ACCOUNT_NAME);
// The name of the object
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build(Name.NAME, String.class, EnumSet.of(
AttributeInfo.Flags.REQUIRED, AttributeInfo.Flags.NOT_UPDATEABLE)));
// All Predefined Attribute Info
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.DESCRIPTION);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.GROUPS);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.LAST_LOGIN_DATE);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.LAST_PASSWORD_CHANGE_DATE);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.PASSWORD_CHANGE_INTERVAL);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.SHORT_NAME);
// All Operational Attribute Info
ocBuilder.addAttributeInfo(OperationalAttributeInfos.CURRENT_PASSWORD);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.DISABLE_DATE);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.ENABLE);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.ENABLE_DATE);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.LOCK_OUT);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.PASSWORD);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.PASSWORD_EXPIRATION_DATE);
ocBuilder.addAttributeInfo(OperationalAttributeInfos.PASSWORD_EXPIRED);
// All possible attribute types and flags
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-BigDecimal",
BigDecimal.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-BigInteger",
BigInteger.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-boolean", boolean.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Boolean", Boolean.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-byte", byte.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Byte", Byte.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-byte[]", byte[].class,
EnumSet.of(AttributeInfo.Flags.NOT_RETURNED_BY_DEFAULT,
AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-char", char.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Character",
Character.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-double", double.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Double", Double.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-float", float.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Float", Float.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-GuardedByteArray",
GuardedByteArray.class, EnumSet.of(AttributeInfo.Flags.REQUIRED,
AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-GuardedString",
GuardedString.class, EnumSet.of(AttributeInfo.Flags.REQUIRED,
AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-int", int.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Integer", Integer.class));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-long", long.class,
EnumSet.of(AttributeInfo.Flags.NOT_RETURNED_BY_DEFAULT,
AttributeInfo.Flags.NOT_READABLE, AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Long", Long.class,
EnumSet.of(AttributeInfo.Flags.NOT_CREATABLE, AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-String", String.class,
EnumSet.of(AttributeInfo.Flags.MULTIVALUED, AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("_Attribute-Map", Map.class));
schemaBuilder.defineObjectClass(ocBuilder.build());
ocBuilder = new ObjectClassInfoBuilder();
ocBuilder.setType(ObjectClass.GROUP_NAME);
ocBuilder.addAttributeInfo(Name.INFO);
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.DESCRIPTION);
schemaBuilder.defineObjectClass(ocBuilder.build(), CreateOp.class, UpdateOp.class,
SearchOp.class, SyncOp.class, DeleteOp.class);
ocBuilder = new ObjectClassInfoBuilder();
ocBuilder.setType("organization");
ocBuilder.setContainer(true);
ocBuilder.addAttributeInfo(Name.INFO);
ocBuilder.addAttributeInfo(AttributeInfoBuilder.build("members", String.class, EnumSet.of(
AttributeInfo.Flags.MULTIVALUED, AttributeInfo.Flags.NOT_UPDATEABLE)));
ocBuilder.addAttributeInfo(PredefinedAttributeInfos.DESCRIPTION);
schemaBuilder.defineObjectClass(ocBuilder.build(), CreateOp.class, UpdateOp.class,
SearchOp.class, DeleteOp.class);
return schemaBuilder.build();
}
/**
* {@inheritDoc}
*/
public Object runScriptOnConnector(ScriptContext request, OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Object runScriptOnResource(ScriptContext request, OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public FilterTranslator<String> createFilterTranslator(ObjectClass objectClass,
OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public void executeQuery(ObjectClass objectClass, String query, ResultsHandler handler,
OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler,
final OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public SyncToken getLatestSyncToken(ObjectClass objectClass) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public void test() {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Uid update(ObjectClass objectClass, Uid uid, Set<Attribute> replaceAttributes,
OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Uid addAttributeValues(ObjectClass objectClass, Uid uid, Set<Attribute> valuesToAdd,
OperationOptions options) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public Uid removeAttributeValues(ObjectClass objectClass, Uid uid,
Set<Attribute> valuesToRemove, OperationOptions options) {
throw new UnsupportedOperationException();
}
}