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