From 389c775945c5b10ac0fb17ed9819e118dcb6cac0 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Wed, 17 Oct 2012 05:00:56 +0000 Subject: [PATCH] RM Prototype: * stoppped hidden RM actions from appearing in UI * added file record action (TODO run-as RecordsManager and make applicable via aspect) * added hook points to allow customisation of Rule UI and customised for file record action git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/DEV/INPLACE@42700 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org_alfresco_module_rm/action-context.xml | 12 ++++- .../rm-capabilities-fileplan-context.xml | 20 ++++++- .../rm-action-context.xml | 9 ++-- .../rm-service-context.xml | 1 + .../FilePlanComponentKind.java | 3 +- .../RecordsManagementServiceImpl.java | 4 ++ .../action/RMActionExecuterAbstractBase.java | 11 ++++ .../action/dm/FileRecordAction.java | 54 +++++++++++++++++++ .../capability/RMActionProxyFactoryBean.java | 6 ++- .../jscript/app/JSONConversionComponent.java | 6 ++- .../record/RecordService.java | 4 +- .../record/RecordServiceImpl.java | 13 +++-- 12 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/FileRecordAction.java diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/action-context.xml index aeaf6af44d..dfc411ea07 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/action-context.xml @@ -22,6 +22,16 @@ {http://www.alfresco.org/model/content/1.0}content - + + + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-fileplan-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-fileplan-context.xml index 95ad0bf90e..898b546ea9 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-fileplan-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-fileplan-context.xml @@ -12,13 +12,13 @@ - + + - @@ -62,5 +62,21 @@ + + + + + + + UNFILED_RECORD_CONTAINER + + + + + + + + \ 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 391f3c6711..14740569ff 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 @@ -33,7 +33,10 @@ - + @@ -64,7 +67,7 @@ - + @@ -94,7 +97,7 @@ - + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index f316f9938c..916c601ed6 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -849,6 +849,7 @@ org.alfresco.module.org_alfresco_module_rm.record.RecordService.getRecordMetaDataAspects=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.record.RecordService.isDeclared=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.record.RecordService.createRecordFromDocument=RM_ALLOW + org.alfresco.module.org_alfresco_module_rm.record.RecordService.getUnfiledRecordContainer=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.record.RecordService.*=RM_DENY ]]> diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/FilePlanComponentKind.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/FilePlanComponentKind.java index 3f7da216df..e8b5b94324 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/FilePlanComponentKind.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/FilePlanComponentKind.java @@ -35,5 +35,6 @@ public enum FilePlanComponentKind RECORD, TRANSFER, HOLD, - DISPOSITION_SCHEDULE; + DISPOSITION_SCHEDULE, + UNFILED_RECORD_CONTAINER; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java index a2411a0c82..49fa37e409 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java @@ -526,6 +526,10 @@ public class RecordsManagementServiceImpl implements RecordsManagementService, { result = FilePlanComponentKind.DISPOSITION_SCHEDULE; } + else if (instanceOf(nodeRef, TYPE_UNFILED_RECORD_CONTAINER) == true) + { + result = FilePlanComponentKind.UNFILED_RECORD_CONTAINER; + } } return result; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java index c76ca0a65e..239250e7cd 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java @@ -282,12 +282,23 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra PropertyCheck.mandatory(this, "recordsManagementService", recordsManagementService); PropertyCheck.mandatory(this, "recordsManagementAdminService", recordsManagementAdminService); PropertyCheck.mandatory(this, "recordsManagementEventService", recordsManagementEventService); + for(AbstractCapability capability : capabilities) { capability.registerAction(this); } } + /** + * Indicates whether this records management action is public or not + * + * @return boolean true if public, false otherwise + */ + public boolean isPublicAction() + { + return publicAction; + } + /** * @see org.alfresco.repo.action.CommonResourceAbstractBase#setBeanName(java.lang.String) */ diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/FileRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/FileRecordAction.java new file mode 100644 index 0000000000..5290b7d7b6 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/FileRecordAction.java @@ -0,0 +1,54 @@ +package org.alfresco.module.org_alfresco_module_rm.action.dm; + +import java.util.List; + +import org.alfresco.repo.action.ParameterDefinitionImpl; +import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.ParameterDefinition; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.cmr.model.FileFolderService; +import org.alfresco.service.cmr.model.FileNotFoundException; +import org.alfresco.service.cmr.repository.NodeRef; + +public class FileRecordAction extends ActionExecuterAbstractBase +{ + public static final String NAME = "file-record"; + public static final String PARAM_DESTINATION_RECORD_FOLDER = "destination-record-folder"; + + /** + * FileFolder service + */ + private FileFolderService fileFolderService; + + public void setFileFolderService(FileFolderService fileFolderService) + { + this.fileFolderService = fileFolderService; + } + + @Override + protected void addParameterDefinitions(List paramList) + { + paramList.add(new ParameterDefinitionImpl( + PARAM_DESTINATION_RECORD_FOLDER, + DataTypeDefinition.NODE_REF, + true, + getParamDisplayLabel(PARAM_DESTINATION_RECORD_FOLDER))); + } + + /** + * @see org.alfresco.repo.action.executer.ActionExecuter#execute(org.alfresco.repo.ref.NodeRef, org.alfresco.repo.ref.NodeRef) + */ + public void executeImpl(Action ruleAction, NodeRef actionedUponNodeRef) + { + NodeRef destinationParent = (NodeRef)ruleAction.getParameterValue(PARAM_DESTINATION_RECORD_FOLDER); + try + { + fileFolderService.move(actionedUponNodeRef, destinationParent, null); + } + catch (FileNotFoundException e) + { + // Do nothing + } + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMActionProxyFactoryBean.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMActionProxyFactoryBean.java index 5470a46f85..ab3b1f5a9a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMActionProxyFactoryBean.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMActionProxyFactoryBean.java @@ -18,6 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.capability; +import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase; import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction; import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; import org.alfresco.repo.action.RuntimeActionService; @@ -59,7 +60,10 @@ public class RMActionProxyFactoryBean extends ProxyFactoryBean { public Void doWork() throws Exception { - runtimeActionService.registerActionExecuter((ActionExecuter) getObject()); + if (((RMActionExecuterAbstractBase)getTargetSource().getTarget()).isPublicAction() == true) + { + runtimeActionService.registerActionExecuter((ActionExecuter) getObject()); + } recordsManagementActionService.register((RecordsManagementAction) getObject()); return null; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java index 94b9e1bccf..fce108024a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java @@ -140,7 +140,11 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC rmNodeValues.put("kind", kind.toString()); // File plan node reference - rmNodeValues.put("filePlan", recordsManagementService.getFilePlan(nodeRef).toString()); + NodeRef filePlan = recordsManagementService.getFilePlan(nodeRef); + rmNodeValues.put("filePlan", filePlan.toString()); + + // Unfiled container node reference + rmNodeValues.put("unfiledRecordContainer", recordService.getUnfiledRecordContainer(filePlan).toString()); // Set the indicators array setIndicators(rmNodeValues, nodeRef); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java index f885c18921..037dd56ae9 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java @@ -64,5 +64,7 @@ public interface RecordService // TODO NodeRef createAndFileRecord(NodeRef recordFolder, NodeRef document); - // TODO void fileRecord(NodeRef recordFolder, NodeRef record); + // TODO void fileRecord(NodeRef recordFolder, NodeRef record); + + public NodeRef getUnfiledRecordContainer(NodeRef filePlan); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 00c0aa89fa..dc53ecf1c9 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -47,18 +47,25 @@ import org.alfresco.service.namespace.RegexQNamePattern; */ public class RecordServiceImpl implements RecordService, RecordsManagementModel { + /** Node service **/ private NodeService nodeService; + /** Indentiy service */ private IdentifierService identifierService; + /** Records management service */ private RecordsManagementService recordsManagementService; + /** Dictionary service */ private DictionaryService dictionaryService; + /** Policy component */ private PolicyComponent policyComponent; + /** Permission service */ private PermissionService permissionService; + /** Records management security service */ private RecordsManagementSecurityService recordsManagementSecurityService; /** List of available record meta-data aspects */ @@ -182,7 +189,7 @@ public class RecordServiceImpl implements RecordService, RecordsManagementModel ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(document); /// get the new record container for the file plan - NodeRef newRecordContainer = getNewRecordContainer(filePlan); + NodeRef newRecordContainer = getUnfiledRecordContainer(filePlan); if (newRecordContainer == null) { throw new AlfrescoRuntimeException("Unable to create record, because new record container could not be found."); @@ -219,12 +226,12 @@ public class RecordServiceImpl implements RecordService, RecordsManagementModel * @param filePlan * @return */ - private NodeRef getNewRecordContainer(NodeRef filePlan) + public NodeRef getUnfiledRecordContainer(NodeRef filePlan) { List assocs = nodeService.getChildAssocs(filePlan, ASSOC_UNFILED_RECORDS, RegexQNamePattern.MATCH_ALL); if (assocs.size() != 1) { - throw new AlfrescoRuntimeException("Error getting the new record container, because the container cannot be indentified."); + throw new AlfrescoRuntimeException("Error getting the unfiled container, because the container cannot be indentified."); } return assocs.get(0).getChildRef(); }