From fe59b7dcad661557dbf822f26bb06ff569d11b7f Mon Sep 17 00:00:00 2001 From: Ancuta Morarasu Date: Wed, 11 May 2016 10:47:22 +0000 Subject: [PATCH] Merged HEAD (5.2) to 5.2.N (5.2.1) 126356 jkaabimofrad: Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 119442 jvonka: RA-634 / RA-638 : FileFolder API - update handling of "select" as per design notes - return all properties, if "select=properties" or no select (unless listing children => minimal info) - also handle "select=properties/my:prop" (note: temporarily my_prop pending RA-630) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@126702 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/impl/NodesImpl.java | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index c3f3cd3368..e484533b79 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -105,6 +105,10 @@ public class NodesImpl implements Nodes private final static String PATH_MY = "-my-"; private final static String PATH_SHARED = "-shared-"; + private final static String PARAM_RELATIVE_PATH = "relativePath"; // TODO wip + + private final static String PARAM_SELECT_PROPERTIES = "properties"; + private NodeService nodeService; private DictionaryService dictionaryService; private FileFolderService fileFolderService; @@ -472,15 +476,16 @@ public class NodesImpl implements Nodes public Node getFolderOrDocument(String nodeId, Parameters parameters) { - String path = parameters.getParameter("path"); + String path = parameters.getParameter(PARAM_RELATIVE_PATH); NodeRef nodeRef = validateOrLookupNode(nodeId, path); QName typeQName = nodeService.getType(nodeRef); - List requestedProperties = createQNames(parameters.getSelectedProperties()); - return getFolderOrDocument(nodeRef, getParentNodeRef(nodeRef), typeQName, requestedProperties, false, null); + + List selectParam = parameters.getSelectedProperties(); + return getFolderOrDocument(nodeRef, getParentNodeRef(nodeRef), typeQName, selectParam, false, null); } - private Node getFolderOrDocument(final NodeRef nodeRef, NodeRef parentNodeRef, QName typeQName, List selectedProperties, boolean minimalInfo, Map mapUserInfo) + private Node getFolderOrDocument(final NodeRef nodeRef, NodeRef parentNodeRef, QName typeQName, List selectParam, boolean minimalInfo, Map mapUserInfo) { if (mapUserInfo == null) { mapUserInfo = new HashMap<>(2); @@ -513,7 +518,7 @@ public class NodesImpl implements Nodes if (! minimalInfo) { - node.setProperties(mapProperties(properties, selectedProperties, mapUserInfo)); + node.setProperties(mapProperties(properties, selectParam, mapUserInfo)); node.setAspectNames(mapAspects(nodeService.getAspects(nodeRef))); } @@ -625,12 +630,33 @@ public class NodesImpl implements Nodes return new PathInfo(pathStr, isComplete, pathElements); } - protected Map mapProperties(Map nodeProps, List selectedProperties, Map mapUserInfo) + protected Map mapProperties(Map nodeProps, List selectParam, Map mapUserInfo) { + List selectedProperties; + + if ((selectParam.size() == 0) || selectParam.contains(PARAM_SELECT_PROPERTIES)) + { + // return all properties + selectedProperties = new ArrayList<>(nodeProps.size()); + for (QName name : nodeProps.keySet()) + { + if (!EXCLUDED_PROPS.contains(name)) + { + selectedProperties.add(name); + } + } + } + else + { + // return selected properties + selectedProperties = createQNames(selectParam); + } + Map props = null; if (!selectedProperties.isEmpty()) { props = new HashMap<>(selectedProperties.size()); + for (QName qName : selectedProperties) { Serializable value = nodeProps.get(qName); @@ -675,8 +701,8 @@ public class NodesImpl implements Nodes { final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null); - final boolean minimalInfo = (parameters.getSelectedProperties().size() == 0); - final List requestedProperties = createQNames(parameters.getSelectedProperties()); + final List selectParam = parameters.getSelectedProperties(); + final boolean minimalInfo = (selectParam.size() == 0); boolean includeFolders = true; boolean includeFiles = true; @@ -746,7 +772,7 @@ public class NodesImpl implements Nodes FileInfo fInfo = page.get(index); // minimal info by default (unless "select"ed otherwise) - return getFolderOrDocument(fInfo.getNodeRef(), parentNodeRef, fInfo.getType(), requestedProperties, minimalInfo, mapUserInfo); + return getFolderOrDocument(fInfo.getNodeRef(), parentNodeRef, fInfo.getType(), selectParam, minimalInfo, mapUserInfo); } @Override @@ -947,10 +973,17 @@ public class NodesImpl implements Nodes */ protected List createQNames(List qnameStrList) { + String PREFIX = PARAM_SELECT_PROPERTIES+"/"; + List result = new ArrayList<>(qnameStrList.size()); for (String str : qnameStrList) { + if (str.startsWith(PREFIX)) { + str = str.substring(PREFIX.length()); + } + str = str.replaceFirst("_", ":"); // FIXME remove this when we have fixed the framework. + QName name = createQName(str); if (!EXCLUDED_PROPS.contains(name)) {