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 2013/10/10 16:38:00 UTC

svn commit: r1531003 [6/9] - in /syncope/trunk: ./ common/src/main/java/org/apache/syncope/common/ common/src/main/java/org/apache/syncope/common/mod/ common/src/main/java/org/apache/syncope/common/to/ common/src/main/java/org/apache/syncope/common/uti...

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java Thu Oct 10 14:37:56 2013
@@ -21,21 +21,41 @@ package org.apache.syncope.core.persiste
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.NoResultException;
+import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 
 import org.apache.syncope.common.services.InvalidSearchConditionException;
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.core.persistence.beans.AbstractAttr;
+import org.apache.syncope.core.persistence.beans.AbstractAttrTemplate;
+import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
 import org.apache.syncope.core.persistence.beans.AbstractAttributable;
+import org.apache.syncope.core.persistence.beans.AbstractDerAttr;
 import org.apache.syncope.core.persistence.beans.AbstractVirAttr;
 import org.apache.syncope.core.persistence.beans.Entitlement;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.membership.MAttr;
+import org.apache.syncope.core.persistence.beans.membership.MAttrTemplate;
+import org.apache.syncope.core.persistence.beans.membership.MDerAttr;
+import org.apache.syncope.core.persistence.beans.membership.MDerAttrTemplate;
+import org.apache.syncope.core.persistence.beans.membership.MVirAttr;
+import org.apache.syncope.core.persistence.beans.membership.MVirAttrTemplate;
 import org.apache.syncope.core.persistence.beans.membership.Membership;
+import org.apache.syncope.core.persistence.beans.role.RAttr;
+import org.apache.syncope.core.persistence.beans.role.RAttrTemplate;
 import org.apache.syncope.core.persistence.beans.role.RAttrValue;
+import org.apache.syncope.core.persistence.beans.role.RDerAttr;
+import org.apache.syncope.core.persistence.beans.role.RDerAttrTemplate;
+import org.apache.syncope.core.persistence.beans.role.RVirAttr;
+import org.apache.syncope.core.persistence.beans.role.RVirAttrTemplate;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
 import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.core.persistence.dao.AttrDAO;
+import org.apache.syncope.core.persistence.dao.DerAttrDAO;
 import org.apache.syncope.core.persistence.dao.EntitlementDAO;
 import org.apache.syncope.core.persistence.dao.RoleDAO;
 import org.apache.syncope.core.persistence.dao.UserDAO;
+import org.apache.syncope.core.persistence.dao.VirAttrDAO;
 import org.apache.syncope.core.util.AttributableUtil;
 import org.apache.syncope.core.util.EntitlementUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,6 +68,15 @@ public class RoleDAOImpl extends Abstrac
     private UserDAO userDAO;
 
     @Autowired
+    private AttrDAO attrDAO;
+
+    @Autowired
+    private DerAttrDAO derAttrDAO;
+
+    @Autowired
+    private VirAttrDAO virAttrDAO;
+
+    @Autowired
     private EntitlementDAO entitlementDAO;
 
     @SuppressWarnings("unchecked")
@@ -185,10 +214,15 @@ public class RoleDAOImpl extends Abstrac
     }
 
     @Override
-    public List<SyncopeRole> findByDerAttrValue(final String schemaName, final String value)
-            throws InvalidSearchConditionException {
-
-        return findByDerAttrValue(schemaName, value, AttributableUtil.getInstance(AttributableType.ROLE));
+    protected TypedQuery<AbstractAttrValue> findByAttrValueQuery(final String entityName) {
+        return entityManager.createQuery("SELECT e FROM " + entityName + " e"
+                + " WHERE e.attribute.template.schema.name = :schemaName AND (e.stringValue IS NOT NULL"
+                + " AND e.stringValue = :stringValue)"
+                + " OR (e.booleanValue IS NOT NULL AND e.booleanValue = :booleanValue)"
+                + " OR (e.dateValue IS NOT NULL AND e.dateValue = :dateValue)"
+                + " OR (e.longValue IS NOT NULL AND e.longValue = :longValue)"
+                + " OR (e.doubleValue IS NOT NULL AND e.doubleValue = :doubleValue)",
+                AbstractAttrValue.class);
     }
 
     @Override
@@ -203,6 +237,13 @@ public class RoleDAOImpl extends Abstrac
     }
 
     @Override
+    public List<SyncopeRole> findByDerAttrValue(final String schemaName, final String value)
+            throws InvalidSearchConditionException {
+
+        return findByDerAttrValue(schemaName, value, AttributableUtil.getInstance(AttributableType.ROLE));
+    }
+
+    @Override
     public List<SyncopeRole> findByResource(final ExternalResource resource) {
         return findByResource(resource, SyncopeRole.class);
     }
@@ -223,6 +264,25 @@ public class RoleDAOImpl extends Abstrac
         return query.getResultList();
     }
 
+    @SuppressWarnings("unchecked")
+    private List<Long> unmatched(final Long roleId,
+            final Class<?> attrClass, final Class<? extends AbstractAttrTemplate> attrTemplateClass) {
+
+        final Query query = entityManager.createNativeQuery(new StringBuilder().
+                append("SELECT ma.id ").
+                append("FROM ").append(Membership.class.getSimpleName()).append(" m, ").
+                append(attrClass.getSimpleName()).append(" ma ").
+                append("WHERE m.syncopeRole_id = ?1 ").
+                append("AND ma.owner_id = m.id ").
+                append("AND ma.template_id NOT IN (").
+                append("SELECT id ").
+                append("FROM ").append(attrTemplateClass.getSimpleName()).append(' ').
+                append("WHERE owner_id = ?1)").toString());
+        query.setParameter(1, roleId);
+
+        return query.getResultList();
+    }
+
     @Override
     public SyncopeRole save(final SyncopeRole role) {
         // reset account policy in case of inheritance
@@ -235,9 +295,81 @@ public class RoleDAOImpl extends Abstrac
             role.setPasswordPolicy(null);
         }
 
-        final SyncopeRole merged = entityManager.merge(role);
-        for (AbstractVirAttr virtual : merged.getVirtualAttributes()) {
-            virtual.setValues(role.getVirtualAttribute(virtual.getVirtualSchema().getName()).getValues());
+        // remove attributes without a valid template
+        List<RAttr> rToBeDeleted = new ArrayList<RAttr>();
+        for (AbstractAttr attr : role.getAttrs()) {
+            boolean found = false;
+            for (RAttrTemplate template : role.findInheritedTemplates(RAttrTemplate.class)) {
+                if (template.getSchema().equals(attr.getSchema())) {
+                    found = true;
+                }
+            }
+            if (!found) {
+                rToBeDeleted.add((RAttr) attr);
+            }
+        }
+        for (RAttr attr : rToBeDeleted) {
+            LOG.debug("Removing {} from {} because no template is available for it", attr, role);
+            role.removeAttr(attr);
+        }
+
+        // remove derived attributes without a valid template
+        List<RDerAttr> rDerToBeDeleted = new ArrayList<RDerAttr>();
+        for (AbstractDerAttr attr : role.getDerAttrs()) {
+            boolean found = false;
+            for (RDerAttrTemplate template : role.findInheritedTemplates(RDerAttrTemplate.class)) {
+                if (template.getSchema().equals(attr.getSchema())) {
+                    found = true;
+                }
+            }
+            if (!found) {
+                rDerToBeDeleted.add((RDerAttr) attr);
+            }
+        }
+        for (RDerAttr attr : rDerToBeDeleted) {
+            LOG.debug("Removing {} from {} because no template is available for it", attr, role);
+            role.removeDerAttr(attr);
+        }
+
+        // remove virtual attributes without a valid template
+        List<RVirAttr> rVirToBeDeleted = new ArrayList<RVirAttr>();
+        for (AbstractVirAttr attr : role.getVirAttrs()) {
+            boolean found = false;
+            for (RVirAttrTemplate template : role.findInheritedTemplates(RVirAttrTemplate.class)) {
+                if (template.getSchema().equals(attr.getSchema())) {
+                    found = true;
+                }
+            }
+            if (!found) {
+                LOG.debug("Removing {} from {} because no template is available for it", attr, role);
+                rVirToBeDeleted.add((RVirAttr) attr);
+            }
+        }
+        for (RVirAttr attr : rVirToBeDeleted) {
+            role.removeVirAttr(attr);
+        }
+        
+        SyncopeRole merged = entityManager.merge(role);
+        
+        // Now the same process for any exising membership of the role being saved
+        if (role.getId() != null) {
+            for (Long id : unmatched(role.getId(), MAttr.class, MAttrTemplate.class)) {
+                LOG.debug("Removing MAttr[{}] because no template is available for it in {}", id, role);
+                attrDAO.delete(id, MAttr.class);
+            }
+            for (Long id : unmatched(role.getId(), MDerAttr.class, MDerAttrTemplate.class)) {
+                LOG.debug("Removing MDerAttr[{}] because no template is available for it in {}", id, role);
+                derAttrDAO.delete(id, MDerAttr.class);
+            }
+            for (Long id : unmatched(role.getId(), MVirAttr.class, MVirAttrTemplate.class)) {
+                LOG.debug("Removing MVirAttr[{}] because no template is available for it in {}", id, role);
+                virAttrDAO.delete(id, MVirAttr.class);
+            }
+        }
+
+        merged = entityManager.merge(merged);
+        for (AbstractVirAttr attr : merged.getVirAttrs()) {
+            attr.setValues(role.getVirAttr(attr.getSchema().getName()).getValues());
         }
 
         entitlementDAO.saveEntitlementRole(merged);

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SchemaDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SchemaDAOImpl.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SchemaDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SchemaDAOImpl.java Thu Oct 10 14:37:56 2013
@@ -19,13 +19,17 @@
 package org.apache.syncope.core.persistence.dao.impl;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import javax.persistence.TypedQuery;
+import org.apache.syncope.common.types.AttributableType;
 import org.apache.syncope.core.persistence.beans.AbstractAttr;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
+import org.apache.syncope.core.persistence.beans.user.UAttr;
 import org.apache.syncope.core.persistence.beans.user.UMappingItem;
 import org.apache.syncope.core.persistence.dao.AttrDAO;
+import org.apache.syncope.core.persistence.dao.AttrTemplateDAO;
 import org.apache.syncope.core.persistence.dao.ResourceDAO;
 import org.apache.syncope.core.persistence.dao.SchemaDAO;
 import org.apache.syncope.core.util.AttributableUtil;
@@ -36,53 +40,70 @@ import org.springframework.stereotype.Re
 public class SchemaDAOImpl extends AbstractDAOImpl implements SchemaDAO {
 
     @Autowired
-    private AttrDAO attributeDAO;
+    private AttrDAO attrDAO;
+
+    @Autowired
+    private AttrTemplateDAO attrTemplateDAO;
 
     @Autowired
     private ResourceDAO resourceDAO;
 
     @Override
-    public <T extends AbstractSchema> T find(final String name, final Class<T> reference) {
+    public <T extends AbstractNormalSchema> T find(final String name, final Class<T> reference) {
 
         return entityManager.find(reference, name);
     }
 
     @Override
-    public <T extends AbstractSchema> List<T> findAll(final Class<T> reference) {
+    public <T extends AbstractNormalSchema> List<T> findAll(final Class<T> reference) {
         TypedQuery<T> query = entityManager.createQuery("SELECT e FROM " + reference.getSimpleName() + " e", reference);
 
         return query.getResultList();
     }
 
     @Override
-    public <T extends AbstractAttr> List<T> getAttributes(final AbstractSchema schema, final Class<T> reference) {
-        TypedQuery<T> query = entityManager.createQuery("SELECT e FROM " + reference.getSimpleName() + " e"
-                + " WHERE e.schema=:schema", reference);
+    public <T extends AbstractAttr> List<T> findAttrs(final AbstractNormalSchema schema, final Class<T> reference) {
+        final StringBuilder queryString =
+                new StringBuilder("SELECT e FROM ").append(reference.getSimpleName()).append(" e WHERE e.");
+        if (!reference.equals(UAttr.class)) {
+            queryString.append("template.");
+        }
+        queryString.append("schema=:schema");
+
+        TypedQuery<T> query = entityManager.createQuery(queryString.toString(), reference);
         query.setParameter("schema", schema);
 
         return query.getResultList();
     }
 
     @Override
-    public <T extends AbstractSchema> T save(final T schema) {
+    public <T extends AbstractNormalSchema> T save(final T schema) {
         return entityManager.merge(schema);
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public void delete(final String name, final AttributableUtil attributableUtil) {
-        AbstractSchema schema = find(name, attributableUtil.schemaClass());
+        AbstractNormalSchema schema = find(name, attributableUtil.schemaClass());
         if (schema == null) {
             return;
         }
 
-        List<? extends AbstractAttr> attributes = getAttributes(schema, attributableUtil.attrClass());
-
-        Set<Long> attributeIds = new HashSet<Long>(attributes.size());
-        for (AbstractAttr attribute : attributes) {
-            attributeIds.add(attribute.getId());
+        final Set<Long> attrIds = new HashSet<Long>();
+        for (AbstractAttr attr : findAttrs(schema, attributableUtil.attrClass())) {
+            attrIds.add(attr.getId());
+        }
+        for (Long attrId : attrIds) {
+            attrDAO.delete(attrId, attributableUtil.attrClass());
         }
-        for (Long attributeId : attributeIds) {
-            attributeDAO.delete(attributeId, attributableUtil.attrClass());
+
+        if (attributableUtil.getType() != AttributableType.USER) {
+            for (Iterator<Number> it = attrTemplateDAO.
+                    findBySchemaName(schema.getName(), attributableUtil.attrTemplateClass()).iterator();
+                    it.hasNext();) {
+
+                attrTemplateDAO.delete(it.next().longValue(), attributableUtil.attrTemplateClass());
+            }
         }
 
         resourceDAO.deleteMapping(name, attributableUtil.intMappingType(), UMappingItem.class);

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java Thu Oct 10 14:37:56 2013
@@ -27,6 +27,7 @@ import javax.persistence.TypedQuery;
 
 import org.apache.syncope.common.services.InvalidSearchConditionException;
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
 import org.apache.syncope.core.persistence.beans.AbstractAttributable;
 import org.apache.syncope.core.persistence.beans.AbstractVirAttr;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
@@ -100,10 +101,15 @@ public class UserDAOImpl extends Abstrac
     }
 
     @Override
-    public List<SyncopeUser> findByDerAttrValue(final String schemaName, final String value)
-            throws InvalidSearchConditionException {
-
-        return findByDerAttrValue(schemaName, value, AttributableUtil.getInstance(AttributableType.USER));
+    protected TypedQuery<AbstractAttrValue> findByAttrValueQuery(final String entityName) {
+        return entityManager.createQuery("SELECT e FROM " + entityName + " e"
+                + " WHERE e.attribute.schema.name = :schemaName AND (e.stringValue IS NOT NULL"
+                + " AND e.stringValue = :stringValue)"
+                + " OR (e.booleanValue IS NOT NULL AND e.booleanValue = :booleanValue)"
+                + " OR (e.dateValue IS NOT NULL AND e.dateValue = :dateValue)"
+                + " OR (e.longValue IS NOT NULL AND e.longValue = :longValue)"
+                + " OR (e.doubleValue IS NOT NULL AND e.doubleValue = :doubleValue)",
+                AbstractAttrValue.class);
     }
 
     @Override
@@ -118,6 +124,13 @@ public class UserDAOImpl extends Abstrac
     }
 
     @Override
+    public List<SyncopeUser> findByDerAttrValue(final String schemaName, final String value)
+            throws InvalidSearchConditionException {
+
+        return findByDerAttrValue(schemaName, value, AttributableUtil.getInstance(AttributableType.USER));
+    }
+
+    @Override
     public List<SyncopeUser> findByResource(final ExternalResource resource) {
         return findByResource(resource, SyncopeUser.class);
     }
@@ -212,8 +225,8 @@ public class UserDAOImpl extends Abstrac
     @Override
     public SyncopeUser save(final SyncopeUser user) {
         final SyncopeUser merged = entityManager.merge(user);
-        for (AbstractVirAttr virtual : merged.getVirtualAttributes()) {
-            virtual.setValues(user.getVirtualAttribute(virtual.getVirtualSchema().getName()).getValues());
+        for (AbstractVirAttr virtual : merged.getVirAttrs()) {
+            virtual.setValues(user.getVirAttr(virtual.getSchema().getName()).getValues());
         }
 
         return merged;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirAttrDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirAttrDAOImpl.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirAttrDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirAttrDAOImpl.java Thu Oct 10 14:37:56 2013
@@ -40,26 +40,26 @@ public class VirAttrDAOImpl extends Abst
     }
 
     @Override
-    public <T extends AbstractVirAttr> T save(final T virtualAttribute) {
-        return entityManager.merge(virtualAttribute);
+    public <T extends AbstractVirAttr> T save(final T virAttr) {
+        return entityManager.merge(virAttr);
     }
 
     @Override
     public <T extends AbstractVirAttr> void delete(final Long id, final Class<T> reference) {
-        T virtualAttribute = find(id, reference);
-        if (virtualAttribute == null) {
+        T virAttr = find(id, reference);
+        if (virAttr == null) {
             return;
         }
 
-        delete(virtualAttribute);
+        delete(virAttr);
     }
 
     @Override
-    public <T extends AbstractVirAttr> void delete(final T virtualAttribute) {
-        if (virtualAttribute.getOwner() != null) {
-            virtualAttribute.getOwner().removeVirtualAttribute(virtualAttribute);
+    public <T extends AbstractVirAttr> void delete(final T virAttr) {
+        if (virAttr.getOwner() != null) {
+            virAttr.getOwner().removeVirAttr(virAttr);
         }
 
-        entityManager.remove(virtualAttribute);
+        entityManager.remove(virAttr);
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirSchemaDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirSchemaDAOImpl.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirSchemaDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/VirSchemaDAOImpl.java Thu Oct 10 14:37:56 2013
@@ -19,12 +19,16 @@
 package org.apache.syncope.core.persistence.dao.impl;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import javax.persistence.TypedQuery;
+import org.apache.syncope.common.types.AttributableType;
 import org.apache.syncope.core.persistence.beans.AbstractVirAttr;
 import org.apache.syncope.core.persistence.beans.AbstractVirSchema;
 import org.apache.syncope.core.persistence.beans.user.UMappingItem;
+import org.apache.syncope.core.persistence.beans.user.UVirAttr;
+import org.apache.syncope.core.persistence.dao.AttrTemplateDAO;
 import org.apache.syncope.core.persistence.dao.ResourceDAO;
 import org.apache.syncope.core.persistence.dao.VirAttrDAO;
 import org.apache.syncope.core.persistence.dao.VirSchemaDAO;
@@ -36,7 +40,10 @@ import org.springframework.stereotype.Re
 public class VirSchemaDAOImpl extends AbstractDAOImpl implements VirSchemaDAO {
 
     @Autowired
-    private VirAttrDAO virtualAttributeDAO;
+    private VirAttrDAO virAttrDAO;
+
+    @Autowired
+    private AttrTemplateDAO attrTemplateDAO;
 
     @Autowired
     private ResourceDAO resourceDAO;
@@ -53,46 +60,56 @@ public class VirSchemaDAOImpl extends Ab
     }
 
     @Override
-    public <T extends AbstractVirSchema> T save(final T virtualSchema) {
-        return entityManager.merge(virtualSchema);
-    }
-
-    @Override
-    public void delete(final String name, final AttributableUtil attributableUtil) {
-        final AbstractVirSchema virtualSchema = find(name, attributableUtil.virSchemaClass());
+    public <T extends AbstractVirAttr> List<T> findAttrs(
+            final AbstractVirSchema schema, final Class<T> reference) {
 
-        if (virtualSchema == null) {
-            return;
+        final StringBuilder queryString =
+                new StringBuilder("SELECT e FROM ").append(reference.getSimpleName()).append(" e WHERE e.");
+        if (reference.equals(UVirAttr.class)) {
+            queryString.append("virSchema");
+        } else {
+            queryString.append("template.schema");
         }
+        queryString.append("=:schema");
 
-        List<? extends AbstractVirAttr> attributes = getAttributes(virtualSchema, attributableUtil.virAttrClass());
+        TypedQuery<T> query = entityManager.createQuery(queryString.toString(), reference);
+        query.setParameter("schema", schema);
 
-        final Set<Long> virAttrIds = new HashSet<Long>(attributes.size());
+        return query.getResultList();
+    }
 
-        Class<? extends AbstractVirAttr> attributeClass = null;
+    @Override
+    public <T extends AbstractVirSchema> T save(final T virSchema) {
+        return entityManager.merge(virSchema);
+    }
 
-        for (AbstractVirAttr attribute : attributes) {
-            virAttrIds.add(attribute.getId());
-            attributeClass = attribute.getClass();
+    @Override
+    @SuppressWarnings("unchecked")
+    public void delete(final String name, final AttributableUtil attributableUtil) {
+        final AbstractVirSchema schema = find(name, attributableUtil.virSchemaClass());
+        if (schema == null) {
+            return;
         }
 
-        for (Long virtualAttributeId : virAttrIds) {
-            virtualAttributeDAO.delete(virtualAttributeId, attributeClass);
+        final Set<Long> attrIds = new HashSet<Long>();
+        for (AbstractVirAttr attr : findAttrs(schema, attributableUtil.virAttrClass())) {
+            attrIds.add(attr.getId());
+        }
+        for (Long attrId : attrIds) {
+            virAttrDAO.delete(attrId, attributableUtil.virAttrClass());
         }
 
-        resourceDAO.deleteMapping(name, attributableUtil.virIntMappingType(), UMappingItem.class);
+        if (attributableUtil.getType() != AttributableType.USER) {
+            for (Iterator<Number> it = attrTemplateDAO.
+                    findBySchemaName(schema.getName(), attributableUtil.virAttrTemplateClass()).iterator();
+                    it.hasNext();) {
 
-        entityManager.remove(virtualSchema);
-    }
-
-    @Override
-    public <T extends AbstractVirAttr> List<T> getAttributes(final AbstractVirSchema virtualSchema,
-            final Class<T> reference) {
+                attrTemplateDAO.delete(it.next().longValue(), attributableUtil.virAttrTemplateClass());
+            }
+        }
 
-        TypedQuery<T> query = entityManager.createQuery("SELECT e FROM " + reference.getSimpleName() + " e"
-                + " WHERE e.virtualSchema=:schema", reference);
-        query.setParameter("schema", virtualSchema);
+        resourceDAO.deleteMapping(name, attributableUtil.virIntMappingType(), UMappingItem.class);
 
-        return query.getResultList();
+        entityManager.remove(schema);
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AbstractValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AbstractValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AbstractValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AbstractValidator.java Thu Oct 10 14:37:56 2013
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persiste
 import java.io.Serializable;
 
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,9 +34,9 @@ public abstract class AbstractValidator 
      */
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractValidator.class);
 
-    protected final AbstractSchema schema;
+    protected final AbstractNormalSchema schema;
 
-    public AbstractValidator(final AbstractSchema schema) {
+    public AbstractValidator(final AbstractNormalSchema schema) {
         this.schema = schema;
     }
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AlwaysTrueValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AlwaysTrueValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AlwaysTrueValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/AlwaysTrueValidator.java Thu Oct 10 14:37:56 2013
@@ -19,13 +19,13 @@
 package org.apache.syncope.core.persistence.validation.attrvalue;
 
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 
 public class AlwaysTrueValidator extends AbstractValidator {
 
     private static final long serialVersionUID = 872107345555773183L;
 
-    public AlwaysTrueValidator(final AbstractSchema schema) {
+    public AlwaysTrueValidator(final AbstractNormalSchema schema) {
         super(schema);
     }
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/BasicValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/BasicValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/BasicValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/BasicValidator.java Thu Oct 10 14:37:56 2013
@@ -19,22 +19,23 @@
 package org.apache.syncope.core.persistence.validation.attrvalue;
 
 import java.util.Arrays;
+import org.apache.syncope.common.SyncopeConstants;
 import org.apache.syncope.common.types.AttributeSchemaType;
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 
 public class BasicValidator extends AbstractValidator {
 
     private static final long serialVersionUID = -2606728447694223607L;
 
-    public BasicValidator(final AbstractSchema schema) {
+    public BasicValidator(final AbstractNormalSchema schema) {
         super(schema);
     }
 
     @Override
     protected void doValidate(final AbstractAttrValue attributeValue) throws InvalidAttrValueException {
         if (AttributeSchemaType.Enum.equals(schema.getType())) {
-            final String[] enumeration = schema.getEnumerationValues().split(AbstractSchema.enumValuesSeparator);
+            final String[] enumeration = schema.getEnumerationValues().split(SyncopeConstants.ENUM_VALUES_SEPARATOR);
 
             final String value = attributeValue.getStringValue();
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java Thu Oct 10 14:37:56 2013
@@ -22,7 +22,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 
 public class EmailAddressValidator extends AbstractValidator {
 
@@ -33,7 +33,7 @@ public class EmailAddressValidator exten
             + "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
             Pattern.CASE_INSENSITIVE);
 
-    public EmailAddressValidator(final AbstractSchema schema) {
+    public EmailAddressValidator(final AbstractNormalSchema schema) {
         super(schema);
     }
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java Thu Oct 10 14:37:56 2013
@@ -22,7 +22,7 @@ import javax.validation.ConstraintValida
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.AbstractAttrUniqueValue;
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 
 public class AttrValueValidator extends AbstractValidator<AttrValueCheck, AbstractAttrValue> {
 
@@ -60,8 +60,8 @@ public class AttrValueValidator extends 
                         addNode(object.getClass().getSimpleName().replaceAll("\\n", " ")).addConstraintViolation();
 
             } else if (object instanceof AbstractAttrUniqueValue) {
-                AbstractSchema uniqueValueSchema = ((AbstractAttrUniqueValue) object).getSchema();
-                AbstractSchema attrSchema = object.getAttribute().getSchema();
+                AbstractNormalSchema uniqueValueSchema = ((AbstractAttrUniqueValue) object).getSchema();
+                AbstractNormalSchema attrSchema = object.getAttribute().getSchema();
 
                 isValid = uniqueValueSchema.equals(attrSchema);
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java Thu Oct 10 14:37:56 2013
@@ -23,12 +23,12 @@ import org.apache.commons.lang3.StringUt
 
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.common.types.AttributeSchemaType;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 
-public class SchemaValidator extends AbstractValidator<SchemaCheck, AbstractSchema> {
+public class SchemaValidator extends AbstractValidator<SchemaCheck, AbstractNormalSchema> {
 
     @Override
-    public boolean isValid(final AbstractSchema schema, final ConstraintValidatorContext context) {
+    public boolean isValid(final AbstractNormalSchema schema, final ConstraintValidatorContext context) {
         boolean isValid = schema.getType() != AttributeSchemaType.Enum
                 || StringUtils.isNotBlank(schema.getEnumerationValues());
         if (!isValid) {

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEvaluator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEvaluator.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEvaluator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEvaluator.java Thu Oct 10 14:37:56 2013
@@ -55,7 +55,7 @@ public class PolicyEvaluator {
                 BeanUtils.copyProperties(ppSpec, evaluatedPPSpec, new String[]{"schemasNotPermitted"});
 
                 for (String schema : ppSpec.getSchemasNotPermitted()) {
-                    AbstractAttr attribute = attributable.getAttribute(schema);
+                    AbstractAttr attribute = attributable.getAttr(schema);
                     if (attribute != null) {
                         List<String> values = attribute.getValuesAsStrings();
                         if (values != null && !values.isEmpty()) {
@@ -86,7 +86,7 @@ public class PolicyEvaluator {
                 BeanUtils.copyProperties(spec, accountPolicy, new String[]{"schemasNotPermitted"});
 
                 for (String schema : spec.getSchemasNotPermitted()) {
-                    AbstractAttr attribute = attributable.getAttribute(schema);
+                    AbstractAttr attribute = attributable.getAttr(schema);
                     if (attribute != null) {
                         List<String> values = attribute.getValuesAsStrings();
                         if (values != null && !values.isEmpty()) {

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/LDAPMembershipPropagationActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/LDAPMembershipPropagationActions.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/LDAPMembershipPropagationActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/LDAPMembershipPropagationActions.java Thu Oct 10 14:37:56 2013
@@ -84,8 +84,8 @@ public class LDAPMembershipPropagationAc
 
                         final JexlContext jexlContext = new MapContext();
                         jexlUtil.addFieldsToContext(role, jexlContext);
-                        jexlUtil.addAttrsToContext(role.getAttributes(), jexlContext);
-                        jexlUtil.addDerAttrsToContext(role.getDerivedAttributes(), role.getAttributes(), jexlContext);
+                        jexlUtil.addAttrsToContext(role.getAttrs(), jexlContext);
+                        jexlUtil.addDerAttrsToContext(role.getDerAttrs(), role.getAttrs(), jexlContext);
                         final String roleAccountLink =
                                 jexlUtil.evaluate(task.getResource().getRmapping().getAccountLink(), jexlContext);
                         LOG.debug("AccountLink for {} is '{}'", role, roleAccountLink);

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/PropagationManager.java Thu Oct 10 14:37:56 2013
@@ -494,7 +494,7 @@ public class PropagationManager {
             final Map<String, AttributeMod> vAttrsToBeUpdated, final Boolean enable, final ExternalResource resource) {
 
         LOG.debug("Preparing resource attributes for {} on resource {} with attributes {}",
-                subject, resource, subject.getAttributes());
+                subject, resource, subject.getAttrs());
 
         Set<Attribute> attributes = new HashSet<Attribute>();
         String accountId = null;
@@ -576,8 +576,8 @@ public class PropagationManager {
             connObjectUtil.retrieveVirAttrValues(subject, attrUtil);
 
             // update vAttrsToBeUpdated as well
-            for (AbstractVirAttr virAttr : subject.getVirtualAttributes()) {
-                final String schema = virAttr.getVirtualSchema().getName();
+            for (AbstractVirAttr virAttr : subject.getVirAttrs()) {
+                final String schema = virAttr.getSchema().getName();
 
                 final AttributeMod attributeMod = new AttributeMod();
                 attributeMod.setSchema(schema);

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/report/AbstractReportlet.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/report/AbstractReportlet.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/report/AbstractReportlet.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/report/AbstractReportlet.java Thu Oct 10 14:37:56 2013
@@ -18,11 +18,6 @@
  */
 package org.apache.syncope.core.report;
 
-import static org.apache.syncope.core.report.ReportXMLConst.ATTR_CLASS;
-import static org.apache.syncope.core.report.ReportXMLConst.ATTR_NAME;
-import static org.apache.syncope.core.report.ReportXMLConst.ELEMENT_REPORTLET;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_STRING;
-
 import org.apache.syncope.common.report.AbstractReportletConf;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,12 +55,12 @@ public abstract class AbstractReportlet<
         }
 
         AttributesImpl atts = new AttributesImpl();
-        atts.addAttribute("", "", ATTR_NAME, XSD_STRING, conf.getName());
-        atts.addAttribute("", "", ATTR_CLASS, XSD_STRING, getClass().getName());
-        handler.startElement("", "", ELEMENT_REPORTLET, atts);
+        atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, conf.getName());
+        atts.addAttribute("", "", ReportXMLConst.ATTR_CLASS, ReportXMLConst.XSD_STRING, getClass().getName());
+        handler.startElement("", "", ReportXMLConst.ELEMENT_REPORTLET, atts);
 
         doExtract(handler);
 
-        handler.endElement("", "", ELEMENT_REPORTLET);
+        handler.endElement("", "", ReportXMLConst.ELEMENT_REPORTLET);
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/report/ReportJob.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/report/ReportJob.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/report/ReportJob.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/report/ReportJob.java Thu Oct 10 14:37:56 2013
@@ -18,10 +18,6 @@
  */
 package org.apache.syncope.core.report;
 
-import static org.apache.syncope.core.report.ReportXMLConst.ATTR_NAME;
-import static org.apache.syncope.core.report.ReportXMLConst.ELEMENT_REPORT;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_STRING;
-
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -148,8 +144,8 @@ public class ReportJob implements Job {
             // report header
             handler.startDocument();
             AttributesImpl atts = new AttributesImpl();
-            atts.addAttribute("", "", ATTR_NAME, XSD_STRING, report.getName());
-            handler.startElement("", "", ELEMENT_REPORT, atts);
+            atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, report.getName());
+            handler.startElement("", "", ReportXMLConst.ELEMENT_REPORT, atts);
 
             // iterate over reportlet instances defined for this report
             for (ReportletConf reportletConf : report.getReportletConfs()) {
@@ -177,7 +173,7 @@ public class ReportJob implements Job {
             }
 
             // report footer
-            handler.endElement("", "", ELEMENT_REPORT);
+            handler.endElement("", "", ReportXMLConst.ELEMENT_REPORT);
             handler.endDocument();
 
             if (!ReportExecStatus.FAILURE.name().equals(execution.getStatus())) {

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java Thu Oct 10 14:37:56 2013
@@ -18,10 +18,6 @@
  */
 package org.apache.syncope.core.report;
 
-import static org.apache.syncope.core.report.ReportXMLConst.ATTR_NAME;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_LONG;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_STRING;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -97,7 +93,7 @@ public class RoleReportlet extends Abstr
             for (String resourceName : attributableTO.getResources()) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, resourceName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, resourceName);
                 handler.startElement("", "", "resource", atts);
                 handler.endElement("", "", "resource");
             }
@@ -112,13 +108,13 @@ public class RoleReportlet extends Abstr
 
         AttributesImpl atts = new AttributesImpl();
         if (!attrs.isEmpty()) {
-            Map<String, AttributeTO> attrMap = attributableTO.getAttributeMap();
+            Map<String, AttributeTO> attrMap = attributableTO.getAttrMap();
 
             handler.startElement("", "", "attributes", null);
             for (String attrName : attrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "attribute", atts);
 
                 if (attrMap.containsKey(attrName)) {
@@ -138,13 +134,13 @@ public class RoleReportlet extends Abstr
         }
 
         if (!derAttrs.isEmpty()) {
-            Map<String, AttributeTO> derAttrMap = attributableTO.getDerivedAttributeMap();
+            Map<String, AttributeTO> derAttrMap = attributableTO.getDerAttrMap();
 
             handler.startElement("", "", "derivedAttributes", null);
             for (String attrName : derAttrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "derivedAttribute", atts);
 
                 if (derAttrMap.containsKey(attrName)) {
@@ -164,13 +160,13 @@ public class RoleReportlet extends Abstr
         }
 
         if (!virAttrs.isEmpty()) {
-            Map<String, AttributeTO> virAttrMap = attributableTO.getVirtualAttributeMap();
+            Map<String, AttributeTO> virAttrMap = attributableTO.getVirAttrMap();
 
             handler.startElement("", "", "virtualAttributes", null);
             for (String attrName : virAttrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "virtualAttribute", atts);
 
                 if (virAttrMap.containsKey(attrName)) {
@@ -202,22 +198,22 @@ public class RoleReportlet extends Abstr
                 String value = null;
                 switch (feature) {
                     case id:
-                        type = XSD_LONG;
+                        type = ReportXMLConst.XSD_LONG;
                         value = String.valueOf(role.getId());
                         break;
 
                     case name:
-                        type = XSD_STRING;
+                        type = ReportXMLConst.XSD_STRING;
                         value = String.valueOf(role.getName());
                         break;
 
                     case roleOwner:
-                        type = XSD_LONG;
+                        type = ReportXMLConst.XSD_LONG;
                         value = String.valueOf(role.getRoleOwner());
                         break;
 
                     case userOwner:
-                        type = XSD_LONG;
+                        type = ReportXMLConst.XSD_LONG;
                         value = String.valueOf(role.getUserOwner());
                         break;
 
@@ -244,7 +240,7 @@ public class RoleReportlet extends Abstr
                 for (String ent : roleTO.getEntitlements()) {
                     atts.clear();
 
-                    atts.addAttribute("", "", "id", XSD_STRING, String.valueOf(ent));
+                    atts.addAttribute("", "", "id", ReportXMLConst.XSD_STRING, String.valueOf(ent));
 
                     handler.startElement("", "", "entitlement", atts);
                     handler.endElement("", "", "entitlement");
@@ -263,9 +259,10 @@ public class RoleReportlet extends Abstr
                 for (Membership memb : roleDAO.findMemberships(role)) {
                     atts.clear();
 
-                    atts.addAttribute("", "", "userId", XSD_LONG, String.valueOf(memb.getSyncopeUser().getId()));
-                    atts.addAttribute("", "", "userUsername", XSD_STRING, String.valueOf(memb.getSyncopeUser().
-                            getUsername()));
+                    atts.addAttribute("", "", "userId", ReportXMLConst.XSD_LONG,
+                            String.valueOf(memb.getSyncopeUser().getId()));
+                    atts.addAttribute("", "", "userUsername", ReportXMLConst.XSD_STRING,
+                            String.valueOf(memb.getSyncopeUser().getUsername()));
 
                     handler.startElement("", "", "user", atts);
                     handler.endElement("", "", "user");

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java Thu Oct 10 14:37:56 2013
@@ -18,12 +18,6 @@
  */
 package org.apache.syncope.core.report;
 
-import static org.apache.syncope.core.report.ReportXMLConst.ATTR_NAME;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_DATETIME;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_INT;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_LONG;
-import static org.apache.syncope.core.report.ReportXMLConst.XSD_STRING;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -107,7 +101,7 @@ public class UserReportlet extends Abstr
             for (String resourceName : attributableTO.getResources()) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, resourceName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, resourceName);
                 handler.startElement("", "", "resource", atts);
                 handler.endElement("", "", "resource");
             }
@@ -122,13 +116,13 @@ public class UserReportlet extends Abstr
 
         AttributesImpl atts = new AttributesImpl();
         if (!attrs.isEmpty()) {
-            Map<String, AttributeTO> attrMap = attributableTO.getAttributeMap();
+            Map<String, AttributeTO> attrMap = attributableTO.getAttrMap();
 
             handler.startElement("", "", "attributes", null);
             for (String attrName : attrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "attribute", atts);
 
                 if (attrMap.containsKey(attrName)) {
@@ -148,13 +142,13 @@ public class UserReportlet extends Abstr
         }
 
         if (!derAttrs.isEmpty()) {
-            Map<String, AttributeTO> derAttrMap = attributableTO.getDerivedAttributeMap();
+            Map<String, AttributeTO> derAttrMap = attributableTO.getDerAttrMap();
 
             handler.startElement("", "", "derivedAttributes", null);
             for (String attrName : derAttrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "derivedAttribute", atts);
 
                 if (derAttrMap.containsKey(attrName)) {
@@ -174,13 +168,13 @@ public class UserReportlet extends Abstr
         }
 
         if (!virAttrs.isEmpty()) {
-            Map<String, AttributeTO> virAttrMap = attributableTO.getVirtualAttributeMap();
+            Map<String, AttributeTO> virAttrMap = attributableTO.getVirAttrMap();
 
             handler.startElement("", "", "virtualAttributes", null);
             for (String attrName : virAttrs) {
                 atts.clear();
 
-                atts.addAttribute("", "", ATTR_NAME, XSD_STRING, attrName);
+                atts.addAttribute("", "", ReportXMLConst.ATTR_NAME, ReportXMLConst.XSD_STRING, attrName);
                 handler.startElement("", "", "virtualAttribute", atts);
 
                 if (virAttrMap.containsKey(attrName)) {
@@ -212,53 +206,53 @@ public class UserReportlet extends Abstr
                 String value = null;
                 switch (feature) {
                     case id:
-                        type = XSD_LONG;
+                        type = ReportXMLConst.XSD_LONG;
                         value = String.valueOf(user.getId());
                         break;
 
                     case username:
-                        type = XSD_STRING;
+                        type = ReportXMLConst.XSD_STRING;
                         value = user.getUsername();
                         break;
 
                     case workflowId:
-                        type = XSD_LONG;
+                        type = ReportXMLConst.XSD_LONG;
                         value = String.valueOf(user.getWorkflowId());
                         break;
 
                     case status:
-                        type = XSD_STRING;
+                        type = ReportXMLConst.XSD_STRING;
                         value = user.getStatus();
                         break;
 
                     case creationDate:
-                        type = XSD_DATETIME;
+                        type = ReportXMLConst.XSD_DATETIME;
                         value = user.getCreationDate() == null
                                 ? ""
                                 : DataFormat.format(user.getCreationDate());
                         break;
 
                     case lastLoginDate:
-                        type = XSD_DATETIME;
+                        type = ReportXMLConst.XSD_DATETIME;
                         value = user.getLastLoginDate() == null
                                 ? ""
                                 : DataFormat.format(user.getLastLoginDate());
                         break;
 
                     case changePwdDate:
-                        type = XSD_DATETIME;
+                        type = ReportXMLConst.XSD_DATETIME;
                         value = user.getChangePwdDate() == null
                                 ? ""
                                 : DataFormat.format(user.getChangePwdDate());
                         break;
 
                     case passwordHistorySize:
-                        type = XSD_INT;
+                        type = ReportXMLConst.XSD_INT;
                         value = String.valueOf(user.getPasswordHistory().size());
                         break;
 
                     case failedLoginCount:
-                        type = XSD_INT;
+                        type = ReportXMLConst.XSD_INT;
                         value = String.valueOf(user.getFailedLogins());
                         break;
 
@@ -284,13 +278,13 @@ public class UserReportlet extends Abstr
                 for (MembershipTO memb : userTO.getMemberships()) {
                     atts.clear();
 
-                    atts.addAttribute("", "", "id", XSD_LONG, String.valueOf(memb.getId()));
-                    atts.addAttribute("", "", "roleId", XSD_LONG, String.valueOf(memb.getRoleId()));
-                    atts.addAttribute("", "", "roleName", XSD_STRING, String.valueOf(memb.getRoleName()));
+                    atts.addAttribute("", "", "id", ReportXMLConst.XSD_LONG, String.valueOf(memb.getId()));
+                    atts.addAttribute("", "", "roleId", ReportXMLConst.XSD_LONG, String.valueOf(memb.getRoleId()));
+                    atts.addAttribute("", "", "roleName", ReportXMLConst.XSD_STRING, String.valueOf(memb.getRoleName()));
                     handler.startElement("", "", "membership", atts);
 
-                    doExtractAttributes(handler, memb, memb.getAttributeMap().keySet(), memb.getDerivedAttributeMap()
-                            .keySet(), memb.getVirtualAttributeMap().keySet());
+                    doExtractAttributes(handler, memb, memb.getAttrMap().keySet(), memb.getDerAttrMap()
+                            .keySet(), memb.getVirAttrMap().keySet());
 
                     if (conf.getFeatures().contains(Feature.resources)) {
                         Membership actualMemb = user.getMembership(memb.getRoleId());

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java Thu Oct 10 14:37:56 2013
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.core.rest.controller;
 
-import static org.apache.syncope.core.rest.controller.AbstractController.LOG;
-
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Collections;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java Thu Oct 10 14:37:56 2013
@@ -262,7 +262,7 @@ public class RoleController {
 
         EntitlementUtil.extendAuthContext(created.getResult());
 
-        List<PropagationTask> tasks = propagationManager.getRoleCreateTaskIds(created, roleTO.getVirtualAttributes());
+        List<PropagationTask> tasks = propagationManager.getRoleCreateTaskIds(created, roleTO.getVirAttrs());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
         final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
@@ -293,7 +293,7 @@ public class RoleController {
         WorkflowResult<Long> updated = rwfAdapter.update(roleMod);
 
         List<PropagationTask> tasks = propagationManager.getRoleUpdateTaskIds(updated,
-                roleMod.getVirtualAttributesToBeRemoved(), roleMod.getVirtualAttributesToBeUpdated());
+                roleMod.getVirAttrsToRemove(), roleMod.getVirAttrsToUpdate());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
         final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
@@ -359,7 +359,7 @@ public class RoleController {
         final RoleMod roleMod = new RoleMod();
         roleMod.setId(roleId);
 
-        roleMod.getResourcesToBeRemoved().addAll(resources);
+        roleMod.getResourcesToRemove().addAll(resources);
 
         final WorkflowResult<Long> updated = rwfAdapter.update(roleMod);
 
@@ -380,7 +380,7 @@ public class RoleController {
 
         final RoleMod roleMod = new RoleMod();
         roleMod.setId(roleId);
-        roleMod.getResourcesToBeRemoved().addAll(resources);
+        roleMod.getResourcesToRemove().addAll(resources);
 
         return update(roleMod);
     }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/SchemaController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/SchemaController.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/SchemaController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/SchemaController.java Thu Oct 10 14:37:56 2013
@@ -35,7 +35,7 @@ import org.apache.syncope.common.validat
 import org.apache.syncope.common.validation.SyncopeClientException;
 import org.apache.syncope.core.audit.AuditManager;
 import org.apache.syncope.core.persistence.beans.AbstractDerSchema;
-import org.apache.syncope.core.persistence.beans.AbstractSchema;
+import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
 import org.apache.syncope.core.persistence.beans.AbstractVirSchema;
 import org.apache.syncope.core.persistence.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.dao.NotFoundException;
@@ -128,7 +128,7 @@ public class SchemaController extends Ab
 
             case NORMAL:
             default:
-                AbstractSchema normalSchema = attrUtil.newSchema();
+                AbstractNormalSchema normalSchema = attrUtil.newSchema();
                 binder.create((SchemaTO) schemaTO, normalSchema);
                 normalSchema = schemaDAO.save(normalSchema);
 
@@ -193,9 +193,9 @@ public class SchemaController extends Ab
 
             case NORMAL:
             default:
-                List<AbstractSchema> schemas = schemaDAO.findAll(attrUtil.schemaClass());
+                List<AbstractNormalSchema> schemas = schemaDAO.findAll(attrUtil.schemaClass());
                 result = (List<T>) new ArrayList<SchemaTO>(schemas.size());
-                for (AbstractSchema schema : schemas) {
+                for (AbstractNormalSchema schema : schemas) {
                     result.add((T) binder.getSchemaTO(schema, attrUtil));
                 }
         }
@@ -236,7 +236,7 @@ public class SchemaController extends Ab
 
             case NORMAL:
             default:
-                AbstractSchema schema = schemaDAO.find(schemaName, attrUtil.schemaClass());
+                AbstractNormalSchema schema = schemaDAO.find(schemaName, attrUtil.schemaClass());
                 if (schema == null) {
                     throw new NotFoundException("Schema '" + schemaName + "'");
                 }
@@ -284,7 +284,7 @@ public class SchemaController extends Ab
 
             case NORMAL:
             default:
-                AbstractSchema schema = schemaDAO.find(schemaName, attrUtil.schemaClass());
+                AbstractNormalSchema schema = schemaDAO.find(schemaName, attrUtil.schemaClass());
                 if (schema == null) {
                     throw new NotFoundException("Schema '" + schemaName + "'");
                 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java?rev=1531003&r1=1531002&r2=1531003&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java Thu Oct 10 14:37:56 2013
@@ -255,7 +255,7 @@ public class UserController {
         WorkflowResult<Map.Entry<Long, Boolean>> created = uwfAdapter.create(userTO);
 
         List<PropagationTask> tasks = propagationManager.getUserCreateTaskIds(
-                created, userTO.getPassword(), userTO.getVirtualAttributes());
+                created, userTO.getPassword(), userTO.getVirAttrs());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
         final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
@@ -296,7 +296,7 @@ public class UserController {
         if (userMod.getPwdPropRequest() == null) {
             // 2a. no specific password propagation request: generate propagation tasks for any resource associated
             tasks = propagationManager.getUserUpdateTaskIds(updated, changedPwd,
-                    userMod.getVirtualAttributesToBeRemoved(), userMod.getVirtualAttributesToBeUpdated());
+                    userMod.getVirAttrsToRemove(), userMod.getVirAttrsToUpdate());
         } else {
             // 2b. generate the propagation task list in two phases: first the ones containing password,
             // the the rest (with no password)
@@ -312,13 +312,13 @@ public class UserController {
 
             if (!pwdPropByRes.isEmpty()) {
                 Set<String> toBeExcluded = new HashSet<String>(user.getResourceNames());
-                toBeExcluded.addAll(userMod.getResourcesToBeAdded());
+                toBeExcluded.addAll(userMod.getResourcesToAdd());
                 toBeExcluded.removeAll(pwdResourceNames);
                 tasks.addAll(propagationManager.getUserUpdateTaskIds(
                         updated,
                         changedPwd,
-                        userMod.getVirtualAttributesToBeRemoved(),
-                        userMod.getVirtualAttributesToBeUpdated(),
+                        userMod.getVirAttrsToRemove(),
+                        userMod.getVirAttrsToUpdate(),
                         toBeExcluded));
             }
 
@@ -332,8 +332,8 @@ public class UserController {
                 tasks.addAll(propagationManager.getUserUpdateTaskIds(
                         updated,
                         null,
-                        userMod.getVirtualAttributesToBeRemoved(),
-                        userMod.getVirtualAttributesToBeUpdated(),
+                        userMod.getVirAttrsToRemove(),
+                        userMod.getVirAttrsToUpdate(),
                         pwdResourceNames));
             }
 
@@ -629,7 +629,7 @@ public class UserController {
         final UserMod userMod = new UserMod();
         userMod.setId(userId);
 
-        userMod.getResourcesToBeRemoved().addAll(resources);
+        userMod.getResourcesToRemove().addAll(resources);
 
         final WorkflowResult<Map.Entry<Long, Boolean>> updated = uwfAdapter.update(userMod);
 
@@ -650,7 +650,7 @@ public class UserController {
 
         final UserMod userMod = new UserMod();
         userMod.setId(userId);
-        userMod.getResourcesToBeRemoved().addAll(resources);
+        userMod.getResourcesToRemove().addAll(resources);
 
         return update(userMod);
     }