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
new file mode 100644
index 0000000000..cbdd79e0ec
--- /dev/null
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/action-context.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+ alfresco.module.org_alfresco_module_rm.messages.actions
+
+
+
+
+
+
+
+
+
+
+
+ {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-audit-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml
index 7b6fe1e98f..e9a2abde11 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml
@@ -4,7 +4,6 @@
-
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-group-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-group-context.xml
index 407699cbff..224da9c985 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-group-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-group-context.xml
@@ -6,6 +6,7 @@
+
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
new file mode 100644
index 0000000000..ce4c5321a9
--- /dev/null
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties
@@ -0,0 +1,53 @@
+rm.action.not-defined=The records management action {0} has not been defined.
+rm.action.no-implicit-noderef=Unable to execute the records management action, because the action {0} implementation does not provide an implicit nodeRef.
+rm.action.record-not-declared=Unable to execute disposition action {0}, because the record is not declared. (actionedUponNodeRef={1})
+rm.action.expected-record-level=Unable to execute disposition action {0}, because disposition is expected at the record level and this node is not a record. (actionedUponNodeRef={1})
+rm.action.not-all-records-declared=Unable to execute disposition action {0}, because not all the records in the record are declared. (actionedUponNodeRef={1})
+rm.action.not-eligible=Unable to execute disposition action {0}, because the next disposition action on the record or record folder is not eligible. (actionedUponNodeRef={1})
+rm.action.no-disposition-instructions=Unable to find disposition instructions for node. Can not execute disposition action {0}. (nodeRef={1})
+rm.action.no-disposition-lisfecycle-set=Unable to execute disposition action {0}, because node does not have a disposition life-cycle set. (nodeRef={1})
+rm.action.next-disp-not-set=Unable to execute disposition action {0}, because the next disposition action is not set. (nodeRef={1})
+rm.action.not-next-disp=Unable to execute disposition action {0}, because this is not the next disposition action for this record or record folder. (nodeRef={1})
+rm.action.not-record-folder=Unable to execute disposition action {0}, because disposition is expected at the record folder level and this node is not a record folder. (nodeRef={1})
+rm.action.actioned-upon-not-record=Can not execute action {0}, because the actioned upon node is not a Record. (filePlanComponet={1})
+rm.action.custom-aspect-not-recognised=The custom type can not be applied, because is it not recognised. (customAspect={0})
+rm.action.close-record-folder-not-folder=Unable to close record folder, because the node is not a record folder. (nodeRef={0})
+rm.action.event-no-disp-lc=The event {0} can not be completed, because it is not defined on the disposition lifecycle.
+rm.action.undeclared-only-records=Only records can be undeclared. (nodeRef={0})
+rm.action.no-declare-mand-prop=Can not declare record, because not all the records mandatory properties have been set.
+rm.action.ghosted-prop-update=The content properties of a previously destroyed record can not be updated.
+rm.action.valid-date-disp-asof=A valid date must be specified when setting the disposition action as of date.
+rm.action.disp-asof-lifecycle-applied=It is invalid to edit the disposition as of date of a record or record folder which has a lifecycle applied.
+rm.action.hold-edit-reason-none=Can not edit hold reason, because no reason has been given.
+rm.action.hold-edit-type=Can not edit hold reason, because actioned upon node is not of type {0}. (nodeRef={1})
+rm.action.specify-avlid-date=Must specify a valid date when setting the review as of date.
+rm.action.review-details-only=Can only edit the review details of vital records.
+rm.action.freeze-no-reason=Can not freeze a record without a reason.
+rm.action.freeze-only-records-folders=Can only freeze records or record folders.
+rm.action.no-open-record-folder=Unable to open record folder, because node is not a record folder. (actionedUponNodeRef={0})
+rm.action.not-hold-type=Can not relinquish hold, because node is not of type {0}. (actionedUponNodeRef={1})
+rm.action.no-read-mime-message=Unable to read mime message, because {0}.
+rm.action.email-declared=Can not split email, because record has already been declared. (actionedUponNodeRef={0})
+rm.action.email-not-record=Can no split email, because node is not a record. (actionedUponNodeRef={0})
+rm.action.email-create-child-assoc=Unable to create custom child association.
+rm.action.node-already-transfer=Node is already being transfered.
+rm.action.node-not-transfer=Node is not a transfer object.
+rm.action.undo-not-last=Can not undo cut off, because last disposition action was not cut off.
+rm.action.records_only_undeclared=Only records can be undeclared.
+rm.action.event-not-undone=The event {0} can not be undone, because it is not defined on the disposition lifecycle.
+#
+# i18n for Rule Actions
+#
+# File record
+file-record.title=File record
+# FIXME!!!
+#file-record.description=The rule is applied to all items that...
+#file-record.destination-record-folder.display-label=File record
+# Create record
+create-record.title=Create record
+# FIXME!!!
+#create-record.description=The rule is applied to all items that...
+# Declare record
+declare-record.title=Declare record
+# FIXME!!!
+#declare-record.description=The rule is applied to all items that...
\ No newline at end of file
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 1feccfa8d6..bc66c31842 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
@@ -46,10 +46,13 @@
+
+
+
+
+
+
@@ -137,6 +143,7 @@
+
@@ -223,26 +230,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
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 2c45288f94..2be23cf20e 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
@@ -34,7 +34,10 @@
-
+
@@ -65,7 +68,7 @@
-
+
@@ -95,7 +98,7 @@
-
+
@@ -766,5 +769,6 @@
+
\ No newline at end of file
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-actions.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-actions.properties
index 47a031717d..22ff6e9457 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-actions.properties
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-actions.properties
@@ -86,3 +86,9 @@ editDispositionActionAsOfDate.description=Edit Disposition Action As Of Date
createDispositionSchedule.title=Create Disposition Schedule
createDispositionSchedule.description=Create Disposition Schedule
+
+file-record.title=File Record
+file-record.description=File a record into the file plan.
+
+create-record.title=Create A Record
+create-record.description=Create a record from a document.
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
index a882c2d8d1..337668a427 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
@@ -39,20 +39,20 @@
@@ -60,7 +60,7 @@
@@ -68,14 +68,14 @@
@@ -83,7 +83,7 @@
@@ -100,5 +100,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-public-services-security-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-public-services-security-context.xml
index 5c3e60b334..2359f12376 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-public-services-security-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-public-services-security-context.xml
@@ -48,6 +48,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 a6d9d1fef9..8c7d307a1c 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
@@ -915,7 +915,7 @@
-
+
+
@@ -14,6 +15,7 @@
abstract="true">
+
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
index a403d826ef..d82e9ef861 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
@@ -2,380 +2,485 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-filters.lib.js b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-filters.lib.js
index 25a0234d47..fa31ed974e 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-filters.lib.js
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-filters.lib.js
@@ -179,6 +179,13 @@ Filters.getFilterParams = function RecordsManagementFilter_getFilterParams(filte
filterParams.query = "+PARENT:\"" + filterData + "\"";
}
break;
+
+ case "unfiledRecords":
+ filterParams.variablePath = false;
+ filterQuery = "+PATH:\"" + parsedArgs.pathNode.qnamePath + "/rma:Unfiled_x0020_Records/*\"";
+ filterParams.query = filterQuery + filterQueryDefaults;
+
+ break;
default:
filterParams.variablePath = false;
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/rm-treenode.get.js b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/rm-treenode.get.js
index 09c27856d2..8dd5e01d78 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/rm-treenode.get.js
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/rm-treenode.get.js
@@ -120,7 +120,7 @@ function itemIsAllowed(item)
var typeShort = String(item.typeShort);
// Don't show Hold and Transfer top-level containers
- if (typeShort == "rma:hold" || typeShort == "rma:transfer")
+ if (typeShort == "rma:hold" || typeShort == "rma:transfer" || typeShort == "rma:unfiledRecordContainer")
{
return false;
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java
index 9c8e94ce8d..20714b8d54 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java
@@ -71,15 +71,14 @@ public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegis
{
return (RecordsManagementService)getService(RECORDS_MANAGEMENT_SERVICE);
}
-
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordService()
- */
- @Override
- public RecordService getRecordService()
- {
- return (RecordService)getService(RECORD_SERVICE);
- }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordService()
+ */
+ public RecordService getRecordService()
+ {
+ return (RecordService)getService(RECORD_SERVICE);
+ }
/**
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService()
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 5b274609eb..3db77a7800 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
@@ -101,6 +101,9 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
/** Records management service */
protected RecordsManagementService recordsManagementService;
+ /** Record service */
+ protected RecordService recordService;
+
/** Disposition service */
protected DispositionService dispositionService;
@@ -119,9 +122,6 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
/** Freeze Service */
protected FreezeService freezeService;
- /** Record Service */
- protected RecordService recordService;
-
protected LinkedList capabilities = new LinkedList();;
/** Default constructor */
@@ -301,12 +301,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/RMDispositionActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDispositionActionExecuterAbstractBase.java
index 72bd5a7861..228d0e6f84 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDispositionActionExecuterAbstractBase.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDispositionActionExecuterAbstractBase.java
@@ -100,7 +100,7 @@ public abstract class RMDispositionActionExecuterAbstractBase extends RMActionEx
if (this.recordsManagementService.isRecord(actionedUponNodeRef) == true)
{
// Can only execute disposition action on record if declared
- if (this.recordsManagementService.isRecordDeclared(actionedUponNodeRef) == true)
+ if (recordService.isDeclared(actionedUponNodeRef) == true)
{
// Indicate that the disposition action is underway
this.nodeService.setProperty(nextDispositionActionNodeRef, PROP_DISPOSITION_ACTION_STARTED_AT, new Date());
@@ -315,7 +315,7 @@ public abstract class RMDispositionActionExecuterAbstractBase extends RMActionEx
if (this.recordsManagementService.isRecord(filePlanComponent) == true)
{
// Can only execute disposition action on record if declared
- if (this.recordsManagementService.isRecordDeclared(filePlanComponent) == true)
+ if (recordService.isDeclared(filePlanComponent) == true)
{
return true;
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java
new file mode 100644
index 0000000000..c0598c8feb
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java
@@ -0,0 +1,128 @@
+/*
+ * 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.action.dm;
+
+import java.util.List;
+
+import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
+import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.action.ParameterDefinition;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+
+/**
+ * Creates a new record from an existing content object.
+ *
+ * Note: This is a 'normal' dm action, rather than a records management action.
+ *
+ * @author Roy Wetherall
+ */
+public class CreateRecordAction extends ActionExecuterAbstractBase
+ implements RecordsManagementModel
+{
+ /** Action name */
+ public static final String NAME = "create-record";
+
+ /** Records management service */
+ private RecordsManagementService recordsManagementService;
+
+ /** Record service */
+ private RecordService recordService;
+
+ /** Node service */
+ private NodeService nodeService;
+
+ /**
+ * @param recordsManagementService records management service
+ */
+ public void setRecordsManagementService(RecordsManagementService recordsManagementService)
+ {
+ this.recordsManagementService = recordsManagementService;
+ }
+
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
+ /**
+ * @param nodeService node service
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ /**
+ * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
+ */
+ @Override
+ protected void executeImpl(Action action, final NodeRef actionedUponNodeRef)
+ {
+ // skip everything if the actioned upon node reference is already a record
+ if (nodeService.hasAspect(actionedUponNodeRef, ASPECT_RECORD) == false)
+ {
+ // TODO we should use the file plan passed as a parameter
+ // grab the file plan
+ List filePlans = recordsManagementService.getFilePlans();
+ if (filePlans.size() == 1)
+ {
+ // TODO parameterise the action with the file plan
+ final NodeRef filePlan = filePlans.get(0);
+
+ // run record creation as system
+ AuthenticationUtil.runAsSystem(new RunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ // create record from existing document
+ recordService.createRecordFromDocument(filePlan, actionedUponNodeRef);
+
+ return null;
+ }
+ });
+ }
+ else
+ {
+ throw new AlfrescoRuntimeException("Unable to find file plan.");
+ }
+ }
+ }
+
+ /**
+ * @see org.alfresco.repo.action.ParameterizedItemAbstractBase#addParameterDefinitions(java.util.List)
+ */
+ @Override
+ protected void addParameterDefinitions(List params)
+ {
+ // TODO eventually we will need to pass in the file plan as a parameter
+ // TODO .. or the RM site
+ }
+
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/DeclareRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/DeclareRecordAction.java
new file mode 100644
index 0000000000..5af2af8854
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/DeclareRecordAction.java
@@ -0,0 +1,219 @@
+package org.alfresco.module.org_alfresco_module_rm.action.dm;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
+import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.action.ParameterDefinition;
+import org.alfresco.service.cmr.dictionary.AspectDefinition;
+import org.alfresco.service.cmr.dictionary.DictionaryService;
+import org.alfresco.service.cmr.dictionary.PropertyDefinition;
+import org.alfresco.service.cmr.dictionary.TypeDefinition;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.security.OwnableService;
+import org.alfresco.service.namespace.QName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.extensions.surf.util.I18NUtil;
+
+public class DeclareRecordAction extends ActionExecuterAbstractBase implements RecordsManagementModel
+{
+ /** I18N */
+ private static final String MSG_UNDECLARED_ONLY_RECORDS = "rm.action.undeclared-only-records";
+ private static final String MSG_NO_DECLARE_MAND_PROP = "rm.action.no-declare-mand-prop";
+
+ /** Logger */
+ private static Log logger = LogFactory.getLog(DeclareRecordAction.class);
+
+ /** Record service */
+ private RecordService recordService;
+
+ /** Record management service */
+ private RecordsManagementService recordsManagementService;
+
+ /** Node service */
+ private NodeService nodeService;
+
+ /** Ownable service **/
+ private OwnableService ownableService;
+
+ /** Dictionary service */
+ private DictionaryService dictionaryService;
+
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
+ /**
+ * @param recordsManagementService records management service
+ */
+ public void setRecordsManagementService(
+ RecordsManagementService recordsManagementService)
+ {
+ this.recordsManagementService = recordsManagementService;
+ }
+
+ /**
+ * @param nodeService node service
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ /**
+ * @param ownableSerice ownable serice
+ */
+ public void setOwnableService(OwnableService ownableService)
+ {
+ this.ownableService = ownableService;
+ }
+
+ /**
+ * @param dictionaryService dictionary service
+ */
+ public void setDictionaryService(DictionaryService dictionaryService)
+ {
+ this.dictionaryService = dictionaryService;
+ }
+
+ @Override
+ protected void executeImpl(Action action, final NodeRef actionedUponNodeRef)
+ {
+ if (recordService.isRecord(actionedUponNodeRef) == true)
+ {
+ if (recordService.isDeclared(actionedUponNodeRef) == false)
+ {
+ List missingProperties = new ArrayList(5);
+ // Aspect not already defined - check mandatory properties then add
+ if (mandatoryPropertiesSet(actionedUponNodeRef, missingProperties) == true)
+ {
+ // Add the declared aspect
+ Map declaredProps = new HashMap(2);
+ declaredProps.put(PROP_DECLARED_AT, new Date());
+ declaredProps.put(PROP_DECLARED_BY, AuthenticationUtil.getRunAsUser());
+ nodeService.addAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD, declaredProps);
+
+ // remove all owner related rights
+ ownableService.setOwner(actionedUponNodeRef, OwnableService.NO_OWNER);
+ }
+ else
+ {
+ throw new AlfrescoRuntimeException(buildMissingPropertiesErrorString(missingProperties));
+ }
+ }
+ }
+ else
+ {
+ throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_UNDECLARED_ONLY_RECORDS, actionedUponNodeRef.toString()));
+ }
+ }
+
+ private String buildMissingPropertiesErrorString(List missingProperties)
+ {
+ StringBuilder builder = new StringBuilder(255);
+ builder.append(I18NUtil.getMessage(MSG_NO_DECLARE_MAND_PROP));
+ builder.append(" ");
+ for (String missingProperty : missingProperties)
+ {
+ builder.append(missingProperty)
+ .append(", ");
+ }
+ return builder.toString();
+ }
+
+ /**
+ * Helper method to check whether all the mandatory properties of the node have been set
+ *
+ * @param nodeRef
+ * node reference
+ * @return boolean true if all mandatory properties are set, false otherwise
+ */
+ private boolean mandatoryPropertiesSet(NodeRef nodeRef, List missingProperties)
+ {
+ boolean result = true;
+
+ Map nodeRefProps = nodeService.getProperties(nodeRef);
+
+ QName nodeRefType = nodeService.getType(nodeRef);
+
+ TypeDefinition typeDef = dictionaryService.getType(nodeRefType);
+ for (PropertyDefinition propDef : typeDef.getProperties().values())
+ {
+ if (propDef.isMandatory() == true)
+ {
+ if (nodeRefProps.get(propDef.getName()) == null)
+ {
+ logMissingProperty(propDef, missingProperties);
+
+ result = false;
+ break;
+ }
+ }
+ }
+
+ if (result != false)
+ {
+ Set aspects = this.nodeService.getAspects(nodeRef);
+ for (QName aspect : aspects)
+ {
+ AspectDefinition aspectDef = dictionaryService.getAspect(aspect);
+ for (PropertyDefinition propDef : aspectDef.getProperties().values())
+ {
+ if (propDef.isMandatory() == true)
+ {
+ if (nodeRefProps.get(propDef.getName()) == null)
+ {
+ logMissingProperty(propDef, missingProperties);
+
+ result = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Log information about missing properties.
+ *
+ * @param propDef property definition
+ * @param missingProperties missing properties
+ */
+ private void logMissingProperty(PropertyDefinition propDef, List missingProperties)
+ {
+ if (logger.isWarnEnabled())
+ {
+ StringBuilder msg = new StringBuilder();
+ msg.append("Mandatory property missing: ").append(propDef.getName());
+ logger.warn(msg.toString());
+ }
+ missingProperties.add(propDef.getName().toString());
+ }
+
+ @Override
+ protected void addParameterDefinitions(List paramList)
+ {
+ // No parameters
+ }
+
+}
\ No newline at end of file
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..62c9242f15
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/FileRecordAction.java
@@ -0,0 +1,70 @@
+package org.alfresco.module.org_alfresco_module_rm.action.dm;
+
+import java.util.List;
+
+import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.repo.action.ParameterDefinitionImpl;
+import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+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(final Action ruleAction, final NodeRef actionedUponNodeRef)
+ {
+ final NodeRef destinationParent = (NodeRef)ruleAction.getParameterValue(PARAM_DESTINATION_RECORD_FOLDER);
+
+ AuthenticationUtil.runAsSystem(new RunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ try
+ {
+ fileFolderService.move(actionedUponNodeRef, destinationParent, null);
+ }
+ catch (FileNotFoundException e)
+ {
+ throw new AlfrescoRuntimeException("Could not file record.", e);
+ }
+
+ return null;
+ }
+
+ });
+
+
+ }
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/SplitEmailAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/SplitEmailAction.java
index 9523e21558..75152018ac 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/SplitEmailAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/SplitEmailAction.java
@@ -114,7 +114,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
{
- if (recordsManagementService.isRecordDeclared(actionedUponNodeRef) == false)
+ if (recordService.isDeclared(actionedUponNodeRef) == false)
{
ChildAssociationRef parent = nodeService.getPrimaryParent(actionedUponNodeRef);
@@ -175,7 +175,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
{
if (recordsManagementService.isRecord(filePlanComponent) == true)
{
- if (recordsManagementService.isRecordDeclared(filePlanComponent))
+ if (recordService.isDeclared(filePlanComponent))
{
if (throwException)
{
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
index a2a926f22d..bbf53afd2b 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
@@ -48,7 +48,7 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
{
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
{
- if (recordsManagementService.isRecordDeclared(actionedUponNodeRef) == true)
+ if (recordService.isDeclared(actionedUponNodeRef) == true)
{
// Remove the declared aspect
this.nodeService.removeAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD);
@@ -73,7 +73,7 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
{
if (recordsManagementService.isRecord(filePlanComponent) == true)
{
- if (recordsManagementService.isRecordDeclared(filePlanComponent) == true)
+ if (recordService.isDeclared(filePlanComponent) == true)
{
return true;
}
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/capability/RMAfterInvocationProvider.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java
index 1d20f359fa..6f24815db7 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java
@@ -61,6 +61,9 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
+/**
+ * RM After Invocation Provider
+ */
public class RMAfterInvocationProvider extends RMSecurityCommon
implements AfterInvocationProvider, InitializingBean
{
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java
index c80837debf..756faefff9 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java
@@ -22,7 +22,7 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.caveat.RMCaveatConfigComponent;
-import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -31,6 +31,9 @@ import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
/**
* @author Roy Wetherall
@@ -42,6 +45,8 @@ public class RMSecurityCommon
private static Log logger = LogFactory.getLog(RMSecurityCommon.class);
+ private ApplicationContext applicationContext;
+
protected NodeService nodeService;
protected PermissionService permissionService;
protected RecordsManagementService rmService;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
index 5ace4d7a7e..4d8e8fbc5e 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
@@ -21,6 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.capability.declarative;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PermissionService;
import org.springframework.beans.factory.BeanNameAware;
@@ -39,6 +40,7 @@ public abstract class AbstractCapabilityCondition implements CapabilityCondition
/** Services */
protected RecordsManagementService rmService;
+ protected RecordService recordService;
protected PermissionService permissionService;
protected NodeService nodeService;
protected FreezeService freezeService;
@@ -51,6 +53,14 @@ public abstract class AbstractCapabilityCondition implements CapabilityCondition
this.rmService = rmService;
}
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
/**
* @param permissionService permission service
*/
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java
index f57f054423..e26954d6ca 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java
@@ -128,6 +128,9 @@ public class DeclarativeCapability extends AbstractCapability
this.isUndetermined = isUndetermined;
}
+ /**
+ * @return
+ */
public boolean isUndetermined()
{
return isUndetermined;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/DeclaredCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/DeclaredCapabilityCondition.java
index b57801aab4..f3f479095c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/DeclaredCapabilityCondition.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/DeclaredCapabilityCondition.java
@@ -33,7 +33,7 @@ public class DeclaredCapabilityCondition extends AbstractCapabilityCondition
boolean result = false;
if (FilePlanComponentKind.RECORD.equals(rmService.getFilePlanComponentKind(nodeRef)) == true)
{
- result = rmService.isRecordDeclared(nodeRef);
+ result = recordService.isDeclared(nodeRef);
}
return result;
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
index a54bda2968..c606f4a7b7 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
@@ -26,6 +26,7 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.capability.declarative.DeclarativeCapability;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.namespace.QName;
@@ -37,6 +38,13 @@ import org.alfresco.service.namespace.QName;
*/
public class CreateCapability extends DeclarativeCapability
{
+ private RecordService recordService;
+
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.capability.Capability#evaluate(org.alfresco.service.cmr.repository.NodeRef)
*/
@@ -70,7 +78,7 @@ public class CreateCapability extends DeclarativeCapability
{
if(linkee == null)
{
- if(rmService.isRecord(destination) && rmService.isRecordDeclared(destination) == false)
+ if(rmService.isRecord(destination) && recordService.isDeclared(destination) == false)
{
if (permissionService.hasPermission(destination, RMPermissionModel.FILE_RECORDS) == AccessStatus.ALLOWED)
{
@@ -80,7 +88,7 @@ public class CreateCapability extends DeclarativeCapability
}
else
{
- if(rmService.isRecord(linkee) && rmService.isRecord(destination) && rmService.isRecordDeclared(destination) == false)
+ if(rmService.isRecord(linkee) && rmService.isRecord(destination) && recordService.isDeclared(destination) == false)
{
if (permissionService.hasPermission(destination, RMPermissionModel.FILE_RECORDS) == AccessStatus.ALLOWED)
{
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java
index 3ad02aa34a..d7ba5dbf28 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java
@@ -9,8 +9,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
+import java.util.Map.Entry;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
@@ -20,7 +20,7 @@ import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
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.model.RecordsManagementSearchBehaviour;
+import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour;
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
import org.alfresco.module.org_alfresco_module_rm.security.Role;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
index 7b6579f5d8..5768888b3c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.forms.Field;
import org.alfresco.repo.forms.FieldGroup;
import org.alfresco.repo.forms.Form;
@@ -58,6 +59,7 @@ public abstract class RecordsManagementFormFilter extends AbstractFilt
protected RecordsManagementServiceRegistry rmServiceRegistry;
protected RecordsManagementService rmService;
protected RecordsManagementAdminService rmAdminService;
+ protected RecordService recordService;
/**
* Sets the NamespaceService instance
@@ -109,6 +111,14 @@ public abstract class RecordsManagementFormFilter extends AbstractFilt
this.rmAdminService = rmAdminService;
}
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
/**
* Add property fields to group
*
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java
index 420c6eccec..296515b7a9 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java
@@ -167,7 +167,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
protected void addRecordMetadataPropertyFieldsToGroup(Form form, NodeRef nodeRef)
{
- Set aspects = rmService.getRecordMetaDataAspects();
+ Set aspects = recordService.getRecordMetaDataAspects();
for (QName aspect : aspects)
{
@@ -215,7 +215,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
{
if (rmService.isRecord(nodeRef) == true)
{
- addTransientPropertyField(form, TRANSIENT_DECLARED, DataTypeDefinition.BOOLEAN, rmService.isRecordDeclared(nodeRef));
+ addTransientPropertyField(form, TRANSIENT_DECLARED, DataTypeDefinition.BOOLEAN, recordService.isDeclared(nodeRef));
}
DispositionSchedule ds = dispositionService.getDispositionSchedule(nodeRef);
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/identifier/IdentifierServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/identifier/IdentifierServiceImpl.java
index e9d99efd5f..148865d15b 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/identifier/IdentifierServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/identifier/IdentifierServiceImpl.java
@@ -120,7 +120,7 @@ public class IdentifierServiceImpl implements IdentifierService
}
/**
- * Generate an identifier for a given type of object with the acompanying context.
+ * Generate an identifier for a given type of object with the accompanying context.
*
* @param type content type
* @param context context
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
index a99ca3c036..c8302ffa1c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
@@ -29,6 +29,7 @@ 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.freeze.FreezeService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AccessStatus;
@@ -50,6 +51,9 @@ public abstract class BaseEvaluator implements RecordsManagementModel
/** Records management service */
protected RecordsManagementService recordsManagementService;
+ /** Record service */
+ protected RecordService recordService;
+
/** Node service */
protected NodeService nodeService;
@@ -84,6 +88,14 @@ public abstract class BaseEvaluator implements RecordsManagementModel
this.recordsManagementService = recordsManagementService;
}
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
/**
* @param nodeService node service
*/
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 29f526faa2..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
@@ -25,6 +25,7 @@ import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus;
@@ -41,6 +42,9 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
/** Records management service */
private RecordsManagementService recordsManagementService;
+ /** Record service */
+ private RecordService recordService;
+
/** Capability service */
private CapabilityService capabilityService;
@@ -56,7 +60,15 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
{
this.recordsManagementService = recordsManagementService;
- }
+ }
+
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
/**
* @param capabilityService capability service
@@ -128,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);
@@ -219,7 +235,7 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
}
else
{
- if (recordsManagementService.isRecordDeclared(nodeRef) == true)
+ if (recordService.isDeclared(nodeRef) == true)
{
result = "record";
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/MultiParentEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/MultiParentEvaluator.java
index 805a082711..a90b49c491 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/MultiParentEvaluator.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/MultiParentEvaluator.java
@@ -22,19 +22,39 @@ import java.util.List;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.jscript.app.BaseEvaluator;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.RegexQNamePattern;
/**
+ * Determines whether a node has multiple parents within a file plan
+ *
* @author Roy Wetherall
*/
public class MultiParentEvaluator extends BaseEvaluator
{
@Override
- protected boolean evaluateImpl(NodeRef nodeRef)
- {
- List parents = nodeService.getParentAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
- return (parents.size() > 1);
+ protected boolean evaluateImpl(final NodeRef nodeRef)
+ {
+ return AuthenticationUtil.runAsSystem(new RunAsWork()
+ {
+ @Override
+ public Boolean doWork() throws Exception
+ {
+ List parents = nodeService.getParentAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
+ int count = 0;
+ for (ChildAssociationRef parent : parents)
+ {
+ if (nodeService.hasAspect(parent.getParentRef(), ASPECT_FILE_PLAN_COMPONENT) == true)
+ {
+ count++;
+ }
+ }
+
+ return (count > 1);
+ }
+ });
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/SplitEmailActionEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/SplitEmailActionEvaluator.java
index c28f1ae23b..574da9ed1e 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/SplitEmailActionEvaluator.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/SplitEmailActionEvaluator.java
@@ -35,7 +35,7 @@ public class SplitEmailActionEvaluator extends BaseEvaluator
protected boolean evaluateImpl(NodeRef nodeRef)
{
boolean result = false;
- if (recordsManagementService.isRecordDeclared(nodeRef) == false)
+ if (recordService.isDeclared(nodeRef) == false)
{
ContentData contentData = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
if (contentData != null)
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
index e8e3111ea2..a547203692 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
@@ -231,4 +231,5 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
// Extended readers aspect
public static final QName ASPECT_EXTENDED_READERS = QName.createQName(RM_URI, "extendedReaders");
public static final QName PROP_READERS = QName.createQName(RM_URI, "readers");
+
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/FilePlanComponentAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java
similarity index 95%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/FilePlanComponentAspect.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java
index 637f0caa4d..dae35c2349 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/FilePlanComponentAspect.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java
@@ -16,12 +16,13 @@
* 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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import java.io.Serializable;
import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.copy.AbstractCopyBehaviourCallback;
import org.alfresco.repo.copy.CopyBehaviourCallback;
import org.alfresco.repo.copy.CopyDetails;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java
new file mode 100644
index 0000000000..350e2ea7a9
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java
@@ -0,0 +1,90 @@
+/*
+ * 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.model.behaviour;
+
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.repo.node.NodeServicePolicies;
+import org.alfresco.repo.policy.PolicyComponent;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.security.PermissionService;
+
+/**
+ * Behaviour associated with the file plan type
+ *
+ * @author Roy Wetherall
+ */
+public class FilePlanType implements RecordsManagementModel,
+ NodeServicePolicies.OnCreateNodePolicy
+{
+ /** Policy component */
+ private PolicyComponent policyComponent;
+
+ /** Node service */
+ private NodeService nodeService;
+
+ /** Permission service */
+ private PermissionService permissionService;
+
+ /** New record container name */
+ private static final String NAME_NR_CONTAINER = "New Records";
+
+ /**
+ * Set the policy component
+ * @param policyComponent policy component
+ */
+ public void setPolicyComponent(PolicyComponent policyComponent)
+ {
+ this.policyComponent = policyComponent;
+ }
+
+ /**
+ * Set node service
+ * @param nodeService node service
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ public void setPermissionService(PermissionService permissionService)
+ {
+ this.permissionService = permissionService;
+ }
+
+ /**
+ * Bean initialisation method
+ */
+ public void init()
+ {
+ // policyComponent.bindClassBehaviour(
+ // NodeServicePolicies.OnCreateNodePolicy.QNAME,
+ // TYPE_FILE_PLAN,
+ // new JavaBehaviour(this, "onCreateNode", NotificationFrequency.TRANSACTION_COMMIT));
+ }
+
+ /**
+ * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef)
+ */
+ @Override
+ public void onCreateNode(ChildAssociationRef assoc)
+ {
+ // TODO refactor the file plan behaviours from the service code
+ }
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordComponentIdentifierAspect.java
similarity index 95%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordComponentIdentifierAspect.java
index 2a037bf81c..97e3b434a4 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordComponentIdentifierAspect.java
@@ -16,11 +16,12 @@
* 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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import java.io.Serializable;
import java.util.Map;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordContainerType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java
similarity index 95%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordContainerType.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java
index 5bd85b7f1e..d4117ea00b 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordContainerType.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java
@@ -16,11 +16,12 @@
* 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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordCopyBehaviours.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordCopyBehaviours.java
similarity index 95%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordCopyBehaviours.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordCopyBehaviours.java
index 7c4377c9d0..c58cca1a05 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordCopyBehaviours.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordCopyBehaviours.java
@@ -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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import java.io.Serializable;
import java.util.ArrayList;
@@ -26,6 +26,7 @@ import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.copy.AbstractCopyBehaviourCallback;
import org.alfresco.repo.copy.CopyBehaviourCallback;
import org.alfresco.repo.copy.CopyDetails;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java
similarity index 92%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java
index 79823d13a7..84adf52828 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java
@@ -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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import java.io.Serializable;
import java.util.ArrayList;
@@ -36,6 +36,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionScheduleImpl;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.event.EventCompletionDetails;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition;
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
import org.alfresco.repo.policy.JavaBehaviour;
@@ -315,13 +316,22 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
}
}
- public void onAddRecordAspect(NodeRef nodeRef, QName aspectTypeQName)
+ public void onAddRecordAspect(final NodeRef nodeRef, final QName aspectTypeQName)
{
- if (nodeService.exists(nodeRef) == true)
+ AuthenticationUtil.runAsSystem(new AuthenticationUtil.RunAsWork()
{
- applySearchAspect(nodeRef);
- setupDispositionScheduleProperties(nodeRef);
- }
+ @Override
+ public Void doWork() throws Exception
+ {
+ if (nodeService.exists(nodeRef) == true)
+ {
+ applySearchAspect(nodeRef);
+ setupDispositionScheduleProperties(nodeRef);
+ }
+
+ return null;
+ }
+ });
}
public void recordFolderCreate(ChildAssociationRef childAssocRef)
@@ -494,20 +504,28 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
}
}
- public void rmSearchAspectAdd(NodeRef nodeRef, QName aspectTypeQName)
- {
- if (nodeService.exists(nodeRef) == true)
+ public void rmSearchAspectAdd(final NodeRef nodeRef, final QName aspectTypeQName)
+ {
+ AuthenticationUtil.runAsSystem(new AuthenticationUtil.RunAsWork()
{
- // Initialise the search parameters as required
- setVitalRecordDefintionDetails(nodeRef);
- }
+ @Override
+ public Void doWork() throws Exception
+ {
+ if (nodeService.exists(nodeRef) == true)
+ {
+ // Initialise the search parameteres as required
+ setVitalRecordDefintionDetails(nodeRef);
+ }
+
+ return null;
+ }
+ });
}
public void vitalRecordDefintionAddAspect(NodeRef nodeRef, QName aspectTypeQName)
{
- // Only care about record folders or record categories
- if (recordsManagementService.isRecordFolder(nodeRef) == true ||
- recordsManagementService.isRecordCategory(nodeRef) == true)
+ // Only care about record folders
+ if (recordsManagementService.isRecordFolder(nodeRef) == true)
{
updateVitalRecordDefinitionValues(nodeRef);
}
@@ -515,9 +533,8 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
public void vitalRecordDefintionUpdateProperties(NodeRef nodeRef, Map before, Map after)
{
- // Only care about record folders or record categories
- if (recordsManagementService.isRecordFolder(nodeRef) == true ||
- recordsManagementService.isRecordCategory(nodeRef) == true)
+ // Only care about record folders
+ if (recordsManagementService.isRecordFolder(nodeRef) == true)
{
Set props = new HashSet(1);
props.add(PROP_REVIEW_PERIOD);
@@ -537,17 +554,14 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
applySearchAspect(nodeRef);
setVitalRecordDefintionDetails(nodeRef);
- if (recordsManagementService.isRecordFolder(nodeRef) == true)
- {
- List records = recordsManagementService.getRecords(nodeRef);
- for (NodeRef record : records)
- {
- // Apply the search aspect
- applySearchAspect(record);
-
- // Set the vital record definition details
- setVitalRecordDefintionDetails(record);
- }
+ List records = recordsManagementService.getRecords(nodeRef);
+ for (NodeRef record : records)
+ {
+ // Apply the search aspect
+ applySearchAspect(record);
+
+ // Set the vital record definition details
+ setVitalRecordDefintionDetails(record);
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RmSiteType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RmSiteType.java
similarity index 66%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RmSiteType.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RmSiteType.java
index 8224640d20..51a0ea48de 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RmSiteType.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RmSiteType.java
@@ -16,8 +16,9 @@
* 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.model;
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
@@ -55,6 +56,9 @@ public class RmSiteType implements RecordsManagementModel,
/** Record Management Search Service */
private RecordsManagementSearchService recordsManagementSearchService;
+ /** Behaviour */
+ JavaBehaviour behaviour = new JavaBehaviour(this, "onCreateNode", NotificationFrequency.FIRST_EVENT);
+
/**
* Set the policy component
* @param policyComponent policy component
@@ -98,7 +102,7 @@ public class RmSiteType implements RecordsManagementModel,
policyComponent.bindClassBehaviour(
NodeServicePolicies.OnCreateNodePolicy.QNAME,
TYPE_RM_SITE,
- new JavaBehaviour(this, "onCreateNode", NotificationFrequency.FIRST_EVENT));
+ behaviour);
}
/**
@@ -107,33 +111,41 @@ public class RmSiteType implements RecordsManagementModel,
@Override
public void onCreateNode(ChildAssociationRef childAssocRef)
{
- final NodeRef rmSite = childAssocRef.getChildRef();
-
- // Do not execute behaviour if this has been created in the archive store
- if(rmSite.getStoreRef().equals(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE) == true)
- {
- // This is not the spaces store - probably the archive store
- return;
- }
-
- if (nodeService.exists(rmSite) == true)
- {
- AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork