mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
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
This commit is contained in:
@@ -105,6 +105,10 @@ public class NodesImpl implements Nodes
|
|||||||
private final static String PATH_MY = "-my-";
|
private final static String PATH_MY = "-my-";
|
||||||
private final static String PATH_SHARED = "-shared-";
|
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 NodeService nodeService;
|
||||||
private DictionaryService dictionaryService;
|
private DictionaryService dictionaryService;
|
||||||
private FileFolderService fileFolderService;
|
private FileFolderService fileFolderService;
|
||||||
@@ -472,15 +476,16 @@ public class NodesImpl implements Nodes
|
|||||||
|
|
||||||
public Node getFolderOrDocument(String nodeId, Parameters parameters)
|
public Node getFolderOrDocument(String nodeId, Parameters parameters)
|
||||||
{
|
{
|
||||||
String path = parameters.getParameter("path");
|
String path = parameters.getParameter(PARAM_RELATIVE_PATH);
|
||||||
NodeRef nodeRef = validateOrLookupNode(nodeId, path);
|
NodeRef nodeRef = validateOrLookupNode(nodeId, path);
|
||||||
|
|
||||||
QName typeQName = nodeService.getType(nodeRef);
|
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) {
|
if (mapUserInfo == null) {
|
||||||
mapUserInfo = new HashMap<>(2);
|
mapUserInfo = new HashMap<>(2);
|
||||||
@@ -513,7 +518,7 @@ public class NodesImpl implements Nodes
|
|||||||
|
|
||||||
if (! minimalInfo)
|
if (! minimalInfo)
|
||||||
{
|
{
|
||||||
node.setProperties(mapProperties(properties, selectedProperties, mapUserInfo));
|
node.setProperties(mapProperties(properties, selectParam, mapUserInfo));
|
||||||
node.setAspectNames(mapAspects(nodeService.getAspects(nodeRef)));
|
node.setAspectNames(mapAspects(nodeService.getAspects(nodeRef)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,12 +630,33 @@ public class NodesImpl implements Nodes
|
|||||||
return new PathInfo(pathStr, isComplete, pathElements);
|
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;
|
Map<String, Object> props = null;
|
||||||
if (!selectedProperties.isEmpty())
|
if (!selectedProperties.isEmpty())
|
||||||
{
|
{
|
||||||
props = new HashMap<>(selectedProperties.size());
|
props = new HashMap<>(selectedProperties.size());
|
||||||
|
|
||||||
for (QName qName : selectedProperties)
|
for (QName qName : selectedProperties)
|
||||||
{
|
{
|
||||||
Serializable value = nodeProps.get(qName);
|
Serializable value = nodeProps.get(qName);
|
||||||
@@ -675,8 +701,8 @@ public class NodesImpl implements Nodes
|
|||||||
{
|
{
|
||||||
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
|
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
|
||||||
|
|
||||||
final boolean minimalInfo = (parameters.getSelectedProperties().size() == 0);
|
final List<String> selectParam = parameters.getSelectedProperties();
|
||||||
final List<QName> requestedProperties = createQNames(parameters.getSelectedProperties());
|
final boolean minimalInfo = (selectParam.size() == 0);
|
||||||
|
|
||||||
boolean includeFolders = true;
|
boolean includeFolders = true;
|
||||||
boolean includeFiles = true;
|
boolean includeFiles = true;
|
||||||
@@ -746,7 +772,7 @@ public class NodesImpl implements Nodes
|
|||||||
FileInfo fInfo = page.get(index);
|
FileInfo fInfo = page.get(index);
|
||||||
|
|
||||||
// minimal info by default (unless "select"ed otherwise)
|
// 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
|
@Override
|
||||||
@@ -947,10 +973,17 @@ public class NodesImpl implements Nodes
|
|||||||
*/
|
*/
|
||||||
protected List<QName> createQNames(List<String> qnameStrList)
|
protected List<QName> createQNames(List<String> qnameStrList)
|
||||||
{
|
{
|
||||||
|
String PREFIX = PARAM_SELECT_PROPERTIES+"/";
|
||||||
|
|
||||||
List<QName> result = new ArrayList<>(qnameStrList.size());
|
List<QName> result = new ArrayList<>(qnameStrList.size());
|
||||||
for (String str : qnameStrList)
|
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.
|
str = str.replaceFirst("_", ":"); // FIXME remove this when we have fixed the framework.
|
||||||
|
|
||||||
QName name = createQName(str);
|
QName name = createQName(str);
|
||||||
if (!EXCLUDED_PROPS.contains(name))
|
if (!EXCLUDED_PROPS.contains(name))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user