diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 7884ba5d11..5d4aee7fc6 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -341,7 +341,7 @@ public class NodesImpl implements Nodes ContentModel.PROP_LOCK_OWNER, ContentModel.PROP_WORKING_COPY_OWNER); - private final static Map MAP_PARAM_QNAME; + public final static Map PARAM_SYNONYMS_QNAME; static { Map aMap = new HashMap<>(9); @@ -356,7 +356,7 @@ public class NodesImpl implements Nodes aMap.put(PARAM_SIZEINBYTES, GetChildrenCannedQuery.SORT_QNAME_CONTENT_SIZE); aMap.put(PARAM_NODETYPE, GetChildrenCannedQuery.SORT_QNAME_NODE_TYPE); - MAP_PARAM_QNAME = Collections.unmodifiableMap(aMap); + PARAM_SYNONYMS_QNAME = Collections.unmodifiableMap(aMap); } // list children filtering (via where clause) @@ -1259,7 +1259,7 @@ public class NodesImpl implements Nodes sortProps = new ArrayList<>(sortCols.size()); for (SortColumn sortCol : sortCols) { - QName propQname = MAP_PARAM_QNAME.get(sortCol.column); + QName propQname = PARAM_SYNONYMS_QNAME.get(sortCol.column); if (propQname == null) { propQname = createQName(sortCol.column); diff --git a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java index f569416c30..c4fce0adee 100644 --- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -45,7 +45,9 @@ import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.rest.api.model.Node; import org.alfresco.service.cmr.search.SearchParameters.Operator; import org.alfresco.service.cmr.search.SearchParameters.SortDefinition; +import org.alfresco.service.cmr.search.SearchParameters.SortDefinition.SortType; import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.namespace.QName; import org.alfresco.util.ParameterCheck; import org.apache.commons.lang.NotImplementedException; @@ -55,6 +57,7 @@ import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ISLINK; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_PATH; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_PROPERTIES; +import static org.alfresco.rest.api.impl.NodesImpl.PARAM_SYNONYMS_QNAME; import static org.alfresco.service.cmr.search.SearchService.*; import java.util.ArrayList; @@ -177,7 +180,10 @@ public class SearchMapper try { - sp.addSort(sortDef.toDefinition()); + SortType sortType = SortType.valueOf(sortDef.getType()); + String field = sortDef.getField(); + QName propQname = PARAM_SYNONYMS_QNAME.get(field); + sp.addSort(new SortDefinition(sortType, propQname==null?field:propQname.toString(), sortDef.isAscending())); } catch (IllegalArgumentException e) { diff --git a/source/java/org/alfresco/rest/api/search/model/SortDef.java b/source/java/org/alfresco/rest/api/search/model/SortDef.java index 92be2ba976..7f83d567bc 100644 --- a/source/java/org/alfresco/rest/api/search/model/SortDef.java +++ b/source/java/org/alfresco/rest/api/search/model/SortDef.java @@ -59,15 +59,13 @@ public class SortDef return type; } - /** - * You are allowed to create an instance of this class that has an invalid sortType - * but this method will validate the definition is correct and return it. - * - * @return SortDefinition - */ - public SortDefinition toDefinition() + public String getField() { - return new SortDefinition(SortType.valueOf(type), field, ascending); + return field; } + public boolean isAscending() + { + return ascending; + } } diff --git a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java index b9bf861e99..bdb2cfa8bc 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -193,6 +193,23 @@ public class SearchMapperTests } }); + searchParameters = new SearchParameters(); + searchMapper.fromSort(searchParameters, Arrays.asList(new SortDef("FIELD", "createdAt", true))); + assertEquals(1 , searchParameters.getSortDefinitions().size()); + assertEquals("{http://www.alfresco.org/model/content/1.0}created", searchParameters.getSortDefinitions().get(0).getField()); + + searchParameters = new SearchParameters(); + searchMapper.fromSort(searchParameters, Arrays.asList(new SortDef("FIELD", "cm:created", true))); + assertEquals("cm:created", searchParameters.getSortDefinitions().get(0).getField()); + + searchParameters = new SearchParameters(); + searchMapper.fromSort(searchParameters, Arrays.asList(new SortDef("FIELD", "modifiedByUser", true))); + assertEquals("{http://www.alfresco.org/model/content/1.0}modifier", searchParameters.getSortDefinitions().get(0).getField()); + + searchParameters = new SearchParameters(); + searchMapper.fromSort(searchParameters, Arrays.asList(new SortDef("FIELD", "nodeType", true))); + assertEquals("{}TYPE", searchParameters.getSortDefinitions().get(0).getField()); + searchParameters = new SearchParameters(); searchParameters.setLanguage(SearchMapper.CMIS); try