diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/FilePlanComponentsApiUtils.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/FilePlanComponentsApiUtils.java index 5f5193f283..802683146e 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/FilePlanComponentsApiUtils.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/FilePlanComponentsApiUtils.java @@ -79,6 +79,7 @@ import org.alfresco.rm.rest.api.RMSites; import org.alfresco.rm.rest.api.model.RMNode; import org.alfresco.rm.rest.api.model.RMSite; import org.alfresco.rm.rest.api.model.TransferContainer; +import org.alfresco.rm.rest.api.model.UploadInfo; import org.alfresco.service.cmr.activities.ActivityInfo; import org.alfresco.service.cmr.activities.ActivityPoster; import org.alfresco.service.cmr.attributes.DuplicateAttributeException; @@ -672,32 +673,50 @@ public class FilePlanComponentsApiUtils /** * Upload a record * - * @param parentNodeRef the parent of the record - * @param name the name of the record - * @param type the type of the record (if null the record's type will be cm:content) - * @param properties properties to set (can be null) - * @param stream the stream to write + * @param parentNodeRef the parent of the record + * @param uploadInfo the infos of the uploaded record + * @param parameters the object to get the parameters passed into the request * @return the new record */ - public NodeRef uploadRecord(NodeRef parentNodeRef, String name, String type, Map properties, InputStream stream) + public NodeRef uploadRecord(NodeRef parentNodeRef, UploadInfo uploadInfo, Parameters parameters) { - checkNotBlank(RMNode.PARAM_NAME, name); + mandatory("parentNodeRef", parentNodeRef); + mandatory("uploadInfo", uploadInfo); + mandatory("parameters", parameters); + + String nodeName = uploadInfo.getFileName(); + String nodeType = uploadInfo.getNodeType(); + InputStream stream = uploadInfo.getContent().getInputStream(); mandatory("stream", stream); + checkNotBlank(RMNode.PARAM_NAME, nodeName); // Create the node - QName typeQName = StringUtils.isBlank(type) ? ContentModel.TYPE_CONTENT : nodes.createQName(type); - if(!dictionaryService.isSubClass(typeQName, ContentModel.TYPE_CONTENT)) + QName typeQName = StringUtils.isBlank(nodeType) ? ContentModel.TYPE_CONTENT : nodes.createQName(nodeType); + if (!dictionaryService.isSubClass(typeQName, ContentModel.TYPE_CONTENT)) { throw new InvalidArgumentException("Can only upload type of cm:content: " + typeQName); } - NodeRef newNodeRef = fileFolderService.create(parentNodeRef, name, typeQName).getNodeRef(); + + // Existing file/folder name handling + boolean autoRename = Boolean.valueOf(parameters.getParameter(RMNode.PARAM_AUTO_RENAME)); + if (autoRename) + { + NodeRef existingNode = nodeService.getChildByName(parentNodeRef, ContentModel.ASSOC_CONTAINS, nodeName); + if (existingNode != null) + { + // File already exists, find a unique name + nodeName = findUniqueName(parentNodeRef, nodeName); + } + } + + NodeRef newNodeRef = fileFolderService.create(parentNodeRef, nodeName, typeQName).getNodeRef(); // Write content - writeContent(newNodeRef, name, stream, true); + writeContent(newNodeRef, nodeName, stream, true); // Set the provided properties if any - Map qnameProperties = mapToNodeProperties(properties); - if(qnameProperties != null) + Map qnameProperties = mapToNodeProperties(uploadInfo.getProperties()); + if (qnameProperties != null) { nodeService.addProperties(newNodeRef, qnameProperties); } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java index 1b4fd75877..a943a9dcae 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java @@ -207,8 +207,7 @@ public class RecordFolderChildrenRelation implements RelationshipResourceAction. { public NodeRef execute() { - return apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), - uploadInfo.getContent().getInputStream()); + return apiUtils.uploadRecord(parentNodeRef, uploadInfo, parameters); } }; NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java index 0408de262a..e9409a29e1 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java @@ -223,7 +223,7 @@ public class UnfiledContainerChildrenRelation implements RelationshipResourceAct { public NodeRef execute() { - return apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream()); + return apiUtils.uploadRecord(parentNodeRef, uploadInfo, parameters); } }; NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java index 9fff8274af..b519666980 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java @@ -232,7 +232,7 @@ public class UnfiledRecordFolderChildrenRelation implements RelationshipResource public Pair execute() { final NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER, uploadInfo.getRelativePath()); - NodeRef newNode = apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream()); + NodeRef newNode = apiUtils.uploadRecord(parentNodeRef, uploadInfo, parameters); return new Pair(newNode, parentNodeRef); } };