http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java index f3ade5e..6033bd4 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java @@ -104,8 +104,8 @@ public class ConnInstanceTest extends AbstractTest { conf.add(servicename); // set connector configuration - connInstance.setConfiguration(conf); - assertFalse(connInstance.getConfiguration().isEmpty()); + connInstance.setConf(conf); + assertFalse(connInstance.getConf().isEmpty()); // perform save operation ConnInstance actual = connInstanceDAO.save(connInstance); @@ -125,7 +125,7 @@ public class ConnInstanceTest extends AbstractTest { assertEquals(60, actual.getConnRequestTimeout(), 0); - conf = connInstance.getConfiguration(); + conf = connInstance.getConf(); assertFalse(conf.isEmpty()); assertNotNull("configuration retrieving failed", conf);
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java index d9f79fc..f557e8c 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java @@ -85,7 +85,7 @@ public class ConnInstanceTest extends AbstractTest { || "ws-target-resource-nopropagation".equalsIgnoreCase(resources.get(2).getKey()) || "ws-target-resource-nopropagation".equalsIgnoreCase(resources.get(3).getKey())); - connInstance.addCapability(ConnectorCapability.SEARCH); + connInstance.getCapabilities().add(ConnectorCapability.SEARCH); connInstance = connInstanceDAO.save(connInstance); assertNotNull(connInstance); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/test/resources/domains/MasterContent.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml index d1fde9e..2bc840d 100644 --- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml @@ -580,54 +580,55 @@ under the License. <ConnInstance_capabilities ConnInstance_id="108" capability="SYNC"/> <ExternalResource name="ws-target-resource-1" connector_id="100" - randomPwdIfNotProvided="0" enforceMandatoryCondition="0" + randomPwdIfNotProvided="0" enforceMandatoryCondition="0" overrideCapabilities="0" propagationPriority="0" propagationPrimary="1" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" - creator="admin" lastModifier="admin" + creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-2" connector_id="100" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="FAILURES" deleteTraceLevel="NONE" updateTraceLevel="ALL" syncTraceLevel="ALL" syncPolicy_id="9" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-timeout" connector_id="102" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="1" createTraceLevel="FAILURES" deleteTraceLevel="NONE" updateTraceLevel="ALL" syncTraceLevel="ALL" jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":true,"values":["http://localhost:${cargo.servlet.port}/syncope-fit-build-tools/services/provisioning"]}]' creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-list-mappings-1" connector_id="100" - randomPwdIfNotProvided="0" enforceMandatoryCondition="0" + randomPwdIfNotProvided="0" enforceMandatoryCondition="0" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-list-mappings-2" connector_id="100" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-delete" connector_id="102" - randomPwdIfNotProvided="0" enforceMandatoryCondition="0" + randomPwdIfNotProvided="0" enforceMandatoryCondition="0" overrideCapabilities="0" propagationPriority="2" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="ws-target-resource-update" connector_id="100" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="resource-testdb" connector_id="101" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="resource-testdb2" connector_id="106" - randomPwdIfNotProvided="1" enforceMandatoryCondition="1" + randomPwdIfNotProvided="1" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="resource-csv" connector_id="104" - randomPwdIfNotProvided="0" enforceMandatoryCondition="0" syncPolicy_id="3" + randomPwdIfNotProvided="0" enforceMandatoryCondition="0" overrideCapabilities="0" + syncPolicy_id="3" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> @@ -636,7 +637,7 @@ under the License. creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="resource-ldap" connector_id="105" - randomPwdIfNotProvided="1" enforceMandatoryCondition="1" + randomPwdIfNotProvided="1" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="1" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" @@ -644,22 +645,25 @@ under the License. <ExternalResource_PropActions resource_name="resource-ldap" actionClassName="org.apache.syncope.core.provisioning.java.propagation.LDAPMembershipPropagationActions"/> <ExternalResource name="ws-target-resource-nopropagation" connector_id="103" - randomPwdIfNotProvided="0" enforceMandatoryCondition="1" + randomPwdIfNotProvided="0" enforceMandatoryCondition="1" overrideCapabilities="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" passwordPolicy_id="4" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> - <!-- The following three resources has been added to verify the issue SYNCOPE-68 --> - <ExternalResource name="ws-target-resource-nopropagation2" connector_id="103" enforceMandatoryCondition="1" + <!-- The following three resources have been added to verify the issue SYNCOPE-68 --> + <ExternalResource name="ws-target-resource-nopropagation2" connector_id="103" + enforceMandatoryCondition="1" overrideCapabilities="0" randomPwdIfNotProvided="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> - <ExternalResource name="ws-target-resource-nopropagation3" connector_id="103" enforceMandatoryCondition="1" + <ExternalResource name="ws-target-resource-nopropagation3" connector_id="103" + enforceMandatoryCondition="1" overrideCapabilities="0" randomPwdIfNotProvided="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> - <ExternalResource name="ws-target-resource-nopropagation4" connector_id="103" enforceMandatoryCondition="1" + <ExternalResource name="ws-target-resource-nopropagation4" connector_id="103" + enforceMandatoryCondition="1" overrideCapabilities="0" randomPwdIfNotProvided="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> @@ -668,7 +672,7 @@ under the License. <ExternalResource name="resource-db-sync" connector_id="107" randomPwdIfNotProvided="0" createTraceLevel="ALL" deleteTraceLevel="ALL" syncTraceLevel="ALL" updateTraceLevel="ALL" enforceMandatoryCondition="0" - propagationPrimary="0" propagationPriority="0" + propagationPrimary="0" propagationPriority="0" overrideCapabilities="0" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> @@ -676,14 +680,14 @@ under the License. <ExternalResource name="resource-db-virattr" connector_id="107" randomPwdIfNotProvided="0" createTraceLevel="ALL" deleteTraceLevel="ALL" syncTraceLevel="ALL" updateTraceLevel="ALL" enforceMandatoryCondition="0" - propagationPrimary="0" propagationPriority="0" + propagationPrimary="0" propagationPriority="0" overrideCapabilities="0" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> <ExternalResource name="resource-db-scripted" connector_id="108" randomPwdIfNotProvided="0" createTraceLevel="ALL" deleteTraceLevel="ALL" syncTraceLevel="ALL" updateTraceLevel="ALL" enforceMandatoryCondition="0" - propagationPrimary="0" propagationPriority="0" + propagationPrimary="0" propagationPriority="0" overrideCapabilities="0" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/> http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnIdBundleManager.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnIdBundleManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnIdBundleManager.java index 186dbbb..242202f 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnIdBundleManager.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnIdBundleManager.java @@ -31,7 +31,7 @@ import org.identityconnectors.framework.api.ConnectorInfoManager; */ public interface ConnIdBundleManager { - ConfigurationProperties getConfigurationProperties(final ConnectorInfo info); + ConfigurationProperties getConfigurationProperties(ConnectorInfo info); Map<URI, ConnectorInfoManager> getConnManagers(); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java index ce8adba..2a3a0a1 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java @@ -28,6 +28,7 @@ import org.apache.syncope.core.persistence.api.entity.resource.MappingItem; import org.identityconnectors.framework.common.objects.Attribute; import org.identityconnectors.framework.common.objects.ConnectorObject; import org.identityconnectors.framework.common.objects.ObjectClass; +import org.identityconnectors.framework.common.objects.ObjectClassInfo; import org.identityconnectors.framework.common.objects.OperationOptions; import org.identityconnectors.framework.common.objects.ResultsHandler; import org.identityconnectors.framework.common.objects.SyncResultsHandler; @@ -134,8 +135,7 @@ public interface Connector { ConnectorObject getObject(ObjectClass objectClass, Uid uid, OperationOptions options); /** - * Get remote object used by the propagation manager in order to choose for a create (object doesn't exist) or an - * update (object exists). + * Get remote object with check for intended operation to perform on external resource. * * @param operationType resource operation type * @param objectClass ConnId's object class @@ -186,40 +186,11 @@ public interface Connector { Iterator<? extends MappingItem> mapItems); /** - * Read attribute for a given connector object. + * Builds metadata description of ConnId {@link ObjectClass}. * - * @param objectClass ConnId's object class - * @param uid ConnId's Uid - * @param options ConnId's OperationOptions - * @param attributeName attribute to read - * @return attribute (if present) - */ - Attribute getObjectAttribute(ObjectClass objectClass, Uid uid, OperationOptions options, String attributeName); - - /** - * Read attributes for a given connector object. - * - * @param objectClass ConnId's object class - * @param uid ConnId's Uid - * @param options ConnId's OperationOptions - * @return attributes (if present) + * @return metadata description of ConnId ObjectClass */ - Set<Attribute> getObjectAttributes(ObjectClass objectClass, Uid uid, OperationOptions options); - - /** - * Return resource schema names. - * - * @param includeSpecial return special attributes (like as __NAME__ or __PASSWORD__) if true - * @return schema names - */ - Set<String> getSchemaNames(boolean includeSpecial); - - /** - * Return ConnId's object classes supported by this connector. - * - * @return supported object classes - */ - Set<ObjectClass> getSupportedObjectClasses(); + Set<ObjectClassInfo> getObjectClassInfo(); /** * Validate a connector instance. @@ -236,14 +207,5 @@ public interface Connector { * * @return active connector instance. */ - ConnInstance getActiveConnInstance(); - - /** - * Build options for requesting all mapped connector attributes. - * - * @param mapItems mapping items - * @return options for requesting all mapped connector attributes - * @see OperationOptions - */ - OperationOptions getOperationOptions(Iterator<? extends MappingItem> mapItems); + ConnInstance getConnInstance(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorFactory.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorFactory.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorFactory.java index 6d2d0c8..4c6dd82 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorFactory.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorFactory.java @@ -20,7 +20,7 @@ package org.apache.syncope.core.provisioning.api; import java.util.Set; import org.apache.syncope.common.lib.types.ConnConfProperty; -import org.apache.syncope.core.persistence.api.SyncopeLoader; +import org.apache.syncope.common.lib.types.ConnectorCapability; import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; @@ -29,16 +29,28 @@ import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; * * @see Connector */ -public interface ConnectorFactory extends SyncopeLoader { +public interface ConnectorFactory { /** - * Create connector from given connector instance and configuration properties. + * Builds connector instance override over base connector instance, configuration and capabilities override. + * + * @param connInstance base connector instance + * @param confOverride configuration override + * @param capabilitiesOverride capabilities override + * @return connector instance override over base connector instance, configuration and capabilities override + */ + ConnInstance buildConnInstanceOverride( + ConnInstance connInstance, + Set<ConnConfProperty> confOverride, + Set<ConnectorCapability> capabilitiesOverride); + + /** + * Create connector from given connector instance. * * @param connInstance connector instance - * @param configuration configuration properties * @return connector */ - Connector createConnector(ConnInstance connInstance, Set<ConnConfProperty> configuration); + Connector createConnector(ConnInstance connInstance); /** * Get existing connector for the given resource. @@ -53,7 +65,6 @@ public interface ConnectorFactory extends SyncopeLoader { * * @see ExternalResource */ - @Override void load(); /** http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorRegistry.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorRegistry.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorRegistry.java index 1bcbcbc..c1cc547 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorRegistry.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ConnectorRegistry.java @@ -18,9 +18,6 @@ */ package org.apache.syncope.core.provisioning.api; -import java.util.Set; -import org.apache.syncope.common.lib.types.ConnConfProperty; -import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; /** @@ -29,15 +26,6 @@ import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; public interface ConnectorRegistry { /** - * Returns a connector instance with overridden property values, if found. - * - * @param connInstance base connector instance - * @param overridden overridden property values - * @return connector instance with overridden property values, if found - */ - ConnInstance getOverriddenConnInstance(ConnInstance connInstance, Set<ConnConfProperty> overridden); - - /** * Create and register into Spring context a bean for the given resource. * * @param resource external resource http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java index d3496a2..373d1af 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java @@ -18,31 +18,19 @@ */ package org.apache.syncope.core.provisioning.api.data; -import java.util.Set; import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.types.ConnConfPropSchema; -import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.identityconnectors.framework.api.ConfigurationProperty; public interface ConnInstanceDataBinder { - ConnConfPropSchema buildConnConfPropSchema(ConfigurationProperty property); + ConnConfPropSchema build(ConfigurationProperty property); ConnInstance getConnInstance(ConnInstanceTO connInstanceTO); ConnInstanceTO getConnInstanceTO(ConnInstance connInstance); - /** - * Merge connector configuration properties avoiding repetition but giving priority to primary set. - * - * @param primary primary set. - * @param secondary secondary set. - * @return merged set. - */ - Set<ConnConfProperty> mergeConnConfProperties(Set<ConnConfProperty> primary, - Set<ConnConfProperty> secondary); - - ConnInstance updateConnInstance(long connInstanceId, ConnInstanceTO connInstanceTO); + ConnInstance update(long key, ConnInstanceTO connInstanceTO); } http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java index 2d96d71..9f1ea5d 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java @@ -19,17 +19,14 @@ package org.apache.syncope.core.provisioning.api.data; import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; public interface ResourceDataBinder { - ExternalResource create(ResourceTO resourceTO); - - ConnInstance getConnInstance(ResourceTO resourceTO); - ResourceTO getResourceTO(ExternalResource resource); + ExternalResource create(ResourceTO resourceTO); + ExternalResource update(ExternalResource resource, ResourceTO resourceTO); } http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java index 0b4340e..83a38eb 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java @@ -18,19 +18,16 @@ */ package org.apache.syncope.core.provisioning.java; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; import java.util.concurrent.Future; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.api.ConnectorFacade; import org.identityconnectors.framework.common.objects.Attribute; -import org.identityconnectors.framework.common.objects.AttributeInfo; -import org.identityconnectors.framework.common.objects.AttributeUtil; import org.identityconnectors.framework.common.objects.ConnectorObject; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.ObjectClassInfo; import org.identityconnectors.framework.common.objects.OperationOptions; -import org.identityconnectors.framework.common.objects.Schema; import org.identityconnectors.framework.common.objects.SyncToken; import org.identityconnectors.framework.common.objects.Uid; import org.slf4j.Logger; @@ -46,9 +43,6 @@ import org.springframework.stereotype.Component; @Component public class AsyncConnectorFacade { - /** - * Logger. - */ private static final Logger LOG = LoggerFactory.getLogger(AsyncConnectorFacade.class); @Async @@ -111,83 +105,17 @@ public class AsyncConnectorFacade { } @Async - public Future<Attribute> getObjectAttribute( - final ConnectorFacade connector, - final ObjectClass objectClass, - final Uid uid, - final OperationOptions options, - final String attributeName) { - - Attribute attribute = null; - - ConnectorObject object = connector.getObject(objectClass, uid, options); - if (object == null) { - LOG.debug("Object for '{}' not found", uid.getUidValue()); - } else { - attribute = object.getAttributeByName(attributeName); - } - - return new AsyncResult<>(attribute); - } - - @Async - public Future<Set<Attribute>> getObjectAttributes( - final ConnectorFacade connector, - final ObjectClass objectClass, - final Uid uid, - final OperationOptions options) { - - Set<Attribute> attributes = new HashSet<>(); - - ConnectorObject object = connector.getObject(objectClass, uid, options); - - if (object == null) { - LOG.debug("Object for '{}' not found", uid.getUidValue()); - } else { - for (String attribute : options.getAttributesToGet()) { - attributes.add(object.getAttributeByName(attribute)); - } - } - - return new AsyncResult<>(attributes); - } - - @Async - public Future<Set<String>> getSchemaNames(final ConnectorFacade connector, final boolean includeSpecial) { - Set<String> schemaNames = new HashSet<>(); - - try { - Schema schema = connector.schema(); - for (ObjectClassInfo info : schema.getObjectClassInfo()) { - for (AttributeInfo attrInfo : info.getAttributeInfo()) { - if (includeSpecial || !AttributeUtil.isSpecialName(attrInfo.getName())) { - schemaNames.add(attrInfo.getName()); - } - } - } - } catch (Exception e) { - // catch exception in order to manage unpredictable behaviors - LOG.debug("While reading schema on connector {}", connector, e); - } - - return new AsyncResult<>(schemaNames); - } - - @Async - public Future<Set<ObjectClass>> getSupportedObjectClasses(final ConnectorFacade connector) { - Set<ObjectClass> objectClasses = new HashSet<>(); + public Future<Set<ObjectClassInfo>> getObjectClassInfo(final ConnectorFacade connector) { + Set<ObjectClassInfo> result = Collections.emptySet(); try { - Schema schema = connector.schema(); - for (ObjectClassInfo info : schema.getObjectClassInfo()) { - objectClasses.add(new ObjectClass(info.getType())); - } + result = connector.schema().getObjectClassInfo(); } catch (Exception e) { // catch exception in order to manage unpredictable behaviors LOG.debug("While reading schema on connector {}", connector, e); } - return new AsyncResult<>(objectClasses); + return new AsyncResult<>(result); } @Async http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java index 6c2be32..a3b865f 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java @@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java; import java.io.File; import java.net.URI; import java.util.ArrayList; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -31,8 +30,8 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Transformer; import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.common.lib.types.ConnectorCapability; -import org.apache.syncope.common.lib.types.MappingPurpose; import org.apache.syncope.common.lib.types.ResourceOperation; +import org.apache.syncope.core.misc.MappingUtils; import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.provisioning.api.ConnIdBundleManager; import org.apache.syncope.core.provisioning.api.ConnPoolConfUtils; @@ -50,11 +49,10 @@ import org.identityconnectors.framework.api.ConnectorFacadeFactory; import org.identityconnectors.framework.api.ConnectorInfo; import org.identityconnectors.framework.common.objects.Attribute; import org.identityconnectors.framework.common.objects.ConnectorObject; -import org.identityconnectors.framework.common.objects.Name; import org.identityconnectors.framework.common.objects.ObjectClass; +import org.identityconnectors.framework.common.objects.ObjectClassInfo; import org.identityconnectors.framework.common.objects.OperationOptions; import org.identityconnectors.framework.common.objects.OperationOptionsBuilder; -import org.identityconnectors.framework.common.objects.OperationalAttributes; import org.identityconnectors.framework.common.objects.ResultsHandler; import org.identityconnectors.framework.common.objects.SearchResult; import org.identityconnectors.framework.common.objects.SortKey; @@ -84,7 +82,7 @@ public class ConnectorFacadeProxy implements Connector { /** * Active connector instance. */ - private final ConnInstance activeConnInstance; + private final ConnInstance connInstance; @Autowired private AsyncConnectorFacade asyncFacade; @@ -92,14 +90,14 @@ public class ConnectorFacadeProxy implements Connector { /** * Use the passed connector instance to build a ConnectorFacade that will be used to make all wrapped calls. * - * @param connInstance the connector instance configuration + * @param connInstance the connector instance * @see ConnectorInfo * @see APIConfiguration * @see ConfigurationProperties * @see ConnectorFacade */ public ConnectorFacadeProxy(final ConnInstance connInstance) { - this.activeConnInstance = connInstance; + this.connInstance = connInstance; ConnIdBundleManager connIdBundleManager = ApplicationContextProvider.getBeanFactory().getBean(ConnIdBundleManager.class); @@ -112,7 +110,7 @@ public class ConnectorFacadeProxy implements Connector { // set connector configuration according to conninstance's ConfigurationProperties properties = apiConfig.getConfigurationProperties(); - for (ConnConfProperty property : connInstance.getConfiguration()) { + for (ConnConfProperty property : connInstance.getConf()) { if (property.getValues() != null && !property.getValues().isEmpty()) { properties.setPropertyValue(property.getSchema().getName(), getPropertyValue(property.getSchema().getType(), property.getValues())); @@ -140,11 +138,11 @@ public class ConnectorFacadeProxy implements Connector { public Uid authenticate(final String username, final String password, final OperationOptions options) { Uid result = null; - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.AUTHENTICATE)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.AUTHENTICATE)) { Future<Uid> future = asyncFacade.authenticate( connector, username, new GuardedString(password.toCharArray()), options); try { - result = future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + result = future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -158,7 +156,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("Authenticate was attempted, although the connector only has these capabilities: {}. No action.", - activeConnInstance.getCapabilities()); + connInstance.getCapabilities()); } return result; @@ -173,12 +171,12 @@ public class ConnectorFacadeProxy implements Connector { Uid result = null; - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.CREATE)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.CREATE)) { propagationAttempted[0] = true; Future<Uid> future = asyncFacade.create(connector, objectClass, attrs, options); try { - result = future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + result = future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -192,7 +190,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("Create was attempted, although the connector only has these capabilities: {}. No action.", - activeConnInstance.getCapabilities()); + connInstance.getCapabilities()); } return result; @@ -208,13 +206,13 @@ public class ConnectorFacadeProxy implements Connector { Uid result = null; - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.UPDATE)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.UPDATE)) { propagationAttempted[0] = true; Future<Uid> future = asyncFacade.update(connector, objectClass, uid, attrs, options); try { - result = future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + result = future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -228,7 +226,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("Update for {} was attempted, although the " - + "connector only has these capabilities: {}. No action.", uid.getUidValue(), activeConnInstance. + + "connector only has these capabilities: {}. No action.", uid.getUidValue(), connInstance. getCapabilities()); } @@ -242,13 +240,13 @@ public class ConnectorFacadeProxy implements Connector { final OperationOptions options, final Boolean[] propagationAttempted) { - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.DELETE)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.DELETE)) { propagationAttempted[0] = true; Future<Uid> future = asyncFacade.delete(connector, objectClass, uid, options); try { - future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -262,7 +260,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("Delete for {} was attempted, although the connector only has these capabilities: {}. No action.", - uid.getUidValue(), activeConnInstance.getCapabilities()); + uid.getUidValue(), connInstance.getCapabilities()); } } @@ -270,11 +268,11 @@ public class ConnectorFacadeProxy implements Connector { public void sync(final ObjectClass objectClass, final SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.SYNC)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.SYNC)) { connector.sync(objectClass, token, handler, options); } else { LOG.info("Sync was attempted, although the connector only has these capabilities: {}. No action.", - activeConnInstance.getCapabilities()); + connInstance.getCapabilities()); } } @@ -282,11 +280,11 @@ public class ConnectorFacadeProxy implements Connector { public SyncToken getLatestSyncToken(final ObjectClass objectClass) { SyncToken result = null; - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.SYNC)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.SYNC)) { Future<SyncToken> future = asyncFacade.getLatestSyncToken(connector, objectClass); try { - result = future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + result = future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -300,7 +298,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("getLatestSyncToken was attempted, although the " - + "connector only has these capabilities: {}. No action.", activeConnInstance.getCapabilities()); + + "connector only has these capabilities: {}. No action.", connInstance.getCapabilities()); } return result; @@ -320,17 +318,17 @@ public class ConnectorFacadeProxy implements Connector { boolean hasCapablities = false; - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.SEARCH)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.SEARCH)) { if (operationType == null) { hasCapablities = true; } else { switch (operationType) { case CREATE: - hasCapablities = activeConnInstance.getCapabilities().contains(ConnectorCapability.CREATE); + hasCapablities = connInstance.getCapabilities().contains(ConnectorCapability.CREATE); break; case UPDATE: - hasCapablities = activeConnInstance.getCapabilities().contains(ConnectorCapability.UPDATE); + hasCapablities = connInstance.getCapabilities().contains(ConnectorCapability.UPDATE); break; default: @@ -344,11 +342,11 @@ public class ConnectorFacadeProxy implements Connector { future = asyncFacade.getObject(connector, objectClass, uid, options); } else { LOG.info("Search was attempted, although the connector only has these capabilities: {}. No action.", - activeConnInstance.getCapabilities()); + connInstance.getCapabilities()); } try { - return future == null ? null : future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + return future == null ? null : future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { if (future != null) { future.cancel(true); @@ -383,69 +381,10 @@ public class ConnectorFacadeProxy implements Connector { } @Override - public Attribute getObjectAttribute(final ObjectClass objectClass, final Uid uid, final OperationOptions options, - final String attributeName) { - - Future<Attribute> future = asyncFacade.getObjectAttribute( - connector, objectClass, uid, options, attributeName); - try { - return future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); - } catch (java.util.concurrent.TimeoutException e) { - future.cancel(true); - throw new TimeoutException("Request timeout"); - } catch (Exception e) { - LOG.error("Connector request execution failure", e); - if (e.getCause() instanceof RuntimeException) { - throw (RuntimeException) e.getCause(); - } else { - throw new IllegalArgumentException(e.getCause()); - } - } - } - - @Override - public Set<Attribute> getObjectAttributes(final ObjectClass objectClass, final Uid uid, - final OperationOptions options) { - - Future<Set<Attribute>> future = asyncFacade.getObjectAttributes(connector, objectClass, uid, options); + public Set<ObjectClassInfo> getObjectClassInfo() { + Future<Set<ObjectClassInfo>> future = asyncFacade.getObjectClassInfo(connector); try { - return future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); - } catch (java.util.concurrent.TimeoutException e) { - future.cancel(true); - throw new TimeoutException("Request timeout"); - } catch (Exception e) { - LOG.error("Connector request execution failure", e); - if (e.getCause() instanceof RuntimeException) { - throw (RuntimeException) e.getCause(); - } else { - throw new IllegalArgumentException(e.getCause()); - } - } - } - - @Override - public Set<String> getSchemaNames(final boolean includeSpecial) { - Future<Set<String>> future = asyncFacade.getSchemaNames(connector, includeSpecial); - try { - return future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); - } catch (java.util.concurrent.TimeoutException e) { - future.cancel(true); - throw new TimeoutException("Request timeout"); - } catch (Exception e) { - LOG.error("Connector request execution failure", e); - if (e.getCause() instanceof RuntimeException) { - throw (RuntimeException) e.getCause(); - } else { - throw new IllegalArgumentException(e.getCause()); - } - } - } - - @Override - public Set<ObjectClass> getSupportedObjectClasses() { - Future<Set<ObjectClass>> future = asyncFacade.getSupportedObjectClasses(connector); - try { - return future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + return future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -463,7 +402,7 @@ public class ConnectorFacadeProxy implements Connector { public void validate() { Future<String> future = asyncFacade.test(connector); try { - future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -481,7 +420,7 @@ public class ConnectorFacadeProxy implements Connector { public void test() { Future<String> future = asyncFacade.test(connector); try { - future.get(activeConnInstance.getConnRequestTimeout(), TimeUnit.SECONDS); + future.get(connInstance.getConnRequestTimeout(), TimeUnit.SECONDS); } catch (java.util.concurrent.TimeoutException e) { future.cancel(true); throw new TimeoutException("Request timeout"); @@ -502,7 +441,7 @@ public class ConnectorFacadeProxy implements Connector { final ResultsHandler handler, final OperationOptions options) { - if (activeConnInstance.getCapabilities().contains(ConnectorCapability.SEARCH)) { + if (connInstance.getCapabilities().contains(ConnectorCapability.SEARCH)) { if (options.getPageSize() == null && options.getPagedResultsCookie() == null) { OperationOptionsBuilder builder = new OperationOptionsBuilder(options); builder.setPageSize(DEFAULT_PAGE_SIZE); @@ -534,7 +473,7 @@ public class ConnectorFacadeProxy implements Connector { } } else { LOG.info("Search was attempted, although the connector only has these capabilities: {}. No action.", - activeConnInstance.getCapabilities()); + connInstance.getCapabilities()); } } @@ -560,39 +499,14 @@ public class ConnectorFacadeProxy implements Connector { } }, new ArrayList<SortKey>(orderBy.size()))); - builder.setAttributesToGet(getOperationOptions(mapItems).getAttributesToGet()); + builder.setAttributesToGet(MappingUtils.buildOperationOptions(mapItems).getAttributesToGet()); search(objectClass, filter, handler, builder.build()); } @Override - public ConnInstance getActiveConnInstance() { - return activeConnInstance; - } - - @Override - public OperationOptions getOperationOptions(final Iterator<? extends MappingItem> mapItems) { - // ------------------------------------- - // Ask just for mapped attributes - // ------------------------------------- - OperationOptionsBuilder builder = new OperationOptionsBuilder(); - - Set<String> attrsToGet = new HashSet<>(); - attrsToGet.add(Name.NAME); - attrsToGet.add(Uid.NAME); - attrsToGet.add(OperationalAttributes.ENABLE_NAME); - - while (mapItems.hasNext()) { - MappingItem mapItem = mapItems.next(); - if (mapItem.getPurpose() != MappingPurpose.NONE) { - attrsToGet.add(mapItem.getExtAttrName()); - } - } - - builder.setAttributesToGet(attrsToGet); - // ------------------------------------- - - return builder.build(); + public ConnInstance getConnInstance() { + return connInstance; } private Object getPropertyValue(final String propType, final List<?> values) { @@ -637,6 +551,6 @@ public class ConnectorFacadeProxy implements Connector { @Override public String toString() { return "ConnectorFacadeProxy{" - + "connector=" + connector + "\n" + "capabitilies=" + activeConnInstance.getCapabilities() + '}'; + + "connector=" + connector + "\n" + "capabitilies=" + connInstance.getCapabilities() + '}'; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java index a38ba50..1ecc163 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java @@ -25,8 +25,10 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang3.SerializationUtils; import org.apache.syncope.common.lib.types.ConnConfProperty; +import org.apache.syncope.common.lib.types.ConnectorCapability; import org.apache.syncope.core.misc.security.AuthContextUtils; import org.apache.syncope.core.misc.spring.ApplicationContextProvider; +import org.apache.syncope.core.persistence.api.SyncopeLoader; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.provisioning.api.ConnIdBundleManager; @@ -42,11 +44,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -/** - * Load ConnId connector instances. - */ @Component -public class ConnectorManager implements ConnectorRegistry, ConnectorFactory { +public class ConnectorManager implements ConnectorRegistry, ConnectorFactory, SyncopeLoader { private static final Logger LOG = LoggerFactory.getLogger(ConnectorManager.class); @@ -56,6 +55,11 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory { @Autowired private ExternalResourceDAO resourceDAO; + @Override + public Integer getPriority() { + return 100; + } + private String getBeanName(final ExternalResource resource) { return String.format("connInstance-%s-%d-%s", AuthContextUtils.getDomain(), resource.getConnector().getKey(), resource.getKey()); @@ -72,54 +76,61 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory { } @Override - public Connector createConnector(final ConnInstance connInstance, final Set<ConnConfProperty> configuration) { - ConnInstance connInstanceClone = SerializationUtils.clone(connInstance); - - connInstanceClone.setConfiguration(configuration); + public ConnInstance buildConnInstanceOverride( + final ConnInstance connInstance, + final Set<ConnConfProperty> confOverride, + final Set<ConnectorCapability> capabilitiesOverride) { - Connector connector = new ConnectorFacadeProxy(connInstanceClone); - ApplicationContextProvider.getBeanFactory().autowireBean(connector); - - return connector; - } - - @Override - public ConnInstance getOverriddenConnInstance( - final ConnInstance connInstance, final Set<ConnConfProperty> overridden) { + ConnInstance override = SerializationUtils.clone(connInstance); - Set<ConnConfProperty> configuration = new HashSet<>(); Map<String, ConnConfProperty> overridable = new HashMap<>(); + Set<ConnConfProperty> conf = new HashSet<>(); - // add not overridable properties - for (ConnConfProperty prop : connInstance.getConfiguration()) { + for (ConnConfProperty prop : override.getConf()) { if (prop.isOverridable()) { overridable.put(prop.getSchema().getName(), prop); } else { - configuration.add(prop); + conf.add(prop); } } // add overridden properties - for (ConnConfProperty prop : overridden) { + for (ConnConfProperty prop : confOverride) { if (overridable.containsKey(prop.getSchema().getName()) && !prop.getValues().isEmpty()) { - configuration.add(prop); + conf.add(prop); overridable.remove(prop.getSchema().getName()); } } // add overridable properties not overridden - configuration.addAll(overridable.values()); + conf.addAll(overridable.values()); - connInstance.setConfiguration(configuration); + override.setConf(conf); - return connInstance; + // replace capabilities + if (capabilitiesOverride != null) { + override.getCapabilities().clear(); + override.getCapabilities().addAll(capabilitiesOverride); + } + + return override; + } + + @Override + public Connector createConnector(final ConnInstance connInstance) { + Connector connector = new ConnectorFacadeProxy(connInstance); + ApplicationContextProvider.getBeanFactory().autowireBean(connector); + + return connector; } @Override public void registerConnector(final ExternalResource resource) { - ConnInstance connInstance = getOverriddenConnInstance( - SerializationUtils.clone(resource.getConnector()), resource.getConnInstanceConfiguration()); - Connector connector = createConnector(resource.getConnector(), connInstance.getConfiguration()); + ConnInstance connInstance = buildConnInstanceOverride( + resource.getConnector(), + resource.getConfOverride(), + resource.isOverrideCapabilities() ? resource.getCapabilitiesOverride() : null); + Connector connector = createConnector(connInstance); LOG.debug("Connector to be registered: {}", connector); String beanName = getBeanName(resource); @@ -137,11 +148,6 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory { ApplicationContextProvider.getBeanFactory().destroySingleton(id); } - @Override - public Integer getPriority() { - return 100; - } - @Transactional(readOnly = true) @Override public void load() { @@ -171,7 +177,7 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory { public void unload() { int connectors = 0; for (ExternalResource resource : resourceDAO.findAll()) { - final String beanName = getBeanName(resource); + String beanName = getBeanName(resource); if (ApplicationContextProvider.getBeanFactory().containsSingleton(beanName)) { LOG.info("Unegistering resource-connector pair {}-{}", resource, resource.getConnector()); unregisterConnector(beanName); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java index 5763449..94c68ee 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java @@ -130,7 +130,7 @@ public class VirAttrHandlerImpl implements VirAttrHandler { ConnectorObject connectorObject = connector.getObject( entry.getKey().getObjectClass(), new Uid(connObjectKey), - connector.getOperationOptions(linkingMappingItems.iterator())); + MappingUtils.buildOperationOptions(linkingMappingItems.iterator())); if (connectorObject == null) { LOG.debug("No read from {} about {}", entry.getKey(), connObjectKey); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java index 7c28b66..70914ae 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java @@ -21,8 +21,6 @@ package org.apache.syncope.core.provisioning.java.data; import org.apache.syncope.core.provisioning.api.data.ConnInstanceDataBinder; import java.util.Arrays; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.SyncopeClientException; @@ -58,35 +56,6 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { private EntityFactory entityFactory; @Override - public Set<ConnConfProperty> mergeConnConfProperties( - final Set<ConnConfProperty> primary, - final Set<ConnConfProperty> secondary) { - - Set<ConnConfProperty> conf = new HashSet<>(); - - // to be used to control managed prop (needed by overridden mechanism) - Set<String> propertyNames = new HashSet<>(); - - // get overridden connector configuration properties - for (ConnConfProperty prop : primary) { - if (!propertyNames.contains(prop.getSchema().getName())) { - conf.add(prop); - propertyNames.add(prop.getSchema().getName()); - } - } - - // get connector configuration properties - for (ConnConfProperty prop : secondary) { - if (!propertyNames.contains(prop.getSchema().getName())) { - conf.add(prop); - propertyNames.add(prop.getSchema().getName()); - } - } - - return conf; - } - - @Override public ConnInstance getConnInstance(final ConnInstanceTO connInstanceTO) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing); @@ -106,7 +75,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { sce.getElements().add("connectorname"); } - if (connInstanceTO.getConfiguration() == null || connInstanceTO.getConfiguration().isEmpty()) { + if (connInstanceTO.getConf().isEmpty()) { sce.getElements().add("configuration"); } @@ -130,7 +99,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { } @Override - public ConnInstance updateConnInstance(final long connInstanceId, final ConnInstanceTO connInstanceTO) { + public ConnInstance update(final long connInstanceId, final ConnInstanceTO connInstanceTO) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing); if (connInstanceId == 0) { @@ -157,8 +126,8 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { connInstance.setConnectorName(connInstanceTO.getConnectorName()); } - if (connInstanceTO.getConfiguration() != null && !connInstanceTO.getConfiguration().isEmpty()) { - connInstance.setConfiguration(connInstanceTO.getConfiguration()); + if (connInstanceTO.getConf() != null && !connInstanceTO.getConf().isEmpty()) { + connInstance.setConf(connInstanceTO.getConf()); } if (connInstanceTO.getDisplayName() != null) { @@ -184,7 +153,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { } @Override - public ConnConfPropSchema buildConnConfPropSchema(final ConfigurationProperty property) { + public ConnConfPropSchema build(final ConfigurationProperty property) { ConnConfPropSchema connConfPropSchema = new ConnConfPropSchema(); connConfPropSchema.setName(property.getName()); @@ -219,9 +188,9 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { ConfigurationProperties properties = connIdBundleManager.getConfigurationProperties(connIdBundleManager.getConnectorInfo(connInstance)); for (final String propName : properties.getPropertyNames()) { - ConnConfPropSchema schema = buildConnConfPropSchema(properties.getProperty(propName)); + ConnConfPropSchema schema = build(properties.getProperty(propName)); - ConnConfProperty property = CollectionUtils.find(connInstanceTO.getConfiguration(), + ConnConfProperty property = CollectionUtils.find(connInstanceTO.getConf(), new Predicate<ConnConfProperty>() { @Override @@ -231,7 +200,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder { }); if (property == null) { property = new ConnConfProperty(); - connInstanceTO.getConfiguration().add(property); + connInstanceTO.getConf().add(property); } property.setSchema(schema); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java index 388f099..dff71a0 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java @@ -33,7 +33,6 @@ import org.apache.syncope.common.lib.to.ResourceTO; import org.apache.syncope.common.lib.types.ClientExceptionType; import org.apache.syncope.common.lib.types.IntMappingType; import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.PolicyDAO; import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy; import org.apache.syncope.core.persistence.api.entity.ConnInstance; @@ -43,7 +42,6 @@ import org.apache.syncope.core.persistence.api.entity.resource.Mapping; import org.apache.syncope.core.persistence.api.entity.resource.MappingItem; import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy; import org.apache.syncope.core.persistence.api.entity.policy.SyncPolicy; -import org.apache.syncope.core.provisioning.api.ConnectorRegistry; import org.apache.syncope.core.misc.jexl.JexlUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,9 +66,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { private AnyTypeDAO anyTypeDAO; @Autowired - private ConnectorRegistry connRegistry; - - @Autowired private ConnInstanceDAO connInstanceDAO; @Autowired @@ -100,7 +95,7 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { resource.setConnector(connector); if (!connector.getResources().contains(resource)) { - connector.addResource(resource); + connector.add(resource); } } @@ -196,7 +191,11 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { resource.setSyncPolicy(resourceTO.getSyncPolicy() == null ? null : (SyncPolicy) policyDAO.find(resourceTO.getSyncPolicy())); - resource.setConnInstanceConfiguration(new HashSet<>(resourceTO.getConnConfProperties())); + resource.setConfOverride(new HashSet<>(resourceTO.getConfOverride())); + + resource.setOverrideCapabilities(resourceTO.isOverrideCapabilities()); + resource.getCapabilitiesOverride().clear(); + resource.getCapabilitiesOverride().addAll(resourceTO.getCapabilitiesOverride()); resource.getPropagationActionsClassNames().clear(); resource.getPropagationActionsClassNames().addAll(resourceTO.getPropagationActionsClassNames()); @@ -270,17 +269,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { return item; } - @Override - public ConnInstance getConnInstance(final ResourceTO resourceTO) { - ConnInstance connInstance = connInstanceDAO.find(resourceTO.getConnector()); - if (connInstance == null) { - throw new NotFoundException("Connector '" + resourceTO.getConnector() + "'"); - } - - final ConnInstance connInstanceClone = SerializationUtils.clone(connInstance); - return connRegistry.getOverriddenConnInstance(connInstanceClone, resourceTO.getConnConfProperties()); - } - private void populateMappingTO(final Mapping mapping, final MappingTO mappingTO) { mappingTO.setConnObjectLink(mapping.getConnObjectLink()); @@ -367,7 +355,10 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { resourceTO.setSyncPolicy(resource.getSyncPolicy() == null ? null : resource.getSyncPolicy().getKey()); - resourceTO.getConnConfProperties().addAll(resource.getConnInstanceConfiguration()); + resourceTO.getConfOverride().addAll(resource.getConfOverride()); + + resourceTO.setOverrideCapabilities(resource.isOverrideCapabilities()); + resourceTO.getCapabilitiesOverride().addAll(resource.getCapabilitiesOverride()); resourceTO.getPropagationActionsClassNames().addAll(resource.getPropagationActionsClassNames()); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java index 316f91a..c083187 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java @@ -566,7 +566,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask task.getOperation(), new ObjectClass(task.getObjectClassName()), new Uid(connObjectKey), - connector.getOperationOptions(IteratorUtils.chainedIterator( + MappingUtils.buildOperationOptions(IteratorUtils.chainedIterator( MappingUtils.getPropagationMappingItems(provision).iterator(), linkingMappingItems.iterator()))); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java index 6b4760b..6910c19 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java @@ -88,7 +88,7 @@ public class DBPasswordPropagationActions extends DefaultPropagationActions { private String getCipherAlgorithm(final ConnInstance connInstance) { ConnConfProperty cipherAlgorithm = - CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { + CollectionUtils.find(connInstance.getConf(), new Predicate<ConnConfProperty>() { @Override public boolean evaluate(final ConnConfProperty property) { http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java index 870be79..3ba0dc9 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java @@ -94,7 +94,7 @@ public class LDAPPasswordPropagationActions extends DefaultPropagationActions { private String getCipherAlgorithm(final ConnInstance connInstance) { ConnConfProperty cipherAlgorithm = - CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { + CollectionUtils.find(connInstance.getConf(), new Predicate<ConnConfProperty>() { @Override public boolean evaluate(final ConnConfProperty property) { http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java index dcce5e5..e0d3d59 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java @@ -134,7 +134,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan obj = profile.getConnector().getObject( objectClass, uid, - profile.getConnector().getOperationOptions(IteratorUtils.<MappingItem>emptyIterator())); + MappingUtils.buildOperationOptions(IteratorUtils.<MappingItem>emptyIterator())); } catch (TimeoutException toe) { LOG.debug("Request timeout", toe); throw toe; http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java index ec7fb2e..35e50f9 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java @@ -91,7 +91,7 @@ public class DBPasswordSyncActions extends DefaultSyncActions { private void parseEncodedPassword(final String password, final Connector connector) { if (password != null) { - ConnInstance connInstance = connector.getActiveConnInstance(); + ConnInstance connInstance = connector.getConnInstance(); String cipherAlgorithm = getCipherAlgorithm(connInstance); if (!CLEARTEXT.equals(cipherAlgorithm)) { @@ -108,7 +108,7 @@ public class DBPasswordSyncActions extends DefaultSyncActions { private String getCipherAlgorithm(final ConnInstance connInstance) { ConnConfProperty cipherAlgorithm = - CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { + CollectionUtils.find(connInstance.getConf(), new Predicate<ConnConfProperty>() { @Override public boolean evaluate(final ConnConfProperty property) { http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java index 430d06d..59e8c42 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java @@ -55,6 +55,7 @@ import org.apache.syncope.core.persistence.api.entity.user.UMembership; import org.apache.syncope.core.provisioning.api.notification.NotificationManager; import org.apache.syncope.core.workflow.api.UserWorkflowAdapter; import org.identityconnectors.framework.common.objects.Attribute; +import org.identityconnectors.framework.common.objects.ConnectorObject; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.OperationOptionsBuilder; import org.identityconnectors.framework.common.objects.SyncDelta; @@ -109,7 +110,7 @@ public class LDAPMembershipSyncActions extends DefaultSyncActions { * @return the name of the attribute used to keep track of group memberships */ protected String getGroupMembershipAttrName(final Connector connector) { - ConnConfProperty groupMembership = CollectionUtils.find(connector.getActiveConnInstance().getConfiguration(), + ConnConfProperty groupMembership = CollectionUtils.find(connector.getConnInstance().getConf(), new Predicate<ConnConfProperty>() { @Override @@ -196,7 +197,12 @@ public class LDAPMembershipSyncActions extends DefaultSyncActions { if (membAttr == null) { OperationOptionsBuilder oob = new OperationOptionsBuilder(); oob.setAttributesToGet(groupMemberName); - membAttr = connector.getObjectAttribute(ObjectClass.GROUP, delta.getUid(), oob.build(), groupMemberName); + ConnectorObject remoteObj = connector.getObject(ObjectClass.GROUP, delta.getUid(), oob.build()); + if (remoteObj == null) { + LOG.debug("Object for '{}' not found", delta.getUid().getUidValue()); + } else { + membAttr = remoteObj.getAttributeByName(groupMemberName); + } } if (membAttr != null && membAttr.getValue() != null) { result = membAttr.getValue(); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobDelegate.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobDelegate.java index 890cece..d3a4a4d 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobDelegate.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobDelegate.java @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.policy.SyncPolicySpec; +import org.apache.syncope.core.misc.MappingUtils; import org.apache.syncope.core.misc.spring.ApplicationContextProvider; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.NotFoundException; @@ -185,13 +186,13 @@ public class SyncJobDelegate extends AbstractProvisioningJobDelegate<SyncTask> { connector.getAllObjects( provision.getObjectClass(), handler, - connector.getOperationOptions(mapItems)); + MappingUtils.buildOperationOptions(mapItems)); } else { connector.sync( provision.getObjectClass(), provision.getSyncToken(), handler, - connector.getOperationOptions(mapItems)); + MappingUtils.buildOperationOptions(mapItems)); } if (!dryRun && !syncTask.isFullReconciliation()) { http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java index eefccad..4fa504e 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java @@ -128,7 +128,7 @@ public class SyncUtils { return found.add(obj); } }, - connector.getOperationOptions(MappingUtils.getSyncMappingItems(provision).iterator())); + MappingUtils.buildOperationOptions(MappingUtils.getSyncMappingItems(provision).iterator())); if (found.isEmpty()) { LOG.debug("No {} found on {} with __NAME__ {}", provision.getObjectClass(), resource, name); http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java index ac0694d..c64a02d 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java @@ -24,10 +24,8 @@ import javax.ws.rs.core.Response; import org.apache.syncope.common.lib.to.BulkAction; import org.apache.syncope.common.lib.to.BulkActionResult; import org.apache.syncope.common.lib.to.ConnBundleTO; +import org.apache.syncope.common.lib.to.ConnIdObjectClassTO; import org.apache.syncope.common.lib.to.ConnInstanceTO; -import org.apache.syncope.common.lib.to.PlainSchemaTO; -import org.apache.syncope.common.lib.wrap.ConnIdObjectClass; -import org.apache.syncope.common.rest.api.CollectionWrapper; import org.apache.syncope.common.rest.api.RESTHeaders; import org.apache.syncope.common.rest.api.service.ConnectorService; import org.apache.syncope.core.logic.ConnectorLogic; @@ -60,13 +58,10 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect } @Override - public List<PlainSchemaTO> buildSchemaNames(final ConnInstanceTO connInstanceTO, final boolean includeSpecial) { - return logic.buildSchemaNames(connInstanceTO, includeSpecial); - } + public List<ConnIdObjectClassTO> buildObjectClassInfo( + final ConnInstanceTO connInstanceTO, final boolean includeSpecial) { - @Override - public List<ConnIdObjectClass> buildSupportedObjectClasses(final ConnInstanceTO connInstanceTO) { - return CollectionWrapper.wrap(logic.buildSupportedObjectClasses(connInstanceTO), ConnIdObjectClass.class); + return logic.buildObjectClassInfo(connInstanceTO, includeSpecial); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/LoggerServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/LoggerServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/LoggerServiceImpl.java index 32ae12c..b8a9fa7 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/LoggerServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/LoggerServiceImpl.java @@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.to.EventCategoryTO; import org.apache.syncope.common.lib.to.LoggerTO; import org.apache.syncope.common.lib.types.AuditLoggerName; import org.apache.syncope.common.lib.types.LoggerType; -import org.apache.syncope.common.rest.api.CollectionWrapper; +import org.apache.syncope.common.rest.api.LoggerWrapper; import org.apache.syncope.common.rest.api.service.LoggerService; import org.apache.syncope.core.logic.LoggerLogic; import org.springframework.beans.factory.annotation.Autowired; @@ -66,7 +66,7 @@ public class LoggerServiceImpl extends AbstractServiceImpl implements LoggerServ case AUDIT: List<AuditLoggerName> auditLogger = logic.listAudits(); - return CollectionWrapper.unwrapLogger(auditLogger); + return LoggerWrapper.unwrap(auditLogger); default: throw new BadRequestException();
