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 2014/01/09 14:45:15 UTC

svn commit: r1556805 [2/2] - in /syncope/branches/1_1_X: common/src/main/java/org/apache/syncope/common/to/ common/src/main/java/org/apache/syncope/common/util/ console/src/main/java/org/apache/syncope/console/pages/ console/src/main/java/org/apache/sy...

Modified: syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/SyncTasks.html
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/SyncTasks.html?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/SyncTasks.html (original)
+++ syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/SyncTasks.html Thu Jan  9 13:45:14 2014
@@ -16,7 +16,7 @@ KIND, either express or implied.  See th
 specific language governing permissions and limitations
 under the License.
 -->
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
     <div id="users-contain" class="ui-widget" style="width:auto">
       <span wicket:id="container">
@@ -39,4 +39,4 @@ under the License.
       <wicket:message key="create_task"/>
     </a>
   </wicket:panel>
-</html>
+</html>
\ No newline at end of file

Modified: syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/VirtualAttributesPanel.html
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/VirtualAttributesPanel.html?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/VirtualAttributesPanel.html (original)
+++ syncope/branches/1_1_X/console/src/main/resources/org/apache/syncope/console/pages/panels/VirtualAttributesPanel.html Thu Jan  9 13:45:14 2014
@@ -16,43 +16,45 @@ KIND, either express or implied.  See th
 specific language governing permissions and limitations
 under the License.
 -->
-<wicket:panel>
-  <table class="ui-widget ui-widget-content ui-corner-all"
-         style="font-size: 1em;margin-top:2px;"
-         width="100%" cellpadding="2px" cellspacing="1px">
-    <thead>
-      <tr class="ui-widget-header">
-        <th><wicket:message key="virtualAttributeToBeRemoved"/></th>
-    <th><wicket:message key="virtualAttributeName"/></th>
-    <th><wicket:message key="virtualAttributeValue"/></th>
-    </tr>
-    </thead>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <table class="ui-widget ui-widget-content ui-corner-all"
+           style="font-size: 1em;margin-top:2px;"
+           width="100%" cellpadding="2px" cellspacing="1px">
+      <thead>
+        <tr class="ui-widget-header">
+          <th><wicket:message key="virtualAttributeToBeRemoved"/></th>
+          <th><wicket:message key="virtualAttributeName"/></th>
+          <th><wicket:message key="virtualAttributeValue"/></th>
+        </tr>
+      </thead>
 
-    <tfoot>
-      <tr>
-        <td>
-          <input type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
-                 wicket:id="addAttributeBtn" />
-        </td>
-      </tr>
-    </tfoot>
+      <tfoot>
+        <tr>
+          <td>
+            <input type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
+                   wicket:id="addAttributeBtn" />
+          </td>
+        </tr>
+      </tfoot>
 
-    <tbody wicket:id="virAttrContainer">
-      <tr wicket:id="attributes">
-        <td align="center" valign="top">
-          <input type="checkbox" class="text ui-widget-content ui-corner-all"  wicket:id="toRemove"/>
-        </td>
+      <tbody wicket:id="virAttrContainer">
+        <tr wicket:id="attributes">
+          <td align="center" valign="top">
+            <input type="checkbox" class="text ui-widget-content ui-corner-all"  wicket:id="toRemove"/>
+          </td>
 
-        <td align="center" valign="top">
-          <select class="text ui-widget-content ui-corner-all"
-                  style="width:100%" wicket:id="schema"/>
-        </td>
+          <td align="center" valign="top">
+            <select class="text ui-widget-content ui-corner-all"
+                    style="width:100%" wicket:id="schema"/>
+          </td>
 
-        <td align="center " valign="top">
-          <span wicket:id="values" style="text-align:left;display:block;width:95%">[values]</span>
-        </td>
+          <td align="center " valign="top">
+            <span wicket:id="values" style="text-align:left;display:block;width:95%">[values]</span>
+          </td>
 
-      </tr>
-    </tbody>
-  </table>
-</wicket:panel>
+        </tr>
+      </tbody>
+    </table>
+  </wicket:panel>
+</html>
\ No newline at end of file

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java Thu Jan  9 13:45:14 2014
@@ -72,7 +72,7 @@ public class ExternalResource extends Ab
     /**
      * The resource type is identified by the associated connector.
      */
-    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
+    @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE })
     @NotNull
     private ConnInstance connector;
 

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/role/SyncopeRole.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/role/SyncopeRole.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/role/SyncopeRole.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/role/SyncopeRole.java Thu Jan  9 13:45:14 2014
@@ -58,7 +58,7 @@ import org.apache.syncope.core.persisten
 
 @Entity
 @Table(uniqueConstraints =
-@UniqueConstraint(columnNames = {"name", "parent_id"}))
+        @UniqueConstraint(columnNames = { "name", "parent_id" }))
 @Cacheable
 @SyncopeRoleCheck
 public class SyncopeRole extends AbstractAttributable {
@@ -82,9 +82,9 @@ public class SyncopeRole extends Abstrac
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-    @JoinColumn(name = "role_id"),
-    inverseJoinColumns =
-    @JoinColumn(name = "entitlement_name"))
+            @JoinColumn(name = "role_id"),
+            inverseJoinColumns =
+            @JoinColumn(name = "entitlement_name"))
     private Set<Entitlement> entitlements;
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
@@ -140,9 +140,9 @@ public class SyncopeRole extends Abstrac
      */
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-    @JoinColumn(name = "role_id"),
-    inverseJoinColumns =
-    @JoinColumn(name = "resource_name"))
+            @JoinColumn(name = "role_id"),
+            inverseJoinColumns =
+            @JoinColumn(name = "resource_name"))
     @Valid
     private Set<ExternalResource> resources;
 

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/ResourceDAO.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/ResourceDAO.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/ResourceDAO.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/ResourceDAO.java Thu Jan  9 13:45:14 2014
@@ -21,14 +21,20 @@ package org.apache.syncope.core.persiste
 import java.util.List;
 
 import org.apache.syncope.common.types.IntMappingType;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.Policy;
 import org.apache.syncope.core.persistence.validation.entity.InvalidEntityException;
 
 public interface ResourceDAO extends DAO {
 
     ExternalResource find(String name);
 
+    List<ExternalResource> findByPolicy(Policy policy);
+
+    List<ExternalResource> findWithoutPolicy(PolicyType type);
+
     List<ExternalResource> findAll();
 
     List<ExternalResource> findAllByPriority();

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java Thu Jan  9 13:45:14 2014
@@ -21,8 +21,10 @@ package org.apache.syncope.core.persiste
 import java.util.List;
 
 import org.apache.syncope.common.services.InvalidSearchConditionException;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.core.persistence.beans.Entitlement;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.Policy;
 import org.apache.syncope.core.persistence.beans.membership.Membership;
 import org.apache.syncope.core.persistence.beans.role.RAttrValue;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
@@ -39,7 +41,11 @@ public interface RoleDAO extends Attribu
 
     List<SyncopeRole> findOwned(SyncopeUser owner);
 
-    List<SyncopeRole> findByEntitlement(final Entitlement entitlement);
+    List<SyncopeRole> findByEntitlement(Entitlement entitlement);
+
+    List<SyncopeRole> findByPolicy(Policy policy);
+
+    List<SyncopeRole> findWithoutPolicy(PolicyType type);
 
     List<SyncopeRole> findAncestors(SyncopeRole role);
 

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ResourceDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ResourceDAOImpl.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ResourceDAOImpl.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ResourceDAOImpl.java Thu Jan  9 13:45:14 2014
@@ -24,9 +24,11 @@ import java.util.Set;
 import javax.persistence.NoResultException;
 import javax.persistence.TypedQuery;
 import org.apache.syncope.common.types.IntMappingType;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.core.persistence.beans.AbstractMapping;
 import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.Policy;
 import org.apache.syncope.core.persistence.beans.PropagationTask;
 import org.apache.syncope.core.persistence.beans.SyncTask;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
@@ -58,7 +60,7 @@ public class ResourceDAOImpl extends Abs
 
     @Override
     public ExternalResource find(final String name) {
-        TypedQuery<ExternalResource> query = entityManager.createQuery("SELECT e " + "FROM "
+        TypedQuery<ExternalResource> query = entityManager.createQuery("SELECT e FROM "
                 + ExternalResource.class.getSimpleName() + " e " + "WHERE e.name = :name", ExternalResource.class);
         query.setParameter("name", name);
 
@@ -72,19 +74,58 @@ public class ResourceDAOImpl extends Abs
         return result;
     }
 
+    private StringBuilder getByPolicyQuery(final PolicyType type) {
+        StringBuilder query = new StringBuilder("SELECT e FROM ").append(ExternalResource.class.getSimpleName()).
+                append(" e WHERE e.");
+        switch (type) {
+            case ACCOUNT:
+            case GLOBAL_ACCOUNT:
+                query.append("accountPolicy");
+                break;
+
+            case PASSWORD:
+            case GLOBAL_PASSWORD:
+                query.append("passwordPolicy");
+                break;
+
+            case SYNC:
+            case GLOBAL_SYNC:
+                query.append("syncPolicy");
+                break;
+
+            default:
+                break;
+        }
+        return query;
+    }
+
+    @Override
+    public List<ExternalResource> findByPolicy(final Policy policy) {
+        TypedQuery<ExternalResource> query = entityManager.createQuery(
+                getByPolicyQuery(policy.getType()).append(" = :policy").toString(), ExternalResource.class);
+        query.setParameter("policy", policy);
+        return query.getResultList();
+    }
+
+    @Override
+    public List<ExternalResource> findWithoutPolicy(final PolicyType type) {
+        TypedQuery<ExternalResource> query = entityManager.createQuery(
+                getByPolicyQuery(type).append(" IS NULL").toString(), ExternalResource.class);
+        return query.getResultList();
+    }
+
     @Override
     public List<ExternalResource> findAll() {
-        TypedQuery<ExternalResource> query =
-                entityManager.createQuery("SELECT e " + "FROM  " + ExternalResource.class.getSimpleName() + " e",
-                ExternalResource.class);
+        TypedQuery<ExternalResource> query = entityManager.createQuery(
+                "SELECT e FROM  " + ExternalResource.class.getSimpleName() + " e", ExternalResource.class);
         return query.getResultList();
     }
 
     @Override
     public List<ExternalResource> findAllByPriority() {
-        TypedQuery<ExternalResource> query =
-                entityManager.createQuery("SELECT e " + "FROM  " + ExternalResource.class.getSimpleName() + " e "
-                + "ORDER BY e.propagationPriority", ExternalResource.class);
+        TypedQuery<ExternalResource> query = entityManager.createQuery(
+                "SELECT e FROM  " + ExternalResource.class.getSimpleName() + " e ORDER BY e.propagationPriority",
+                ExternalResource.class);
         return query.getResultList();
     }
 
@@ -97,7 +138,7 @@ public class ResourceDAOImpl extends Abs
      * @return the same entity, updated
      */
     @Override
-    @Transactional(rollbackFor = {Throwable.class})
+    @Transactional(rollbackFor = { Throwable.class })
     public ExternalResource save(final ExternalResource resource) {
         ExternalResource merged = entityManager.merge(resource);
         try {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java Thu Jan  9 13:45:14 2014
@@ -18,17 +18,22 @@
  */
 package org.apache.syncope.core.persistence.dao.impl;
 
+import java.util.AbstractMap;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import javax.persistence.NoResultException;
 import javax.persistence.TypedQuery;
 
 import org.apache.syncope.common.services.InvalidSearchConditionException;
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.core.persistence.beans.AbstractAttributable;
 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.Policy;
 import org.apache.syncope.core.persistence.beans.membership.Membership;
 import org.apache.syncope.core.persistence.beans.role.RAttrValue;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
@@ -138,12 +143,83 @@ public class RoleDAOImpl extends Abstrac
     public List<SyncopeRole> findByEntitlement(final Entitlement entitlement) {
         TypedQuery<SyncopeRole> query =
                 entityManager.createQuery("SELECT e FROM " + SyncopeRole.class.getSimpleName() + " e "
-                + "WHERE :entitlement MEMBER OF e.entitlements", SyncopeRole.class);
+                        + "WHERE :entitlement MEMBER OF e.entitlements", SyncopeRole.class);
         query.setParameter("entitlement", entitlement);
 
         return query.getResultList();
     }
 
+    private Map.Entry<String, String> getPolicyFields(final PolicyType type) {
+        String policyField;
+        String inheritPolicyField;
+        if (type == PolicyType.GLOBAL_ACCOUNT || type == PolicyType.ACCOUNT) {
+            policyField = "accountPolicy";
+            inheritPolicyField = "inheritAccountPolicy";
+        } else {
+            policyField = "passwordPolicy";
+            inheritPolicyField = "inheritPasswordPolicy";
+        }
+
+        return new AbstractMap.SimpleEntry<String, String>(policyField, inheritPolicyField);
+    }
+
+    private List<SyncopeRole> findSamePolicyChildren(final SyncopeRole role, final PolicyType type) {
+        List<SyncopeRole> result = new ArrayList<SyncopeRole>();
+
+        for (SyncopeRole child : findChildren(role)) {
+            boolean inherit = type == PolicyType.GLOBAL_ACCOUNT || type == PolicyType.ACCOUNT
+                    ? child.isInheritAccountPolicy()
+                    : child.isInheritPasswordPolicy();
+            if (inherit) {
+                result.add(child);
+                result.addAll(findSamePolicyChildren(child, type));
+            }
+        }
+
+        return result;
+    }
+
+    @Override
+    public List<SyncopeRole> findByPolicy(final Policy policy) {
+        if (policy.getType() == PolicyType.GLOBAL_SYNC || policy.getType() == PolicyType.SYNC) {
+            return Collections.<SyncopeRole>emptyList();
+        }
+
+        Map.Entry<String, String> policyFields = getPolicyFields(policy.getType());
+        StringBuilder queryString = new StringBuilder("SELECT e FROM ").
+                append(SyncopeRole.class.getSimpleName()).append(" e WHERE e.").
+                append(policyFields.getKey()).append(" = :policy AND (e.").
+                append(policyFields.getValue()).append(" IS NULL OR e.").
+                append(policyFields.getValue()).append(" = 0)");
+
+        TypedQuery<SyncopeRole> query = entityManager.createQuery(queryString.toString(), SyncopeRole.class);
+        query.setParameter("policy", policy);
+
+        List<SyncopeRole> result = new ArrayList<SyncopeRole>();
+        for (SyncopeRole role : query.getResultList()) {
+            result.add(role);
+            result.addAll(findSamePolicyChildren(role, policy.getType()));
+        }
+        return result;
+    }
+
+    @Override
+    public List<SyncopeRole> findWithoutPolicy(final PolicyType type) {
+        if (type == PolicyType.GLOBAL_SYNC || type == PolicyType.SYNC) {
+            return Collections.<SyncopeRole>emptyList();
+        }
+
+        Map.Entry<String, String> policyFields = getPolicyFields(type);
+        StringBuilder queryString = new StringBuilder("SELECT e FROM ").
+                append(SyncopeRole.class.getSimpleName()).append(" e WHERE e.").
+                append(policyFields.getKey()).append(" IS NULL AND (e.").
+                append(policyFields.getValue()).append(" IS NULL OR e.").
+                append(policyFields.getValue()).append(" = 0)");
+
+        TypedQuery<SyncopeRole> query = entityManager.createQuery(queryString.toString(), SyncopeRole.class);
+        return query.getResultList();
+    }
+
     private void findAncestors(final List<SyncopeRole> result, final SyncopeRole role) {
         if (role.getParent() != null && !result.contains(role.getParent())) {
             result.add(role.getParent());
@@ -161,7 +237,7 @@ public class RoleDAOImpl extends Abstrac
     @Override
     public List<SyncopeRole> findChildren(final SyncopeRole role) {
         TypedQuery<SyncopeRole> query =
-                entityManager.createQuery("SELECT r FROM SyncopeRole r WHERE " + "r.parent=:role", SyncopeRole.class);
+                entityManager.createQuery("SELECT r FROM SyncopeRole r WHERE r.parent=:role", SyncopeRole.class);
         query.setParameter("role", role);
 
         return query.getResultList();
@@ -217,7 +293,7 @@ public class RoleDAOImpl extends Abstrac
     public List<Membership> findMemberships(final SyncopeRole role) {
         TypedQuery<Membership> query =
                 entityManager.createQuery("SELECT e FROM " + Membership.class.getSimpleName() + " e"
-                + " WHERE e.syncopeRole=:role", Membership.class);
+                        + " WHERE e.syncopeRole=:role", Membership.class);
         query.setParameter("role", role);
 
         return query.getResultList();

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UnresolvedReferenceException.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UnresolvedReferenceException.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UnresolvedReferenceException.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UnresolvedReferenceException.java Thu Jan  9 13:45:14 2014
@@ -29,7 +29,7 @@ public class UnresolvedReferenceExceptio
         super();
     }
 
-    public UnresolvedReferenceException(Throwable cause) {
+    public UnresolvedReferenceException(final Throwable cause) {
         super(cause);
     }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/PolicyDataBinder.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/PolicyDataBinder.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/PolicyDataBinder.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/PolicyDataBinder.java Thu Jan  9 13:45:14 2014
@@ -30,15 +30,26 @@ import org.apache.syncope.common.types.S
 import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
 import org.apache.syncope.common.validation.SyncopeClientException;
 import org.apache.syncope.core.persistence.beans.AccountPolicy;
+import org.apache.syncope.core.persistence.beans.ExternalResource;
 import org.apache.syncope.core.persistence.beans.PasswordPolicy;
 import org.apache.syncope.core.persistence.beans.Policy;
 import org.apache.syncope.core.persistence.beans.SyncPolicy;
+import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
+import org.apache.syncope.core.persistence.dao.ResourceDAO;
+import org.apache.syncope.core.persistence.dao.RoleDAO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Component;
 
 @Component
 public class PolicyDataBinder {
 
+    @Autowired
+    private ResourceDAO resourceDAO;
+
+    @Autowired
+    private RoleDAO roleDAO;
+
     private boolean isGlobalPolicy(final PolicyType policyType) {
         boolean isGlobal;
         switch (policyType) {
@@ -103,6 +114,23 @@ public class PolicyDataBinder {
         policyTO.setId(policy.getId());
         policyTO.setDescription(policy.getDescription());
 
+        for (ExternalResource resource : resourceDAO.findByPolicy(policy)) {
+            policyTO.getUsedByResources().add(resource.getName());
+        }
+        if (isGlobal) {
+            for (ExternalResource resource : resourceDAO.findWithoutPolicy(policy.getType())) {
+                policyTO.getUsedByResources().add(resource.getName());
+            }
+        }
+        for (SyncopeRole role : roleDAO.findByPolicy(policy)) {
+            policyTO.getUsedByRoles().add(role.getId());
+        }
+        if (isGlobal) {
+            for (SyncopeRole role : roleDAO.findWithoutPolicy(policy.getType())) {
+                policyTO.getUsedByRoles().add(role.getId());
+            }
+        }
+
         return (T) policyTO;
     }
 

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java Thu Jan  9 13:45:14 2014
@@ -21,8 +21,10 @@ package org.apache.syncope.core.rest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.common.to.AccountPolicyTO;
 import org.apache.syncope.common.to.PasswordPolicyTO;
@@ -49,10 +51,37 @@ public class PolicyTestITCase extends Ab
     }
 
     @Test
-    public void read() {
+    public void getAccountPolicy() {
+        AccountPolicyTO policyTO = policyService.read(PolicyType.ACCOUNT, 6L);
+
+        assertNotNull(policyTO);
+        assertTrue(policyTO.getUsedByResources().isEmpty());
+        assertEquals(Arrays.asList(6L, 7L, 10L, 14L), policyTO.getUsedByRoles());
+    }
+
+    @Test
+    public void getPasswordPolicy() {
+        PasswordPolicyTO policyTO = policyService.read(PolicyType.PASSWORD, 4L);
+
+        assertNotNull(policyTO);
+        assertTrue(policyTO.getUsedByResources().contains(RESOURCE_NAME_NOPROPAGATION));
+        assertEquals(Arrays.asList(6L, 7L, 10L, 8L), policyTO.getUsedByRoles());
+    }
+
+    @Test
+    public void getSyncPolicy() {
         SyncPolicyTO policyTO = policyService.read(PolicyType.SYNC, 1L);
 
         assertNotNull(policyTO);
+        assertTrue(policyTO.getUsedByRoles().isEmpty());
+    }
+
+    @Test
+    public void getGlobalAccountPolicy() {
+        AccountPolicyTO policyTO = policyService.readGlobal(PolicyType.ACCOUNT);
+
+        assertNotNull(policyTO);
+        assertEquals(PolicyType.GLOBAL_ACCOUNT, policyTO.getType());
     }
 
     @Test
@@ -62,14 +91,18 @@ public class PolicyTestITCase extends Ab
         assertNotNull(policyTO);
         assertEquals(PolicyType.GLOBAL_PASSWORD, policyTO.getType());
         assertEquals(8, policyTO.getSpecification().getMinLength());
+        assertFalse(policyTO.getUsedByResources().contains(RESOURCE_NAME_NOPROPAGATION));
     }
 
     @Test
-    public void getGlobalAccountPolicy() {
-        AccountPolicyTO policyTO = policyService.readGlobal(PolicyType.ACCOUNT);
+    public void getGlobalSyncPolicy() {
+        SyncPolicyTO policyTO = policyService.readGlobal(PolicyType.SYNC);
 
         assertNotNull(policyTO);
-        assertEquals(PolicyType.GLOBAL_ACCOUNT, policyTO.getType());
+        assertEquals(PolicyType.GLOBAL_SYNC, policyTO.getType());
+        assertFalse(policyTO.getUsedByResources().contains(RESOURCE_NAME_CSV));
+        assertFalse(policyTO.getUsedByResources().contains(RESOURCE_NAME_WS2));
+        assertTrue(policyTO.getUsedByRoles().isEmpty());
     }
 
     @Test

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/SchemaTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/SchemaTestITCase.java?rev=1556805&r1=1556804&r2=1556805&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/SchemaTestITCase.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/SchemaTestITCase.java Thu Jan  9 13:45:14 2014
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.List;
+import org.apache.commons.lang3.SerializationUtils;
 
 import org.apache.syncope.common.mod.UserMod;
 import org.apache.syncope.common.to.MembershipTO;
@@ -212,7 +213,7 @@ public class SchemaTestITCase extends Ab
         userTO = createUser(userTO);
         assertNotNull(userTO);
 
-        UserTO newUserTO = AttributableOperations.clone(userTO);
+        UserTO newUserTO = SerializationUtils.clone(userTO);
         MembershipTO membership = new MembershipTO();
         membership.setRoleId(2L);
         newUserTO.addMembership(membership);