Author: fmartelli Date: Wed Feb 13 18:41:32 2013 New Revision: 1445825 URL: http://svn.apache.org/r1445825 Log: SYNCOPE-307 merged from the branch 1_0_X
Modified: syncope/trunk/ (props changed) syncope/trunk/core/src/main/java/org/apache/syncope/core/connid/ConnObjectUtil.java syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java syncope/trunk/core/src/test/resources/content.xml Propchange: syncope/trunk/ ------------------------------------------------------------------------------ Merged /syncope/branches/1_0_X:r1445544-1445754 Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/connid/ConnObjectUtil.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/connid/ConnObjectUtil.java?rev=1445825&r1=1445824&r2=1445825&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/connid/ConnObjectUtil.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/connid/ConnObjectUtil.java Wed Feb 13 18:41:32 2013 @@ -474,59 +474,77 @@ public class ConnObjectUtil { final ConfigurableApplicationContext context = ApplicationContextProvider.getApplicationContext(); final ConnectorFactory connInstanceLoader = context.getBean(ConnectorFactory.class); - final IntMappingType type = owner instanceof SyncopeUser - ? IntMappingType.UserVirtualSchema : IntMappingType.RoleVirtualSchema; + final IntMappingType type = attrUtil.getType() == AttributableType.USER + ? IntMappingType.UserVirtualSchema : attrUtil.getType() == AttributableType.ROLE + ? IntMappingType.RoleVirtualSchema : IntMappingType.MembershipVirtualSchema; final Map<String, ConnectorObject> externalResources = new HashMap<String, ConnectorObject>(); // ----------------------- - // Retrieve virtual attribute values + // Retrieve virtual attribute values if and only if they have not been retrieved yet // ----------------------- for (AbstractVirAttr virAttr : owner.getVirtualAttributes()) { - final String schemaName = virAttr.getVirtualSchema().getName(); - final List<String> values = virAttrCache.get(attrUtil.getType(), owner.getId(), schemaName); - - LOG.debug("Retrieve values for virtual attribute {}", schemaName); + // reset value set + if (virAttr.getValues().isEmpty()) { + retrieveVirAttrValue(owner, virAttr, attrUtil, type, externalResources, connInstanceLoader); + } + } + // ----------------------- + } - if (values == null) { - // non cached ... - LOG.debug("Need one or more remote connections"); - for (ExternalResource resource : getTargetResource(virAttr, type, attrUtil)) { - LOG.debug("Seach values into {}", resource.getName()); - try { - final ConnectorObject connectorObject; - - if (externalResources.containsKey(resource.getName())) { - connectorObject = externalResources.get(resource.getName()); - } else { - LOG.debug("Perform connection to {}", resource.getName()); - final String accountId = attrUtil.getAccountIdItem(resource) == null - ? null - : MappingUtil.getAccountIdValue( - owner, resource, attrUtil.getAccountIdItem(resource)); + private void retrieveVirAttrValue( + final AbstractAttributable owner, + final AbstractVirAttr virAttr, + final AttributableUtil attrUtil, + final IntMappingType type, + final Map<String, ConnectorObject> externalResources, + final ConnectorFactory connInstanceLoader) { + + final String schemaName = virAttr.getVirtualSchema().getName(); + final List<String> values = virAttrCache.get(attrUtil.getType(), owner.getId(), schemaName); + + LOG.debug("Retrieve values for virtual attribute {} ({})", schemaName, type); + + if (values == null) { + // non cached ... + LOG.debug("Need one or more remote connections"); + for (ExternalResource resource : getTargetResource(virAttr, type, attrUtil)) { + LOG.debug("Seach values into {}", resource.getName()); + try { + final ConnectorObject connectorObject; + + if (externalResources.containsKey(resource.getName())) { + connectorObject = externalResources.get(resource.getName()); + } else { + LOG.debug("Perform connection to {}", resource.getName()); + final String accountId = attrUtil.getAccountIdItem(resource) == null + ? null + : MappingUtil.getAccountIdValue( + owner, resource, attrUtil.getAccountIdItem(resource)); - if (StringUtils.isBlank(accountId)) { - throw new IllegalArgumentException("No AccountId found for " + resource.getName()); - } + if (StringUtils.isBlank(accountId)) { + throw new IllegalArgumentException("No AccountId found for " + resource.getName()); + } - final Set<String> extAttrNames = new HashSet<String>(); + final Set<String> extAttrNames = new HashSet<String>(); - // retrieve all mapped virtual attribute values - for (AbstractMappingItem item : - MappingUtil.getMatchingMappingItems(attrUtil.getMappingItems(resource), type)) { - extAttrNames.add(item.getExtAttrName()); - } + // retrieve all mapped virtual attribute values + for (AbstractMappingItem item : + MappingUtil.getMatchingMappingItems(attrUtil.getMappingItems(resource), type)) { + extAttrNames.add(item.getExtAttrName()); + } - LOG.debug("External attribute ({}) names to get '{}'", type, extAttrNames); + LOG.debug("External attribute ({}) names to get '{}'", type, extAttrNames); - final OperationOptionsBuilder oob = new OperationOptionsBuilder(); - oob.setAttributesToGet(extAttrNames); + final OperationOptionsBuilder oob = new OperationOptionsBuilder(); + oob.setAttributesToGet(extAttrNames); - final SyncopeConnector connector = connInstanceLoader.getConnector(resource); - connectorObject = connector.getObject(ObjectClass.ACCOUNT, new Uid(accountId), oob.build()); - externalResources.put(resource.getName(), connectorObject); - } + final SyncopeConnector connector = connInstanceLoader.getConnector(resource); + connectorObject = connector.getObject(fromAttributable(owner), new Uid(accountId), oob.build()); + externalResources.put(resource.getName(), connectorObject); + } + if (connectorObject != null) { // ask for searched virtual attribute value final List<AbstractMappingItem> mappings = MappingUtil.getMatchingMappingItems( attrUtil.getMappingItems(resource), schemaName, type); @@ -543,21 +561,20 @@ public class ConnObjectUtil { } } } - - LOG.debug("Retrieved values {}", virAttr.getValues()); - } catch (Exception e) { - LOG.error("Error reading connector object from {}", resource.getName(), e); } + + LOG.debug("Retrieved values {}", virAttr.getValues()); + } catch (Exception e) { + LOG.error("Error reading connector object from {}", resource.getName(), e); } - - virAttrCache.put(attrUtil.getType(), owner.getId(), schemaName, virAttr.getValues()); - } else { - // cached ... - LOG.debug("Values found in cache {}", values); - virAttr.setValues(values); } + + virAttrCache.put(attrUtil.getType(), owner.getId(), schemaName, virAttr.getValues()); + } else { + // cached ... + LOG.debug("Values found in cache {}", values); + virAttr.setValues(values); } - // ----------------------- } private Set<ExternalResource> getTargetResource( Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java?rev=1445825&r1=1445824&r2=1445825&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java Wed Feb 13 18:41:32 2013 @@ -35,6 +35,7 @@ import org.apache.syncope.core.connid.Co import org.apache.syncope.core.connid.PasswordGenerator; import org.apache.syncope.core.persistence.beans.AbstractAttributable; import org.apache.syncope.core.persistence.beans.AbstractMappingItem; +import org.apache.syncope.core.persistence.beans.AbstractVirAttr; import org.apache.syncope.core.persistence.beans.ExternalResource; import org.apache.syncope.core.persistence.beans.PropagationTask; import org.apache.syncope.core.persistence.beans.role.SyncopeRole; @@ -523,16 +524,20 @@ public class PropagationManager { final List<PropagationTask> tasks = new ArrayList<PropagationTask>(); + boolean virAttrRerieved = false; + for (ResourceOperation operation : ResourceOperation.values()) { for (String resourceName : propByRes.get(operation)) { final ExternalResource resource = resourceDAO.find(resourceName); if (resource == null) { LOG.error("Invalid resource name specified: {}, ignoring...", resourceName); } else { + AttributableUtil attrUtil = AttributableUtil.getInstance(subject); + PropagationTask task = new PropagationTask(); task.setResource(resource); task.setObjectClassName(connObjectUtil.fromAttributable(subject).getObjectClassValue()); - task.setSubjectType(AttributableUtil.getInstance(subject).getType()); + task.setSubjectType(attrUtil.getType()); if (!deleteOnResource) { task.setSubjectId(subject.getId()); } @@ -540,6 +545,23 @@ public class PropagationManager { task.setPropagationMode(resource.getPropagationMode()); task.setOldAccountId(propByRes.getOldAccountId(resource.getName())); + if (operation == ResourceOperation.CREATE && !virAttrRerieved + && vAttrsToBeRemoved != null && vAttrsToBeUpdated != null) { + connObjectUtil.retrieveVirAttrValues(subject, attrUtil); + virAttrRerieved = true; + + // update vAttrsToBeUpdated as well + for (AbstractVirAttr virAttr : subject.getVirtualAttributes()) { + final String schema = virAttr.getVirtualSchema().getName(); + + final AttributeMod attributeMod = new AttributeMod(); + attributeMod.setSchema(schema); + attributeMod.setValuesToBeAdded(virAttr.getValues()); + + vAttrsToBeUpdated.put(schema, attributeMod); + } + } + Map.Entry<String, Set<Attribute>> preparedAttrs = prepareAttributes(subject, password, vAttrsToBeRemoved, vAttrsToBeUpdated, enable, resource); task.setAccountId(preparedAttrs.getKey()); Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java?rev=1445825&r1=1445824&r2=1445825&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java Wed Feb 13 18:41:32 2013 @@ -69,7 +69,7 @@ public class TaskTest extends AbstractDA assertEquals(1, sclist.size()); List<SyncTask> sylist = taskDAO.findAll(SyncTask.class); - assertEquals(5, sylist.size()); + assertEquals(6, sylist.size()); } @Test Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1445825&r1=1445824&r2=1445825&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Wed Feb 13 18:41:32 2013 @@ -61,6 +61,7 @@ import org.apache.syncope.core.sync.impl import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.client.HttpStatusCodeException; @@ -789,11 +790,11 @@ public class TaskTestITCase extends Abst // Add a custom correlation rule // ----------------------------- SyncPolicyTO policyTO = policyService.read(PolicyType.SYNC, 9L); - ((SyncPolicySpec)policyTO.getSpecification()).setUserJavaRule(TestSyncRule.class.getName()); - + ((SyncPolicySpec) policyTO.getSpecification()).setUserJavaRule(TestSyncRule.class.getName()); + policyService.update(PolicyType.SYNC, policyTO.getId(), policyTO); // ----------------------------- - + SyncTaskTO task = new SyncTaskTO(); task.setName("Test Sync Rule"); task.setResource("ws-target-resource-2"); @@ -836,6 +837,52 @@ public class TaskTestITCase extends Abst executed.getExecutions().get(0).getMessage().contains("[updated/failures]: 1/0")); } + @Test + public void issueSYNCOPE307() { + UserTO userTO = UserTestITCase.getUniqueSampleTO("s...@apache.org"); + + AttributeTO csvuserid = new AttributeTO(); + csvuserid.setSchema("csvuserid"); + userTO.addDerivedAttribute(csvuserid); + + userTO.getResources().clear(); + userTO.addResource("ws-target-resource-2"); + userTO.addResource("resource-csv"); + + userTO = createUser(userTO); + assertNotNull(userTO); + + userTO = userService.read(userTO.getId()); + assertEquals("virtualvalue", userTO.getVirtualAttributeMap().get("virtualdata").getValues().get(0)); + + // Update sync task + SyncTaskTO task = taskService.read(TaskType.SYNCHRONIZATION, 12L); + assertNotNull(task); + + // add user template + UserTO template = new UserTO(); + template.addResource("resource-db-virattr"); + + task.setUserTemplate(template); + + taskService.update(task.getId(), task); + execSyncTask(task.getId(), 50, false); + + // check for sync policy + userTO = userService.read(userTO.getId()); + assertEquals("virtualvalue", userTO.getVirtualAttributeMap().get("virtualdata").getValues().get(0)); + + try { + final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource); + + String value = jdbcTemplate.queryForObject( + "SELECT USERNAME FROM testsync WHERE ID=?", String.class, userTO.getId()); + assertEquals("virtualvalue", value); + } catch (EmptyResultDataAccessException e) { + assertTrue(false); + } + } + /** * remove initial and synchronized users to make test re-runnable */ Modified: syncope/trunk/core/src/test/resources/content.xml URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1445825&r1=1445824&r2=1445825&view=diff ============================================================================== --- syncope/trunk/core/src/test/resources/content.xml (original) +++ syncope/trunk/core/src/test/resources/content.xml Wed Feb 13 18:41:32 2013 @@ -331,14 +331,14 @@ under the License. connectorName="org.connid.bundles.db.table.DatabaseTableConnector" displayName="H2-testsync" version="${connid.db.table.version}" xmlConfiguration="%3Cset%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Edatasource%3C%2Fname%3E%0A++++++%3CdisplayName%3EDatasource+Path%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BJDBC+Data+Source+Name%2FPath%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+JDBC+Data+Source+Name%2FPath+to+connect+to+the+Oracle+server.+If+specified%2C+connector+will+only+try+to+connect+using+Datasource+and+ignore+other+resource+parameters+specified.%26lt%3Bbr%26gt%3Bthe+example+value+is%3A+%26lt%3BCODE%26gt%3Bjdbc%2FSampleDataSourceName%26lt%3B%2FCODE%26gt%3B%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E22%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E %0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EjdbcDriver%3C%2Fname%3E%0A++++++%3CdisplayName%3EJDBC+Driver%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BJDBC+Driver%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BSpecify+the+JDBC+Driver+class+name.+Oracle+is+oracle.jdbc.driver.OracleDriver.+MySQL+is+org.gjt.mm.mysql.Driver.%26lt%3Bbr%26gt%3BCould+be+empty+if+datasource+is+provided.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E14%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Eorg.h2.Driver%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EvalidConnectionQuery%3C%2Fn ame%3E%0A++++++%3CdisplayName%3EValidate+Connection+Query%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BValidate+Connection+Query%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BThere+can+be+specified+the+check+connection+alive+query.+If+empty%2C+default+implementation+will+test+it+using+the+switch+on%2Foff+the+autocommit.+Some+select+1+from+dummy+table+could+be+more+efficient.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E20%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EenabledStatusValue%3C%2Fname%3E%0A++++++%3CdisplayName%3EEnabled+Status+Value%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BEnabled+St atus+Value%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+value+for+enabled+status.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E12%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EpwdEncodeToUpperCase%3C%2Fname%3E%0A++++++%3CdisplayName%3EForce+password+encoding+to+upper+case%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3EForce+password+encoding+to+upper+case.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E25%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring %3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3ErethrowAllSQLExceptions%3C%2Fname%3E%0A++++++%3CdisplayName%3ERethrow+all+SQLExceptions%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3EIf+this+is+not+checked%2C+SQL+statements+which+throw+SQLExceptions+with+a+0+ErrorCode+will+be+have+the+exception+caught+and+suppressed.+Check+it+to+have+exceptions+with+0+ErrorCodes+rethrown.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E17%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.synco pe.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EchangeLogColumn%3C%2Fname%3E%0A++++++%3CdisplayName%3EChange+Log+Column+%28Sync%29%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%3D%26lt%3Bb%26gt%3BChange+Log+Column%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BThe+change+log+column+store+the+latest+change+time.+Providing+this+value+the+Sync+capabilities+are+activated.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E21%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EenableEmptyString%3C%2Fname%3E%0A++++++%3CdisplayName%3EEnable+writing+empty+string%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BEnab le+writing+empty+string%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BSelect+to+enable+support+for+writing+an+empty+strings%2C+instead+of+a+NULL+value%2C+in+character+based+columns+defined+as+not-null+in+the+table+schema.+This+option+does+not+influence+the+way+strings+are+written+for+Oracle+based+tables.+By+default+empty+strings+are+written+as+a+NULL+value.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E16%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EallNative%3C%2Fname%3E%0A++++++%3CdisplayName%3EAll+native%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BAll+native%26 lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BSelect+to+retrieve+all+data+type+of+the+columns+in+a+native+format+from+the+database+table.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E19%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Edatabase%3C%2Fname%3E%0A++++++%3CdisplayName%3EDatabase%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BDatabase%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+database+on+the+database+server+that+contains+the+table.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A ++++++%3Corder%3E6%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EdisabledStatusValue%3C%2Fname%3E%0A++++++%3CdisplayName%3EDisabled+Status+Value%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BDisabled+Status+Value%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+value+for+disabled+status.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E11%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3 E%0A++++%3Cschema%3E%0A++++++%3Cname%3EpasswordColumn%3C%2Fname%3E%0A++++++%3CdisplayName%3EPassword+Column%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BPassword+Column%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+column+in+the+table+that+will+hold+the+password+values.+If+empty%2C+no+validation+on+resource+and+passwords+are+activated.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E9%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EjdbcUrlTemplate%3C%2Fname%3E%0A++++++%3CdisplayName%3EJDBC+Connection+URL%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BJDBC+Connection+URL%26lt%3B%2Fb%2 6gt%3B%26lt%3Bbr%26gt%3BSpecify+the+JDBC+Driver+Connection+URL.%26lt%3Bbr%26gt%3B+Oracle+template+is+jdbc%3Aoracle%3Athin%3A%40%5Bhost%5D%3A%5Bport%281521%29%5D%3A%5BDB%5D.%26lt%3Bbr%26gt%3B++MySQL+template+is+jdbc%3Amysql%3A%2F%2F%5Bhost%5D%3A%5Bport%283306%29%5D%2F%5Bdb%5D%2C+for+more+info%2C+read+the+JDBC+driver+documentation.%26lt%3Bbr%26gt%3BCould+be+empty+if+datasource+is+provided.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E15%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Ejdbc%3Ah2%3Atcp%3A%2F%2Flocalhost%3A9092%2Ftestdb%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Eport%3C%2Fname%3E%0A++++++%3CdisplayName% 3EPort%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BTCP+Port%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+port+number+the+database+server+is+listening+on.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E3%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EkeyColumn%3C%2Fname%3E%0A++++++%3CdisplayName%3EKey+Column%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BKey+Column%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BThis+mandatory+column+value+will+be+used+as+the+unique+identifier+for+rows+in+the+table.%26lt%3Bbr%26gt%3B%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired %3Etrue%3C%2Frequired%3E%0A++++++%3Corder%3E8%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Eid%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EnativeTimestamps%3C%2Fname%3E%0A++++++%3CdisplayName%3ENative+Timestamps+%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BNative+Timestamps%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BSelect+to+retrieve+Timestamp+data+type+of+the+columns+in+java.sql.Timestamp+format+from+the+database+table.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E18%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstri ng%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EstatusColumn%3C%2Fname%3E%0A++++++%3CdisplayName%3EStatus+Column%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BStatus+Column%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+column+in+the+table+that+will+hold+the+status+values.+If+empty+enabled+and+disabled+operation+wont+be+performed.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E10%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++ ++%3Cname%3Euser%3C%2Fname%3E%0A++++++%3CdisplayName%3EUser%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BUser%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+mandatory+Database+user+with+permission+to+account+table.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E4%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Esa%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Epassword%3C%2Fname%3E%0A++++++%3CdisplayName%3EUser+Password%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BUser+Password%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+a+user+account+that+has+permission+to+access+accounts+ta ble.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eorg.identityconnectors.common.security.GuardedString%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E5%3C%2Forder%3E%0A++++++%3Cconfidential%3Etrue%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Esa%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Equoting%3C%2Fname%3E%0A++++++%3CdisplayName%3EName+Quoting%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BName+Quoting%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BSelect+whether+database+column+names+for+this+resource+should+be+quoted%2C+and+the+quoting+characters.+By+default%2C+database+column+names+are+not+quoted+%28None%29.+For+other+selections+%28Single%2C+Double%2C+Back%2C+or+Brackets%29%2C+column+names+will+appear+between+ single+quotes%2C+double+quotes%2C+back+quotes%2C+or+brackets+in+the+SQL+generated+to+access+the+database.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E1%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EcipherAlgorithm%3C%2Fname%3E%0A++++++%3CdisplayName%3EPassword+cipher+algorithm+%28defaults+to+CLEARTEXT%29%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3ECipher+algorithm+used+to+encode+password+before+to+store+it+onto+the+database+table.%0ASpecify+one+of+the+values+among+CLEARTEXT%2CAES%2C+MD5%2C+SHA1%2C+SHA256+or+a+custom+implementation+identified+by+its+class+name.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ft ype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E24%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EpwdEncodeToLowerCase%3C%2Fname%3E%0A++++++%3CdisplayName%3EForce+password+encoding+to+lower+case%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3EForce+password+encoding+to+lower+case.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E26%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Co rg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EcipherKey%3C%2Fname%3E%0A++++++%3CdisplayName%3EPassword+cipher+key%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3ESpecify+key+in+case+of+reversible+algorithm.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E25%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EdefaultStatusValue%3C%2Fname%3E%0A++++++%3CdisplayName%3EDefault+Status+Value%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BDefault+Status+Value%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+value+for+status+in+case+of+status+not+specified.%3C%2FhelpMessage%3E%0A++++++%3Ct ype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E13%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Etable%3C%2Fname%3E%0A++++++%3CdisplayName%3ETable%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BTable%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+table+in+the+database+that+contains+the+accounts.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Etrue%3C%2Frequired%3E%0A++++++%3Corder%3E7%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Etestsync%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2F overridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EjndiProperties%3C%2Fname%3E%0A++++++%3CdisplayName%3EInitial+JNDI+Properties%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BInitial+JNDI+Properties%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BCould+be+empty+or+enter+the+JDBC+JNDI+Initial+context+factory%2C+context+provider+in+a+format%3A+key+%3D+value.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3E%5BLjava.lang.String%3B%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E23%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3EretrievePassword%3C%2Fname%3E%0A++++++%3Cdis playName%3ERetrieve+password%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3ESpecify+if+password+must+be+retrieved+by+default.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Eboolean%3C%2Ftype%3E%0A++++++%3Crequired%3Etrue%3C%2Frequired%3E%0A++++++%3Corder%3E27%3C%2Forder%3E%0A++++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%3E%0A++++++%3Cstring%3Efalse%3C%2Fstring%3E%0A++++%3C%2Fvalues%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A++%3Corg.apache.syncope.common.types.ConnConfProperty%3E%0A++++%3Cschema%3E%0A++++++%3Cname%3Ehost%3C%2Fname%3E%0A++++++%3CdisplayName%3EHost%3C%2FdisplayName%3E%0A++++++%3ChelpMessage%3E%26lt%3Bb%26gt%3BHost%26lt%3B%2Fb%26gt%3B%26lt%3Bbr%26gt%3BEnter+the+name+of+the+host+where+the+database+is+running.%3C%2FhelpMessage%3E%0A++++++%3Ctype%3Ejava.lang.String%3C%2Ftype%3E%0A++++++%3Crequired%3Efalse%3C%2Frequired%3E%0A++++++%3Corder%3E2%3C%2Forder%3E%0A++ ++++%3Cconfidential%3Efalse%3C%2Fconfidential%3E%0A++++%3C%2Fschema%3E%0A++++%3Cvalues%2F%3E%0A++++%3Coverridable%3Efalse%3C%2Foverridable%3E%0A++%3C%2Forg.apache.syncope.common.types.ConnConfProperty%3E%0A%3C%2Fset%3E"/> + <ConnInstance_capabilities ConnInstance_id="107" capabilities="ONE_PHASE_CREATE"/> + <ConnInstance_capabilities ConnInstance_id="107" capabilities="TWO_PHASES_CREATE"/> <ConnInstance_capabilities ConnInstance_id="107" capabilities="ONE_PHASE_UPDATE"/> + <ConnInstance_capabilities ConnInstance_id="107" capabilities="TWO_PHASES_UPDATE"/> <ConnInstance_capabilities ConnInstance_id="107" capabilities="ONE_PHASE_DELETE"/> - <ConnInstance_capabilities ConnInstance_id="107" capabilities="TWO_PHASES_CREATE"/> - <ConnInstance_capabilities ConnInstance_id="107" capabilities="SEARCH"/> <ConnInstance_capabilities ConnInstance_id="107" capabilities="TWO_PHASES_DELETE"/> - <ConnInstance_capabilities ConnInstance_id="107" capabilities="ONE_PHASE_CREATE"/> - <ConnInstance_capabilities ConnInstance_id="107" capabilities="TWO_PHASES_UPDATE"/> - + <ConnInstance_capabilities ConnInstance_id="107" capabilities="SEARCH"/> + <ExternalResource name="ws-target-resource-1" connector_id="100" randomPwdIfNotProvided="0" enforceMandatoryCondition="0" propagationMode="TWO_PHASES" propagationPriority="0" propagationPrimary="1" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL"/> @@ -655,6 +655,9 @@ under the License. fullReconciliation="1" performCreate="1" performDelete="1" performUpdate="1" syncStatus="0" actionsClassName="org.apache.syncope.core.sync.impl.LDAPMembershipSyncActions" jobClassName="org.apache.syncope.core.sync.impl.SyncJob"/> + <Task DTYPE="SyncTask" id="12" name="VirAttrCache test" resource_name="resource-csv" + performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" fullReconciliation="1" + jobClassName="org.apache.syncope.core.sync.impl.SyncJob"/> <NotificationTask_recipients notificationtask_id="8" address="recipi...@prova.org"/>