mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merged DEV/INPLACE to HEAD :
41707: RM: Transparent records management prototype WIP * Create Record service and refactor * Add 'createRecord' method that preserves origional location(s) of the content * Add content readers information to record on extended security aspect * Experimental dynamic authority * DM action to 'create' record * Behaviour and methods to create and get new record container 41708: RM: In-place filing prototype WIP 42063: RM: Inplace filing prototype * extension of seciruty service to allow management of extended readers * extended reader maintained within file plan hierarchy * support ready for removal (ie move) and overlapping of readers in hirearchy (maintained in reference counting map) * general rename to "Unfiled Records" rather than "New Records" * File plan unfiled records filter * Unit tests * Correct permissions on created unfiled container (file for admin as per file plan root) * record readers dynamic authority applied to file plan components on bootstrap and creation 42374: RM InPlace Prototype: * permission mapping improvements ... allows filling and declaration of unfiled records * actions of 'records' in doc lib are shown as restricted rm list * "Record" banner is shown in doc lib if content is a record (this differs from the normal record view where the undeclared status is shown, this isn't relevant for a content user) * linked to many record folders indicator not shown unless it really is linked to many record folders 42700: 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 43030: RM: In-place prototype 43238: Rule editing fixed 43332: Implemented a DeclareRecordAction so that a rule can be setup for a folder and a user can declare a record just uploading a file (in a collaboration site) into the folder. 43348: DeclareRecordAction: The actioned upon node should be a record no need to create a record from the actioned node. If it is not a record an error should be thrown. If a user wants to create and declare a file as record a composite rule can be used. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@43934 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
|
||||||
|
|
||||||
|
<beans>
|
||||||
|
|
||||||
|
<!-- I18N -->
|
||||||
|
<bean id="rmActionResourceBundles" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
|
||||||
|
<property name="resourceBundles">
|
||||||
|
<list>
|
||||||
|
<value>alfresco.module.org_alfresco_module_rm.messages.actions</value>
|
||||||
|
</list>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- Create record action -->
|
||||||
|
<bean id="create-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction">
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
||||||
|
<property name="recordService" ref="RecordService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="applicableTypes">
|
||||||
|
<list>
|
||||||
|
<value>{http://www.alfresco.org/model/content/1.0}content</value>
|
||||||
|
</list>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- File record action -->
|
||||||
|
<bean id="file-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.FileRecordAction">
|
||||||
|
<property name="fileFolderService" ref="FileFolderService"/>
|
||||||
|
<!-- <property name="applicableTypes">
|
||||||
|
<list>
|
||||||
|
<value>{http://www.alfresco.org/model/content/1.0}content</value>
|
||||||
|
</list>
|
||||||
|
</property> -->
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- Declare record action -->
|
||||||
|
<bean id="declare-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.DeclareRecordAction">
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordService" ref="RecordService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="ownableService" ref="OwnableService" />
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
|
</bean>
|
||||||
|
</beans>
|
@@ -4,7 +4,6 @@
|
|||||||
<beans>
|
<beans>
|
||||||
|
|
||||||
<!-- Assignable Capabilities -->
|
<!-- Assignable Capabilities -->
|
||||||
|
|
||||||
<bean id="rmAccessAuditCapability"
|
<bean id="rmAccessAuditCapability"
|
||||||
parent="rmAuditGroup">
|
parent="rmAuditGroup">
|
||||||
<property name="name" value="AccessAudit"/>
|
<property name="name" value="AccessAudit"/>
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
<bean id="rmCreate"
|
<bean id="rmCreate"
|
||||||
parent="rmBaseCapability"
|
parent="rmBaseCapability"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.capability.impl.CreateCapability">
|
class="org.alfresco.module.org_alfresco_module_rm.capability.impl.CreateCapability">
|
||||||
|
<property name="recordService" ref="recordService"/>
|
||||||
<property name="name" value="Create"/>
|
<property name="name" value="Create"/>
|
||||||
<property name="private" value="true"/>
|
<property name="private" value="true"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -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...
|
@@ -46,10 +46,13 @@
|
|||||||
<list>
|
<list>
|
||||||
<ref bean="ownerDynamicAuthority" />
|
<ref bean="ownerDynamicAuthority" />
|
||||||
<ref bean="lockOwnerDynamicAuthority" />
|
<ref bean="lockOwnerDynamicAuthority" />
|
||||||
|
<ref bean="extendedReaderDynamicAuthority" />
|
||||||
</list>
|
</list>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="extendedReaderDynamicAuthority" class="org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority" />
|
||||||
|
|
||||||
<!-- Bootstrap records management data -->
|
<!-- Bootstrap records management data -->
|
||||||
<bean id="org_alfresco_module_rm_bootstrapData"
|
<bean id="org_alfresco_module_rm_bootstrapData"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.bootstrap.BootstrapImporterModuleComponent"
|
class="org.alfresco.module.org_alfresco_module_rm.bootstrap.BootstrapImporterModuleComponent"
|
||||||
@@ -129,6 +132,9 @@
|
|||||||
<!-- Import DOD 5015 -->
|
<!-- Import DOD 5015 -->
|
||||||
<import resource="classpath:alfresco/module/org_alfresco_module_rm/dod5015/dod5015-context.xml"/>
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/dod5015/dod5015-context.xml"/>
|
||||||
|
|
||||||
|
<!-- Import Demo Context -->
|
||||||
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/demo/demo-context.xml"/>
|
||||||
|
|
||||||
<!-- Import the RM identifier service's -->
|
<!-- Import the RM identifier service's -->
|
||||||
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-id-context.xml"/>
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-id-context.xml"/>
|
||||||
|
|
||||||
@@ -137,6 +143,7 @@
|
|||||||
|
|
||||||
<!-- Import the RM action's -->
|
<!-- Import the RM action's -->
|
||||||
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-action-context.xml"/>
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-action-context.xml"/>
|
||||||
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/action-context.xml"/>
|
||||||
|
|
||||||
<!-- Import the RM module patches -->
|
<!-- Import the RM module patches -->
|
||||||
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-patch-context.xml"/>
|
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-patch-context.xml"/>
|
||||||
@@ -223,26 +230,28 @@
|
|||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Form Processor Filters to process RM nodes and types -->
|
<!-- Form Processor Filters to process RM nodes and types -->
|
||||||
<bean id="rmNodeFormFilter" parent="baseFormFilter"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementNodeFormFilter">
|
|
||||||
<property name="filterRegistry" ref="nodeFilterRegistry" />
|
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
<property name="nodeService" ref="nodeService"/>
|
|
||||||
<property name="dictionaryService" ref="DictionaryService" />
|
|
||||||
<property name="recordsManagementServiceRegistry" ref="RecordsManagementServiceRegistry" />
|
|
||||||
<property name="recordsManagementService" ref="recordsManagementService"/>
|
|
||||||
<property name="dispositionService" ref="dispositionService"/>
|
|
||||||
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="rmTypeFormFilter" parent="baseFormFilter"
|
<bean id="baseRMFormFilter" parent="baseFormFilter" abstract="true">
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementTypeFormFilter">
|
|
||||||
<property name="filterRegistry" ref="typeFilterRegistry" />
|
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<property name="nodeService" ref="NodeService"/>
|
||||||
<property name="recordsManagementServiceRegistry" ref="RecordsManagementServiceRegistry" />
|
<property name="recordsManagementServiceRegistry" ref="RecordsManagementServiceRegistry" />
|
||||||
<property name="recordsManagementService" ref="recordsManagementService"/>
|
<property name="recordsManagementService" ref="recordsManagementService"/>
|
||||||
|
<property name="recordService" ref="recordService"/>
|
||||||
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
|
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="rmNodeFormFilter"
|
||||||
|
parent="baseRMFormFilter"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementNodeFormFilter">
|
||||||
|
<property name="filterRegistry" ref="nodeFilterRegistry" />
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
|
<property name="dispositionService" ref="dispositionService"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="rmTypeFormFilter"
|
||||||
|
parent="baseRMFormFilter"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementTypeFormFilter">
|
||||||
|
<property name="filterRegistry" ref="typeFilterRegistry" />
|
||||||
<property name="identifierService" ref="recordsManagementIdentifierService"/>
|
<property name="identifierService" ref="recordsManagementIdentifierService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
@@ -34,7 +34,10 @@
|
|||||||
<property name="recordService" ref="recordService"/>
|
<property name="recordService" ref="recordService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="rmProxyAction" init-method="registerAction" abstract="true">
|
<bean id="rmProxyAction"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.capability.RMActionProxyFactoryBean"
|
||||||
|
init-method="registerAction"
|
||||||
|
abstract="true">
|
||||||
<property name="runtimeActionService" ref="actionService"/>
|
<property name="runtimeActionService" ref="actionService"/>
|
||||||
<property name="recordsManagementActionService" ref="recordsManagementActionService"/>
|
<property name="recordsManagementActionService" ref="recordsManagementActionService"/>
|
||||||
<property name="proxyInterfaces">
|
<property name="proxyInterfaces">
|
||||||
@@ -65,7 +68,7 @@
|
|||||||
<!-- Bound to policy: allow -->
|
<!-- Bound to policy: allow -->
|
||||||
|
|
||||||
|
|
||||||
<bean id="file_proxy" class="org.alfresco.module.org_alfresco_module_rm.capability.RMActionProxyFactoryBean" parent="rmProxyAction" init-method="registerAction">
|
<bean id="file_proxy" parent="rmProxyAction">
|
||||||
<property name="target">
|
<property name="target">
|
||||||
<ref bean="file"/>
|
<ref bean="file"/>
|
||||||
</property>
|
</property>
|
||||||
@@ -95,7 +98,7 @@
|
|||||||
<!-- Cutoff action -->
|
<!-- Cutoff action -->
|
||||||
|
|
||||||
|
|
||||||
<bean id="cutoff_proxy" class="org.alfresco.module.org_alfresco_module_rm.capability.RMActionProxyFactoryBean" parent="rmProxyAction" init-method="registerAction">
|
<bean id="cutoff_proxy" parent="rmProxyAction" >
|
||||||
<property name="target">
|
<property name="target">
|
||||||
<ref bean="cutoff"/>
|
<ref bean="cutoff"/>
|
||||||
</property>
|
</property>
|
||||||
@@ -766,5 +769,6 @@
|
|||||||
<bean id="createDispositionSchedule"
|
<bean id="createDispositionSchedule"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.action.impl.CreateDispositionScheduleAction"
|
class="org.alfresco.module.org_alfresco_module_rm.action.impl.CreateDispositionScheduleAction"
|
||||||
parent="rmAction" />
|
parent="rmAction" />
|
||||||
|
|
||||||
|
|
||||||
</beans>
|
</beans>
|
@@ -86,3 +86,9 @@ editDispositionActionAsOfDate.description=Edit Disposition Action As Of Date
|
|||||||
|
|
||||||
createDispositionSchedule.title=Create Disposition Schedule
|
createDispositionSchedule.title=Create Disposition Schedule
|
||||||
createDispositionSchedule.description=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.
|
||||||
|
@@ -39,20 +39,20 @@
|
|||||||
|
|
||||||
<!-- File plan component aspect behaviour bean -->
|
<!-- File plan component aspect behaviour bean -->
|
||||||
<bean id="org_alfresco_module_rm_FilePlanComponentAspect"
|
<bean id="org_alfresco_module_rm_FilePlanComponentAspect"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.FilePlanComponentAspect"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.FilePlanComponentAspect"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="recordsManagementService" ref="recordsManagementService"/>
|
<property name="recordsManagementService" ref="recordsManagementService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="org_alfresco_module_rm_ScheduledAspect"
|
<bean id="org_alfresco_module_rm_ScheduledAspect"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.ScheduledAspect"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.ScheduledAspect"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="dispositionService" ref="dispositionService"/>
|
<property name="dispositionService" ref="dispositionService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- RM container type behaviour bean -->
|
<!-- RM container type behaviour bean -->
|
||||||
<bean id="org_alfresco_module_rm_RecordContainerType"
|
<bean id="org_alfresco_module_rm_RecordContainerType"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.RecordContainerType"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordContainerType"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
<property name="dictionaryService" ref="DictionaryService"/>
|
||||||
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
|
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="org_alfresco_module_rm_RmSiteType"
|
<bean id="org_alfresco_module_rm_RmSiteType"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.RmSiteType"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="siteService" ref="SiteService"/>
|
<property name="siteService" ref="SiteService"/>
|
||||||
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
||||||
@@ -68,14 +68,14 @@
|
|||||||
|
|
||||||
<!-- Record Component Identifier aspect behaviour bean -->
|
<!-- Record Component Identifier aspect behaviour bean -->
|
||||||
<bean id="recordComponentIdentifierAspect"
|
<bean id="recordComponentIdentifierAspect"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.RecordComponentIdentifierAspect"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordComponentIdentifierAspect"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="attributeService" ref="attributeService"/>
|
<property name="attributeService" ref="attributeService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Copy policy management for records -->
|
<!-- Copy policy management for records -->
|
||||||
<bean id="recordCopyBehaviours"
|
<bean id="recordCopyBehaviours"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.RecordCopyBehaviours"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordCopyBehaviours"
|
||||||
init-method="init">
|
init-method="init">
|
||||||
<property name="policyComponent" ref="policyComponent"/>
|
<property name="policyComponent" ref="policyComponent"/>
|
||||||
<property name="recordsManagementServiceRegistry" ref="RecordsManagementServiceRegistry"/>
|
<property name="recordsManagementServiceRegistry" ref="RecordsManagementServiceRegistry"/>
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
|
|
||||||
<!-- Search Behaviour -->
|
<!-- Search Behaviour -->
|
||||||
<bean id="recordsManagementSearchBehaviour"
|
<bean id="recordsManagementSearchBehaviour"
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementSearchBehaviour"
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour"
|
||||||
parent="org_alfresco_module_rm_BaseBehaviour">
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
<property name="recordsManagementService" ref="recordsManagementService"/>
|
<property name="recordsManagementService" ref="recordsManagementService"/>
|
||||||
<property name="dispositionService" ref="dispositionService"/>
|
<property name="dispositionService" ref="dispositionService"/>
|
||||||
@@ -100,5 +100,12 @@
|
|||||||
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
|
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<!-- File Plan Type Behaviour -->
|
||||||
|
<bean id="org_alfresco_module_rm_FilePlanType"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.FilePlanType"
|
||||||
|
parent="org_alfresco_module_rm_BaseBehaviour">
|
||||||
|
<property name="permissionService" ref="PermissionService"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
@@ -48,6 +48,7 @@
|
|||||||
<property name="permissionService" ref="permissionService"/>
|
<property name="permissionService" ref="permissionService"/>
|
||||||
<property name="recordsManagementService" ref="recordsManagementService"/>
|
<property name="recordsManagementService" ref="recordsManagementService"/>
|
||||||
<property name="caveatConfigComponent" ref="caveatConfigComponent"/>
|
<property name="caveatConfigComponent" ref="caveatConfigComponent"/>
|
||||||
|
<!-- <property name="recordService" ref="recordService"/> -->
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- ====== -->
|
<!-- ====== -->
|
||||||
|
@@ -915,7 +915,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Custom EMail Mapping Service -->
|
<!-- Custom EMail Mapping Service -->
|
||||||
|
|
||||||
<bean id="customEmailMappingService"
|
<bean id="customEmailMappingService"
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
class="org.alfresco.module.org_alfresco_module_rm.jscript.app.JSONConversionComponent"
|
class="org.alfresco.module.org_alfresco_module_rm.jscript.app.JSONConversionComponent"
|
||||||
parent="baseJsonConversionComponent">
|
parent="baseJsonConversionComponent">
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
||||||
|
<property name="recordService" ref="RecordService"/>
|
||||||
<property name="capabilityService" ref="CapabilityService"/>
|
<property name="capabilityService" ref="CapabilityService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
@@ -14,6 +15,7 @@
|
|||||||
abstract="true">
|
abstract="true">
|
||||||
<property name="jsonConversionComponent" ref="jsonConversionComponent"/>
|
<property name="jsonConversionComponent" ref="jsonConversionComponent"/>
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
||||||
|
<property name="recordService" ref="RecordService"/>
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<property name="nodeService" ref="NodeService"/>
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
<property name="capabilityService" ref="CapabilityService"/>
|
<property name="capabilityService" ref="CapabilityService"/>
|
||||||
|
@@ -2,380 +2,485 @@
|
|||||||
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
|
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
|
||||||
|
|
||||||
<beans>
|
<beans>
|
||||||
<!-- REST impl for RM Action Service -->
|
<!-- REST impl for RM Action Service -->
|
||||||
<bean id="webscript.org.alfresco.rma.rmaction.post" class="org.alfresco.module.org_alfresco_module_rm.script.RmActionPost" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.rmaction.post"
|
||||||
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.RmActionPost"
|
||||||
<property name="nodeService" ref="NodeService"/>
|
parent="webscript">
|
||||||
</bean>
|
<property name="recordsManagementActionService" ref="RecordsManagementActionService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
<!-- Abstract parent bean for many RM get and post beans -->
|
</bean>
|
||||||
<bean id="rmBaseWebscript" parent="webscript" abstract="true">
|
|
||||||
<property name="nodeService" ref="NodeService"/>
|
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
|
||||||
<property name="dispositionService" ref="DispositionService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for GET DOD Custom Types -->
|
<!-- Abstract parent bean for many RM get and post beans -->
|
||||||
<bean id="webscript.org.alfresco.rma.dodcustomtypes.get" class="org.alfresco.module.org_alfresco_module_rm.script.DodCustomTypesGet" parent="webscript">
|
<bean id="rmBaseWebscript" parent="webscript" abstract="true">
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
<property name="nodeService" ref="NodeService" />
|
||||||
</bean>
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<bean id="webscript.org.alfresco.rma.customisable.get" class="org.alfresco.module.org_alfresco_module_rm.script.CustomisableGet" parent="webscript">
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
</bean>
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for GET Custom Property Definitions -->
|
<!-- REST impl for GET DOD Custom Types -->
|
||||||
<bean id="webscript.org.alfresco.rma.custompropdefinitions.get" class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionsGet" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.dodcustomtypes.get"
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.DodCustomTypesGet"
|
||||||
</bean>
|
parent="webscript">
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for PUT Custom Property Definitions -->
|
<bean id="webscript.org.alfresco.rma.customisable.get"
|
||||||
<bean id="webscript.org.alfresco.rma.custompropdefinition.put" class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionPut" parent="rmBaseWebscript">
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomisableGet"
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
parent="webscript">
|
||||||
</bean>
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
<!-- REST impl for POST Custom Property Definitions -->
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
<bean id="webscript.org.alfresco.rma.custompropdefinition.post" class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionPost" parent="rmBaseWebscript">
|
</bean>
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- TODO Delete this -->
|
|
||||||
<!-- REST impl for DELETE Custom Property Definitions -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.custompropdefinition.delete" class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionDelete" parent="rmBaseWebscript">
|
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for GET Custom Reference Definitions -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.customrefdefinitions.get" class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionsGet" parent="webscript">
|
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for PUT Custom Reference Definitions -->
|
<!-- REST impl for GET Custom Property Definitions -->
|
||||||
<bean id="webscript.org.alfresco.rma.customrefdefinition.put" class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionPut" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.custompropdefinitions.get"
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionsGet"
|
||||||
</bean>
|
parent="rmBaseWebscript">
|
||||||
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for POST Custom Reference Definitions -->
|
<!-- REST impl for PUT Custom Property Definitions -->
|
||||||
<bean id="webscript.org.alfresco.rma.customrefdefinition.post" class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionPost" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.custompropdefinition.put"
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionPut"
|
||||||
</bean>
|
parent="rmBaseWebscript">
|
||||||
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<!-- REST impl for GET Custom Reference Instances -->
|
</bean>
|
||||||
<bean id="webscript.org.alfresco.rma.customrefs.get" class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefsGet" parent="rmBaseWebscript">
|
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for POST Custom Reference Instance -->
|
<!-- REST impl for POST Custom Property Definitions -->
|
||||||
<bean id="webscript.org.alfresco.rma.customref.post" class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefPost" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.custompropdefinition.post"
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionPost"
|
||||||
</bean>
|
parent="rmBaseWebscript">
|
||||||
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for DELETE Custom Reference Instance -->
|
<!-- TODO Delete this -->
|
||||||
<bean id="webscript.org.alfresco.rma.customref.delete" class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefDelete" parent="rmBaseWebscript">
|
<!-- REST impl for DELETE Custom Property Definitions -->
|
||||||
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService"/>
|
<bean id="webscript.org.alfresco.rma.custompropdefinition.delete"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomPropertyDefinitionDelete"
|
||||||
|
parent="rmBaseWebscript">
|
||||||
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for GET Disposition Schedule -->
|
<!-- REST impl for GET Custom Reference Definitions -->
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionschedule.get" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionScheduleGet" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.customrefdefinitions.get"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionsGet"
|
||||||
|
parent="webscript">
|
||||||
<!-- REST impl for POST Disposition Action Definition -->
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionactiondefinitions.post" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionPost" parent="rmBaseWebscript">
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for PUT Disposition Action Definition -->
|
<!-- REST impl for PUT Custom Reference Definitions -->
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionactiondefinition.put" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionPut" parent="rmBaseWebscript">
|
<bean id="webscript.org.alfresco.rma.customrefdefinition.put"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionPut"
|
||||||
|
parent="rmBaseWebscript">
|
||||||
<!-- REST impl for DELETE Disposition Action Definition -->
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionactiondefinition.delete" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionDelete" parent="rmBaseWebscript">
|
</bean>
|
||||||
</bean>
|
|
||||||
|
<!-- REST impl for POST Custom Reference Definitions -->
|
||||||
<!-- REST impl for GET Disposition Lifecycle -->
|
<bean id="webscript.org.alfresco.rma.customrefdefinition.post"
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionlifecycle.get" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionLifecycleGet" parent="rmBaseWebscript">
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionPost"
|
||||||
<property name="personService" ref="PersonService"/>
|
parent="rmBaseWebscript">
|
||||||
</bean>
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
|
</bean>
|
||||||
<!-- REST impl for GET List Of Values -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.listofvalues.get" class="org.alfresco.module.org_alfresco_module_rm.script.ListOfValuesGet" parent="webscript">
|
<!-- REST impl for GET Custom Reference Instances -->
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<bean id="webscript.org.alfresco.rma.customrefs.get"
|
||||||
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefsGet"
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
parent="rmBaseWebscript">
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<property name="dispositionService" ref="DispositionService"/>
|
</bean>
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<!-- REST impl for POST Custom Reference Instance -->
|
||||||
</bean>
|
<bean id="webscript.org.alfresco.rma.customref.post"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefPost"
|
||||||
<!-- REST impl for GET disposition properties -->
|
parent="rmBaseWebscript">
|
||||||
<bean id="webscript.org.alfresco.rma.dispositionproperties.get" class="org.alfresco.module.org_alfresco_module_rm.script.DispositionPropertiesGet" parent="webscript">
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<property name="dispositionService" ref="DispositionService"/>
|
</bean>
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
</bean>
|
<!-- REST impl for DELETE Custom Reference Instance -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.customref.delete"
|
||||||
<!-- REST impl for GET Records MetaData aspects -->
|
class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefDelete"
|
||||||
<bean id="webscript.org.alfresco.rma.recordmetadataaspects.get" class="org.alfresco.module.org_alfresco_module_rm.script.RecordMetaDataAspectsGet" parent="webscript">
|
parent="rmBaseWebscript">
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
</bean>
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
|
||||||
</bean>
|
<!-- REST impl for GET Disposition Schedule -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.dispositionschedule.get"
|
||||||
<!-- REST impl for GET Audit Log -->
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionScheduleGet"
|
||||||
<bean id="webscript.org.alfresco.rma.rmauditlog.get" class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogGet" parent="webscript">
|
parent="rmBaseWebscript">
|
||||||
<property name="nodeService" ref="nodeService"/>
|
</bean>
|
||||||
<property name="contentService" ref="ContentService"/>
|
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
<!-- REST impl for POST Disposition Action Definition -->
|
||||||
<property name="mimetypeService" ref="mimetypeService"/>
|
<bean id="webscript.org.alfresco.rma.dispositionactiondefinitions.post"
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionPost"
|
||||||
</bean>
|
parent="rmBaseWebscript">
|
||||||
|
</bean>
|
||||||
<bean id="webscript.org.alfresco.rma.rmauditlogstatus.get" class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogStatusGet" parent="webscript">
|
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
<!-- REST impl for PUT Disposition Action Definition -->
|
||||||
</bean>
|
<bean id="webscript.org.alfresco.rma.dispositionactiondefinition.put"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionPut"
|
||||||
<!-- REST impl for POST Audit Log -->
|
parent="rmBaseWebscript">
|
||||||
<bean id="webscript.org.alfresco.rma.rmauditlog.post" class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogPost" parent="webscript">
|
</bean>
|
||||||
<property name="nodeService" ref="nodeService"/>
|
|
||||||
<property name="contentService" ref="ContentService"/>
|
<!-- REST impl for DELETE Disposition Action Definition -->
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
<bean id="webscript.org.alfresco.rma.dispositionactiondefinition.delete"
|
||||||
<property name="mimetypeService" ref="mimetypeService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionActionDefinitionDelete"
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
parent="rmBaseWebscript">
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for PUT Audit Log (starting and stopping auditing) -->
|
<!-- REST impl for GET Disposition Lifecycle -->
|
||||||
<bean id="webscript.org.alfresco.rma.rmauditlog.put" class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogPut" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.dispositionlifecycle.get"
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionLifecycleGet"
|
||||||
</bean>
|
parent="rmBaseWebscript">
|
||||||
|
<property name="personService" ref="PersonService" />
|
||||||
<!-- REST impl for DELETE Audit Log (clears audit log) -->
|
</bean>
|
||||||
<bean id="webscript.org.alfresco.rma.rmauditlog.delete" class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogDelete" parent="webscript">
|
|
||||||
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService"/>
|
<!-- REST impl for GET List Of Values -->
|
||||||
</bean>
|
<bean id="webscript.org.alfresco.rma.listofvalues.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.ListOfValuesGet"
|
||||||
<!-- REST impl for POST export -->
|
parent="webscript">
|
||||||
<bean id="webscript.org.alfresco.rma.export.post" class="org.alfresco.module.org_alfresco_module_rm.script.ExportPost" parent="webscript">
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<property name="nodeService" ref="nodeService"/>
|
<property name="recordsManagementActionService" ref="RecordsManagementActionService" />
|
||||||
<property name="contentService" ref="ContentService"/>
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
<property name="mimetypeService" ref="mimetypeService"/>
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
<property name="exporterService" ref="ExporterService"/>
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
</bean>
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
|
</bean>
|
||||||
<!-- REST impl for POST import -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.import.post" class="org.alfresco.module.org_alfresco_module_rm.script.ImportPost" parent="webscript">
|
<!-- REST impl for GET disposition properties -->
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<bean id="webscript.org.alfresco.rma.dispositionproperties.get"
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.DispositionPropertiesGet"
|
||||||
<property name="importerService" ref="ImporterService"/>
|
parent="webscript">
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Base bean for transfer web scripts -->
|
<!-- REST impl for GET Records MetaData aspects -->
|
||||||
<bean id="rmBaseTransferWebscript" parent="webscript" abstract="true">
|
<bean id="webscript.org.alfresco.rma.recordmetadataaspects.get"
|
||||||
<property name="nodeService" ref="nodeService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.RecordMetaDataAspectsGet"
|
||||||
<property name="contentService" ref="ContentService"/>
|
parent="webscript">
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
<property name="recordService" ref="RecordService" />
|
||||||
<property name="mimetypeService" ref="mimetypeService"/>
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
<property name="exporterService" ref="ExporterService"/>
|
<property name="namespaceService" ref="NamespaceService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for GET transfer -->
|
<!-- REST impl for GET Audit Log -->
|
||||||
<bean id="webscript.org.alfresco.rma.transfer.get" class="org.alfresco.module.org_alfresco_module_rm.script.TransferGet" parent="rmBaseTransferWebscript">
|
<bean id="webscript.org.alfresco.rma.rmauditlog.get"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogGet"
|
||||||
|
parent="webscript">
|
||||||
<!-- REST impl for GET transfer report -->
|
<property name="nodeService" ref="nodeService" />
|
||||||
<bean id="webscript.org.alfresco.rma.transferreport.get" class="org.alfresco.module.org_alfresco_module_rm.script.TransferReportGet" parent="rmBaseTransferWebscript">
|
<property name="contentService" ref="ContentService" />
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
<property name="permissionService" ref="PermissionService" />
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="mimetypeService" ref="mimetypeService" />
|
||||||
<property name="dispositionService" ref="DispositionService"/>
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for POST transfer report -->
|
<bean id="webscript.org.alfresco.rma.rmauditlogstatus.get"
|
||||||
<bean id="webscript.org.alfresco.rma.transferreport.post" class="org.alfresco.module.org_alfresco_module_rm.script.TransferReportPost" parent="rmBaseTransferWebscript">
|
class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogStatusGet"
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
parent="webscript">
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
|
</bean>
|
||||||
<property name="dispositionService" ref="DispositionService"/>
|
|
||||||
</bean>
|
<!-- REST impl for POST Audit Log -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.rmauditlog.post"
|
||||||
<!-- RM Role API-->
|
class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogPost"
|
||||||
|
parent="webscript">
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmroles.get" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolesGet" parent="webscript">
|
<property name="nodeService" ref="nodeService" />
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<property name="contentService" ref="ContentService" />
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
<property name="permissionService" ref="PermissionService" />
|
||||||
</bean>
|
<property name="mimetypeService" ref="mimetypeService" />
|
||||||
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmroles.post" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolesPost" parent="webscript">
|
</bean>
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
<!-- REST impl for PUT Audit Log (starting and stopping auditing) -->
|
||||||
<property name="capabilityService" ref="CapabilityService" />
|
<bean id="webscript.org.alfresco.rma.rmauditlog.put"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogPut"
|
||||||
|
parent="webscript">
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.get" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleGet" parent="webscript">
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
</bean>
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
|
||||||
</bean>
|
<!-- REST impl for DELETE Audit Log (clears audit log) -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.rmauditlog.delete"
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.put" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolePut" parent="webscript">
|
class="org.alfresco.module.org_alfresco_module_rm.script.AuditLogDelete"
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
parent="webscript">
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
<property name="recordsManagementAuditService" ref="RecordsManagementAuditService" />
|
||||||
<property name="capabilityService" ref="CapabilityService" />
|
</bean>
|
||||||
</bean>
|
|
||||||
|
<!-- REST impl for POST export -->
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.delete" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleDelete" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.export.post"
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.ExportPost"
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
parent="webscript">
|
||||||
</bean>
|
<property name="nodeService" ref="nodeService" />
|
||||||
|
<property name="contentService" ref="ContentService" />
|
||||||
<!-- Capability API -->
|
<property name="permissionService" ref="PermissionService" />
|
||||||
|
<property name="mimetypeService" ref="mimetypeService" />
|
||||||
<bean id="webscript.org.alfresco.rma.capability.capabilities.get"
|
<property name="exporterService" ref="ExporterService" />
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.capability.CapabilitiesGet"
|
</bean>
|
||||||
parent="webscript">
|
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
<!-- REST impl for POST import -->
|
||||||
<property name="capabilityService" ref="CapabilityService" />
|
<bean id="webscript.org.alfresco.rma.import.post"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.ImportPost"
|
||||||
|
parent="webscript">
|
||||||
<!-- RM Event API-->
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmeventtypes.get" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventTypesGet" parent="webscript">
|
<property name="importerService" ref="ImporterService" />
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
</bean>
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
|
</bean>
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevents.get" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventsGet" parent="webscript">
|
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
<!-- Base bean for transfer web scripts -->
|
||||||
</bean>
|
<bean id="rmBaseTransferWebscript" parent="webscript" abstract="true">
|
||||||
|
<property name="nodeService" ref="nodeService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevents.post" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventsPost" parent="webscript">
|
<property name="contentService" ref="ContentService" />
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
<property name="permissionService" ref="PermissionService" />
|
||||||
</bean>
|
<property name="mimetypeService" ref="mimetypeService" />
|
||||||
|
<property name="exporterService" ref="ExporterService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.get" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventGet" parent="webscript">
|
</bean>
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
|
||||||
</bean>
|
<!-- REST impl for GET transfer -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.transfer.get"
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.put" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventPut" parent="webscript">
|
class="org.alfresco.module.org_alfresco_module_rm.script.TransferGet"
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
parent="rmBaseTransferWebscript">
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.delete" class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventDelete" parent="webscript">
|
<!-- REST impl for GET transfer report -->
|
||||||
<property name="recordsManagementEventService" ref="RecordsManagementEventService"/>
|
<bean id="webscript.org.alfresco.rma.transferreport.get"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.TransferReportGet"
|
||||||
|
parent="rmBaseTransferWebscript">
|
||||||
<!-- REST impl for GET Email Map -->
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.emailmap.get" class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapGet" parent="webscript">
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for POST Email Map -->
|
<!-- REST impl for POST transfer report -->
|
||||||
<bean id="webscript.org.alfresco.rma.admin.emailmap.post" class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapPost" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.transferreport.post"
|
||||||
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
class="org.alfresco.module.org_alfresco_module_rm.script.TransferReportPost"
|
||||||
</bean>
|
parent="rmBaseTransferWebscript">
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
<!-- REST impl for PUT Email Map -->
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<bean id="webscript.org.alfresco.rma.admin.emailmap.put" class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapPut" parent="webscript">
|
<property name="recordsManagementActionService" ref="RecordsManagementActionService" />
|
||||||
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for GET RM Constraint -->
|
<!-- RM Role API-->
|
||||||
<bean id="webscript.org.alfresco.rma.rmconstraints.get" class="org.alfresco.module.org_alfresco_module_rm.script.RMConstraintGet" parent="webscript">
|
|
||||||
<property name="caveatConfigService" ref="CaveatConfigService" />
|
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmroles.get"
|
||||||
</bean>
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolesGet"
|
||||||
|
parent="webscript">
|
||||||
<!-- REST impl for GET User Rights Report -->
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<bean id="webscript.org.alfresco.rma.userrightsreport.get" class="org.alfresco.module.org_alfresco_module_rm.script.UserRightsReportGet" parent="webscript">
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
<property name="authorityService" ref="AuthorityService" />
|
</bean>
|
||||||
<property name="personService" ref="PersonService" />
|
|
||||||
<property name="nodeService" ref="NodeService" />
|
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmroles.post"
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService" />
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolesPost"
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
parent="webscript">
|
||||||
</bean>
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
<!-- REST impl for GET Bootstrap Test Data -->
|
<property name="capabilityService" ref="CapabilityService" />
|
||||||
<bean id="webscript.org.alfresco.rma.bootstraptestdata.get" class="org.alfresco.module.org_alfresco_module_rm.script.BootstrapTestDataGet" parent="webscript">
|
</bean>
|
||||||
<property name="nodeService" ref="NodeService" />
|
|
||||||
<property name="searchService" ref="SearchService" />
|
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.get"
|
||||||
<property name="importerService" ref="ImporterService"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleGet"
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
parent="webscript">
|
||||||
<property name="siteService" ref="SiteService"/>
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService" />
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
<property name="recordsManagementActionService" ref="RecordsManagementActionService" />
|
</bean>
|
||||||
<property name="authorityService" ref="AuthorityService"/>
|
|
||||||
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService"/>
|
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.put"
|
||||||
<property name="recordsManagementSearchBehaviour" ref="recordsManagementSearchBehaviour"/>
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolePut"
|
||||||
<property name="dispositionService" ref="dispositionService"/>
|
parent="webscript">
|
||||||
</bean>
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
<!-- REST impl for GET applydodcertmodelfixes -->
|
<property name="capabilityService" ref="CapabilityService" />
|
||||||
<!-- This webscript is intended for patching the RM custom model during the DoD certification process. -->
|
</bean>
|
||||||
<!-- TODO Delete this webscript after the certification process -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.applydodcertmodelfixes.get" class="org.alfresco.module.org_alfresco_module_rm.script.ApplyDodCertModelFixesGet" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.admin.rmrole.rmrole.delete"
|
||||||
<property name="contentService" ref="ContentService" />
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleDelete"
|
||||||
</bean>
|
parent="webscript">
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- Capability API -->
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.capability.capabilities.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.capability.CapabilitiesGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="capabilityService" ref="CapabilityService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- RM Event API-->
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmeventtypes.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventTypesGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevents.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventsGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevents.post"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventsPost"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.put"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventPut"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.rmevent.rmevent.delete"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmEventDelete"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementEventService" ref="RecordsManagementEventService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET Email Map -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.emailmap.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for POST Email Map -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.emailmap.post"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapPost"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for PUT Email Map -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.admin.emailmap.put"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.EmailMapPut"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="customEmailMappingService" ref="CustomEmailMappingService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET RM Constraint -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.rmconstraints.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.RMConstraintGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="caveatConfigService" ref="CaveatConfigService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET User Rights Report -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.userrightsreport.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.UserRightsReportGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="authorityService" ref="AuthorityService" />
|
||||||
|
<property name="personService" ref="PersonService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET Bootstrap Test Data -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.bootstraptestdata.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.BootstrapTestDataGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="searchService" ref="SearchService" />
|
||||||
|
<property name="importerService" ref="ImporterService" />
|
||||||
|
<property name="permissionService" ref="PermissionService" />
|
||||||
|
<property name="siteService" ref="SiteService" />
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="recordsManagementActionService" ref="RecordsManagementActionService" />
|
||||||
|
<property name="authorityService" ref="AuthorityService" />
|
||||||
|
<property name="recordsManagementSecurityService" ref="RecordsManagementSecurityService" />
|
||||||
|
<property name="recordsManagementSearchBehaviour" ref="recordsManagementSearchBehaviour" />
|
||||||
|
<property name="dispositionService" ref="dispositionService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET applydodcertmodelfixes -->
|
||||||
|
<!--
|
||||||
|
This webscript is intended for patching the RM custom model during the
|
||||||
|
DoD certification process.
|
||||||
|
-->
|
||||||
|
<!-- TODO Delete this webscript after the certification process -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.applydodcertmodelfixes.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.ApplyDodCertModelFixesGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="contentService" ref="ContentService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- REST impl for GET applyfixmob1573 -->
|
||||||
|
<!-- TODO Delete this webscript after the certification process -->
|
||||||
|
<bean id="webscript.org.alfresco.rma.applyfixmob1573.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.ApplyFixMob1573Get"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="contentService" ref="ContentService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- RM search web script -->
|
||||||
|
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="siteService" ref="SiteService" />
|
||||||
|
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.post"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesPost"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="siteService" ref="SiteService" />
|
||||||
|
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
||||||
|
<property name="namespaceService" ref="namespaceService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean
|
||||||
|
id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.delete"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesDelete"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="siteService" ref="SiteService" />
|
||||||
|
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsearch.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSearchGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="siteService" ref="SiteService" />
|
||||||
|
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService" />
|
||||||
|
<property name="namespaceService" ref="namespaceService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
|
<property name="permissionService" ref="PermissionService" />
|
||||||
|
<property name="personService" ref="PersonService" />
|
||||||
|
<property name="contentService" ref="ContentService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean
|
||||||
|
id="webscript.org.alfresco.slingshot.rmsearch.rmsearchproperties.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSearchPropertiesGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="namespaceService" ref="namespaceService" />
|
||||||
|
<property name="dictionaryService" ref="DictionaryService" />
|
||||||
|
<property name="adminService" ref="RecordsManagementAdminService" />
|
||||||
|
<property name="recordService" ref="RecordService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="webscript.org.alfresco.slingshot.forms.metadata.get"
|
||||||
|
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.forms.RMMetaDataGet"
|
||||||
|
parent="webscript">
|
||||||
|
<property name="recordsManagementService" ref="RecordsManagementService" />
|
||||||
|
<property name="namespaceService" ref="namespaceService" />
|
||||||
|
<property name="nodeService" ref="NodeService" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- REST impl for GET applyfixmob1573 -->
|
|
||||||
<!-- TODO Delete this webscript after the certification process -->
|
|
||||||
<bean id="webscript.org.alfresco.rma.applyfixmob1573.get" class="org.alfresco.module.org_alfresco_module_rm.script.ApplyFixMob1573Get" parent="webscript">
|
|
||||||
<property name="contentService" ref="ContentService" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- RM search web script -->
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.get"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesGet"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="siteService" ref="SiteService"/>
|
|
||||||
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.post"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesPost"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="siteService" ref="SiteService"/>
|
|
||||||
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService"/>
|
|
||||||
<property name="namespaceService" ref="namespaceService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsavedsearches.delete"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSavedSearchesDelete"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="siteService" ref="SiteService"/>
|
|
||||||
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsearch.get"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSearchGet"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="siteService" ref="SiteService"/>
|
|
||||||
<property name="recordsManagementSearchService" ref="RecordsManagementSearchService"/>
|
|
||||||
<property name="namespaceService" ref="namespaceService"/>
|
|
||||||
<property name="nodeService" ref="NodeService"/>
|
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
|
||||||
<property name="permissionService" ref="PermissionService"/>
|
|
||||||
<property name="personService" ref="PersonService"/>
|
|
||||||
<property name="contentService" ref="ContentService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.rmsearch.rmsearchproperties.get"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.RMSearchPropertiesGet"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="namespaceService" ref="namespaceService"/>
|
|
||||||
<property name="dictionaryService" ref="DictionaryService"/>
|
|
||||||
<property name="adminService" ref="RecordsManagementAdminService"/>
|
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.slingshot.forms.metadata.get"
|
|
||||||
class="org.alfresco.module.org_alfresco_module_rm.script.slingshot.forms.RMMetaDataGet"
|
|
||||||
parent="webscript">
|
|
||||||
<property name="recordsManagementService" ref="RecordsManagementService"/>
|
|
||||||
<property name="namespaceService" ref="namespaceService"/>
|
|
||||||
<property name="nodeService" ref="NodeService"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- REST impl for GET Data Sets -->
|
<!-- REST impl for GET Data Sets -->
|
||||||
<bean id="webscript.org.alfresco.rma.datasets.get" class="org.alfresco.module.org_alfresco_module_rm.script.DataSetsGet" parent="webscript">
|
<bean id="webscript.org.alfresco.rma.datasets.get" class="org.alfresco.module.org_alfresco_module_rm.script.DataSetsGet" parent="webscript">
|
||||||
<property name="dataSetService" ref="DataSetService" />
|
<property name="dataSetService" ref="DataSetService" />
|
||||||
|
@@ -179,6 +179,13 @@ Filters.getFilterParams = function RecordsManagementFilter_getFilterParams(filte
|
|||||||
filterParams.query = "+PARENT:\"" + filterData + "\"";
|
filterParams.query = "+PARENT:\"" + filterData + "\"";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "unfiledRecords":
|
||||||
|
filterParams.variablePath = false;
|
||||||
|
filterQuery = "+PATH:\"" + parsedArgs.pathNode.qnamePath + "/rma:Unfiled_x0020_Records/*\"";
|
||||||
|
filterParams.query = filterQuery + filterQueryDefaults;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
filterParams.variablePath = false;
|
filterParams.variablePath = false;
|
||||||
|
@@ -120,7 +120,7 @@ function itemIsAllowed(item)
|
|||||||
var typeShort = String(item.typeShort);
|
var typeShort = String(item.typeShort);
|
||||||
|
|
||||||
// Don't show Hold and Transfer top-level containers
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -71,15 +71,14 @@ public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegis
|
|||||||
{
|
{
|
||||||
return (RecordsManagementService)getService(RECORDS_MANAGEMENT_SERVICE);
|
return (RecordsManagementService)getService(RECORDS_MANAGEMENT_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordService()
|
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordService()
|
||||||
*/
|
*/
|
||||||
@Override
|
public RecordService getRecordService()
|
||||||
public RecordService getRecordService()
|
{
|
||||||
{
|
return (RecordService)getService(RECORD_SERVICE);
|
||||||
return (RecordService)getService(RECORD_SERVICE);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService()
|
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService()
|
||||||
|
@@ -101,6 +101,9 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
|
|||||||
/** Records management service */
|
/** Records management service */
|
||||||
protected RecordsManagementService recordsManagementService;
|
protected RecordsManagementService recordsManagementService;
|
||||||
|
|
||||||
|
/** Record service */
|
||||||
|
protected RecordService recordService;
|
||||||
|
|
||||||
/** Disposition service */
|
/** Disposition service */
|
||||||
protected DispositionService dispositionService;
|
protected DispositionService dispositionService;
|
||||||
|
|
||||||
@@ -119,9 +122,6 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
|
|||||||
/** Freeze Service */
|
/** Freeze Service */
|
||||||
protected FreezeService freezeService;
|
protected FreezeService freezeService;
|
||||||
|
|
||||||
/** Record Service */
|
|
||||||
protected RecordService recordService;
|
|
||||||
|
|
||||||
protected LinkedList<AbstractCapability> capabilities = new LinkedList<AbstractCapability>();;
|
protected LinkedList<AbstractCapability> capabilities = new LinkedList<AbstractCapability>();;
|
||||||
|
|
||||||
/** Default constructor */
|
/** Default constructor */
|
||||||
@@ -301,12 +301,23 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
|
|||||||
PropertyCheck.mandatory(this, "recordsManagementService", recordsManagementService);
|
PropertyCheck.mandatory(this, "recordsManagementService", recordsManagementService);
|
||||||
PropertyCheck.mandatory(this, "recordsManagementAdminService", recordsManagementAdminService);
|
PropertyCheck.mandatory(this, "recordsManagementAdminService", recordsManagementAdminService);
|
||||||
PropertyCheck.mandatory(this, "recordsManagementEventService", recordsManagementEventService);
|
PropertyCheck.mandatory(this, "recordsManagementEventService", recordsManagementEventService);
|
||||||
|
|
||||||
for(AbstractCapability capability : capabilities)
|
for(AbstractCapability capability : capabilities)
|
||||||
{
|
{
|
||||||
capability.registerAction(this);
|
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)
|
* @see org.alfresco.repo.action.CommonResourceAbstractBase#setBeanName(java.lang.String)
|
||||||
*/
|
*/
|
||||||
|
@@ -100,7 +100,7 @@ public abstract class RMDispositionActionExecuterAbstractBase extends RMActionEx
|
|||||||
if (this.recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
if (this.recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
||||||
{
|
{
|
||||||
// Can only execute disposition action on record if declared
|
// 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
|
// Indicate that the disposition action is underway
|
||||||
this.nodeService.setProperty(nextDispositionActionNodeRef, PROP_DISPOSITION_ACTION_STARTED_AT, new Date());
|
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)
|
if (this.recordsManagementService.isRecord(filePlanComponent) == true)
|
||||||
{
|
{
|
||||||
// Can only execute disposition action on record if declared
|
// Can only execute disposition action on record if declared
|
||||||
if (this.recordsManagementService.isRecordDeclared(filePlanComponent) == true)
|
if (recordService.isDeclared(filePlanComponent) == true)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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<NodeRef> 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<Void>()
|
||||||
|
{
|
||||||
|
@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<ParameterDefinition> params)
|
||||||
|
{
|
||||||
|
// TODO eventually we will need to pass in the file plan as a parameter
|
||||||
|
// TODO .. or the RM site
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -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<String> missingProperties = new ArrayList<String>(5);
|
||||||
|
// Aspect not already defined - check mandatory properties then add
|
||||||
|
if (mandatoryPropertiesSet(actionedUponNodeRef, missingProperties) == true)
|
||||||
|
{
|
||||||
|
// Add the declared aspect
|
||||||
|
Map<QName, Serializable> declaredProps = new HashMap<QName, Serializable>(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<String> 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<String> missingProperties)
|
||||||
|
{
|
||||||
|
boolean result = true;
|
||||||
|
|
||||||
|
Map<QName, Serializable> 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<QName> 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<String> 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<ParameterDefinition> paramList)
|
||||||
|
{
|
||||||
|
// No parameters
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -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<ParameterDefinition> 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<Void>()
|
||||||
|
{
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -114,7 +114,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
|
|||||||
|
|
||||||
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
||||||
{
|
{
|
||||||
if (recordsManagementService.isRecordDeclared(actionedUponNodeRef) == false)
|
if (recordService.isDeclared(actionedUponNodeRef) == false)
|
||||||
{
|
{
|
||||||
ChildAssociationRef parent = nodeService.getPrimaryParent(actionedUponNodeRef);
|
ChildAssociationRef parent = nodeService.getPrimaryParent(actionedUponNodeRef);
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
|
|||||||
{
|
{
|
||||||
if (recordsManagementService.isRecord(filePlanComponent) == true)
|
if (recordsManagementService.isRecord(filePlanComponent) == true)
|
||||||
{
|
{
|
||||||
if (recordsManagementService.isRecordDeclared(filePlanComponent))
|
if (recordService.isDeclared(filePlanComponent))
|
||||||
{
|
{
|
||||||
if (throwException)
|
if (throwException)
|
||||||
{
|
{
|
||||||
|
@@ -48,7 +48,7 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
|
|||||||
{
|
{
|
||||||
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
if (recordsManagementService.isRecord(actionedUponNodeRef) == true)
|
||||||
{
|
{
|
||||||
if (recordsManagementService.isRecordDeclared(actionedUponNodeRef) == true)
|
if (recordService.isDeclared(actionedUponNodeRef) == true)
|
||||||
{
|
{
|
||||||
// Remove the declared aspect
|
// Remove the declared aspect
|
||||||
this.nodeService.removeAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD);
|
this.nodeService.removeAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD);
|
||||||
@@ -73,7 +73,7 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
|
|||||||
{
|
{
|
||||||
if (recordsManagementService.isRecord(filePlanComponent) == true)
|
if (recordsManagementService.isRecord(filePlanComponent) == true)
|
||||||
{
|
{
|
||||||
if (recordsManagementService.isRecordDeclared(filePlanComponent) == true)
|
if (recordService.isDeclared(filePlanComponent) == true)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.module.org_alfresco_module_rm.capability;
|
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.RecordsManagementAction;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
||||||
import org.alfresco.repo.action.RuntimeActionService;
|
import org.alfresco.repo.action.RuntimeActionService;
|
||||||
@@ -59,7 +60,10 @@ public class RMActionProxyFactoryBean extends ProxyFactoryBean
|
|||||||
{
|
{
|
||||||
public Void doWork() throws Exception
|
public Void doWork() throws Exception
|
||||||
{
|
{
|
||||||
runtimeActionService.registerActionExecuter((ActionExecuter) getObject());
|
if (((RMActionExecuterAbstractBase)getTargetSource().getTarget()).isPublicAction() == true)
|
||||||
|
{
|
||||||
|
runtimeActionService.registerActionExecuter((ActionExecuter) getObject());
|
||||||
|
}
|
||||||
recordsManagementActionService.register((RecordsManagementAction) getObject());
|
recordsManagementActionService.register((RecordsManagementAction) getObject());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -61,6 +61,9 @@ import org.apache.commons.logging.Log;
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RM After Invocation Provider
|
||||||
|
*/
|
||||||
public class RMAfterInvocationProvider extends RMSecurityCommon
|
public class RMAfterInvocationProvider extends RMSecurityCommon
|
||||||
implements AfterInvocationProvider, InitializingBean
|
implements AfterInvocationProvider, InitializingBean
|
||||||
{
|
{
|
||||||
|
@@ -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.RecordsManagementService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.caveat.RMCaveatConfigComponent;
|
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.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
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.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.beans.BeansException;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.ApplicationContextAware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Roy Wetherall
|
* @author Roy Wetherall
|
||||||
@@ -42,6 +45,8 @@ public class RMSecurityCommon
|
|||||||
|
|
||||||
private static Log logger = LogFactory.getLog(RMSecurityCommon.class);
|
private static Log logger = LogFactory.getLog(RMSecurityCommon.class);
|
||||||
|
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
|
||||||
protected NodeService nodeService;
|
protected NodeService nodeService;
|
||||||
protected PermissionService permissionService;
|
protected PermissionService permissionService;
|
||||||
protected RecordsManagementService rmService;
|
protected RecordsManagementService rmService;
|
||||||
|
@@ -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.RecordsManagementService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
|
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.model.RecordsManagementModel;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.springframework.beans.factory.BeanNameAware;
|
import org.springframework.beans.factory.BeanNameAware;
|
||||||
@@ -39,6 +40,7 @@ public abstract class AbstractCapabilityCondition implements CapabilityCondition
|
|||||||
|
|
||||||
/** Services */
|
/** Services */
|
||||||
protected RecordsManagementService rmService;
|
protected RecordsManagementService rmService;
|
||||||
|
protected RecordService recordService;
|
||||||
protected PermissionService permissionService;
|
protected PermissionService permissionService;
|
||||||
protected NodeService nodeService;
|
protected NodeService nodeService;
|
||||||
protected FreezeService freezeService;
|
protected FreezeService freezeService;
|
||||||
@@ -51,6 +53,14 @@ public abstract class AbstractCapabilityCondition implements CapabilityCondition
|
|||||||
this.rmService = rmService;
|
this.rmService = rmService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
|
{
|
||||||
|
this.recordService = recordService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param permissionService permission service
|
* @param permissionService permission service
|
||||||
*/
|
*/
|
||||||
|
@@ -128,6 +128,9 @@ public class DeclarativeCapability extends AbstractCapability
|
|||||||
this.isUndetermined = isUndetermined;
|
this.isUndetermined = isUndetermined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public boolean isUndetermined()
|
public boolean isUndetermined()
|
||||||
{
|
{
|
||||||
return isUndetermined;
|
return isUndetermined;
|
||||||
|
@@ -33,7 +33,7 @@ public class DeclaredCapabilityCondition extends AbstractCapabilityCondition
|
|||||||
boolean result = false;
|
boolean result = false;
|
||||||
if (FilePlanComponentKind.RECORD.equals(rmService.getFilePlanComponentKind(nodeRef)) == true)
|
if (FilePlanComponentKind.RECORD.equals(rmService.getFilePlanComponentKind(nodeRef)) == true)
|
||||||
{
|
{
|
||||||
result = rmService.isRecordDeclared(nodeRef);
|
result = recordService.isDeclared(nodeRef);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter;
|
|||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
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.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.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
@@ -37,6 +38,13 @@ import org.alfresco.service.namespace.QName;
|
|||||||
*/
|
*/
|
||||||
public class CreateCapability extends DeclarativeCapability
|
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)
|
* @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(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)
|
if (permissionService.hasPermission(destination, RMPermissionModel.FILE_RECORDS) == AccessStatus.ALLOWED)
|
||||||
{
|
{
|
||||||
@@ -80,7 +88,7 @@ public class CreateCapability extends DeclarativeCapability
|
|||||||
}
|
}
|
||||||
else
|
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)
|
if (permissionService.hasPermission(destination, RMPermissionModel.FILE_RECORDS) == AccessStatus.ALLOWED)
|
||||||
{
|
{
|
||||||
|
@@ -9,8 +9,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.model.ContentModel;
|
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.DispositionSchedule;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
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.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.RecordsManagementSecurityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.Role;
|
import org.alfresco.module.org_alfresco_module_rm.security.Role;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
@@ -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.RecordsManagementAdminService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
|
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.RecordsManagementServiceRegistry;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.repo.forms.Field;
|
import org.alfresco.repo.forms.Field;
|
||||||
import org.alfresco.repo.forms.FieldGroup;
|
import org.alfresco.repo.forms.FieldGroup;
|
||||||
import org.alfresco.repo.forms.Form;
|
import org.alfresco.repo.forms.Form;
|
||||||
@@ -58,6 +59,7 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
|
|||||||
protected RecordsManagementServiceRegistry rmServiceRegistry;
|
protected RecordsManagementServiceRegistry rmServiceRegistry;
|
||||||
protected RecordsManagementService rmService;
|
protected RecordsManagementService rmService;
|
||||||
protected RecordsManagementAdminService rmAdminService;
|
protected RecordsManagementAdminService rmAdminService;
|
||||||
|
protected RecordService recordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the NamespaceService instance
|
* Sets the NamespaceService instance
|
||||||
@@ -109,6 +111,14 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
|
|||||||
this.rmAdminService = rmAdminService;
|
this.rmAdminService = rmAdminService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
|
{
|
||||||
|
this.recordService = recordService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add property fields to group
|
* Add property fields to group
|
||||||
*
|
*
|
||||||
|
@@ -167,7 +167,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
|
|||||||
|
|
||||||
protected void addRecordMetadataPropertyFieldsToGroup(Form form, NodeRef nodeRef)
|
protected void addRecordMetadataPropertyFieldsToGroup(Form form, NodeRef nodeRef)
|
||||||
{
|
{
|
||||||
Set<QName> aspects = rmService.getRecordMetaDataAspects();
|
Set<QName> aspects = recordService.getRecordMetaDataAspects();
|
||||||
|
|
||||||
for (QName aspect : aspects)
|
for (QName aspect : aspects)
|
||||||
{
|
{
|
||||||
@@ -215,7 +215,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
|
|||||||
{
|
{
|
||||||
if (rmService.isRecord(nodeRef) == true)
|
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);
|
DispositionSchedule ds = dispositionService.getDispositionSchedule(nodeRef);
|
||||||
|
@@ -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 type content type
|
||||||
* @param context context
|
* @param context context
|
||||||
|
@@ -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.capability.CapabilityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
|
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.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.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
@@ -50,6 +51,9 @@ public abstract class BaseEvaluator implements RecordsManagementModel
|
|||||||
/** Records management service */
|
/** Records management service */
|
||||||
protected RecordsManagementService recordsManagementService;
|
protected RecordsManagementService recordsManagementService;
|
||||||
|
|
||||||
|
/** Record service */
|
||||||
|
protected RecordService recordService;
|
||||||
|
|
||||||
/** Node service */
|
/** Node service */
|
||||||
protected NodeService nodeService;
|
protected NodeService nodeService;
|
||||||
|
|
||||||
@@ -84,6 +88,14 @@ public abstract class BaseEvaluator implements RecordsManagementModel
|
|||||||
this.recordsManagementService = recordsManagementService;
|
this.recordsManagementService = recordsManagementService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
|
{
|
||||||
|
this.recordService = recordService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param nodeService node service
|
* @param nodeService node service
|
||||||
*/
|
*/
|
||||||
|
@@ -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.RecordsManagementService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
|
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.capability.RMPermissionModel;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.service.cmr.model.FileInfo;
|
import org.alfresco.service.cmr.model.FileInfo;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
@@ -41,6 +42,9 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
|
|||||||
/** Records management service */
|
/** Records management service */
|
||||||
private RecordsManagementService recordsManagementService;
|
private RecordsManagementService recordsManagementService;
|
||||||
|
|
||||||
|
/** Record service */
|
||||||
|
private RecordService recordService;
|
||||||
|
|
||||||
/** Capability service */
|
/** Capability service */
|
||||||
private CapabilityService capabilityService;
|
private CapabilityService capabilityService;
|
||||||
|
|
||||||
@@ -56,7 +60,15 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
|
|||||||
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
|
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
|
||||||
{
|
{
|
||||||
this.recordsManagementService = recordsManagementService;
|
this.recordsManagementService = recordsManagementService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
|
{
|
||||||
|
this.recordService = recordService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param capabilityService capability service
|
* @param capabilityService capability service
|
||||||
@@ -128,7 +140,11 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
|
|||||||
rmNodeValues.put("kind", kind.toString());
|
rmNodeValues.put("kind", kind.toString());
|
||||||
|
|
||||||
// File plan node reference
|
// 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
|
// Set the indicators array
|
||||||
setIndicators(rmNodeValues, nodeRef);
|
setIndicators(rmNodeValues, nodeRef);
|
||||||
@@ -219,7 +235,7 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (recordsManagementService.isRecordDeclared(nodeRef) == true)
|
if (recordService.isDeclared(nodeRef) == true)
|
||||||
{
|
{
|
||||||
result = "record";
|
result = "record";
|
||||||
}
|
}
|
||||||
|
@@ -22,19 +22,39 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.jscript.app.BaseEvaluator;
|
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.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Determines whether a node has multiple parents within a file plan
|
||||||
|
*
|
||||||
* @author Roy Wetherall
|
* @author Roy Wetherall
|
||||||
*/
|
*/
|
||||||
public class MultiParentEvaluator extends BaseEvaluator
|
public class MultiParentEvaluator extends BaseEvaluator
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
protected boolean evaluateImpl(NodeRef nodeRef)
|
protected boolean evaluateImpl(final NodeRef nodeRef)
|
||||||
{
|
{
|
||||||
List<ChildAssociationRef> parents = nodeService.getParentAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
|
return AuthenticationUtil.runAsSystem(new RunAsWork<Boolean>()
|
||||||
return (parents.size() > 1);
|
{
|
||||||
|
@Override
|
||||||
|
public Boolean doWork() throws Exception
|
||||||
|
{
|
||||||
|
List<ChildAssociationRef> 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -35,7 +35,7 @@ public class SplitEmailActionEvaluator extends BaseEvaluator
|
|||||||
protected boolean evaluateImpl(NodeRef nodeRef)
|
protected boolean evaluateImpl(NodeRef nodeRef)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
if (recordsManagementService.isRecordDeclared(nodeRef) == false)
|
if (recordService.isDeclared(nodeRef) == false)
|
||||||
{
|
{
|
||||||
ContentData contentData = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
|
ContentData contentData = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
|
||||||
if (contentData != null)
|
if (contentData != null)
|
||||||
|
@@ -231,4 +231,5 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
|
|||||||
// Extended readers aspect
|
// Extended readers aspect
|
||||||
public static final QName ASPECT_EXTENDED_READERS = QName.createQName(RM_URI, "extendedReaders");
|
public static final QName ASPECT_EXTENDED_READERS = QName.createQName(RM_URI, "extendedReaders");
|
||||||
public static final QName PROP_READERS = QName.createQName(RM_URI, "readers");
|
public static final QName PROP_READERS = QName.createQName(RM_URI, "readers");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -16,12 +16,13 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.io.Serializable;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
|
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.AbstractCopyBehaviourCallback;
|
||||||
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
||||||
import org.alfresco.repo.copy.CopyDetails;
|
import org.alfresco.repo.copy.CopyDetails;
|
@@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
@@ -16,11 +16,12 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.io.Serializable;
|
||||||
import java.util.Map;
|
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;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
|
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
|
import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
|
@@ -16,11 +16,12 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.model.ContentModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
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.identifier.IdentifierService;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies;
|
import org.alfresco.repo.node.NodeServicePolicies;
|
||||||
import org.alfresco.repo.policy.JavaBehaviour;
|
import org.alfresco.repo.policy.JavaBehaviour;
|
||||||
import org.alfresco.repo.policy.PolicyComponent;
|
import org.alfresco.repo.policy.PolicyComponent;
|
@@ -16,7 +16,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.io.Serializable;
|
||||||
import java.util.ArrayList;
|
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.RecordsManagementService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry;
|
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.action.RecordsManagementActionService;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.repo.copy.AbstractCopyBehaviourCallback;
|
import org.alfresco.repo.copy.AbstractCopyBehaviourCallback;
|
||||||
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
||||||
import org.alfresco.repo.copy.CopyDetails;
|
import org.alfresco.repo.copy.CopyDetails;
|
@@ -16,7 +16,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.io.Serializable;
|
||||||
import java.util.ArrayList;
|
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.DispositionScheduleImpl;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
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.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.VitalRecordDefinition;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
||||||
import org.alfresco.repo.policy.JavaBehaviour;
|
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<Void>()
|
||||||
{
|
{
|
||||||
applySearchAspect(nodeRef);
|
@Override
|
||||||
setupDispositionScheduleProperties(nodeRef);
|
public Void doWork() throws Exception
|
||||||
}
|
{
|
||||||
|
if (nodeService.exists(nodeRef) == true)
|
||||||
|
{
|
||||||
|
applySearchAspect(nodeRef);
|
||||||
|
setupDispositionScheduleProperties(nodeRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recordFolderCreate(ChildAssociationRef childAssocRef)
|
public void recordFolderCreate(ChildAssociationRef childAssocRef)
|
||||||
@@ -494,20 +504,28 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rmSearchAspectAdd(NodeRef nodeRef, QName aspectTypeQName)
|
public void rmSearchAspectAdd(final NodeRef nodeRef, final QName aspectTypeQName)
|
||||||
{
|
{
|
||||||
if (nodeService.exists(nodeRef) == true)
|
AuthenticationUtil.runAsSystem(new AuthenticationUtil.RunAsWork<Void>()
|
||||||
{
|
{
|
||||||
// Initialise the search parameters as required
|
@Override
|
||||||
setVitalRecordDefintionDetails(nodeRef);
|
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)
|
public void vitalRecordDefintionAddAspect(NodeRef nodeRef, QName aspectTypeQName)
|
||||||
{
|
{
|
||||||
// Only care about record folders or record categories
|
// Only care about record folders
|
||||||
if (recordsManagementService.isRecordFolder(nodeRef) == true ||
|
if (recordsManagementService.isRecordFolder(nodeRef) == true)
|
||||||
recordsManagementService.isRecordCategory(nodeRef) == true)
|
|
||||||
{
|
{
|
||||||
updateVitalRecordDefinitionValues(nodeRef);
|
updateVitalRecordDefinitionValues(nodeRef);
|
||||||
}
|
}
|
||||||
@@ -515,9 +533,8 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
|
|||||||
|
|
||||||
public void vitalRecordDefintionUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after)
|
public void vitalRecordDefintionUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after)
|
||||||
{
|
{
|
||||||
// Only care about record folders or record categories
|
// Only care about record folders
|
||||||
if (recordsManagementService.isRecordFolder(nodeRef) == true ||
|
if (recordsManagementService.isRecordFolder(nodeRef) == true)
|
||||||
recordsManagementService.isRecordCategory(nodeRef) == true)
|
|
||||||
{
|
{
|
||||||
Set<QName> props = new HashSet<QName>(1);
|
Set<QName> props = new HashSet<QName>(1);
|
||||||
props.add(PROP_REVIEW_PERIOD);
|
props.add(PROP_REVIEW_PERIOD);
|
||||||
@@ -537,17 +554,14 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel
|
|||||||
applySearchAspect(nodeRef);
|
applySearchAspect(nodeRef);
|
||||||
setVitalRecordDefintionDetails(nodeRef);
|
setVitalRecordDefintionDetails(nodeRef);
|
||||||
|
|
||||||
if (recordsManagementService.isRecordFolder(nodeRef) == true)
|
List<NodeRef> records = recordsManagementService.getRecords(nodeRef);
|
||||||
{
|
for (NodeRef record : records)
|
||||||
List<NodeRef> records = recordsManagementService.getRecords(nodeRef);
|
{
|
||||||
for (NodeRef record : records)
|
// Apply the search aspect
|
||||||
{
|
applySearchAspect(record);
|
||||||
// Apply the search aspect
|
|
||||||
applySearchAspect(record);
|
// Set the vital record definition details
|
||||||
|
setVitalRecordDefintionDetails(record);
|
||||||
// Set the vital record definition details
|
|
||||||
setVitalRecordDefintionDetails(record);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@@ -16,8 +16,9 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies;
|
import org.alfresco.repo.node.NodeServicePolicies;
|
||||||
import org.alfresco.repo.policy.JavaBehaviour;
|
import org.alfresco.repo.policy.JavaBehaviour;
|
||||||
@@ -55,6 +56,9 @@ public class RmSiteType implements RecordsManagementModel,
|
|||||||
/** Record Management Search Service */
|
/** Record Management Search Service */
|
||||||
private RecordsManagementSearchService recordsManagementSearchService;
|
private RecordsManagementSearchService recordsManagementSearchService;
|
||||||
|
|
||||||
|
/** Behaviour */
|
||||||
|
JavaBehaviour behaviour = new JavaBehaviour(this, "onCreateNode", NotificationFrequency.FIRST_EVENT);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the policy component
|
* Set the policy component
|
||||||
* @param policyComponent policy component
|
* @param policyComponent policy component
|
||||||
@@ -98,7 +102,7 @@ public class RmSiteType implements RecordsManagementModel,
|
|||||||
policyComponent.bindClassBehaviour(
|
policyComponent.bindClassBehaviour(
|
||||||
NodeServicePolicies.OnCreateNodePolicy.QNAME,
|
NodeServicePolicies.OnCreateNodePolicy.QNAME,
|
||||||
TYPE_RM_SITE,
|
TYPE_RM_SITE,
|
||||||
new JavaBehaviour(this, "onCreateNode", NotificationFrequency.FIRST_EVENT));
|
behaviour);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,33 +111,41 @@ public class RmSiteType implements RecordsManagementModel,
|
|||||||
@Override
|
@Override
|
||||||
public void onCreateNode(ChildAssociationRef childAssocRef)
|
public void onCreateNode(ChildAssociationRef childAssocRef)
|
||||||
{
|
{
|
||||||
final NodeRef rmSite = childAssocRef.getChildRef();
|
behaviour.disable();
|
||||||
|
try
|
||||||
// Do not execute behaviour if this has been created in the archive store
|
{
|
||||||
if(rmSite.getStoreRef().equals(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE) == true)
|
final NodeRef rmSite = childAssocRef.getChildRef();
|
||||||
{
|
|
||||||
// This is not the spaces store - probably the archive store
|
// Do not execute behaviour if this has been created in the archive store
|
||||||
return;
|
if(rmSite.getStoreRef().equals(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE) == true)
|
||||||
}
|
|
||||||
|
|
||||||
if (nodeService.exists(rmSite) == true)
|
|
||||||
{
|
|
||||||
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
|
|
||||||
{
|
{
|
||||||
public Object doWork()
|
// This is not the spaces store - probably the archive store
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nodeService.exists(rmSite) == true)
|
||||||
|
{
|
||||||
|
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
|
||||||
{
|
{
|
||||||
SiteInfo siteInfo = siteService.getSite(rmSite);
|
public Object doWork()
|
||||||
if (siteInfo != null)
|
{
|
||||||
{
|
SiteInfo siteInfo = siteService.getSite(rmSite);
|
||||||
// Create the file plan component
|
if (siteInfo != null)
|
||||||
siteService.createContainer(siteInfo.getShortName(), COMPONENT_DOCUMENT_LIBRARY, TYPE_FILE_PLAN, null);
|
{
|
||||||
|
// Create the file plan component
|
||||||
// Add the reports
|
siteService.createContainer(siteInfo.getShortName(), COMPONENT_DOCUMENT_LIBRARY, TYPE_FILE_PLAN, null);
|
||||||
recordsManagementSearchService.addReports(siteInfo.getShortName());
|
|
||||||
}
|
// Add the reports
|
||||||
return null;
|
recordsManagementSearchService.addReports(siteInfo.getShortName());
|
||||||
}
|
}
|
||||||
}, AuthenticationUtil.getAdminUserName());
|
return null;
|
||||||
}
|
}
|
||||||
|
}, AuthenticationUtil.getAdminUserName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
behaviour.enable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -16,9 +16,10 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.disposition.DispositionService;
|
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies;
|
import org.alfresco.repo.node.NodeServicePolicies;
|
||||||
import org.alfresco.repo.policy.JavaBehaviour;
|
import org.alfresco.repo.policy.JavaBehaviour;
|
||||||
import org.alfresco.repo.policy.PolicyComponent;
|
import org.alfresco.repo.policy.PolicyComponent;
|
@@ -1,370 +0,0 @@
|
|||||||
package org.alfresco.module.org_alfresco_module_rm.permission;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
|
||||||
import org.alfresco.repo.cache.SimpleCache;
|
|
||||||
import org.alfresco.repo.domain.permissions.AclDAO;
|
|
||||||
import org.alfresco.repo.security.permissions.AccessControlEntry;
|
|
||||||
import org.alfresco.repo.security.permissions.AccessControlList;
|
|
||||||
import org.alfresco.repo.security.permissions.PermissionEntry;
|
|
||||||
import org.alfresco.repo.security.permissions.PermissionReference;
|
|
||||||
import org.alfresco.repo.security.permissions.impl.ModelDAO;
|
|
||||||
import org.alfresco.repo.security.permissions.impl.PermissionServiceImpl;
|
|
||||||
import org.alfresco.repo.security.permissions.impl.RequiredPermission;
|
|
||||||
import org.alfresco.repo.security.permissions.impl.SimplePermissionReference;
|
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
|
||||||
import org.alfresco.service.namespace.QName;
|
|
||||||
import org.alfresco.util.Pair;
|
|
||||||
|
|
||||||
public class OtherImpl extends PermissionServiceImpl
|
|
||||||
{
|
|
||||||
static SimplePermissionReference RM_OLD_ALL_PERMISSIONS_REFERENCE = SimplePermissionReference.getPermissionReference(
|
|
||||||
QName.createQName("", PermissionService.ALL_PERMISSIONS),
|
|
||||||
PermissionService.ALL_PERMISSIONS);
|
|
||||||
|
|
||||||
private SimpleCache<Serializable, Set<String>> rmReadersCache;
|
|
||||||
|
|
||||||
private AclDAO rmAclDaoComponent;
|
|
||||||
|
|
||||||
private ModelDAO rmModelDao;
|
|
||||||
|
|
||||||
public void setRmReadersCache(SimpleCache<Serializable, Set<String>> rmReadersCache)
|
|
||||||
{
|
|
||||||
this.rmReadersCache = rmReadersCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRmAclDAO(AclDAO rmAclDaoComponent)
|
|
||||||
{
|
|
||||||
this.rmAclDaoComponent = rmAclDaoComponent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRmModelDAO(ModelDAO rmModelDao)
|
|
||||||
{
|
|
||||||
this.rmModelDao = rmModelDao;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAnyDenyDenies(boolean anyDenyDenies)
|
|
||||||
{
|
|
||||||
super.setAnyDenyDenies(anyDenyDenies);
|
|
||||||
rmReadersCache.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getReaders(Long aclId)
|
|
||||||
{
|
|
||||||
Set<String> dmReaders = super.getReaders(aclId);
|
|
||||||
|
|
||||||
Set<String> rmReaders = rmReadersCache.get(aclId);
|
|
||||||
if (rmReaders == null)
|
|
||||||
{
|
|
||||||
rmReaders = buildRMReaders(aclId);
|
|
||||||
rmReadersCache.put(aclId, rmReaders);
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<String> result = new HashSet<String>();
|
|
||||||
result.addAll(dmReaders);
|
|
||||||
result.addAll(rmReaders);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Set<String> buildRMReaders(Long aclId)
|
|
||||||
{
|
|
||||||
AccessControlList acl = rmAclDaoComponent.getAccessControlList(aclId);
|
|
||||||
if (acl == null)
|
|
||||||
{
|
|
||||||
return Collections.emptySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
HashSet<String> assigned = new HashSet<String>();
|
|
||||||
HashSet<String> readers = new HashSet<String>();
|
|
||||||
|
|
||||||
for (AccessControlEntry ace : acl.getEntries())
|
|
||||||
{
|
|
||||||
assigned.add(ace.getAuthority());
|
|
||||||
}
|
|
||||||
|
|
||||||
PermissionReference permissionRef = getPermissionReference(RMPermissionModel.READ_RECORDS);
|
|
||||||
|
|
||||||
for (String authority : assigned)
|
|
||||||
{
|
|
||||||
RMUnconditionalAclTest rmTest = new RMUnconditionalAclTest(permissionRef);
|
|
||||||
if (rmTest.evaluate(authority, aclId))
|
|
||||||
{
|
|
||||||
readers.add(authority);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.unmodifiableSet(readers);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ignores type and aspect requirements on the node
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private class RMUnconditionalAclTest
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The required permission.
|
|
||||||
*/
|
|
||||||
PermissionReference required;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Granters of the permission
|
|
||||||
*/
|
|
||||||
Set<PermissionReference> granters;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The additional permissions required at the node level.
|
|
||||||
*/
|
|
||||||
Set<PermissionReference> nodeRequirements = new HashSet<PermissionReference>();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Constructor just gets the additional requirements
|
|
||||||
*/
|
|
||||||
RMUnconditionalAclTest(PermissionReference required)
|
|
||||||
{
|
|
||||||
this.required = required;
|
|
||||||
|
|
||||||
// Set the required node permissions
|
|
||||||
if (required.equals(getPermissionReference(ALL_PERMISSIONS)))
|
|
||||||
{
|
|
||||||
nodeRequirements = rmModelDao.getUnconditionalRequiredPermissions(getPermissionReference(PermissionService.FULL_CONTROL), RequiredPermission.On.NODE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nodeRequirements = rmModelDao.getUnconditionalRequiredPermissions(required, RequiredPermission.On.NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rmModelDao.getUnconditionalRequiredPermissions(required, RequiredPermission.On.PARENT).size() > 0)
|
|
||||||
{
|
|
||||||
throw new IllegalStateException("Parent permissions can not be checked for an acl");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rmModelDao.getUnconditionalRequiredPermissions(required, RequiredPermission.On.CHILDREN).size() > 0)
|
|
||||||
{
|
|
||||||
throw new IllegalStateException("Child permissions can not be checked for an acl");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find all the permissions that grant the allowed permission
|
|
||||||
// All permissions are treated specially.
|
|
||||||
granters = new LinkedHashSet<PermissionReference>(128, 1.0f);
|
|
||||||
granters.addAll(rmModelDao.getGrantingPermissions(required));
|
|
||||||
granters.add(getAllPermissionReference());
|
|
||||||
granters.add(RM_OLD_ALL_PERMISSIONS_REFERENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal hook point for recursion
|
|
||||||
*
|
|
||||||
* @param authorisations
|
|
||||||
* @param nodeRef
|
|
||||||
* @param denied
|
|
||||||
* @param recursiveIn
|
|
||||||
* @return true if granted
|
|
||||||
*/
|
|
||||||
boolean evaluate(String authority, Long aclId)
|
|
||||||
{
|
|
||||||
// Start out true and "and" all other results
|
|
||||||
boolean success = true;
|
|
||||||
|
|
||||||
// Check the required permissions but not for sets they rely on
|
|
||||||
// their underlying permissions
|
|
||||||
//if (modelDAO.checkPermission(required))
|
|
||||||
//{
|
|
||||||
|
|
||||||
// We have to do the test as no parent will help us out
|
|
||||||
success &= hasSinglePermission(authority, aclId);
|
|
||||||
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
|
|
||||||
// Check the other permissions required on the node
|
|
||||||
for (PermissionReference pr : nodeRequirements)
|
|
||||||
{
|
|
||||||
// Build a new test
|
|
||||||
RMUnconditionalAclTest nt = new RMUnconditionalAclTest(pr);
|
|
||||||
success &= nt.evaluate(authority, aclId);
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean hasSinglePermission(String authority, Long aclId)
|
|
||||||
{
|
|
||||||
// Check global permission
|
|
||||||
|
|
||||||
if (checkGlobalPermissions(authority))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(aclId == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return checkRequired(authority, aclId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if we have a global permission
|
|
||||||
*
|
|
||||||
* @param authorisations
|
|
||||||
* @return true if granted
|
|
||||||
*/
|
|
||||||
private boolean checkGlobalPermissions(String authority)
|
|
||||||
{
|
|
||||||
for (PermissionEntry pe : rmModelDao.getGlobalPermissionEntries())
|
|
||||||
{
|
|
||||||
if (isGranted(pe, authority))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that a given authentication is available on a node
|
|
||||||
*
|
|
||||||
* @param authorisations
|
|
||||||
* @param nodeRef
|
|
||||||
* @param denied
|
|
||||||
* @return true if a check is required
|
|
||||||
*/
|
|
||||||
boolean checkRequired(String authority, Long aclId)
|
|
||||||
{
|
|
||||||
AccessControlList acl = rmAclDaoComponent.getAccessControlList(aclId);
|
|
||||||
|
|
||||||
if (acl == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<Pair<String, PermissionReference>> denied = new HashSet<Pair<String, PermissionReference>>();
|
|
||||||
|
|
||||||
// Check if each permission allows - the first wins.
|
|
||||||
// We could have other voting style mechanisms here
|
|
||||||
for (AccessControlEntry ace : acl.getEntries())
|
|
||||||
{
|
|
||||||
if (isGranted(ace, authority, denied))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a permission granted
|
|
||||||
*
|
|
||||||
* @param pe -
|
|
||||||
* the permissions entry to consider
|
|
||||||
* @param granters -
|
|
||||||
* the set of granters
|
|
||||||
* @param authorisations -
|
|
||||||
* the set of authorities
|
|
||||||
* @param denied -
|
|
||||||
* the set of denied permissions/authority pais
|
|
||||||
* @return true if granted
|
|
||||||
*/
|
|
||||||
private boolean isGranted(AccessControlEntry ace, String authority, Set<Pair<String, PermissionReference>> denied)
|
|
||||||
{
|
|
||||||
// If the permission entry denies then we just deny
|
|
||||||
if (ace.getAccessStatus() == AccessStatus.DENIED)
|
|
||||||
{
|
|
||||||
denied.add(new Pair<String, PermissionReference>(ace.getAuthority(), ace.getPermission()));
|
|
||||||
|
|
||||||
Set<PermissionReference> granters = rmModelDao.getGrantingPermissions(ace.getPermission());
|
|
||||||
for (PermissionReference granter : granters)
|
|
||||||
{
|
|
||||||
denied.add(new Pair<String, PermissionReference>(ace.getAuthority(), granter));
|
|
||||||
}
|
|
||||||
|
|
||||||
// All the things granted by this permission must be
|
|
||||||
// denied
|
|
||||||
Set<PermissionReference> grantees = rmModelDao.getGranteePermissions(ace.getPermission());
|
|
||||||
for (PermissionReference grantee : grantees)
|
|
||||||
{
|
|
||||||
denied.add(new Pair<String, PermissionReference>(ace.getAuthority(), grantee));
|
|
||||||
}
|
|
||||||
|
|
||||||
// All permission excludes all permissions available for
|
|
||||||
// the node.
|
|
||||||
if (ace.getPermission().equals(getAllPermissionReference()) || ace.getPermission().equals(RM_OLD_ALL_PERMISSIONS_REFERENCE))
|
|
||||||
{
|
|
||||||
for (PermissionReference deny : rmModelDao.getAllPermissions())
|
|
||||||
{
|
|
||||||
denied.add(new Pair<String, PermissionReference>(ace.getAuthority(), deny));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The permission is allowed but we deny it as it is in the denied
|
|
||||||
// set
|
|
||||||
|
|
||||||
if (denied != null)
|
|
||||||
{
|
|
||||||
Pair<String, PermissionReference> specific = new Pair<String, PermissionReference>(ace.getAuthority(), required);
|
|
||||||
if (denied.contains(specific))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the permission has a match in both the authorities and
|
|
||||||
// granters list it is allowed
|
|
||||||
// It applies to the current user and it is granted
|
|
||||||
if (authority.equals(ace.getAuthority()) && granters.contains(ace.getPermission()))
|
|
||||||
{
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default deny
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isGranted(PermissionEntry pe, String authority)
|
|
||||||
{
|
|
||||||
// If the permission entry denies then we just deny
|
|
||||||
if (pe.isDenied())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the permission has a match in both the authorities and
|
|
||||||
// granters list it is allowed
|
|
||||||
// It applies to the current user and it is granted
|
|
||||||
if (granters.contains(pe.getPermissionReference()) && authority.equals(pe.getAuthority()))
|
|
||||||
{
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default deny
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -33,8 +33,8 @@ 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.DispositionSchedule;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
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.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.model.RmSiteType;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.Role;
|
import org.alfresco.module.org_alfresco_module_rm.security.Role;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
@@ -5,7 +5,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService;
|
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
@@ -7,7 +7,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSet;
|
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSet;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService;
|
import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
@@ -20,28 +20,28 @@ package org.alfresco.module.org_alfresco_module_rm.script;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.model.RenditionModel;
|
import org.alfresco.model.RenditionModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
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.repo.exporter.ACPExportPackageHandler;
|
import org.alfresco.repo.exporter.ACPExportPackageHandler;
|
||||||
import org.alfresco.repo.web.scripts.content.StreamACP;
|
import org.alfresco.repo.web.scripts.content.StreamACP;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.view.ExporterCrawlerParameters;
|
import org.alfresco.service.cmr.view.ExporterCrawlerParameters;
|
||||||
import org.alfresco.service.cmr.view.Location;
|
import org.alfresco.service.cmr.view.Location;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.springframework.extensions.webscripts.Status;
|
|
||||||
import org.springframework.extensions.webscripts.WebScriptException;
|
|
||||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
|
||||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.json.JSONTokener;
|
import org.json.JSONTokener;
|
||||||
|
import org.springframework.extensions.webscripts.Status;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptException;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an RM specific ACP file of nodes to export then streams it back
|
* Creates an RM specific ACP file of nodes to export then streams it back
|
||||||
|
@@ -24,7 +24,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
@@ -41,7 +41,7 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
|
|||||||
{
|
{
|
||||||
protected DictionaryService dictionaryService;
|
protected DictionaryService dictionaryService;
|
||||||
protected NamespaceService namespaceService;
|
protected NamespaceService namespaceService;
|
||||||
protected RecordsManagementService recordsManagementService;
|
protected RecordService recordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the dictionary service instance
|
* Set the dictionary service instance
|
||||||
@@ -62,10 +62,13 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
|
|||||||
{
|
{
|
||||||
this.namespaceService = namespaceService;
|
this.namespaceService = namespaceService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
{
|
{
|
||||||
this.recordsManagementService = recordsManagementService;
|
this.recordService = recordService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -75,7 +78,7 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
|
|||||||
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
|
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
|
||||||
{
|
{
|
||||||
// Get the details of all the aspects
|
// Get the details of all the aspects
|
||||||
Set<QName> aspectQNames = recordsManagementService.getRecordMetaDataAspects();
|
Set<QName> aspectQNames = recordService.getRecordMetaDataAspects();
|
||||||
List<Map<String, Object>> aspects = new ArrayList<Map<String,Object>>(aspectQNames.size()+1);
|
List<Map<String, Object>> aspects = new ArrayList<Map<String,Object>>(aspectQNames.size()+1);
|
||||||
for (QName aspectQName : aspectQNames)
|
for (QName aspectQName : aspectQNames)
|
||||||
{
|
{
|
||||||
|
@@ -24,17 +24,17 @@ import java.io.IOException;
|
|||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.model.RenditionModel;
|
import org.alfresco.model.RenditionModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
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.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.view.ExporterCrawlerParameters;
|
import org.alfresco.service.cmr.view.ExporterCrawlerParameters;
|
||||||
import org.alfresco.service.cmr.view.Location;
|
import org.alfresco.service.cmr.view.Location;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.extensions.webscripts.Cache;
|
import org.springframework.extensions.webscripts.Cache;
|
||||||
import org.springframework.extensions.webscripts.Status;
|
import org.springframework.extensions.webscripts.Status;
|
||||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Streams the nodes of a transfer object to the client in the form of an
|
* Streams the nodes of a transfer object to the client in the form of an
|
||||||
|
@@ -25,7 +25,7 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
|
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.record.RecordService;
|
||||||
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||||
@@ -43,35 +43,45 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
|
|||||||
*/
|
*/
|
||||||
public class RMSearchPropertiesGet extends DeclarativeWebScript
|
public class RMSearchPropertiesGet extends DeclarativeWebScript
|
||||||
{
|
{
|
||||||
private RecordsManagementAdminService adminService;
|
/** Services */
|
||||||
|
private RecordsManagementAdminService adminService;
|
||||||
private RecordsManagementService recordsManagementService;
|
private RecordService recordService;
|
||||||
|
private DictionaryService dictionaryService;
|
||||||
private DictionaryService dictionaryService;
|
|
||||||
|
|
||||||
private NamespaceService namespaceService;
|
private NamespaceService namespaceService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param adminService records management admin service
|
||||||
|
*/
|
||||||
public void setAdminService(RecordsManagementAdminService adminService)
|
public void setAdminService(RecordsManagementAdminService adminService)
|
||||||
{
|
{
|
||||||
this.adminService = adminService;
|
this.adminService = adminService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
{
|
{
|
||||||
this.recordsManagementService = recordsManagementService;
|
this.recordService = recordService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param dictionaryService dictionary service
|
||||||
|
*/
|
||||||
public void setDictionaryService(DictionaryService dictionaryService)
|
public void setDictionaryService(DictionaryService dictionaryService)
|
||||||
{
|
{
|
||||||
this.dictionaryService = dictionaryService;
|
this.dictionaryService = dictionaryService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param namespaceService namespace service
|
||||||
|
*/
|
||||||
public void setNamespaceService(NamespaceService namespaceService)
|
public void setNamespaceService(NamespaceService namespaceService)
|
||||||
{
|
{
|
||||||
this.namespaceService = namespaceService;
|
this.namespaceService = namespaceService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
|
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -81,7 +91,7 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
|
|||||||
|
|
||||||
List<Group> groups = new ArrayList<Group>(5);
|
List<Group> groups = new ArrayList<Group>(5);
|
||||||
|
|
||||||
Set<QName> aspects = recordsManagementService.getRecordMetaDataAspects();
|
Set<QName> aspects = recordService.getRecordMetaDataAspects();
|
||||||
for (QName aspect : aspects)
|
for (QName aspect : aspects)
|
||||||
{
|
{
|
||||||
Map<QName, PropertyDefinition> properties = dictionaryService.getPropertyDefs(aspect);
|
Map<QName, PropertyDefinition> properties = dictionaryService.getPropertyDefs(aspect);
|
||||||
|
@@ -392,25 +392,25 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
|
|||||||
{
|
{
|
||||||
public Object doWork()
|
public Object doWork()
|
||||||
{
|
{
|
||||||
Set<AccessPermission> perms = permissionService.getAllSetPermissions(catNodeRef);
|
Set<AccessPermission> perms = permissionService.getAllSetPermissions(catNodeRef);
|
||||||
for (AccessPermission perm : perms)
|
for (AccessPermission perm : perms)
|
||||||
{
|
{
|
||||||
if (ExtendedReaderDynamicAuthority.EXTENDED_READER.equals(perm.getAuthority()) == false)
|
if (ExtendedReaderDynamicAuthority.EXTENDED_READER.equals(perm.getAuthority()) == false)
|
||||||
{
|
{
|
||||||
AccessStatus accessStatus = perm.getAccessStatus();
|
AccessStatus accessStatus = perm.getAccessStatus();
|
||||||
boolean allow = false;
|
boolean allow = false;
|
||||||
if (AccessStatus.ALLOWED.equals(accessStatus) == true)
|
if (AccessStatus.ALLOWED.equals(accessStatus) == true)
|
||||||
{
|
{
|
||||||
allow = true;
|
allow = true;
|
||||||
}
|
}
|
||||||
permissionService.setPermission(
|
permissionService.setPermission(
|
||||||
folderNodeRef,
|
folderNodeRef,
|
||||||
perm.getAuthority(),
|
perm.getAuthority(),
|
||||||
perm.getPermission(),
|
perm.getPermission(),
|
||||||
allow);
|
allow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}, AuthenticationUtil.getSystemUserName());
|
}, AuthenticationUtil.getSystemUserName());
|
||||||
|
@@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
package org.alfresco.module.org_alfresco_module_rm.test.service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Records management security service test.
|
||||||
|
*
|
||||||
|
* @author Roy Wetherall
|
||||||
|
*/
|
||||||
|
public class NewRecordsManagementSecurityServiceImplTest extends BaseRMTestCase
|
||||||
|
{
|
||||||
|
private NodeRef record;
|
||||||
|
private NodeRef recordToo;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isUserTest()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setupTestDataImpl()
|
||||||
|
{
|
||||||
|
super.setupTestDataImpl();
|
||||||
|
|
||||||
|
record = utils.createRecord(rmFolder, "record.txt");
|
||||||
|
recordToo = utils.createRecord(rmFolder, "recordToo.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TODO testGetProtectedAspects
|
||||||
|
|
||||||
|
// TODO getProtectedProperties
|
||||||
|
|
||||||
|
// TODO bootstrapDefaultRoles
|
||||||
|
|
||||||
|
// TODO getRoles
|
||||||
|
|
||||||
|
// TODO getRolesByUser
|
||||||
|
|
||||||
|
// TODO getRole
|
||||||
|
|
||||||
|
// TODO existsRole
|
||||||
|
|
||||||
|
// TODO hasRMAdminRole
|
||||||
|
|
||||||
|
// TODO createRole
|
||||||
|
|
||||||
|
// TODO updateRole
|
||||||
|
|
||||||
|
// TODO deleteRole
|
||||||
|
|
||||||
|
// TODO assignRoleToAuthority
|
||||||
|
|
||||||
|
// TODO setPermission
|
||||||
|
|
||||||
|
// TODO deletePermission
|
||||||
|
|
||||||
|
public void testExtendedReaders()
|
||||||
|
{
|
||||||
|
doTestInTransaction(new Test<Void>()
|
||||||
|
{
|
||||||
|
public Void run()
|
||||||
|
{
|
||||||
|
assertFalse(hasExtendedReadersAspect(filePlan));
|
||||||
|
assertFalse(hasExtendedReadersAspect(rmContainer));
|
||||||
|
assertFalse(hasExtendedReadersAspect(rmFolder));
|
||||||
|
assertFalse(hasExtendedReadersAspect(record));
|
||||||
|
|
||||||
|
assertNull(securityService.getExtendedReaders(record));
|
||||||
|
|
||||||
|
Set<String> extendedReaders = new HashSet<String>(2);
|
||||||
|
extendedReaders.add("monkey");
|
||||||
|
extendedReaders.add("elephant");
|
||||||
|
|
||||||
|
securityService.setExtendedReaders(record, extendedReaders);
|
||||||
|
|
||||||
|
Map<String, Integer> testMap = new HashMap<String, Integer>(2);
|
||||||
|
testMap.put("monkey", Integer.valueOf(1));
|
||||||
|
testMap.put("elephant", Integer.valueOf(1));
|
||||||
|
|
||||||
|
test(filePlan, testMap);
|
||||||
|
test(rmContainer, testMap);
|
||||||
|
test(rmFolder, testMap);
|
||||||
|
test(record, testMap);
|
||||||
|
|
||||||
|
Set<String> extendedReadersToo = new HashSet<String>(2);
|
||||||
|
extendedReadersToo.add("monkey");
|
||||||
|
extendedReadersToo.add("snake");
|
||||||
|
|
||||||
|
securityService.setExtendedReaders(recordToo, extendedReadersToo);
|
||||||
|
|
||||||
|
Map<String, Integer> testMapToo = new HashMap<String, Integer>(2);
|
||||||
|
testMapToo.put("monkey", Integer.valueOf(1));
|
||||||
|
testMapToo.put("snake", Integer.valueOf(1));
|
||||||
|
|
||||||
|
Map<String, Integer> testMapThree = new HashMap<String, Integer>(3);
|
||||||
|
testMapThree.put("monkey", Integer.valueOf(2));
|
||||||
|
testMapThree.put("elephant", Integer.valueOf(1));
|
||||||
|
testMapThree.put("snake", Integer.valueOf(1));
|
||||||
|
|
||||||
|
test(filePlan, testMapThree);
|
||||||
|
test(rmContainer, testMapThree);
|
||||||
|
test(rmFolder, testMapThree);
|
||||||
|
test(recordToo, testMapToo);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasExtendedReadersAspect(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
return nodeService.hasAspect(nodeRef, ASPECT_EXTENDED_READERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test(NodeRef nodeRef, Map<String, Integer> testMap)
|
||||||
|
{
|
||||||
|
assertTrue(hasExtendedReadersAspect(nodeRef));
|
||||||
|
|
||||||
|
Map<String, Integer> readersMap = (Map<String,Integer>)nodeService.getProperty(nodeRef, PROP_READERS);
|
||||||
|
assertNotNull(readersMap);
|
||||||
|
assertEquals(testMap.size(), readersMap.size());
|
||||||
|
|
||||||
|
for (Map.Entry<String, Integer> entry: testMap.entrySet())
|
||||||
|
{
|
||||||
|
assertTrue(readersMap.containsKey(entry.getKey()));
|
||||||
|
assertEquals(entry.getValue(), readersMap.get(entry.getKey()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> readers = securityService.getExtendedReaders(nodeRef);
|
||||||
|
assertNotNull(readers);
|
||||||
|
assertEquals(testMap.size(), readers.size());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO getExtendedReaders
|
||||||
|
|
||||||
|
// TODO setExtendedReaders
|
||||||
|
|
||||||
|
// TODO removeExtendedReaders
|
||||||
|
|
||||||
|
// TODO removeAllExtendedReaders
|
||||||
|
}
|
@@ -0,0 +1,173 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.alfresco.module.org_alfresco_module_rm.test.service;
|
||||||
|
|
||||||
|
import org.alfresco.model.ContentModel;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
import org.alfresco.repo.site.SiteModel;
|
||||||
|
import org.alfresco.repo.site.SiteServiceImpl;
|
||||||
|
import org.alfresco.service.cmr.action.Action;
|
||||||
|
import org.alfresco.service.cmr.action.ActionService;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
|
import org.alfresco.service.cmr.tagging.TaggingService;
|
||||||
|
import org.alfresco.util.GUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Record service implementation unit test.
|
||||||
|
*
|
||||||
|
* @author Roy Wetherall
|
||||||
|
*/
|
||||||
|
public class RecordServiceTestImpl extends BaseRMTestCase
|
||||||
|
{
|
||||||
|
protected static final String COLLABORATION_SITE_ID = "collab-site-id";
|
||||||
|
|
||||||
|
protected ActionService dmActionService;
|
||||||
|
protected TaggingService taggingService;
|
||||||
|
protected PermissionService dmPermissionService;
|
||||||
|
|
||||||
|
protected SiteInfo collaborationSite;
|
||||||
|
protected NodeRef documentLibrary;
|
||||||
|
protected NodeRef dmFolder;
|
||||||
|
protected NodeRef dmDocument;
|
||||||
|
|
||||||
|
protected String dmUserName;
|
||||||
|
protected NodeRef dmUserPerson;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initServices()
|
||||||
|
{
|
||||||
|
super.initServices();
|
||||||
|
|
||||||
|
dmActionService = (ActionService)applicationContext.getBean("ActionService");
|
||||||
|
taggingService = (TaggingService)applicationContext.getBean("TaggingService");
|
||||||
|
dmPermissionService = (PermissionService)applicationContext.getBean("PermissionService");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isUserTest()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setupTestData()
|
||||||
|
{
|
||||||
|
super.setupTestData();
|
||||||
|
|
||||||
|
doTestInTransaction(new Test<Void>()
|
||||||
|
{
|
||||||
|
public Void run()
|
||||||
|
{
|
||||||
|
setupCollaborationSiteTestDataImpl();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
AuthenticationUtil.getSystemUserName());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setupCollaborationSiteTestDataImpl()
|
||||||
|
{
|
||||||
|
// create collaboration site
|
||||||
|
collaborationSite = siteService.createSite("preset", COLLABORATION_SITE_ID, "title", "description", SiteVisibility.PRIVATE);
|
||||||
|
documentLibrary = SiteServiceImpl.getSiteContainer(
|
||||||
|
COLLABORATION_SITE_ID,
|
||||||
|
SiteService.DOCUMENT_LIBRARY,
|
||||||
|
true,
|
||||||
|
siteService,
|
||||||
|
transactionService,
|
||||||
|
taggingService);
|
||||||
|
|
||||||
|
assertNotNull("Collaboration site document library component was not successfully created.", documentLibrary);
|
||||||
|
|
||||||
|
// create a folder and documents
|
||||||
|
dmFolder = fileFolderService.create(documentLibrary, "collabFolder", ContentModel.TYPE_FOLDER).getNodeRef();
|
||||||
|
dmDocument = fileFolderService.create(dmFolder, "collabDocument.txt", ContentModel.TYPE_CONTENT).getNodeRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setupTestUsersImpl(NodeRef filePlan)
|
||||||
|
{
|
||||||
|
super.setupTestUsersImpl(filePlan);
|
||||||
|
|
||||||
|
dmUserName = GUID.generate();
|
||||||
|
dmUserPerson = createPerson(dmUserName);
|
||||||
|
siteService.setMembership(COLLABORATION_SITE_ID, dmUserName, SiteModel.SITE_COLLABORATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tearDownImpl()
|
||||||
|
{
|
||||||
|
super.tearDownImpl();
|
||||||
|
siteService.deleteSite(COLLABORATION_SITE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateRecordAction()
|
||||||
|
{
|
||||||
|
doTestInTransaction(new Test<Void>()
|
||||||
|
{
|
||||||
|
public Void run()
|
||||||
|
{
|
||||||
|
assertEquals(AccessStatus.DENIED, dmPermissionService.hasPermission(dmDocument, RMPermissionModel.READ_RECORDS));
|
||||||
|
assertEquals(AccessStatus.DENIED, dmPermissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
|
||||||
|
|
||||||
|
Action action = dmActionService.createAction(CreateRecordAction.NAME);
|
||||||
|
dmActionService.executeAction(action, dmDocument);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test(Void result) throws Exception
|
||||||
|
{
|
||||||
|
assertEquals(AccessStatus.ALLOWED, dmPermissionService.hasPermission(dmDocument, RMPermissionModel.READ_RECORDS));
|
||||||
|
assertEquals(AccessStatus.ALLOWED, dmPermissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
|
||||||
|
|
||||||
|
assertTrue(rmService.isRecord(dmDocument));
|
||||||
|
|
||||||
|
//
|
||||||
|
Capability createCapability = capabilityService.getCapability("Create");
|
||||||
|
assertNotNull(createCapability);
|
||||||
|
createCapability.evaluate(dmDocument);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
dmUserName);
|
||||||
|
|
||||||
|
doTestInTransaction(new Test<Void>()
|
||||||
|
{
|
||||||
|
public Void run()
|
||||||
|
{
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -56,7 +56,7 @@ import org.alfresco.util.GUID;
|
|||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event service implementation unit test
|
* Security service implementation unit test
|
||||||
*
|
*
|
||||||
* @author Roy Wetherall
|
* @author Roy Wetherall
|
||||||
*/
|
*/
|
||||||
|
@@ -574,10 +574,7 @@ public class RecordsManagementServiceImplTest extends BaseRMTestCase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/********** Record methods **********/
|
|
||||||
|
|
||||||
// TODO void testGetRecordFolders(NodeRef record);
|
|
||||||
|
|
||||||
/********** RM2 - Multi-hierarchy record taxonomy's **********/
|
/********** RM2 - Multi-hierarchy record taxonomy's **********/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -20,7 +20,7 @@ package org.alfresco.module.org_alfresco_module_rm.test.service;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
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.test.util.BaseRMTestCase;
|
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition;
|
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,812 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.alfresco.module.org_alfresco_module_rm.test.system;
|
|
||||||
|
|
||||||
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 javax.transaction.UserTransaction;
|
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.action.impl.BroadcastDispositionActionDefinitionUpdateAction;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.action.impl.FileAction;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition;
|
|
||||||
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.event.RecordsManagementEvent;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.test.util.TestUtilities;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
|
||||||
import org.alfresco.service.cmr.model.FileFolderService;
|
|
||||||
import org.alfresco.service.cmr.model.FileInfo;
|
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
|
||||||
import org.alfresco.service.cmr.repository.Period;
|
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
|
||||||
import org.alfresco.service.cmr.search.SearchService;
|
|
||||||
import org.alfresco.service.namespace.NamespaceService;
|
|
||||||
import org.alfresco.service.namespace.QName;
|
|
||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
|
||||||
import org.alfresco.util.BaseSpringTest;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* System test for records management service.
|
|
||||||
*
|
|
||||||
* Awaiting refactoring into records management test.
|
|
||||||
*
|
|
||||||
* @author Roy Wetherall
|
|
||||||
*/
|
|
||||||
public class RecordsManagementServiceImplSystemTest extends BaseSpringTest implements RecordsManagementModel
|
|
||||||
{
|
|
||||||
protected static StoreRef SPACES_STORE = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
|
|
||||||
|
|
||||||
private NodeRef filePlan;
|
|
||||||
|
|
||||||
private FileFolderService fileFolderService;
|
|
||||||
private NodeService nodeService;
|
|
||||||
private NodeService unprotectedNodeService;
|
|
||||||
private RecordsManagementActionService rmActionService;
|
|
||||||
private RecordsManagementService rmService;
|
|
||||||
private SearchService searchService;
|
|
||||||
private TransactionService transactionService;
|
|
||||||
private RetryingTransactionHelper transactionHelper;
|
|
||||||
private DispositionService dispositionService;
|
|
||||||
private VitalRecordService vitalRecordService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onSetUpInTransaction() throws Exception
|
|
||||||
{
|
|
||||||
super.onSetUpInTransaction();
|
|
||||||
|
|
||||||
// Get the service required in the tests
|
|
||||||
this.fileFolderService = (FileFolderService)this.applicationContext.getBean("FileFolderService");
|
|
||||||
this.nodeService = (NodeService)this.applicationContext.getBean("NodeService");
|
|
||||||
this.unprotectedNodeService = (NodeService)this.applicationContext.getBean("nodeService");
|
|
||||||
this.transactionService = (TransactionService)this.applicationContext.getBean("TransactionService");
|
|
||||||
this.searchService = (SearchService)this.applicationContext.getBean("searchService");
|
|
||||||
this.rmActionService = (RecordsManagementActionService)this.applicationContext.getBean("recordsManagementActionService");
|
|
||||||
this.rmService = (RecordsManagementService)this.applicationContext.getBean("recordsManagementService");
|
|
||||||
this.transactionHelper = (RetryingTransactionHelper)this.applicationContext.getBean("retryingTransactionHelper");
|
|
||||||
this.dispositionService = (DispositionService)this.applicationContext.getBean("dispositionService");
|
|
||||||
vitalRecordService = (VitalRecordService)applicationContext.getBean("VitalRecordService");
|
|
||||||
|
|
||||||
// Set the current security context as admin
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
|
||||||
|
|
||||||
// Get the test data
|
|
||||||
setUpTestData();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpTestData()
|
|
||||||
{
|
|
||||||
filePlan = TestUtilities.loadFilePlanData(applicationContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onTearDownInTransaction() throws Exception
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
UserTransaction txn = transactionService.getUserTransaction(false);
|
|
||||||
txn.begin();
|
|
||||||
this.nodeService.deleteNode(filePlan);
|
|
||||||
txn.commit();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
// Nothing
|
|
||||||
//System.out.println("DID NOT DELETE FILE PLAN!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDispositionPresence() throws Exception
|
|
||||||
{
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
// create a record category node in
|
|
||||||
final NodeRef nodeRef = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef rootNode = nodeService.getRootNode(SPACES_STORE);
|
|
||||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
|
||||||
String recordCategoryName = "Test Record Category";
|
|
||||||
props.put(ContentModel.PROP_NAME, recordCategoryName);
|
|
||||||
NodeRef result = nodeService.createNode(rootNode, ContentModel.ASSOC_CHILDREN,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(recordCategoryName)),
|
|
||||||
TYPE_RECORD_CATEGORY, props).getChildRef();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// ensure the record category node has the scheduled aspect and the disposition schedule association
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
assertTrue(nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_SCHEDULED));
|
|
||||||
List<ChildAssociationRef> scheduleAssocs = nodeService.getChildAssocs(nodeRef, ASSOC_DISPOSITION_SCHEDULE, RegexQNamePattern.MATCH_ALL);
|
|
||||||
|
|
||||||
|
|
||||||
assertNotNull(scheduleAssocs);
|
|
||||||
assertEquals(1, scheduleAssocs.size());
|
|
||||||
|
|
||||||
// test retrieval of the disposition schedule via RM service
|
|
||||||
DispositionSchedule schedule = dispositionService.getDispositionSchedule(nodeRef);
|
|
||||||
assertNotNull(schedule);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This test method contains a subset of the tests in TC 7-2 of the DoD doc.
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public void testRescheduleRecord_IsNotCutOff() throws Exception
|
|
||||||
{
|
|
||||||
final NodeRef recCat = TestUtilities.getRecordCategory(rmService, nodeService, "Reports", "AIS Audit Records");
|
|
||||||
// This RC has disposition instructions "Cut off monthly, hold 1 month, then destroy."
|
|
||||||
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
// Create a suitable folder for this test.
|
|
||||||
final NodeRef testFolder = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
Map<QName, Serializable> folderProps = new HashMap<QName, Serializable>(1);
|
|
||||||
String folderName = "testFolder" + System.currentTimeMillis();
|
|
||||||
folderProps.put(ContentModel.PROP_NAME, folderName);
|
|
||||||
NodeRef recordFolder = nodeService.createNode(recCat,
|
|
||||||
ContentModel.ASSOC_CONTAINS,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, folderName),
|
|
||||||
TYPE_RECORD_FOLDER).getChildRef();
|
|
||||||
return recordFolder;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a record in the test folder. File it and declare it.
|
|
||||||
final NodeRef testRecord = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
final NodeRef result = nodeService.createNode(testFolder, ContentModel.ASSOC_CONTAINS,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
|
||||||
"Record" + System.currentTimeMillis() + ".txt"),
|
|
||||||
ContentModel.TYPE_CONTENT).getChildRef();
|
|
||||||
|
|
||||||
rmActionService.executeRecordsManagementAction(result, "file");
|
|
||||||
TestUtilities.declareRecord(result, unprotectedNodeService, rmActionService);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
assertTrue("recCat missing scheduled aspect", nodeService.hasAspect(recCat, RecordsManagementModel.ASPECT_SCHEDULED));
|
|
||||||
assertFalse("folder should not have scheduled aspect", nodeService.hasAspect(testFolder, RecordsManagementModel.ASPECT_SCHEDULED));
|
|
||||||
assertFalse("record should not have scheduled aspect", nodeService.hasAspect(testRecord, RecordsManagementModel.ASPECT_SCHEDULED));
|
|
||||||
|
|
||||||
assertFalse("recCat should not have dispositionLifecycle aspect", nodeService.hasAspect(recCat, RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
assertTrue("testFolder missing dispositionLifecycle aspect", nodeService.hasAspect(testFolder, RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
assertFalse("testRecord should not have dispositionLifecycle aspect", nodeService.hasAspect(testRecord, RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
|
|
||||||
// Change the cutoff conditions for the associated record category
|
|
||||||
final Date dateBeforeChange = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Date>()
|
|
||||||
{
|
|
||||||
public Date execute() throws Throwable
|
|
||||||
{
|
|
||||||
Date asOfDate = dispositionService.getNextDispositionAction(testFolder).getAsOfDate();
|
|
||||||
System.out.println("Going to change the disposition asOf Date.");
|
|
||||||
System.out.println(" - Original value: " + asOfDate);
|
|
||||||
|
|
||||||
// Now change "Cut off monthly, hold 1 month, then destroy."
|
|
||||||
// to "Cut off yearly, hold 1 month, then destroy."
|
|
||||||
List<DispositionActionDefinition> dads = dispositionService.getDispositionSchedule(testFolder).getDispositionActionDefinitions();
|
|
||||||
DispositionActionDefinition firstDAD = dads.get(0);
|
|
||||||
assertEquals("cutoff", firstDAD.getName());
|
|
||||||
NodeRef dadNode = firstDAD.getNodeRef();
|
|
||||||
|
|
||||||
nodeService.setProperty(dadNode, PROP_DISPOSITION_PERIOD, new Period("year|1"));
|
|
||||||
|
|
||||||
List<QName> updatedProps = new ArrayList<QName>(1);
|
|
||||||
updatedProps.add(PROP_DISPOSITION_PERIOD);
|
|
||||||
refreshDispositionActionDefinition(dadNode, updatedProps);
|
|
||||||
|
|
||||||
return asOfDate;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// view the record metadata to verify that the record has been rescheduled.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
DispositionAction nextDispositionAction = dispositionService.getNextDispositionAction(testFolder);
|
|
||||||
|
|
||||||
assertEquals("cutoff", nextDispositionAction.getName());
|
|
||||||
Date asOfDateAfterChange = nextDispositionAction.getAsOfDate();
|
|
||||||
System.out.println(" - Updated value: " + asOfDateAfterChange);
|
|
||||||
|
|
||||||
assertFalse("Expected disposition asOf date to change.", asOfDateAfterChange.equals(dateBeforeChange));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Change the disposition type (e.g. time-based to event-based)
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
List<RecordsManagementEvent> rmes = dispositionService.getNextDispositionAction(testFolder).getDispositionActionDefinition().getEvents();
|
|
||||||
System.out.println("Going to change the RMEs.");
|
|
||||||
System.out.println(" - Original value: " + rmes);
|
|
||||||
|
|
||||||
List<DispositionActionDefinition> dads = dispositionService.getDispositionSchedule(testFolder).getDispositionActionDefinitions();
|
|
||||||
DispositionActionDefinition firstDAD = dads.get(0);
|
|
||||||
assertEquals("cutoff", firstDAD.getName());
|
|
||||||
NodeRef dadNode = firstDAD.getNodeRef();
|
|
||||||
|
|
||||||
// nodeService.setProperty(dadNode, PROP_DISPOSITION_PERIOD, null);
|
|
||||||
List<String> eventNames= new ArrayList<String>();
|
|
||||||
eventNames.add("study_complete");
|
|
||||||
nodeService.setProperty(dadNode, PROP_DISPOSITION_EVENT, (Serializable)eventNames);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Now add a second event to the same
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
DispositionAction nextDispositionAction = dispositionService.getNextDispositionAction(testFolder);
|
|
||||||
StringBuilder buf = new StringBuilder();
|
|
||||||
for (RecordsManagementEvent e : nextDispositionAction.getDispositionActionDefinition().getEvents()) {
|
|
||||||
buf.append(e.getName()).append(',');
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("Going to change the RMEs again.");
|
|
||||||
System.out.println(" - Original value: " + buf.toString());
|
|
||||||
|
|
||||||
List<DispositionActionDefinition> dads = dispositionService.getDispositionSchedule(testFolder).getDispositionActionDefinitions();
|
|
||||||
DispositionActionDefinition firstDAD = dads.get(0);
|
|
||||||
assertEquals("cutoff", firstDAD.getName());
|
|
||||||
NodeRef dadNode = firstDAD.getNodeRef();
|
|
||||||
|
|
||||||
List<String> eventNames= new ArrayList<String>();
|
|
||||||
eventNames.add("study_complete");
|
|
||||||
eventNames.add("case_complete");
|
|
||||||
nodeService.setProperty(dadNode, PROP_DISPOSITION_EVENT, (Serializable)eventNames);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// View the record metadata to verify that the record has been rescheduled.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
DispositionAction nextDispositionAction = dispositionService.getNextDispositionAction(testFolder);
|
|
||||||
|
|
||||||
assertEquals("cutoff", nextDispositionAction.getName());
|
|
||||||
StringBuilder buf = new StringBuilder();
|
|
||||||
for (RecordsManagementEvent e : nextDispositionAction.getDispositionActionDefinition().getEvents()) {
|
|
||||||
buf.append(e.getName()).append(',');
|
|
||||||
}
|
|
||||||
System.out.println(" - Updated value: " + buf.toString());
|
|
||||||
|
|
||||||
assertFalse("Disposition should not be eligible.", nextDispositionAction.isEventsEligible());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tidy up test nodes.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
nodeService.deleteNode(testRecord);
|
|
||||||
|
|
||||||
// Change the disposition Period back to what it was.
|
|
||||||
List<DispositionActionDefinition> dads = dispositionService.getDispositionSchedule(testFolder).getDispositionActionDefinitions();
|
|
||||||
DispositionActionDefinition firstDAD = dads.get(0);
|
|
||||||
assertEquals("cutoff", firstDAD.getName());
|
|
||||||
NodeRef dadNode = firstDAD.getNodeRef();
|
|
||||||
nodeService.setProperty(dadNode, PROP_DISPOSITION_PERIOD, new Period("month|1"));
|
|
||||||
|
|
||||||
nodeService.deleteNode(testFolder);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshDispositionActionDefinition(NodeRef nodeRef, List<QName> updatedProps)
|
|
||||||
{
|
|
||||||
if (updatedProps != null)
|
|
||||||
{
|
|
||||||
Map<String, Serializable> params = new HashMap<String, Serializable>();
|
|
||||||
params.put(BroadcastDispositionActionDefinitionUpdateAction.CHANGED_PROPERTIES, (Serializable)updatedProps);
|
|
||||||
rmActionService.executeRecordsManagementAction(nodeRef, BroadcastDispositionActionDefinitionUpdateAction.NAME, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the unpublished update aspect
|
|
||||||
nodeService.removeAspect(nodeRef, ASPECT_UNPUBLISHED_UPDATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetDispositionInstructions() throws Exception
|
|
||||||
{
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
// Get a record
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
// Get a record folder
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef folderRecord = TestUtilities.getRecordFolder(rmService, nodeService, "Reports", "AIS Audit Records", "January AIS Audit Records");
|
|
||||||
assertNotNull(folderRecord);
|
|
||||||
assertEquals("January AIS Audit Records", nodeService.getProperty(folderRecord, ContentModel.PROP_NAME));
|
|
||||||
|
|
||||||
assertFalse(rmService.isRecord(folderRecord));
|
|
||||||
assertTrue(rmService.isRecordFolder(folderRecord));
|
|
||||||
assertFalse(rmService.isRecordCategory(folderRecord));
|
|
||||||
|
|
||||||
DispositionSchedule di = dispositionService.getDispositionSchedule(folderRecord);
|
|
||||||
assertNotNull(di);
|
|
||||||
assertEquals("N1-218-00-4 item 023", di.getDispositionAuthority());
|
|
||||||
assertEquals("Cut off monthly, hold 1 month, then destroy.", di.getDispositionInstructions());
|
|
||||||
assertFalse(di.isRecordLevelDisposition());
|
|
||||||
|
|
||||||
// Get a record category
|
|
||||||
NodeRef recordCategory = TestUtilities.getRecordCategory(rmService, nodeService, "Reports", "AIS Audit Records");
|
|
||||||
assertNotNull(recordCategory);
|
|
||||||
assertEquals("AIS Audit Records", nodeService.getProperty(recordCategory, ContentModel.PROP_NAME));
|
|
||||||
|
|
||||||
assertFalse(rmService.isRecord(recordCategory));
|
|
||||||
assertFalse(rmService.isRecordFolder(recordCategory));
|
|
||||||
assertTrue(rmService.isRecordCategory(recordCategory));
|
|
||||||
|
|
||||||
di = dispositionService.getDispositionSchedule(recordCategory);
|
|
||||||
assertNotNull(di);
|
|
||||||
assertEquals("N1-218-00-4 item 023", di.getDispositionAuthority());
|
|
||||||
assertEquals("Cut off monthly, hold 1 month, then destroy.", di.getDispositionInstructions());
|
|
||||||
assertFalse(di.isRecordLevelDisposition());
|
|
||||||
|
|
||||||
List<DispositionActionDefinition> das = di.getDispositionActionDefinitions();
|
|
||||||
assertNotNull(das);
|
|
||||||
assertEquals(2, das.size());
|
|
||||||
assertEquals("cutoff", das.get(0).getName());
|
|
||||||
assertEquals("destroy", das.get(1).getName());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testMoveRecordWithinFileplan()
|
|
||||||
{
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
// We need record folders for test-filing as follows:
|
|
||||||
// 1. A 'clean' record folder with no disposition schedult and no review period.
|
|
||||||
// 2. A 'vital' record folder which has a review period defined.
|
|
||||||
// 3. A 'dispositionable' record folder which has an applicable disposition schedule.
|
|
||||||
//
|
|
||||||
// The example fileplan includes a folder which covers [2] and [3] together.
|
|
||||||
|
|
||||||
final NodeRef cleanRecordFolder = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef result = TestUtilities.getRecordFolder(rmService, nodeService, "Civilian Files", "Case Files and Papers", "Gilbert Competency Hearing");
|
|
||||||
assertNotNull("cleanRecordFolder was null", result);
|
|
||||||
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(result);
|
|
||||||
assertNull("cleanRecordFolder had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("cleanRecordFolder had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(result);
|
|
||||||
assertEquals("cleanRecordFolder had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("cleanRecordFolder had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
final NodeRef dispAndVitalRecordFolder = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef result = TestUtilities.getRecordFolder(rmService, nodeService, "Reports", "AIS Audit Records", "January AIS Audit Records");
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder was null", result);
|
|
||||||
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(result);
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder had null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertFalse("dispositionAndVitalRecordFolder had empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(result);
|
|
||||||
assertFalse("dispositionAndVitalRecordFolder had wrong review period.", "none|0".equals(vitalRecordDefinition.getReviewPeriod().getExpression()));
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder had null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a record in the 'clean' folder.
|
|
||||||
final NodeRef testRecord = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
final NodeRef result = nodeService.createNode(cleanRecordFolder, ContentModel.ASSOC_CONTAINS,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
|
||||||
"Record" + System.currentTimeMillis() + ".txt"),
|
|
||||||
ContentModel.TYPE_CONTENT).getChildRef();
|
|
||||||
|
|
||||||
rmActionService.executeRecordsManagementAction(result, "file");
|
|
||||||
TestUtilities.declareRecord(result, unprotectedNodeService, rmActionService);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Ensure it's devoid of all disposition and review-related state.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(testRecord);
|
|
||||||
assertNull("testRecord had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("testRecord had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(testRecord);
|
|
||||||
assertEquals("testRecord had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("testRecord had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Move from non-vital to vital - also non-dispositionable to dispositionable at the same time.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
nodeService.moveNode(testRecord, dispAndVitalRecordFolder, ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert that the disposition and review-related data are correct after the move.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(testRecord);
|
|
||||||
assertNotNull("testRecord had null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertFalse("testRecord had empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(testRecord);
|
|
||||||
assertFalse("testRecord had wrong review period.", "0".equals(vitalRecordDefinition.getReviewPeriod().getExpression()));
|
|
||||||
assertNotNull("testRecord had null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Move the test record back from vital to non-vital - also dispositionable to non-dispositionable at the same time.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
nodeService.moveNode(testRecord, cleanRecordFolder, ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert that the disposition and review-related data are correct after the move.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(testRecord);
|
|
||||||
assertNull("testRecord had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("testRecord had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(testRecord);
|
|
||||||
assertEquals("testRecord had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("testRecord had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//TODO check the search aspect
|
|
||||||
|
|
||||||
// Tidy up.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
nodeService.deleteNode(testRecord);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testCopyRecordWithinFileplan()
|
|
||||||
{
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
// We need record folders for test-filing as follows:
|
|
||||||
// 1. A 'clean' record folder with no disposition schedule and no review period.
|
|
||||||
// 2. A 'vital' record folder which has a review period defined.
|
|
||||||
// 3. A 'dispositionable' record folder which has an applicable disposition schedule.
|
|
||||||
//
|
|
||||||
// The example fileplan includes a folder which covers [2] and [3] together.
|
|
||||||
|
|
||||||
final NodeRef cleanRecordFolder = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef result = TestUtilities.getRecordFolder(rmService, nodeService, "Civilian Files", "Case Files and Papers", "Gilbert Competency Hearing");
|
|
||||||
assertNotNull("cleanRecordFolder was null", result);
|
|
||||||
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(result);
|
|
||||||
assertNull("cleanRecordFolder had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("cleanRecordFolder had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(result);
|
|
||||||
assertEquals("cleanRecordFolder had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("cleanRecordFolder had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
final NodeRef dispAndVitalRecordFolder = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
NodeRef result = TestUtilities.getRecordFolder(rmService, nodeService, "Reports", "AIS Audit Records", "January AIS Audit Records");
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder was null", result);
|
|
||||||
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(result);
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder had null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertFalse("dispositionAndVitalRecordFolder had empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(result);
|
|
||||||
assertFalse("dispositionAndVitalRecordFolder had wrong review period.", "none|0".equals(vitalRecordDefinition.getReviewPeriod().getExpression()));
|
|
||||||
assertNotNull("dispositionAndVitalRecordFolder had null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a record in the 'clean' folder.
|
|
||||||
final NodeRef testRecord = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
final NodeRef result = nodeService.createNode(cleanRecordFolder, ContentModel.ASSOC_CONTAINS,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
|
||||||
"Record" + System.currentTimeMillis() + ".txt"),
|
|
||||||
ContentModel.TYPE_CONTENT).getChildRef();
|
|
||||||
|
|
||||||
rmActionService.executeRecordsManagementAction(result, "file");
|
|
||||||
TestUtilities.declareRecord(result, unprotectedNodeService, rmActionService);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Ensure it's devoid of all disposition and review-related state.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(testRecord);
|
|
||||||
assertNull("testRecord had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("testRecord had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(testRecord);
|
|
||||||
assertEquals("testRecord had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("testRecord had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Copy from non-vital to vital - also non-dispositionable to dispositionable at the same time.
|
|
||||||
final NodeRef copiedNode = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
FileInfo fileInfo = fileFolderService.copy(testRecord, dispAndVitalRecordFolder, null);
|
|
||||||
NodeRef n = fileInfo.getNodeRef();
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert that the disposition and review-related data are correct after the copy.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(copiedNode);
|
|
||||||
assertNotNull("copiedNode had null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertFalse("copiedNode had empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(copiedNode);
|
|
||||||
assertFalse("copiedNode had wrong review period.", "0".equals(vitalRecordDefinition.getReviewPeriod().getExpression()));
|
|
||||||
assertNotNull("copiedNode had null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a record in the 'vital and disposition' folder.
|
|
||||||
final NodeRef testRecord2 = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
final NodeRef result = nodeService.createNode(dispAndVitalRecordFolder, ContentModel.ASSOC_CONTAINS,
|
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
|
||||||
"Record2" + System.currentTimeMillis() + ".txt"),
|
|
||||||
ContentModel.TYPE_CONTENT).getChildRef();
|
|
||||||
|
|
||||||
rmActionService.executeRecordsManagementAction(result, "file");
|
|
||||||
TestUtilities.declareRecord(result, unprotectedNodeService, rmActionService);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Check the vital and disposition status.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(testRecord2);
|
|
||||||
assertNotNull("testRecord2 had null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertFalse("testRecord2 had empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(testRecord2);
|
|
||||||
assertFalse("testRecord2 had wrong review period.", "0".equals(vitalRecordDefinition.getReviewPeriod().getExpression()));
|
|
||||||
assertNotNull("testRecord2 had null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// copy the record back from vital to non-vital - also dispositionable to non-dispositionable at the same time.
|
|
||||||
final NodeRef copiedBackNode = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
|
|
||||||
{
|
|
||||||
public NodeRef execute() throws Throwable
|
|
||||||
{
|
|
||||||
FileInfo fileInfo = fileFolderService.copy(testRecord2, cleanRecordFolder, null); // TODO Something wrong here.
|
|
||||||
NodeRef n = fileInfo.getNodeRef();
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert that the disposition and review-related data are correct after the copy-back.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
final DispositionSchedule dispositionSchedule = dispositionService.getDispositionSchedule(copiedBackNode);
|
|
||||||
assertNull("copiedBackNode had non-null disposition instructions.", dispositionSchedule.getDispositionInstructions());
|
|
||||||
assertTrue("copiedBackNode had non-empty disposition instruction definitions.", dispositionSchedule.getDispositionActionDefinitions().isEmpty());
|
|
||||||
|
|
||||||
final VitalRecordDefinition vitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(copiedBackNode);
|
|
||||||
assertEquals("copiedBackNode had wrong review period.", "0", vitalRecordDefinition.getReviewPeriod().getExpression());
|
|
||||||
assertNull("copiedBackNode had non-null review date.", vitalRecordDefinition.getNextReviewDate());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//TODO check the search aspect
|
|
||||||
|
|
||||||
// Tidy up.
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
nodeService.deleteNode(copiedBackNode);
|
|
||||||
nodeService.deleteNode(testRecord2);
|
|
||||||
nodeService.deleteNode(copiedNode);
|
|
||||||
nodeService.deleteNode(testRecord);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void xxxtestUpdateNextDispositionAction()
|
|
||||||
{
|
|
||||||
setComplete();
|
|
||||||
endTransaction();
|
|
||||||
|
|
||||||
final FileAction fileAction = (FileAction)applicationContext.getBean("file");
|
|
||||||
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
// Get a record folder
|
|
||||||
NodeRef folderRecord = TestUtilities.getRecordFolder(rmService, nodeService, "Reports", "AIS Audit Records", "January AIS Audit Records");
|
|
||||||
assertNotNull(folderRecord);
|
|
||||||
assertEquals("January AIS Audit Records", nodeService.getProperty(folderRecord, ContentModel.PROP_NAME));
|
|
||||||
|
|
||||||
DispositionSchedule di = dispositionService.getDispositionSchedule(folderRecord);
|
|
||||||
assertNotNull(di);
|
|
||||||
assertEquals("N1-218-00-4 item 023", di.getDispositionAuthority());
|
|
||||||
assertEquals("Cut off monthly, hold 1 month, then destroy.", di.getDispositionInstructions());
|
|
||||||
assertFalse(di.isRecordLevelDisposition());
|
|
||||||
|
|
||||||
assertFalse(nodeService.hasAspect(folderRecord, ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
|
|
||||||
fileAction.updateNextDispositionAction(folderRecord);
|
|
||||||
|
|
||||||
|
|
||||||
// Check the next disposition action
|
|
||||||
assertTrue(nodeService.hasAspect(folderRecord, ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
NodeRef ndNodeRef = nodeService.getChildAssocs(folderRecord, ASSOC_NEXT_DISPOSITION_ACTION, RegexQNamePattern.MATCH_ALL).get(0).getChildRef();
|
|
||||||
assertNotNull(ndNodeRef);
|
|
||||||
assertEquals("cutoff", nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_ACTION));
|
|
||||||
assertEquals(di.getDispositionActionDefinitions().get(0).getId(), nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_ACTION_ID));
|
|
||||||
assertNotNull(nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_AS_OF));
|
|
||||||
|
|
||||||
// Check the history is empty
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
|
||||||
props.put(PROP_CUT_OFF_DATE, new Date());
|
|
||||||
unprotectedNodeService.addAspect(folderRecord, ASPECT_CUT_OFF, props);
|
|
||||||
fileAction.updateNextDispositionAction(folderRecord);
|
|
||||||
|
|
||||||
assertTrue(nodeService.hasAspect(folderRecord, ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
ndNodeRef = nodeService.getChildAssocs(folderRecord, ASSOC_NEXT_DISPOSITION_ACTION, RegexQNamePattern.MATCH_ALL).get(0).getChildRef();
|
|
||||||
assertNotNull(ndNodeRef);
|
|
||||||
assertEquals("destroy", nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_ACTION));
|
|
||||||
assertEquals(di.getDispositionActionDefinitions().get(1).getId(), nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_ACTION_ID));
|
|
||||||
assertNotNull(nodeService.getProperty(ndNodeRef, PROP_DISPOSITION_AS_OF));
|
|
||||||
|
|
||||||
// Check the history has an action
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
fileAction.updateNextDispositionAction(folderRecord);
|
|
||||||
|
|
||||||
assertTrue(nodeService.hasAspect(folderRecord, ASPECT_DISPOSITION_LIFECYCLE));
|
|
||||||
assertTrue(nodeService.getChildAssocs(folderRecord, ASSOC_NEXT_DISPOSITION_ACTION, RegexQNamePattern.MATCH_ALL).isEmpty());
|
|
||||||
|
|
||||||
// Check the history has both actions
|
|
||||||
// TODO
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@@ -33,7 +33,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
|
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
|
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.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
|
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
||||||
@@ -43,6 +43,7 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
|||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
|
import org.alfresco.service.cmr.model.FileFolderService;
|
||||||
import org.alfresco.service.cmr.repository.ContentService;
|
import org.alfresco.service.cmr.repository.ContentService;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -50,6 +51,7 @@ import org.alfresco.service.cmr.repository.StoreRef;
|
|||||||
import org.alfresco.service.cmr.search.SearchService;
|
import org.alfresco.service.cmr.search.SearchService;
|
||||||
import org.alfresco.service.cmr.security.AuthorityService;
|
import org.alfresco.service.cmr.security.AuthorityService;
|
||||||
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
||||||
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.service.cmr.site.SiteInfo;
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
@@ -104,6 +106,8 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
|
|||||||
protected AuthorityService authorityService;
|
protected AuthorityService authorityService;
|
||||||
protected PersonService personService;
|
protected PersonService personService;
|
||||||
protected TransactionService transactionService;
|
protected TransactionService transactionService;
|
||||||
|
protected FileFolderService fileFolderService;
|
||||||
|
protected PermissionService permissionService;
|
||||||
|
|
||||||
/** RM Services */
|
/** RM Services */
|
||||||
protected RecordsManagementService rmService;
|
protected RecordsManagementService rmService;
|
||||||
@@ -261,6 +265,8 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
|
|||||||
authenticationService = (MutableAuthenticationService)this.applicationContext.getBean("AuthenticationService");
|
authenticationService = (MutableAuthenticationService)this.applicationContext.getBean("AuthenticationService");
|
||||||
personService = (PersonService)this.applicationContext.getBean("PersonService");
|
personService = (PersonService)this.applicationContext.getBean("PersonService");
|
||||||
transactionService = (TransactionService)applicationContext.getBean("TransactionService");
|
transactionService = (TransactionService)applicationContext.getBean("TransactionService");
|
||||||
|
fileFolderService = (FileFolderService)applicationContext.getBean("FileFolderService");
|
||||||
|
permissionService = (PermissionService)applicationContext.getBean("PermissionService");
|
||||||
|
|
||||||
// Get RM services
|
// Get RM services
|
||||||
rmService = (RecordsManagementService)applicationContext.getBean("RecordsManagementService");
|
rmService = (RecordsManagementService)applicationContext.getBean("RecordsManagementService");
|
||||||
@@ -325,16 +331,15 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
|
|||||||
*/
|
*/
|
||||||
protected void setupTestData()
|
protected void setupTestData()
|
||||||
{
|
{
|
||||||
retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Object>()
|
doTestInTransaction(new Test<Void>()
|
||||||
{
|
{
|
||||||
@Override
|
public Void run()
|
||||||
public Object execute() throws Throwable
|
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
setupTestDataImpl();
|
||||||
setupTestDataImpl();
|
return null;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
AuthenticationUtil.getSystemUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,5 +1,20 @@
|
|||||||
/**
|
/*
|
||||||
*
|
* Copyright (C) 2005-2012 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 <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.alfresco.module.org_alfresco_module_rm.test.util;
|
package org.alfresco.module.org_alfresco_module_rm.test.util;
|
||||||
|
|
||||||
@@ -17,7 +32,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
|
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
|
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
||||||
|
@@ -35,7 +35,7 @@ import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
|
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.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.script.BootstrapTestDataGet;
|
import org.alfresco.module.org_alfresco_module_rm.script.BootstrapTestDataGet;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
|
Reference in New Issue
Block a user