Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2)

123495 jvonka: Nodes (FileFolder) API - add optional relativePath (to make folders) when creating a folder, empty file or other custom node
   RA-703


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126542 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jamal Kaabi-Mofrad
2016-05-10 11:24:28 +00:00
parent 1c187217b3
commit 27fe28b906
4 changed files with 186 additions and 38 deletions

View File

@@ -1278,7 +1278,7 @@ public class NodesImpl implements Nodes
}
// check that requested parent node exists and it's type is a (sub-)type of folder
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
if (! nodeMatches(parentNodeRef, Collections.singleton(ContentModel.TYPE_FOLDER), null, false))
{
@@ -1316,7 +1316,7 @@ public class NodesImpl implements Nodes
}
// Existing file/folder name handling
final boolean autoRename = Boolean.valueOf(parameters.getParameter(PARAM_AUTO_RENAME));
boolean autoRename = Boolean.valueOf(parameters.getParameter(PARAM_AUTO_RENAME));
if (autoRename && (isContent || isSubClass(nodeTypeQName, ContentModel.TYPE_FOLDER)))
{
NodeRef existingNode = nodeService.getChildByName(parentNodeRef, ContentModel.ASSOC_CONTAINS, nodeName);
@@ -1327,6 +1327,9 @@ public class NodesImpl implements Nodes
}
}
String relativePath = nodeInfo.getRelativePath();
parentNodeRef = getOrCreatePath(parentNodeRef, relativePath);
// Create the node
NodeRef nodeRef = createNodeImpl(parentNodeRef, nodeName, nodeTypeQName, props);
@@ -1357,6 +1360,23 @@ public class NodesImpl implements Nodes
return getFolderOrDocument(nodeRef.getId(), parameters);
}
private NodeRef getOrCreatePath(NodeRef parentNodeRef, String relativePath)
{
if (relativePath != null)
{
List<String> pathElements = getPathElements(relativePath);
// Checks for the presence of, and creates as necessary,
// the folder structure in the provided path elements list.
if (pathElements != null && !pathElements.isEmpty())
{
parentNodeRef = makeFolders(parentNodeRef, pathElements);
}
}
return parentNodeRef;
}
private NodeRef createNodeImpl(NodeRef parentNodeRef, String nodeName, QName nodeTypeQName, Map<QName, Serializable> props)
{
if (props == null)
@@ -1835,7 +1855,7 @@ public class NodesImpl implements Nodes
boolean overwrite = false; // If a fileName clashes for a versionable file
Boolean majorVersion = null;
String versionComment = null;
List<String> pathElements = null;
String relativePath = null;
Map<String, Object> qnameStrProps = new HashMap<>();
Map<QName, Serializable> properties = null;
@@ -1880,7 +1900,7 @@ public class NodesImpl implements Nodes
break;
case "relativepath":
pathElements = getPathElements(getStringOrNull(field.getValue()));
relativePath = getStringOrNull(field.getValue());
break;
default:
@@ -1912,12 +1932,8 @@ public class NodesImpl implements Nodes
throw new InvalidArgumentException("Both 'overwrite' and 'autoRename' should not be true when uploading a file");
}
// Checks for the presence of, and creates as necessary,
// the folder structure in the provided path elements list.
if (pathElements != null && !pathElements.isEmpty())
{
parentNodeRef = makeFolders(parentNodeRef, pathElements);
}
// if requested, make (get or create) path
parentNodeRef = getOrCreatePath(parentNodeRef, relativePath);
try
{
@@ -1938,6 +1954,8 @@ public class NodesImpl implements Nodes
{
// attempt to find a unique name
fileName = findUniqueName(parentNodeRef, fileName);
// drop-through !
}
else if (overwrite && nodeService.hasAspect(existingFile, ContentModel.ASPECT_VERSIONABLE))
{
@@ -1987,9 +2005,6 @@ public class NodesImpl implements Nodes
}
}
/**
* Helper to create a new node and writes its content to the repository.
*/
private Node createNewFile(NodeRef parentNodeRef, String fileName, QName nodeType, Content content, Map<QName, Serializable> props, Parameters params)
{
if (nodeType == null)