/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
*/
/**
* The Connector API presents a consistent view of any Connector,
* regardless of which operations the connector actually implements.
* Common code implements the API in terms of the SPI,
* providing consistent behavior and common features.
* The developer of each Connector bundle implements (some subset of) the SPI,
* and thus inherits a certain amount of common behavior "for free".
*
* <p> For example, the common code that implements the API:
* <ul>
* <li>Provides <em>connection pooling</em> to each Connector that requires it.
* Not every Connector needs connection pooling,
* but those that do can "opt-in" simply by implementing
* {@link org.identityconnectors.framework.spi.PoolableConnector a specific interface}.
* The calling application that uses the API does not need to do anything
* in order to enable connection pooling, but can
* {@link org.identityconnectors.framework.api.APIConfiguration#getConnectorPoolConfiguration configure connection pooling}.
* </li>
*
* <li>Provides <em>timeouts</em> for all Connector operations.
* Common code provides this transparently to each implementation of the SPI.
* The API consumer may configure an appropriate timeout if the default is unacceptable.
* </li>
*
* <li>Provides <em>default implementations of advanced operations</em>.
* A Connector developer may implement either simple or advanced versions
* of certain {@link org.identityconnectors.framework.spi.operations SPI operations}
* such as update or search.
* The API consumer sees only the advanced version of such operations,
* regardless of which version the Connector developer implements.
* </li>
* </ul>
*
* <p>In order to use the Connector API, an application must first
* use the {@link org.identityconnectors.framework.api.ConnectorInfoManagerFactory}
* to load a set of connector bundles. Connector bundles can be loaded
* {@link org.identityconnectors.framework.api.ConnectorInfoManagerFactory#getLocalManager locally}
* or {@link org.identityconnectors.framework.api.ConnectorInfoManagerFactory#getRemoteManager remotely}.
* In either case, the {@link org.identityconnectors.framework.api.ConnectorInfoManager}
* that is returned allows the application to obtain an instance of
* {@link org.identityconnectors.framework.api.ConnectorInfo}
* that describes each of the available connector bundles.
* </p>
* <p>The application then uses the <code>ConnectorInfo</code> to configure an instance of the connector.
* The application {@link org.identityconnectors.framework.api.ConnectorInfo#createDefaultAPIConfiguration obtains the default configuration},
* {@link org.identityconnectors.framework.api.APIConfiguration#getConfigurationProperties lists the available configuration properties},
* and then {@link org.identityconnectors.framework.api.ConfigurationProperty#setValue sets values for configuration properties}.
* Connector configuration properties typically include such target-specific information
* such as hostname, port number and the username and password to use in connecting to the target.
* The application then passes the <code>APIConfiguration</code> that it has tailored
* into {@link org.identityconnectors.framework.api.ConnectorFacadeFactory#newInstance}
* to obtain an instance of {@link org.identityconnectors.framework.api.ConnectorFacade}.
* An instance of <code>ConnectorFacade</code> represents a configured instance of a connector.
* </p>
* <p>Once the application has an instance of <code>ConnectorFacade</code>, the application can invoke
* {@link org.identityconnectors.framework.api.ConnectorFacade#getSupportedOperations any operation that it supports}.
* In some cases, a connector facade may support certain operations only for certain object-classes.
* Each instance of <code>ConnectorFacade</code>
* {@link org.identityconnectors.framework.api.operations.SchemaApiOp#schema describes the object-classes and the operations that it supports}.
*/
package org.identityconnectors.framework.api;