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/05/04 17:58:33 UTC

[1/5] syncope git commit: Merge branch '1_2_X' of https://git-wip-us.apache.org/repos/asf/syncope into 1_2_X

Repository: syncope
Updated Branches:
  refs/heads/1_2_X b97eb56e4 -> b81cea711
  refs/heads/master c910a7a66 -> 496a02a51


Merge branch '1_2_X' of https://git-wip-us.apache.org/repos/asf/syncope into 1_2_X


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b97eb56e
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b97eb56e
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b97eb56e

Branch: refs/heads/master
Commit: b97eb56e4dff32c077b1bfe2181b93dff5fa5d3f
Parents: dda37dc d5f3410
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Thu Apr 30 18:05:52 2015 +0200
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Thu Apr 30 18:05:52 2015 +0200

----------------------------------------------------------------------
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[4/5] syncope git commit: [SYNCOPE-664] Merge from 1_2_X

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/496a02a5/core/persistence-jpa/src/test/resources/content.xml
----------------------------------------------------------------------
diff --cc core/persistence-jpa/src/test/resources/content.xml
index 8ac9007,0000000..7436f45
mode 100644,000000..100644
--- a/core/persistence-jpa/src/test/resources/content.xml
+++ b/core/persistence-jpa/src/test/resources/content.xml
@@@ -1,1052 -1,0 +1,1054 @@@
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!--
 +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.
 +-->
 +<dataset>
 +  <SyncopeConf id="1" 
 +               creator="admin" lastModifier="admin"
 +               creationDate="2014-06-20 11:00:00" lastChangeDate="2014-06-20 11:00:00"/>
 +
 +  <CPlainSchema name="password.cipher.algorithm" type="String"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/>
 +  <CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
 +
 +  <!-- notificationjob.cronExpression:
 +  + not existing: NotificationJob runs according to Notification.DEFAULT_CRON_EXP
 +  + provided as empty string: NotificationJob disabled
 +  + provided as non-empty string: NotificationJob runs according to the given value -->
 +  <CPlainSchema name="notificationjob.cronExpression" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
- 
++  <CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
++  <CPlainAttrValue id="2" attribute_id="2" stringValue=""/>
++  
 +  <CPlainSchema name="notification.maxRetries" type="Long"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>
 +  <CPlainAttrValue id="3" attribute_id="3" longValue="3"/>
 +
 +  <CPlainSchema name="token.length" type="Long"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="4" owner_id="1" schema_name="token.length"/>
 +  <CPlainAttrValue id="4" attribute_id="4" longValue="256"/>
 +
 +  <CPlainSchema name="token.expireTime" type="Long"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="5" owner_id="1" schema_name="token.expireTime"/>
 +  <CPlainAttrValue id="5" attribute_id="5" longValue="60"/>
 +
 +  <CPlainSchema name="selfRegistration.allowed" type="Boolean"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/>
 +  <CPlainAttrValue id="6" attribute_id="6" booleanValue="1"/>
 +
 +  <CPlainSchema name="passwordReset.allowed" type="Boolean"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/>
 +  <CPlainAttrValue id="7" attribute_id="7" booleanValue="1"/>
 +
 +  <CPlainSchema name="passwordReset.securityQuestion" type="Boolean"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
 +  <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
 +
 +  <CPlainSchema name="authentication.statuses" type="String"
 +                mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
 +  <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
 +  <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>
 +
 +  <!-- Save user login date upon successful authentication -->
 +  <CPlainSchema name="log.lastlogindate" type="Boolean"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <CPlainAttr id="11" owner_id="1" schema_name="log.lastlogindate"/>
 +  <CPlainAttrValue id="11" attribute_id="11" booleanValue="1"/>
 +
 +  <!-- For usage with admin console -->
 +  <CPlainSchema name="admin.user.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainSchema name="self.user.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainSchema name="admin.group.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainSchema name="self.group.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainSchema name="admin.membership.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  <CPlainSchema name="self.membership.layout" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +  
 +  <!-- sample policies -->
 +  <Policy DTYPE="SyncPolicy" id="1" description="a sync policy" type="SYNC" 
 +          specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"groupAltSearchSchemas":[]}'/>
 +  <Policy DTYPE="PasswordPolicy" id="2" description="a password policy" type="PASSWORD" 
 +          specification='{"historyLength":1,"maxLength":0,"minLength":8,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":false,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[],"allowNullPassword":true}'/>
 +  <Policy DTYPE="SyncPolicy" id="3" description="sync policy 2" type="SYNC" 
 +          specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"ALL","userAltSearchSchemas":["username","firstname"],"groupAltSearchSchemas":[]}'/>
 +  <Policy DTYPE="PasswordPolicy" id="4" description="sample password policy" type="PASSWORD" 
 +          specification='{"historyLength":0,"maxLength":0,"minLength":10,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[], "allowNullPassword":true}'/>
 +  <Policy DTYPE="AccountPolicy" id="5" description="an account policy" type="ACCOUNT" 
 +          specification='{"maxLength":0,"minLength":0,"pattern":null,"allUpperCase":false,"allLowerCase":false,"propagateSuspension":false,"maxAuthenticationAttempts":0,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":[],"suffixesNotPermitted":[]}'/>
 +  <Policy DTYPE="AccountPolicy" id="6" description="sample account policy" type="ACCOUNT" 
 +          specification='{"maxLength":0,"minLength":4,"pattern":null,"allUpperCase":false,"allLowerCase":false,"propagateSuspension":false,"maxAuthenticationAttempts":3,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
 +  <Policy DTYPE="SyncPolicy" id="7" description="sync policy 1" type="SYNC" 
 +          specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"groupAltSearchSchemas":[]}'/>
 +  <Policy DTYPE="PasswordPolicy" id="8" description="sample password policy" type="PASSWORD" 
 +          specification='{"historyLength":0,"maxLength":0,"minLength":10,"nonAlphanumericRequired":true,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":true,"uppercaseRequired":true,"mustStartWithDigit":true,"mustntStartWithDigit":false,"mustEndWithDigit":true,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[],"allowNullPassword":false}'/>
 +  <Policy DTYPE="SyncPolicy" id="9" description="sync policy for java rule" type="SYNC" 
 +          specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"groupAltSearchSchemas":[]}'/>
 +    
 +  <Realm id="1" name="/" passwordPolicy_id="4"/>
 +  <Realm id="2" name="odd" parent_id="1" accountPolicy_id="6"/>
 +  <Realm id="3" name="even" parent_id="1"/>
 +  <Realm id="4" name="two" parent_id="3" accountPolicy_id="5" passwordPolicy_id="2"/>
 +  
 +  <SyncopeRole id="1" name="User reviewer"/>
 +  <SyncopeRole_entitlements entitlement="USER_READ" role_id="1"/>
 +  <SyncopeRole_entitlements entitlement="USER_LIST" role_id="1"/>
 +  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="1"/>
 +  <SyncopeRole_Realm role_id="1" realm_id="2"/>
 +  <SyncopeRole_Realm role_id="1" realm_id="3"/>
 +  
 +  <SyncopeRole id="2" name="User manager"/>
 +  <SyncopeRole_entitlements entitlement="USER_READ" role_id="2"/>
 +  <SyncopeRole_entitlements entitlement="USER_LIST" role_id="2"/>
 +  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="2"/>
 +  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="2"/>
 +  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_id="2"/>
 +  <SyncopeRole_Realm role_id="2" realm_id="1"/>
 +
 +  <SyncopeRole id="3" name="Other"/>
 +  <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_id="3"/>
 +  <SyncopeRole_entitlements entitlement="GROUP_READ" role_id="3"/>
 +  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="3"/>
 +  <SyncopeRole_Realm role_id="3" realm_id="2"/>
 +  
 +  <SyncopeUser id="1" workflowId="4" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
 +               realm_id="1"
 +               username="rossini" creator="admin" lastModifier="admin"
 +               creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
 +  <SyncopeUser_SyncopeRole user_id="1" role_id="3"/>
 +  <SyncopeUser id="2" workflowId="6" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
 +               realm_id="1"
 +               username="verdi" creator="admin" lastModifier="admin"
 +               creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
 +  <SyncopeUser_SyncopeRole user_id="2" role_id="1"/>
 +  <SyncopeUser id="3" workflowId="8" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
 +               realm_id="1"
 +               username="vivaldi" creator="admin" lastModifier="admin"
 +               creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
 +  <SyncopeUser id="4" workflowId="10" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
 +               realm_id="1"
 +               username="bellini" creator="admin" lastModifier="admin"
 +               creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
 +  <SyncopeUser_SyncopeRole user_id="4" role_id="2"/>
 +  <SyncopeUser id="5" workflowId="12" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
 +               realm_id="1"
 +               username="puccini" creator="admin" lastModifier="admin" 
 +               creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
 +  
 +  <SyncopeGroup id="1" name="root"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="2" name="child"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="3" name="citizen"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="4" name="employee"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="5" name="secretary"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="6" name="director" userOwner_id="5"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="7" name="managingDirector"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="8" name="otherchild"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="9" name="groupForWorkflowApproval"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="10" name="managingConsultant"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="11" name="groupForWorkflowOptIn"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="12" name="aGroupForPropagation"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="13" name="bGroupForPropagation"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <SyncopeGroup id="14" name="artDirector"
 +                realm_id="1"
 +                creator="admin" lastModifier="admin" 
 +                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +
 +  <Membership id="1" user_id="1" group_id="1"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="2" user_id="2" group_id="1"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="3" user_id="2" group_id="2"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="4" user_id="4" group_id="7"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="5" user_id="1" group_id="8"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="6" user_id="2" group_id="3"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +  <Membership id="7" user_id="5" group_id="14"
 +              creator="admin" lastModifier="admin" 
 +              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +
 +  <UPlainSchema name="fullname" type="String"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"/>
 +  <UPlainSchema name="userId" type="String"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"
 +                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
 +  <UPlainSchema name="loginDate" type="Date"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"
 +                conversionPattern="yyyy-MM-dd"/>
 +  <UPlainSchema name="firstname" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="surname" type="String"
 +                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="type" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="email" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
 +  <UPlainSchema name="activationDate" type="Date"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
 +  <UPlainSchema name="uselessReadonly" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="1"/>
 +  <UPlainSchema name="cool" type="Boolean"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="gender" type="Enum"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                enumerationValues="M;F"/>
 +  <UPlainSchema name="aLong" type="Long"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="makeItDouble" type="Long"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <UPlainSchema name="obscure" type="Encrypted"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                secretKey="7abcdefghilmnopqrstuvz9#" cipherAlgorithm="SHA"/>
 +  <UPlainSchema name="photo" type="Binary"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                mimeType="image/jpeg"/>
 +
 +  <UDerSchema name="csvuserid" expression="firstname + ',' + surname"/>
 +  <UDerSchema name="cn" expression="surname + ', ' + firstname"/>
 +  <UDerSchema name="noschema" expression="surname + ', ' + notfound"/>
 +
 +  <UVirSchema name="virtualdata"/>
 +
 +  <GPlainSchema name="icon" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>                
 +  <GPlainSchema name="show" type="Boolean"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <GPlainSchema name="rderived_sx" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <GPlainSchema name="rderived_dx" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>           
 +  <GPlainSchema name="title" type="String"
 +                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 +
 +  <GDerSchema name="rderiveddata" expression="rderived_sx + '-' + rderived_dx"/>
 +  <GDerSchema name="displayProperty" expression="icon + ': ' + show"/>
 +  <GDerSchema name="rderToBePropagated" expression="rderived_sx + '-' + rderived_dx"/>
 +
 +  <GVirSchema name="rvirtualdata"/>
 +
 +  <!-- rderiveddata is used to verify der schema deletion -->
 +  <GDerSchema name="rderivedschema" expression="rderived_sx + '-' + rderived_dx"/>
 +
 +  <MPlainSchema name="subscriptionDate" type="Date"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
 +                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
 +  <MPlainSchema name="mderived_sx" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +  <MPlainSchema name="mderived_dx" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>          
 +  <MPlainSchema name="postalAddress" type="String"
 +                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 +
 +  <MDerSchema name="mderiveddata" expression="mderived_sx + '-' + mderived_dx"/>
 +  <MDerSchema name="mderToBePropagated" expression="mderived_sx + '-' + mderived_dx"/>
 +
 +  <MVirSchema name="mvirtualdata"/>
 +  
 +  <UPlainAttr id="99" owner_id="1" schema_name="type"/>
 +  <UPlainAttrValue id="9" attribute_id="99" stringValue="G"/>
 +  <UPlainAttr id="100" owner_id="1" schema_name="fullname"/>
 +  <UPlainAttrUniqueValue id="10" attribute_id="100" schema_name="fullname" stringValue="Gioacchino Rossini"/>
 +  <UPlainAttr id="101" owner_id="1" schema_name="firstname"/>
 +  <UPlainAttrValue id="11" attribute_id="101" stringValue="Gioacchino"/>
 +  <UPlainAttr id="102" owner_id="1" schema_name="surname"/>
 +  <UPlainAttrValue id="12" attribute_id="102" stringValue="Rossini"/>
 +  <UPlainAttr id="103" owner_id="1" schema_name="userId"/>
 +  <UPlainAttrUniqueValue id="13" attribute_id="103" schema_name="userId" stringValue="rossini@apache.org"/>
 +  <UPlainAttr id="104" owner_id="1" schema_name="loginDate"/>
 +  <UPlainAttrValue id="14" attribute_id="104" dateValue="2009-05-26"/>
 +  <UPlainAttrValue id="15" attribute_id="104" dateValue="2010-05-26 15:40:04"/>
 +
 +  <UPlainAttr id="105" owner_id="2" schema_name="fullname"/>
 +  <UPlainAttrUniqueValue id="16" attribute_id="105" schema_name="fullname" stringValue="Giuseppe Verdi"/>
 +  <UPlainAttr id="106" owner_id="2" schema_name="firstname"/>
 +  <UPlainAttrValue id="17" attribute_id="106" stringValue="Giuseppe"/>
 +  <UPlainAttr id="107" owner_id="2" schema_name="surname"/>
 +  <UPlainAttrValue id="18" attribute_id="107" stringValue="Verdi"/>
 +  <UPlainAttr id="108" owner_id="2" schema_name="userId"/>
 +  <UPlainAttrUniqueValue id="19" attribute_id="108" schema_name="userId" stringValue="verdi@apache.org"/>
 +
 +  <UPlainAttr id="109" owner_id="3" schema_name="firstname"/>
 +  <UPlainAttrValue id="20" attribute_id="109" stringValue="Antonio"/>
 +  <UPlainAttr id="110" owner_id="3" schema_name="surname"/>
 +  <UPlainAttrValue id="21" attribute_id="110" stringValue="Vivaldi"/>
 +  <UPlainAttr id="111" owner_id="3" schema_name="fullname"/>
 +  <UPlainAttrUniqueValue id="22" attribute_id="111" schema_name="fullname" stringValue="Antonio Vivaldi"/>
 +  <UPlainAttr id="112" owner_id="3" schema_name="userId"/>
 +  <UPlainAttrUniqueValue id="23" attribute_id="112" schema_name="userId" stringValue="vivaldi@apache.org"/>
 +
 +  <UPlainAttr id="113" owner_id="4" schema_name="firstname"/>
 +  <UPlainAttrValue id="24" attribute_id="113" stringValue="Vincenzo"/>
 +  <UPlainAttr id="114" owner_id="4" schema_name="surname"/>
 +  <UPlainAttrValue id="25" attribute_id="114" stringValue="Bellini"/>
 +  <UPlainAttr id="115" owner_id="4" schema_name="fullname"/>
 +  <UPlainAttrUniqueValue id="26" attribute_id="115" schema_name="fullname" stringValue="Vincenzo Bellini"/>
 +  <UPlainAttr id="116" owner_id="4" schema_name="userId"/>
 +  <UPlainAttrUniqueValue id="27" attribute_id="116" schema_name="userId" stringValue="bellini@apache.org"/>
 +  <UPlainAttr id="117" owner_id="4" schema_name="loginDate"/>
 +  <UPlainAttrValue id="28" attribute_id="117" dateValue="2009-06-24"/>
 +  <UPlainAttr id="118" owner_id="4" schema_name="cool"/>
 +  <UPlainAttrValue id="29" attribute_id="118" booleanValue="1"/>
 +  <UPlainAttr id="119" owner_id="4" schema_name="gender"/>
 +  <UPlainAttrValue id="30" attribute_id="119" stringValue="M"/>
 +  
 +  <UPlainAttr id="120" owner_id="5" schema_name="firstname"/>
 +  <UPlainAttrValue id="31" attribute_id="120" stringValue="Giacomo"/>
 +  <UPlainAttr id="121" owner_id="5" schema_name="surname"/>
 +  <UPlainAttrValue id="32" attribute_id="121" stringValue="Puccini"/>
 +  <UPlainAttr id="122" owner_id="5" schema_name="fullname"/>
 +  <UPlainAttrUniqueValue id="33" attribute_id="122" schema_name="fullname" stringValue="Giacomo Puccini"/>
 +  <UPlainAttr id="123" owner_id="5" schema_name="userId"/>
 +  <UPlainAttrUniqueValue id="34" attribute_id="123" schema_name="userId" stringValue="puccini@apache.org"/>
 +  
 +  <UPlainAttr id="124" owner_id="2" schema_name="email"/>
 +  <UPlainAttrValue id="35" attribute_id="124" stringValue="verdi@syncope.org"/>
 +  <UPlainAttr id="125" owner_id="3" schema_name="email"/>
 +  <UPlainAttrValue id="36" attribute_id="125" stringValue="vivaldi@syncope.org"/>
 +  <UPlainAttr id="126" owner_id="3" schema_name="type"/>
 +  <UPlainAttrValue id="37" attribute_id="126" stringValue="F"/>
 +    
 +  <UVirAttr id="1000" virSchema_name="virtualdata" owner_id="3"/>
 +
 +  <UVirSchema name="virtualReadOnly" READONLY="1"/>
 +  
 +  <UDerAttr id="100" derSchema_name="cn" owner_id="3"/>
 +  <UDerAttr id="101" derSchema_name="cn" owner_id="1"/>
 +
 +  <GPlainAttrTemplate id="600" owner_id="1" schema_name="icon"/>
 +  <GPlainAttr id="600" owner_id="1" template_id="600"/>
 +  <GPlainAttrValue attribute_id="600" id="40" stringValue="niceIcon"/>
 +
 +  <GPlainAttrTemplate id="700" owner_id="2" schema_name="icon"/>
 +  <GPlainAttr id="700" owner_id="2" template_id="700"/>
 +  <GPlainAttrValue attribute_id="700" id="41" stringValue="badIcon"/>
 +
 +  <GPlainAttrTemplate id="800" owner_id="1" schema_name="show"/>
 +  <GPlainAttr id="800" owner_id="1" template_id="800"/>
 +  <GPlainAttrValue attribute_id="800" id="42" booleanValue="1"/>
 +
 +  <GPlainAttrTemplate id="900" owner_id="6" schema_name="icon"/>
 +  <GPlainAttr id="900" owner_id="6" template_id="900"/>
 +  <GPlainAttrValue attribute_id="900" id="43" stringValue="icon6"/>
 +
 +  <GPlainAttrTemplate id="950" owner_id="4" schema_name="icon"/>
 +  <GPlainAttr id="950" owner_id="4" template_id="950"/>
 +  <GPlainAttrValue attribute_id="950" id="44" stringValue="icon4"/>
 +
 +  <GPlainAttrTemplate id="992" owner_id="1" schema_name="rderived_sx"/>
 +  <GPlainAttr id="992" owner_id="1" template_id="992"/>
 +  <GPlainAttrValue attribute_id="992" id="92" stringValue="sx"/>
 +
 +  <GPlainAttrTemplate id="993" owner_id="1" schema_name="rderived_dx"/>
 +  <GPlainAttr id="993" owner_id="1" template_id="993"/>
 +  <GPlainAttrValue attribute_id="993" id="93" stringValue="dx"/>
 +
 +  <GPlainAttrTemplate id="994" owner_id="12" schema_name="title"/>
 +  <GPlainAttr id="994" owner_id="12" template_id="994"/>
 +  <GPlainAttrValue attribute_id="994" id="94" stringValue="r12"/>
 +  
 +  <GPlainAttrTemplate id="995" owner_id="13" schema_name="title"/>
 +  <GPlainAttr id="995" owner_id="13" template_id="995"/>
 +  <GPlainAttrValue attribute_id="995" id="95" stringValue="r13"/>
 +
 +  <GDerAttrTemplate id="1000" owner_id="1" schema_name="rderiveddata"/>
 +  <GDerAttr id="1000" owner_id="1" template_id="1000"/>
 +    
 +  <GDerAttrTemplate id="1001" owner_id="1" schema_name="displayProperty"/>
 +  <GDerAttr id="1001" owner_id="1" template_id="1001"/>
 +  
 +  <GDerAttrTemplate id="1002" owner_id="4" schema_name="displayProperty"/>
 +  <GDerAttr id="1002" owner_id="4" template_id="1002"/>
 +
 +  <GDerAttrTemplate id="1003" owner_id="1" schema_name="rderToBePropagated"/>    
 +  <GDerAttr id="1003" owner_id="1" template_id="1003"/>    
 +
 +  <GVirAttrTemplate id="98" owner_id="4" schema_name="rvirtualdata"/>
 +  <GVirAttr id="98" owner_id="4" template_id="98"/>
 +
 +  <GVirAttrTemplate id="99" owner_id="3" schema_name="rvirtualdata"/>
 +
 +  <MPlainAttrTemplate id="98" owner_id="1" schema_name="mderived_sx"/>
 +  
 +  <MPlainAttrTemplate id="99" owner_id="1" schema_name="mderived_dx"/>
 +
 +  <MPlainAttrTemplate id="100" owner_id="7" schema_name="subscriptionDate"/>
 +  <MPlainAttr id="100" owner_id="4" template_id="100"/>
 +  <MPlainAttrValue attribute_id="100" id="90" dateValue="2009-05-26"/>
 +  <MPlainAttrValue attribute_id="100" id="91" dateValue="2010-05-26 15:40:04"/>
 +
 +  <MPlainAttrTemplate id="101" owner_id="8" schema_name="subscriptionDate"/>
 +
 +  <MPlainAttrTemplate id="102" owner_id="1" schema_name="mderived_sx"/>
 +  <MPlainAttr id="102" owner_id="1" template_id="102"/>
 +  <MPlainAttrValue attribute_id="102" id="92" stringValue="sx"/>
 +
 +  <MPlainAttrTemplate id="103" owner_id="1" schema_name="mderived_dx"/>
 +  <MPlainAttr id="103" owner_id="1" template_id="103"/>
 +  <MPlainAttrValue attribute_id="103" id="93" stringValue="dx"/>
 +
 +  <MPlainAttrTemplate id="104" owner_id="12" schema_name="postalAddress"/>
 +
 +  <MDerAttrTemplate id="99" owner_id="1" schema_name="mderiveddata"/>
 +  <MDerAttr id="99" owner_id="1" template_id="99"/>
 +  
 +  <MDerAttrTemplate id="100" owner_id="1" schema_name="mderToBePropagated"/>  
 +    
 +  <MVirAttrTemplate id="99" owner_id="2" schema_name="mvirtualdata"/>
 +
 +  <ConnInstance id="100" displayName="ConnInstance100"
 +                location="${connid.location}"
 +                bundleName="net.tirasa.connid.bundles.soap"
 +                connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
 +                version="${connid.soap.version}"
 +                jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="TWO_PHASES_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="TWO_PHASES_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="TWO_PHASES_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="100" capability="SEARCH"/>
 +
 +  <ConnInstance id="101" displayName="H2"
 +                location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
 +                bundleName="net.tirasa.connid.bundles.db.table"
 +                connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
 +                version="${connid.db.table.version}"
 +                jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id"]},{"schema":{"name":"retrievePassword","displayName":null,"helpMessage":null,"type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"cipherAlgorithm","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultVal
 ues":null},"overridable":false,"values":["SHA1"]},{"schema":{"name":"enabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"passwordColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"jdbcDriver","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["org.h2.Driver"]},{"schema":{"name":"defaultStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"table","displayName":null,"helpMessage":null,"type":"java.lang.String","require
 d":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test"]},{"schema":{"name":"password","displayName":null,"helpMessage":null,"type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"statusColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"jdbcUrlTemplate","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${testdb.url}"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="AUTHENTICATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="TWO_PHASES_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="TWO_PHASES_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="TWO_PHASES_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="SEARCH"/>
 +  <ConnInstance_capabilities ConnInstance_id="101" capability="SYNC"/>
 +
 +  <ConnInstance id="102" displayName="ConnInstance102"
 +                location="${connid.location}"
 +                bundleName="net.tirasa.connid.bundles.soap"
 +                connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
 +                version="${connid.soap.version}"
 +                connRequestTimeout="10"
 +                jsonConf='[{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]},{"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}/wssample/services/provisioning"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="TWO_PHASES_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="TWO_PHASES_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="TWO_PHASES_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="102" capability="SEARCH"/>
 +
 +  <ConnInstance id="103" displayName="ConnInstance103"
 +                location="${connid.location}"
 +                bundleName="net.tirasa.connid.bundles.soap"
 +                connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
 +                version="${connid.soap.version}"
 +                jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
 +
 +  <ConnInstance id="104" displayName="CSVDir"
 +                location="${connid.location}"
 +                bundleName="net.tirasa.connid.bundles.csvdir"
 +                connectorName="net.tirasa.connid.bundles.csvdir.CSVDirConnector"
 +                version="${connid.csvdir.version}"
 +                jsonConf='[{"schema":{"name":"fields","displayName":"fields","helpMessage":"Column names separated by comma","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id","name","surname","email","password","theirgroup","membership","status","deleted"]},{"schema":{"name":"keyColumnNames","displayName":"Key column name","helpMessage":"Name of the column used to identify user uniquely","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["name","surname"]},{"schema":{"name":"deleteColumnName","displayName":"Delete column name","helpMessage":"Name of the column used to specify users to be deleted","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["deleted"]},{"schema":{"name":"passwordColumnName","displayName":"Password column name","helpMessage":"Nam
 e of the column used to specify user password","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"keyseparator","displayName":"Key separator","helpMessage":"Character used to separate keys in a multi-key scenario","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"ignoreHeader","displayName":"Ignore header","helpMessage":"Specify it first line file must be ignored","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"fieldDelimiter","displayName":"fieldDelimiter","helpMessage":"fieldDelimiter","type":"char","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"quotationRequired","displayName":"Value quotation requ
 ired","helpMessage":"Specify if value quotation is required","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"statusColumn","displayName":"statusColumn","helpMessage":"Status column","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"sourcePath","displayName":"Source path","helpMessage":"Absolute path of a directory where are located CSV files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${test.csvdir.path}"]},{"schema":{"name":"fileMask","displayName":"File mask","helpMessage":"Regular expression describing files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test.csv"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="TWO_PHASES_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="TWO_PHASES_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="TWO_PHASES_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="SEARCH"/>
 +  <ConnInstance_capabilities ConnInstance_id="104" capability="SYNC"/>
 +    
 +  <ConnInstance id="105" bundleName="net.tirasa.connid.bundles.ldap" displayName="ApacheDS"
 +                location="${connid.location}"
 +                connectorName="net.tirasa.connid.bundles.ldap.LdapConnector"
 +                version="${connid.ldap.version}" 
 +                jsonConf='[{"schema":{"name":"synchronizePasswords","displayName":"Enable Password Synchronization","helpMessage":"If true, the connector will synchronize passwords. The Password Capture Plugin needs to be installed for password synchronization to work.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"maintainLdapGroupMembership","displayName":"Maintain LDAP Group Membership","helpMessage":"When enabled and a user is renamed or deleted, update any LDAP groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"host","displayName":"Host","helpMessage":"The name or IP address of the host where the LDAP server is running.","type":"ja
 va.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["localhost"]},{"schema":{"name":"passwordHashAlgorithm","displayName":"Password Hash Algorithm","helpMessage":"Indicates the algorithm that the Identity system should use to hash the password. Currently supported values are SSHA, SHA, SSHA1, and SHA1. A blank value indicates that the system will not hash passwords. This will cause cleartext passwords to be stored in LDAP unless the LDAP server performs the hash (Netscape Directory Server and iPlanet Directory Server do).","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["SHA"]},{"schema":{"name":"blockSize","displayName":"Block Size","helpMessage":"The maximum number of accounts that can be in a block when retrieving accounts in blocks.","type":"int","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"val
 ues":[]},{"schema":{"name":"useBlocks","displayName":"Use Blocks","helpMessage":"When performing operations on large numbers of accounts, the accounts are processed in blocks to reduce the amount of memory used by the operation. Select this option to process accounts in blocks.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"usePagedResultControl","displayName":"Use Paged Result Control","helpMessage":"When enabled, the LDAP Paged Results control is preferred over the VLV control when retrieving accounts.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"port","displayName":"TCP Port","helpMessage":"TCP/IP port number used to communicate with the LDAP server.","type":"int","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[1389]},{"schema":{"na
 me":"vlvSortAttribute","displayName":"VLV Sort Attribute","helpMessage":"Specify the sort attribute to use for VLV indexes on the resource.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"statusManagementClass","displayName":"Status management class ","helpMessage":"Class to be used to manage enabled/disabled status. If no class is specified then identity status management wont be possible.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.ldap.commons.AttributeStatusManagement"]},{"schema":{"name":"accountObjectClasses","displayName":"Account Object Classes","helpMessage":"The object class or classes that will be used when creating new user objects in the LDAP tree. When entering more than one object class, each entry should be on its own line; do not use commas or semi-colons to 
 separate multiple object classes. Some object classes may require that you specify all object classes in the class hierarchy.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["inetOrgPerson"]},{"schema":{"name":"accountUserNameAttributes","displayName":"Account User Name Attributes","helpMessage":"Attribute or attributes which holds the account user name. They will be used when authenticating to find the LDAP entry for the user name to authenticate.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid"]},{"schema":{"name":"baseContextsToSynchronize","displayName":"Base Contexts to Synchronize","helpMessage":"One or more starting points in the LDAP tree that will be used to determine if a change should be synchronized. The base contexts attribute will be used to synchronize a change if this property is not set.","type":"[Lj
 ava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"accountSynchronizationFilter","displayName":"LDAP Filter for Accounts to Synchronize","helpMessage":"An optional LDAP filter for the objects to synchronize. Because the change log is for all objects, this filter updates only objects that match the specified filter. If you specify a filter, an object will be synchronized only if it matches the filter and includes a synchronized object class.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"removeLogEntryObjectClassFromFilter","displayName":"Remove Log Entry Object Class from Filter","helpMessage":"If this property is set (the default), the filter used to fetch change log entries does not contain the \"changeLogEntry\" object class, expecting that there are no entr
 ies of other object types in the change log.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordDecryptionKey","displayName":"Password Decryption Key","helpMessage":"The key to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"readSchema","displayName":"Read Schema","helpMessage":"If true, the connector will read the schema from the server. If false, the connector will provide a default schema based on the object classes in the configuration. This property must be true in order to use extended object classes.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"ssl","displayName":"SSL","he
 lpMessage":"Select the check box to connect to the LDAP server using SSL.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordAttributeToSynchronize","displayName":"Password Attribute to Synchronize","helpMessage":"The name of the password attribute to synchronize when performing password synchronization.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"accountSearchFilter","displayName":"LDAP Filter for Retrieving Accounts","helpMessage":"An optional LDAP filter to control which accounts are returned from the LDAP resource. If no filter is specified, only accounts that include all specified object classes are returned.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=*"]},{"schema":{"name":"passwordDe
 cryptionInitializationVector","displayName":"Password Decryption Initialization Vector","helpMessage":"The initialization vector to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupMemberAttribute","displayName":"Group Member Attribute","helpMessage":"The name of the group attribute that will be updated with the distinguished name of the user when the user is added to the group.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"failover","displayName":"Failover Servers","helpMessage":"List all servers that should be used for failover in case the preferred server fails. If the preferred server fails, JNDI will connect to the next available server in the list. List all servers in th
 e form of \"ldap://ldap.example.com:389/\", which follows the standard LDAP v3 URLs described in RFC 2255. Only the host and port parts of the URL are relevant in this setting.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"modifiersNamesToFilterOut","displayName":"Filter Out Changes By","helpMessage":"The names (DNs) of directory administrators to filter from the changes. Changes with the attribute \"modifiersName\" that match entries in this list will be filtered out. The standard value is the administrator name used by this adapter, to prevent loops. Entries should be of the format \"cn=Directory Manager\".","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupNameAttributes","displayName":"Group Name Attributes","helpMessage":"Attribute or attributes which holds the group na
 me.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"uidAttribute","displayName":"Uid Attribute","helpMessage":"The name of the LDAP attribute which is mapped to the Uid attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"respectResourcePasswordPolicyChangeAfterReset","displayName":"Respect Resource Password Policy Change-After-Reset","helpMessage":"When this resource is specified in a Login Module (i.e., this resource is a pass-through authentication target) and the resource password policy is configured for change-after-reset, a user whose resource account password has been administratively reset will be required to change that password after successfully authenticating.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overrid
 able":false,"values":["false"]},{"schema":{"name":"filterWithOrInsteadOfAnd","displayName":"Filter with Or Instead of And","helpMessage":"Normally the the filter used to fetch change log entries is an and-based filter retrieving an interval of change entries. If this property is set, the filter will or together the required change numbers instead.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"principal","displayName":"Principal","helpMessage":"The distinguished name with which to authenticate to the LDAP server.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=admin,ou=system"]},{"schema":{"name":"changeLogBlockSize","displayName":"Change Log Block Size","helpMessage":"The number of change log entries to fetch per query.","type":"int","required":true,"order":0,"confidential":false,"defaultValues":null}
 ,"overridable":false,"values":[100]},{"schema":{"name":"baseContexts","displayName":"Base Contexts","helpMessage":"One or more starting points in the LDAP tree that will be used when searching the tree. Searches are performed when discovering users from the LDAP server or when looking for the groups of which a user is a member.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"passwordAttribute","displayName":"Password Attribute","helpMessage":"The name of the LDAP attribute which holds the password. When changing an user password, the new password is set to this attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["userpassword"]},{"schema":{"name":"changeNumberAttribute","displayName":"Change Number Attribute","helpMessage":"The name of the change number attribut
 e in the change log entry.","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["changeNumber"]},{"schema":{"name":"objectClassesToSynchronize","displayName":"Object Classes to Synchronize","helpMessage":"The object classes to synchronize. The change log is for all objects; this filters updates to just the listed object classes. You should not list the superclasses of an object class unless you intend to synchronize objects with any of the superclass values. For example, if only \"inetOrgPerson\" objects should be synchronized, but the superclasses of \"inetOrgPerson\" (\"person\", \"organizationalperson\" and \"top\") should be filtered out, then list only \"inetOrgPerson\" here. All objects in LDAP are subclassed from \"top\". For this reason, you should never list \"top\", otherwise no object would be filtered.","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null}
 ,"overridable":false,"values":["inetOrgPerson","groupOfUniqueNames"]},{"schema":{"name":"credentials","displayName":"Password","helpMessage":"Password for the principal.","type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["secret"]},{"schema":{"name":"attributesToSynchronize","displayName":"Attributes to Synchronize","helpMessage":"The names of the attributes to synchronize. This ignores updates from the change log if they do not update any of the named attributes. For example, if only \"department\" is listed, then only changes that affect \"department\" will be processed. All other updates are ignored. If blank (the default), then all changes are processed.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"maintainPosixGroupMembership","displayName":"Maintain POSIX Group 
 Membership","helpMessage":"When enabled and a user is renamed or deleted, update any POSIX groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["truemaintainLdapGroupMembership"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="105" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="105" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="105" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="105" capability="SEARCH"/>
 +  
 +  <ConnInstance id="106" displayName="H2-test2"
 +                location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
 +                bundleName="net.tirasa.connid.bundles.db.table"
 +                connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
 +                version="${connid.db.table.version}"
 +                jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id"]},{"schema":{"name":"cipherAlgorithm","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["SHA1"]},{"schema":{"name":"enabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,
 "defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"passwordColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"jdbcDriver","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["org.h2.Driver"]},{"schema":{"name":"retrievePassword","displayName":null,"helpMessage":null,"type":"java.lang.Boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"defaultStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"password","displayName":null,"helpMessage":null,"type":"org.identityc
 onnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"statusColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"jdbcUrlTemplate","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${testdb.url}"]},{"schema":{"name":"table","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test2"]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="106" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="106" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="106" capability="SEARCH"/>
 +  <ConnInstance_capabilities ConnInstance_id="106" capability="SYNC"/>
 +  
 +  <ConnInstance id="107" bundleName="net.tirasa.connid.bundles.db.table" 
 +                location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
 +                connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector" 
 +                displayName="H2-testsync" version="${connid.db.table.version}"
 +                jsonConf='[{"schema":{"name":"changeLogColumn","displayName":"Change Log Column (Sync)","helpMessage":"=&lt;b&gt;Change Log Column&lt;/b&gt;&lt;br&gt;The change log column store the latest change time. Providing this value the Sync capabilities are activated.","type":"java.lang.String","required":false,"order":21,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"nativeTimestamps","displayName":"Native Timestamps ","helpMessage":"&lt;b&gt;Native Timestamps&lt;/b&gt;&lt;br&gt;Select to retrieve Timestamp data type of the columns in java.sql.Timestamp format from the database table.","type":"boolean","required":false,"order":18,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"cipherAlgorithm","displayName":"Password cipher algorithm (defaults to CLEARTEXT)","helpMessage":"Cipher algorithm used to encode password before to store it onto the database table.\nSpecify one of t
 he values among CLEARTEXT,AES, MD5, SHA1, SHA256 or a custom implementation identified by its class name.","type":"java.lang.String","required":false,"order":24,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"enabledStatusValue","displayName":"Enabled Status Value","helpMessage":"&lt;b&gt;Enabled Status Value&lt;/b&gt;&lt;br&gt;Enter the value for enabled status.","type":"java.lang.String","required":false,"order":12,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"retrievePassword","displayName":"Retrieve password","helpMessage":"Specify if password must be retrieved by default.","type":"boolean","required":true,"order":27,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"datasource","displayName":"Datasource Path","helpMessage":"&lt;b&gt;JDBC Data Source Name/Path&lt;/b&gt;&lt;br&gt;Enter the JDBC Data Source Name/Path to connect to the O
 racle server. If specified, connector will only try to connect using Datasource and ignore other resource parameters specified.&lt;br&gt;the example value is: &lt;CODE&gt;jdbc/SampleDataSourceName&lt;/CODE&gt;","type":"java.lang.String","required":false,"order":22,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"allNative","displayName":"All native","helpMessage":"&lt;b&gt;All native&lt;/b&gt;&lt;br&gt;Select to retrieve all data type of the columns in a native format from the database table.","type":"boolean","required":false,"order":19,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":"User","helpMessage":"&lt;b&gt;User&lt;/b&gt;&lt;br&gt;Enter the name of the mandatory Database user with permission to account table.","type":"java.lang.String","required":false,"order":4,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name
 ":"pwdEncodeToLowerCase","displayName":"Force password encoding to lower case","helpMessage":"Force password encoding to lower case.","type":"boolean","required":false,"order":26,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"jdbcUrlTemplate","displayName":"JDBC Connection URL","helpMessage":"&lt;b&gt;JDBC Connection URL&lt;/b&gt;&lt;br&gt;Specify the JDBC Driver Connection URL.&lt;br&gt; Oracle template is jdbc:oracle:thin:@[host]:[port(1521)]:[DB].&lt;br&gt;  MySQL template is jdbc:mysql://[host]:[port(3306)]/[db], for more info, read the JDBC driver documentation.&lt;br&gt;Could be empty if datasource is provided.","type":"java.lang.String","required":false,"order":15,"confidential":false,"defaultValues":null},"overridable":false,"values":["${testdb.url}"]},{"schema":{"name":"keyColumn","displayName":"Key Column","helpMessage":"&lt;b&gt;Key Column&lt;/b&gt;&lt;br&gt;This mandatory column value will be used as the unique ident
 ifier for rows in the table.&lt;br&gt;","type":"java.lang.String","required":true,"order":8,"confidential":false,"defaultValues":null},"overridable":false,"values":["id"]},{"schema":{"name":"validConnectionQuery","displayName":"Validate Connection Query","helpMessage":"&lt;b&gt;Validate Connection Query&lt;/b&gt;&lt;br&gt;There can be specified the check connection alive query. If empty, default implementation will test it using the switch on/off the autocommit. Some select 1 from dummy table could be more efficient.","type":"java.lang.String","required":false,"order":20,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"rethrowAllSQLExceptions","displayName":"Rethrow all SQLExceptions","helpMessage":"If this is not checked, 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.","type":"boolean","required":false,"order":17,"confi
 dential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordColumn","displayName":"Password Column","helpMessage":"&lt;b&gt;Password Column&lt;/b&gt;&lt;br&gt;Enter the name of the column in the table that will hold the password values. If empty, no validation on resource and passwords are activated.","type":"java.lang.String","required":false,"order":9,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"jndiProperties","displayName":"Initial JNDI Properties","helpMessage":"&lt;b&gt;Initial JNDI Properties&lt;/b&gt;&lt;br&gt;Could be empty or enter the JDBC JNDI Initial context factory, context provider in a format: key = value.","type":"[Ljava.lang.String;","required":false,"order":23,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"password","displayName":"User Password","helpMessage":"&lt;b&gt;User Password&lt;/b&gt;&lt;br&gt;Enter a user account th
 at has permission to access accounts table.","type":"org.identityconnectors.common.security.GuardedString","required":false,"order":5,"confidential":true,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"host","displayName":"Host","helpMessage":"&lt;b&gt;Host&lt;/b&gt;&lt;br&gt;Enter the name of the host where the database is running.","type":"java.lang.String","required":false,"order":2,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"port","displayName":"Port","helpMessage":"&lt;b&gt;TCP Port&lt;/b&gt;&lt;br&gt;Enter the port number the database server is listening on.","type":"java.lang.String","required":false,"order":3,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"statusColumn","displayName":"Status Column","helpMessage":"&lt;b&gt;Status Column&lt;/b&gt;&lt;br&gt;Enter the name of the column in the table that will hold the status values. If empty enabled an
 d disabled operation wont be performed.","type":"java.lang.String","required":false,"order":10,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"pwdEncodeToUpperCase","displayName":"Force password encoding to upper case","helpMessage":"Force password encoding to upper case.","type":"boolean","required":false,"order":25,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"enableEmptyString","displayName":"Enable writing empty string","helpMessage":"&lt;b&gt;Enable writing empty string&lt;/b&gt;&lt;br&gt;Select to enable support for writing an empty strings, instead of a NULL value, 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.","type":"boolean","required":false,"order":16,"confidential":false,"defaultValues":null},"overridable":false,
 "values":["false"]},{"schema":{"name":"database","displayName":"Database","helpMessage":"&lt;b&gt;Database&lt;/b&gt;&lt;br&gt;Enter the name of the database on the database server that contains the table.","type":"java.lang.String","required":false,"order":6,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"defaultStatusValue","displayName":"Default Status Value","helpMessage":"&lt;b&gt;Default Status Value&lt;/b&gt;&lt;br&gt;Enter the value for status in case of status not specified.","type":"java.lang.String","required":false,"order":13,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"table","displayName":"Table","helpMessage":"&lt;b&gt;Table&lt;/b&gt;&lt;br&gt;Enter the name of the table in the database that contains the accounts.","type":"java.lang.String","required":true,"order":7,"confidential":false,"defaultValues":null},"overridable":false,"values":["testsync"]},{"schema":{"name":"disa
 bledStatusValue","displayName":"Disabled Status Value","helpMessage":"&lt;b&gt;Disabled Status Value&lt;/b&gt;&lt;br&gt;Enter the value for disabled status.","type":"java.lang.String","required":false,"order":11,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"jdbcDriver","displayName":"JDBC Driver","helpMessage":"&lt;b&gt;JDBC Driver&lt;/b&gt;&lt;br&gt;Specify the JDBC Driver class name. Oracle is oracle.jdbc.driver.OracleDriver. MySQL is org.gjt.mm.mysql.Driver.&lt;br&gt;Could be empty if datasource is provided.","type":"java.lang.String","required":false,"order":14,"confidential":false,"defaultValues":null},"overridable":false,"values":["org.h2.Driver"]},{"schema":{"name":"quoting","displayName":"Name Quoting","helpMessage":"&lt;b&gt;Name Quoting&lt;/b&gt;&lt;br&gt;Select whether database column names for this resource should be quoted, and the quoting characters. By default, database column names are not quoted (None). For other sele
 ctions (Single, Double, Back, or Brackets), column names will appear between single quotes, double quotes, back quotes, or brackets in the SQL generated to access the database.","type":"java.lang.String","required":false,"order":1,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"cipherKey","displayName":"Password cipher key","helpMessage":"Specify key in case of reversible algorithm.","type":"java.lang.String","required":false,"order":25,"confidential":false,"defaultValues":null},"overridable":false,"values":[]}]'/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="ONE_PHASE_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="TWO_PHASES_CREATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="ONE_PHASE_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="TWO_PHASES_UPDATE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="ONE_PHASE_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="TWO_PHASES_DELETE"/>
 +  <ConnInstance_capabilities ConnInstance_id="107" capability="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"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="ONE_PHASE"
 +                    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" propagationMode="ONE_PHASE"
 +                    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" propagationMode="ONE_PHASE" 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"/>
 +  <ExternalResource name="ws-target-resource-update-resetsynctoken" connector_id="100" enforceMandatoryCondition="1" propagationMode="TWO_PHASES"
 +                    randomPwdIfNotProvided="0" propagationPriority="0" propagationPrimary="0" createTraceLevel="ALL" deleteTraceLevel="ALL" updateTraceLevel="ALL" syncTraceLevel="ALL"
 +                    userializedSyncToken='{"value":null}'
 +                    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" propagationMode="ONE_PHASE"
 +                    propagationPriority="0" propagationPrimary="1"
 +                    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_PropActions externalResource_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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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" propagationMode="TWO_PHASES"
 +                    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"/>
 +                    
 +  <!-- External resource for issue SYNCOPE-230 -->
 +  <ExternalResource name="resource-db-sync" connector_id="107"
 +                    randomPwdIfNotProvided="0" createTraceLevel="ALL" deleteTraceLevel="ALL" syncTraceLevel="ALL" updateTraceLevel="ALL"
 +                    enforceMandatoryCondition="0" 
 +                    propagationMode="TWO_PHASES" propagationPrimary="0" propagationPriority="0"
 +                    creator="admin" lastModifier="admin" 
 +                    creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +                    
 +  <!-- External resource for issue SYNCOPE-267 -->
 +  <ExternalResource name="resource-db-virattr" connector_id="107"
 +                    randomPwdIfNotProvided="0" createTraceLevel="ALL" deleteTraceLevel="ALL" syncTraceLevel="ALL" updateTraceLevel="ALL"
 +                    enforceMandatoryCondition="0" 
 +                    propagationMode="TWO_PHASES" propagationPrimary="0" propagationPriority="0"
 +                    creator="admin" lastModifier="admin" 
 +                    creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
 +
 +  <!-- Use resource-testdb for passthrough authentication (SYNCOPE-164) -->
 +  <Policy_ExternalResource account_policy_id="5" resource_name="resource-testdb"/>
 +    
 +  <SyncopeUser_ExternalResource user_id="1" resource_name="resource-testdb2"/>
 +  <SyncopeUser_ExternalResource user_id="3" resource_name="ws-target-resource-delete"/>
 +  <SyncopeUser_ExternalResource user_id="3" resource_name="ws-target-resource-2"/>
 +  <SyncopeUser_ExternalResource user_id="3" resource_name="ws-target-resource-1"/>
 +  <SyncopeUser_ExternalResource user_id="5" resource_name="resource-testdb2"/>
 +  <SyncopeGroup_ExternalResource group_id="3" resource_name="ws-target-resource-list-mappings-1"/>
 +  <SyncopeGroup_ExternalResource group_id="8" resource_name="ws-target-resource-2"/>
 +  <SyncopeGroup_ExternalResource group_id="3" resource_name="ws-target-resource-list-mappings-2"/>
 +  <SyncopeGroup_ExternalResource group_id="7" resource_name="ws-target-resource-nopropagation"/>
 +  <SyncopeGroup_ExternalResource group_id="10" resource_name="ws-target-resource-nopropagation3"/>
 +  <SyncopeGroup_ExternalResource group_id="12" resource_name="resource-csv"/>
 +  <SyncopeGroup_ExternalResource group_id="13" resource_name="resource-csv"/>
 +
 +  <UMapping id="15" resource_name="ws-target-resource-1"/>
 +  <UMappingItem id="99" mapping_id="15" extAttrName="userId"
 +                intMappingType="UserId" mandatoryCondition="true"
 +                accountid="1" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="100" extAttrName="email" mapping_id="15"
 +                intAttrName="email" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="101" extAttrName="surname" mapping_id="15"
 +                intAttrName="surname" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="102" mapping_id="15"
 +                extAttrName="__PASSWORD__" intMappingType="Password" mandatoryCondition="true"
 +                accountid="0" password="1" purpose="PROPAGATION"/>
 +  <UMappingItem id="335" mapping_id="15" 
 +                extAttrName="fullname" intAttrName="surname" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="336" mapping_id="15"
 +                extAttrName="type" intAttrName="type" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="337" mapping_id="15"
 +                extAttrName="name" intAttrName="firstname" intMappingType="UserPlainSchema" mandatoryCondition="false"
 +                accountid="0" password="0" purpose="NONE"/>
 +  
 +  <UMapping id="12" resource_name="ws-target-resource-list-mappings-1"/>
 +  <UMappingItem id="103" mapping_id="12"
 +                extAttrName="email" intAttrName="email" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="1" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="104" extAttrName="surname" mapping_id="12"
 +                intAttrName="surname" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +
 +  <UMapping id="13" resource_name="ws-target-resource-list-mappings-2"/>
 +  <UMappingItem id="105" mapping_id="13"
 +                extAttrName="userId" intAttrName="userId" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="1" password="0" purpose="PROPAGATION"/>
 +
 +  <UMapping id="1" resource_name="ws-target-resource-2"/>
 +  <UMappingItem id="106" mapping_id="1" extAttrName="fullname"
 +                intAttrName="fullname" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="1" password="0" purpose="BOTH"/>
 +  <UMappingItem id="107" mapping_id="1"
 +                extAttrName="__PASSWORD__" intMappingType="Password" mandatoryCondition="true"
 +                accountid="0" password="1" purpose="BOTH"/>
 +  <UMappingItem id="108" extAttrName="type" mapping_id="1"
 +                intAttrName="type" intMappingType="UserPlainSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="BOTH"/>
 +  <UMappingItem id="109" extAttrName="surname" mapping_id="1"
 +                intAttrName="surname" intMappingType="UserPlainSchema" mandatoryCondition="type == 'F'"
 +                accountid="0" password="0" purpose="BOTH"/>
 +  <UMappingItem id="110" extAttrName="name" mapping_id="1"
 +                intAttrName="virtualdata" intMappingType="UserVirtualSchema" mandatoryCondition="type == 'F'"
 +                accountid="0" password="0" purpose="BOTH"/>
 +  <UMappingItem id="111" extAttrName="fullname" mapping_id="1"
 +                intAttrName="cn" intMappingType="UserDerivedSchema" mandatoryCondition="true"
 +                accountid="0" password="0" purpose="BOTH"/>
 +    
 +  <UMapping id="2" resource_name="ws-target-resource-update"/>
 +  <UMappingItem id="112" extAttrName="email" mapping_id="2"
 +                intAttrName="email" intMappingType="UserPlainSchema" mandatoryCondition="false"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="113" extAttrName="userId" mapping_id="2"
 +                intAttrName="userId" intMappingType="UserPlainSchema" mandatoryCondition="false"
 +                accountid="1" password="0" purpose="PROPAGATION"/>
 +  <UMappingItem id="114" extAttrName="test3" mapping_id="2" 
 +                intAttrName="fullname" intMappingType="UserPlainSchema" mandatoryCondition="false"
 +                accountid="0" password="0" purpose="PROPAGATION"/>
 +    
 + 

<TRUNCATED>

[5/5] syncope git commit: [SYNCOPE-664] Merge from 1_2_X

Posted by il...@apache.org.
[SYNCOPE-664] Merge from 1_2_X


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/496a02a5
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/496a02a5
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/496a02a5

Branch: refs/heads/master
Commit: 496a02a51547f2ba4a48d54bee7a8a4de48df076
Parents: c910a7a b81cea7
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon May 4 17:57:09 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon May 4 17:57:09 2015 +0200

----------------------------------------------------------------------
 .../persistence/jpa/entity/AbstractPlainAttrValue.java | 13 +++++++++++--
 core/persistence-jpa/src/test/resources/content.xml    |  4 +++-
 2 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/496a02a5/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
----------------------------------------------------------------------
diff --cc core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
index c3469b1,0000000..c6a3bd7
mode 100644,000000..100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
@@@ -1,282 -1,0 +1,291 @@@
 +/*
 + * 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.core.persistence.jpa.entity;
 +
 +import java.util.Date;
 +import javax.persistence.Basic;
 +import javax.persistence.Lob;
 +import javax.persistence.MappedSuperclass;
 +import javax.persistence.Temporal;
 +import javax.persistence.TemporalType;
 +import javax.validation.constraints.Max;
 +import javax.validation.constraints.Min;
 +import org.apache.commons.codec.binary.Base64;
 +import org.apache.commons.lang3.ArrayUtils;
++import org.apache.commons.lang3.StringUtils;
 +import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 +import org.apache.commons.lang3.builder.ToStringStyle;
 +import org.apache.syncope.common.lib.types.AttrSchemaType;
 +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
 +import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValidationException;
 +import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 +import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 +import org.apache.syncope.core.misc.DataFormat;
 +import org.apache.syncope.core.persistence.jpa.validation.entity.PlainAttrValueCheck;
 +import org.apache.syncope.core.misc.security.Encryptor;
 +
 +@MappedSuperclass
 +@PlainAttrValueCheck
 +public abstract class AbstractPlainAttrValue extends AbstractEntity<Long> implements PlainAttrValue {
 +
 +    private static final long serialVersionUID = -9141923816611244785L;
 +
 +    private String stringValue;
 +
 +    @Temporal(TemporalType.TIMESTAMP)
 +    private Date dateValue;
 +
 +    @Basic
 +    @Min(0)
 +    @Max(1)
 +    private Integer booleanValue;
 +
 +    private Long longValue;
 +
 +    private Double doubleValue;
 +
 +    @Lob
 +    private byte[] binaryValue;
 +
 +    @Override
 +    public Boolean getBooleanValue() {
 +        return booleanValue == null
 +                ? null
 +                : isBooleanAsInteger(booleanValue);
 +    }
 +
 +    @Override
 +    public void setBooleanValue(final Boolean booleanValue) {
 +        this.booleanValue = booleanValue == null
 +                ? null
 +                : getBooleanAsInteger(booleanValue);
 +    }
 +
 +    @Override
 +    public Date getDateValue() {
 +        return dateValue == null
 +                ? null
 +                : new Date(dateValue.getTime());
 +    }
 +
 +    @Override
 +    public void setDateValue(final Date dateValue) {
 +        this.dateValue = dateValue == null
 +                ? null
 +                : new Date(dateValue.getTime());
 +    }
 +
 +    @Override
 +    public Double getDoubleValue() {
 +        return doubleValue;
 +    }
 +
 +    @Override
 +    public void setDoubleValue(final Double doubleValue) {
 +        this.doubleValue = doubleValue;
 +    }
 +
 +    @Override
 +    public Long getLongValue() {
 +        return longValue;
 +    }
 +
 +    @Override
 +    public void setLongValue(final Long longValue) {
 +        this.longValue = longValue;
 +    }
 +
 +    @Override
 +    public String getStringValue() {
-         return stringValue;
++        // workaround for Oracle DB considering empty string values as NULL (SYNCOPE-664)
++        return dateValue == null
++                && booleanValue == null
++                && longValue == null
++                && doubleValue == null
++                && binaryValue == null
++                && stringValue == null
++                        ? StringUtils.EMPTY
++                        : stringValue;
 +    }
 +
 +    @Override
 +    public void setStringValue(final String stringValue) {
 +        this.stringValue = stringValue;
 +    }
 +
 +    @Override
 +    public byte[] getBinaryValue() {
 +        return binaryValue;
 +    }
 +
 +    @Override
 +    public void setBinaryValue(final byte[] binaryValue) {
 +        this.binaryValue = ArrayUtils.clone(binaryValue);
 +    }
 +
 +    @Override
 +    public void parseValue(final PlainSchema schema, final String value) throws ParsingValidationException {
 +        Exception exception = null;
 +
 +        switch (schema.getType()) {
 +
 +            case Boolean:
 +                this.setBooleanValue(Boolean.parseBoolean(value));
 +                break;
 +
 +            case Long:
 +                try {
 +                    this.setLongValue(schema.getConversionPattern() == null
 +                            ? Long.valueOf(value)
 +                            : DataFormat.parseNumber(value, schema.getConversionPattern()).longValue());
 +                } catch (Exception pe) {
 +                    exception = pe;
 +                }
 +                break;
 +
 +            case Double:
 +                try {
 +                    this.setDoubleValue(schema.getConversionPattern() == null
 +                            ? Double.valueOf(value)
 +                            : DataFormat.parseNumber(value, schema.getConversionPattern()).doubleValue());
 +                } catch (Exception pe) {
 +                    exception = pe;
 +                }
 +                break;
 +
 +            case Date:
 +                try {
 +                    this.setDateValue(schema.getConversionPattern() == null
 +                            ? DataFormat.parseDate(value)
 +                            : new Date(DataFormat.parseDate(value, schema.getConversionPattern()).getTime()));
 +                } catch (Exception pe) {
 +                    exception = pe;
 +                }
 +                break;
 +
 +            case Encrypted:
 +                try {
 +                    this.setStringValue(Encryptor.getInstance(schema.getSecretKey()).
 +                            encode(value, schema.getCipherAlgorithm()));
 +                } catch (Exception pe) {
 +                    exception = pe;
 +                }
 +                break;
 +
 +            case Binary:
 +                this.setBinaryValue(Base64.decodeBase64(value));
 +                break;
 +
 +            case String:
 +            case Enum:
 +            default:
 +                this.setStringValue(value);
 +        }
 +
 +        if (exception != null) {
 +            throw new ParsingValidationException("While trying to parse '" + value + "' as " + schema.getKey(),
 +                    exception);
 +        }
 +    }
 +
 +    @SuppressWarnings("unchecked")
 +    @Override
 +    public <T> T getValue() {
 +        return (T) (booleanValue != null
 +                ? getBooleanValue()
 +                : dateValue != null
 +                        ? getDateValue()
 +                        : doubleValue != null
 +                                ? getDoubleValue()
 +                                : longValue != null
 +                                        ? getLongValue()
 +                                        : binaryValue != null
 +                                                ? getBinaryValue()
-                                                 : stringValue);
++                                                : getStringValue());
 +    }
 +
 +    @Override
 +    public String getValueAsString() {
 +        final AttrSchemaType type = getAttr() == null || getAttr().getSchema() == null
 +                || getAttr().getSchema().getType() == null
 +                        ? AttrSchemaType.String
 +                        : getAttr().getSchema().getType();
 +
 +        return getValueAsString(type);
 +    }
 +
 +    @Override
 +    public String getValueAsString(final AttrSchemaType type) {
 +        Exception exception = null;
 +
 +        String result = null;
 +
 +        switch (type) {
 +
 +            case Boolean:
 +                result = getBooleanValue().toString();
 +                break;
 +
 +            case Long:
 +                result = getAttr() == null || getAttr().getSchema() == null
 +                        || getAttr().getSchema().getConversionPattern() == null
 +                                ? getLongValue().toString()
 +                                : DataFormat.format(getLongValue(), getAttr().getSchema().getConversionPattern());
 +                break;
 +
 +            case Double:
 +                result = getAttr() == null || getAttr().getSchema() == null
 +                        || getAttr().getSchema().getConversionPattern() == null
 +                                ? getDoubleValue().toString()
 +                                : DataFormat.format(getDoubleValue(), getAttr().getSchema().getConversionPattern());
 +                break;
 +
 +            case Date:
 +                result = getAttr() == null || getAttr().getSchema() == null
 +                        || getAttr().getSchema().getConversionPattern() == null
 +                                ? DataFormat.format(getDateValue())
 +                                : DataFormat.format(getDateValue(), false, getAttr().getSchema().
 +                                        getConversionPattern());
 +                break;
 +
 +            case Binary:
 +                result = Base64.encodeBase64String(getBinaryValue());
 +                break;
 +
 +            case String:
 +            case Enum:
 +            case Encrypted:
 +            default:
 +                result = getStringValue();
 +                break;
 +        }
 +
 +        if (exception != null) {
 +            throw new InvalidPlainAttrValueException(
 +                    "While trying to format '" + getValue() + "' as " + type, exception);
 +        }
 +
 +        return result;
 +    }
 +
 +    @Override
 +    public String toString() {
 +        return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
 +    }
 +}


[2/5] syncope git commit: [SYNCOPE-664] Hiding Oracle behavior in AbstractAttrValue#getStringValue

Posted by il...@apache.org.
[SYNCOPE-664] Hiding Oracle behavior in AbstractAttrValue#getStringValue


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b81cea71
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b81cea71
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b81cea71

Branch: refs/heads/master
Commit: b81cea711945ea7e5133371d9f06c42c398650b2
Parents: b97eb56
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon May 4 17:50:01 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon May 4 17:50:01 2015 +0200

----------------------------------------------------------------------
 .../persistence/beans/AbstractAttrValue.java    | 46 ++++++++++++--------
 core/src/test/resources/content.xml             |  4 +-
 2 files changed, 32 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/b81cea71/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java b/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
index 6ee527e..d88fba0 100644
--- a/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
+++ b/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
@@ -28,6 +28,7 @@ import javax.persistence.TemporalType;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.syncope.common.SyncopeConstants;
@@ -105,7 +106,15 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
     }
 
     public String getStringValue() {
-        return stringValue;
+        // workaround for Oracle DB considering empty string values as NULL (SYNCOPE-664)
+        return dateValue == null
+                && booleanValue == null
+                && longValue == null
+                && doubleValue == null
+                && binaryValue == null
+                && stringValue == null
+                        ? StringUtils.EMPTY
+                        : stringValue;
     }
 
     public void setStringValue(final String stringValue) {
@@ -195,21 +204,21 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
         return (T) (booleanValue != null
                 ? getBooleanValue()
                 : dateValue != null
-                ? getDateValue()
-                : doubleValue != null
-                ? getDoubleValue()
-                : longValue != null
-                ? getLongValue()
-                : binaryValue != null
-                ? getBinaryValue()
-                : stringValue);
+                        ? getDateValue()
+                        : doubleValue != null
+                                ? getDoubleValue()
+                                : longValue != null
+                                        ? getLongValue()
+                                        : binaryValue != null
+                                                ? getBinaryValue()
+                                                : getStringValue());
     }
 
     public String getValueAsString() {
         final AttributeSchemaType type = getAttribute() == null || getAttribute().getSchema() == null
                 || getAttribute().getSchema().getType() == null
-                ? AttributeSchemaType.String
-                : getAttribute().getSchema().getType();
+                        ? AttributeSchemaType.String
+                        : getAttribute().getSchema().getType();
 
         return getValueAsString(type);
     }
@@ -228,22 +237,25 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
             case Long:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? getLongValue().toString()
-                        : DataFormat.format(getLongValue(), getAttribute().getSchema().getConversionPattern());
+                                ? getLongValue().toString()
+                                : DataFormat.format(getLongValue(),
+                                        getAttribute().getSchema().getConversionPattern());
                 break;
 
             case Double:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? getDoubleValue().toString()
-                        : DataFormat.format(getDoubleValue(), getAttribute().getSchema().getConversionPattern());
+                                ? getDoubleValue().toString()
+                                : DataFormat.format(getDoubleValue(),
+                                        getAttribute().getSchema().getConversionPattern());
                 break;
 
             case Date:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? DataFormat.format(getDateValue())
-                        : DataFormat.format(getDateValue(), false, getAttribute().getSchema().getConversionPattern());
+                                ? DataFormat.format(getDateValue())
+                                : DataFormat.format(getDateValue(), false, getAttribute().getSchema().
+                                        getConversionPattern());
                 break;
 
             case Binary:

http://git-wip-us.apache.org/repos/asf/syncope/blob/b81cea71/core/src/test/resources/content.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/content.xml b/core/src/test/resources/content.xml
index 94e7ed2..a361a6d 100644
--- a/core/src/test/resources/content.xml
+++ b/core/src/test/resources/content.xml
@@ -33,7 +33,9 @@ under the License.
   + provided as non-empty string: NotificationJob runs according to the given value -->
   <CSchema name="notificationjob.cronExpression" type="String"
            mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-
+  <CAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
+  <CAttrValue id="2" attribute_id="2" stringValue=""/>
+  
   <CSchema name="notification.maxRetries" type="Long"
            mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
   <CAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>


[3/5] syncope git commit: [SYNCOPE-664] Hiding Oracle behavior in AbstractAttrValue#getStringValue

Posted by il...@apache.org.
[SYNCOPE-664] Hiding Oracle behavior in AbstractAttrValue#getStringValue


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b81cea71
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b81cea71
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b81cea71

Branch: refs/heads/1_2_X
Commit: b81cea711945ea7e5133371d9f06c42c398650b2
Parents: b97eb56
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon May 4 17:50:01 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon May 4 17:50:01 2015 +0200

----------------------------------------------------------------------
 .../persistence/beans/AbstractAttrValue.java    | 46 ++++++++++++--------
 core/src/test/resources/content.xml             |  4 +-
 2 files changed, 32 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/b81cea71/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java b/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
index 6ee527e..d88fba0 100644
--- a/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
+++ b/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractAttrValue.java
@@ -28,6 +28,7 @@ import javax.persistence.TemporalType;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.syncope.common.SyncopeConstants;
@@ -105,7 +106,15 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
     }
 
     public String getStringValue() {
-        return stringValue;
+        // workaround for Oracle DB considering empty string values as NULL (SYNCOPE-664)
+        return dateValue == null
+                && booleanValue == null
+                && longValue == null
+                && doubleValue == null
+                && binaryValue == null
+                && stringValue == null
+                        ? StringUtils.EMPTY
+                        : stringValue;
     }
 
     public void setStringValue(final String stringValue) {
@@ -195,21 +204,21 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
         return (T) (booleanValue != null
                 ? getBooleanValue()
                 : dateValue != null
-                ? getDateValue()
-                : doubleValue != null
-                ? getDoubleValue()
-                : longValue != null
-                ? getLongValue()
-                : binaryValue != null
-                ? getBinaryValue()
-                : stringValue);
+                        ? getDateValue()
+                        : doubleValue != null
+                                ? getDoubleValue()
+                                : longValue != null
+                                        ? getLongValue()
+                                        : binaryValue != null
+                                                ? getBinaryValue()
+                                                : getStringValue());
     }
 
     public String getValueAsString() {
         final AttributeSchemaType type = getAttribute() == null || getAttribute().getSchema() == null
                 || getAttribute().getSchema().getType() == null
-                ? AttributeSchemaType.String
-                : getAttribute().getSchema().getType();
+                        ? AttributeSchemaType.String
+                        : getAttribute().getSchema().getType();
 
         return getValueAsString(type);
     }
@@ -228,22 +237,25 @@ public abstract class AbstractAttrValue extends AbstractBaseBean {
             case Long:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? getLongValue().toString()
-                        : DataFormat.format(getLongValue(), getAttribute().getSchema().getConversionPattern());
+                                ? getLongValue().toString()
+                                : DataFormat.format(getLongValue(),
+                                        getAttribute().getSchema().getConversionPattern());
                 break;
 
             case Double:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? getDoubleValue().toString()
-                        : DataFormat.format(getDoubleValue(), getAttribute().getSchema().getConversionPattern());
+                                ? getDoubleValue().toString()
+                                : DataFormat.format(getDoubleValue(),
+                                        getAttribute().getSchema().getConversionPattern());
                 break;
 
             case Date:
                 result = getAttribute() == null || getAttribute().getSchema() == null
                         || getAttribute().getSchema().getConversionPattern() == null
-                        ? DataFormat.format(getDateValue())
-                        : DataFormat.format(getDateValue(), false, getAttribute().getSchema().getConversionPattern());
+                                ? DataFormat.format(getDateValue())
+                                : DataFormat.format(getDateValue(), false, getAttribute().getSchema().
+                                        getConversionPattern());
                 break;
 
             case Binary:

http://git-wip-us.apache.org/repos/asf/syncope/blob/b81cea71/core/src/test/resources/content.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/content.xml b/core/src/test/resources/content.xml
index 94e7ed2..a361a6d 100644
--- a/core/src/test/resources/content.xml
+++ b/core/src/test/resources/content.xml
@@ -33,7 +33,9 @@ under the License.
   + provided as non-empty string: NotificationJob runs according to the given value -->
   <CSchema name="notificationjob.cronExpression" type="String"
            mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-
+  <CAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
+  <CAttrValue id="2" attribute_id="2" stringValue=""/>
+  
   <CSchema name="notification.maxRetries" type="Long"
            mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
   <CAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>