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",