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 95e771046d..67e4db32c9 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 @@ -180,7 +180,6 @@ class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogPost" parent="webscript"> - @@ -205,10 +204,10 @@ class="org.alfresco.module.org_alfresco_module_rm.script.ExportPost" parent="webscript"> - + @@ -226,7 +225,6 @@ - @@ -236,6 +234,7 @@ + @@ -245,6 +244,7 @@ + @@ -255,6 +255,7 @@ + @@ -513,7 +514,7 @@ - + @@ -522,10 +523,10 @@ - + @@ -558,6 +559,6 @@ - + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/AuditLogGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/AuditLogGet.java index fae34d324a..4ab3f4263e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/AuditLogGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/AuditLogGet.java @@ -23,35 +23,47 @@ import java.io.IOException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; +import org.alfresco.repo.web.scripts.content.ContentStreamer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Implementation for Java backed webscript to return audit * log of RM events, optionally scoped to an RM node. - * + * * @author Gavin Cornwell */ public class AuditLogGet extends BaseAuditRetrievalWebScript { /** Logger */ private static Log logger = LogFactory.getLog(AuditLogGet.class); - + protected final static String PARAM_EXPORT = "export"; + /** Content Streamer */ + protected ContentStreamer contentStreamer; + + /** + * @param contentStreamer + */ + public void setContentStreamer(ContentStreamer contentStreamer) + { + this.contentStreamer = contentStreamer; + } + @Override public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { File auditTrail = null; - + try { // parse the parameters and get a file containing the audit trail auditTrail = this.rmAuditService.getAuditTrailFile(parseQueryParameters(req), parseReportFormat(req)); - + if (logger.isDebugEnabled()) logger.debug("Streaming audit trail from file: " + auditTrail.getAbsolutePath()); - + boolean attach = false; String attachFileName = null; String export = req.getParameter(PARAM_EXPORT); @@ -59,13 +71,13 @@ public class AuditLogGet extends BaseAuditRetrievalWebScript { attach = true; attachFileName = auditTrail.getName(); - + if (logger.isDebugEnabled()) logger.debug("Exporting audit trail using file name: " + attachFileName); } - + // stream the file back to the client - streamContent(req, res, auditTrail, attach, attachFileName); + contentStreamer.streamContent(req, res, auditTrail, null, attach, attachFileName, null); } finally { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ExportPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ExportPost.java index 38cb3daf17..a23f17b16a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ExportPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ExportPost.java @@ -28,6 +28,7 @@ import org.alfresco.model.RenditionModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour; import org.alfresco.repo.exporter.ACPExportPackageHandler; +import org.alfresco.repo.web.scripts.content.ContentStreamer; import org.alfresco.repo.web.scripts.content.StreamACP; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.view.ExporterCrawlerParameters; @@ -46,7 +47,7 @@ import org.springframework.extensions.webscripts.WebScriptResponse; /** * Creates an RM specific ACP file of nodes to export then streams it back * to the client. - * + * * @author Gavin Cornwell */ public class ExportPost extends StreamACP @@ -55,7 +56,18 @@ public class ExportPost extends StreamACP private static Log logger = LogFactory.getLog(ExportPost.class); protected static final String PARAM_TRANSFER_FORMAT = "transferFormat"; - + + /** Content Streamer */ + private ContentStreamer contentStreamer; + + /** + * @param contentStreamer + */ + public void setContentStreamer(ContentStreamer contentStreamer) + { + this.contentStreamer = contentStreamer; + } + /** * @see org.alfresco.web.scripts.WebScript#execute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) */ @@ -73,7 +85,7 @@ public class ExportPost extends StreamACP { // get nodeRefs parameter from form nodeRefs = getNodeRefs(req.getParameter(PARAM_NODE_REFS)); - + // look for the transfer format String transferFormatParam = req.getParameter(PARAM_TRANSFER_FORMAT); if (transferFormatParam != null && transferFormatParam.length() > 0) @@ -86,39 +98,39 @@ public class ExportPost extends StreamACP // presume the request is a JSON request so get nodeRefs from JSON body JSONObject json = new JSONObject(new JSONTokener(req.getContent().getContent())); nodeRefs = getNodeRefs(json); - + if (json.has(PARAM_TRANSFER_FORMAT)) { transferFormat = json.getBoolean(PARAM_TRANSFER_FORMAT); } } - + // setup the ACP parameters ExporterCrawlerParameters params = new ExporterCrawlerParameters(); params.setCrawlSelf(true); params.setCrawlChildNodes(true); params.setExportFrom(new Location(nodeRefs)); - + // if transfer format has been requested we need to exclude certain aspects if (transferFormat) { // restrict specific aspects from being returned - QName[] excludedAspects = new QName[] { + QName[] excludedAspects = new QName[] { RenditionModel.ASPECT_RENDITIONED, ContentModel.ASPECT_THUMBNAILED, RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE, RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH}; params.setExcludeAspects(excludedAspects); } - + // create an ACP of the nodes - tempACPFile = createACP(params, - transferFormat ? ZIP_EXTENSION : ACPExportPackageHandler.ACP_EXTENSION, + tempACPFile = createACP(params, + transferFormat ? ZIP_EXTENSION : ACPExportPackageHandler.ACP_EXTENSION, transferFormat); - + // stream the ACP back to the client as an attachment (forcing save as) - streamContent(req, res, tempACPFile, true, tempACPFile.getName()); - } + contentStreamer.streamContent(req, res, tempACPFile, null, true, tempACPFile.getName(), null); + } catch (IOException ioe) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, @@ -147,7 +159,7 @@ public class ExportPost extends StreamACP { if (logger.isDebugEnabled()) logger.debug("Deleting temporary archive: " + tempACPFile.getAbsolutePath()); - + tempACPFile.delete(); } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferGet.java index c5f2b38716..562b458909 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferGet.java @@ -25,6 +25,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.model.RenditionModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour; +import org.alfresco.repo.web.scripts.content.ContentStreamer; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.view.ExporterCrawlerParameters; import org.alfresco.service.cmr.view.Location; @@ -39,23 +40,34 @@ import org.springframework.extensions.webscripts.WebScriptResponse; /** * Streams the nodes of a transfer object to the client in the form of an * ACP file. - * + * * @author Gavin Cornwell */ public class TransferGet extends BaseTransferWebScript { /** Logger */ private static Log logger = LogFactory.getLog(TransferGet.class); - + + /** Content Streamer */ + private ContentStreamer contentStreamer; + + /** + * @param contentStreamer + */ + public void setContentStreamer(ContentStreamer contentStreamer) + { + this.contentStreamer = contentStreamer; + } + @SuppressWarnings("deprecation") @Override protected File executeTransfer(NodeRef transferNode, - WebScriptRequest req, WebScriptResponse res, + WebScriptRequest req, WebScriptResponse res, Status status, Cache cache) throws IOException { // get all 'transferred' nodes NodeRef[] itemsToTransfer = getTransferNodes(transferNode); - + // setup the ACP parameters ExporterCrawlerParameters params = new ExporterCrawlerParameters(); params.setCrawlSelf(true); @@ -67,19 +79,19 @@ public class TransferGet extends BaseTransferWebScript RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE, RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH}; params.setExcludeAspects(excludedAspects); - + // create an archive of all the nodes to transfer File tempFile = createACP(params, ZIP_EXTENSION, true); - + if (logger.isDebugEnabled()) { - logger.debug("Creating transfer archive for " + itemsToTransfer.length + + logger.debug("Creating transfer archive for " + itemsToTransfer.length + " items into file: " + tempFile.getAbsolutePath()); } - + // stream the archive back to the client as an attachment (forcing save as) - streamContent(req, res, tempFile, true, tempFile.getName()); - + contentStreamer.streamContent(req, res, tempFile, null, true, tempFile.getName(), null); + // return the temp file for deletion return tempFile; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java index ed8706224a..35359155cf 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java @@ -31,6 +31,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.web.scripts.content.ContentStreamer; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -46,69 +47,78 @@ import org.springframework.extensions.webscripts.WebScriptResponse; /** * Returns a JSON representation of a transfer report. - * + * * @author Gavin Cornwell */ public class TransferReportGet extends BaseTransferWebScript { /** Logger */ private static Log logger = LogFactory.getLog(TransferReportGet.class); - + protected static final String REPORT_FILE_PREFIX = "report_"; protected static final String REPORT_FILE_SUFFIX = ".json"; protected DictionaryService ddService; protected RecordsManagementService rmService; protected DispositionService dispositionService; - + protected ContentStreamer contentStreamer; + /** * Sets the DictionaryService instance - * + * * @param ddService The DictionaryService instance */ public void setDictionaryService(DictionaryService ddService) { this.ddService = ddService; } - + /** * Sets the disposition service - * + * * @param dispositionService the disposition service */ public void setDispositionService(DispositionService dispositionService) { this.dispositionService = dispositionService; } - + /** * Sets the RecordsManagementService instance - * + * * @param rmService RecordsManagementService instance */ public void setRecordsManagementService(RecordsManagementService rmService) { this.rmService = rmService; } - + + /** + * @param contentStreamer + */ + public void setContentStreamer(ContentStreamer contentStreamer) + { + this.contentStreamer = contentStreamer; + } + @Override protected File executeTransfer(NodeRef transferNode, - WebScriptRequest req, WebScriptResponse res, + WebScriptRequest req, WebScriptResponse res, Status status, Cache cache) throws IOException { // generate the report (will be in JSON format) File report = generateJSONTransferReport(transferNode); - + // stream the report back to the client - streamContent(req, res, report, false); - + contentStreamer.streamContent(req, res, report, null, false, null, null); + // return the file for deletion return report; } - + /** * Generates a File containing the JSON representation of a transfer report. - * + * * @param transferNode The transfer node * @return File containing JSON representation of a transfer report * @throws IOException @@ -121,16 +131,16 @@ public class TransferReportGet extends BaseTransferWebScript { // get all 'transferred' nodes NodeRef[] itemsToTransfer = getTransferNodes(transferNode); - + if (logger.isDebugEnabled()) { - logger.debug("Generating JSON transfer report for " + itemsToTransfer.length + + logger.debug("Generating JSON transfer report for " + itemsToTransfer.length + " items into file: " + report.getAbsolutePath()); } - + // create the writer writer = new FileWriter(report); - + // use RMService to get disposition authority String dispositionAuthority = null; if (itemsToTransfer.length > 0) @@ -142,7 +152,7 @@ public class TransferReportGet extends BaseTransferWebScript dispositionAuthority = ds.getDispositionAuthority(); } } - + // write the JSON header writer.write("{\n\t\"data\":\n\t{"); writer.write("\n\t\t\"transferDate\": \""); @@ -153,10 +163,10 @@ public class TransferReportGet extends BaseTransferWebScript writer.write("\",\n\t\t\"dispositionAuthority\": \""); writer.write(dispositionAuthority != null ? dispositionAuthority : ""); writer.write("\",\n\t\t\"items\":\n\t\t["); - + // write out JSON representation of items to transfer generateTransferItemsJSON(writer, itemsToTransfer); - + // write the JSON footer writer.write("\n\t\t]\n\t}\n}"); } @@ -167,13 +177,13 @@ public class TransferReportGet extends BaseTransferWebScript try { writer.close(); } catch (IOException ioe) {} } } - + return report; } - + /** * Generates the JSON to represent the given NodeRefs - * + * * @param writer Writer to write to * @param itemsToTransfer NodeRefs being transferred * @throws IOException @@ -192,7 +202,7 @@ public class TransferReportGet extends BaseTransferWebScript { writer.write(","); } - + if (ddService.isSubClass(nodeService.getType(item), ContentModel.TYPE_FOLDER)) { generateTransferFolderJSON(writer, item); @@ -203,10 +213,10 @@ public class TransferReportGet extends BaseTransferWebScript } } } - + /** * Generates the JSON to represent the given folder. - * + * * @param writer Writer to write to * @param folderNode Folder being transferred * @throws IOException @@ -215,7 +225,7 @@ public class TransferReportGet extends BaseTransferWebScript throws IOException { // TODO: Add identation - + writer.write("\n{\n\"type\":\"folder\",\n"); writer.write("\"name\":\""); writer.write((String)nodeService.getProperty(folderNode, ContentModel.PROP_NAME)); @@ -224,9 +234,9 @@ public class TransferReportGet extends BaseTransferWebScript writer.write("\",\n\"id\":\""); writer.write((String)nodeService.getProperty(folderNode, RecordsManagementModel.PROP_IDENTIFIER)); writer.write("\",\n\"children\":\n["); - + boolean first = true; - List assocs = this.nodeService.getChildAssocs(folderNode, + List assocs = this.nodeService.getChildAssocs(folderNode, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); for (ChildAssociationRef child : assocs) { @@ -238,7 +248,7 @@ public class TransferReportGet extends BaseTransferWebScript { writer.write(","); } - + NodeRef childRef = child.getChildRef(); if (ddService.isSubClass(nodeService.getType(childRef), ContentModel.TYPE_FOLDER)) { @@ -249,13 +259,13 @@ public class TransferReportGet extends BaseTransferWebScript generateTransferRecordJSON(writer, childRef); } } - + writer.write("\n]\n}"); } - + /** * Generates the JSON to represent the given record. - * + * * @param writer Writer to write to * @param recordNode Record being transferred * @throws IOException @@ -271,7 +281,7 @@ public class TransferReportGet extends BaseTransferWebScript writer.write("\",\n\"id\":\""); writer.write((String)nodeService.getProperty(recordNode, RecordsManagementModel.PROP_IDENTIFIER)); writer.write("\""); - + if (this.nodeService.hasAspect(recordNode, RecordsManagementModel.ASPECT_DECLARED_RECORD)) { writer.write(",\n\"declaredBy\":\""); @@ -281,7 +291,7 @@ public class TransferReportGet extends BaseTransferWebScript (Date)this.nodeService.getProperty(recordNode, RecordsManagementModel.PROP_DECLARED_AT))); writer.write("\""); } - + writer.write("\n}"); } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java index 76c25d05e4..b6cf3de032 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java @@ -39,6 +39,7 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.NamespaceService; @@ -78,6 +79,7 @@ public class TransferReportPost extends BaseTransferWebScript protected RecordsManagementActionService rmActionService; protected RecordsManagementService rmService; protected DispositionService dispositionService; + protected ContentService contentService; /** * Sets the DictionaryService instance @@ -119,6 +121,16 @@ public class TransferReportPost extends BaseTransferWebScript this.rmActionService = rmActionService; } + /** + * Sets the ContentSerivce instance + * + * @param contentService ContentService instance + */ + public void setContentService(ContentService contentService) + { + this.contentService = contentService; + } + @Override protected File executeTransfer(NodeRef transferNode, WebScriptRequest req, WebScriptResponse res, @@ -436,10 +448,10 @@ public class TransferReportPost extends BaseTransferWebScript ContentModel.TYPE_CONTENT, properties).getChildRef(); // Set the content - ContentWriter writer = this.contentService.getWriter(record, ContentModel.PROP_CONTENT, true); + ContentWriter writer = contentService.getWriter(record, ContentModel.PROP_CONTENT, true); writer.setMimetype(MimetypeMap.MIMETYPE_HTML); writer.setEncoding("UTF-8"); - writer.putContent(report); + writer.putContent(report); return record; }