Author: ilgrosso
Date: Fri Dec 21 12:22:01 2012
New Revision: 1424893

URL: http://svn.apache.org/viewvc?rev=1424893&view=rev
Log:
[SYNCOPE-44] Enabling latest role search enhancements in the admin console

Added:
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/AuthRestClient.java
      - copied, changed from r1424853, 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/EntitlementRestClient.java
Removed:
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/EntitlementRestClient.java
Modified:
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SearchCondWrapper.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Login.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSearchPanel.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RoleSearchPanel.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/SearchView.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/AttributableSearchDAOImpl.java
    syncope/trunk/core/src/main/resources/views.xml
    
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SearchCondWrapper.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SearchCondWrapper.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SearchCondWrapper.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SearchCondWrapper.java
 Fri Dec 21 12:22:01 2012
@@ -42,7 +42,8 @@ public class SearchCondWrapper implement
 
         ATTRIBUTE,
         MEMBERSHIP,
-        RESOURCE
+        RESOURCE,
+        ENTITLEMENT
 
     };
 

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Login.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Login.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Login.java 
(original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Login.java 
Fri Dec 21 12:22:01 2012
@@ -28,6 +28,8 @@ import org.apache.http.impl.client.Defau
 import org.apache.http.util.EntityUtils;
 import org.apache.syncope.client.http.PreemptiveAuthHttpRequestFactory;
 import org.apache.syncope.client.to.UserTO;
+import org.apache.syncope.console.SyncopeSession;
+import org.apache.syncope.console.wicket.markup.html.form.LinkPanel;
 import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -53,8 +55,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
-import org.apache.syncope.console.SyncopeSession;
-import org.apache.syncope.console.wicket.markup.html.form.LinkPanel;
 
 /**
  * Syncope Login page.

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSearchPanel.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSearchPanel.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSearchPanel.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/AbstractSearchPanel.java
 Fri Dec 21 12:22:01 2012
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.syncope.client.search.AttributableCond;
 import org.apache.syncope.client.search.AttributeCond;
+import org.apache.syncope.client.search.EntitlementCond;
 import org.apache.syncope.client.search.MembershipCond;
 import org.apache.syncope.client.search.NodeCond;
 import org.apache.syncope.client.search.ResourceCond;
@@ -34,6 +35,7 @@ import org.apache.syncope.client.to.Role
 import org.apache.syncope.client.to.UserTO;
 import org.apache.syncope.console.commons.SearchCondWrapper;
 import org.apache.syncope.console.commons.SearchCondWrapper.OperationType;
+import org.apache.syncope.console.rest.AuthRestClient;
 import org.apache.syncope.console.rest.ResourceRestClient;
 import org.apache.syncope.console.rest.SchemaRestClient;
 import org.apache.syncope.types.AttributableType;
@@ -58,7 +60,8 @@ public abstract class AbstractSearchPane
     protected static final Logger LOG = 
LoggerFactory.getLogger(AbstractSearchPanel.class);
 
     protected static final String[] ATTRIBUTES_NOTINCLUDED = {"attributes", 
"derivedAttributes", "virtualAttributes",
-        "serialVersionUID", "memberships", "resources", "password", 
"propagationTOs", "propagationStatusMap"};
+        "serialVersionUID", "memberships", "entitlements", "resources", 
"password",
+        "propagationTOs", "propagationStatusMap"};
 
     protected IModel<List<String>> dnames;
 
@@ -66,6 +69,8 @@ public abstract class AbstractSearchPane
 
     protected IModel<List<String>> resourceNames;
 
+    protected IModel<List<String>> entitlements;
+
     protected IModel<List<AttributeCond.Type>> attributeTypes;
 
     protected IModel<List<SearchCondWrapper.FilterType>> filterTypes;
@@ -78,6 +83,9 @@ public abstract class AbstractSearchPane
     @SpringBean
     protected ResourceRestClient resourceRestClient;
 
+    @SpringBean
+    protected AuthRestClient authRestClient;
+
     protected FeedbackPanel searchFeedback;
 
     protected List<SearchCondWrapper> searchConditionList;
@@ -135,7 +143,7 @@ public abstract class AbstractSearchPane
             searchConditionList = getSearchCondWrappers(initCond, null);
         }
         searchFormContainer.add(new SearchView("searchView", 
searchConditionList, searchFormContainer, required,
-                attributeTypes, filterTypes, anames, dnames, roleNames, 
resourceNames));
+                attributeTypes, filterTypes, anames, dnames, roleNames, 
resourceNames, entitlements));
 
         add(searchFormContainer);
     }
@@ -196,6 +204,18 @@ public abstract class AbstractSearchPane
             }
         };
 
+        entitlements = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                List<String> result = authRestClient.getOwnedEntitlements();
+                Collections.sort(result);
+                return result;
+            }
+        };
+
         attributeTypes = new 
LoadableDetachableModel<List<AttributeCond.Type>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
@@ -277,6 +297,10 @@ public abstract class AbstractSearchPane
             wrapper.setFilterType(SearchCondWrapper.FilterType.RESOURCE);
             
wrapper.setFilterName(searchCond.getResourceCond().getResourceName());
         }
+        if (searchCond.getEntitlementCond() != null) {
+            wrapper.setFilterType(SearchCondWrapper.FilterType.ENTITLEMENT);
+            
wrapper.setFilterName(searchCond.getEntitlementCond().getExpression());
+        }
 
         wrapper.setNotOperator(searchCond.getType() == NodeCond.Type.NOT_LEAF);
 
@@ -349,6 +373,18 @@ public abstract class AbstractSearchPane
 
                 break;
 
+            case ENTITLEMENT:
+                final EntitlementCond entitlementCond = new EntitlementCond();
+                
entitlementCond.setExpression(searchConditionWrapper.getFilterName());
+
+                if (searchConditionWrapper.isNotOperator()) {
+                    nodeCond = NodeCond.getNotLeafCond(entitlementCond);
+                } else {
+                    nodeCond = NodeCond.getLeafCond(entitlementCond);
+                }
+
+                break;
+
             default:
             // nothing to do
         }

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
 Fri Dec 21 12:22:01 2012
@@ -20,7 +20,7 @@ package org.apache.syncope.console.pages
 
 import org.apache.syncope.client.to.RoleTO;
 import org.apache.syncope.console.commons.SelectChoiceRenderer;
-import org.apache.syncope.console.rest.EntitlementRestClient;
+import org.apache.syncope.console.rest.AuthRestClient;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
 import org.apache.wicket.markup.html.form.Form;
@@ -34,7 +34,7 @@ public class RolePanel extends Panel {
     private static final long serialVersionUID = 4216376097320768369L;
 
     @SpringBean
-    private EntitlementRestClient entitlementRestClient;
+    private AuthRestClient entitlementRestClient;
 
     private final Palette<String> entitlementsPalette;
 

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RoleSearchPanel.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RoleSearchPanel.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RoleSearchPanel.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/RoleSearchPanel.java
 Fri Dec 21 12:22:01 2012
@@ -54,6 +54,7 @@ public class RoleSearchPanel extends Abs
             protected List<SearchCondWrapper.FilterType> load() {
                 List<SearchCondWrapper.FilterType> result = new 
ArrayList<SearchCondWrapper.FilterType>();
                 result.add(SearchCondWrapper.FilterType.ATTRIBUTE);
+                result.add(SearchCondWrapper.FilterType.ENTITLEMENT);
                 result.add(SearchCondWrapper.FilterType.RESOURCE);
                 return result;
             }

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/SearchView.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/SearchView.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/SearchView.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/SearchView.java
 Fri Dec 21 12:22:01 2012
@@ -60,6 +60,8 @@ public class SearchView extends ListView
 
     private final IModel<List<String>> resourceNames;
 
+    private final IModel<List<String>> entitlements;
+
     public SearchView(final String id, final List<? extends SearchCondWrapper> 
list,
             final WebMarkupContainer searchFormContainer,
             final boolean required,
@@ -68,7 +70,8 @@ public class SearchView extends ListView
             final IModel<List<String>> anames,
             final IModel<List<String>> dnames,
             final IModel<List<String>> roleNames,
-            final IModel<List<String>> resourceNames) {
+            final IModel<List<String>> resourceNames,
+            final IModel<List<String>> entitlements) {
 
         super(id, list);
 
@@ -80,6 +83,7 @@ public class SearchView extends ListView
         this.dnames = dnames;
         this.roleNames = roleNames;
         this.resourceNames = resourceNames;
+        this.entitlements = entitlements;
     }
 
     @Override
@@ -283,6 +287,17 @@ public class SearchView extends ListView
 
                     break;
 
+                case ENTITLEMENT:
+                    filterNameChooser.setChoices(entitlements);
+                    type.setEnabled(false);
+                    type.setRequired(false);
+                    type.setModelObject(null);
+
+                    filterValue.setEnabled(false);
+                    filterValue.setModelObject("");
+
+                    break;
+
                 default:
                     
filterNameChooser.setChoices(Collections.<String>emptyList());
             }

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java
 Fri Dec 21 12:22:01 2012
@@ -19,7 +19,6 @@
 package org.apache.syncope.console.pages.panels;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.client.search.NodeCond;
 import org.apache.syncope.client.to.RoleTO;
@@ -59,7 +58,11 @@ public class UserSearchPanel extends Abs
 
             @Override
             protected List<SearchCondWrapper.FilterType> load() {
-                return Arrays.asList(SearchCondWrapper.FilterType.values());
+                List<SearchCondWrapper.FilterType> result = new 
ArrayList<SearchCondWrapper.FilterType>();
+                result.add(SearchCondWrapper.FilterType.ATTRIBUTE);
+                result.add(SearchCondWrapper.FilterType.MEMBERSHIP);
+                result.add(SearchCondWrapper.FilterType.RESOURCE);
+                return result;
             }
         };
 

Copied: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/AuthRestClient.java
 (from r1424853, 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/EntitlementRestClient.java)
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/AuthRestClient.java?p2=syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/AuthRestClient.java&p1=syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/EntitlementRestClient.java&r1=1424853&r2=1424893&rev=1424893&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/EntitlementRestClient.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/AuthRestClient.java
 Fri Dec 21 12:22:01 2012
@@ -20,15 +20,16 @@ package org.apache.syncope.console.rest;
 
 import java.util.Arrays;
 import java.util.List;
-import org.springframework.stereotype.Component;
-import 
org.apache.syncope.client.validation.SyncopeClientCompositeErrorException;
 import org.apache.syncope.console.SyncopeSession;
+import org.springframework.stereotype.Component;
 
 /**
  * Console client for invoking Rest Resources services.
  */
 @Component
-public class EntitlementRestClient extends BaseRestClient {
+public class AuthRestClient extends BaseRestClient {
+
+    private static final long serialVersionUID = 2999780105004742914L;
 
     /**
      * Get all Entitlements.
@@ -36,15 +37,17 @@ public class EntitlementRestClient exten
      * @return List<String>
      */
     public List<String> getAllEntitlements() {
-        List<String> entitlements = null;
-
-        try {
-            entitlements = 
Arrays.asList(SyncopeSession.get().getRestTemplate().getForObject(
-                    baseURL + "auth/allentitlements.json", String[].class));
-        } catch (SyncopeClientCompositeErrorException e) {
-            LOG.error("While reading all the entitlements", e);
-        }
+        return 
Arrays.asList(SyncopeSession.get().getRestTemplate().getForObject(
+                baseURL + "auth/allentitlements.json", String[].class));
+    }
 
-        return entitlements;
+    /**
+     * Get owned Entitlements.
+     *
+     * @return List<String>
+     */
+    public List<String> getOwnedEntitlements() {
+        return 
Arrays.asList(SyncopeSession.get().getRestTemplate().getForObject(
+                baseURL + "auth/entitlements.json", String[].class));
     }
 }

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/AttributableSearchDAOImpl.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/AttributableSearchDAOImpl.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/AttributableSearchDAOImpl.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/AttributableSearchDAOImpl.java
 Fri Dec 21 12:22:01 2012
@@ -41,8 +41,6 @@ import org.apache.syncope.client.search.
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
 import org.apache.syncope.core.persistence.beans.AbstractAttributable;
 import org.apache.syncope.core.persistence.beans.AbstractSchema;
-import org.apache.syncope.core.persistence.beans.Entitlement;
-import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
 import org.apache.syncope.core.persistence.dao.AttributableSearchDAO;
 import org.apache.syncope.core.persistence.dao.RoleDAO;
 import org.apache.syncope.core.persistence.dao.SchemaDAO;
@@ -289,7 +287,7 @@ public class AttributableSearchDAOImpl e
                 }
                 if (nodeCond.getEntitlementCond() != null) {
                     query.append(getQuery(nodeCond.getEntitlementCond(), 
nodeCond.getType() == NodeCond.Type.NOT_LEAF,
-                            parameters, attrUtil));
+                            parameters));
                 }
                 if (nodeCond.getAttributeCond() != null) {
                     query.append(getQuery(nodeCond.getAttributeCond(), 
nodeCond.getType() == NodeCond.Type.NOT_LEAF,
@@ -370,16 +368,13 @@ public class AttributableSearchDAOImpl e
         return query.toString();
     }
 
-    private String getQuery(final EntitlementCond cond, final boolean not, 
final List<Object> parameters,
-            final AttributableUtil attrUtil) {
-
-        final StringBuilder query = new StringBuilder("SELECT DISTINCT role_id 
AS subject_id FROM ").
-                
append(SyncopeRole.class.getSimpleName()).append('_').append(Entitlement.class.getSimpleName()).
-                append(" WHERE entitlement_name ");
+    private String getQuery(final EntitlementCond cond, final boolean not, 
final List<Object> parameters) {
+        final StringBuilder query = new StringBuilder("SELECT DISTINCT 
subject_id FROM ").
+                append("role_search_entitlements WHERE entitlement_name ");
         if (not) {
             query.append(" NOT ");
         }
-        query.append(" LIKE '%").append(cond.getExpression()).append("%'");
+        query.append(" LIKE ?").append(setParameter(parameters, 
cond.getExpression()));
 
         return query.toString();
     }

Modified: syncope/trunk/core/src/main/resources/views.xml
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/views.xml?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/views.xml (original)
+++ syncope/trunk/core/src/main/resources/views.xml Fri Dec 21 12:22:01 2012
@@ -132,4 +132,11 @@ under the License.
     SELECT st.role_id AS subject_id, st.resource_name AS resource_name
     FROM SyncopeRole_ExternalResource st
   </entry>
+  <entry key="role_search_entitlements">
+    CREATE VIEW role_search_entitlements AS
+
+    SELECT st.role_id AS subject_id, st.entitlement_name AS entitlement_name
+    FROM SyncopeRole_Entitlement st
+  </entry>
+
 </properties>

Modified: 
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java?rev=1424893&r1=1424892&r2=1424893&view=diff
==============================================================================
--- 
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java
 (original)
+++ 
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java
 Fri Dec 21 12:22:01 2012
@@ -223,10 +223,14 @@ public class SearchTestITCase extends Ab
 
     @Test
     public void searchByEntitlement() {
-        final EntitlementCond cond = new EntitlementCond();
-        cond.setExpression("USER");
+        final EntitlementCond userListCond = new EntitlementCond();
+        userListCond.setExpression("USER_LIST");
 
-        final NodeCond searchCondition = NodeCond.getLeafCond(cond);
+        final EntitlementCond userReadcond = new EntitlementCond();
+        userReadcond.setExpression("USER_READ");
+
+        final NodeCond searchCondition = 
NodeCond.getAndCond(NodeCond.getLeafCond(userListCond),
+                NodeCond.getLeafCond(userReadcond));
         assertTrue(searchCondition.isValid());
 
         final List<RoleTO> matchingRoles = 
Arrays.asList(restTemplate.postForObject(BASE_URL + "role/search",


Reply via email to