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 773090efe0..cc6fe1f97e 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 @@ -227,6 +227,23 @@ + + + + + + + + workspace + SpacesStore + rmr_holdReport + Hold report template. + contentUrl=classpath:alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_holdReport.html.ftl|mimetype=text/plain|encoding=UTF-8 + Hold Report Template + report_rmr_holdReport.html.ftl + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_holdReport.html.ftl b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_holdReport.html.ftl new file mode 100644 index 0000000000..fc918fa8dd --- /dev/null +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_holdReport.html.ftl @@ -0,0 +1,112 @@ + + + + + + + + + +
+ + + + +
+ + + + + + + +
+ + + + +
+ + + + + +
+ + +
+ ${message("file.report.hold.report")} +
+
+
+ + + + + + + + + + + + + +
${message("file.report.hold.name")}:${node.properties["cm:name"]}
${message("file.report.hold.description")}: + <#if node.properties["cm:description"]??> + ${node.properties["cm:description"]} + +
${message("file.report.hold.reason")}:${node.properties["rma:holdReason"]}
+ <#if node.childAssociations["rma:frozenRecords"]??> +
+ + + + + +
${message("file.report.hold.held")}:
+ + + + +
+ + <#list node.childAssociations["rma:frozenRecords"] 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/bootstrap/report/report_rmr_transferReport.html.ftl b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_transferReport.html.ftl index 38109cfc72..8b4bd71cbe 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_transferReport.html.ftl +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_transferReport.html.ftl @@ -58,6 +58,7 @@ + <#macro generateTransferFolderHTML transferNode> ${transferNode.properties["name"]?html} @@ -69,6 +70,7 @@ + <#macro generateTransferRecordHTML transferNode>
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml index b11094ba49..623272bc65 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml @@ -113,4 +113,23 @@ + + + + + + + + HOLD + + + + + + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties index f377f36af5..f8de00bee7 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties @@ -175,12 +175,9 @@ retain.description=Retain # Add Record Types addRecordTypes.title=Add record types addRecordTypes.description=Adds the selected type(s) to the record -# Destruction report -destructionReport.title=Destruction report -destructionReport.description=Destruction report -# Transfer Report -transferReport.title=Transfer Report -transferReport.description=Transfer Report +# File report +fileReport.title=File report +fileReport.description=File report # Action parameter constraints rm-ac-is-kind-kinds.record_category=Record Category diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties index eba6e0782f..ff6ed3c03b 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties @@ -65,6 +65,7 @@ capability.ViewUpdateReasonsForFreeze.title=View Update Reasons for Freeze capability.CreateHold.title=Create Hold capability.AddToHold.title=Add to Hold capability.RemoveFromHold.title=Remove from Hold +capability.FileHoldReport=File Hold Report # Audit capability.group.audit.title=Audit diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-model.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-model.properties index 2e0a528dad..0d85d92411 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-model.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-model.properties @@ -1,7 +1,13 @@ rmr_recordsmanagementreport.description=Records Management Report Content Model -rmr_recordsmanagementreport.type.rmr_report.title=Records Management Report +rmr_recordsmanagementreport.type.rmr_report.title=Report rmr_recordsmanagementreport.type.rmr_report.description=Records management report. -rmr_recordsmanagementreport.type.rmr_destructionReport.title=Records Management Report -rmr_recordsmanagementreport.type.rmr_destructionReport.description=Records management destruction report. \ No newline at end of file +rmr_recordsmanagementreport.type.rmr_destructionReport.title=Transfer Report +rmr_recordsmanagementreport.type.rmr_destructionReport.description=Records management transfer report. + +rmr_recordsmanagementreport.type.rmr_destructionReport.title=Destruction Report +rmr_recordsmanagementreport.type.rmr_destructionReport.description=Records management destruction report. + +rmr_recordsmanagementreport.type.rmr_holdReport.title=Hold Report +rmr_recordsmanagementreport.type.rmr_holdReport.description=Records management hold report. \ 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 index 56eec14f5d..1b2a8a061e 100644 --- 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 @@ -1,2 +1 @@ -report.rmr_destructionReport.name=Destruction Report (${node.rma:identifier} ${node.cm:name}).html -report.rmr_transferReport.name=Transfer Report (${node.rma:identifier} ${node.cm:name}).html \ No newline at end of file +report.default=Report \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties index 07f48bb466..9d9af18268 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=Bericht \u00fcber vernichtete Datens\u00e4tze (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=Bericht \u00fcber vernichtete Datens\u00e4tze (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties index 489f57f301..006682b623 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=Informe de destrucci\u00f3n (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=Informe de destrucci\u00f3n (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties index 5b9f4c690b..4cec45bc1d 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=Rapport de destruction (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=Rapport de destruction (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties index bd3477583b..878afc2170 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=Report di eliminazione permanente (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=Report di eliminazione permanente (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties index 02514738d0..3515f5f391 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=\u5ec3\u68c4\u30ec\u30dd\u30fc\u30c8(${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=\u5ec3\u68c4\u30ec\u30dd\u30fc\u30c8(${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties index 4b8da92623..e93210895a 100755 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=Vernietingsrapport (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=Vernietingsrapport (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties index b5c3d8e9e9..95c1c8b339 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties @@ -1,2 +1,2 @@ -report.rmr_destructionReport.name=\u9500\u6bc1\u62a5\u544a (${node.rma:identifier} ${node.cm:name}).html +report.rmr_destructionReport.name=\u9500\u6bc1\u62a5\u544a (${node.rma:identifier} ${node.cm:name}) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/template.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/template.properties index f5a08e6703..91991d3cb7 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/template.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/template.properties @@ -17,4 +17,9 @@ file.report.performed.by=Performed By file.report.record=Record file.report.record.folder=Record Folder file.report.unique.folder.identifier=Unique Folder Identifier -file.report.unique.record.identifier=Unique Record Identifier \ No newline at end of file +file.report.unique.record.identifier=Unique Record Identifier +file.report.hold.report=Hold Report +file.report.hold.name=Hold Name +file.report.hold.description=Hold Description +file.report.hold.reason=Hold Reason +file.report.hold.held=Held \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsPermissionModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsPermissionModel.xml index b31734f6f7..8d938b3e37 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsPermissionModel.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsPermissionModel.xml @@ -92,6 +92,7 @@ + @@ -177,6 +178,7 @@ + @@ -454,7 +456,7 @@ - + @@ -467,6 +469,11 @@ + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/reportModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/reportModel.xml index 52c1f408f9..a69c725725 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/reportModel.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/reportModel.xml @@ -35,11 +35,15 @@ cm:content - Report + Destruction Report rmr:report - Transfer + Transfer Report + rmr:report + + + Hold Report rmr:report diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml index 07652571d4..1b1674c29f 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml @@ -3,6 +3,23 @@ + + + + + + + + + + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-context.xml index a0db2e26fa..0277a9f386 100755 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-context.xml @@ -9,7 +9,7 @@ - + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v22-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v22-context.xml index 7b68e88c1c..2c076cf37b 100755 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v22-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v22-context.xml @@ -59,5 +59,26 @@ ${rm.ghosting.enabled} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index 32b65eb8d8..63d2541b26 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -1054,5 +1054,35 @@ + + + + + + + + + + + + + + + + + + + + + + + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.execute=RM_ALLOW + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.*=RM_ALLOW + org.alfresco.repo.action.executer.ActionExecuter.*=RM_ALLOW + + + \ No newline at end of file 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 9887108d07..835c39182c 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 @@ -74,72 +74,32 @@ - + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + rma:transfer + - - - - org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.execute=RM_CAP.0.rma:filePlanComponent.FileTransferReport - org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.*=RM_ALLOW - org.alfresco.repo.action.executer.ActionExecuter.*=RM_ALLOW - - - - - - - - - - - - - - - - - - - - - org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.execute=RM_CAP.0.rma:filePlanComponent.FileDestructionReport - org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.*=RM_ALLOW - org.alfresco.repo.action.executer.ActionExecuter.*=RM_ALLOW - + + + + + rma:hold + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml index e3595a659e..e60fc9c43d 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml @@ -868,4 +868,15 @@ + + + + + + HOLD + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/security/rm-default-roles-bootstrap.json b/rm-server/config/alfresco/module/org_alfresco_module_rm/security/rm-default-roles-bootstrap.json index 10a0fe56c3..85d331cd96 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/security/rm-default-roles-bootstrap.json +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/security/rm-default-roles-bootstrap.json @@ -141,7 +141,8 @@ "FileTransferReport", "CreateHold", "AddToHold", - "RemoveFromHold" + "RemoveFromHold", + "FileHoldReport" ] }, { @@ -211,7 +212,8 @@ "FileTransferReport", "CreateHold", "AddToHold", - "RemoveFromHold" + "RemoveFromHold", + "FileHoldReport" ] } ] \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/AuditableActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/AuditableActionExecuterAbstractBase.java index 43eb5f726b..35ae6c2af1 100755 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/AuditableActionExecuterAbstractBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/AuditableActionExecuterAbstractBase.java @@ -96,7 +96,17 @@ public abstract class AuditableActionExecuterAbstractBase extends ActionExecuter if (auditable) { - getAuditService().registerAuditEvent(this.getActionDefinition().getName(), this.getActionDefinition().getTitle()); + // get the details of the action + String name = getActionDefinition().getName(); + String title = getActionDefinition().getTitle(); + if (title == null || title.isEmpty()) + { + // default to name if no title available + title = name; + } + + // register audit event + getAuditService().registerAuditEvent(title, name); } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/BaseReportAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportAction.java similarity index 79% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/BaseReportAction.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportAction.java index 2e6e891cae..bfa33cc3dd 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/BaseReportAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportAction.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -16,10 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.module.org_alfresco_module_rm.report.action; - -import java.io.Serializable; -import java.util.Map; +package org.alfresco.module.org_alfresco_module_rm.action.impl; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; @@ -36,16 +33,20 @@ import org.apache.commons.lang.StringUtils; import org.springframework.extensions.surf.util.I18NUtil; /** - * Base class for the report action classes + * File report generic action. * * @author Tuna Aksoy * @since 2.2 */ -public abstract class BaseReportAction extends RMActionExecuterAbstractBase implements ReportModel +public class FileReportAction extends RMActionExecuterAbstractBase implements ReportModel { + /** action name */ + public static final String NAME = "fileReport"; + /** Constants for the parameters passed from the UI */ public static final String REPORT_TYPE = "reportType"; public static final String DESTINATION = "destination"; + public static final String MIMETYPE= "mimetype"; /** I18N */ private static final String MSG_PARAM_NOT_SUPPLIED = "rm.action.parameter-not-supplied"; @@ -67,28 +68,30 @@ public abstract class BaseReportAction extends RMActionExecuterAbstractBase impl @Override protected void executeImpl(Action action, NodeRef actionedUponNodeRef) { - // TODO check that the actionedUponNodeRef is in a state to generate a destruction report - // ie: is it eligable for destruction .. use fileDestructionReport capability! - - // TODO allow the mimetype of the report to be specified as a parameter - + // get the mimetype of the report + String mimetype = (String)action.getParameterValue(MIMETYPE); + if (mimetype == null || mimetype.isEmpty()) + { + mimetype = MimetypeMap.MIMETYPE_HTML; + } + + // get the report type QName reportType = getReportType(action); - Report report = reportService.generateReport(reportType, actionedUponNodeRef, MimetypeMap.MIMETYPE_HTML, addProperties(actionedUponNodeRef)); - + + // get the destination NodeRef destination = getDestination(action); + + // generate the report + Report report = reportService.generateReport(reportType, actionedUponNodeRef, mimetype); + + // file the report NodeRef filedReport = reportService.fileReport(destination, report); + // return the report name String filedReportName = (String) nodeService.getProperty(filedReport, ContentModel.PROP_NAME); action.setParameterValue(ActionExecuterAbstractBase.PARAM_RESULT, filedReportName); } - /** - * Gives other action classes to pass additional properties for the template model - * - * @return Properties which are passed to the template model - */ - protected abstract Map addProperties(NodeRef nodeRef); - /** * Retrieves the value of the given parameter. If the parameter has not been passed from the UI an error will be thrown * diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java index 3ab9dcf2f3..3311d639a3 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java @@ -1181,7 +1181,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean { List listAuditEvents = new ArrayList(this.auditEvents.size()); listAuditEvents.addAll(this.auditEvents.values()); - Collections.sort(listAuditEvents, new AuditEvent()); + Collections.sort(listAuditEvents); return listAuditEvents; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AuditEvent.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AuditEvent.java index 17f3815e25..c3ab2f7cb9 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AuditEvent.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AuditEvent.java @@ -18,10 +18,9 @@ */ package org.alfresco.module.org_alfresco_module_rm.audit.event; -import java.util.Comparator; - import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.util.ParameterCheck; import org.springframework.extensions.surf.util.I18NUtil; @@ -32,7 +31,7 @@ import org.springframework.extensions.surf.util.I18NUtil; * @author Roy Wetherall * @since 1.0 */ -public class AuditEvent implements RecordsManagementModel, Comparator +public class AuditEvent implements RecordsManagementModel, Comparable { /** Name */ protected String name; @@ -55,15 +54,19 @@ public class AuditEvent implements RecordsManagementModel, Comparator. + */ +package org.alfresco.module.org_alfresco_module_rm.patch.common; + +import java.util.Set; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.module.org_alfresco_module_rm.capability.Capability; +import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; +import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; +import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Abstract implementation of capability patch. + * + * @author Roy Wetherall + * @since 2.2 + */ +public abstract class CapabilityPatch extends AbstractModulePatch +{ + /** File plan service */ + private FilePlanService filePlanService; + + /** File plan role service */ + private FilePlanRoleService filePlanRoleService; + + /** Capability service */ + private CapabilityService capabilityService; + + /** + * @param filePlanRoleService file plan role service + */ + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) + { + this.filePlanRoleService = filePlanRoleService; + } + + /** + * @param capabilityService capability service + */ + public void setCapabilityService(CapabilityService capabilityService) + { + this.capabilityService = capabilityService; + } + + /** + * @param filePlanService file plan service + */ + public void setFilePlanService(FilePlanService filePlanService) + { + this.filePlanService = filePlanService; + } + + /** + * Helper method to get the file plans + * + * @return Set of file plan node references + */ + protected Set getFilePlans() + { + return filePlanService.getFilePlans(); + } + + /** + * Adds a new capability to the specified roles. + * + * @param filePlan file plan + * @param capabilityName capability name + * @param roles roles + */ + protected void addCapability(NodeRef filePlan, String capabilityName, String ... roles) + { + Capability capability = capabilityService.getCapability(capabilityName); + if (capability == null) + { + throw new AlfrescoRuntimeException("Can't patch capabilities, because capability " + capabilityName + " does not exist."); + } + + for (String roleName : roles) + { + Role role = filePlanRoleService.getRole(filePlan, roleName); + + if (role != null) + { + // get the roles current capabilities + Set capabilities = role.getCapabilities(); + + // only update if the capability is missing + if (!capabilities.contains(capability)) + { + if (logger.isDebugEnabled()) + { + logger.debug(" ... adding capability " + capabilityName + " to role " + role.getName()); + } + + capabilities.add(capability); + filePlanRoleService.updateRole(filePlan, role.getName(), role.getDisplayLabel(), capabilities); + } + } + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch#applyInternal() + */ + @Override + public void applyInternal() + { + Set filePlans = getFilePlans(); + + if (logger.isDebugEnabled()) + { + logger.debug(" ... updating " + filePlans.size() + " file plans"); + } + + for (NodeRef filePlan : filePlans) + { + if (logger.isDebugEnabled()) + { + logger.debug(" ... updating file plan " + filePlan.toString()); + } + + // apply the capability patch to each file plan + applyCapabilityPatch(filePlan); + } + } + + protected abstract void applyCapabilityPatch(NodeRef filePlan); +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22CapabilityPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22CapabilityPatch.java index 33bb7340ef..b20a70170c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22CapabilityPatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22CapabilityPatch.java @@ -18,15 +18,8 @@ */ package org.alfresco.module.org_alfresco_module_rm.patch.v22; -import java.util.Set; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.module.org_alfresco_module_rm.capability.Capability; -import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; -import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; -import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch; +import org.alfresco.module.org_alfresco_module_rm.patch.common.CapabilityPatch; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; -import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -35,128 +28,29 @@ import org.alfresco.service.cmr.repository.NodeRef; * @author Tuna Aksoy * @since 2.2 */ -public class RMv22CapabilityPatch extends AbstractModulePatch +public class RMv22CapabilityPatch extends CapabilityPatch { - - /** File plan service */ - private FilePlanService filePlanService; - - /** File plan role service */ - private FilePlanRoleService filePlanRoleService; - - /** Capability service */ - private CapabilityService capabilityService; - /** - * @param filePlanRoleService file plan role service + * @see org.alfresco.module.org_alfresco_module_rm.patch.common.CapabilityPatch#applyCapabilityPatch(org.alfresco.service.cmr.repository.NodeRef) */ - public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) + protected void applyCapabilityPatch(NodeRef filePlan) { - this.filePlanRoleService = filePlanRoleService; - } - - /** - * @param capabilityService capability service - */ - public void setCapabilityService(CapabilityService capabilityService) - { - this.capabilityService = capabilityService; - } - - /** - * @param filePlanService file plan service - */ - public void setFilePlanService(FilePlanService filePlanService) - { - this.filePlanService = filePlanService; - } - - /** - * Helper method to get the file plans - * - * @return Set of file plan node references - */ - protected Set getFilePlans() - { - return filePlanService.getFilePlans(); - } - - /** - * Adds a new capability to the specified roles. - * - * @param filePlan file plan - * @param capabilityName capability name - * @param roles roles - */ - protected void addCapability(NodeRef filePlan, String capabilityName, String ... roles) - { - Capability capability = capabilityService.getCapability(capabilityName); - if (capability == null) - { - throw new AlfrescoRuntimeException("Unable to bootstrap RMv21 capabilities, because capability " + capabilityName + " does not exist."); - } - - for (String roleName : roles) - { - Role role = filePlanRoleService.getRole(filePlan, roleName); - - if (role != null) - { - // get the roles current capabilities - Set capabilities = role.getCapabilities(); - - // only update if the capability is missing - if (!capabilities.contains(capability)) - { - if (logger.isDebugEnabled()) - { - logger.debug(" ... adding capability " + capabilityName + " to role " + role.getName()); - } - - capabilities.add(capability); - filePlanRoleService.updateRole(filePlan, role.getName(), role.getDisplayLabel(), capabilities); - } - } - } - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch#applyInternal() - */ - @Override - public void applyInternal() - { - Set filePlans = getFilePlans(); - - if (logger.isDebugEnabled()) - { - logger.debug(" ... updating " + filePlans.size() + " file plans"); - } - - for (NodeRef filePlan : filePlans) - { - if (logger.isDebugEnabled()) - { - logger.debug(" ... updating file plan " + filePlan.toString()); - } - - // add new capability - addCapability(filePlan, - "FileDestructionReport", - FilePlanRoleService.ROLE_ADMIN, - FilePlanRoleService.ROLE_RECORDS_MANAGER); - addCapability(filePlan, - "CreateHold", - FilePlanRoleService.ROLE_ADMIN, - FilePlanRoleService.ROLE_RECORDS_MANAGER); - addCapability(filePlan, - "AddToHold", - FilePlanRoleService.ROLE_ADMIN, - FilePlanRoleService.ROLE_RECORDS_MANAGER); - addCapability(filePlan, - "RemoveFromHold", - FilePlanRoleService.ROLE_ADMIN, - FilePlanRoleService.ROLE_RECORDS_MANAGER); - } + // add new capability + addCapability(filePlan, + "FileDestructionReport", + FilePlanRoleService.ROLE_ADMIN, + FilePlanRoleService.ROLE_RECORDS_MANAGER); + addCapability(filePlan, + "CreateHold", + FilePlanRoleService.ROLE_ADMIN, + FilePlanRoleService.ROLE_RECORDS_MANAGER); + addCapability(filePlan, + "AddToHold", + FilePlanRoleService.ROLE_ADMIN, + FilePlanRoleService.ROLE_RECORDS_MANAGER); + addCapability(filePlan, + "RemoveFromHold", + FilePlanRoleService.ROLE_ADMIN, + FilePlanRoleService.ROLE_RECORDS_MANAGER); } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22FileHoldReportCapabilityPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22FileHoldReportCapabilityPatch.java new file mode 100644 index 0000000000..33169e9090 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22FileHoldReportCapabilityPatch.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2013 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.patch.v22; + +import org.alfresco.module.org_alfresco_module_rm.patch.common.CapabilityPatch; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * RM v2.2 patch to add FileHoldReport capability. + * + * @author Roy Wetherall + * @since 2.2 + */ +public class RMv22FileHoldReportCapabilityPatch extends CapabilityPatch +{ + /** + * @see org.alfresco.module.org_alfresco_module_rm.patch.common.CapabilityPatch#applyCapabilityPatch(org.alfresco.service.cmr.repository.NodeRef) + */ + protected void applyCapabilityPatch(NodeRef filePlan) + { + // add new capability + addCapability(filePlan, + "FileHoldReport", + FilePlanRoleService.ROLE_ADMIN, + FilePlanRoleService.ROLE_RECORDS_MANAGER); + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22HoldReportPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22HoldReportPatch.java new file mode 100644 index 0000000000..144f5a0f29 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v22/RMv22HoldReportPatch.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2005-2013 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.patch.v22; + +import java.io.InputStream; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch; +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.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; + +/** + * Adds the hold report. + * + * @author Roy Wetherall + * @since 2.2 + */ +public class RMv22HoldReportPatch extends AbstractModulePatch +{ + /** Report template path */ + private static final String REPORT_TEMPLATE_PATH = "alfresco/module/org_alfresco_module_rm/bootstrap/report/report_rmr_holdReport.html.ftl"; + + /** Report template config node IDs */ + private static final NodeRef REPORT_FOLDER = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, "rm_report_templates"); + private static final NodeRef REPORT = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, "rmr_holdReport"); + + /** Node service */ + private NodeService nodeService; + + /** Content service */ + private ContentService contentService; + + /** + * @param nodeService node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @param contentService content service + */ + public void setContentService(ContentService contentService) + { + this.contentService = contentService; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch#applyInternal() + */ + @Override + public void applyInternal() + { + if (!nodeService.exists(REPORT)) + { + // get the assoc qname + QName assocQName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName("report_rmr_holdReport.html.ftl")); + + // build the node properties + Map props = new HashMap(4); + props.put(ContentModel.PROP_DESCRIPTION, "Hold report template."); + props.put(ContentModel.PROP_TITLE, "Hold Report Template"); + props.put(ContentModel.PROP_NAME, "report_rmr_holdReport.html.ftl"); + props.put(ContentModel.PROP_NODE_UUID, "rmr_holdReport"); + + // create the node + ChildAssociationRef node = nodeService.createNode( + REPORT_FOLDER, + ContentModel.ASSOC_CONTAINS, + assocQName, + ContentModel.TYPE_CONTENT, + props); + + // put the content + ContentWriter writer = contentService.getWriter(node.getChildRef(), ContentModel.PROP_CONTENT, true); + InputStream is = getClass().getClassLoader().getResourceAsStream(REPORT_TEMPLATE_PATH); + writer.putContent(is); + } + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/Report.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/Report.java index 5c90cd14e8..5e470692b5 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/Report.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/Report.java @@ -32,12 +32,24 @@ import org.alfresco.service.namespace.QName; */ public interface Report { + /** + * @return {@link QName} report type + */ QName getReportType(); + /** + * @return {@link String} report name + */ String getReportName(); + /** + * @return {@link Map}<{@link QName},{@link Serializable}> report properties + */ Map getReportProperties(); + /** + * @return {@link ContentReader} content reader to report content + */ ContentReader getReportContent(); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportGenerator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportGenerator.java index ca474b6cb8..9a03aa0d5a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportGenerator.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportGenerator.java @@ -18,21 +18,28 @@ */ package org.alfresco.module.org_alfresco_module_rm.report; -import java.io.Serializable; -import java.util.Map; - import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; /** + * Report generator interface. + * * @author Roy Wetherall * @since 2.1 */ public interface ReportGenerator { + /** + * @return {@link QName} report type + */ QName getReportType(); + /** + * Generate report. + * + * @param reportedUponNodeRef + * @param mimetype + * @return + */ Report generateReport(NodeRef reportedUponNodeRef, String mimetype); - - Report generateReport(NodeRef reportedUponNodeRef, String mimetype, Map properties); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportModel.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportModel.java index 710fdccae0..c087fde6da 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportModel.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportModel.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2011 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -24,14 +24,26 @@ import org.alfresco.service.namespace.QName; * Helper class containing records management report qualified names * * @author Roy Wetherall + * @since 2.1 */ public interface ReportModel { - // Namespace details + /** Namespace details */ String RMR_URI = "http://www.alfresco.org/model/recordsmanagementreport/1.0"; String RMR_PREFIX = "rmr"; + /** base report type */ QName TYPE_REPORT = QName.createQName(RMR_URI, "report"); + + /** destruction report type */ QName TYPE_DESTRUCTION_REPORT = QName.createQName(RMR_URI, "destructionReport"); + + /** transfer report type */ QName TYPE_TRANSFER_REPORT = QName.createQName(RMR_URI, "transferReport"); + + /** + * hold report type + * @since 2.2 + */ + QName TYPE_HOLD_REPORT = QName.createQName(RMR_URI, "holdReport"); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportService.java index 33b8e5defc..b9f289755d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportService.java @@ -18,8 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.report; -import java.io.Serializable; -import java.util.Map; import java.util.Set; import org.alfresco.service.cmr.repository.NodeRef; @@ -43,36 +41,31 @@ public interface ReportService /** * Get a list of the available report types. * - * @return + * @return {@link Set}<{@link QName}> list of the available report types */ Set getReportTypes(); /** + * Generate a report of the given type and reported upon node reference. * - * - * @param reportType - * @param reportedUponNodeRef - * @return + * @param reportType report type + * @param reportedUponNodeRef reported upon node reference + * @return {@link Report} generated report */ Report generateReport(QName reportType, NodeRef reportedUponNodeRef); /** + * Generate a report for a specified mimetype. + * + * @see #generateReport(QName, NodeRef) * - * @param reportType - * @param reportedUponNodeRef - * @return + * @param reportType report type + * @param reportedUponNodeRef report upon node reference + * @param mimetype report mimetype + * @return {@link Report} generated report */ Report generateReport(QName reportType, NodeRef reportedUponNodeRef, String mimetype); - /** - * @param reportType - * @param reportedUponNodeRef - * @param mimetype - * @param properties - * @return - */ - Report generateReport(QName reportType, NodeRef reportedUponNodeRef, String mimetype, Map properties); - /** * File report in the given destination. If the given node reference is a file plan node * reference the report will be filed in the unfiled records container. diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportServiceImpl.java index f0ce806699..e67a45884c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/ReportServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.report; -import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -95,20 +94,6 @@ public class ReportServiceImpl extends ServiceBaseImpl ParameterCheck.mandatory("reportedUponNodeRef", reportedUponNodeRef); ParameterCheck.mandatoryString("mimetype", mimetype); - return generateReport(reportType, reportedUponNodeRef, mimetype, new HashMap(1)); - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.report.ReportService#generateReport(QName, NodeRef, String, Map) - */ - @Override - public Report generateReport(QName reportType, NodeRef reportedUponNodeRef, String mimetype, Map properties) - { - ParameterCheck.mandatory("reportType", reportType); - ParameterCheck.mandatory("reportedUponNodeRef", reportedUponNodeRef); - ParameterCheck.mandatoryString("mimetype", mimetype); - ParameterCheck.mandatory("properties", properties); - // get the generator ReportGenerator generator = registry.get(reportType); @@ -119,7 +104,7 @@ public class ReportServiceImpl extends ServiceBaseImpl } // generate the report - return generator.generateReport(reportedUponNodeRef, mimetype, properties); + return generator.generateReport(reportedUponNodeRef, mimetype); } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/BaseReportGenerator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/BaseReportGenerator.java index d4bf413c8f..87fb74c0a9 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/BaseReportGenerator.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/BaseReportGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -19,9 +19,9 @@ package org.alfresco.module.org_alfresco_module_rm.report.generator; import java.io.Serializable; -import java.util.HashMap; import java.util.Map; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.report.Report; import org.alfresco.module.org_alfresco_module_rm.report.ReportGenerator; import org.alfresco.module.org_alfresco_module_rm.report.ReportService; @@ -32,79 +32,119 @@ import org.alfresco.service.namespace.QName; import org.alfresco.util.ParameterCheck; /** + * Base report generator. + * * @author Roy Wetherall * @since 2.1 */ public abstract class BaseReportGenerator implements ReportGenerator { + /** report service */ protected ReportService reportService; + /** namespace service */ protected NamespaceService namespaceService; - protected String reportTypeName; - + /** report type qualified name */ protected QName reportType; + /** + * @param reportService report service + */ public void setReportService(ReportService reportService) { this.reportService = reportService; } + /** + * @param namespaceService namespace service + */ public void setNamespaceService(NamespaceService namespaceService) { this.namespaceService = namespaceService; } - - public void setReportTypeName(String reportTypeName) + + /** + * @param reportType report type + */ + public void setReportType(QName reportType) { - this.reportTypeName = reportTypeName; + this.reportType = reportType; } - + + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.ReportGenerator#getReportType() + */ @Override public QName getReportType() { return reportType; } + /** + * Init method + */ public void init() { - // convert type name to QName - reportType = QName.createQName(reportTypeName, namespaceService); - + // ensure required values have been set + ParameterCheck.mandatory("reportType", reportType); + // register report generator reportService.registerReportGenerator(this); } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.ReportGenerator#generateReport(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.util.Map) + */ @Override public Report generateReport(NodeRef reportedUponNodeRef, String mimetype) { ParameterCheck.mandatory("reportedUponNodeRef", reportedUponNodeRef); ParameterCheck.mandatoryString("mimetype", mimetype); - return generateReport(reportedUponNodeRef, mimetype, new HashMap(1)); - } - - @Override - public Report generateReport(NodeRef reportedUponNodeRef, String mimetype, Map properties) - { - ParameterCheck.mandatory("reportedUponNodeRef", reportedUponNodeRef); - ParameterCheck.mandatoryString("mimetype", mimetype); - ParameterCheck.mandatory("properties", properties); - - String reportName = generateReportName(reportedUponNodeRef); - Map reportProperties = generateReportProperties(reportedUponNodeRef); - ContentReader contentReader = generateReportContent(reportedUponNodeRef, mimetype, properties); + // check the applicability of the report generator for the given reported upon node + checkReportApplicability(reportedUponNodeRef); + + // generate the report name + String reportName = generateReportName(reportedUponNodeRef, mimetype); + + // generate the report meta-data + Map reportProperties = generateReportMetadata(reportedUponNodeRef); + + // generate the report content + ContentReader contentReader = generateReportContent(reportedUponNodeRef, mimetype, generateReportTemplateContext(reportedUponNodeRef)); + + // return the report information object return new ReportInfo(reportType, reportName, reportProperties, contentReader); } + + /** + * Checks whether the report generator is applicable given the reported upon node reference. + *

+ * Throws AlfrescoRuntimeException if applicability fails, with reason. + * + * @param reportedUponNodeRef reported upon node reference + * @throws AlfrescoRuntimeException if applicability check fails + */ + protected abstract void checkReportApplicability(NodeRef reportedUponNodeRef) throws AlfrescoRuntimeException; - protected abstract String generateReportName(NodeRef reportedUponNodeRef); + /** + * Generate the report name + */ + protected abstract String generateReportName(NodeRef reportedUponNodeRef, String mimetype); - protected Map generateReportProperties(NodeRef reportedUponNodeRef) - { - // default implementation - return new HashMap(0); - } + /** + * Generate the report template context. + */ + protected abstract Map generateReportTemplateContext(NodeRef reportedUponNodeRef); + + /** + * Generate report meta-data + */ + protected abstract Map generateReportMetadata(NodeRef reportedUponNodeRef); + /** + * Generate report content + */ protected abstract ContentReader generateReportContent(NodeRef reportedUponNodeRef, String mimetype, Map properties); - } 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 29f6ee574c..f4d44fc0fe 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -19,21 +19,28 @@ package org.alfresco.module.org_alfresco_module_rm.report.generator; import java.io.Serializable; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.repo.action.parameter.ParameterProcessorComponent; +import org.alfresco.model.ContentModel; import org.alfresco.repo.admin.SysAdminParams; +import org.alfresco.repo.i18n.StaticMessageLookup; import org.alfresco.repo.model.Repository; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.dictionary.TypeDefinition; 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.service.namespace.QName; import org.alfresco.util.UrlUtil; import org.springframework.extensions.surf.util.I18NUtil; @@ -45,12 +52,18 @@ import org.springframework.extensions.surf.util.I18NUtil; */ public class DeclarativeReportGenerator extends BaseReportGenerator { + /** message lookups */ + protected static final String MSG_REPORT = "report.default"; + /** 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"; + + /** applicable reported upon types */ + protected Set applicableTypes; /** content service */ protected ContentService contentService; @@ -67,12 +80,23 @@ public class DeclarativeReportGenerator extends BaseReportGenerator /** repository helper */ protected Repository repository; - /** parameter processor component */ - protected ParameterProcessorComponent parameterProcessorComponent; - + /** node service */ + protected NodeService nodeService; + + /** dictionary service */ + protected DictionaryService dictionaryService; + /** sys admin params */ protected SysAdminParams sysAdminParams; + /** + * @param applicableTypes applicable types + */ + public void setApplicableTypes(Set applicableTypes) + { + this.applicableTypes = applicableTypes; + } + /** * @param mimetypeService mimetype service */ @@ -106,11 +130,19 @@ public class DeclarativeReportGenerator extends BaseReportGenerator } /** - * @param parameterProcessorComponent parameter processor component + * @param nodeService node service */ - public void setParameterProcessorComponent(ParameterProcessorComponent parameterProcessorComponent) + public void setNodeService(NodeService nodeService) { - this.parameterProcessorComponent = parameterProcessorComponent; + this.nodeService = nodeService; + } + + /** + * @param dictionaryService dictionary service + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; } /** @@ -128,16 +160,47 @@ public class DeclarativeReportGenerator extends BaseReportGenerator { 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) + protected String generateReportName(NodeRef reportedUponNodeRef, String mimetype) { - String reportTypeName = reportType.getPrefixedQName(namespaceService).getPrefixString().replace(":", "_"); - String value = I18NUtil.getMessage("report." + reportTypeName + ".name"); - return parameterProcessorComponent.process(value, reportedUponNodeRef); + // get the file extension based on the mimetype + String extension = mimetypeService.getExtension(mimetype); + + // get the name of the reported updon node ref + String name = (String)nodeService.getProperty(reportedUponNodeRef, ContentModel.PROP_NAME); + + // build default report name + StringBuilder builder = new StringBuilder(); + builder.append(getReportDisplayLabel()); + if (name != null & !name.isEmpty()) + { + builder.append(" - ").append(name); + } + builder.append(".").append(extension); + + return builder.toString(); + } + + /** + * Helper method to get the report types display label + * + * @return {@link String} report type display label + */ + private String getReportDisplayLabel() + { + String result = I18NUtil.getMessage(MSG_REPORT); + + TypeDefinition typeDef = dictionaryService.getType(reportType); + if (typeDef != null) + { + result = typeDef.getTitle(new StaticMessageLookup()); + } + + return result; } /** @@ -165,6 +228,14 @@ public class DeclarativeReportGenerator extends BaseReportGenerator return contentWriter.getReader(); } + /** + * Create template model. + * + * @param templateNodeRef + * @param reportedUponNodeRef + * @param properties + * @return + */ protected Map createTemplateModel(NodeRef templateNodeRef, NodeRef reportedUponNodeRef, Map properties) { Map model = new HashMap(); @@ -214,8 +285,6 @@ public class DeclarativeReportGenerator extends BaseReportGenerator // get localise template return fileFolderService.getLocalizedSibling(reportTemplateNodeRef); - - } /** @@ -239,4 +308,52 @@ public class DeclarativeReportGenerator extends BaseReportGenerator return sb.toString(); } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.generator.BaseReportGenerator#checkReportApplicability(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + protected void checkReportApplicability(NodeRef reportedUponNodeRef) throws AlfrescoRuntimeException + { + if (applicableTypes != null && applicableTypes.size() != 0) + { + boolean isTypeApplicable = false; + QName type = nodeService.getType(reportedUponNodeRef); + + for (QName applicableType : applicableTypes) + { + if (dictionaryService.isSubClass(type, applicableType)) + { + isTypeApplicable = true; + break; + } + } + + if (!isTypeApplicable) + { + // throw an exception + throw new AlfrescoRuntimeException("Can't generate report, because the provided reported upon node reference is type " + type.toString() + + " which is not an applicable type for a " + reportType.toString() + " report."); + } + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.generator.BaseReportGenerator#generateReportTemplateContext(org.alfresco.service.cmr.repository.NodeRef) + */ + @SuppressWarnings("unchecked") + @Override + protected Map generateReportTemplateContext(NodeRef reportedUponNodeRef) + { + return Collections.EMPTY_MAP; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.generator.BaseReportGenerator#generateReportMetadata(org.alfresco.service.cmr.repository.NodeRef) + */ + @SuppressWarnings("unchecked") + @Override + protected Map generateReportMetadata(NodeRef reportedUponNodeRef) + { + return Collections.EMPTY_MAP; + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/ReportInfo.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/ReportInfo.java index 9f1d262047..69409be361 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/ReportInfo.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/ReportInfo.java @@ -45,6 +45,14 @@ import org.springframework.extensions.surf.util.ParameterCheck; /** content reader */ private ContentReader reportContent; + /** + * Default constructor. + * + * @param reportType report type + * @param reportName report name + * @param reportProperties report properties + * @param reportContent report content reader + */ public ReportInfo(QName reportType, String reportName, Map reportProperties, ContentReader reportContent) { ParameterCheck.mandatory("reportType", reportType); @@ -57,22 +65,35 @@ import org.springframework.extensions.surf.util.ParameterCheck; this.reportContent = reportContent; } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.Report#getReportType() + */ public QName getReportType() { return reportType; } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.Report#getReportName() + */ @Override public String getReportName() { return reportName; } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.Report#getReportProperties() + */ + @Override public Map getReportProperties() { return reportProperties; } + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.Report#getReportContent() + */ @Override public ContentReader getReportContent() { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferNode.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferNode.java similarity index 88% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferNode.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferNode.java index 624d08376b..69b68ddd77 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferNode.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferNode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.module.org_alfresco_module_rm.report.action; +package org.alfresco.module.org_alfresco_module_rm.report.generator.transfer; import java.io.Serializable; import java.util.Map; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferReportAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferReportGenerator.java similarity index 85% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferReportAction.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferReportGenerator.java index 0fc13819db..0aa90b952f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/TransferReportAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/generator/transfer/TransferReportGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.module.org_alfresco_module_rm.report.action; +package org.alfresco.module.org_alfresco_module_rm.report.generator.transfer; import java.io.Serializable; import java.util.ArrayList; @@ -27,7 +27,9 @@ import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; +import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.report.generator.DeclarativeReportGenerator; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -35,21 +37,33 @@ import org.alfresco.service.namespace.RegexQNamePattern; import org.apache.commons.lang.StringUtils; /** - * Transfer report action - * + * Transfer report generator. + * * @author Tuna Aksoy + * @author Roy Wetherall * @since 2.2 */ -public class TransferReportAction extends BaseReportAction +public class TransferReportGenerator extends DeclarativeReportGenerator { - /** Action name */ - public static final String NAME = "transferReport"; - + /** dispotion service */ + protected DispositionService dispositionService; + + /** + * @param dispositionService disposition service + */ + public void setDispositionService(DispositionService dispositionService) + { + this.dispositionService = dispositionService; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.report.generator.DeclarativeReportGeneratorUnitTest#generateReportTemplateContext(org.alfresco.service.cmr.repository.NodeRef) + */ @Override - protected Map addProperties(NodeRef nodeRef) + protected Map generateReportTemplateContext(NodeRef reportedUponNodeRef) { // Get all 'transferred' nodes - List transferNodes = getTransferNodes(nodeRef); + List transferNodes = getTransferNodes(reportedUponNodeRef); // Get the disposition authority String dispositionAuthority = getDispositionAuthority(transferNodes); @@ -215,4 +229,5 @@ public class TransferReportAction extends BaseReportAction } return dispositionAuthority == null ? StringUtils.EMPTY : dispositionAuthority; } + } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/CustomPropertyEditorRegistrar.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/CustomPropertyEditorRegistrar.java new file mode 100644 index 0000000000..3c2e4e9653 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/CustomPropertyEditorRegistrar.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.util; + +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.springframework.beans.PropertyEditorRegistrar; +import org.springframework.beans.PropertyEditorRegistry; + +/** + * Custom property editor registrar. + * + * @author Roy Wetherall + * @since 2.2 + */ +public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar +{ + /** namespace service */ + private NamespaceService namespaceService; + + /** + * @param namespaceService namespace service + */ + public void setNamespaceService(NamespaceService namespaceService) + { + this.namespaceService = namespaceService; + } + + /** + * @see org.springframework.beans.PropertyEditorRegistrar#registerCustomEditors(org.springframework.beans.PropertyEditorRegistry) + */ + @Override + public void registerCustomEditors(PropertyEditorRegistry registry) + { + // add custom QName editor + registry.registerCustomEditor(QName.class, new QNameTypeEditor(namespaceService)); + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/QNameTypeEditor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/QNameTypeEditor.java new file mode 100644 index 0000000000..679dd7ebad --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/QNameTypeEditor.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.util; + +import java.beans.PropertyEditorSupport; + +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; + +/** + * QName type editor. + * + * @author Roy Wetherall + * @since 2.2 + */ +public class QNameTypeEditor extends PropertyEditorSupport +{ + /** namespace service */ + private NamespaceService namespaceService; + + /** + * @param namespaceService namespace service + */ + public QNameTypeEditor(NamespaceService namespaceService) + { + this.namespaceService = namespaceService; + } + + /** + * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String) + */ + @Override + public void setAsText(String text) throws IllegalArgumentException + { + // convert prefix string to QName + setValue(QName.createQName(text, namespaceService)); + } +} diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/IntegrationTestSuite.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/IntegrationTestSuite.java index 20d246662a..c3cb55c707 100755 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/IntegrationTestSuite.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/IntegrationTestSuite.java @@ -21,6 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration; import org.alfresco.module.org_alfresco_module_rm.test.integration.dod.DoD5015TestSuite; import org.alfresco.module.org_alfresco_module_rm.test.integration.event.EventTestSuite; import org.alfresco.module.org_alfresco_module_rm.test.integration.issue.IssueTestSuite; +import org.alfresco.module.org_alfresco_module_rm.test.integration.report.ReportTestSuite; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @@ -37,7 +38,8 @@ import org.junit.runners.Suite.SuiteClasses; { DoD5015TestSuite.class, IssueTestSuite.class, - EventTestSuite.class + EventTestSuite.class, + ReportTestSuite.class }) public class IntegrationTestSuite { diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/HoldReportTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/HoldReportTest.java new file mode 100644 index 0000000000..2cb6eb3470 --- /dev/null +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/HoldReportTest.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.test.integration.report; + +import java.util.Set; + +import org.alfresco.error.AlfrescoRuntimeException; +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.test.util.BaseRMTestCase; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.springframework.extensions.webscripts.GUID; + +/** + * Hold report integration tests. + *

+ * Relates to: + * - https://issues.alfresco.com/jira/browse/RM-1211 + * + * @author Roy Wetherall + * @since 2.2 + */ +public class HoldReportTest extends BaseRMTestCase implements ReportModel +{ + @Override + protected boolean isRecordTest() + { + return true; + } + + /** + * ensure that 'rmr:holdReport' is in the list of those available + */ + public void testHoldReportTypeAvailable() + { + doBehaviourDrivenTest(new BehaviourDrivenTest() + { + private Set reportTypes; + + public void when() + { + reportTypes = reportService.getReportTypes(); + } + + public void then() + { + assertNotNull(reportTypes); + assertTrue(reportTypes.contains(TYPE_HOLD_REPORT)); + } + }); + } + + /** + * given that the reported upon node is not a hold, ensure that an error is raised when + * the report is generated. + */ + public void testReportedUponNodeIsNotAHold() + { + doBehaviourDrivenTest(new BehaviourDrivenTest(AlfrescoRuntimeException.class) + { + private NodeRef reportedUponNodeRef; + + public void given() + { + reportedUponNodeRef = recordFolderService.createRecordFolder(rmContainer, GUID.generate()); + } + + public void when() + { + reportService.generateReport(TYPE_HOLD_REPORT, reportedUponNodeRef); + } + + public void after() + { + // remove created folder + nodeService.deleteNode(reportedUponNodeRef); + } + }); + } + + /** + * Given a hold that contains items, ensure the report is generated as expected + */ + public void testGenerateHoldReport() + { + doBehaviourDrivenTest(new BehaviourDrivenTest() + { + private static final String HOLD_NAME = "holdName"; + private static final String HOLD_REASON = "holdReason"; + private static final String HOLD_DESCRIPTION = "holdDescription"; + private static final String FOLDER1_NAME = "folder1Name"; + + private NodeRef hold; + private NodeRef folder1; + private Report report; + + public void given() + { + // crate a hold + hold = holdService.createHold(filePlan, HOLD_NAME, HOLD_REASON, HOLD_DESCRIPTION); + + // add some items to the hold + folder1 = recordFolderService.createRecordFolder(rmContainer, FOLDER1_NAME); + holdService.addToHold(hold, folder1); + holdService.addToHold(hold, recordOne); + } + + public void when() + { + report = reportService.generateReport(TYPE_HOLD_REPORT, hold, MimetypeMap.MIMETYPE_HTML); + } + + public void then() + { + assertNotNull(report); + assertEquals(TYPE_HOLD_REPORT, report.getReportType()); + assertTrue(report.getReportProperties().isEmpty()); + + // check the name has been generated correctly + assertNotNull(report.getReportName()); + assertTrue(report.getReportName().contains("Hold Report")); + assertTrue(report.getReportName().contains(HOLD_NAME)); + assertTrue(report.getReportName().contains(".html")); + + // check the content reader + ContentReader reader = report.getReportContent(); + assertNotNull(reader); + assertEquals(MimetypeMap.MIMETYPE_HTML, reader.getMimetype()); + + // check the content + String reportContent = reader.getContentString(); + assertNotNull(reportContent); + assertTrue(reportContent.contains(HOLD_NAME)); + assertTrue(reportContent.contains(HOLD_REASON)); + assertTrue(reportContent.contains(HOLD_DESCRIPTION)); + assertTrue(reportContent.contains(FOLDER1_NAME)); + assertTrue(reportContent.contains("one")); + } + + public void after() + { + holdService.deleteHold(hold); + nodeService.deleteNode(folder1); + } + }); + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/DestructionReportAction.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/ReportTestSuite.java similarity index 53% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/DestructionReportAction.java rename to rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/ReportTestSuite.java index b910a7a036..e32531429b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/report/action/DestructionReportAction.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/report/ReportTestSuite.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2013 Alfresco Software Limited. + * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * @@ -16,28 +16,23 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.module.org_alfresco_module_rm.report.action; +package org.alfresco.module.org_alfresco_module_rm.test.integration.report; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.alfresco.service.cmr.repository.NodeRef; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; /** - * Destruction report action + * Report integration test suite * - * @author Tuna Aksoy + * @author Roy Wetherall * @since 2.2 */ -public class DestructionReportAction extends BaseReportAction +@RunWith(Suite.class) +@SuiteClasses( +{ + HoldReportTest.class +}) +public class ReportTestSuite { - /** Action name */ - public static final String NAME = "destructionReport"; - - @Override - protected Map addProperties(NodeRef nodeRef) - { - return new HashMap(1); - } } 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 8677b98309..32e0e7667f 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 @@ -19,7 +19,6 @@ package org.alfresco.module.org_alfresco_module_rm.test.service; import java.io.Serializable; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -28,12 +27,10 @@ import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction import org.alfresco.module.org_alfresco_module_rm.action.impl.CompleteEventAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction; +import org.alfresco.module.org_alfresco_module_rm.action.impl.FileReportAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.TransferAction; 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.action.DestructionReportAction; -import org.alfresco.module.org_alfresco_module_rm.report.action.TransferNode; -import org.alfresco.module.org_alfresco_module_rm.report.action.TransferReportAction; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils; import org.alfresco.repo.content.MimetypeMap; @@ -84,7 +81,7 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel System.out.println(destructionReport.getReportContent().getContentString()); // Transfer Report - Report transferReport = generateTransfertReport(); + Report transferReport = reportService.generateReport(TYPE_TRANSFER_REPORT, getTransferObject(), MimetypeMap.MIMETYPE_HTML); System.out.println(transferReport.getReportName()); System.out.println(transferReport.getReportContent().getContentString()); @@ -128,22 +125,7 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel { return reportService.generateReport(TYPE_DESTRUCTION_REPORT, rmFolder); } - - /** - * Helper method to generate a transfer report - * - * @return Transfer report - */ - private Report generateTransfertReport() - { - Map properties = new HashMap(2); - ArrayList transferNodes = new ArrayList(1); - String dispositionAuthority = StringUtils.EMPTY; - properties.put("transferNodes", transferNodes); - properties.put("dispositionAuthority", dispositionAuthority); - return reportService.generateReport(TYPE_TRANSFER_REPORT, getTransferObject(), MimetypeMap.MIMETYPE_HTML, properties); - } - + /** * Helper method to file a destruction report * @@ -162,7 +144,7 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel */ private NodeRef fileTransferReport() { - Report transferReport = generateTransfertReport(); + Report transferReport = reportService.generateReport(TYPE_TRANSFER_REPORT, getTransferObject(), MimetypeMap.MIMETYPE_HTML); return reportService.fileReport(filePlan, transferReport); } @@ -181,9 +163,9 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel rmActionService.executeRecordsManagementAction(rmFolder, DestroyAction.NAME); Map fileReportParams = new HashMap(2); - fileReportParams.put(DestructionReportAction.REPORT_TYPE, "rmr:destructionReport"); - fileReportParams.put(DestructionReportAction.DESTINATION, filePlan.toString()); - rmActionService.executeRecordsManagementAction(rmFolder, DestructionReportAction.NAME, fileReportParams); + fileReportParams.put(FileReportAction.REPORT_TYPE, "rmr:destructionReport"); + fileReportParams.put(FileReportAction.DESTINATION, filePlan.toString()); + rmActionService.executeRecordsManagementAction(rmFolder, FileReportAction.NAME, fileReportParams); return null; } }); @@ -198,9 +180,9 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel { // Create transfer report for the transfer object Map params = new HashMap(2); - params.put(TransferReportAction.REPORT_TYPE, "rmr:transferReport"); - params.put(TransferReportAction.DESTINATION, filePlan.toString()); - RecordsManagementActionResult transferReportAction = rmActionService.executeRecordsManagementAction(getTransferObject(), TransferReportAction.NAME, params); + params.put(FileReportAction.REPORT_TYPE, "rmr:transferReport"); + params.put(FileReportAction.DESTINATION, filePlan.toString()); + RecordsManagementActionResult transferReportAction = rmActionService.executeRecordsManagementAction(getTransferObject(), FileReportAction.NAME, params); // Check transfer report result String transferReportName = (String) transferReportAction.getValue(); assertFalse(StringUtils.isBlank(transferReportName)); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java index f63ae08cb1..5f5df891f1 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java @@ -810,49 +810,99 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase } } + /** + * Execute behaviour driven test. + * + * @param test + */ protected void doBehaviourDrivenTest(BehaviourDrivenTest test) { test.run(); } + /** + * Behaviour driven test. + * + * @author Roy Wetherall + * @since 2.2 + */ protected abstract class BehaviourDrivenTest { - public abstract void given(); + protected Class expectedException; - public abstract void when(); + public BehaviourDrivenTest() + { + } - public abstract void then(); + public BehaviourDrivenTest(Class expectedException) + { + this.expectedException = expectedException; + } + + public void given() { /** empty implementation */ } + + public void when() { /** empty implementation */ } + + public void then() { /** empty implementation */ } + + public void after() { /** empty implementation */ } public void run() { - doTestInTransaction(new VoidTest() - { - @Override - public void runImpl() throws Exception - { - given(); - } - }); - - doTestInTransaction(new VoidTest() + try { + doTestInTransaction(new VoidTest() + { + @Override + public void runImpl() throws Exception + { + given(); + } + }); - @Override - public void runImpl() throws Exception + if (expectedException == null) { - when(); + doTestInTransaction(new VoidTest() + { + @Override + public void runImpl() throws Exception + { + when(); + } + }); + + doTestInTransaction(new VoidTest() + { + @Override + public void runImpl() throws Exception + { + then(); + } + }); } - }); - - doTestInTransaction(new VoidTest() - { - - @Override - public void runImpl() throws Exception + else { - then(); + doTestInTransaction(new FailureTest(expectedException) + { + @Override + public void run() throws Exception + { + when(); + } + }); } - }); + } + finally + { + doTestInTransaction(new VoidTest() + { + @Override + public void runImpl() throws Exception + { + after(); + } + }); + } } } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportActionUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportActionUnitTest.java new file mode 100644 index 0000000000..5042afb20b --- /dev/null +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileReportActionUnitTest.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.action.impl; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.module.org_alfresco_module_rm.report.Report; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +/** + * Unit test for file report action. + * + * @author Roy Wetherall + * @since 2.2 + */ +public class FileReportActionUnitTest extends BaseUnitTest +{ + /** report name */ + private static final String REPORT_NAME = "testReportName"; + + /** actioned upon node reference */ + private NodeRef actionedUponNodeRef; + + /** mocked action */ + private @Mock Action mockedAction; + + /** mocked report */ + private @Mock Report mockedReport; + + /** file report action */ + private @InjectMocks FileReportAction fileReportAction; + + /** + * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest#before() + */ + @Override + public void before() + { + super.before(); + + // actioned upon node reference + actionedUponNodeRef = generateRecord(); + + // mocked action + fileReportAction.setAuditable(false); + } + + /** + * Helper to mock an action parameter value + */ + private void mockActionParameterValue(String name, String value) + { + doReturn(value).when(mockedAction).getParameterValue(name); + } + + /** + * given the destination is not set, ensure that an exception is thrown + */ + @Test + public void destinationNotSet() + { + // == given == + + // set action parameter values + mockActionParameterValue(FileReportAction.MIMETYPE, MimetypeMap.MIMETYPE_HTML); + mockActionParameterValue(FileReportAction.REPORT_TYPE, "rma:destructionReport"); + + // expected exception + exception.expect(AlfrescoRuntimeException.class); + + // == when == + + // execute action + fileReportAction.execute(mockedAction, actionedUponNodeRef); + + // == then == + verifyZeroInteractions(mockedReportService, mockedNodeService); + } + + /** + * given no report type set, ensure that an exception is thrown + */ + @Test + public void reportTypeNotSet() + { + // == given == + + // set action parameter values + mockActionParameterValue(FileReportAction.MIMETYPE, MimetypeMap.MIMETYPE_HTML); + mockActionParameterValue(FileReportAction.DESTINATION, generateNodeRef().toString()); + + // expected exception + exception.expect(AlfrescoRuntimeException.class); + + // == when == + + // execute action + fileReportAction.execute(mockedAction, actionedUponNodeRef); + + // == then == + verifyZeroInteractions(mockedReportService, mockedNodeService); + } + + /** + * given the file report action is executed, ensure the service interactions and returned result + * are correct. + */ + @Test + public void fileReport() + { + // == given == + + // data + NodeRef destination = generateNodeRef(); + NodeRef filedReport = generateNodeRef(); + String reportType = "rma:destructionReport"; + QName reportTypeQName = QName.createQName(RM_URI, "destructionReport"); + String mimetype = MimetypeMap.MIMETYPE_HTML; + + // set action parameter values + mockActionParameterValue(FileReportAction.MIMETYPE, mimetype); + mockActionParameterValue(FileReportAction.DESTINATION, destination.toString()); + mockActionParameterValue(FileReportAction.REPORT_TYPE, reportType); + + // setup service interactions + doReturn(mockedReport).when(mockedReportService).generateReport(reportTypeQName, actionedUponNodeRef, mimetype); + doReturn(filedReport).when(mockedReportService).fileReport(destination, mockedReport); + doReturn(REPORT_NAME).when(mockedNodeService).getProperty(filedReport, ContentModel.PROP_NAME); + + // == when == + + // execute action + fileReportAction.execute(mockedAction, actionedUponNodeRef); + + // == then == + + // verify interactions + verify(mockedReportService, times(1)).generateReport(reportTypeQName, actionedUponNodeRef, mimetype); + verify(mockedReportService, times(1)).fileReport(destination, mockedReport); + verify(mockedNodeService, times(1)).getProperty(filedReport, ContentModel.PROP_NAME); + verify(mockedAction, times(1)).setParameterValue(ActionExecuterAbstractBase.PARAM_RESULT, REPORT_NAME); + } + + /** + * given the file report action is executed with no mimetype set, ensure that a report is generated + * with the default mimetype. + */ + @Test + public void fileReportDefaultMimetype() + { + // == given == + + // data + NodeRef destination = generateNodeRef(); + NodeRef filedReport = generateNodeRef(); + String reportType = "rma:destructionReport"; + QName reportTypeQName = QName.createQName(RM_URI, "destructionReport"); + String mimetype = MimetypeMap.MIMETYPE_HTML; + + // set action parameter values + mockActionParameterValue(FileReportAction.DESTINATION, destination.toString()); + mockActionParameterValue(FileReportAction.REPORT_TYPE, reportType); + + // setup service interactions + doReturn(mockedReport).when(mockedReportService).generateReport(reportTypeQName, actionedUponNodeRef, mimetype); + doReturn(filedReport).when(mockedReportService).fileReport(destination, mockedReport); + doReturn(REPORT_NAME).when(mockedNodeService).getProperty(filedReport, ContentModel.PROP_NAME); + + // == when == + + // execute action + fileReportAction.execute(mockedAction, actionedUponNodeRef); + + // == then == + + // verify interactions + verify(mockedReportService, times(1)).generateReport(reportTypeQName, actionedUponNodeRef, mimetype); + verify(mockedReportService, times(1)).fileReport(destination, mockedReport); + verify(mockedNodeService, times(1)).getProperty(filedReport, ContentModel.PROP_NAME); + verify(mockedAction, times(1)).setParameterValue(ActionExecuterAbstractBase.PARAM_RESULT, REPORT_NAME); + + } +} diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java index e16ff323bd..de6593468a 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java @@ -18,6 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.test; +import org.alfresco.module.org_alfresco_module_rm.action.impl.FileReportActionUnitTest; import org.alfresco.module.org_alfresco_module_rm.capability.declarative.condition.HoldCapabilityConditionUnitTest; import org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementTypeFormFilterUnitTest; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServiceImplUnitTest; @@ -62,7 +63,10 @@ import org.junit.runners.Suite.SuiteClasses; HoldPutUnitTest.class, // capability conditions - HoldCapabilityConditionUnitTest.class + HoldCapabilityConditionUnitTest.class, + + // action implementations + FileReportActionUnitTest.class }) public class AllUnitTestSuite { diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java index 9389e5b40f..e8655e93ec 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java @@ -37,6 +37,7 @@ import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; +import org.alfresco.module.org_alfresco_module_rm.report.ReportService; import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -82,24 +83,25 @@ public class BaseUnitTest implements RecordsManagementModel protected NodeRef record; /** core service mocks */ - @Mock(name="nodeService") protected NodeService mockedNodeService; - @Mock(name="dictionaryService") protected DictionaryService mockedDictionaryService; - @Mock(name="namespaceService") protected NamespaceService mockedNamespaceService; - @Mock(name="identifierService") protected IdentifierService mockedIdentifierService; - @Mock(name="permissionService") protected PermissionService mockedPermissionService; - @Mock(name="ownableService") protected OwnableService mockedOwnableService; - @Mock(name="searchService") protected SearchService mockedSearchService; - @Mock(name="retryingTransactionHelper") protected RetryingTransactionHelper mockedRetryingTransactionHelper; + @Mock(name="nodeService") protected NodeService mockedNodeService; + @Mock(name="dictionaryService") protected DictionaryService mockedDictionaryService; + @Mock(name="namespaceService") protected NamespaceService mockedNamespaceService; + @Mock(name="identifierService") protected IdentifierService mockedIdentifierService; + @Mock(name="permissionService") protected PermissionService mockedPermissionService; + @Mock(name="ownableService") protected OwnableService mockedOwnableService; + @Mock(name="searchService") protected SearchService mockedSearchService; + @Mock(name="retryingTransactionHelper") protected RetryingTransactionHelper mockedRetryingTransactionHelper; /** rm service mocks */ - @Mock(name="filePlanService") protected FilePlanService mockedFilePlanService; - @Mock(name="recordFolderService") protected RecordFolderService mockedRecordFolderService; - @Mock(name="recordService") protected RecordService mockedRecordService; - @Mock(name="holdService") protected HoldService mockedHoldService; + @Mock(name="filePlanService") protected FilePlanService mockedFilePlanService; + @Mock(name="recordFolderService") protected RecordFolderService mockedRecordFolderService; + @Mock(name="recordService") protected RecordService mockedRecordService; + @Mock(name="holdService") protected HoldService mockedHoldService; @Mock(name="recordsManagementActionService") protected RecordsManagementActionService mockedRecordsManagementActionService; + @Mock(name="reportService") protected ReportService mockedReportService; /** application context mock */ - @Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext; + @Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext; /** expected exception rule */ @Rule