Repository: syncope
Updated Branches:
  refs/heads/1_2_X e1c258763 -> 261233722
  refs/heads/master 3eb0bfb6c -> 97607b16e


[SYNCOPE-676] Various improvements including a new optional 'details' boolean 
parameter for list and search, defaulting to true to keep backward compatibility


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/26123372
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/26123372
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/26123372

Branch: refs/heads/1_2_X
Commit: 2612337228f1fbd3818f61c4dd3371b7bf1d37fb
Parents: e1c2587
Author: Francesco Chicchiriccò <[email protected]>
Authored: Mon Jul 6 15:58:37 2015 +0200
Committer: Francesco Chicchiriccò <[email protected]>
Committed: Mon Jul 6 15:58:37 2015 +0200

----------------------------------------------------------------------
 .../syncope/common/services/JAXRSService.java   |  2 +
 .../syncope/common/services/RoleService.java    |  8 +-
 .../syncope/common/services/UserService.java    |  8 +-
 .../syncope/console/commons/Constants.java      |  2 -
 .../pages/DisplayAttributesModalPage.java       | 46 +----------
 .../pages/panels/UserSearchResultPanel.java     | 13 +---
 .../syncope/console/rest/RoleRestClient.java    | 12 ++-
 .../syncope/console/rest/UserRestClient.java    |  4 +-
 .../pages/DisplayAttributesModalPage.html       |  2 -
 .../syncope/console/ReportTestITCase.java       |  4 +-
 .../core/notification/NotificationManager.java  | 10 +--
 .../syncope/core/report/RoleReportlet.java      |  2 +-
 .../syncope/core/report/UserReportlet.java      |  4 +-
 .../controller/AbstractSubjectController.java   |  5 +-
 .../core/rest/controller/RoleController.java    | 22 +++---
 .../core/rest/controller/UserController.java    | 12 +--
 .../syncope/core/rest/data/RoleDataBinder.java  | 80 ++++++++++----------
 .../syncope/core/rest/data/UserDataBinder.java  | 51 +++++++------
 .../syncope/core/services/RoleServiceImpl.java  | 24 +++---
 .../syncope/core/services/UserServiceImpl.java  | 24 +++---
 .../core/sync/impl/RolePushResultHandler.java   |  4 +-
 .../activiti/ActivitiUserWorkflowAdapter.java   |  4 +-
 core/src/main/resources/indexes.xml             | 28 ++++++-
 23 files changed, 189 insertions(+), 182 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/common/src/main/java/org/apache/syncope/common/services/JAXRSService.java
----------------------------------------------------------------------
diff --git 
a/common/src/main/java/org/apache/syncope/common/services/JAXRSService.java 
b/common/src/main/java/org/apache/syncope/common/services/JAXRSService.java
index c801bb1..757d298 100644
--- a/common/src/main/java/org/apache/syncope/common/services/JAXRSService.java
+++ b/common/src/main/java/org/apache/syncope/common/services/JAXRSService.java
@@ -36,4 +36,6 @@ public interface JAXRSService {
 
     final String PARAM_ORDERBY = "orderby";
 
+    final String PARAM_DETAILS = "details";
+
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/common/src/main/java/org/apache/syncope/common/services/RoleService.java
----------------------------------------------------------------------
diff --git 
a/common/src/main/java/org/apache/syncope/common/services/RoleService.java 
b/common/src/main/java/org/apache/syncope/common/services/RoleService.java
index 1f4e45b..9bd1588 100644
--- a/common/src/main/java/org/apache/syncope/common/services/RoleService.java
+++ b/common/src/main/java/org/apache/syncope/common/services/RoleService.java
@@ -138,6 +138,7 @@ public interface RoleService extends JAXRSService {
      * @param page result page number
      * @param size number of entries per page
      * @param orderBy list of ordering clauses, separated by comma
+     * @param details whether include all details or not, defaults to true
      * @return paged list of existing roles matching page/size conditions
      */
     @GET
@@ -145,7 +146,8 @@ public interface RoleService extends JAXRSService {
     PagedResult<RoleTO> list(
             @NotNull @Min(1) @QueryParam(PARAM_PAGE) 
@DefaultValue(DEFAULT_PARAM_PAGE) Integer page,
             @NotNull @Min(1) @QueryParam(PARAM_SIZE) 
@DefaultValue(DEFAULT_PARAM_SIZE) Integer size,
-            @QueryParam(PARAM_ORDERBY) String orderBy);
+            @QueryParam(PARAM_ORDERBY) String orderBy,
+            @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details);
 
     /**
      * Returns a paged list of roles matching the provided FIQL search 
condition.
@@ -193,6 +195,7 @@ public interface RoleService extends JAXRSService {
      * @param page result page number
      * @param size number of entries per page
      * @param orderBy list of ordering clauses, separated by comma
+     * @param details whether include all details or not, defaults to true
      * @return paged list of roles matching the provided FIQL search condition
      */
     @GET
@@ -201,7 +204,8 @@ public interface RoleService extends JAXRSService {
     PagedResult<RoleTO> search(@QueryParam(PARAM_FIQL) String fiql,
             @NotNull @Min(1) @QueryParam(PARAM_PAGE) 
@DefaultValue(DEFAULT_PARAM_PAGE) Integer page,
             @NotNull @Min(1) @QueryParam(PARAM_SIZE) 
@DefaultValue(DEFAULT_PARAM_SIZE) Integer size,
-            @QueryParam(PARAM_ORDERBY) String orderBy);
+            @QueryParam(PARAM_ORDERBY) String orderBy,
+            @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details);
 
     /**
      * Creates a new role.

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/common/src/main/java/org/apache/syncope/common/services/UserService.java
----------------------------------------------------------------------
diff --git 
a/common/src/main/java/org/apache/syncope/common/services/UserService.java 
b/common/src/main/java/org/apache/syncope/common/services/UserService.java
index c720218..270920f 100644
--- a/common/src/main/java/org/apache/syncope/common/services/UserService.java
+++ b/common/src/main/java/org/apache/syncope/common/services/UserService.java
@@ -131,6 +131,7 @@ public interface UserService extends JAXRSService {
      * @param page result page number
      * @param size number of entries per page
      * @param orderBy list of ordering clauses, separated by comma
+     * @param details whether include all details or not, defaults to true
      * @return paged list of existing users matching page/size conditions
      */
     @GET
@@ -138,7 +139,8 @@ public interface UserService extends JAXRSService {
     PagedResult<UserTO> list(
             @NotNull @Min(1) @QueryParam(PARAM_PAGE) 
@DefaultValue(DEFAULT_PARAM_PAGE) Integer page,
             @NotNull @Min(1) @QueryParam(PARAM_SIZE) 
@DefaultValue(DEFAULT_PARAM_SIZE) Integer size,
-            @QueryParam(PARAM_ORDERBY) String orderBy);
+            @QueryParam(PARAM_ORDERBY) String orderBy,
+            @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details);
 
     /**
      * Returns a paged list of users matching the provided FIQL search 
condition.
@@ -185,6 +187,7 @@ public interface UserService extends JAXRSService {
      * @param page result page number
      * @param size number of entries per page
      * @param orderBy list of ordering clauses, separated by comma
+     * @param details whether include all details or not, defaults to true
      * @return paged list of users matching the provided FIQL search condition
      */
     @GET
@@ -193,7 +196,8 @@ public interface UserService extends JAXRSService {
     PagedResult<UserTO> search(@QueryParam(PARAM_FIQL) String fiql,
             @NotNull @Min(1) @QueryParam(PARAM_PAGE) 
@DefaultValue(DEFAULT_PARAM_PAGE) Integer page,
             @NotNull @Min(1) @QueryParam(PARAM_SIZE) 
@DefaultValue(DEFAULT_PARAM_SIZE) Integer size,
-            @QueryParam(PARAM_ORDERBY) String orderBy);
+            @QueryParam(PARAM_ORDERBY) String orderBy,
+            @QueryParam(PARAM_DETAILS) @DefaultValue("true") boolean details);
 
     /**
      * Creates a new user.

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/java/org/apache/syncope/console/commons/Constants.java
----------------------------------------------------------------------
diff --git 
a/console/src/main/java/org/apache/syncope/console/commons/Constants.java 
b/console/src/main/java/org/apache/syncope/console/commons/Constants.java
index 92f8d77..d43759d 100644
--- a/console/src/main/java/org/apache/syncope/console/commons/Constants.java
+++ b/console/src/main/java/org/apache/syncope/console/commons/Constants.java
@@ -46,8 +46,6 @@ public final class Constants {
 
     public static final String PREF_USERS_DERIVED_ATTRIBUTES_VIEW = 
"users.derived.attributes.view";
 
-    public static final String PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW = 
"users.virtual.attributes.view";
-
     public static final String PREF_CONF_SCHEMA_PAGINATOR_ROWS = 
"conf.schema.paginator.rows";
 
     public static final String PREF_USER_SCHEMA_PAGINATOR_ROWS = 
"user.schema.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git 
a/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
 
b/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
index 724b7cd..dd60881 100644
--- 
a/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
+++ 
b/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
@@ -68,10 +68,8 @@ public class DisplayAttributesModalPage extends 
BaseModalPage {
 
     private final List<String> selectedDerSchemas;
 
-    private final List<String> selectedVirSchemas;
-
     public DisplayAttributesModalPage(final PageReference pageRef, final 
ModalWindow window,
-            final List<String> schemaNames, final List<String> dSchemaNames, 
final List<String> vSchemaNames) {
+            final List<String> schemaNames, final List<String> dSchemaNames) {
 
         super();
 
@@ -105,16 +103,6 @@ public class DisplayAttributesModalPage extends 
BaseModalPage {
             }
         };
 
-        final IModel<List<String>> vsnames = new 
LoadableDetachableModel<List<String>>() {
-
-            private static final long serialVersionUID = 5275935387613157437L;
-
-            @Override
-            protected List<String> load() {
-                return vSchemaNames;
-            }
-        };
-
         final Form form = new Form(FORM);
         form.setModel(new CompoundPropertyModel(this));
 
@@ -124,8 +112,6 @@ public class DisplayAttributesModalPage extends 
BaseModalPage {
 
         selectedDerSchemas = prefMan.getList(getRequest(), 
Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW);
 
-        selectedVirSchemas = prefMan.getList(getRequest(), 
Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW);
-
         final CheckGroup dgroup = new CheckGroup("dCheckGroup", new 
PropertyModel(this, "selectedDetails"));
         form.add(dgroup);
 
@@ -191,39 +177,13 @@ public class DisplayAttributesModalPage extends 
BaseModalPage {
             dsgroup.add(derSchemas);
         }
 
-        if (vsnames.getObject() == null || vsnames.getObject().isEmpty()) {
-            final Fragment fragment = new Fragment("vschemas", 
"emptyFragment", form);
-            form.add(fragment);
-
-            selectedVirSchemas.clear();
-        } else {
-            final Fragment fragment = new Fragment("vschemas", "vsfragment", 
form);
-            form.add(fragment);
-
-            final CheckGroup vsgroup = new CheckGroup("vsCheckGroup", new 
PropertyModel(this, "selectedVirSchemas"));
-            fragment.add(vsgroup);
-
-            final ListView<String> virSchemas = new 
ListView<String>("virSchemas", vsnames) {
-
-                private static final long serialVersionUID = 
9101744072914090143L;
-
-                @Override
-                protected void populateItem(ListItem<String> item) {
-                    item.add(new Check("vscheck", item.getModel()));
-                    item.add(new Label("vsname", new 
ResourceModel(item.getModelObject(), item.getModelObject())));
-                }
-            };
-            vsgroup.add(virSchemas);
-        }
-
         final AjaxButton submit = new IndicatingAjaxButton(SUBMIT, new 
ResourceModel(SUBMIT)) {
 
             private static final long serialVersionUID = -4804368561204623354L;
 
             @Override
             protected void onSubmit(final AjaxRequestTarget target, final 
Form<?> form) {
-                if (selectedDetails.size() + selectedSchemas.size() + 
selectedVirSchemas.size() + selectedDerSchemas.
-                        size()
+                if (selectedDetails.size() + selectedSchemas.size() + 
selectedDerSchemas.size()
                         > MAX_SELECTIONS) {
 
                     error(getString("tooManySelections"));
@@ -237,8 +197,6 @@ public class DisplayAttributesModalPage extends 
BaseModalPage {
 
                     prefs.put(Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW, 
selectedDerSchemas);
 
-                    prefs.put(Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW, 
selectedVirSchemas);
-
                     prefMan.setList(getRequest(), getResponse(), prefs);
 
                     ((BasePage) pageRef.getPage()).setModalResult(true);

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
----------------------------------------------------------------------
diff --git 
a/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
 
b/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
index 84b9e31..c519c52 100644
--- 
a/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
+++ 
b/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
@@ -69,8 +69,6 @@ public class UserSearchResultPanel extends 
AbstractSearchResultPanel {
 
     private final List<String> dSchemaNames;
 
-    private final List<String> vSchemaNames;
-
     public <T extends AbstractAttributableTO> UserSearchResultPanel(final 
String id, final boolean filtered,
             final String fiql, final PageReference callerRef, final 
AbstractSubjectRestClient restClient) {
 
@@ -78,7 +76,6 @@ public class UserSearchResultPanel extends 
AbstractSearchResultPanel {
 
         this.schemaNames = 
schemaRestClient.getSchemaNames(AttributableType.USER);
         this.dSchemaNames = 
schemaRestClient.getDerSchemaNames(AttributableType.USER);
-        this.vSchemaNames = 
schemaRestClient.getVirSchemaNames(AttributableType.USER);
 
         initResultTable();
     }
@@ -113,12 +110,6 @@ public class UserSearchResultPanel extends 
AbstractSearchResultPanel {
             }
         }
 
-        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW)) {
-            if (vSchemaNames.contains(name)) {
-                columns.add(new AttrColumn(name, SchemaType.VIRTUAL));
-            }
-        }
-
         // Add defaults in case of no selection
         if (columns.isEmpty()) {
             for (String name : DisplayAttributesModalPage.DEFAULT_SELECTION) {
@@ -252,8 +243,8 @@ public class UserSearchResultPanel extends 
AbstractSearchResultPanel {
 
                             @Override
                             public Page createPage() {
-                                return new 
DisplayAttributesModalPage(page.getPageReference(), displaymodal,
-                                        schemaNames, dSchemaNames, 
vSchemaNames);
+                                return new DisplayAttributesModalPage(
+                                        page.getPageReference(), displaymodal, 
schemaNames, dSchemaNames);
                             }
                         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/java/org/apache/syncope/console/rest/RoleRestClient.java
----------------------------------------------------------------------
diff --git 
a/console/src/main/java/org/apache/syncope/console/rest/RoleRestClient.java 
b/console/src/main/java/org/apache/syncope/console/rest/RoleRestClient.java
index e5a7587..a26a5cf 100644
--- a/console/src/main/java/org/apache/syncope/console/rest/RoleRestClient.java
+++ b/console/src/main/java/org/apache/syncope/console/rest/RoleRestClient.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.console.rest;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.ws.rs.core.Response;
@@ -53,12 +54,17 @@ public class RoleRestClient extends 
AbstractSubjectRestClient {
     }
 
     public List<RoleTO> list() {
-        return getService(RoleService.class).list(1, 1000).getResult();
+        final List<RoleTO> allRoles = new ArrayList<RoleTO>();
+        final int count = count();
+        for (int page = 1; page <= (count / 100) + 1; page++) {
+            allRoles.addAll(getService(RoleService.class).list(page, 100, 
null, false).getResult());
+        }
+        return allRoles;
     }
 
     @Override
     public List<RoleTO> list(final int page, final int size, final 
SortParam<String> sort) {
-        return getService(RoleService.class).list(page, size, 
toOrderBy(sort)).getResult();
+        return getService(RoleService.class).list(page, size, toOrderBy(sort), 
false).getResult();
     }
 
     @Override
@@ -68,7 +74,7 @@ public class RoleRestClient extends AbstractSubjectRestClient 
{
 
     @Override
     public List<RoleTO> search(final String fiql, final int page, final int 
size, final SortParam<String> sort) {
-        return getService(RoleService.class).search(fiql, page, size, 
toOrderBy(sort)).getResult();
+        return getService(RoleService.class).search(fiql, page, size, 
toOrderBy(sort), false).getResult();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/java/org/apache/syncope/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git 
a/console/src/main/java/org/apache/syncope/console/rest/UserRestClient.java 
b/console/src/main/java/org/apache/syncope/console/rest/UserRestClient.java
index f9e73ee..b064fd3 100644
--- a/console/src/main/java/org/apache/syncope/console/rest/UserRestClient.java
+++ b/console/src/main/java/org/apache/syncope/console/rest/UserRestClient.java
@@ -55,7 +55,7 @@ public class UserRestClient extends AbstractSubjectRestClient 
{
 
     @Override
     public List<UserTO> list(final int page, final int size, final 
SortParam<String> sort) {
-        return getService(UserService.class).list(page, size, 
toOrderBy(sort)).getResult();
+        return getService(UserService.class).list(page, size, toOrderBy(sort), 
false).getResult();
     }
 
     public UserTO create(final UserTO userTO, final boolean storePassword) {
@@ -101,7 +101,7 @@ public class UserRestClient extends 
AbstractSubjectRestClient {
 
     @Override
     public List<UserTO> search(final String fiql, final int page, final int 
size, final SortParam<String> sort) {
-        return getService(UserService.class).search(fiql, page, size, 
toOrderBy(sort)).getResult();
+        return getService(UserService.class).search(fiql, page, size, 
toOrderBy(sort), false).getResult();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/main/resources/org/apache/syncope/console/pages/DisplayAttributesModalPage.html
----------------------------------------------------------------------
diff --git 
a/console/src/main/resources/org/apache/syncope/console/pages/DisplayAttributesModalPage.html
 
b/console/src/main/resources/org/apache/syncope/console/pages/DisplayAttributesModalPage.html
index 9d9d233..bb1ba9d 100644
--- 
a/console/src/main/resources/org/apache/syncope/console/pages/DisplayAttributesModalPage.html
+++ 
b/console/src/main/resources/org/apache/syncope/console/pages/DisplayAttributesModalPage.html
@@ -81,8 +81,6 @@ under the License.
 
         <span wicket:id="dschemas">[derived schemas]</span>
 
-        <span wicket:id="vschemas">[virtual schemas]</span>
-
       </div>
 
       <wicket:fragment wicket:id="sfragment">

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/console/src/test/java/org/apache/syncope/console/ReportTestITCase.java
----------------------------------------------------------------------
diff --git 
a/console/src/test/java/org/apache/syncope/console/ReportTestITCase.java 
b/console/src/test/java/org/apache/syncope/console/ReportTestITCase.java
index fae8233..59319a6 100644
--- a/console/src/test/java/org/apache/syncope/console/ReportTestITCase.java
+++ b/console/src/test/java/org/apache/syncope/console/ReportTestITCase.java
@@ -30,7 +30,7 @@ public class ReportTestITCase extends AbstractTest {
         
seleniumDriver.findElement(By.xpath("//img[@alt=\"Reports\"]")).click();        
 
         
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
-        
seleniumDriver.findElement(By.xpath("//table/tbody/tr/td[8]/div/span[13]/a")).click();
+        
seleniumDriver.findElement(By.xpath("//table/tbody/tr/td[9]/div/span[13]/a")).click();
         
         
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
         seleniumDriver.switchTo().frame(0);
@@ -72,7 +72,7 @@ public class ReportTestITCase extends AbstractTest {
 
         
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
 
-        
seleniumDriver.findElement(By.xpath("//table/tbody/tr/td[8]/div/span[6]/a")).click();
+        
seleniumDriver.findElement(By.xpath("//table/tbody/tr/td[9]/div/span[6]/a")).click();
 
         
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("feedback")));
         
assertTrue(seleniumDriver.findElement(By.tagName("body")).getText().contains("Operation
 executed successfully"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
 
b/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
index 48caa54..fead0a1 100644
--- 
a/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
+++ 
b/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
@@ -202,7 +202,7 @@ public class NotificationManager {
                 LOG.warn("{} cannot be notified: {} not found", recipient, 
notification.getRecipientAttrName());
             } else {
                 recipientEmails.add(email);
-                recipientTOs.add(userDataBinder.getUserTO(recipient));
+                recipientTOs.add(userDataBinder.getUserTO(recipient, true));
             }
         }
 
@@ -324,20 +324,20 @@ public class NotificationManager {
                     model.put("input", input);
 
                     if (subject instanceof SyncopeUser) {
-                        model.put("user", 
userDataBinder.getUserTO((SyncopeUser) subject));
+                        model.put("user", 
userDataBinder.getUserTO((SyncopeUser) subject, true));
                     } else if (subject instanceof SyncopeRole) {
-                        model.put("role", 
roleDataBinder.getRoleTO((SyncopeRole) subject));
+                        model.put("role", 
roleDataBinder.getRoleTO((SyncopeRole) subject, true));
                     }
                     NotificationTask notificationTask = 
getNotificationTask(notification, subject, model);
                     notificationTask = taskDAO.save(notificationTask);
-                    notificationList.add(notificationTask);                    
+                    notificationList.add(notificationTask);
                 }
             } else {
                 LOG.debug("Notification {}, userAbout {}, roleAbout {} is 
deactivated, "
                         + "notification task will not be created", 
notification.getId(),
                         notification.getUserAbout(), 
notification.getRoleAbout());
             }
-        }        
+        }
         return notificationList;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java 
b/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java
index dae1259..aa8b93f 100644
--- a/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java
+++ b/core/src/main/java/org/apache/syncope/core/report/RoleReportlet.java
@@ -231,7 +231,7 @@ public class RoleReportlet extends 
AbstractReportlet<RoleReportletConf> {
 
             // Using RoleTO for attribute values, since the conversion logic of
             // values to String is already encapsulated there
-            RoleTO roleTO = roleDataBinder.getRoleTO(role);
+            RoleTO roleTO = roleDataBinder.getRoleTO(role, true);
 
             doExtractAttributes(handler, roleTO, conf.getAttrs(), 
conf.getDerAttrs(), conf.getVirAttrs());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java 
b/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java
index 30bdac0..a54ac53 100644
--- a/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java
+++ b/core/src/main/java/org/apache/syncope/core/report/UserReportlet.java
@@ -269,7 +269,7 @@ public class UserReportlet extends 
AbstractReportlet<UserReportletConf> {
 
             // Using UserTO for attribute values, since the conversion logic of
             // values to String is already encapsulated there
-            UserTO userTO = userDataBinder.getUserTO(user);
+            UserTO userTO = userDataBinder.getUserTO(user, true);
 
             doExtractAttributes(handler, userTO, conf.getAttrs(), 
conf.getDerAttrs(), conf.getVirAttrs());
 
@@ -293,7 +293,7 @@ public class UserReportlet extends 
AbstractReportlet<UserReportletConf> {
                             LOG.warn("Unexpected: cannot find membership for 
role {} for user {}", memb.getRoleId(),
                                     user);
                         } else {
-                            doExtractResources(handler, 
roleDataBinder.getRoleTO(actualMemb.getSyncopeRole()));
+                            doExtractResources(handler, 
roleDataBinder.getRoleTO(actualMemb.getSyncopeRole(), true));
                         }
                     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/rest/controller/AbstractSubjectController.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/rest/controller/AbstractSubjectController.java
 
b/core/src/main/java/org/apache/syncope/core/rest/controller/AbstractSubjectController.java
index 8ae6581..a7bb91f 100644
--- 
a/core/src/main/java/org/apache/syncope/core/rest/controller/AbstractSubjectController.java
+++ 
b/core/src/main/java/org/apache/syncope/core/rest/controller/AbstractSubjectController.java
@@ -35,9 +35,10 @@ public abstract class AbstractSubjectController<T extends 
AbstractSubjectTO, V e
 
     public abstract T delete(Long id);
 
-    public abstract List<T> list(int page, int size, List<OrderByClause> 
orderBy);
+    public abstract List<T> list(int page, int size, List<OrderByClause> 
orderBy, boolean includeDetails);
 
-    public abstract List<T> search(SearchCond searchCondition, int page, int 
size, List<OrderByClause> orderBy);
+    public abstract List<T> search(SearchCond searchCondition,
+            int page, int size, List<OrderByClause> orderBy, boolean 
includeDetails);
 
     public abstract int searchCount(SearchCond searchCondition);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
 
b/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
index a64bdb5..c8fb25f 100644
--- 
a/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
+++ 
b/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
@@ -111,7 +111,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
             throw new NotFoundException("Role " + roleId);
         }
 
-        return binder.getRoleTO(role);
+        return binder.getRoleTO(role, true);
     }
 
     @PreAuthorize("isAuthenticated() "
@@ -138,7 +138,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
             throw new UnauthorizedRoleException(role.getId());
         }
 
-        return binder.getRoleTO(role);
+        return binder.getRoleTO(role, true);
     }
 
     @PreAuthorize("hasRole('ROLE_READ')")
@@ -153,12 +153,12 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
 
         RoleTO result = role.getParent() == null
                 ? null
-                : binder.getRoleTO(role.getParent());
+                : binder.getRoleTO(role.getParent(), true);
 
         return result;
     }
 
-    @PreAuthorize("hasRole('ROLE_READ')")
+    @PreAuthorize("hasRole('ROLE_LIST')")
     @Transactional(readOnly = true)
     public List<RoleTO> children(final Long roleId) {
         SyncopeRole role = binder.getRoleFromId(roleId);
@@ -169,7 +169,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
         List<RoleTO> childrenTOs = new ArrayList<RoleTO>(children.size());
         for (SyncopeRole child : children) {
             if (allowedRoleIds.contains(child.getId())) {
-                childrenTOs.add(binder.getRoleTO(child));
+                childrenTOs.add(binder.getRoleTO(child, true));
             }
         }
 
@@ -186,12 +186,14 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     @Override
-    public List<RoleTO> list(final int page, final int size, final 
List<OrderByClause> orderBy) {
+    public List<RoleTO> list(
+            final int page, final int size, final List<OrderByClause> orderBy, 
final boolean details) {
+
         List<SyncopeRole> roles = roleDAO.findAll(page, size, orderBy);
 
         List<RoleTO> roleTOs = new ArrayList<RoleTO>(roles.size());
         for (SyncopeRole role : roles) {
-            roleTOs.add(binder.getRoleTO(role));
+            roleTOs.add(binder.getRoleTO(role, details));
         }
 
         return roleTOs;
@@ -209,7 +211,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
     @Transactional(readOnly = true, rollbackFor = { Throwable.class })
     @Override
     public List<RoleTO> search(final SearchCond searchCondition, final int 
page, final int size,
-            final List<OrderByClause> orderBy) {
+            final List<OrderByClause> orderBy, final boolean details) {
 
         final List<SyncopeRole> matchingRoles = searchDAO.search(
                 
EntitlementUtil.getRoleIds(EntitlementUtil.getOwnedEntitlementNames()),
@@ -217,7 +219,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
 
         final List<RoleTO> result = new 
ArrayList<RoleTO>(matchingRoles.size());
         for (SyncopeRole role : matchingRoles) {
-            result.add(binder.getRoleTO(role));
+            result.add(binder.getRoleTO(role, details));
         }
 
         return result;
@@ -426,7 +428,7 @@ public class RoleController extends 
AbstractSubjectController<RoleTO, RoleMod> {
             propagationReporter.onPrimaryResourceFailure(tasks);
         }
 
-        final RoleTO updatedTO = binder.getRoleTO(role);
+        final RoleTO updatedTO = binder.getRoleTO(role, true);
         
updatedTO.getPropagationStatusTOs().addAll(propagationReporter.getStatuses());
         return updatedTO;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
 
b/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
index dc5fdd2..5cbd5de 100644
--- 
a/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
+++ 
b/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
@@ -147,13 +147,15 @@ public class UserController extends 
AbstractSubjectController<UserTO, UserMod> {
     @PreAuthorize("hasRole('USER_LIST')")
     @Transactional(readOnly = true, rollbackFor = { Throwable.class })
     @Override
-    public List<UserTO> list(final int page, final int size, final 
List<OrderByClause> orderBy) {
+    public List<UserTO> list(
+            final int page, final int size, final List<OrderByClause> orderBy, 
final boolean details) {
+
         Set<Long> adminRoleIds = 
EntitlementUtil.getRoleIds(EntitlementUtil.getOwnedEntitlementNames());
 
         List<SyncopeUser> users = userDAO.findAll(adminRoleIds, page, size, 
orderBy);
         List<UserTO> userTOs = new ArrayList<UserTO>(users.size());
         for (SyncopeUser user : users) {
-            userTOs.add(binder.getUserTO(user));
+            userTOs.add(binder.getUserTO(user, details));
         }
 
         return userTOs;
@@ -177,7 +179,7 @@ public class UserController extends 
AbstractSubjectController<UserTO, UserMod> {
     @Transactional(readOnly = true)
     @Override
     public List<UserTO> search(final SearchCond searchCondition, final int 
page, final int size,
-            final List<OrderByClause> orderBy) {
+            final List<OrderByClause> orderBy, final boolean details) {
 
         final List<SyncopeUser> matchingUsers = searchDAO.search(
                 
EntitlementUtil.getRoleIds(EntitlementUtil.getOwnedEntitlementNames()),
@@ -185,7 +187,7 @@ public class UserController extends 
AbstractSubjectController<UserTO, UserMod> {
 
         final List<UserTO> result = new 
ArrayList<UserTO>(matchingUsers.size());
         for (SyncopeUser user : matchingUsers) {
-            result.add(binder.getUserTO(user));
+            result.add(binder.getUserTO(user, details));
         }
 
         return result;
@@ -600,7 +602,7 @@ public class UserController extends 
AbstractSubjectController<UserTO, UserMod> {
             propagationReporter.onPrimaryResourceFailure(tasks);
         }
 
-        final UserTO updatedUserTO = binder.getUserTO(user);
+        final UserTO updatedUserTO = binder.getUserTO(user, true);
         
updatedUserTO.getPropagationStatusTOs().addAll(propagationReporter.getStatuses());
         return updatedUserTO;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/rest/data/RoleDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/rest/data/RoleDataBinder.java 
b/core/src/main/java/org/apache/syncope/core/rest/data/RoleDataBinder.java
index 58029aa..fcd5c06 100644
--- a/core/src/main/java/org/apache/syncope/core/rest/data/RoleDataBinder.java
+++ b/core/src/main/java/org/apache/syncope/core/rest/data/RoleDataBinder.java
@@ -369,9 +369,7 @@ public class RoleDataBinder extends 
AbstractAttributableDataBinder {
 
     @SuppressWarnings("unchecked")
     @Transactional(readOnly = true)
-    public RoleTO getRoleTO(final SyncopeRole role) {
-        connObjectUtil.retrieveVirAttrValues(role, 
AttributableUtil.getInstance(AttributableType.ROLE));
-
+    public RoleTO getRoleTO(final SyncopeRole role, final boolean details) {
         RoleTO roleTO = new RoleTO();
 
         // set sys info
@@ -405,41 +403,6 @@ public class RoleDataBinder extends 
AbstractAttributableDataBinder {
             roleTO.setRoleOwner(role.getRoleOwner().getId());
         }
 
-        // -------------------------
-        // Retrieve all [derived/virtual] attributes (inherited and not)
-        // -------------------------        
-        final List<RAttr> allAttributes = 
role.findLastInheritedAncestorAttributes();
-
-        final List<RDerAttr> allDerAttributes = 
role.findLastInheritedAncestorDerivedAttributes();
-
-        final List<RVirAttr> allVirAttributes = 
role.findLastInheritedAncestorVirtualAttributes();
-        // -------------------------
-
-        fillTO(roleTO, allAttributes, allDerAttributes, allVirAttributes, 
role.getResources());
-
-        for (Entitlement entitlement : role.getEntitlements()) {
-            roleTO.getEntitlements().add(entitlement.getName());
-        }
-
-        for (RAttrTemplate template : 
role.findInheritedTemplates(RAttrTemplate.class)) {
-            roleTO.getRAttrTemplates().add(template.getSchema().getName());
-        }
-        for (RDerAttrTemplate template : 
role.findInheritedTemplates(RDerAttrTemplate.class)) {
-            roleTO.getRDerAttrTemplates().add(template.getSchema().getName());
-        }
-        for (RVirAttrTemplate template : 
role.findInheritedTemplates(RVirAttrTemplate.class)) {
-            roleTO.getRVirAttrTemplates().add(template.getSchema().getName());
-        }
-        for (MAttrTemplate template : 
role.findInheritedTemplates(MAttrTemplate.class)) {
-            roleTO.getMAttrTemplates().add(template.getSchema().getName());
-        }
-        for (MDerAttrTemplate template : 
role.findInheritedTemplates(MDerAttrTemplate.class)) {
-            roleTO.getMDerAttrTemplates().add(template.getSchema().getName());
-        }
-        for (MVirAttrTemplate template : 
role.findInheritedTemplates(MVirAttrTemplate.class)) {
-            roleTO.getMVirAttrTemplates().add(template.getSchema().getName());
-        }
-
         roleTO.setPasswordPolicy(role.getPasswordPolicy() == null
                 ? null
                 : role.getPasswordPolicy().getId());
@@ -447,11 +410,50 @@ public class RoleDataBinder extends 
AbstractAttributableDataBinder {
                 ? null
                 : role.getAccountPolicy().getId());
 
+        if (details) {
+            // -------------------------
+            // Retrieve all [derived/virtual] attributes (inherited and not)
+            // -------------------------        
+            connObjectUtil.retrieveVirAttrValues(role, 
AttributableUtil.getInstance(AttributableType.ROLE));
+
+            final List<RAttr> allAttributes = 
role.findLastInheritedAncestorAttributes();
+
+            final List<RDerAttr> allDerAttributes = 
role.findLastInheritedAncestorDerivedAttributes();
+
+            final List<RVirAttr> allVirAttributes = 
role.findLastInheritedAncestorVirtualAttributes();
+            // -------------------------
+
+            fillTO(roleTO, allAttributes, allDerAttributes, allVirAttributes, 
role.getResources());
+
+            for (Entitlement entitlement : role.getEntitlements()) {
+                roleTO.getEntitlements().add(entitlement.getName());
+            }
+
+            for (RAttrTemplate template : 
role.findInheritedTemplates(RAttrTemplate.class)) {
+                roleTO.getRAttrTemplates().add(template.getSchema().getName());
+            }
+            for (RDerAttrTemplate template : 
role.findInheritedTemplates(RDerAttrTemplate.class)) {
+                
roleTO.getRDerAttrTemplates().add(template.getSchema().getName());
+            }
+            for (RVirAttrTemplate template : 
role.findInheritedTemplates(RVirAttrTemplate.class)) {
+                
roleTO.getRVirAttrTemplates().add(template.getSchema().getName());
+            }
+            for (MAttrTemplate template : 
role.findInheritedTemplates(MAttrTemplate.class)) {
+                roleTO.getMAttrTemplates().add(template.getSchema().getName());
+            }
+            for (MDerAttrTemplate template : 
role.findInheritedTemplates(MDerAttrTemplate.class)) {
+                
roleTO.getMDerAttrTemplates().add(template.getSchema().getName());
+            }
+            for (MVirAttrTemplate template : 
role.findInheritedTemplates(MVirAttrTemplate.class)) {
+                
roleTO.getMVirAttrTemplates().add(template.getSchema().getName());
+            }
+        }
+
         return roleTO;
     }
 
     @Transactional(readOnly = true)
     public RoleTO getRoleTO(final Long roleId) {
-        return getRoleTO(getRoleFromId(roleId));
+        return getRoleTO(getRoleFromId(roleId), true);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/rest/data/UserDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/rest/data/UserDataBinder.java 
b/core/src/main/java/org/apache/syncope/core/rest/data/UserDataBinder.java
index a904611..3ac56fc 100644
--- a/core/src/main/java/org/apache/syncope/core/rest/data/UserDataBinder.java
+++ b/core/src/main/java/org/apache/syncope/core/rest/data/UserDataBinder.java
@@ -163,7 +163,7 @@ public class UserDataBinder extends 
AbstractAttributableDataBinder {
             authUserTO.setUsername(adminUser);
         } else {
             SyncopeUser authUser = userDAO.find(authUsername);
-            authUserTO = getUserTO(authUser);
+            authUserTO = getUserTO(authUser, true);
         }
 
         return authUserTO;
@@ -327,7 +327,7 @@ public class UserDataBinder extends 
AbstractAttributableDataBinder {
                 // of the user object currently in memory (which has 
potentially
                 // some modifications compared to the one stored in the DB
                 membership = 
user.getMembership(membership.getSyncopeRole().getId());
-                if 
(membershipToBeAddedRoleIds.contains(membership.getSyncopeRole().getId())) {
+                if (membership != null && 
membershipToBeAddedRoleIds.contains(membership.getSyncopeRole().getId())) {
                     Set<Long> attributeIds = new 
HashSet<Long>(membership.getAttrs().size());
                     for (AbstractAttr attribute : membership.getAttrs()) {
                         attributeIds.add(attribute.getId());
@@ -413,7 +413,7 @@ public class UserDataBinder extends 
AbstractAttributableDataBinder {
     }
 
     @Transactional(readOnly = true)
-    public UserTO getUserTO(final SyncopeUser user) {
+    public UserTO getUserTO(final SyncopeUser user, final boolean details) {
         UserTO userTO = new UserTO();
 
         BeanUtils.copyProperties(user, userTO, IGNORE_USER_PROPERTIES);
@@ -422,31 +422,36 @@ public class UserDataBinder extends 
AbstractAttributableDataBinder {
             userTO.setSecurityQuestion(user.getSecurityQuestion().getId());
         }
 
-        connObjectUtil.retrieveVirAttrValues(user, 
AttributableUtil.getInstance(AttributableType.USER));
+        if (details) {
+            connObjectUtil.retrieveVirAttrValues(user, 
AttributableUtil.getInstance(AttributableType.USER));
+        }
+
         fillTO(userTO, user.getAttrs(), user.getDerAttrs(), 
user.getVirAttrs(), user.getResources());
 
-        MembershipTO membershipTO;
-        for (Membership membership : user.getMemberships()) {
-            membershipTO = new MembershipTO();
+        if (details) {
+            for (Membership membership : user.getMemberships()) {
+                MembershipTO membershipTO = new MembershipTO();
 
-            // set sys info
-            membershipTO.setCreator(membership.getCreator());
-            membershipTO.setCreationDate(membership.getCreationDate());
-            membershipTO.setLastModifier(membership.getLastModifier());
-            membershipTO.setLastChangeDate(membership.getLastChangeDate());
+                // set sys info
+                membershipTO.setCreator(membership.getCreator());
+                membershipTO.setCreationDate(membership.getCreationDate());
+                membershipTO.setLastModifier(membership.getLastModifier());
+                membershipTO.setLastChangeDate(membership.getLastChangeDate());
 
-            membershipTO.setId(membership.getId());
-            membershipTO.setRoleId(membership.getSyncopeRole().getId());
-            membershipTO.setRoleName(membership.getSyncopeRole().getName());
+                membershipTO.setId(membership.getId());
+                membershipTO.setRoleId(membership.getSyncopeRole().getId());
+                
membershipTO.setRoleName(membership.getSyncopeRole().getName());
 
-            // SYNCOPE-458 retrieve also membership virtual attributes
-            connObjectUtil.retrieveVirAttrValues(membership, 
AttributableUtil.getInstance(AttributableType.MEMBERSHIP));
+                // SYNCOPE-458 retrieve also membership virtual attributes
+                connObjectUtil.retrieveVirAttrValues(membership, 
AttributableUtil.getInstance(
+                        AttributableType.MEMBERSHIP));
 
-            fillTO(membershipTO,
-                    membership.getAttrs(), membership.getDerAttrs(), 
membership.getVirAttrs(),
-                    Collections.<ExternalResource>emptyList());
+                fillTO(membershipTO,
+                        membership.getAttrs(), membership.getDerAttrs(), 
membership.getVirAttrs(),
+                        Collections.<ExternalResource>emptyList());
 
-            userTO.getMemberships().add(membershipTO);
+                userTO.getMemberships().add(membershipTO);
+            }
         }
 
         return userTO;
@@ -454,12 +459,12 @@ public class UserDataBinder extends 
AbstractAttributableDataBinder {
 
     @Transactional(readOnly = true)
     public UserTO getUserTO(final String username) {
-        return getUserTO(getUserFromUsername(username));
+        return getUserTO(getUserFromUsername(username), true);
     }
 
     @Transactional(readOnly = true)
     public UserTO getUserTO(final Long userId) {
-        return getUserTO(getUserFromId(userId));
+        return getUserTO(getUserFromId(userId), true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/services/RoleServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/services/RoleServiceImpl.java 
b/core/src/main/java/org/apache/syncope/core/services/RoleServiceImpl.java
index 91466a5..04d48ea 100644
--- a/core/src/main/java/org/apache/syncope/core/services/RoleServiceImpl.java
+++ b/core/src/main/java/org/apache/syncope/core/services/RoleServiceImpl.java
@@ -67,23 +67,25 @@ public class RoleServiceImpl extends AbstractServiceImpl 
implements RoleService
 
     @Override
     public PagedResult<RoleTO> list() {
-        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null);
+        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null, 
true);
     }
 
     @Override
     public PagedResult<RoleTO> list(final String orderBy) {
-        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, 
orderBy);
+        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, 
orderBy, true);
     }
 
     @Override
     public PagedResult<RoleTO> list(final Integer page, final Integer size) {
-        return list(page, size, null);
+        return list(page, size, null, true);
     }
 
     @Override
-    public PagedResult<RoleTO> list(final Integer page, final Integer size, 
final String orderBy) {
+    public PagedResult<RoleTO> list(
+            final Integer page, final Integer size, final String orderBy, 
final boolean details) {
+
         List<OrderByClause> orderByClauses = getOrderByClauses(orderBy);
-        return buildPagedResult(controller.list(page, size, orderByClauses), 
page, size, controller.count());
+        return buildPagedResult(controller.list(page, size, orderByClauses, 
details), page, size, controller.count());
     }
 
     @Override
@@ -98,25 +100,27 @@ public class RoleServiceImpl extends AbstractServiceImpl 
implements RoleService
 
     @Override
     public PagedResult<RoleTO> search(final String fiql) {
-        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, null);
+        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, null, true);
     }
 
     @Override
     public PagedResult<RoleTO> search(final String fiql, final String orderBy) 
{
-        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, orderBy);
+        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, orderBy, true);
     }
 
     @Override
     public PagedResult<RoleTO> search(final String fiql, final Integer page, 
final Integer size) {
-        return search(fiql, page, size, null);
+        return search(fiql, page, size, null, true);
     }
 
     @Override
-    public PagedResult<RoleTO> search(final String fiql, final Integer page, 
final Integer size, final String orderBy) {
+    public PagedResult<RoleTO> search(
+            final String fiql, final Integer page, final Integer size, final 
String orderBy, final boolean details) {
+
         SearchCond cond = getSearchCond(fiql);
         List<OrderByClause> orderByClauses = getOrderByClauses(orderBy);
         return buildPagedResult(
-                controller.search(cond, page, size, orderByClauses), page, 
size, controller.searchCount(cond));
+                controller.search(cond, page, size, orderByClauses, details), 
page, size, controller.searchCount(cond));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/services/UserServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/services/UserServiceImpl.java 
b/core/src/main/java/org/apache/syncope/core/services/UserServiceImpl.java
index e1287fe..7cd2ad7 100644
--- a/core/src/main/java/org/apache/syncope/core/services/UserServiceImpl.java
+++ b/core/src/main/java/org/apache/syncope/core/services/UserServiceImpl.java
@@ -79,23 +79,25 @@ public class UserServiceImpl extends AbstractServiceImpl 
implements UserService
 
     @Override
     public PagedResult<UserTO> list() {
-        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null);
+        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, null, 
true);
     }
 
     @Override
     public PagedResult<UserTO> list(final String orderBy) {
-        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, 
orderBy);
+        return list(DEFAULT_PARAM_PAGE_VALUE, DEFAULT_PARAM_SIZE_VALUE, 
orderBy, true);
     }
 
     @Override
     public PagedResult<UserTO> list(final Integer page, final Integer size) {
-        return list(page, size, null);
+        return list(page, size, null, true);
     }
 
     @Override
-    public PagedResult<UserTO> list(final Integer page, final Integer size, 
final String orderBy) {
+    public PagedResult<UserTO> list(
+            final Integer page, final Integer size, final String orderBy, 
final boolean details) {
+
         List<OrderByClause> orderByClauses = getOrderByClauses(orderBy);
-        return buildPagedResult(controller.list(page, size, orderByClauses), 
page, size, controller.count());
+        return buildPagedResult(controller.list(page, size, orderByClauses, 
details), page, size, controller.count());
     }
 
     @Override
@@ -105,25 +107,27 @@ public class UserServiceImpl extends AbstractServiceImpl 
implements UserService
 
     @Override
     public PagedResult<UserTO> search(final String fiql) {
-        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, null);
+        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, null, true);
     }
 
     @Override
     public PagedResult<UserTO> search(final String fiql, final String orderBy) 
{
-        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, orderBy);
+        return search(fiql, DEFAULT_PARAM_PAGE_VALUE, 
DEFAULT_PARAM_SIZE_VALUE, orderBy, true);
     }
 
     @Override
     public PagedResult<UserTO> search(final String fiql, final Integer page, 
final Integer size) {
-        return search(fiql, page, size, null);
+        return search(fiql, page, size, null, true);
     }
 
     @Override
-    public PagedResult<UserTO> search(final String fiql, final Integer page, 
final Integer size, final String orderBy) {
+    public PagedResult<UserTO> search(
+            final String fiql, final Integer page, final Integer size, final 
String orderBy, final boolean details) {
+
         SearchCond cond = getSearchCond(fiql);
         List<OrderByClause> orderByClauses = getOrderByClauses(orderBy);
         return buildPagedResult(
-                controller.search(cond, page, size, orderByClauses), page, 
size, controller.searchCount(cond));
+                controller.search(cond, page, size, orderByClauses, details), 
page, size, controller.searchCount(cond));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
 
b/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
index 18f7008..a6586b4 100644
--- 
a/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
+++ 
b/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
@@ -46,7 +46,7 @@ public class RolePushResultHandler extends 
AbstractSubjectPushResultHandler {
 
     @Override
     protected AbstractSubject deprovision(final AbstractSubject sbj) {
-        final RoleTO before = 
roleDataBinder.getRoleTO(SyncopeRole.class.cast(sbj));
+        final RoleTO before = 
roleDataBinder.getRoleTO(SyncopeRole.class.cast(sbj), true);
 
         final List<String> noPropResources = new 
ArrayList<String>(before.getResources());
         noPropResources.remove(profile.getSyncTask().getResource().getName());
@@ -58,7 +58,7 @@ public class RolePushResultHandler extends 
AbstractSubjectPushResultHandler {
 
     @Override
     protected AbstractSubject provision(final AbstractSubject sbj, final 
Boolean enabled) {
-        final RoleTO before = 
roleDataBinder.getRoleTO(SyncopeRole.class.cast(sbj));
+        final RoleTO before = 
roleDataBinder.getRoleTO(SyncopeRole.class.cast(sbj), true);
 
         final List<String> noPropResources = new 
ArrayList<String>(before.getResources());
         noPropResources.remove(profile.getSyncTask().getResource().getName());

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
 
b/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
index e15942e..2873c67 100644
--- 
a/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
+++ 
b/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
@@ -393,7 +393,7 @@ public class ActivitiUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
     @Override
     protected void doRequestPasswordReset(final SyncopeUser user) throws 
WorkflowException {
         Map<String, Object> variables = new HashMap<String, Object>(2);
-        variables.put(USER_TO, userDataBinder.getUserTO(user));
+        variables.put(USER_TO, userDataBinder.getUserTO(user, true));
         variables.put(EVENT, "requestPasswordReset");
 
         doExecuteTask(user, "requestPasswordReset", variables);
@@ -407,7 +407,7 @@ public class ActivitiUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
         Map<String, Object> variables = new HashMap<String, Object>(4);
         variables.put(TOKEN, token);
         variables.put(PASSWORD, password);
-        variables.put(USER_TO, userDataBinder.getUserTO(user));
+        variables.put(USER_TO, userDataBinder.getUserTO(user, true));
         variables.put(EVENT, "confirmPasswordReset");
 
         doExecuteTask(user, "confirmPasswordReset", variables);

http://git-wip-us.apache.org/repos/asf/syncope/blob/26123372/core/src/main/resources/indexes.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/indexes.xml 
b/core/src/main/resources/indexes.xml
index c63d931..ff308d6 100644
--- a/core/src/main/resources/indexes.xml
+++ b/core/src/main/resources/indexes.xml
@@ -26,16 +26,42 @@ under the License.
   <entry key="UAttrValue_longvalueIndex">CREATE INDEX 
UAttrValue_longvalueIndex ON UAttrValue(longvalue)</entry>
   <entry key="UAttrValue_doublevalueIndex">CREATE INDEX 
UAttrValue_doublevalueIndex ON UAttrValue(doublevalue)</entry>
   <entry key="UAttrValue_booleanvalueIndex">CREATE INDEX 
UAttrValue_booleanvalueIndex ON UAttrValue(booleanvalue)</entry>
+
   <entry key="MAttrValue_stringvalueIndex">CREATE INDEX 
MAttrValue_stringvalueIndex ON MAttrValue(stringvalue)</entry>
   <entry key="MAttrValue_datevalueIndex">CREATE INDEX 
MAttrValue_datevalueIndex ON MAttrValue(datevalue)</entry>
   <entry key="MAttrValue_longvalueIndex">CREATE INDEX 
MAttrValue_longvalueIndex ON MAttrValue(longvalue)</entry>
   <entry key="MAttrValue_doublevalueIndex">CREATE INDEX 
MAttrValue_doublevalueIndex ON MAttrValue(doublevalue)</entry>
   <entry key="MAttrValue_booleanvalueIndex">CREATE INDEX 
MAttrValue_booleanvalueIndex ON MAttrValue(booleanvalue)</entry>
+
   <entry key="RAttrValue_stringvalueIndex">CREATE INDEX 
RAttrValue_stringvalueIndex ON RAttrValue(stringvalue)</entry>
   <entry key="RAttrValue_datevalueIndex">CREATE INDEX 
RAttrValue_datevalueIndex ON RAttrValue(datevalue)</entry>
   <entry key="RAttrValue_longvalueIndex">CREATE INDEX 
RAttrValue_longvalueIndex ON RAttrValue(longvalue)</entry>
   <entry key="RAttrValue_doublevalueIndex">CREATE INDEX 
RAttrValue_doublevalueIndex ON RAttrValue(doublevalue)</entry>
   <entry key="RAttrValue_booleanvalueIndex">CREATE INDEX 
RAttrValue_booleanvalueIndex ON RAttrValue(booleanvalue)</entry>
+
+  <entry key="Membership_syncopeRoleIndex">CREATE INDEX 
Membership_syncopeRoleIndex ON Membership(syncopeRole_id)</entry>
+  <entry key="Membership_syncopeUserIndex">CREATE INDEX 
Membership_syncopeUserIndex ON Membership(syncopeUser_id)</entry>
+
+  <entry key="RAttrValue_attributeIdIndex">CREATE INDEX 
RAttrValue_attribute_idIndex on RAttrValue(attribute_id)</entry>
+  <entry key="UAttrValue_attributeIdIndex">CREATE INDEX 
UAttrValue_attribute_idIndex on UAttrValue(attribute_id)</entry>
+  <entry key="MAttrValue_attributeIdIndex">CREATE INDEX 
MAttrValue_attribute_idIndex on MAttrValue(attribute_id)</entry>
+  <entry key="CAttrValue_attributeIdIndex">CREATE INDEX 
CAttrValue_attribute_idIndex on CAttrValue(attribute_id)</entry>
+
+  <entry key="RAttr_templateIdIndex">CREATE INDEX RAttr_template_idIndex on 
RAttr(template_id)</entry>
+  <entry key="MAttr_templateIdIndex">CREATE INDEX MAttr_template_idIndex on 
MAttr(template_id)</entry>
+  <entry key="RAttr_owner_id_index">CREATE INDEX RAttr_owner_id_index on 
RAttr(owner_id)</entry>
+  <entry key="UAttr_owner_id_index">CREATE INDEX UAttr_owner_id_index on 
UAttr(owner_id)</entry>
+  <entry key="MAttr_owner_id_index">CREATE INDEX MAttr_owner_id_index on 
MAttr(owner_id)</entry>
+
+  <entry key="RDerAttr_owner_id_index">CREATE INDEX RDerAttr_owner_id_index on 
RDerAttr(owner_id)</entry>
+  <entry key="UDerAttr_owner_id_index">CREATE INDEX UDerAttr_owner_id_index on 
UDerAttr(owner_id)</entry>
+  <entry key="MDerAttr_owner_id_index">CREATE INDEX MDerAttr_owner_id_index on 
MDerAttr(owner_id)</entry>
+
+  <entry key="RVirAttr_owner_id_index">CREATE INDEX RVirAttr_owner_id_index on 
RVirAttr(owner_id)</entry>
+  <entry key="UVirAttr_owner_id_index">CREATE INDEX UVirAttr_owner_id_index on 
UVirAttr(owner_id)</entry>
+  <entry key="MVirAttr_owner_id_index">CREATE INDEX MVirAttr_owner_id_index on 
MVirAttr(owner_id)</entry>
+
   <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON 
Task(executed)</entry>
+
   <entry key="ACT_RU_TASK_PARENT_TASK_ID_">CREATE INDEX 
ACT_RU_TASK_PARENT_TASK_ID_ ON ACT_RU_TASK(PARENT_TASK_ID_)</entry>
-</properties>
+</properties>
\ No newline at end of file

Reply via email to