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/HEAD/root@126356 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jamal Kaabi-Mofrad
2016-05-10 10:30:04 +00:00
parent 659cebdf21
commit 648bfcbdf6

View File

@@ -98,6 +98,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;
@@ -465,15 +469,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<QName> requestedProperties = createQNames(parameters.getSelectedProperties());
return getFolderOrDocument(nodeRef, getParentNodeRef(nodeRef), typeQName, requestedProperties, false, null);
List<String> selectParam = parameters.getSelectedProperties();
return getFolderOrDocument(nodeRef, getParentNodeRef(nodeRef), typeQName, selectParam, false, null);
}
private Node getFolderOrDocument(final NodeRef nodeRef, NodeRef parentNodeRef, QName typeQName, List<QName> selectedProperties, boolean minimalInfo, Map<String,UserInfo> mapUserInfo)
private Node getFolderOrDocument(final NodeRef nodeRef, NodeRef parentNodeRef, QName typeQName, List<String> selectParam, boolean minimalInfo, Map<String,UserInfo> mapUserInfo)
{
if (mapUserInfo == null) {
mapUserInfo = new HashMap<>(2);
@@ -506,7 +511,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)));
}
@@ -618,12 +623,33 @@ public class NodesImpl implements Nodes
return new PathInfo(pathStr, isComplete, pathElements);
}
protected Map<String, Object> mapProperties(Map<QName, Serializable> nodeProps, List<QName> selectedProperties, Map<String,UserInfo> mapUserInfo)
protected Map<String, Object> mapProperties(Map<QName, Serializable> nodeProps, List<String> selectParam, Map<String,UserInfo> mapUserInfo)
{
List<QName> 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<String, Object> props = null;
if (!selectedProperties.isEmpty())
{
props = new HashMap<>(selectedProperties.size());
for (QName qName : selectedProperties)
{
Serializable value = nodeProps.get(qName);
@@ -668,8 +694,8 @@ public class NodesImpl implements Nodes
{
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
final boolean minimalInfo = (parameters.getSelectedProperties().size() == 0);
final List<QName> requestedProperties = createQNames(parameters.getSelectedProperties());
final List<String> selectParam = parameters.getSelectedProperties();
final boolean minimalInfo = (selectParam.size() == 0);
boolean includeFolders = true;
boolean includeFiles = true;
@@ -739,7 +765,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
@@ -940,10 +966,17 @@ public class NodesImpl implements Nodes
*/
protected List<QName> createQNames(List<String> qnameStrList)
{
String PREFIX = PARAM_SELECT_PROPERTIES+"/";
List<QName> 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))
{