RM-263: Issue when we set disposition schedule based on Publication Date

* refactored the way disposition properties work
  * now additional disposition date properties are sprung in and registered in the disposition service
  * each disposition property bean looks after updating the disposition asof date when the date property changes
  * defaults to null date if can not be calculated
  * unit test for new method and this issue
  * also updated build scripts to successfully run unit test .. will gradually add in other unit tests as their reliability is improved



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@36222 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2012-05-09 23:35:37 +00:00
parent 0e5c86e86c
commit 3498ea59a1
13 changed files with 708 additions and 120 deletions

View File

@@ -50,7 +50,7 @@ subprojects {
sourceJavaDir = 'source/java' sourceJavaDir = 'source/java'
sourceWebDir = 'source/web' sourceWebDir = 'source/web'
testJavaDir = 'test/java' testJavaDir = 'test/java'
testResourceDir = 'test/resource' testResourceDir = 'test/resources'
configDir = 'config' configDir = 'config'
configModuleDir = "config/alfresco/module/${moduleid}" configModuleDir = "config/alfresco/module/${moduleid}"
moduleProperties = 'module.properties' moduleProperties = 'module.properties'
@@ -98,13 +98,6 @@ subprojects {
} }
/** --- Compile tasks --- */ /** --- Compile tasks --- */
task fetchWarFile(type:Copy) {
from configurations.testRuntime
into '.'
include '*.war'
rename { String filename -> warFile }
}
// make sure that the dependancies have been unpacked before compiling the Java // make sure that the dependancies have been unpacked before compiling the Java
compileJava.doFirst { compileJava.doFirst {
@@ -114,6 +107,13 @@ subprojects {
jar.archiveName = jarFile jar.archiveName = jarFile
/** --- Dependancy tasks --- */ /** --- Dependancy tasks --- */
task fetchWarFile(type:Copy) {
from configurations.testRuntime
into '.'
include '*.war'
rename { String filename -> warFile }
}
task explodeDeps << { task explodeDeps << {
@@ -122,6 +122,7 @@ subprojects {
explodedConfigDir = file("${explodedDepsDir}/config") explodedConfigDir = file("${explodedDepsDir}/config")
warFileObj = file(warFile) warFileObj = file(warFile)
// if the WAR file still isn't there raise an error
if (warFileObj.exists() == true) { if (warFileObj.exists() == true) {
logger.lifecycle "${warFile} was found. Checking dependancies ..." logger.lifecycle "${warFile} was found. Checking dependancies ..."

View File

@@ -281,5 +281,269 @@
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-repository-4.0.1.jar" sourcepath="C:/mywork/projects/v4/code/root/projects/repository/source/java"/> <classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-repository-4.0.1.jar" sourcepath="C:/mywork/projects/v4/code/root/projects/repository/source/java"/>
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-web-client-4.0.1.jar"/> <classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-web-client-4.0.1.jar"/>
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-web-framework-commons-4.0.1.jar"/> <classpathentry exported="true" kind="lib" path="explodedDeps/lib/alfresco-web-framework-commons-4.0.1.jar"/>
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/activiti-engine-5.7.jar"/>
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/activiti-spring-5.7.jar"/>
<classpathentry exported="true" kind="lib" path="explodedDeps/lib/activiti-webapp-explorer2-5.7-ui-jar.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/abdera-client-0.4.0-incubating.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/abdera-core-0.4.0-incubating.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/abdera-extensions-json-0.4.0-incubating.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/abdera-i18n-0.4.0-incubating.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/abdera-parser-0.4.0-incubating.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/acegi-security-0.8.2_patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/activation-1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/addressing-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/alfresco-opencmis-extension-0.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/alfresco-wdr-deployment.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/ant-1.7.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/antlr-3.3-complete.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/aopalliance.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/apache-mime4j-0.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/apache-solr-solrj-1.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/asm-3.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/avalon-framework-4.2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/axiom-api-1.2.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/axiom-impl-1.2.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/axis-1.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/batik-all-1.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bcel.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bcmail-jdk15-1.45.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bcprov-jdk15-1.45.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bliki-3.0.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/boilerpipe-1.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bsf-2.4.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/bsh-1.3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/cglib-2.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-abdera-0.1-incubating-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-client-api-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-client-bindings-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-client-impl-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-commons-api-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-commons-impl-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-server-bindings-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-server-support-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-test-browser-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-opencmis-test-tck-0.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chemistry-tck-atompub-0.1-incubating-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/chiba-1.3.0-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-beanutils-1.7.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-codec-1.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-collections-3.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-compress-1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-csv-20110211.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-dbcp-1.4-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-digester-1.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-discovery-0.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-el.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-fileupload-1.2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-httpclient-3.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-io-1.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-jxpath-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-lang-2.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-modeler.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-net-2.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-pool-1.5.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/commons-validator-1.4.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/concurrentlinkedhashmap-lru-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/cxf-2.2.2-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/drew-image-metadata-extractor-2.4.0-beta-1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/ehcache-core-2.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/facebook_070716.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/FastInfoset-1.2.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/fontbox-1.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/fop-0.94.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/freemarker-2.3.18-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-analytics-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-analytics-meta-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-appsforyourdomain-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-appsforyourdomain-meta-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-base-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-blogger-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-blogger-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-books-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-books-meta-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-calendar-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-calendar-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-client-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-client-meta-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-codesearch-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-codesearch-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-contacts-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-contacts-meta-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-core-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-docs-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-docs-meta-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-finance-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-finance-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-gtt-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-gtt-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-health-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-health-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-maps-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-maps-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-media-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-photos-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-photos-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-projecthosting-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-projecthosting-meta-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-sidewiki-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-sidewiki-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-sites-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-sites-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-spreadsheet-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-spreadsheet-meta-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-webmastertools-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-webmastertools-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-youtube-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/gdata-youtube-meta-2.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/geronimo-activation_1.1_spec-1.0.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/geronimo-annotation_1.0_spec-1.1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/geronimo-jaxws_2.1_spec-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/geronimo-stax-api_1.0_spec-1.0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/google-collect-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/greenmail-1.3-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/groovy-1.7.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/guessencoding-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/hazelcast-1.9.4.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/hazelcast-spring-1.9.4.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/hibernate-3.2.6-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/hrtlib.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/htmlparser-1.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/httpclient-4.1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/httpclient-cache-4.1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/httpcore-4.1.3.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/icu4j_3_6_1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/isoparser-1.0-beta-5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jackson-core-asl-1.8.3.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jackson-mapper-asl-1.8.3.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jakarta-oro-2.0.8.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/javassist-3.6.0.GA.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxb-api-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxb-impl-2.1.11.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxb-xjc-2.1.7.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxen-1.1-beta-8.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxrpc.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxws-api-2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jaxws-rt-2.1.7.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jbpm-identity-3.3.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jbpm-jpdl-3.3.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jcr-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jempbox-1.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jgroups-2.11.1.Final.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jibx-bind.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jibx-run.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jid3lib-0.5.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/JMagick.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/joda-time-1.2.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jodconverter-core-3.0-beta-3-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jooconverter-2.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/JSlideShare-0.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/json-simple-1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/json.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jsr107cache-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jsr181-api-1.0-MR1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jsr250-api-1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jstl-1.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jta.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jtds-1.2.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jug-asl-2.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/junit-4.8.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jut.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/jutf7-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/livetribe-jsr223-2.0.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/lucene-analyzers-2.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/lucene-core-2.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/lucene-regex-2.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/lucene-snowball-2.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/mail.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/mimepull-1.3.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/mockito-all-1.8.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/mybatis-3.0.4-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/mybatis-spring-1.0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/myfaces-api-1.1.8.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/myfaces-impl-1.1.8.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/neethi-2.0.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/netcdf-4.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/odmg-3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/ooxml-schemas-1.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/openoffice-juh-3.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/openoffice-jurt-3.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/openoffice-ridl-3.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/openoffice-sandbox-2.0.3.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/openoffice-unoil-3.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/opensaml-1.0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.aop-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.asm-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.beans-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.context-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.context.support-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.core-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.expression-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.jdbc-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.orm-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.transaction-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.web-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/org.springframework.web.servlet-3.0.5.RELEASE.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/pdfbox-1.6.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/PDFRenderer-0.9.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/poi-3.8-beta6-20120124.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/poi-ooxml-3.8-beta6-20120124.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/poi-scratchpad-3.8-beta6-20120124.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/quartz-1.8.3-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/resolver-20050927.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/rhino-js-1.6R7.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/rome-0.9.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/saxpath.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/scannotation-1.0.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/shale-test-1.0.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/slf4j-api-1.5.11.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/slf4j-log4j12-1.5.11.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-cmis-framework-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-security-core-3.1.0.RC2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-core-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-facebook-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-facebook-web-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-linkedin-1.0.0.BUILD-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-test-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-twitter-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-social-web-1.0.0.RC1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-surf-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-surf-api-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-surf-core-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-surf-core-configservice-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-webscripts-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/spring-webscripts-api-1.0.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/springmodules-jbpm31.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/standard.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/stax-api-1.0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/stax-ex-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/stax-utils-20060502.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/streambuffer-0.9.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/subethasmtp-3.1.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/tagsoup-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/tika-core-1.1-20120208.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/tika-parsers-1.1-20120208.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/truelicense-1_29-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/truexml-1_29-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/truezip.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/urlrewritefilter-3.1.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/vaadin-6.5.6.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/vorbis-java-core-0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/vorbis-java-tika-0.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/wsdl4j-1.6.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/wss4j-1.5.4-patched.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/wstx-asl-3.2.4.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xercesImpl-2.8.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xml-resolver-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xmlbeans-2.3.0.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xmlgraphics-commons-1.2.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xmlrpc.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/XmlSchema-1.4.5.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xmlsec-1.4.1.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xpp3-1.1.3_8.jar"/>
<classpathentry kind="lib" path="explodedDeps/lib/xstream-1.2.2.jar"/>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>

View File

@@ -7,18 +7,19 @@ dependencies {
testRuntime files(explodedConfigDir) testRuntime files(explodedConfigDir)
testRuntime files(configDir) testRuntime files(configDir)
testRuntime files(testResourceDir)
testRuntime group: 'org.alfresco.enterprise', name: 'alfresco', version: alfrescoBaseVersion, type: 'war' testRuntime group: 'org.alfresco.enterprise', name: 'alfresco', version: alfrescoBaseVersion, type: 'war'
} }
test { test {
//makes the standard streams (err and out) visible at console when running tests
include '**/DispositionServiceImplTest.class'
testLogging.showStandardStreams = true testLogging.showStandardStreams = true
//tweaking memory settings for the forked vm that runs tests
jvmArgs '-Xms256M', '-Xmx1024M', '-XX:MaxPermSize=256M' jvmArgs '-Xms256M', '-Xmx1024M', '-XX:MaxPermSize=256M'
//listening to test execution events
beforeTest { descriptor -> beforeTest { descriptor ->
logger.lifecycle("Running test: " + descriptor) logger.lifecycle("Running test: " + descriptor)
} }

View File

@@ -96,6 +96,9 @@
<!-- Import RM UI evaluators --> <!-- Import RM UI evaluators -->
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml"/> <import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml"/>
<!-- Import disposition properties -->
<import resource="classpath:alfresco/module/org_alfresco_module_rm/rm-disposition-properties-context.xml"/>
<!-- RM Script API --> <!-- RM Script API -->
<bean id="scriptRecordsManagementService" parent="baseJavaScriptExtension" class="org.alfresco.module.org_alfresco_module_rm.jscript.ScriptRecordsManagmentService"> <bean id="scriptRecordsManagementService" parent="baseJavaScriptExtension" class="org.alfresco.module.org_alfresco_module_rm.jscript.ScriptRecordsManagmentService">

View File

@@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean
id="disposition.properties.base"
abstract="true"
class="org.alfresco.module.org_alfresco_module_rm.disposition.property.DispositionProperty"
init-method="init">
<property name="namespaceService" ref="NamespaceService" />
<property name="dictionaryService" ref="DictionaryService" />
<property name="nodeService" ref="NodeService" />
<property name="policyComponent" ref="policyComponent" />
<property name="dispositionService" ref="dispositionService" />
</bean>
<bean id="disposition.properties.cutoffdate" parent="disposition.properties.base">
<property name="name" value="rma:cutOffDate" />
</bean>
<bean id="disposition.properties.dispositionasof" parent="disposition.properties.base">
<property name="name" value="rma:dispositionAsOf" />
</bean>
<bean id="disposition.properties.datefiled" parent="disposition.properties.base">
<property name="name" value="rma:dateFiled" />
</bean>
<bean id="disposition.properties.publicationdate" parent="disposition.properties.base">
<property name="name" value="rma:publicationDate" />
</bean>
</beans>

View File

@@ -205,6 +205,8 @@
<property name="objectDefinitionSource"> <property name="objectDefinitionSource">
<value> <value>
<![CDATA[ <![CDATA[
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.registerDispositionProperty=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getDispositionProperties=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getDispositionSchedule=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getDispositionSchedule=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getAssociatedDispositionSchedule=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getAssociatedDispositionSchedule=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getAssociatedRecordsManagementContainer=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getAssociatedRecordsManagementContainer=RM_ALLOW
@@ -218,8 +220,7 @@
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isNextDispositionActionEligible=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isNextDispositionActionEligible=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getNextDispositionAction=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getNextDispositionAction=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getCompletedDispositionActions=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getCompletedDispositionActions=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getLastCompletedDispostionAction=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getLastCompletedDispostionAction=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getDispositionPeriodProperties=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.*=RM_DENY org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.*=RM_DENY
]]> ]]>
</value> </value>
@@ -1000,17 +1001,4 @@
</property> </property>
</bean> </bean>
<!-- Period Properties -->
<bean id="DispositionPeriodProperties" class="org.alfresco.module.org_alfresco_module_rm.disposition.DispositionPeriodProperties">
<property name="propertyList">
<list>
<value>{http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate</value>
<value>{http://www.alfresco.org/model/recordsmanagement/1.0}dispositionAsOf</value>
<value>{http://www.alfresco.org/model/recordsmanagement/1.0}dateFiled</value>
<value>{http://www.alfresco.org/model/recordsmanagement/1.0}publicationDate</value>
</list>
</property>
</bean>
</beans> </beans>

View File

@@ -492,25 +492,28 @@ public abstract class RMActionExecuterAbstractBase extends ActionExecuterAbstra
Period period = nextDispositionActionDefinition.getPeriod(); Period period = nextDispositionActionDefinition.getPeriod();
if (period != null) if (period != null)
{ {
// Use NOW as the default context date Date contextDate = null;
Date contextDate = new Date();
// Get the period properties value // Get the period properties value
QName periodProperty = nextDispositionActionDefinition.getPeriodProperty(); QName periodProperty = nextDispositionActionDefinition.getPeriodProperty();
if (periodProperty != null) if (periodProperty != null)
{ {
contextDate = (Date)this.nodeService.getProperty(nodeRef, periodProperty); // doesn't matter if the period property isn't set ... the asOfDate will get updated later
// when the value of the period property is set
if (contextDate == null) contextDate = (Date)this.nodeService.getProperty(nodeRef, periodProperty);
{ }
// TODO For now we will use NOW to resolve MOB-1184 else
//throw new AlfrescoRuntimeException("Date used to calculate disposition action asOf date is not set for property " + periodProperty.toString()); {
contextDate = new Date(); // for now use 'NOW' as the default context date
} // TODO set the default period property ... cut off date or last disposition date depending on context
contextDate = new Date();
} }
// Calculate the as of date // Calculate the as of date
asOfDate = period.getNextDate(contextDate); if (contextDate != null)
{
asOfDate = period.getNextDate(contextDate);
}
} }
// Set the property values // Set the property values

View File

@@ -1,51 +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.disposition;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.service.namespace.QName;
/**
* Spring bean to allow configuration of properties used for calculating
* dates in disposition schedules.
*
* @author Gavin Cornwell
*/
public class DispositionPeriodProperties
{
public static final String BEAN_NAME = "DispositionPeriodProperties";
private List<QName> periodProperties;
public void setPropertyList(List<String> propertyList)
{
periodProperties = new ArrayList<QName>(propertyList.size());
for (String property : propertyList)
{
periodProperties.add(QName.createQName(property));
}
}
public List<QName> getPeriodProperties()
{
return periodProperties;
}
}

View File

@@ -19,9 +19,11 @@
package org.alfresco.module.org_alfresco_module_rm.disposition; package org.alfresco.module.org_alfresco_module_rm.disposition;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.disposition.property.DispositionProperty;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
@@ -33,6 +35,23 @@ import org.alfresco.service.namespace.QName;
*/ */
public interface DispositionService public interface DispositionService
{ {
/** ========= Disposition Property Methods ========= */
/**
* Register a disposition property.
*
* @param dispositionProperty disposition property
*/
void registerDispositionProperty(DispositionProperty dispositionProperty);
/**
* Returns the list of disposition period properties
*
* @return list of disposition period properties
*/
Collection<DispositionProperty> getDispositionProperties();
/** ========= Disposition Schedule Methods ========= */ /** ========= Disposition Schedule Methods ========= */
/** /**
@@ -175,14 +194,5 @@ public interface DispositionService
* @return DispositionAction last completed disposition action, null if none * @return DispositionAction last completed disposition action, null if none
*/ */
DispositionAction getLastCompletedDispostionAction(NodeRef nodeRef); DispositionAction getLastCompletedDispostionAction(NodeRef nodeRef);
/** ========= ========= */
/**
* Returns the list of disposition period properties
*
* @return list of disposition period properties
*/
List<QName> getDispositionPeriodProperties();
} }

View File

@@ -20,14 +20,16 @@ package org.alfresco.module.org_alfresco_module_rm.disposition;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
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.disposition.property.DispositionProperty;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
@@ -75,6 +77,9 @@ public class DispositionServiceImpl implements DispositionService, RecordsManage
/** Application context */ /** Application context */
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
/** Disposition properties */
private Map<QName, DispositionProperty> dispositionProperties = new HashMap<QName, DispositionProperty>(4);
/** /**
* Set node service * Set node service
* *
@@ -149,6 +154,26 @@ public class DispositionServiceImpl implements DispositionService, RecordsManage
this.dispositionSelectionStrategy = dispositionSelectionStrategy; this.dispositionSelectionStrategy = dispositionSelectionStrategy;
} }
/** ========= Disposition Property Methods ========= */
/**
* @see org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService#registerDispositionProperty(org.alfresco.module.org_alfresco_module_rm.disposition.property.DispositionProperty)
*/
@Override
public void registerDispositionProperty(DispositionProperty dispositionProperty)
{
dispositionProperties.put(dispositionProperty.getQName(), dispositionProperty);
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService#getDispositionProperties()
*/
@Override
public Collection<DispositionProperty> getDispositionProperties()
{
return dispositionProperties.values();
}
/** ========= Disposition Schedule Methods ========= */ /** ========= Disposition Schedule Methods ========= */
/** /**
@@ -606,21 +631,5 @@ public class DispositionServiceImpl implements DispositionService, RecordsManage
} }
return result; return result;
} }
public List<QName> getDispositionPeriodProperties()
{
DispositionPeriodProperties dpp = (DispositionPeriodProperties)applicationContext.getBean(DispositionPeriodProperties.BEAN_NAME);
if (dpp == null)
{
return Collections.emptyList();
}
else
{
return dpp.getPeriodProperties();
}
}
} }

View File

@@ -0,0 +1,223 @@
/**
*
*/
package org.alfresco.module.org_alfresco_module_rm.disposition.property;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
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.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
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.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
/**
* @author Roy Wetherall
*/
public class DispositionProperty implements NodeServicePolicies.OnUpdatePropertiesPolicy,
RecordsManagementModel
{
/** Property QName */
private QName propertyName;
private JavaBehaviour behaviour;
/** Namespace service */
private NamespaceService namespaceService;
/** Disposition service */
private DispositionService dispositionService;
/** Policy component */
private PolicyComponent policyComponent;
/** Dictionary service */
private DictionaryService dictionaryService;
/** Node service */
private NodeService nodeService;
/**
* @param namespaceService namespace service
*/
public void setNamespaceService(NamespaceService namespaceService)
{
this.namespaceService = namespaceService;
}
/**
* @param dispositionService disposition service
*/
public void setDispositionService(DispositionService dispositionService)
{
this.dispositionService = dispositionService;
}
/**
* @param policyComponent policy component
*/
public void setPolicyComponent(PolicyComponent policyComponent)
{
this.policyComponent = policyComponent;
}
/**
* @param dictionaryService dictionary service
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/**
* @param nodeService node service
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/**
* @param propertyName property name (as string)
*/
public void setName(String propertyName)
{
this.propertyName = QName.createQName(propertyName, namespaceService);
}
/**
* @return property QName
*/
public QName getQName()
{
return this.propertyName;
}
/**
* @return property definition
*/
public PropertyDefinition getPropertyDefinition()
{
return dictionaryService.getProperty(propertyName);
}
/**
* Bean initialisation method
*/
public void init()
{
// register with disposition service
dispositionService.registerDispositionProperty(this);
// register interest in the update properties policy for disposition
behaviour = new JavaBehaviour(this, "onUpdateProperties", NotificationFrequency.TRANSACTION_COMMIT);
policyComponent.bindClassBehaviour(
NodeServicePolicies.OnUpdatePropertiesPolicy.QNAME,
ASPECT_DISPOSITION_LIFECYCLE,
behaviour);
}
@Override
public void onUpdateProperties(
final NodeRef nodeRef,
final Map<QName, Serializable> before,
final Map<QName, Serializable> after)
{
if (nodeService.exists(nodeRef) == true)
{
// has the property we care about changed?
if (isPropertyUpdated(before, after) == true)
{
behaviour.disable();
try
{
AuthenticationUtil.runAs(new RunAsWork<Void>()
{
@Override
public Void doWork() throws Exception
{
Date updatedDateValue = (Date)after.get(propertyName);
if (updatedDateValue != null)
{
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(nodeRef);
if (dispositionAction != null)
{
DispositionActionDefinition daDefinition = dispositionAction.getDispositionActionDefinition();
if (daDefinition != null)
{
// check whether the next disposition action matches this disposition property
if (propertyName.equals(daDefinition.getPeriodProperty()) == true)
{
Period period = daDefinition.getPeriod();
Date updatedAsOf = period.getNextDate(updatedDateValue);
// update asOf date on the disposition action based on the new property value
NodeRef daNodeRef = dispositionAction.getNodeRef();
nodeService.setProperty(daNodeRef, PROP_DISPOSITION_AS_OF, updatedAsOf);
}
}
}
}
else
{
// throw an exception if the property is being 'cleared'
if (before.get(propertyName) != null)
{
throw new AlfrescoRuntimeException(
"Error updating property " + propertyName.toPrefixString(namespaceService) +
" to null, because property is being used to determine a disposition date.");
}
}
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
finally
{
behaviour.enable();
}
}
}
}
private boolean isPropertyUpdated(Map<QName, Serializable> before, Map<QName, Serializable> after)
{
boolean result = false;
Serializable beforeValue = before.get(propertyName);
Serializable afterValue = after.get(propertyName);
if (beforeValue == null && afterValue != null)
{
result = true;
}
else if (beforeValue != null && afterValue == null)
{
result = true;
}
else if (beforeValue != null && afterValue != null &&
beforeValue.equals(afterValue) == false)
{
result = true;
}
return result;
}
}

View File

@@ -19,6 +19,7 @@
package org.alfresco.module.org_alfresco_module_rm.script; package org.alfresco.module.org_alfresco_module_rm.script;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -30,6 +31,7 @@ import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction
import org.alfresco.module.org_alfresco_module_rm.audit.AuditEvent; import org.alfresco.module.org_alfresco_module_rm.audit.AuditEvent;
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService; import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
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.disposition.property.DispositionProperty;
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent; import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent;
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService; import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
@@ -247,11 +249,12 @@ public class ListOfValuesGet extends DeclarativeWebScript
protected Map<String, Object> createPeriodPropertiesModel(String baseUrl) protected Map<String, Object> createPeriodPropertiesModel(String baseUrl)
{ {
// iterate over all period properties and get the label from their type definition // iterate over all period properties and get the label from their type definition
List<QName> periodProperties = dispositionService.getDispositionPeriodProperties(); Collection<DispositionProperty> dispositionProperties = dispositionService.getDispositionProperties();
List<Map<String, String>> items = new ArrayList<Map<String, String>>(periodProperties.size()); List<Map<String, String>> items = new ArrayList<Map<String, String>>(dispositionProperties.size());
for (QName periodProperty : periodProperties) for (DispositionProperty dispositionProperty : dispositionProperties)
{ {
PropertyDefinition propDef = this.ddService.getProperty(periodProperty); PropertyDefinition propDef = dispositionProperty.getPropertyDefinition();
QName propName = dispositionProperty.getQName();
if (propDef != null) if (propDef != null)
{ {
@@ -259,10 +262,10 @@ public class ListOfValuesGet extends DeclarativeWebScript
String propTitle = propDef.getTitle(); String propTitle = propDef.getTitle();
if (propTitle == null || propTitle.length() == 0) if (propTitle == null || propTitle.length() == 0)
{ {
propTitle = StringUtils.capitalize(periodProperty.getLocalName()); propTitle = StringUtils.capitalize(propName.getLocalName());
} }
item.put("label", propTitle); item.put("label", propTitle);
item.put("value", periodProperty.toPrefixString(this.namespaceService)); item.put("value", propName.toPrefixString(this.namespaceService));
items.add(item); items.add(item);
} }
} }

View File

@@ -22,6 +22,7 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -32,6 +33,7 @@ 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.DispositionActionDefinition;
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.disposition.property.DispositionProperty;
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.job.publish.PublishExecutor; import org.alfresco.module.org_alfresco_module_rm.job.publish.PublishExecutor;
import org.alfresco.module.org_alfresco_module_rm.job.publish.PublishExecutorRegistry; import org.alfresco.module.org_alfresco_module_rm.job.publish.PublishExecutorRegistry;
@@ -54,6 +56,28 @@ public class DispositionServiceImplTest extends BaseRMTestCase
return true; return true;
} }
public void testGetDispositionProperties() throws Exception
{
doTestInTransaction(new Test<Void>()
{
public Void run()
{
Collection<DispositionProperty> properties = dispositionService.getDispositionProperties();
assertNotNull(properties);
assertEquals(4, properties.size());
for (DispositionProperty property : properties)
{
assertNotNull(property.getQName());
assertNotNull(property.getPropertyDefinition());
}
return null;
}
});
}
/** /**
* @see DispositionService#getDispositionSchedule(org.alfresco.service.cmr.repository.NodeRef) * @see DispositionService#getDispositionSchedule(org.alfresco.service.cmr.repository.NodeRef)
*/ */
@@ -797,5 +821,81 @@ public class DispositionServiceImplTest extends BaseRMTestCase
// TODO DispositionAction getLastCompletedDispostionAction(NodeRef nodeRef); // TODO DispositionAction getLastCompletedDispostionAction(NodeRef nodeRef);
// TODO List<QName> getDispositionPeriodProperties(); // TODO List<QName> getDispositionPeriodProperties();
/* === Issues === */
private NodeRef testRM263RecordCategory;
private DispositionSchedule testRM263DispositionSchedule;
private NodeRef testRM263Record;
/**
* https://issues.alfresco.com/jira/browse/RM-263
*/
public void testRM_263() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run() throws Exception
{
testRM263RecordCategory = rmService.createRecordCategory(rmContainer, "rm263");
testRM263DispositionSchedule = utils.createBasicDispositionSchedule(
testRM263RecordCategory,
"test",
"test",
true,
false);
Map<QName, Serializable> adParams = new HashMap<QName, Serializable>(3);
adParams.put(PROP_DISPOSITION_ACTION_NAME, "cutoff");
adParams.put(PROP_DISPOSITION_DESCRIPTION, "test");
adParams.put(PROP_DISPOSITION_PERIOD, "week|1");
adParams.put(PROP_DISPOSITION_PERIOD_PROPERTY, PROP_PUBLICATION_DATE.toString());
dispositionService.addDispositionActionDefinition(testRM263DispositionSchedule, adParams);
NodeRef recordFolder = rmService.createRecordFolder(testRM263RecordCategory, "testRM263RecordFolder");
testRM263Record = utils.createRecord(recordFolder, "testRM263Record", "testRM263Record");
return null;
}
});
doTestInTransaction(new Test<Void>()
{
private final QName PROP_SEARCH_ASOF = QName.createQName(RM_URI, "recordSearchDispositionActionAsOf");
@Override
public Void run() throws Exception
{
Date pubDate = (Date)nodeService.getProperty(testRM263Record, PROP_PUBLICATION_DATE);
assertNull(pubDate);
Date asOfDate = (Date)nodeService.getProperty(testRM263Record, PROP_SEARCH_ASOF);
assertNull(asOfDate);
DispositionAction da = dispositionService.getNextDispositionAction(testRM263Record);
assertNotNull(da);
assertNull(da.getAsOfDate());
//rma:recordSearchDispositionActionAsOf"
nodeService.setProperty(testRM263Record, PROP_PUBLICATION_DATE, new Date());
return null;
}
@Override
public void test(Void result) throws Exception
{
Date pubDate = (Date)nodeService.getProperty(testRM263Record, PROP_PUBLICATION_DATE);
assertNotNull(pubDate);
Date asOfDate = (Date)nodeService.getProperty(testRM263Record, PROP_SEARCH_ASOF);
assertNotNull(asOfDate);
DispositionAction da = dispositionService.getNextDispositionAction(testRM263Record);
assertNotNull(da);
assertNotNull(da.getAsOfDate());
}
});
}
} }