diff --git a/source/java/org/alfresco/rest/api/Sites.java b/source/java/org/alfresco/rest/api/Sites.java index 8093187d2f..adab390df7 100644 --- a/source/java/org/alfresco/rest/api/Sites.java +++ b/source/java/org/alfresco/rest/api/Sites.java @@ -77,4 +77,6 @@ public interface Sites String PARAM_SITE_ID = "id"; String PARAM_SITE_TITLE = "title"; String PARAM_SITE_DESCRIPTION = "description"; + + String PARAM_SITE_ROLE = "role"; } diff --git a/source/java/org/alfresco/rest/api/impl/SitesImpl.java b/source/java/org/alfresco/rest/api/impl/SitesImpl.java index 744e39c5bf..e998da28eb 100644 --- a/source/java/org/alfresco/rest/api/impl/SitesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/SitesImpl.java @@ -125,6 +125,16 @@ public class SitesImpl implements Sites SORT_PARAMS_TO_QNAMES = Collections.unmodifiableMap(aMap); } + private final static Map SORT_SITE_MEMBERSHIP; + static + { + Map aMap = new HashMap<>(3); + aMap.put(PARAM_SITE_TITLE, SiteService.SortFields.SiteTitle); + aMap.put(PARAM_SITE_ID, SiteService.SortFields.SiteShortName); + aMap.put(PARAM_SITE_ROLE, SiteService.SortFields.Role); + SORT_SITE_MEMBERSHIP = Collections.unmodifiableMap(aMap); + } + protected Nodes nodes; protected People people; @@ -500,35 +510,31 @@ public class SitesImpl implements Sites PagingRequest pagingRequest = Util.getPagingRequest(paging); // get the sorting options - List> sortPairs = new ArrayList>(parameters.getSorting().size()); - for (SortColumn sortColumn : parameters.getSorting()) + List> sortPairs = new ArrayList<>(parameters.getSorting().size()); + + List sortCols = parameters.getSorting(); + if ((sortCols != null) && (sortCols.size() > 0)) { - SiteService.SortFields sortField; - try + for (SortColumn sortCol : sortCols) { - sortField= SiteService.SortFields.valueOf(sortColumn.column); - } - catch (IllegalArgumentException ex) - { - // invalid sort field - continue; + SiteService.SortFields sortProp = SORT_SITE_MEMBERSHIP.get(sortCol.column); + if (sortProp == null) + { + throw new InvalidArgumentException("Invalid sort field: "+sortCol.column); + } + sortPairs.add(new Pair<>(sortProp, (sortCol.asc ? SortOrder.ASCENDING : SortOrder.DESCENDING))); } - - sortPairs.add(new Pair( - sortField, - (sortColumn.asc ? SortOrder.ASCENDING : SortOrder.DESCENDING))); } - - // if no sorting options were specify, sort by title - if(sortPairs.size() == 0) + else { + // default sort order sortPairs.add(new Pair( SiteService.SortFields.SiteTitle, SortOrder.ASCENDING )); } // get the unsorted list of site memberships - List siteMembers = siteService.listSiteMemberships (personId, 0); + List siteMembers = siteService.listSiteMemberships(personId, 0); // sort the list of site memberships int totalSize = siteMembers.size();