From a1ecaedf159be448f8db1dab3eacc2c5ecde2ab4 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Thu, 6 Sep 2012 10:46:05 +0000 Subject: [PATCH] RM-488 (REST API to import a RM data set into a file plan) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@41315 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-webscript-context.xml | 6 ++ .../org/alfresco/rma/dataset.post.desc.xml | 9 ++ .../org/alfresco/rma/dataset.post.json.ftl | 5 + .../script/BootstrapTestDataGet.java | 1 + .../script/DataSetPost.java | 95 +++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.desc.xml create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.json.ftl create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index b6dc650014..605bf9ea47 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -381,4 +381,10 @@ + + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.desc.xml new file mode 100644 index 0000000000..f8a8fb9f1e --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.desc.xml @@ -0,0 +1,9 @@ + + Import data set into a file plan + WebScript to import a given data set into a given file plan + /api/rma/datasets/{dataSetId}?site={site} + argument + admin + required + internal + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.json.ftl new file mode 100644 index 0000000000..beda2de343 --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dataset.post.json.ftl @@ -0,0 +1,5 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "success": ${success?string} +} + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/BootstrapTestDataGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/BootstrapTestDataGet.java index a0571bf0d5..20afd82928 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/BootstrapTestDataGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/BootstrapTestDataGet.java @@ -60,6 +60,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest; /** * BootstrapTestData GET WebScript implementation. */ +@Deprecated public class BootstrapTestDataGet extends DeclarativeWebScript implements RecordsManagementModel { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java new file mode 100644 index 0000000000..5a132b582f --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java @@ -0,0 +1,95 @@ +package org.alfresco.module.org_alfresco_module_rm.script; + +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.site.SiteService; +import org.apache.commons.lang.StringUtils; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; + +public class DataSetPost extends DeclarativeWebScript implements RecordsManagementModel +{ + /** Constant for the site name parameter */ + private static final String ARG_SITE_NAME = "site"; + + /** Constant for the data set id parameter */ + private static final String ARG_DATA_SET_ID = "dataSetId"; + + /** Site service */ + private SiteService siteService; + + /** Data set service */ + private DataSetService dataSetService; + + /** + * Set site service + * + * @param siteService the site service + */ + public void setSiteService(SiteService siteService) + { + this.siteService = siteService; + } + + /** + * Data set service + * + * @param dataSetService the data set service + */ + public void setDataSetService(DataSetService dataSetService) + { + this.dataSetService = dataSetService; + } + + /** + * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, + * org.springframework.extensions.webscripts.Status, + * org.springframework.extensions.webscripts.Cache) + */ + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + // Resolve data set id + String dataSetId = req.getServiceMatch().getTemplateVars().get(ARG_DATA_SET_ID); + if (StringUtils.isBlank(dataSetId)) + { + throw new WebScriptException(Status.STATUS_BAD_REQUEST, "A data set id was not provided."); + } + + // Resolve RM site + String siteName = req.getParameter(ARG_SITE_NAME); + if (StringUtils.isBlank(siteName)) + { + siteName = RmSiteType.DEFAULT_SITE_NAME; + } + + if (siteService.getSite(siteName) == null) + { + throw new WebScriptException(Status.STATUS_BAD_REQUEST, "A Records Management site with the name '" + + siteName + "' does not exist."); + } + + // Resolve documentLibrary (filePlan) container + NodeRef filePlan = siteService.getContainer(siteName, RmSiteType.COMPONENT_DOCUMENT_LIBRARY); + if (filePlan == null) + { + filePlan = siteService.createContainer(siteName, RmSiteType.COMPONENT_DOCUMENT_LIBRARY, + TYPE_FILE_PLAN, null); + } + + dataSetService.loadDataSet(dataSetId, filePlan); + + Map model = new HashMap(1, 1.0f); + model.put("success", true); + + return model; + } +}