http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/persistence-jpa/src/test/resources/content.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/content.xml 
b/core/persistence-jpa/src/test/resources/content.xml
index 3b74dbc..6c6e527 100644
--- a/core/persistence-jpa/src/test/resources/content.xml
+++ b/core/persistence-jpa/src/test/resources/content.xml
@@ -81,9 +81,9 @@ under the License.
                 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.role.layout" type="String"
+  <CPlainSchema name="admin.group.layout" type="String"
                 mandatoryCondition="false" multivalue="1" uniqueConstraint="0" 
readonly="0"/>
-  <CPlainSchema name="self.role.layout" type="String"
+  <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"/>
@@ -92,11 +92,11 @@ under the License.
   
   <!-- sample policies -->
   <Policy DTYPE="SyncPolicy" id="1" description="global sync policy" 
type="GLOBAL_SYNC" 
-          
specification='{"userJavaRule":null,"roleJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"roleAltSearchSchemas":[]}'/>
+          
specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"groupAltSearchSchemas":[]}'/>
   <Policy DTYPE="PasswordPolicy" id="2" description="global password policy" 
type="GLOBAL_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,"roleJavaRule":null,"conflictResolutionAction":"ALL","userAltSearchSchemas":["username","firstname"],"roleAltSearchSchemas":[]}'/>
+          
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":false}'/>
   <Policy DTYPE="AccountPolicy" id="5" description="global account policy" 
type="GLOBAL_ACCOUNT" 
@@ -104,11 +104,11 @@ under the License.
   <Policy DTYPE="AccountPolicy" id="6" description="sample account policy" 
type="ACCOUNT" 
           
specification='{"maxLength":0,"minLength":4,"pattern":null,"allUpperCase":false,"allLowerCase":false,"propagateSuspension":false,"permittedLoginRetries":3,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
   <Policy DTYPE="SyncPolicy" id="7" description="sync policy 1" type="SYNC" 
-          
specification='{"userJavaRule":null,"roleJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"roleAltSearchSchemas":[]}'/>
+          
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,"roleJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"roleAltSearchSchemas":[]}'/>
+          
specification='{"userJavaRule":null,"groupJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"groupAltSearchSchemas":[]}'/>
     
   <SyncopeUser id="1" workflowId="4" status="active" 
password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
                username="rossini" creator="admin" lastModifier="admin"
@@ -126,22 +126,22 @@ under the License.
                username="puccini" creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00" suspended="0"/>
 
-  <SyncopeRole id="1" name="root"
+  <SyncopeGroup id="1" name="root"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="2" name="child" parent_id="1"
+  <SyncopeGroup id="2" name="child" parent_id="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="3" name="citizen"
+  <SyncopeGroup id="3" name="citizen"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="4" name="employee" parent_id="3"
+  <SyncopeGroup id="4" name="employee" parent_id="3"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="5" name="secretary" parent_id="4"
+  <SyncopeGroup id="5" name="secretary" parent_id="4"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="6"
+  <SyncopeGroup id="6"
                name="director" parent_id="4" userOwner_id="5"
                inheritPlainAttrs="1" inheritDerAttrs="1" inheritVirAttrs="1"
                inheritPasswordPolicy="0" inheritAccountPolicy="0"
@@ -149,37 +149,37 @@ under the License.
                accountPolicy_id="6"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="7"
+  <SyncopeGroup id="7"
                name="managingDirector" parent_id="6"
                inheritPlainAttrs="1" inheritDerAttrs="1" inheritVirAttrs="1"
                inheritPasswordPolicy="1" inheritAccountPolicy="1" 
inheritOwner="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="8"
+  <SyncopeGroup id="8"
                name="otherchild" parent_id="1"
                inheritVirAttrs="1"
                passwordPolicy_id="4"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="9" name="roleForWorkflowApproval" parent_id="1"
+  <SyncopeGroup id="9" name="groupForWorkflowApproval" parent_id="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="10"
+  <SyncopeGroup id="10"
                name="managingConsultant" parent_id="6"
                inheritPlainAttrs="1" inheritDerAttrs="1" inheritVirAttrs="1"
                inheritPasswordPolicy="1" inheritAccountPolicy="1" 
inheritOwner="0"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="11" name="roleForWorkflowOptIn" parent_id="1"
+  <SyncopeGroup id="11" name="groupForWorkflowOptIn" parent_id="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="12" name="aRoleForPropagation" parent_id="1"
+  <SyncopeGroup id="12" name="aGroupForPropagation" parent_id="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="13" name="bRoleForPropagation" parent_id="1"
+  <SyncopeGroup id="13" name="bGroupForPropagation" parent_id="1"
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
-  <SyncopeRole id="14"
+  <SyncopeGroup id="14"
                name="artDirector" parent_id="4"
                inheritPlainAttrs="1" inheritDerAttrs="1" inheritVirAttrs="1"
                inheritPasswordPolicy="0" inheritAccountPolicy="0"
@@ -188,25 +188,25 @@ under the License.
                creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 
11:00:00"/>
 
-  <Membership id="1" user_id="1" role_id="1"
+  <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" role_id="1"
+  <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" role_id="2"
+  <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" role_id="7"
+  <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" role_id="8"
+  <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" role_id="3"
+  <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" role_id="14"
+  <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"/>
 
@@ -254,25 +254,25 @@ under the License.
 
   <UVirSchema name="virtualdata"/>
 
-  <RPlainSchema name="icon" type="String"
+  <GPlainSchema name="icon" type="String"
                 mandatoryCondition="false" multivalue="0" uniqueConstraint="0" 
readonly="0"/>                
-  <RPlainSchema name="show" type="Boolean"
+  <GPlainSchema name="show" type="Boolean"
                 mandatoryCondition="false" multivalue="0" uniqueConstraint="0" 
readonly="0"/>
-  <RPlainSchema name="rderived_sx" type="String"
+  <GPlainSchema name="rderived_sx" type="String"
                 mandatoryCondition="false" multivalue="0" uniqueConstraint="0" 
readonly="0"/>
-  <RPlainSchema name="rderived_dx" type="String"
+  <GPlainSchema name="rderived_dx" type="String"
                 mandatoryCondition="false" multivalue="0" uniqueConstraint="0" 
readonly="0"/>           
-  <RPlainSchema name="title" type="String"
+  <GPlainSchema name="title" type="String"
                 mandatoryCondition="false" multivalue="1" uniqueConstraint="0" 
readonly="0"/>
 
-  <RDerSchema name="rderiveddata" expression="rderived_sx + '-' + 
rderived_dx"/>
-  <RDerSchema name="displayProperty" expression="icon + ': ' + show"/>
-  <RDerSchema name="rderToBePropagated" expression="rderived_sx + '-' + 
rderived_dx"/>
+  <GDerSchema name="rderiveddata" expression="rderived_sx + '-' + 
rderived_dx"/>
+  <GDerSchema name="displayProperty" expression="icon + ': ' + show"/>
+  <GDerSchema name="rderToBePropagated" expression="rderived_sx + '-' + 
rderived_dx"/>
 
-  <RVirSchema name="rvirtualdata"/>
+  <GVirSchema name="rvirtualdata"/>
 
   <!-- rderiveddata is used to verify der schema deletion -->
-  <RDerSchema name="rderivedschema" expression="rderived_sx + '-' + 
rderived_dx"/>
+  <GDerSchema name="rderivedschema" expression="rderived_sx + '-' + 
rderived_dx"/>
 
   <MPlainSchema name="subscriptionDate" type="Date"
                 mandatoryCondition="false" multivalue="0" uniqueConstraint="0" 
readonly="0"
@@ -359,58 +359,58 @@ under the License.
   <UDerAttr id="100" derSchema_name="cn" owner_id="3"/>
   <UDerAttr id="101" derSchema_name="cn" owner_id="1"/>
 
-  <RPlainAttrTemplate id="600" owner_id="1" schema_name="icon"/>
-  <RPlainAttr id="600" owner_id="1" template_id="600"/>
-  <RPlainAttrValue attribute_id="600" id="40" stringValue="niceIcon"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="700" owner_id="2" schema_name="icon"/>
-  <RPlainAttr id="700" owner_id="2" template_id="700"/>
-  <RPlainAttrValue attribute_id="700" id="41" stringValue="badIcon"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="800" owner_id="1" schema_name="show"/>
-  <RPlainAttr id="800" owner_id="1" template_id="800"/>
-  <RPlainAttrValue attribute_id="800" id="42" booleanValue="1"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="900" owner_id="6" schema_name="icon"/>
-  <RPlainAttr id="900" owner_id="6" template_id="900"/>
-  <RPlainAttrValue attribute_id="900" id="43" stringValue="icon6"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="950" owner_id="4" schema_name="icon"/>
-  <RPlainAttr id="950" owner_id="4" template_id="950"/>
-  <RPlainAttrValue attribute_id="950" id="44" stringValue="icon4"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="992" owner_id="1" schema_name="rderived_sx"/>
-  <RPlainAttr id="992" owner_id="1" template_id="992"/>
-  <RPlainAttrValue attribute_id="992" id="92" stringValue="sx"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="993" owner_id="1" schema_name="rderived_dx"/>
-  <RPlainAttr id="993" owner_id="1" template_id="993"/>
-  <RPlainAttrValue attribute_id="993" id="93" stringValue="dx"/>
+  <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"/>
 
-  <RPlainAttrTemplate id="994" owner_id="12" schema_name="title"/>
-  <RPlainAttr id="994" owner_id="12" template_id="994"/>
-  <RPlainAttrValue attribute_id="994" id="94" stringValue="r12"/>
+  <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"/>
   
-  <RPlainAttrTemplate id="995" owner_id="13" schema_name="title"/>
-  <RPlainAttr id="995" owner_id="13" template_id="995"/>
-  <RPlainAttrValue attribute_id="995" id="95" stringValue="r13"/>
+  <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"/>
 
-  <RDerAttrTemplate id="1000" owner_id="1" schema_name="rderiveddata"/>
-  <RDerAttr id="1000" owner_id="1" template_id="1000"/>
+  <GDerAttrTemplate id="1000" owner_id="1" schema_name="rderiveddata"/>
+  <GDerAttr id="1000" owner_id="1" template_id="1000"/>
     
-  <RDerAttrTemplate id="1001" owner_id="1" schema_name="displayProperty"/>
-  <RDerAttr id="1001" owner_id="1" template_id="1001"/>
+  <GDerAttrTemplate id="1001" owner_id="1" schema_name="displayProperty"/>
+  <GDerAttr id="1001" owner_id="1" template_id="1001"/>
   
-  <RDerAttrTemplate id="1002" owner_id="4" schema_name="displayProperty"/>
-  <RDerAttr id="1002" owner_id="4" template_id="1002"/>
+  <GDerAttrTemplate id="1002" owner_id="4" schema_name="displayProperty"/>
+  <GDerAttr id="1002" owner_id="4" template_id="1002"/>
 
-  <RDerAttrTemplate id="1003" owner_id="1" schema_name="rderToBePropagated"/>  
  
-  <RDerAttr id="1003" owner_id="1" template_id="1003"/>    
+  <GDerAttrTemplate id="1003" owner_id="1" schema_name="rderToBePropagated"/>  
  
+  <GDerAttr id="1003" owner_id="1" template_id="1003"/>    
 
-  <RVirAttrTemplate id="98" owner_id="4" schema_name="rvirtualdata"/>
-  <RVirAttr id="98" owner_id="4" template_id="98"/>
+  <GVirAttrTemplate id="98" owner_id="4" schema_name="rvirtualdata"/>
+  <GVirAttr id="98" owner_id="4" template_id="98"/>
 
-  <RVirAttrTemplate id="99" owner_id="3" schema_name="rvirtualdata"/>
+  <GVirAttrTemplate id="99" owner_id="3" schema_name="rvirtualdata"/>
 
   <MPlainAttrTemplate id="98" owner_id="1" schema_name="mderived_sx"/>
   
@@ -497,7 +497,7 @@ under the License.
                 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","role","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":"Name of th
 e 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 required","
 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"]}]'/>
+                
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":"Name
  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 requi
 red","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" 
capabilities="ONE_PHASE_CREATE"/>
   <ConnInstance_capabilities ConnInstance_id="104" 
capabilities="ONE_PHASE_UPDATE"/>
   <ConnInstance_capabilities ConnInstance_id="104" 
capabilities="ONE_PHASE_DELETE"/>
@@ -651,13 +651,13 @@ under the License.
   <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"/>
-  <SyncopeRole_ExternalResource role_id="3" 
resource_name="ws-target-resource-list-mappings-1"/>
-  <SyncopeRole_ExternalResource role_id="8" 
resource_name="ws-target-resource-2"/>
-  <SyncopeRole_ExternalResource role_id="3" 
resource_name="ws-target-resource-list-mappings-2"/>
-  <SyncopeRole_ExternalResource role_id="7" 
resource_name="ws-target-resource-nopropagation"/>
-  <SyncopeRole_ExternalResource role_id="10" 
resource_name="ws-target-resource-nopropagation3"/>
-  <SyncopeRole_ExternalResource role_id="12" resource_name="resource-csv"/>
-  <SyncopeRole_ExternalResource role_id="13" resource_name="resource-csv"/>
+  <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"
@@ -787,8 +787,8 @@ under the License.
   <UMappingItem id="207" extAttrName="__NAME__" mapping_id="9"
                 intAttrName="csvuserid" intMappingType="UserDerivedSchema" 
mandatoryCondition="true"
                 accountid="1" password="0" purpose="BOTH"/>
-  <UMappingItem id="208" extAttrName="role" mapping_id="9"
-                intAttrName="rderToBePropagated" 
intMappingType="RoleDerivedSchema" mandatoryCondition="false"
+  <UMappingItem id="208" extAttrName="theirgroup" mapping_id="9"
+                intAttrName="rderToBePropagated" 
intMappingType="GroupDerivedSchema" mandatoryCondition="false"
                 accountid="0" password="0" purpose="BOTH"/>
   <UMappingItem id="209" extAttrName="membership" mapping_id="9"
                 intAttrName="mderToBePropagated" 
intMappingType="MembershipDerivedSchema" mandatoryCondition="false"
@@ -820,7 +820,7 @@ under the License.
                 extAttrName="mail" intAttrName="email" 
intMappingType="UserPlainSchema"
                 mandatoryCondition="false" purpose="BOTH"/>
   <UMappingItem id="316" accountid="0" password="0" mapping_id="11"
-                extAttrName="title" intAttrName="title" 
intMappingType="RolePlainSchema"
+                extAttrName="title" intAttrName="title" 
intMappingType="GroupPlainSchema"
                 mandatoryCondition="false" purpose="BOTH"/>
   <UMappingItem id="317" accountid="0" password="0" mapping_id="11"
                 extAttrName="postalAddress" intAttrName="postalAddress" 
intMappingType="MembershipPlainSchema"
@@ -838,19 +838,19 @@ under the License.
                 extAttrName="jpegPhoto" intAttrName="photo" 
intMappingType="UserPlainSchema"
                 mandatoryCondition="false" purpose="BOTH"/>
   
-  <RMapping id="1" resource_name="resource-ldap"
+  <GMapping id="1" resource_name="resource-ldap"
             accountlink="&apos;cn=&apos; + name + 
&apos;,ou=groups,o=isp&apos;"/>
-  <RMappingItem id="1" accountid="1" password="0" mapping_id="1"
-                extAttrName="cn" intAttrName="roleName" 
intMappingType="RoleName"
+  <GMappingItem id="1" accountid="1" password="0" mapping_id="1"
+                extAttrName="cn" intAttrName="groupName" 
intMappingType="GroupName"
                 mandatoryCondition="true" purpose="BOTH"/>
-  <RMappingItem id="2" accountid="0" password="0" mapping_id="1"
-                extAttrName="owner" intAttrName="roleOwnerSchema" 
intMappingType="RoleOwnerSchema"
+  <GMappingItem id="2" accountid="0" password="0" mapping_id="1"
+                extAttrName="owner" intAttrName="groupOwnerSchema" 
intMappingType="GroupOwnerSchema"
                 mandatoryCondition="false" purpose="BOTH"/>
-  <RMappingItem id="3" accountid="0" password="0" mapping_id="1"
-                extAttrName="description" intAttrName="title" 
intMappingType="RolePlainSchema"
+  <GMappingItem id="3" accountid="0" password="0" mapping_id="1"
+                extAttrName="description" intAttrName="title" 
intMappingType="GroupPlainSchema"
                 mandatoryCondition="false" purpose="BOTH"/>
-  <RMappingItem id="4" extAttrName="businessCategory" mapping_id="1"
-                intAttrName="rvirtualdata" intMappingType="RoleVirtualSchema" 
mandatoryCondition="false"
+  <GMappingItem id="4" extAttrName="businessCategory" mapping_id="1"
+                intAttrName="rvirtualdata" intMappingType="GroupVirtualSchema" 
mandatoryCondition="false"
                 accountid="0" password="0" purpose="BOTH"/>
         
   <UMapping id="16" resource_name="resource-db-sync"/>
@@ -904,8 +904,8 @@ under the License.
   <Task DTYPE="SyncTask" type="SYNCHRONIZATION" id="4" name="CSV (update 
matching; assign unmatching)" resource_name="resource-csv"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" 
fullReconciliation="0"
         jobClassName="org.apache.syncope.core.provisioning.api.job.SyncJob" 
unmatchingRule="ASSIGN" matchingRule="UPDATE"
-        
userTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"password":null,"status":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"attributes":[{"schema":"type","readonly":false,"values":["email
 == &apos;[email protected]&apos;? &apos;TYPE_8&apos;: 
&apos;TYPE_OTHER&apos;"]}],"derivedAttributes":[{"schema":"cn","readonly":false,"values":[null]}],"virtualAttributes":[],"resources":["resource-testdb"],"propagationStatuses":[],"memberships":[{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"roleId":8,"roleName":null,"attributes":[{"schema":"subscriptionDate","readonly":false,"values":["&apos;2009-08-18T16:33:12.203+0200&apos;"]}],"derivedAttributes":[],"virtualAttributes":[]}]}'
-        
roleTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"roleOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"rPlainAttrTemplates":[],"rDerAttrTemplates":[],"rVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
+        
userTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"password":null,"status":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"attributes":[{"schema":"type","readonly":false,"values":["email
 == &apos;[email protected]&apos;? &apos;TYPE_8&apos;: 
&apos;TYPE_OTHER&apos;"]}],"derivedAttributes":[{"schema":"cn","readonly":false,"values":[null]}],"virtualAttributes":[],"resources":["resource-testdb"],"propagationStatuses":[],"memberships":[{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"groupId":8,"groupName":null,"attributes":[{"schema":"subscriptionDate","readonly":false,"values":["&apos;2009-08-18T16:33:12.203+0200&apos;"]}],"derivedAttributes":[],"virtualAttributes":[]}]}'
+        
groupTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"groupOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"gPlainAttrTemplates":[],"gDerAttrTemplates":[],"gVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
   <Task DTYPE="SchedTask" type="SCHEDULED" id="5" name="SampleJob Task" 
jobClassName="org.apache.syncope.core.provisioning.java.job.SampleJob" 
cronExpression="0 0 0 1 * ?"/>
   <Task DTYPE="PropagationTask" type="PROPAGATION" id="6" 
propagationMode="TWO_PHASES" propagationOperation="UPDATE"
         objectClassName="__ACCOUNT__" 
resource_name="ws-target-resource-nopropagation" subjectType="USER" 
subjectId="1"
@@ -915,7 +915,7 @@ under the License.
         performCreate="1" performUpdate="1" performDelete="0" syncStatus="1" 
fullReconciliation="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.SyncJob" 
unmatchingRule="PROVISION" matchingRule="UPDATE"
         
userTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"password":null,"status":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"attributes":[{"schema":"type","readonly":false,"values":["&apos;type
 
a&apos;"]},{"schema":"userId","readonly":false,"values":["&apos;[email protected]&apos;"]},{"schema":"fullname","readonly":false,"values":["&apos;reconciled
 
fullname&apos;"]},{"schema":"surname","readonly":false,"values":["&apos;surname&apos;"]}],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"memberships":[]}'
-        
roleTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"roleOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"rPlainAttrTemplates":[],"rDerAttrTemplates":[],"rVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
+        
groupTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"groupOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"gPlainAttrTemplates":[],"gDerAttrTemplates":[],"gVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
   <Task DTYPE="NotificationTask" type="NOTIFICATION" id="8" 
sender="[email protected]" subject="Notification for SYNCOPE-81" 
         textBody="NOTIFICATION-81" htmlBody="NOTIFICATION-81" 
traceLevel="ALL"/>
   <Task DTYPE="SyncTask" type="SYNCHRONIZATION" id="9" name="TestDB2 Task" 
resource_name="resource-testdb2"
@@ -928,7 +928,7 @@ under the License.
         fullReconciliation="1" performCreate="1" performDelete="1" 
performUpdate="1" syncStatus="0"
         jobClassName="org.apache.syncope.core.provisioning.api.job.SyncJob" 
unmatchingRule="PROVISION" matchingRule="UPDATE"
         
userTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"password":null,"status":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[{"schema":"virtualReadOnly","readonly":false,"values":[""]}],"resources":["resource-ldap"],"propagationStatuses":[],"memberships":[]}'
-        
roleTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":8,"userOwner":null,"roleOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[{"schema":"show","readonly":false,"values":["&apos;true&apos;"]}],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"rPlainAttrTemplates":["show"],"rDerAttrTemplates":[],"rVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
+        
groupTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":8,"userOwner":null,"groupOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[{"schema":"show","readonly":false,"values":["&apos;true&apos;"]}],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"gPlainAttrTemplates":["show"],"gDerAttrTemplates":[],"gVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
   <SyncTask_actionsClassNames SyncTask_id="11" 
actionClassName="org.apache.syncope.core.provisioning.java.sync.LDAPMembershipSyncActions"/>
   <Task DTYPE="SyncTask" type="SYNCHRONIZATION" id="12" name="VirAttrCache 
test" resource_name="resource-csv"
         performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" 
fullReconciliation="1"
@@ -936,52 +936,52 @@ under the License.
   <Task DTYPE="PushTask" type="PUSH" id="13" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="ASSIGN" matchingRule="IGNORE" 
-        userFilter="surname==Vivaldi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Vivaldi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="14" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="PROVISION" matchingRule="IGNORE" 
-        userFilter="surname==Bellini" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Bellini" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="15" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="UNLINK" matchingRule="IGNORE" 
-        userFilter="surname==Puccini" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Puccini" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="16" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="IGNORE" 
-        userFilter="surname==Verdi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Verdi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="17" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="ASSIGN" matchingRule="UPDATE" 
-        userFilter="username==_NO_ONE_" roleFilter="name==_NO_ONE_"/>
+        userFilter="username==_NO_ONE_" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="18" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="DEPROVISION" 
-        userFilter="surname==Verdi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Verdi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="19" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="UNASSIGN" 
-        userFilter="surname==Rossini" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Rossini" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="20" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="LINK" 
-        userFilter="surname==Verdi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Verdi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="21" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="UNLINK" 
-        userFilter="surname==Verdi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Verdi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="22" name="Export on resource-testdb2" 
resource_name="resource-testdb2"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="IGNORE" matchingRule="UPDATE" 
-        userFilter="surname==Verdi" roleFilter="name==_NO_ONE_"/>
+        userFilter="surname==Verdi" groupFilter="name==_NO_ONE_"/>
   <Task DTYPE="PushTask" type="PUSH" id="23" name="Export on resource-ldap" 
resource_name="resource-ldap"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
         jobClassName="org.apache.syncope.core.provisioning.api.job.PushJob" 
unmatchingRule="ASSIGN" matchingRule="UNLINK" 
-        userFilter="username==_NO_ONE_" roleFilter="name==citizen"/>
+        userFilter="username==_NO_ONE_" groupFilter="name==citizen"/>
   <Task DTYPE="SyncTask" type="SYNCHRONIZATION" id="24" name="CSV Task (update 
matching; provision unmatching)" resource_name="resource-csv"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" 
fullReconciliation="0"
         jobClassName="org.apache.syncope.core.provisioning.api.job.SyncJob" 
unmatchingRule="PROVISION" matchingRule="UPDATE"
         
userTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"password":null,"status":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"attributes":[{"schema":"firstname","readonly":false,"values":[""]},{"schema":"userId","readonly":false,"values":["&apos;test&apos;"]},{"schema":"fullname","readonly":false,"values":["&apos;test&apos;"]},{"schema":"surname","readonly":false,"values":["&apos;test&apos;"]}],"derivedAttributes":[],"virtualAttributes":[],"resources":["resource-testdb"],"propagationStatuses":[],"memberships":[]}'
-        
roleTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"roleOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"rPlainAttrTemplates":[],"rDerAttrTemplates":[],"rVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
+        
groupTemplate='{"creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":0,"name":null,"parent":0,"userOwner":null,"groupOwner":null,"inheritOwner":false,"inheritTemplates":false,"inheritPlainAttrs":false,"inheritDerAttrs":false,"inheritVirAttrs":false,"inheritPasswordPolicy":false,"inheritAccountPolicy":false,"passwordPolicy":null,"accountPolicy":null,"attributes":[],"derivedAttributes":[],"virtualAttributes":[],"resources":[],"propagationStatuses":[],"entitlements":[],"gPlainAttrTemplates":[],"gDerAttrTemplates":[],"gVirAttrTemplates":[],"mPlainAttrTemplates":[],"mDerAttrTemplates":[],"mVirAttrTemplates":[]}'/>
   <Task DTYPE="SyncTask" type="SYNCHRONIZATION" id="25" name="CSV (unlink 
matching; ignore unmatching)" resource_name="resource-csv"
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" 
fullReconciliation="0"
         jobClassName="org.apache.syncope.core.provisioning.api.job.SyncJob" 
unmatchingRule="IGNORE" matchingRule="UNLINK"/>
@@ -1002,7 +1002,7 @@ under the License.
   <Notification id="10" sender="[email protected]" subject="Test 
subject" template="test" selfAsRecipient="0" 
                 traceLevel="FAILURES"
                 userAbout="fullname==*o*;fullname==*i*"
-                recipients="$roles==7"
+                recipients="$groups==7"
                 recipientAttrType="UserPlainSchema" recipientAttrName="email" 
active="1"/>
   <Notification_events Notification_id="10" 
events="[CUSTOM]:[]:[]:[unexisting1]:[FAILURE]"/>
   <Notification_events Notification_id="10" 
events="[CUSTOM]:[]:[]:[unexisting2]:[SUCCESS]"/>
@@ -1030,11 +1030,11 @@ under the License.
   <Entitlement name="USER_UPDATE"/>
   <Entitlement name="USER_DELETE"/>
   <Entitlement name="USER_VIEW"/>
-  <Entitlement name="ROLE_LIST"/>
-  <Entitlement name="ROLE_CREATE"/>
-  <Entitlement name="ROLE_READ"/>
-  <Entitlement name="ROLE_UPDATE"/>
-  <Entitlement name="ROLE_DELETE"/>
+  <Entitlement name="GROUP_LIST"/>
+  <Entitlement name="GROUP_CREATE"/>
+  <Entitlement name="GROUP_READ"/>
+  <Entitlement name="GROUP_UPDATE"/>
+  <Entitlement name="GROUP_DELETE"/>
   <Entitlement name="RESOURCE_LIST"/>
   <Entitlement name="RESOURCE_CREATE"/>
   <Entitlement name="RESOURCE_READ"/>
@@ -1089,37 +1089,37 @@ under the License.
   <Entitlement name="SECURITY_QUESTION_CREATE"/>
   <Entitlement name="SECURITY_QUESTION_UPDATE"/>
   <Entitlement name="SECURITY_QUESTION_DELETE"/>
-  <Entitlement name="ROLE_1"/>
-  <Entitlement name="ROLE_2"/>
-  <Entitlement name="ROLE_3"/>
-  <Entitlement name="ROLE_4"/>
-  <Entitlement name="ROLE_5"/>
-  <Entitlement name="ROLE_6"/>
-  <Entitlement name="ROLE_7"/>
-  <Entitlement name="ROLE_8"/>
-  <Entitlement name="ROLE_9"/>
-  <Entitlement name="ROLE_10"/>
-  <Entitlement name="ROLE_11"/>
-  <Entitlement name="ROLE_12"/>
-  <Entitlement name="ROLE_13"/>
-  <Entitlement name="ROLE_14"/>
+  <Entitlement name="GROUP_1"/>
+  <Entitlement name="GROUP_2"/>
+  <Entitlement name="GROUP_3"/>
+  <Entitlement name="GROUP_4"/>
+  <Entitlement name="GROUP_5"/>
+  <Entitlement name="GROUP_6"/>
+  <Entitlement name="GROUP_7"/>
+  <Entitlement name="GROUP_8"/>
+  <Entitlement name="GROUP_9"/>
+  <Entitlement name="GROUP_10"/>
+  <Entitlement name="GROUP_11"/>
+  <Entitlement name="GROUP_12"/>
+  <Entitlement name="GROUP_13"/>
+  <Entitlement name="GROUP_14"/>
 
-  <SyncopeRole_Entitlement entitlement_name="base" role_id="1"/>
-  <SyncopeRole_Entitlement entitlement_name="advanced" role_id="1"/>
-  <SyncopeRole_Entitlement entitlement_name="base" role_id="2"/>
-  <SyncopeRole_Entitlement entitlement_name="USER_READ" role_id="2"/>
-  <SyncopeRole_Entitlement entitlement_name="USER_LIST" role_id="2"/>
-  <SyncopeRole_Entitlement entitlement_name="USER_READ" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="USER_LIST" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="ROLE_8" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="ROLE_9" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="ROLE_7" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="ROLE_1" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="WORKFLOW_FORM_CLAIM" role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="WORKFLOW_FORM_SUBMIT" 
role_id="7"/>
-  <SyncopeRole_Entitlement entitlement_name="SCHEMA_READ" role_id="8"/>
-  <SyncopeRole_Entitlement entitlement_name="ROLE_READ" role_id="8"/>
-  <SyncopeRole_Entitlement entitlement_name="WORKFLOW_FORM_CLAIM" role_id="8"/>
+  <SyncopeGroup_Entitlement entitlement_name="base" group_id="1"/>
+  <SyncopeGroup_Entitlement entitlement_name="advanced" group_id="1"/>
+  <SyncopeGroup_Entitlement entitlement_name="base" group_id="2"/>
+  <SyncopeGroup_Entitlement entitlement_name="USER_READ" group_id="2"/>
+  <SyncopeGroup_Entitlement entitlement_name="USER_LIST" group_id="2"/>
+  <SyncopeGroup_Entitlement entitlement_name="USER_READ" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="USER_LIST" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="GROUP_8" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="GROUP_9" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="GROUP_7" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="GROUP_1" group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="WORKFLOW_FORM_CLAIM" 
group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="WORKFLOW_FORM_SUBMIT" 
group_id="7"/>
+  <SyncopeGroup_Entitlement entitlement_name="SCHEMA_READ" group_id="8"/>
+  <SyncopeGroup_Entitlement entitlement_name="GROUP_READ" group_id="8"/>
+  <SyncopeGroup_Entitlement entitlement_name="WORKFLOW_FORM_CLAIM" 
group_id="8"/>
   
   <SecurityQuestion id="1" content="What's your mother's maiden name?"/>
 </dataset>

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 243b27f..bb61b7a 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -33,6 +33,10 @@ under the License.
   <artifactId>syncope-core</artifactId>
   <packaging>pom</packaging>
 
+  <properties>
+    <rootpom.basedir>${basedir}/..</rootpom.basedir>
+  </properties>
+
   <modules>
     <module>persistence-api</module>
     <module>persistence-jpa</module>

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AttributableTransformer.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AttributableTransformer.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AttributableTransformer.java
index bcbe900..5e8b9e7 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AttributableTransformer.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AttributableTransformer.java
@@ -22,7 +22,7 @@ import 
org.apache.syncope.common.lib.mod.AbstractAttributableMod;
 import org.apache.syncope.common.lib.to.AbstractAttributableTO;
 
 /**
- * Provides logic for transforming user or role, received as input by RESTful 
methods, before any internal
+ * Provides logic for transforming user or group, received as input by RESTful 
methods, before any internal
  * processing logic takes place.
  */
 public interface AttributableTransformer {

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
index 2715637..61ff143 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
@@ -50,7 +50,7 @@ public interface Connector {
     Uid authenticate(String username, String password, OperationOptions 
options);
 
     /**
-     * Create user / role on a connector instance.
+     * Create user / group on a connector instance.
      *
      * @param propagationMode propagation mode
      * @param objectClass ConnId's object class
@@ -64,7 +64,7 @@ public interface Connector {
             Set<String> propagationAttempted);
 
     /**
-     * Update user / role on a connector instance.
+     * Update user / group on a connector instance.
      *
      * @param propagationMode propagation mode
      * @param objectClass ConnId's object class
@@ -79,7 +79,7 @@ public interface Connector {
             Set<String> propagationAttempted);
 
     /**
-     * Delete user / role on a connector instance.
+     * Delete user / group on a connector instance.
      *
      * @param propagationMode propagation mode
      * @param objectClass ConnId's object class
@@ -91,7 +91,7 @@ public interface Connector {
             Uid uid, OperationOptions options, Set<String> 
propagationAttempted);
 
     /**
-     * Sync users / roles from a connector instance.
+     * Sync users / groups from a connector instance.
      *
      * @param objectClass ConnId's object class
      * @param token to be passed to the underlying connector

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
new file mode 100644
index 0000000..16ffc7c
--- /dev/null
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
@@ -0,0 +1,37 @@
+/*
+ * 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.provisioning.api;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.syncope.common.lib.mod.GroupMod;
+import org.apache.syncope.common.lib.to.PropagationStatus;
+import org.apache.syncope.common.lib.to.GroupTO;
+
+public interface GroupProvisioningManager extends ProvisioningManager<GroupTO, 
GroupMod> {
+
+    Map.Entry<Long, List<PropagationStatus>> create(GroupTO groupTO, 
Set<String> excludedResources);
+
+    Map.Entry<Long, List<PropagationStatus>> create(
+            GroupTO groupTO, Map<Long, String> groupOwnerMap, Set<String> 
excludedResources);
+
+    Map.Entry<Long, List<PropagationStatus>> update(GroupMod subjectMod, 
Set<String> excludedResources);
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/RoleProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/RoleProvisioningManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/RoleProvisioningManager.java
deleted file mode 100644
index 595af54..0000000
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/RoleProvisioningManager.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.provisioning.api;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.syncope.common.lib.mod.RoleMod;
-import org.apache.syncope.common.lib.to.PropagationStatus;
-import org.apache.syncope.common.lib.to.RoleTO;
-
-public interface RoleProvisioningManager extends ProvisioningManager<RoleTO, 
RoleMod> {
-
-    Map.Entry<Long, List<PropagationStatus>> create(RoleTO roleTO, Set<String> 
excludedResources);
-
-    Map.Entry<Long, List<PropagationStatus>> create(
-            RoleTO roleTO, Map<Long, String> roleOwnerMap, Set<String> 
excludedResources);
-
-    Map.Entry<Long, List<PropagationStatus>> update(RoleMod subjectMod, 
Set<String> excludedResources);
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
index e1964e5..1b3f2ab 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
@@ -32,19 +32,18 @@ public class WorkflowResult<T> {
 
     private PropagationByResource propByRes;
 
-    private Set<String> performedTasks;
+    private final Set<String> performedTasks = new HashSet<>();
 
     public WorkflowResult(final T result, final PropagationByResource 
propByRes, final String performedTask) {
         this.result = result;
         this.propByRes = propByRes;
-        this.performedTasks = new HashSet<>();
         this.performedTasks.add(performedTask);
     }
 
     public WorkflowResult(final T result, final PropagationByResource 
propByRes, final Set<String> performedTasks) {
         this.result = result;
         this.propByRes = propByRes;
-        this.performedTasks = new HashSet<>(performedTasks);
+        this.performedTasks.addAll(performedTasks);
     }
 
     public T getResult() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
index d9df1ef..45256e5 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
@@ -28,8 +28,8 @@ public interface VirAttrCache {
     /**
      * Force entry expiring.
      *
-     * @param type user or role
-     * @param id user or role id
+     * @param type user or group
+     * @param id user or group id
      * @param schemaName virtual attribute schema name
      */
     void expire(AttributableType type, Long id, String schemaName);
@@ -37,8 +37,8 @@ public interface VirAttrCache {
     /**
      * Retrieve cached value. Return null in case of virtual attribute not 
cached.
      *
-     * @param type user or role
-     * @param id user or role id
+     * @param type user or group
+     * @param id user or group id
      * @param schemaName virtual attribute schema name.
      * @return cached values or null if virtual attribute is not cached.
      */
@@ -55,8 +55,8 @@ public interface VirAttrCache {
     /**
      * Cache virtual attribute values.
      *
-     * @param type user or role
-     * @param id user or role id
+     * @param type user or group
+     * @param id user or group id
      * @param schemaName virtual attribute name
      * @param value virtual attribute values
      */

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
index 9d1bd84..0db95ac 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
@@ -47,11 +47,11 @@ public class VirAttrCacheValue {
     public VirAttrCacheValue() {
         this.creationDate = new Date();
         this.lastAccessDate = new Date();
-        values = new HashMap<>();
+        this.values = new HashMap<>();
     }
 
-    public void setResourceValues(final String resourceName, final Set<String> 
values) {
-        this.values.put(resourceName, values);
+    public void setResourceValues(final String resourceName, final Set<String> 
cached) {
+        this.values.put(resourceName, cached);
     }
 
     public Date getCreationDate() {
@@ -80,7 +80,7 @@ public class VirAttrCacheValue {
         return lastAccessDate;
     }
 
-    void setLastAccessDate(final Date lastAccessDate) {
+    public void setLastAccessDate(final Date lastAccessDate) {
         this.lastAccessDate = lastAccessDate;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
new file mode 100644
index 0000000..95df28a
--- /dev/null
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
@@ -0,0 +1,36 @@
+/*
+ * 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.provisioning.api.data;
+
+import org.apache.syncope.common.lib.mod.GroupMod;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.persistence.api.entity.group.Group;
+
+public interface GroupDataBinder {
+
+    GroupTO getGroupTO(Long key);
+
+    GroupTO getGroupTO(Group group);
+
+    Group create(Group group, GroupTO groupTO);
+
+    PropagationByResource update(Group group, GroupMod groupMod);
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RoleDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RoleDataBinder.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RoleDataBinder.java
deleted file mode 100644
index b2da797..0000000
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RoleDataBinder.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.provisioning.api.data;
-
-import org.apache.syncope.common.lib.mod.RoleMod;
-import org.apache.syncope.common.lib.to.RoleTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
-import org.apache.syncope.core.persistence.api.entity.role.Role;
-
-public interface RoleDataBinder {
-
-    RoleTO getRoleTO(Long key);
-
-    RoleTO getRoleTO(Role role);
-
-    Role create(Role role, RoleTO roleTO);
-
-    PropagationByResource update(Role role, RoleMod roleMod);
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/TaskJob.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/TaskJob.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/TaskJob.java
index 9820406..b6efd53 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/TaskJob.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/TaskJob.java
@@ -27,7 +27,7 @@ import org.quartz.Job;
 @DisallowConcurrentExecution
 public interface TaskJob extends Job {
 
-    public static final String DRY_RUN_JOBDETAIL_KEY = "dryRun";
+    String DRY_RUN_JOBDETAIL_KEY = "dryRun";
 
     /**
      * Task execution status.

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
index 98281f2..391ab29 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
@@ -40,9 +40,8 @@ public interface NotificationManager {
     /**
      * Create notification tasks for each notification matching the given user 
id and (some of) tasks performed.
      */
-    void createTasks(final AuditElements.EventCategoryType type, final String 
category, final String subcategory,
-            final String event, final AuditElements.Result condition, final 
Object before, final Object output,
-            final Object... input);
+    void createTasks(AuditElements.EventCategoryType type, String category, 
String subcategory,
+            String event, AuditElements.Result condition, Object before, 
Object output, Object... input);
 
     long getMaxRetries();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index e11c5c8..277dfc9 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -36,102 +36,102 @@ import 
org.apache.syncope.core.provisioning.api.WorkflowResult;
 public interface PropagationManager {
 
     /**
-     * Create the role on every associated resource.
+     * Create the group on every associated resource.
      *
      * @param wfResult user to be propagated (and info associated), as per 
result from workflow
      * @param vAttrs virtual attributes to be set
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleCreateTaskIds(WorkflowResult<Long> wfResult, 
List<AttrTO> vAttrs);
+    List<PropagationTask> getGroupCreateTaskIds(WorkflowResult<Long> wfResult, 
List<AttrTO> vAttrs);
 
     /**
-     * Create the role on every associated resource.
+     * Create the group on every associated resource.
      *
-     * @param wfResult role to be propagated (and info associated), as per 
result from workflow
+     * @param wfResult group to be propagated (and info associated), as per 
result from workflow
      * @param vAttrs virtual attributes to be set
      * @param noPropResourceNames external resources performing not to be 
considered for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleCreateTaskIds(
+    List<PropagationTask> getGroupCreateTaskIds(
             WorkflowResult<Long> wfResult, Collection<AttrTO> vAttrs, 
Collection<String> noPropResourceNames);
 
     /**
-     * Create the role on every associated resource.
+     * Create the group on every associated resource.
      *
-     * @param key role id
+     * @param key group id
      * @param vAttrs virtual attributes to be set
      * @param propByRes operation to be performed per resource
      * @param noPropResourceNames external resources performing not to be 
considered for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleCreateTaskIds(Long key, Collection<AttrTO> 
vAttrs, PropagationByResource propByRes,
+    List<PropagationTask> getGroupCreateTaskIds(Long key, Collection<AttrTO> 
vAttrs, PropagationByResource propByRes,
             Collection<String> noPropResourceNames);
 
     /**
-     * Perform delete on each resource associated to the role. It is possible 
to ask for a mandatory provisioning for
+     * Perform delete on each resource associated to the group. It is possible 
to ask for a mandatory provisioning for
      * some resources specifying a set of resource names. Exceptions won't be 
ignored and the process will be stopped if
      * the creation fails onto a mandatory resource.
      *
-     * @param roleId to be deleted
+     * @param groupId to be deleted
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleDeleteTaskIds(Long roleId);
+    List<PropagationTask> getGroupDeleteTaskIds(Long groupId);
 
     /**
-     * Perform delete on each resource associated to the role. It is possible 
to ask for a mandatory provisioning for
+     * Perform delete on each resource associated to the group. It is possible 
to ask for a mandatory provisioning for
      * some resources specifying a set of resource names. Exceptions won't be 
ignored and the process will be stopped if
      * the creation fails onto a mandatory resource.
      *
-     * @param roleId to be deleted
+     * @param groupId to be deleted
      * @param noPropResourceName name of external resource not to be 
considered for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleDeleteTaskIds(Long roleId, String 
noPropResourceName);
+    List<PropagationTask> getGroupDeleteTaskIds(Long groupId, String 
noPropResourceName);
 
     /**
      * Perform delete on each resource associated to the user. It is possible 
to ask for a mandatory provisioning for
      * some resources specifying a set of resource names. Exceptions won't be 
ignored and the process will be stopped if
      * the creation fails onto a mandatory resource.
      *
-     * @param roleId to be deleted
+     * @param groupId to be deleted
      * @param noPropResourceNames name of external resources not to be 
considered for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleDeleteTaskIds(Long roleId, Collection<String> 
noPropResourceNames);
+    List<PropagationTask> getGroupDeleteTaskIds(Long groupId, 
Collection<String> noPropResourceNames);
 
     /**
      * Perform delete on each resource associated to the user. It is possible 
to ask for a mandatory provisioning for
      * some resources specifying a set of resource names. Exceptions won't be 
ignored and the process will be stopped if
      * the creation fails onto a mandatory resource.
      *
-     * @param roleId to be deleted
+     * @param groupId to be deleted
      * @param noPropResourceNames name of external resources not to be 
considered for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleDeleteTaskIds(
-            Long roleId, Set<String> resourceNames, Collection<String> 
noPropResourceNames);
+    List<PropagationTask> getGroupDeleteTaskIds(
+            Long groupId, Set<String> resourceNames, Collection<String> 
noPropResourceNames);
 
     /**
-     * Performs update on each resource associated to the role.
+     * Performs update on each resource associated to the group.
      *
-     * @param wfResult role to be propagated (and info associated), as per 
result from workflow
+     * @param wfResult group to be propagated (and info associated), as per 
result from workflow
      * @param vAttrsToBeRemoved virtual attributes to be removed
      * @param vAttrsToBeUpdated virtual attributes to be added
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleUpdateTaskIds(WorkflowResult<Long> wfResult, 
Set<String> vAttrsToBeRemoved,
+    List<PropagationTask> getGroupUpdateTaskIds(WorkflowResult<Long> wfResult, 
Set<String> vAttrsToBeRemoved,
             Set<AttrMod> vAttrsToBeUpdated);
 
     /**
-     * Performs update on each resource associated to the role.
+     * Performs update on each resource associated to the group.
      *
-     * @param wfResult role to be propagated (and info associated), as per 
result from workflow
+     * @param wfResult group to be propagated (and info associated), as per 
result from workflow
      * @param vAttrsToBeRemoved virtual attributes to be removed
      * @param vAttrsToBeUpdated virtual attributes to be added
      * @param noPropResourceNames external resource names not to be considered 
for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getRoleUpdateTaskIds(WorkflowResult<Long> wfResult, 
Set<String> vAttrsToBeRemoved,
+    List<PropagationTask> getGroupUpdateTaskIds(WorkflowResult<Long> wfResult, 
Set<String> vAttrsToBeRemoved,
             Set<AttrMod> vAttrsToBeUpdated, Set<String> noPropResourceNames);
 
     List<PropagationTask> getUpdateTaskIds(Subject<?, ?, ?> subject, String 
password, boolean changePwd,

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupPushResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupPushResultHandler.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupPushResultHandler.java
new file mode 100644
index 0000000..d22d4e7
--- /dev/null
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupPushResultHandler.java
@@ -0,0 +1,23 @@
+/*
+ * 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.provisioning.api.sync;
+
+public interface GroupPushResultHandler extends SyncopePushResultHandler {
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupSyncResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupSyncResultHandler.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupSyncResultHandler.java
new file mode 100644
index 0000000..907c29c
--- /dev/null
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/GroupSyncResultHandler.java
@@ -0,0 +1,26 @@
+/*
+ * 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.provisioning.api.sync;
+
+import java.util.Map;
+
+public interface GroupSyncResultHandler extends SyncopeSyncResultHandler {
+
+    Map<Long, String> getGroupOwnerMap();
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningProfile.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningProfile.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningProfile.java
index 3f633a4..6bab515 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningProfile.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningProfile.java
@@ -40,7 +40,7 @@ public class ProvisioningProfile<T extends ProvisioningTask, 
A extends Provision
 
     private ConflictResolutionAction resAct;
 
-    private List<A> actions = new ArrayList<>();
+    private final List<A> actions = new ArrayList<>();
 
     public ProvisioningProfile(final Connector connector, final T task) {
         this.connector = connector;

http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningResult.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningResult.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningResult.java
index 8061dba..a1ccabe 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningResult.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/sync/ProvisioningResult.java
@@ -133,7 +133,7 @@ public class ProvisioningResult {
     public static String produceReport(final Collection<ProvisioningResult> 
results, final TraceLevel level) {
         StringBuilder sb = new StringBuilder();
         for (ProvisioningResult result : results) {
-            sb.append(result.getReportString(level)).append("\n");
+            sb.append(result.getReportString(level)).append('\n');
         }
         return sb.toString();
     }

Reply via email to