From 21f98c25b44277656789abf5349f993236d2edc0 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Tue, 16 Jul 2013 05:27:37 +0000 Subject: [PATCH] RM-777: Destruction report generation * template now correct and matches email notification style * record or folder details shown including basic disposition details * destroyed records shown if record folder * generalised report action * other tweaks git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@52685 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../bootstrap/RMDataDictionaryBootstrap.xml | 2 - .../report_rmr_destructionReport.html.ftl | 120 +++++++++++++++++- .../rm-capabilities-disposition-context.xml | 22 ++++ .../rm-capabilities-record-context.xml | 22 ---- .../messages/report-service.properties | 2 + .../rm-report-context.xml | 25 +++- ...ctionReport.java => FileReportAction.java} | 33 ++++- .../generator/DeclarativeReportGenerator.java | 100 ++++++++++++++- .../test/service/ReportServiceImplTest.java | 4 +- 9 files changed, 283 insertions(+), 47 deletions(-) create mode 100644 rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service.properties rename rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/{FileDestructionReport.java => FileReportAction.java} (75%) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/RMDataDictionaryBootstrap.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/RMDataDictionaryBootstrap.xml index 68a61c8775..e0bab16f9c 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/RMDataDictionaryBootstrap.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/RMDataDictionaryBootstrap.xml @@ -201,8 +201,6 @@ - - workspace diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_destructionReport.html.ftl b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_destructionReport.html.ftl index 068f7fdc84..406e23803b 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_destructionReport.html.ftl +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_destructionReport.html.ftl @@ -1,10 +1,120 @@ + + + - -

Destruction Report

- + + + + + +
+ + + + +
+ + + + + + + +
+ + + + +
+ + + + + +
+ + +
+ Destruction Report +
+
+
+ + + + + + + + + + + + + +
Destroyed <#if node.hasAspect("rma:record")>Record<#else>Record Folder:${node.properties["rma:identifier"]} ${node.properties.name}
Disposition Authority:${node.properties["rma:recordSearchDispositionAuthority"]}
Disposition Instructions:${node.properties["rma:recordSearchDispositionInstructions"]}
+ + <#if node.childAssociations["cm:contains"]??> + +
+ + + + + + +
Destroyed Records:
+ + + + + +
+ + + <#list node.childAssociations["cm:contains"] as child> + + + + + + + +
+ + + + + + +
${child.properties["rma:identifier"]} ${child.properties.name}
+
+
+ + + +
+ +
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-disposition-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-disposition-context.xml index 4637f703a3..fa8743e9c0 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-disposition-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-disposition-context.xml @@ -121,6 +121,28 @@ + + + + + + + + RECORD + RECORD_FOLDER + + + + + + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml index 67b827eaf0..953c6d2dbc 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml @@ -300,26 +300,4 @@ - - - - - - - RECORD - RECORD_FOLDER - - - - - - - - - - - - - \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service.properties new file mode 100644 index 0000000000..9af4b56137 --- /dev/null +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service.properties @@ -0,0 +1,2 @@ +report.rmr_destructionReport.name=Destruction Report (${node.rma:identifier} ${node.cm:name}).html + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-report-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-report-context.xml index 514c17450b..7b67033195 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-report-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-report-context.xml @@ -3,9 +3,9 @@ - + - + alfresco/module/org_alfresco_module_rm/model/reportModel.xml @@ -16,6 +16,16 @@ alfresco/module/org_alfresco_module_rm/messages/report-model + + + + + + + + alfresco.module.org_alfresco_module_rm.messages.report-service + + @@ -67,10 +77,14 @@ + + + + - - + + @@ -97,10 +111,11 @@ + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileDestructionReport.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileReportAction.java similarity index 75% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileDestructionReport.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileReportAction.java index 1732b06250..bb544d97e2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileDestructionReport.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/FileReportAction.java @@ -26,25 +26,27 @@ import org.alfresco.module.org_alfresco_module_rm.report.ReportModel; import org.alfresco.module.org_alfresco_module_rm.report.ReportService; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.ParameterCheck; /** - * File Destruction Report + * File Report Action * * @author Roy Wetherall * @since 2.1 */ -public class FileDestructionReport extends RMActionExecuterAbstractBase - implements ReportModel +public class FileReportAction extends RMActionExecuterAbstractBase + implements ReportModel { - /** Action name */ - public static final String NAME = "fileDestructionReport"; - /** report service */ protected ReportService reportService; /** file plan service */ protected FilePlanService filePlanService; + /** report type string value */ + private String reportType; + /** * @param reportService report service */ @@ -61,6 +63,23 @@ public class FileDestructionReport extends RMActionExecuterAbstractBase this.filePlanService = filePlanService; } + /** + * @param reportType report type string value + */ + public void setReportType(String reportType) + { + this.reportType = reportType; + } + + /** + * @return QName report type + */ + protected QName getReportType() + { + ParameterCheck.mandatory("this.reportType", reportType); + return QName.createQName(reportType, namespaceService); + } + /** * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef) */ @@ -78,7 +97,7 @@ public class FileDestructionReport extends RMActionExecuterAbstractBase throw new AlfrescoRuntimeException("Unable to file destruction report, because file plan could not be resolved."); } - Report report = reportService.generateReport(TYPE_DESTRUCTION_REPORT, actionedUponNodeRef); + Report report = reportService.generateReport(getReportType(), actionedUponNodeRef); reportService.fileReport(filePlan, report); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/DeclarativeReportGenerator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/DeclarativeReportGenerator.java index 5379039ee5..6762ddf688 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/DeclarativeReportGenerator.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/DeclarativeReportGenerator.java @@ -23,15 +23,20 @@ import java.util.HashMap; import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.repo.action.parameter.ParameterProcessorComponent; +import org.alfresco.repo.admin.SysAdminParams; +import org.alfresco.repo.model.Repository; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.TemplateService; -import org.alfresco.util.GUID; +import org.alfresco.util.UrlUtil; +import org.springframework.extensions.surf.util.I18NUtil; /** * Declarative report generator. @@ -41,27 +46,56 @@ import org.alfresco.util.GUID; */ public class DeclarativeReportGenerator extends BaseReportGenerator { + /** template lookup root */ protected static final NodeRef TEMPLATE_ROOT = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, "rm_report_templates"); + /** model keys */ + protected static final String KEY_NODE = "node"; + protected static final String KEY_CHILDREN = "children"; + /** content service */ protected ContentService contentService; + /** mimetype service */ protected MimetypeService mimetypeService; + /** file folder service */ protected FileFolderService fileFolderService; + /** template service */ protected TemplateService templateService; + /** node service */ + protected NodeService nodeService; + + /** repository helper */ + protected Repository repository; + + /** parameter processor component */ + protected ParameterProcessorComponent parameterProcessorComponent; + + /** sys admin params */ + protected SysAdminParams sysAdminParams; + + /** + * @param mimetypeService mimetype service + */ public void setMimetypeService(MimetypeService mimetypeService) { this.mimetypeService = mimetypeService; } + /** + * @param fileFolderService file folder service + */ public void setFileFolderService(FileFolderService fileFolderService) { this.fileFolderService = fileFolderService; } + /** + * @param templateService template service + */ public void setTemplateService(TemplateService templateService) { this.templateService = templateService; @@ -75,14 +109,47 @@ public class DeclarativeReportGenerator extends BaseReportGenerator this.contentService = contentService; } + /** + * @param nodeService node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @param parameterProcessorComponent parameter processor component + */ + public void setParameterProcessorComponent(ParameterProcessorComponent parameterProcessorComponent) + { + this.parameterProcessorComponent = parameterProcessorComponent; + } + + /** + * @param repository repository helper + */ + public void setRepository(Repository repository) + { + this.repository = repository; + } + + /** + * @param sysAdminParams sys admin params + */ + public void setSysAdminParams(SysAdminParams sysAdminParams) + { + this.sysAdminParams = sysAdminParams; + } + /** * @see org.alfresco.module.org_alfresco_module_rm.report.generator.BaseReportGenerator#generateReportName(org.alfresco.service.cmr.repository.NodeRef) */ @Override protected String generateReportName(NodeRef reportedUponNodeRef) { - // TODO Auto-generated method stub - return GUID.generate(); + String reportTypeName = reportType.getPrefixedQName(namespaceService).getPrefixString().replace(":", "_"); + String value = I18NUtil.getMessage("report." + reportTypeName + ".name"); + return parameterProcessorComponent.process(value, reportedUponNodeRef); } /** @@ -95,7 +162,7 @@ public class DeclarativeReportGenerator extends BaseReportGenerator NodeRef reportTemplateNodeRef = getReportTemplate(mimetype); // get the model - Map model = new HashMap(); + Map model = createTemplateModel(reportTemplateNodeRef, reportedUponNodeRef); // run the template String result = templateService.processTemplate("freemarker", reportTemplateNodeRef.toString(), model); @@ -106,10 +173,34 @@ public class DeclarativeReportGenerator extends BaseReportGenerator contentWriter.setMimetype(mimetype); contentWriter.putContent(result); + // return the reader to the temp content return contentWriter.getReader(); } + protected Map createTemplateModel(NodeRef templateNodeRef, NodeRef reportedUponNodeRef) + { + Map model = new HashMap(); + + // build the default model + NodeRef person = repository.getPerson(); + templateService.buildDefaultModel(person, + repository.getCompanyHome(), + repository.getUserHome(person), + templateNodeRef, + null); + + // put the reported upon node reference in the model + model.put(KEY_NODE, reportedUponNodeRef); + + // context url's (handy for images and links) + model.put("url", UrlUtil.getAlfrescoUrl(sysAdminParams)); + model.put(TemplateService.KEY_SHARE_URL, UrlUtil.getShareUrl(sysAdminParams)); + + return model; + } + /** + * Get's the report template based on the type and mimetype. * * @param mimetype * @return @@ -137,6 +228,7 @@ public class DeclarativeReportGenerator extends BaseReportGenerator } /** + * Gets the template name based on the type and mimetype. * * @param mimetype * @return diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/ReportServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/ReportServiceImplTest.java index e8d18ddaf4..787188e96d 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/ReportServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/ReportServiceImplTest.java @@ -25,7 +25,6 @@ import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction; import org.alfresco.module.org_alfresco_module_rm.report.Report; import org.alfresco.module.org_alfresco_module_rm.report.ReportModel; import org.alfresco.module.org_alfresco_module_rm.report.ReportService; -import org.alfresco.module.org_alfresco_module_rm.report.action.FileDestructionReport; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -86,6 +85,7 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel { Report report = reportService.generateReport(TYPE_DESTRUCTION_REPORT, rmFolder); + System.out.println(report.getReportName()); System.out.println(report.getReportContent().getContentString()); return null; @@ -121,7 +121,7 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel public Void run() throws Exception { recordsManagementActionService.executeRecordsManagementAction(rmFolder, DestroyAction.NAME); - recordsManagementActionService.executeRecordsManagementAction(rmFolder, FileDestructionReport.NAME); + recordsManagementActionService.executeRecordsManagementAction(rmFolder, "fileDestructionReport"); return null; } });