You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2015/10/26 10:55:33 UTC
[1/4] syncope git commit: [SYNCOPE-714] Preliminary changes + small
refactoring of ConnectorService
Repository: syncope
Updated Branches:
refs/heads/master 7f584fb59 -> 1347c1081
[SYNCOPE-714] Preliminary changes + small refactoring of ConnectorService
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/93439817
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/93439817
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/93439817
Branch: refs/heads/master
Commit: 934398172f91b1128a0d3bac12c4a0ac2e1dea55
Parents: 7f584fb
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Oct 23 11:04:39 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Oct 26 08:26:45 2015 +0100
----------------------------------------------------------------------
.../console/panels/ResourceConnConfPanel.java | 2 +-
.../console/rest/ConnectorRestClient.java | 23 +----------
.../rest/api/service/ConnectorService.java | 36 ++++++------------
.../syncope/core/logic/ConnectorLogic.java | 40 ++++++++++----------
.../java/data/ConnInstanceDataBinderImpl.java | 9 +++--
.../rest/cxf/service/ConnectorServiceImpl.java | 34 ++---------------
.../fit/core/reference/ConnectorITCase.java | 12 +++---
7 files changed, 50 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
index 1b536c4..246e0eb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
@@ -116,7 +116,7 @@ public class ResourceConnConfPanel extends Panel {
List<ConnConfProperty> props = new ArrayList<>();
Long connectorKey = resourceTO.getConnector();
if (connectorKey != null && connectorKey > 0) {
- for (ConnConfProperty property : restClient.getConnectorProperties(connectorKey)) {
+ for (ConnConfProperty property : restClient.read(connectorKey).getConfiguration()) {
if (property.isOverridable()) {
props.add(property);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index d3d18c8..8c84993 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -108,24 +108,6 @@ public class ConnectorRestClient extends BaseRestClient {
return bundles;
}
- /**
- * Get all configuration properties for the given connector instance.
- *
- * @param connectorId the connector id
- * @return List of ConnConfProperty, or an empty list in case none found
- */
- public List<ConnConfProperty> getConnectorProperties(final Long connectorId) {
- List<ConnConfProperty> properties = null;
-
- try {
- properties = getService(ConnectorService.class).getConfigurationProperties(connectorId);
- } catch (SyncopeClientException e) {
- LOG.error("While getting connector configuration properties", e);
- }
-
- return properties;
- }
-
private Set<ConnConfProperty> filterProperties(final Set<ConnConfProperty> properties) {
Set<ConnConfProperty> newProperties = new HashSet<>();
@@ -185,8 +167,7 @@ public class ConnectorRestClient extends BaseRestClient {
public List<String> getSchemaNames(final ConnInstanceTO connectorTO) {
List<String> schemaNames = new ArrayList<>();
try {
- List<PlainSchemaTO> response = getService(ConnectorService.class).
- getSchemaNames(connectorTO.getKey(), connectorTO, false);
+ List<PlainSchemaTO> response = getService(ConnectorService.class).buildSchemaNames(connectorTO, false);
for (PlainSchemaTO schema : response) {
schemaNames.add(schema.getKey());
}
@@ -203,7 +184,7 @@ public class ConnectorRestClient extends BaseRestClient {
public List<ConnIdObjectClass> getSupportedObjectClasses(final ConnInstanceTO connectorTO) {
List<ConnIdObjectClass> result = Collections.emptyList();
try {
- result = getService(ConnectorService.class).getSupportedObjectClasses(connectorTO.getKey(), connectorTO);
+ result = getService(ConnectorService.class).buildSupportedObjectClasses(connectorTO);
} catch (Exception e) {
LOG.error("While getting supported object classes", e);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
index 686d373..ea63718 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
@@ -37,7 +37,6 @@ import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.ConnBundleTO;
import org.apache.syncope.common.lib.to.ConnInstanceTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.wrap.ConnIdObjectClass;
/**
@@ -58,47 +57,36 @@ public interface ConnectorService extends JAXRSService {
List<ConnBundleTO> getBundles(@QueryParam("lang") String lang);
/**
- * Returns configuration for given connector instance.
+ * Builds the list of schema names managed by the connector bundle matching the given connector instance key, with
+ * the provided configuration.
*
- * @param key connector instance key to read configuration from
- * @return configuration for given connector instance
- */
- @GET
- @Path("{key}/configuration")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- List<ConnConfProperty> getConfigurationProperties(@NotNull @PathParam("key") Long key);
-
- /**
- * Returns schema names for connector bundle matching the given connector instance key.
- *
- * @param key connector instance key to be used for schema lookup
- * @param connInstanceTO connector instance object to provide special configuration properties
+ * @param connInstanceTO connector instance object providing configuration properties
* @param includeSpecial if set to true, special schema names (like '__PASSWORD__') will be included;
* default is false
- * @return schema names for connector bundle matching the given connector instance key
+ * @return schema names for the connector bundle matching the given connector instance key, with the provided
+ * configuration
*/
@POST
@Path("{key}/schemaNames")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- List<PlainSchemaTO> getSchemaNames(@NotNull @PathParam("key") Long key,
+ List<PlainSchemaTO> buildSchemaNames(
@NotNull ConnInstanceTO connInstanceTO,
@QueryParam("includeSpecial") @DefaultValue("false") boolean includeSpecial);
/**
- * Returns supported object classes for connector bundle matching the given connector instance key.
+ * Builds the list of supported ConnId object classes for the connector bundle matching the given connector instance
+ * key, with the provided configuration.
*
- * @param key connector instance key to be used for schema lookup
- * @param connInstanceTO connector instance object to provide special configuration properties
- * @return supported object classes for connector bundle matching the given connector instance key
+ * @param connInstanceTO connector instance object providing configuration properties
+ * @return supported object classes for the connector bundle matching the given connector instance key, with the
+ * provided configuration
*/
@POST
@Path("{key}/supportedObjectClasses")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- List<ConnIdObjectClass> getSupportedObjectClasses(
- @NotNull @PathParam("key") Long key,
- @NotNull ConnInstanceTO connInstanceTO);
+ List<ConnIdObjectClass> buildSupportedObjectClasses(@NotNull ConnInstanceTO connInstanceTO);
/**
* Returns connector instance with matching key.
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 870a4d0..cc6aaed 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -33,6 +33,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.ConnBundleTO;
import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.Entitlement;
@@ -204,7 +205,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
@Transactional(readOnly = true)
- public List<String> getSchemaNames(final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
+ public List<PlainSchemaTO> buildSchemaNames(final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
ConnInstance connInstance = connInstanceDAO.find(connInstanceTO.getKey());
if (connInstance == null) {
throw new NotFoundException("Connector '" + connInstanceTO.getKey() + "'");
@@ -217,12 +218,22 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
// We cannot use Spring bean because this method could be used during resource definition or modification:
// bean couldn't exist or couldn't be updated.
// This is the reason why we should take a "not mature" connector facade proxy to ask for schema names.
- return new ArrayList<>(connFactory.createConnector(connInstance, conf).getSchemaNames(includeSpecial));
+ Set<String> schemaNames = connFactory.createConnector(connInstance, conf).getSchemaNames(includeSpecial);
+
+ return CollectionUtils.collect(schemaNames, new Transformer<String, PlainSchemaTO>() {
+
+ @Override
+ public PlainSchemaTO transform(final String name) {
+ PlainSchemaTO schemaTO = new PlainSchemaTO();
+ schemaTO.setKey(name);
+ return schemaTO;
+ }
+ }, new ArrayList<PlainSchemaTO>());
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
@Transactional(readOnly = true)
- public List<String> getSupportedObjectClasses(final ConnInstanceTO connInstanceTO) {
+ public List<String> buildSupportedObjectClasses(final ConnInstanceTO connInstanceTO) {
ConnInstance connInstance = connInstanceDAO.find(connInstanceTO.getKey());
if (connInstance == null) {
throw new NotFoundException("Connector '" + connInstanceTO.getKey() + "'");
@@ -237,24 +248,13 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
// This is the reason why we should take a "not mature" connector facade proxy to ask for object classes.
Set<ObjectClass> objectClasses = connFactory.createConnector(connInstance, conf).getSupportedObjectClasses();
- List<String> result = new ArrayList<>(objectClasses.size());
- for (ObjectClass objectClass : objectClasses) {
- result.add(objectClass.getObjectClassValue());
- }
-
- return result;
- }
-
- @PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
- @Transactional(readOnly = true)
- public List<ConnConfProperty> getConfigurationProperties(final Long connInstanceKey) {
-
- ConnInstance connInstance = connInstanceDAO.find(connInstanceKey);
- if (connInstance == null) {
- throw new NotFoundException("Connector '" + connInstanceKey + "'");
- }
+ return CollectionUtils.collect(objectClasses, new Transformer<ObjectClass, String>() {
- return new ArrayList<>(connInstance.getConfiguration());
+ @Override
+ public String transform(final ObjectClass objectClass) {
+ return objectClass.getObjectClassValue();
+ }
+ }, new ArrayList<String>());
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/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 3666d8f..7c28b66 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
@@ -58,13 +58,14 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
private EntityFactory entityFactory;
@Override
- public Set<ConnConfProperty> mergeConnConfProperties(final Set<ConnConfProperty> primary,
+ public Set<ConnConfProperty> mergeConnConfProperties(
+ final Set<ConnConfProperty> primary,
final Set<ConnConfProperty> secondary) {
- final Set<ConnConfProperty> conf = new HashSet<>();
+ Set<ConnConfProperty> conf = new HashSet<>();
// to be used to control managed prop (needed by overridden mechanism)
- final Set<String> propertyNames = new HashSet<>();
+ Set<String> propertyNames = new HashSet<>();
// get overridden connector configuration properties
for (ConnConfProperty prop : primary) {
@@ -232,7 +233,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
property = new ConnConfProperty();
connInstanceTO.getConfiguration().add(property);
}
-
+
property.setSchema(schema);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/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 a970827..ac0694d 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
@@ -19,17 +19,13 @@
package org.apache.syncope.core.rest.cxf.service;
import java.net.URI;
-import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.Response;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
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.ConnInstanceTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.wrap.ConnIdObjectClass;
import org.apache.syncope.common.rest.api.CollectionWrapper;
import org.apache.syncope.common.rest.api.RESTHeaders;
@@ -64,35 +60,13 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
}
@Override
- public List<ConnConfProperty> getConfigurationProperties(final Long key) {
- return logic.getConfigurationProperties(key);
+ public List<PlainSchemaTO> buildSchemaNames(final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
+ return logic.buildSchemaNames(connInstanceTO, includeSpecial);
}
@Override
- public List<PlainSchemaTO> getSchemaNames(final Long key, final ConnInstanceTO connInstanceTO,
- final boolean includeSpecial) {
-
- connInstanceTO.setKey(key);
-
- return CollectionUtils.collect(logic.getSchemaNames(connInstanceTO, includeSpecial),
- new Transformer<String, PlainSchemaTO>() {
-
- @Override
- public PlainSchemaTO transform(final String name) {
- PlainSchemaTO schemaTO = new PlainSchemaTO();
- schemaTO.setKey(name);
- return schemaTO;
- }
- }, new ArrayList<PlainSchemaTO>());
- }
-
- @Override
- public List<ConnIdObjectClass> getSupportedObjectClasses(final Long key,
- final ConnInstanceTO connInstanceTO) {
-
- connInstanceTO.setKey(key);
-
- return CollectionWrapper.wrap(logic.getSupportedObjectClasses(connInstanceTO), ConnIdObjectClass.class);
+ public List<ConnIdObjectClass> buildSupportedObjectClasses(final ConnInstanceTO connInstanceTO) {
+ return CollectionWrapper.wrap(logic.buildSupportedObjectClasses(connInstanceTO), ConnIdObjectClass.class);
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/93439817/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
index cc97936..71859a7 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
@@ -397,7 +397,7 @@ public class ConnectorITCase extends AbstractITCase {
@Test
public void getConnectorConfiguration() {
- List<ConnConfProperty> props = connectorService.getConfigurationProperties(104L);
+ Set<ConnConfProperty> props = connectorService.read(104L, Locale.ENGLISH.getLanguage()).getConfiguration();
assertNotNull(props);
assertFalse(props.isEmpty());
}
@@ -541,13 +541,13 @@ public class ConnectorITCase extends AbstractITCase {
public void getSchemaNames() {
ConnInstanceTO conn = connectorService.read(101L, Locale.ENGLISH.getLanguage());
- List<PlainSchemaTO> schemaNames = connectorService.getSchemaNames(conn.getKey(), conn, true);
+ List<PlainSchemaTO> schemaNames = connectorService.buildSchemaNames(conn, true);
assertNotNull(schemaNames);
assertFalse(schemaNames.isEmpty());
assertNotNull(schemaNames.get(0).getKey());
assertNull(schemaNames.get(0).getEnumerationValues());
- schemaNames = connectorService.getSchemaNames(conn.getKey(), conn, false);
+ schemaNames = connectorService.buildSchemaNames(conn, false);
assertNotNull(schemaNames);
assertEquals(1, schemaNames.size());
@@ -557,7 +557,7 @@ public class ConnectorITCase extends AbstractITCase {
// to be used with overridden properties
conn.getConfiguration().clear();
- schemaNames = connectorService.getSchemaNames(conn.getKey(), conn, true);
+ schemaNames = connectorService.buildSchemaNames(conn, true);
assertNotNull(schemaNames);
assertFalse(schemaNames.isEmpty());
}
@@ -567,7 +567,7 @@ public class ConnectorITCase extends AbstractITCase {
ConnInstanceTO ldap = connectorService.read(105L, Locale.ENGLISH.getLanguage());
assertNotNull(ldap);
- List<ConnIdObjectClass> objectClasses = connectorService.getSupportedObjectClasses(ldap.getKey(), ldap);
+ List<ConnIdObjectClass> objectClasses = connectorService.buildSupportedObjectClasses(ldap);
assertNotNull(objectClasses);
assertEquals(2, objectClasses.size());
assertTrue(objectClasses.contains(
@@ -578,7 +578,7 @@ public class ConnectorITCase extends AbstractITCase {
ConnInstanceTO csv = connectorService.read(104L, Locale.ENGLISH.getLanguage());
assertNotNull(csv);
- objectClasses = connectorService.getSupportedObjectClasses(csv.getKey(), csv);
+ objectClasses = connectorService.buildSupportedObjectClasses(csv);
assertNotNull(objectClasses);
assertEquals(1, objectClasses.size());
assertTrue(objectClasses.contains(
[2/4] syncope git commit: [SYNCOPE-714] Consolidating old
buildSchemaNames and buildSupportedObjectClasses into new buildO
bjectClassInfo
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
index 2cc6476..39dbba9 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.BulkAction;
import org.apache.syncope.common.lib.to.BulkActionResult;
@@ -35,8 +36,6 @@ import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.PagedConnObjectTOResult;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
-import org.apache.syncope.common.lib.wrap.AnyKey;
import org.apache.syncope.common.rest.api.RESTHeaders;
import org.apache.syncope.common.rest.api.beans.ConnObjectTOListQuery;
import org.apache.syncope.common.rest.api.service.ResourceService;
@@ -134,41 +133,39 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
}
@Override
- public BulkActionResult bulkDeassociation(
- final String key, final String anyTypeKey, final ResourceDeassociationAction type,
- final List<AnyKey> keys) {
-
- AbstractResourceAssociator<? extends AnyTO> associator = anyTypeKey.equalsIgnoreCase(AnyTypeKind.USER.name())
- ? userLogic
- : anyTypeKey.equalsIgnoreCase(AnyTypeKind.GROUP.name())
- ? groupLogic
- : anyObjectLogic;
+ public BulkActionResult bulkDeassociation(final ResourceDeassociationPatch patch) {
+ AbstractResourceAssociator<? extends AnyTO> associator =
+ patch.getAnyTypeKey().equalsIgnoreCase(AnyTypeKind.USER.name())
+ ? userLogic
+ : patch.getAnyTypeKey().equalsIgnoreCase(AnyTypeKind.GROUP.name())
+ ? groupLogic
+ : anyObjectLogic;
BulkActionResult result = new BulkActionResult();
- for (AnyKey anyKey : keys) {
- Set<String> resources = Collections.singleton(key);
+ for (Long anyKey : patch.getAnyKyes()) {
+ Set<String> resources = Collections.singleton(patch.getKey());
try {
- switch (type) {
+ switch (patch.getAction()) {
case DEPROVISION:
- associator.deprovision(anyKey.getElement(), resources);
+ associator.deprovision(anyKey, resources);
break;
case UNASSIGN:
- associator.unassign(anyKey.getElement(), resources);
+ associator.unassign(anyKey, resources);
break;
case UNLINK:
- associator.unlink(anyKey.getElement(), resources);
+ associator.unlink(anyKey, resources);
break;
default:
}
- result.getResults().put(String.valueOf(anyKey.getElement()), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(String.valueOf(anyKey), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
- LOG.warn("While executing {} on {} {}", type, anyTypeKey, anyKey.getElement(), e);
- result.getResults().put(String.valueOf(anyKey.getElement()), BulkActionResult.Status.FAILURE);
+ LOG.warn("While executing {} on {} {}", patch.getAction(), patch.getAnyTypeKey(), anyKey, e);
+ result.getResults().put(String.valueOf(anyKey), BulkActionResult.Status.FAILURE);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
index b30c962..60565e1 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
@@ -399,7 +399,7 @@ public abstract class AbstractITCase {
throws NamingException {
ResourceTO ldapRes = resourceService.read(RESOURCE_NAME_LDAP);
final Map<String, ConnConfProperty> ldapConnConf =
- connectorService.read(ldapRes.getConnector(), Locale.ENGLISH.getLanguage()).getConfigurationMap();
+ connectorService.read(ldapRes.getConnector(), Locale.ENGLISH.getLanguage()).getConfMap();
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
index 71859a7..770a7cb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java
@@ -28,6 +28,7 @@ import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Iterator;
@@ -37,16 +38,18 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.ws.rs.core.Response;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.BulkAction;
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.ConnPoolConfTO;
import org.apache.syncope.common.lib.to.MappingItemTO;
import org.apache.syncope.common.lib.to.MappingTO;
-import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.to.ProvisionTO;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -54,7 +57,6 @@ import org.apache.syncope.common.lib.types.ConnConfPropSchema;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.ConnectorCapability;
import org.apache.syncope.common.lib.types.IntMappingType;
-import org.apache.syncope.common.lib.wrap.ConnIdObjectClass;
import org.apache.syncope.common.rest.api.service.ConnectorService;
import org.apache.syncope.common.rest.api.service.ResourceService;
import org.identityconnectors.common.security.GuardedString;
@@ -146,7 +148,7 @@ public class ConnectorITCase extends AbstractITCase {
conf.add(servicename);
// set connector configuration
- connectorTO.getConfiguration().addAll(conf);
+ connectorTO.getConf().addAll(conf);
// set connector capabilities
connectorTO.getCapabilities().add(ConnectorCapability.CREATE);
@@ -253,7 +255,7 @@ public class ConnectorITCase extends AbstractITCase {
conf.add(servicename);
// set connector configuration
- connectorTO.getConfiguration().addAll(conf);
+ connectorTO.getConf().addAll(conf);
connectorService.update(connectorTO);
ConnInstanceTO actual = connectorService.read(connectorTO.getKey(), Locale.ENGLISH.getLanguage());
@@ -397,7 +399,7 @@ public class ConnectorITCase extends AbstractITCase {
@Test
public void getConnectorConfiguration() {
- Set<ConnConfProperty> props = connectorService.read(104L, Locale.ENGLISH.getLanguage()).getConfiguration();
+ Set<ConnConfProperty> props = connectorService.read(104L, Locale.ENGLISH.getLanguage()).getConf();
assertNotNull(props);
assertFalse(props.isEmpty());
}
@@ -408,7 +410,7 @@ public class ConnectorITCase extends AbstractITCase {
boolean check = false;
- for (ConnConfProperty prop : connInstanceTO.getConfiguration()) {
+ for (ConnConfProperty prop : connInstanceTO.getConf()) {
if ("receiveTimeout".equals(prop.getSchema().getName())) {
check = true;
}
@@ -424,7 +426,7 @@ public class ConnectorITCase extends AbstractITCase {
Map<String, ConnConfProperty> instanceConfMap;
for (ConnInstanceTO instance : connectorInstanceTOs) {
if ("net.tirasa.connid.bundles.db.table".equals(instance.getBundleName())) {
- instanceConfMap = instance.getConfigurationMap();
+ instanceConfMap = instance.getConfMap();
assertEquals("Utente", instanceConfMap.get("user").getSchema().getDisplayName());
}
}
@@ -434,7 +436,7 @@ public class ConnectorITCase extends AbstractITCase {
for (ConnInstanceTO instance : connectorInstanceTOs) {
if ("net.tirasa.connid.bundles.db.table".equals(instance.getBundleName())) {
- instanceConfMap = instance.getConfigurationMap();
+ instanceConfMap = instance.getConfMap();
assertEquals("User", instanceConfMap.get("user").getSchema().getDisplayName());
}
}
@@ -516,7 +518,7 @@ public class ConnectorITCase extends AbstractITCase {
conf.add(passwordColumn);
// set connector configuration
- connectorTO.getConfiguration().addAll(conf);
+ connectorTO.getConf().addAll(conf);
try {
connectorService.check(connectorTO);
@@ -538,51 +540,35 @@ public class ConnectorITCase extends AbstractITCase {
}
@Test
- public void getSchemaNames() {
- ConnInstanceTO conn = connectorService.read(101L, Locale.ENGLISH.getLanguage());
-
- List<PlainSchemaTO> schemaNames = connectorService.buildSchemaNames(conn, true);
- assertNotNull(schemaNames);
- assertFalse(schemaNames.isEmpty());
- assertNotNull(schemaNames.get(0).getKey());
- assertNull(schemaNames.get(0).getEnumerationValues());
+ public void buildObjectClassInfo() {
+ ConnInstanceTO ws = connectorService.read(102L, Locale.ENGLISH.getLanguage());
+ assertNotNull(ws);
- schemaNames = connectorService.buildSchemaNames(conn, false);
+ List<ConnIdObjectClassTO> objectClassInfo = connectorService.buildObjectClassInfo(ws, true);
+ assertNotNull(objectClassInfo);
+ assertEquals(1, objectClassInfo.size());
+ assertEquals(ObjectClass.ACCOUNT_NAME, objectClassInfo.get(0).getType());
+ assertTrue(objectClassInfo.get(0).getAttributes().contains("promoThirdPartyDisclaimer"));
- assertNotNull(schemaNames);
- assertEquals(1, schemaNames.size());
+ ConnInstanceTO ldap = connectorService.read(105L, Locale.ENGLISH.getLanguage());
+ assertNotNull(ldap);
- conn = connectorService.read(104L, Locale.ENGLISH.getLanguage());
+ objectClassInfo = connectorService.buildObjectClassInfo(ldap, true);
+ assertNotNull(objectClassInfo);
+ assertEquals(2, objectClassInfo.size());
- // to be used with overridden properties
- conn.getConfiguration().clear();
+ Collection<String> objectClasses = CollectionUtils.collect(objectClassInfo,
+ new Transformer<ConnIdObjectClassTO, String>() {
- schemaNames = connectorService.buildSchemaNames(conn, true);
- assertNotNull(schemaNames);
- assertFalse(schemaNames.isEmpty());
- }
-
- @Test
- public void getSupportedObjectClasses() {
- ConnInstanceTO ldap = connectorService.read(105L, Locale.ENGLISH.getLanguage());
- assertNotNull(ldap);
+ @Override
+ public String transform(final ConnIdObjectClassTO info) {
+ return info.getType();
+ }
- List<ConnIdObjectClass> objectClasses = connectorService.buildSupportedObjectClasses(ldap);
- assertNotNull(objectClasses);
+ });
assertEquals(2, objectClasses.size());
- assertTrue(objectClasses.contains(
- ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.ACCOUNT_NAME)));
- assertTrue(objectClasses.contains(
- ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.GROUP_NAME)));
-
- ConnInstanceTO csv = connectorService.read(104L, Locale.ENGLISH.getLanguage());
- assertNotNull(csv);
-
- objectClasses = connectorService.buildSupportedObjectClasses(csv);
- assertNotNull(objectClasses);
- assertEquals(1, objectClasses.size());
- assertTrue(objectClasses.contains(
- ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.ACCOUNT_NAME)));
+ assertTrue(objectClasses.contains(ObjectClass.ACCOUNT_NAME));
+ assertTrue(objectClasses.contains(ObjectClass.GROUP_NAME));
}
@Test
@@ -631,7 +617,7 @@ public class ConnectorITCase extends AbstractITCase {
conf.add(servicename);
// set connector configuration
- connectorTO.getConfiguration().addAll(conf);
+ connectorTO.getConf().addAll(conf);
try {
try {
@@ -664,7 +650,7 @@ public class ConnectorITCase extends AbstractITCase {
endpoint.getValues().add("http://localhost:9080/wssample/services/provisioning");
conf.add(endpoint);
- resourceTO.getConnConfProperties().addAll(conf);
+ resourceTO.getConfOverride().addAll(conf);
ProvisionTO provisionTO = new ProvisionTO();
provisionTO.setAnyType(AnyTypeKind.USER.name());
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/LoggerITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/LoggerITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/LoggerITCase.java
index 928365f..236d169 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/LoggerITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/LoggerITCase.java
@@ -38,7 +38,7 @@ import org.apache.syncope.common.lib.types.AuditLoggerName;
import org.apache.syncope.common.lib.types.LoggerLevel;
import org.apache.syncope.common.lib.types.LoggerType;
import org.apache.syncope.common.lib.types.ResourceOperation;
-import org.apache.syncope.common.rest.api.CollectionWrapper;
+import org.apache.syncope.common.rest.api.LoggerWrapper;
import org.apache.syncope.core.logic.ReportLogic;
import org.apache.syncope.core.logic.ResourceLogic;
import org.apache.syncope.core.logic.GroupLogic;
@@ -105,7 +105,7 @@ public class LoggerITCase extends AbstractITCase {
"deleteExecution",
AuditElements.Result.FAILURE);
- List<AuditLoggerName> audits = CollectionWrapper.wrapLogger(loggerService.list(LoggerType.AUDIT));
+ List<AuditLoggerName> audits = LoggerWrapper.wrap(loggerService.list(LoggerType.AUDIT));
assertNotNull(audits);
assertFalse(audits.contains(auditLoggerName));
@@ -114,13 +114,13 @@ public class LoggerITCase extends AbstractITCase {
loggerTO.setLevel(LoggerLevel.DEBUG);
loggerService.update(LoggerType.AUDIT, loggerTO);
- audits = CollectionWrapper.wrapLogger(loggerService.list(LoggerType.AUDIT));
+ audits = LoggerWrapper.wrap(loggerService.list(LoggerType.AUDIT));
assertNotNull(audits);
assertTrue(audits.contains(auditLoggerName));
loggerService.delete(LoggerType.AUDIT, auditLoggerName.toLoggerName());
- audits = CollectionWrapper.wrapLogger(loggerService.list(LoggerType.AUDIT));
+ audits = LoggerWrapper.wrap(loggerService.list(LoggerType.AUDIT));
assertNotNull(audits);
assertFalse(audits.contains(auditLoggerName));
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ResourceITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ResourceITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ResourceITCase.java
index e0539c8..5d4d176 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ResourceITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ResourceITCase.java
@@ -170,7 +170,7 @@ public class ResourceITCase extends AbstractITCase {
p.getValues().add("http://invalidurl/");
Set<ConnConfProperty> connectorConfigurationProperties = new HashSet<>(Arrays.asList(p));
- resourceTO.getConnConfProperties().addAll(connectorConfigurationProperties);
+ resourceTO.getConfOverride().addAll(connectorConfigurationProperties);
Response response = resourceService.create(resourceTO);
ResourceTO actual = getObject(response.getLocation(), ResourceService.class, ResourceTO.class);
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
index e8ffd56..ef73242 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
@@ -748,7 +748,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
ResourceTO ldapResource = resourceService.read(RESOURCE_NAME_LDAP);
ConnInstanceTO resourceConnector = connectorService.read(
ldapResource.getConnector(), Locale.ENGLISH.getLanguage());
- ConnConfProperty property = resourceConnector.getConfigurationMap().get("retrievePasswordsWithSearch");
+ ConnConfProperty property = resourceConnector.getConfMap().get("retrievePasswordsWithSearch");
property.getValues().clear();
property.getValues().add(Boolean.TRUE);
connectorService.update(resourceConnector);
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/VirAttrITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/VirAttrITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/VirAttrITCase.java
index e96026f..cf00ffd 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/VirAttrITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/VirAttrITCase.java
@@ -367,7 +367,7 @@ public class VirAttrITCase extends AbstractITCase {
String jdbcURL = null;
ConnInstanceTO connInstanceTO = connectorService.readByResource(
RESOURCE_NAME_DBVIRATTR, Locale.ENGLISH.getLanguage());
- for (ConnConfProperty prop : connInstanceTO.getConfiguration()) {
+ for (ConnConfProperty prop : connInstanceTO.getConf()) {
if ("jdbcUrlTemplate".equals(prop.getSchema().getName())) {
jdbcURL = prop.getValues().iterator().next().toString();
prop.getValues().clear();
@@ -400,7 +400,7 @@ public class VirAttrITCase extends AbstractITCase {
// ----------------------------------------
// 5. restore connector URL, values can be read again from external resource
// ----------------------------------------
- for (ConnConfProperty prop : connInstanceTO.getConfiguration()) {
+ for (ConnConfProperty prop : connInstanceTO.getConf()) {
if ("jdbcUrlTemplate".equals(prop.getSchema().getName())) {
prop.getValues().clear();
prop.getValues().add(jdbcURL);
[3/4] syncope git commit: [SYNCOPE-714] Consolidating old
buildSchemaNames and buildSupportedObjectClasses into new buildO
bjectClassInfo
Posted by il...@apache.org.
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();
[4/4] syncope git commit: [SYNCOPE-714] Consolidating old
buildSchemaNames and buildSupportedObjectClasses into new buildO
bjectClassInfo
Posted by il...@apache.org.
[SYNCOPE-714] Consolidating old buildSchemaNames and buildSupportedObjectClasses into new buildO
bjectClassInfo
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/1347c108
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/1347c108
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/1347c108
Branch: refs/heads/master
Commit: 1347c1081dd9eb3e32ae0b0f39e47fa5498aa3c3
Parents: 9343981
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Oct 26 10:55:14 2015 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Oct 26 10:55:14 2015 +0100
----------------------------------------------------------------------
.../ConnectorListConfigurationProperties.java | 4 +-
.../connector/ConnectorResultManager.java | 7 +-
.../console/pages/ProvisioningModalPage.java | 17 +-
.../client/console/panels/ConnectorModal.java | 14 +-
.../console/panels/ResourceConnConfPanel.java | 10 +-
.../console/panels/ResourceMappingPanel.java | 20 ++-
.../console/rest/ConnectorRestClient.java | 40 ++---
.../client/console/rest/LoggerRestClient.java | 4 +-
.../client/console/rest/ResourceRestClient.java | 12 +-
.../lib/patch/ResourceDeassociationPatch.java | 80 +++++++++
.../common/lib/to/ConnIdObjectClassTO.java | 78 +++++++++
.../syncope/common/lib/to/ConnInstanceTO.java | 38 ++---
.../syncope/common/lib/to/ResourceTO.java | 31 +++-
.../common/lib/wrap/AbstractWrappable.java | 46 ------
.../apache/syncope/common/lib/wrap/AnyKey.java | 30 ----
.../common/lib/wrap/ConnIdObjectClass.java | 30 ----
.../syncope/common/lib/wrap/package-info.java | 23 ---
.../common/rest/api/CollectionWrapper.java | 80 ---------
.../syncope/common/rest/api/LoggerWrapper.java | 56 +++++++
.../rest/api/service/ConnectorService.java | 29 +---
.../rest/api/service/ResourceService.java | 14 +-
.../syncope/core/logic/ConnectorLogic.java | 76 +++------
.../syncope/core/logic/ResourceLogic.java | 21 ++-
.../apache/syncope/core/misc/MappingUtils.java | 33 +++-
.../persistence/api/entity/ConnInstance.java | 41 +++--
.../api/entity/resource/ExternalResource.java | 11 +-
.../persistence/jpa/entity/JPAConnInstance.java | 33 +---
.../entity/resource/JPAExternalResource.java | 46 +++++-
.../persistence/jpa/DummyConnectorRegistry.java | 13 +-
.../persistence/jpa/inner/ConnInstanceTest.java | 6 +-
.../persistence/jpa/outer/ConnInstanceTest.java | 2 +-
.../test/resources/domains/MasterContent.xml | 44 ++---
.../provisioning/api/ConnIdBundleManager.java | 2 +-
.../core/provisioning/api/Connector.java | 50 +-----
.../core/provisioning/api/ConnectorFactory.java | 23 ++-
.../provisioning/api/ConnectorRegistry.java | 12 --
.../api/data/ConnInstanceDataBinder.java | 16 +-
.../api/data/ResourceDataBinder.java | 7 +-
.../provisioning/java/AsyncConnectorFacade.java | 82 +---------
.../provisioning/java/ConnectorFacadeProxy.java | 164 +++++--------------
.../provisioning/java/ConnectorManager.java | 76 +++++----
.../provisioning/java/VirAttrHandlerImpl.java | 2 +-
.../java/data/ConnInstanceDataBinderImpl.java | 47 +-----
.../java/data/ResourceDataBinderImpl.java | 29 ++--
.../AbstractPropagationTaskExecutor.java | 2 +-
.../DBPasswordPropagationActions.java | 2 +-
.../LDAPPasswordPropagationActions.java | 2 +-
.../java/sync/AbstractPushResultHandler.java | 2 +-
.../java/sync/DBPasswordSyncActions.java | 4 +-
.../java/sync/LDAPMembershipSyncActions.java | 10 +-
.../provisioning/java/sync/SyncJobDelegate.java | 5 +-
.../core/provisioning/java/sync/SyncUtils.java | 2 +-
.../rest/cxf/service/ConnectorServiceImpl.java | 13 +-
.../rest/cxf/service/LoggerServiceImpl.java | 4 +-
.../rest/cxf/service/ResourceServiceImpl.java | 37 ++---
.../fit/core/reference/AbstractITCase.java | 2 +-
.../fit/core/reference/ConnectorITCase.java | 84 ++++------
.../fit/core/reference/LoggerITCase.java | 8 +-
.../fit/core/reference/ResourceITCase.java | 2 +-
.../fit/core/reference/SyncTaskITCase.java | 2 +-
.../fit/core/reference/VirAttrITCase.java | 4 +-
61 files changed, 720 insertions(+), 964 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorListConfigurationProperties.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorListConfigurationProperties.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorListConfigurationProperties.java
index 6b80e8e..3e454d7 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorListConfigurationProperties.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorListConfigurationProperties.java
@@ -37,8 +37,8 @@ public class ConnectorListConfigurationProperties extends AbstractConnectorComma
if (input.getParameters().length >= 1) {
for (final String parameter : input.getParameters()) {
try {
- connectorResultManager.fromListConfigurationProperties(
- connectorService.getConfigurationProperties(Long.valueOf(parameter)));
+ connectorResultManager.fromConfigurationProperties(
+ connectorService.read(Long.valueOf(parameter), null).getConf());
} catch (final NumberFormatException ex) {
connectorResultManager.managerNumberFormatException("connector", parameter);
} catch (final SyncopeClientException | WebServiceException ex) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorResultManager.java
index b6edbc2..7c72349 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorResultManager.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.cli.commands.connector;
-import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.syncope.client.cli.commands.CommonsResultManager;
@@ -49,8 +48,8 @@ public class ConnectorResultManager extends CommonsResultManager {
}
}
- public void fromListConfigurationProperties(final List<ConnConfProperty> connConfPropertys) {
- printConfiguration(new HashSet<>(connConfPropertys));
+ public void fromConfigurationProperties(final Set<ConnConfProperty> connConfPropertys) {
+ printConfiguration(connConfPropertys);
}
@@ -65,7 +64,7 @@ public class ConnectorResultManager extends CommonsResultManager {
System.out.println(" CAPABILITIES:");
printCapabilities(connInstanceTO.getCapabilities());
System.out.println(" CONFIGURATION:");
- printConfiguration(connInstanceTO.getConfiguration());
+ printConfiguration(connInstanceTO.getConf());
System.out.println(" POOL CONFIGURATION:");
printConfPool(connInstanceTO.getPoolConf());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java
index c66d650..43944bd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java
@@ -37,8 +37,6 @@ import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
-import org.apache.syncope.common.lib.wrap.AbstractWrappable;
-import org.apache.syncope.common.lib.wrap.AnyKey;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -227,26 +225,25 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP
private void bulkAssociationAction(
final AjaxRequestTarget target,
- final ResourceDeassociationAction type,
+ final ResourceDeassociationAction action,
final ActionDataTablePanel<StatusBean, String> table,
final List<IColumn<StatusBean, String>> columns) {
- final List<StatusBean> beans = new ArrayList<>(table.getModelObject());
- List<AnyKey> subjectKeys = new ArrayList<>();
+ List<StatusBean> beans = new ArrayList<>(table.getModelObject());
+ List<Long> anyKeys = new ArrayList<>();
for (StatusBean bean : beans) {
- LOG.debug("Selected bean {}", bean);
- subjectKeys.add(AbstractWrappable.getInstance(AnyKey.class, bean.getAnyKey()));
+ anyKeys.add(bean.getAnyKey());
}
if (beans.isEmpty()) {
window.close(target);
} else {
- final BulkActionResult res = resourceRestClient.bulkAssociationAction(
- resourceTO.getKey(), anyTypeKind.name(), type, subjectKeys);
+ BulkActionResult result =
+ resourceRestClient.bulkAssociationAction(resourceTO.getKey(), anyTypeKind.name(), action, anyKeys);
((BasePage) pageRef.getPage()).setModalResult(true);
- setResponsePage(new BulkActionResultModalPage<>(window, beans, columns, res, "anyKey"));
+ setResponsePage(new BulkActionResultModalPage<>(window, beans, columns, result, "anyKey"));
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java
index 4f5e8eb..f02cbe9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java
@@ -286,7 +286,7 @@ public class ConnectorModal extends AbstractResourceModal {
// form - second tab (properties)
final ListView<ConnConfProperty> connPropView = new ConnConfPropertyListView("connectorProperties",
new PropertyModel<List<ConnConfProperty>>(this, "properties"),
- true, connInstanceTO.getConfiguration());
+ true, connInstanceTO.getConf());
connPropView.setOutputMarkupId(true);
connectorPropForm.add(connPropView);
@@ -353,8 +353,8 @@ public class ConnectorModal extends AbstractResourceModal {
conn.setConnectorName(bundleTO.getConnectorName());
conn.setBundleName(bundleTO.getBundleName());
conn.setVersion(bundleTO.getVersion());
- conn.getConfiguration().clear();
- conn.getConfiguration().addAll(connPropView.getModelObject());
+ conn.getConf().clear();
+ conn.getConf().addAll(connPropView.getModelObject());
// Set the model object's capabilities to capabilitiesPalette's converted Set
conn.getCapabilities().clear();
@@ -448,11 +448,11 @@ public class ConnectorModal extends AbstractResourceModal {
final ConnConfProperty property = new ConnConfProperty();
property.setSchema(key);
if (connInstanceTO.getKey() != 0
- && connInstanceTO.getConfigurationMap().containsKey(key.getName())
- && connInstanceTO.getConfigurationMap().get(key.getName()).getValues() != null) {
+ && connInstanceTO.getConfMap().containsKey(key.getName())
+ && connInstanceTO.getConfMap().get(key.getName()).getValues() != null) {
- property.getValues().addAll(connInstanceTO.getConfigurationMap().get(key.getName()).getValues());
- property.setOverridable(connInstanceTO.getConfigurationMap().get(key.getName()).isOverridable());
+ property.getValues().addAll(connInstanceTO.getConfMap().get(key.getName()).getValues());
+ property.setOverridable(connInstanceTO.getConfMap().get(key.getName()).isOverridable());
}
if (property.getValues().isEmpty() && !key.getDefaultValues().isEmpty()) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
index 246e0eb..fdb9f83 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java
@@ -79,7 +79,7 @@ public class ResourceConnConfPanel extends Panel {
*/
final ListView<ConnConfProperty> connPropView = new ConnConfPropertyListView("connectorProperties",
new PropertyModel<List<ConnConfProperty>>(this, "connConfProperties"),
- false, resourceTO.getConnConfProperties());
+ false, resourceTO.getConfOverride());
connPropView.setOutputMarkupId(true);
connConfPropContainer.add(connPropView);
@@ -116,17 +116,17 @@ public class ResourceConnConfPanel extends Panel {
List<ConnConfProperty> props = new ArrayList<>();
Long connectorKey = resourceTO.getConnector();
if (connectorKey != null && connectorKey > 0) {
- for (ConnConfProperty property : restClient.read(connectorKey).getConfiguration()) {
+ for (ConnConfProperty property : restClient.read(connectorKey).getConf()) {
if (property.isOverridable()) {
props.add(property);
}
}
}
- if (createFlag || resourceTO.getConnConfProperties().isEmpty()) {
- resourceTO.getConnConfProperties().clear();
+ if (createFlag || resourceTO.getConfOverride().isEmpty()) {
+ resourceTO.getConfOverride().clear();
} else {
Map<String, ConnConfProperty> valuedProps = new HashMap<>();
- for (ConnConfProperty prop : resourceTO.getConnConfProperties()) {
+ for (ConnConfProperty prop : resourceTO.getConfOverride()) {
valuedProps.put(prop.getSchema().getName(), prop);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 40cc013..ceabd57 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
@@ -25,6 +25,8 @@ import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.JexlHelpUtils;
import org.apache.syncope.client.console.panels.ResourceConnConfPanel.ConnConfModEvent;
@@ -36,6 +38,7 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownCho
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.MappingPurposePanel;
+import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
import org.apache.syncope.common.lib.to.ConnInstanceTO;
import org.apache.syncope.common.lib.to.MappingItemTO;
import org.apache.syncope.common.lib.to.MappingTO;
@@ -156,7 +159,7 @@ public class ResourceMappingPanel extends Panel {
add(this.mappingContainer);
if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
- schemaNames = getSchemaNames(resourceTO.getConnector(), resourceTO.getConnConfProperties());
+ schemaNames = getSchemaNames(resourceTO.getConnector(), resourceTO.getConfOverride());
setEnabled();
} else {
schemaNames = Collections.<String>emptyList();
@@ -441,15 +444,24 @@ public class ResourceMappingPanel extends Panel {
private List<String> getSchemaNames(final Long connectorId, final Set<ConnConfProperty> conf) {
final ConnInstanceTO connInstanceTO = new ConnInstanceTO();
connInstanceTO.setKey(connectorId);
- connInstanceTO.getConfiguration().addAll(conf);
+ connInstanceTO.getConf().addAll(conf);
- return connRestClient.getSchemaNames(connInstanceTO);
+ // SYNCOPE-156: use provided info to give schema names (and type!) by ObjectClass
+ return CollectionUtils.collect(connRestClient.buildObjectClassInfo(connInstanceTO, true),
+ new Transformer<ConnIdObjectClassTO, String>() {
+
+ @Override
+ public String transform(final ConnIdObjectClassTO input) {
+ return input.getType();
+ }
+ },
+ new ArrayList<String>());
}
private void setEnabled() {
ConnInstanceTO connInstanceTO = new ConnInstanceTO();
connInstanceTO.setKey(resourceTO.getConnector());
- connInstanceTO.getConfiguration().addAll(resourceTO.getConnConfProperties());
+ connInstanceTO.getConf().addAll(resourceTO.getConfOverride());
boolean enabled = provisionTO != null;
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index 8c84993..d483411 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -28,11 +28,10 @@ import org.apache.syncope.common.lib.SyncopeClientException;
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.to.ResourceTO;
import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.syncope.common.lib.wrap.ConnIdObjectClass;
import org.apache.syncope.common.rest.api.service.ConnectorService;
import org.apache.syncope.common.rest.api.service.ResourceService;
import org.springframework.beans.BeanUtils;
@@ -57,9 +56,9 @@ public class ConnectorRestClient extends BaseRestClient {
}
public void create(final ConnInstanceTO connectorTO) {
- Set<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConfiguration());
- connectorTO.getConfiguration().clear();
- connectorTO.getConfiguration().addAll(filteredConf);
+ Set<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConf());
+ connectorTO.getConf().clear();
+ connectorTO.getConf().addAll(filteredConf);
getService(ConnectorService.class).create(connectorTO);
}
@@ -83,9 +82,9 @@ public class ConnectorRestClient extends BaseRestClient {
}
public void update(final ConnInstanceTO connectorTO) {
- Set<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConfiguration());
- connectorTO.getConfiguration().clear();
- connectorTO.getConfiguration().addAll(filteredConf);
+ Set<ConnConfProperty> filteredConf = filterProperties(connectorTO.getConf());
+ connectorTO.getConf().clear();
+ connectorTO.getConf().addAll(filteredConf);
getService(ConnectorService.class).update(connectorTO);
}
@@ -139,7 +138,7 @@ public class ConnectorRestClient extends BaseRestClient {
public boolean check(final ConnInstanceTO connectorTO) {
ConnInstanceTO toBeChecked = new ConnInstanceTO();
BeanUtils.copyProperties(connectorTO, toBeChecked, new String[] { "configuration", "configurationMap" });
- toBeChecked.getConfiguration().addAll(filterProperties(connectorTO.getConfiguration()));
+ toBeChecked.getConf().addAll(filterProperties(connectorTO.getConf()));
boolean check = false;
try {
@@ -164,27 +163,12 @@ public class ConnectorRestClient extends BaseRestClient {
return check;
}
- public List<String> getSchemaNames(final ConnInstanceTO connectorTO) {
- List<String> schemaNames = new ArrayList<>();
- try {
- List<PlainSchemaTO> response = getService(ConnectorService.class).buildSchemaNames(connectorTO, false);
- for (PlainSchemaTO schema : response) {
- schemaNames.add(schema.getKey());
- }
- } catch (Exception e) {
- LOG.error("While getting schema names", e);
- } finally {
- // re-order schema names list
- Collections.sort(schemaNames);
- }
-
- return schemaNames;
- }
+ public List<ConnIdObjectClassTO> buildObjectClassInfo(
+ final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
- public List<ConnIdObjectClass> getSupportedObjectClasses(final ConnInstanceTO connectorTO) {
- List<ConnIdObjectClass> result = Collections.emptyList();
+ List<ConnIdObjectClassTO> result = Collections.emptyList();
try {
- result = getService(ConnectorService.class).buildSupportedObjectClasses(connectorTO);
+ result = getService(ConnectorService.class).buildObjectClassInfo(connInstanceTO, includeSpecial);
} catch (Exception e) {
LOG.error("While getting supported object classes", e);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
index 627e828..56283ab 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
@@ -29,7 +29,7 @@ import org.apache.syncope.common.lib.to.LoggerTO;
import org.apache.syncope.common.lib.types.AuditLoggerName;
import org.apache.syncope.common.lib.types.LoggerLevel;
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.springframework.stereotype.Component;
@@ -43,7 +43,7 @@ public class LoggerRestClient extends BaseRestClient {
}
public List<AuditLoggerName> listAudits() {
- return CollectionWrapper.wrapLogger(getService(LoggerService.class).list(LoggerType.AUDIT));
+ return LoggerWrapper.wrap(getService(LoggerService.class).list(LoggerType.AUDIT));
}
public Map<String, Set<AuditLoggerName>> listAuditsByCategory() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index 5efa119..f5579cf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -21,11 +21,11 @@ package org.apache.syncope.client.console.rest;
import java.util.List;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
import org.apache.syncope.common.lib.to.BulkAction;
import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
-import org.apache.syncope.common.lib.wrap.AnyKey;
import org.apache.syncope.common.rest.api.service.ResourceService;
import org.springframework.stereotype.Component;
@@ -82,8 +82,14 @@ public class ResourceRestClient extends BaseRestClient {
public BulkActionResult bulkAssociationAction(
final String resourceName, final String anyTypeName,
- final ResourceDeassociationAction type, final List<AnyKey> anyKeys) {
+ final ResourceDeassociationAction action, final List<Long> anyKeys) {
- return getService(ResourceService.class).bulkDeassociation(resourceName, anyTypeName, type, anyKeys);
+ ResourceDeassociationPatch patch = new ResourceDeassociationPatch();
+ patch.setKey(resourceName);
+ patch.setAnyTypeKey(anyTypeName);
+ patch.setAction(action);
+ patch.getAnyKyes().addAll(anyKeys);
+
+ return getService(ResourceService.class).bulkDeassociation(patch);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
new file mode 100644
index 0000000..9738498
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.patch;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+import javax.ws.rs.PathParam;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
+
+@XmlRootElement(name = "resourceDeassociationPatch")
+@XmlType
+public class ResourceDeassociationPatch extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -9116268525079837276L;
+
+ private String key;
+
+ private String anyTypeKey;
+
+ private ResourceDeassociationAction action;
+
+ private final List<Long> anyKyes = new ArrayList<>();
+
+ public String getKey() {
+ return key;
+ }
+
+ @PathParam("key")
+ public void setKey(final String key) {
+ this.key = key;
+ }
+
+ public String getAnyTypeKey() {
+ return anyTypeKey;
+ }
+
+ @PathParam("anyTypeKey")
+ public void setAnyTypeKey(final String anyTypeKey) {
+ this.anyTypeKey = anyTypeKey;
+ }
+
+ public ResourceDeassociationAction getAction() {
+ return action;
+ }
+
+ @PathParam("action")
+ public void setAction(final ResourceDeassociationAction action) {
+ this.action = action;
+ }
+
+ @XmlElementWrapper(name = "anyKyes")
+ @XmlElement(name = "key")
+ @JsonProperty("anyKyes")
+ public List<Long> getAnyKyes() {
+ return anyKyes;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
new file mode 100644
index 0000000..be1b6d6
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+/**
+ * Metadata description of ConnId ObjectClass.
+ */
+@XmlRootElement(name = "connIdObjectClass")
+@XmlType
+public class ConnIdObjectClassTO extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -3719658595689434648L;
+
+ private String type;
+
+ private boolean container;
+
+ private boolean auxiliary;
+
+ private final List<String> attributes = new ArrayList<>();
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(final String type) {
+ this.type = type;
+ }
+
+ public boolean isContainer() {
+ return container;
+ }
+
+ public void setContainer(final boolean container) {
+ this.container = container;
+ }
+
+ public boolean isAuxiliary() {
+ return auxiliary;
+ }
+
+ public void setAuxiliary(final boolean auxiliary) {
+ this.auxiliary = auxiliary;
+ }
+
+ @XmlElementWrapper(name = "attributes")
+ @XmlElement(name = "attribute")
+ @JsonProperty("attributes")
+ public List<String> getAttributes() {
+ return attributes;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
index 2111570..257f2ed 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
@@ -51,9 +51,9 @@ public class ConnInstanceTO extends AbstractBaseBean {
private String version;
- private final Set<ConnConfProperty> configuration;
+ private final Set<ConnConfProperty> conf = new HashSet<>();
- private final Set<ConnectorCapability> capabilities;
+ private final Set<ConnectorCapability> capabilities = EnumSet.noneOf(ConnectorCapability.class);
private String displayName;
@@ -61,13 +61,6 @@ public class ConnInstanceTO extends AbstractBaseBean {
private ConnPoolConfTO poolConf;
- public ConnInstanceTO() {
- super();
-
- configuration = new HashSet<>();
- capabilities = EnumSet.noneOf(ConnectorCapability.class);
- }
-
public long getKey() {
return key;
}
@@ -109,28 +102,23 @@ public class ConnInstanceTO extends AbstractBaseBean {
this.version = version;
}
- @XmlElementWrapper(name = "configuration")
+ @XmlElementWrapper(name = "conf")
@XmlElement(name = "property")
- @JsonProperty("configuration")
- public Set<ConnConfProperty> getConfiguration() {
- return this.configuration;
+ @JsonProperty("conf")
+ public Set<ConnConfProperty> getConf() {
+ return this.conf;
}
@JsonIgnore
- public Map<String, ConnConfProperty> getConfigurationMap() {
- Map<String, ConnConfProperty> result;
-
- if (getConfiguration() == null) {
- result = Collections.<String, ConnConfProperty>emptyMap();
- } else {
- result = new HashMap<>();
- for (ConnConfProperty prop : getConfiguration()) {
- result.put(prop.getSchema().getName(), prop);
- }
- result = Collections.unmodifiableMap(result);
+ public Map<String, ConnConfProperty> getConfMap() {
+ Map<String, ConnConfProperty> result = new HashMap<>();
+
+ for (ConnConfProperty prop : getConf()) {
+ result.put(prop.getSchema().getName(), prop);
}
+ result = Collections.unmodifiableMap(result);
- return result;
+ return Collections.unmodifiableMap(result);
}
@XmlElementWrapper(name = "capabilities")
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
index 419b852..fc540a9 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
@@ -21,6 +21,7 @@ package org.apache.syncope.common.lib.to;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -32,6 +33,7 @@ import javax.xml.bind.annotation.XmlType;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.common.lib.types.ConnectorCapability;
import org.apache.syncope.common.lib.types.TraceLevel;
@XmlRootElement(name = "resource")
@@ -76,7 +78,11 @@ public class ResourceTO extends AbstractAnnotatedBean {
private Long syncPolicy;
- private final Set<ConnConfProperty> connConfProperties = new HashSet<>();
+ private final Set<ConnConfProperty> confOverride = new HashSet<>();
+
+ private boolean overrideCapabilities = false;
+
+ private final Set<ConnectorCapability> capabilitiesOverride = EnumSet.noneOf(ConnectorCapability.class);
private final List<String> propagationActionsClassNames = new ArrayList<>();
@@ -203,11 +209,26 @@ public class ResourceTO extends AbstractAnnotatedBean {
return provisions;
}
- @XmlElementWrapper(name = "connConfProperties")
+ @XmlElementWrapper(name = "confOverride")
@XmlElement(name = "property")
- @JsonProperty("connConfProperties")
- public Set<ConnConfProperty> getConnConfProperties() {
- return connConfProperties;
+ @JsonProperty("confOverride")
+ public Set<ConnConfProperty> getConfOverride() {
+ return confOverride;
+ }
+
+ public boolean isOverrideCapabilities() {
+ return overrideCapabilities;
+ }
+
+ public void setOverrideCapabilities(final boolean overrideCapabilities) {
+ this.overrideCapabilities = overrideCapabilities;
+ }
+
+ @XmlElementWrapper(name = "capabilitiesOverride")
+ @XmlElement(name = "capability")
+ @JsonProperty("capabilitiesOverride")
+ public Set<ConnectorCapability> getCapabilitiesOverride() {
+ return capabilitiesOverride;
}
public TraceLevel getSyncTraceLevel() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AbstractWrappable.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AbstractWrappable.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AbstractWrappable.java
deleted file mode 100644
index 7ba0afa..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AbstractWrappable.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.wrap;
-
-import org.apache.syncope.common.lib.AbstractBaseBean;
-
-public abstract class AbstractWrappable<E> extends AbstractBaseBean {
-
- private static final long serialVersionUID = 1712808704911635170L;
-
- private E element;
-
- public static <E, T extends AbstractWrappable<E>> T getInstance(final Class<T> reference, final E element) {
- try {
- T instance = reference.newInstance();
- instance.setElement(element);
- return instance;
- } catch (Exception e) {
- throw new IllegalArgumentException("Could not instantiate " + reference.getName(), e);
- }
- }
-
- public E getElement() {
- return element;
- }
-
- public void setElement(final E element) {
- this.element = element;
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
deleted file mode 100644
index 0eb6eef..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.wrap;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "anyKey")
-@XmlType
-public class AnyKey extends AbstractWrappable<Long> {
-
- private static final long serialVersionUID = -8664228651057889297L;
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/ConnIdObjectClass.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/ConnIdObjectClass.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/ConnIdObjectClass.java
deleted file mode 100644
index 868b3f1..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/ConnIdObjectClass.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.wrap;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "connIdObjectClass")
-@XmlType
-public class ConnIdObjectClass extends AbstractWrappable<String> {
-
- private static final long serialVersionUID = 613925852330408531L;
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/package-info.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/package-info.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/package-info.java
deleted file mode 100644
index 397cb66..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-@XmlSchema(namespace = SyncopeConstants.NAMESPACE)
-package org.apache.syncope.common.lib.wrap;
-
-import javax.xml.bind.annotation.XmlSchema;
-import org.apache.syncope.common.lib.SyncopeConstants;
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
deleted file mode 100644
index 3cdf1fa..0000000
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import org.apache.syncope.common.lib.to.LoggerTO;
-import org.apache.syncope.common.lib.types.AuditLoggerName;
-import org.apache.syncope.common.lib.types.LoggerLevel;
-import org.apache.syncope.common.lib.wrap.AbstractWrappable;
-
-public final class CollectionWrapper {
-
- private CollectionWrapper() {
- // empty constructor for static utility class
- }
-
- public static <E, T extends AbstractWrappable<E>> List<T> wrap(final E element, final Class<T> reference) {
- return Collections.singletonList(AbstractWrappable.getInstance(reference, element));
- }
-
- public static <E, T extends AbstractWrappable<E>> List<T> wrap(
- final Collection<E> collection, final Class<T> reference) {
-
- List<T> response = new ArrayList<>();
- for (E element : collection) {
- response.add(AbstractWrappable.getInstance(reference, element));
- }
- return response;
- }
-
- public static <T extends AbstractWrappable<String>> List<String> unwrap(final Collection<T> collection) {
- List<String> response = new ArrayList<>();
- for (T item : collection) {
- response.add(item.getElement());
- }
- return response;
- }
-
- public static List<AuditLoggerName> wrapLogger(final Collection<LoggerTO> logger) {
- List<AuditLoggerName> respons = new ArrayList<>();
- for (LoggerTO loggerTO : logger) {
- try {
- respons.add(AuditLoggerName.fromLoggerName(loggerTO.getKey()));
- } catch (Exception ignore) {
- // ignore
- }
- }
- return respons;
- }
-
- public static List<LoggerTO> unwrapLogger(final Collection<AuditLoggerName> auditNames) {
- List<LoggerTO> respons = new ArrayList<>();
- for (AuditLoggerName name : auditNames) {
- LoggerTO loggerTO = new LoggerTO();
- loggerTO.setKey(name.toLoggerName());
- loggerTO.setLevel(LoggerLevel.DEBUG);
- respons.add(loggerTO);
- }
- return respons;
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/LoggerWrapper.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/LoggerWrapper.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/LoggerWrapper.java
new file mode 100644
index 0000000..9f9dfde
--- /dev/null
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/LoggerWrapper.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.apache.syncope.common.lib.to.LoggerTO;
+import org.apache.syncope.common.lib.types.AuditLoggerName;
+import org.apache.syncope.common.lib.types.LoggerLevel;
+
+public final class LoggerWrapper {
+
+ private LoggerWrapper() {
+ // empty constructor for static utility class
+ }
+
+ public static List<AuditLoggerName> wrap(final Collection<LoggerTO> logger) {
+ List<AuditLoggerName> respons = new ArrayList<>();
+ for (LoggerTO loggerTO : logger) {
+ try {
+ respons.add(AuditLoggerName.fromLoggerName(loggerTO.getKey()));
+ } catch (Exception ignore) {
+ // ignore
+ }
+ }
+ return respons;
+ }
+
+ public static List<LoggerTO> unwrap(final Collection<AuditLoggerName> auditNames) {
+ List<LoggerTO> respons = new ArrayList<>();
+ for (AuditLoggerName name : auditNames) {
+ LoggerTO loggerTO = new LoggerTO();
+ loggerTO.setKey(name.toLoggerName());
+ loggerTO.setLevel(LoggerLevel.DEBUG);
+ respons.add(loggerTO);
+ }
+ return respons;
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
index ea63718..bc111ed 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
@@ -35,9 +35,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;
/**
* REST operations for connector bundles and instances.
@@ -57,38 +56,24 @@ public interface ConnectorService extends JAXRSService {
List<ConnBundleTO> getBundles(@QueryParam("lang") String lang);
/**
- * Builds the list of schema names managed by the connector bundle matching the given connector instance key, with
- * the provided configuration.
+ * Builds the list of ConnId object classes information for the connector bundle matching the given connector
+ * instance key, with the provided configuration.
*
* @param connInstanceTO connector instance object providing configuration properties
* @param includeSpecial if set to true, special schema names (like '__PASSWORD__') will be included;
* default is false
- * @return schema names for the connector bundle matching the given connector instance key, with the provided
- * configuration
+ * @return supported object classes info for the connector bundle matching the given connector instance key, with
+ * the provided configuration
*/
@POST
- @Path("{key}/schemaNames")
+ @Path("{key}/supportedObjectClasses")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- List<PlainSchemaTO> buildSchemaNames(
+ List<ConnIdObjectClassTO> buildObjectClassInfo(
@NotNull ConnInstanceTO connInstanceTO,
@QueryParam("includeSpecial") @DefaultValue("false") boolean includeSpecial);
/**
- * Builds the list of supported ConnId object classes for the connector bundle matching the given connector instance
- * key, with the provided configuration.
- *
- * @param connInstanceTO connector instance object providing configuration properties
- * @return supported object classes for the connector bundle matching the given connector instance key, with the
- * provided configuration
- */
- @POST
- @Path("{key}/supportedObjectClasses")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- List<ConnIdObjectClass> buildSupportedObjectClasses(@NotNull ConnInstanceTO connInstanceTO);
-
- /**
* Returns connector instance with matching key.
*
* @param key connector instance key to be read
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
index 7a3550b..d515268 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
@@ -31,13 +31,12 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
import org.apache.syncope.common.lib.to.BulkAction;
import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.PagedConnObjectTOResult;
import org.apache.syncope.common.lib.to.ResourceTO;
-import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
-import org.apache.syncope.common.lib.wrap.AnyKey;
import org.apache.syncope.common.rest.api.beans.ConnObjectTOListQuery;
/**
@@ -143,19 +142,14 @@ public interface ResourceService extends JAXRSService {
/**
* De-associate any objects from the given resource.
*
- * @param key name of resource
- * @param anyTypeKey any object kind
- * @param type resource de-association action type
- * @param keys any object keys against which the bulk action will be performed
- * @return Response object featuring BulkActionResult as Entity
+ * @param patch any objects to be used for propagation-related operations
+ * @return Bulk action result
*/
@POST
@Path("{key}/bulkDeassociation/{anyTypeKey}/{action}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- BulkActionResult bulkDeassociation(@NotNull @PathParam("key") String key,
- @NotNull @PathParam("anyTypeKey") String anyTypeKey,
- @NotNull @PathParam("action") ResourceDeassociationAction type, @NotNull List<AnyKey> keys);
+ BulkActionResult bulkDeassociation(@NotNull ResourceDeassociationPatch patch);
/**
* Executes the provided bulk action.
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index cc6aaed..77ef94c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -32,10 +32,9 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
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.types.ClientExceptionType;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.Entitlement;
import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -43,7 +42,6 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.entity.ConnInstance;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.provisioning.api.ConnIdBundleManager;
-import org.apache.syncope.core.provisioning.api.Connector;
import org.apache.syncope.core.provisioning.api.ConnectorFactory;
import org.apache.syncope.core.provisioning.api.data.ConnInstanceDataBinder;
import org.identityconnectors.common.l10n.CurrentLocale;
@@ -51,7 +49,9 @@ import org.identityconnectors.framework.api.ConfigurationProperties;
import org.identityconnectors.framework.api.ConnectorInfo;
import org.identityconnectors.framework.api.ConnectorInfoManager;
import org.identityconnectors.framework.api.ConnectorKey;
-import org.identityconnectors.framework.common.objects.ObjectClass;
+import org.identityconnectors.framework.common.objects.AttributeInfo;
+import org.identityconnectors.framework.common.objects.AttributeUtil;
+import org.identityconnectors.framework.common.objects.ObjectClassInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
@@ -93,7 +93,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_UPDATE + "')")
public ConnInstanceTO update(final ConnInstanceTO connInstanceTO) {
- ConnInstance connInstance = binder.updateConnInstance(connInstanceTO.getKey(), connInstanceTO);
+ ConnInstance connInstance = binder.update(connInstanceTO.getKey(), connInstanceTO);
try {
connInstance = connInstanceDAO.save(connInstance);
} catch (SyncopeClientException e) {
@@ -193,7 +193,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
ConfigurationProperties properties = connIdBundleManager.getConfigurationProperties(bundle);
for (String propName : properties.getPropertyNames()) {
- connBundleTO.getProperties().add(binder.buildConnConfPropSchema(properties.getProperty(propName)));
+ connBundleTO.getProperties().add(binder.build(properties.getProperty(propName)));
}
connectorBundleTOs.add(connBundleTO);
@@ -204,65 +204,41 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
- @Transactional(readOnly = true)
- public List<PlainSchemaTO> buildSchemaNames(final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
+ public List<ConnIdObjectClassTO> buildObjectClassInfo(
+ final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
+
ConnInstance connInstance = connInstanceDAO.find(connInstanceTO.getKey());
if (connInstance == null) {
throw new NotFoundException("Connector '" + connInstanceTO.getKey() + "'");
}
- // consider the possibility to receive overridden properties only
- Set<ConnConfProperty> conf =
- binder.mergeConnConfProperties(connInstanceTO.getConfiguration(), connInstance.getConfiguration());
+ Set<ObjectClassInfo> objectClassInfo = connFactory.createConnector(
+ connFactory.buildConnInstanceOverride(connInstance, connInstanceTO.getConf(), null)).
+ getObjectClassInfo();
- // We cannot use Spring bean because this method could be used during resource definition or modification:
- // bean couldn't exist or couldn't be updated.
- // This is the reason why we should take a "not mature" connector facade proxy to ask for schema names.
- Set<String> schemaNames = connFactory.createConnector(connInstance, conf).getSchemaNames(includeSpecial);
+ List<ConnIdObjectClassTO> result = new ArrayList<>(objectClassInfo.size());
+ for (ObjectClassInfo info : objectClassInfo) {
+ ConnIdObjectClassTO connIdObjectClassTO = new ConnIdObjectClassTO();
+ connIdObjectClassTO.setType(info.getType());
+ connIdObjectClassTO.setAuxiliary(info.isAuxiliary());
+ connIdObjectClassTO.setContainer(info.isContainer());
- return CollectionUtils.collect(schemaNames, new Transformer<String, PlainSchemaTO>() {
-
- @Override
- public PlainSchemaTO transform(final String name) {
- PlainSchemaTO schemaTO = new PlainSchemaTO();
- schemaTO.setKey(name);
- return schemaTO;
+ for (AttributeInfo attrInfo : info.getAttributeInfo()) {
+ if (includeSpecial || !AttributeUtil.isSpecialName(attrInfo.getName())) {
+ connIdObjectClassTO.getAttributes().add(attrInfo.getName());
+ }
}
- }, new ArrayList<PlainSchemaTO>());
- }
- @PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
- @Transactional(readOnly = true)
- public List<String> buildSupportedObjectClasses(final ConnInstanceTO connInstanceTO) {
- ConnInstance connInstance = connInstanceDAO.find(connInstanceTO.getKey());
- if (connInstance == null) {
- throw new NotFoundException("Connector '" + connInstanceTO.getKey() + "'");
+ result.add(connIdObjectClassTO);
}
- // consider the possibility to receive overridden properties only
- Set<ConnConfProperty> conf =
- binder.mergeConnConfProperties(connInstanceTO.getConfiguration(), connInstance.getConfiguration());
-
- // We cannot use Spring bean because this method could be used during resource definition or modification:
- // bean couldn't exist or couldn't be updated.
- // This is the reason why we should take a "not mature" connector facade proxy to ask for object classes.
- Set<ObjectClass> objectClasses = connFactory.createConnector(connInstance, conf).getSupportedObjectClasses();
-
- return CollectionUtils.collect(objectClasses, new Transformer<ObjectClass, String>() {
-
- @Override
- public String transform(final ObjectClass objectClass) {
- return objectClass.getObjectClassValue();
- }
- }, new ArrayList<String>());
+ return result;
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
@Transactional(readOnly = true)
public void check(final ConnInstanceTO connInstanceTO) {
- Connector connector = connFactory.createConnector(
- binder.getConnInstance(connInstanceTO), connInstanceTO.getConfiguration());
- connector.test();
+ connFactory.createConnector(binder.getConnInstance(connInstanceTO)).test();
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
@@ -274,7 +250,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
if (resource == null) {
throw new NotFoundException("Resource '" + resourceName + "'");
}
- return binder.getConnInstanceTO(connFactory.getConnector(resource).getActiveConnInstance());
+ return binder.getConnInstanceTO(connFactory.getConnector(resource).getConnInstance());
}
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_RELOAD + "')")
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index 44a5aa8..a6a2610 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -44,7 +44,6 @@ import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
import org.apache.syncope.core.provisioning.api.Connector;
@@ -54,10 +53,12 @@ import org.apache.syncope.core.misc.ConnObjectUtils;
import org.apache.syncope.core.misc.MappingUtils;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.ConnInstance;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.identityconnectors.framework.common.objects.Attribute;
@@ -85,6 +86,9 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
private AnyObjectDAO anyObjectDAO;
@Autowired
+ private ConnInstanceDAO connInstanceDAO;
+
+ @Autowired
private UserDAO userDAO;
@Autowired
@@ -245,7 +249,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
ConnectorObject connectorObject = connector.getObject(
init.getRight().getObjectClass(),
new Uid(connObjectKeyValue),
- connector.getOperationOptions(mapItems));
+ MappingUtils.buildOperationOptions(mapItems));
if (connectorObject == null) {
throw new NotFoundException(
"Object " + connObjectKeyValue + " with class " + init.getRight().getObjectClass()
@@ -303,10 +307,17 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
@PreAuthorize("hasRole('" + Entitlement.CONNECTOR_READ + "')")
@Transactional(readOnly = true)
public void check(final ResourceTO resourceTO) {
- ConnInstance connInstance = binder.getConnInstance(resourceTO);
- Connector connector = connFactory.createConnector(connInstance, connInstance.getConfiguration());
+ ConnInstance connInstance = connInstanceDAO.find(resourceTO.getConnector());
+ if (connInstance == null) {
+ throw new NotFoundException("Connector '" + resourceTO.getConnector() + "'");
+ }
- connector.test();
+ connFactory.createConnector(
+ connFactory.buildConnInstanceOverride(
+ connInstance,
+ resourceTO.getConfOverride(),
+ resourceTO.isOverrideCapabilities() ? resourceTO.getCapabilitiesOverride() : null)).
+ test();
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/misc/src/main/java/org/apache/syncope/core/misc/MappingUtils.java
----------------------------------------------------------------------
diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/MappingUtils.java b/core/misc/src/main/java/org/apache/syncope/core/misc/MappingUtils.java
index 54a4428..aed2ee6 100644
--- a/core/misc/src/main/java/org/apache/syncope/core/misc/MappingUtils.java
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/MappingUtils.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.misc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections4.ListUtils;
@@ -75,7 +76,10 @@ import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.AttributeUtil;
import org.identityconnectors.framework.common.objects.Name;
+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.Uid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -256,6 +260,34 @@ public class MappingUtils {
}
/**
+ * Build options for requesting all mapped connector attributes.
+ *
+ * @param mapItems mapping items
+ * @return options for requesting all mapped connector attributes
+ * @see OperationOptions
+ */
+ public static OperationOptions buildOperationOptions(final Iterator<? extends MappingItem> mapItems) {
+ 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();
+ }
+
+ /**
* Prepare attributes for sending to a connector instance.
*
* @param any given any object
@@ -796,5 +828,4 @@ public class MappingUtils {
default:
}
}
-
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
index eb665ea..2019e8e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
@@ -26,47 +26,44 @@ import org.apache.syncope.common.lib.types.ConnectorCapability;
public interface ConnInstance extends Entity<Long> {
- boolean addCapability(ConnectorCapability capabitily);
-
- boolean addResource(ExternalResource resource);
-
- String getBundleName();
-
- Set<ConnectorCapability> getCapabilities();
-
- Set<ConnConfProperty> getConfiguration();
-
- Integer getConnRequestTimeout();
+ void setConnectorName(String connectorName);
String getConnectorName();
+ void setDisplayName(String displayName);
+
String getDisplayName();
+ void setLocation(String location);
+
String getLocation();
+ void setPoolConf(ConnPoolConf poolConf);
+
ConnPoolConf getPoolConf();
- List<? extends ExternalResource> getResources();
+ void setVersion(String version);
String getVersion();
- boolean removeCapability(ConnectorCapability capabitily);
+ void setBundleName(String bundleName);
- boolean removeResource(ExternalResource resource);
+ String getBundleName();
- void setBundleName(String bundleName);
+ Set<ConnectorCapability> getCapabilities();
- void setConfiguration(Set<ConnConfProperty> configuration);
+ boolean add(ExternalResource resource);
- void setConnRequestTimeout(Integer timeout);
+ boolean remove(ExternalResource resource);
- void setConnectorName(String connectorName);
+ List<? extends ExternalResource> getResources();
- void setDisplayName(String displayName);
+ void setConf(Set<ConnConfProperty> conf);
- void setLocation(String location);
+ Set<ConnConfProperty> getConf();
- void setPoolConf(ConnPoolConf poolConf);
+ void setConnRequestTimeout(Integer timeout);
+
+ Integer getConnRequestTimeout();
- void setVersion(String version);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
index 26aa9a1..0cc3c04 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.resource;
import java.util.List;
import java.util.Set;
import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.common.lib.types.ConnectorCapability;
import org.apache.syncope.common.lib.types.TraceLevel;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity;
@@ -38,9 +39,15 @@ public interface ExternalResource extends AnnotatedEntity<String> {
void setConnector(ConnInstance connector);
- Set<ConnConfProperty> getConnInstanceConfiguration();
+ Set<ConnConfProperty> getConfOverride();
- void setConnInstanceConfiguration(Set<ConnConfProperty> properties);
+ void setConfOverride(Set<ConnConfProperty> confOverride);
+
+ boolean isOverrideCapabilities();
+
+ void setOverrideCapabilities(boolean overrideCapabilities);
+
+ Set<ConnectorCapability> getCapabilitiesOverride();
AccountPolicy getAccountPolicy();
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
index 054dd69..e31aaaa 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
@@ -99,8 +99,8 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
@Column(name = "capability")
@CollectionTable(name = "ConnInstance_capabilities",
joinColumns =
- @JoinColumn(name = "ConnInstance_id", referencedColumnName = "id"))
- private Set<ConnectorCapability> capabilities;
+ @JoinColumn(name = "connInstance_id", referencedColumnName = "id"))
+ private Set<ConnectorCapability> capabilities = new HashSet<>();
/**
* The main configuration for the connector instance. This is directly implemented by the Configuration bean class
@@ -118,7 +118,7 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
* External resources associated to the connector.
*/
@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "connector")
- private List<JPAExternalResource> resources;
+ private List<JPAExternalResource> resources = new ArrayList<>();
/**
* Connector request timeout. It is not applied in case of sync, full reconciliation and search.
@@ -128,13 +128,6 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
private JPAConnPoolConf poolConf;
- public JPAConnInstance() {
- super();
-
- capabilities = new HashSet<>();
- resources = new ArrayList<>();
- }
-
@Override
public Long getKey() {
return id;
@@ -181,7 +174,7 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
}
@Override
- public Set<ConnConfProperty> getConfiguration() {
+ public Set<ConnConfProperty> getConf() {
Set<ConnConfProperty> configuration = new HashSet<>();
if (!StringUtils.isBlank(jsonConf)) {
CollectionUtils.addAll(configuration, POJOHelper.deserialize(jsonConf, ConnConfProperty[].class));
@@ -191,8 +184,8 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
}
@Override
- public void setConfiguration(final Set<ConnConfProperty> configuration) {
- jsonConf = POJOHelper.serialize(new HashSet<>(configuration));
+ public void setConf(final Set<ConnConfProperty> conf) {
+ jsonConf = POJOHelper.serialize(new HashSet<>(conf));
}
@Override
@@ -211,29 +204,19 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
}
@Override
- public boolean addResource(final ExternalResource resource) {
+ public boolean add(final ExternalResource resource) {
checkType(resource, JPAExternalResource.class);
return this.resources.contains((JPAExternalResource) resource)
|| this.resources.add((JPAExternalResource) resource);
}
@Override
- public boolean removeResource(final ExternalResource resource) {
+ public boolean remove(final ExternalResource resource) {
checkType(resource, JPAExternalResource.class);
return this.resources.remove((JPAExternalResource) resource);
}
@Override
- public boolean addCapability(final ConnectorCapability capabitily) {
- return capabilities.add(capabitily);
- }
-
- @Override
- public boolean removeCapability(final ConnectorCapability capabitily) {
- return capabilities.remove(capabitily);
- }
-
- @Override
public Set<ConnectorCapability> getCapabilities() {
return capabilities;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
index de3931e..393338b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
@@ -44,6 +44,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.common.lib.types.ConnectorCapability;
import org.apache.syncope.common.lib.types.TraceLevel;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.ConnInstance;
@@ -153,6 +154,20 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
@Lob
private String jsonConf;
+ @NotNull
+ @Basic
+ @Min(0)
+ @Max(1)
+ private Integer overrideCapabilities;
+
+ @ElementCollection(fetch = FetchType.EAGER)
+ @Enumerated(EnumType.STRING)
+ @Column(name = "capabilityOverride")
+ @CollectionTable(name = "ExternalResource_capabilitiesOverride",
+ joinColumns =
+ @JoinColumn(name = "resource_name", referencedColumnName = "name"))
+ private Set<ConnectorCapability> capabilitiesOverride = new HashSet<>();
+
/**
* (Optional) classes for PropagationAction.
*/
@@ -163,9 +178,6 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
@JoinColumn(name = "resource_name", referencedColumnName = "name"))
private List<String> propagationActionsClassNames = new ArrayList<>();
- /**
- * Default constructor.
- */
public JPAExternalResource() {
super();
@@ -173,6 +185,7 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
propagationPrimary = 0;
propagationPriority = 0;
randomPwdIfNotProvided = 0;
+ overrideCapabilities = 0;
createTraceLevel = TraceLevel.FAILURES;
updateTraceLevel = TraceLevel.FAILURES;
@@ -357,18 +370,33 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
}
@Override
- public Set<ConnConfProperty> getConnInstanceConfiguration() {
- Set<ConnConfProperty> configuration = new HashSet<>();
+ public Set<ConnConfProperty> getConfOverride() {
+ Set<ConnConfProperty> confOverride = new HashSet<>();
if (!StringUtils.isBlank(jsonConf)) {
- CollectionUtils.addAll(configuration, POJOHelper.deserialize(jsonConf, ConnConfProperty[].class));
+ CollectionUtils.addAll(confOverride, POJOHelper.deserialize(jsonConf, ConnConfProperty[].class));
}
- return configuration;
+ return confOverride;
+ }
+
+ @Override
+ public void setConfOverride(final Set<ConnConfProperty> confOverride) {
+ jsonConf = POJOHelper.serialize(new HashSet<>(confOverride));
+ }
+
+ @Override
+ public boolean isOverrideCapabilities() {
+ return isBooleanAsInteger(overrideCapabilities);
+ }
+
+ @Override
+ public void setOverrideCapabilities(final boolean overrideCapabilities) {
+ this.overrideCapabilities = getBooleanAsInteger(overrideCapabilities);
}
@Override
- public void setConnInstanceConfiguration(final Set<ConnConfProperty> properties) {
- jsonConf = POJOHelper.serialize(new HashSet<>(properties));
+ public Set<ConnectorCapability> getCapabilitiesOverride() {
+ return capabilitiesOverride;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/1347c108/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java
index 91618d2..f0b892b 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java
@@ -18,10 +18,7 @@
*/
package org.apache.syncope.core.persistence.jpa;
-import java.util.Set;
-import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.provisioning.api.ConnectorRegistry;
import org.springframework.stereotype.Component;
@@ -30,15 +27,7 @@ import org.springframework.stereotype.Component;
public class DummyConnectorRegistry implements ConnectorRegistry {
@Override
- public ConnInstance getOverriddenConnInstance(
- final ConnInstance connInstance, final Set<ConnConfProperty> overridden) {
-
- return connInstance;
- }
-
- @Override
- public void registerConnector(final ExternalResource resource)
- throws NotFoundException {
+ public void registerConnector(final ExternalResource resource) throws NotFoundException {
}
@Override