Merged BRANCHES/V2.0-BUG_FIX to HEAD:

40344: RM-477: RM 2.0 does not work with SOLR
       * first pass at supporting SOLR in RM2
       * currently requires reimplementation of permissionServiceImpl due to visibility of methods and member variables
       * job execution delayed to try and prevent start up errors
       * fetchSOLR task added to gradle to retrieve SOLR zip from Maven (could do with some scripts to help with setup for module)
       * TODO more testing and refinement of solution
   40383: RM: Fix unit test
   40656: Updated ReadMe.txt
   40696: RM-439: Folders have no File to... option
   40778: RM-434: The user has all rights for audit once "Access Audit" capability is added to him
   40784: RM-482: RM .classpath files have local library references
   40785: RM: Remove .settings dir for Eclipse projects
       * See RM-482
   40786: RM:  Set svn:ignore for generated eclipse project files
   40800: RM-434
   40904: It was not possible to edit/delete a custom meta data
   40920: Disabled the delete button for custom meta data
   40948: RM-438: Custom metadata fields and Special Types aren't available in Email Mappings
   41021: RM-438: Custom metadata fields and Special Types aren't available in Email Mappings
       * ensured the 'group' information was being passed to property-menu (so the custom and dynamic record meta-data is available)
       * also tweaked audit in the same way
       * removed code to add custom meta-data props as no longer needed
   41023: Merged HEAD to BANCHES/V2.0-BUG-FIX:
        40944: Adds Spanish RM translation



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@41024 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2012-08-30 07:00:47 +00:00
22 changed files with 3372 additions and 391 deletions

View File

@@ -19,6 +19,7 @@ Initial Setup
Using Eclipse Using Eclipse
- Run "gradlew eclipse". This will generate the eclipse project files.
- Start Eclipse in the usual way. - Start Eclipse in the usual way.
Note: make sure the WAR dependancies have been exploded before opening Eclispe. Note: make sure the WAR dependancies have been exploded before opening Eclispe.
- Import projects found in rm-server and rm-share directories. - Import projects found in rm-server and rm-share directories.
@@ -28,15 +29,16 @@ Deploying the RM AMPs
- Set the envoronment variables TOMCAT_HOME and APP_TOMCAT_HOME to the home directory of the repository and share Tomcat instances respectively. - Set the envoronment variables TOMCAT_HOME and APP_TOMCAT_HOME to the home directory of the repository and share Tomcat instances respectively.
NOTE: these can be the same tomcat instance, but it is recommended that two are used. NOTE: these can be the same tomcat instance, but it is recommended that two are used.
- Configure your repository Tomcat so that your repository.properties settings will be successfully picked up when Alfresco is started. - Configure your repository Tomcat so that your repository.properties settings will be successfully picked up when Alfresco is started.
- Run "gradlew installAmp" in the root directory. This will use the MMT to apply the RM AMPs to the Alfresco and Share WARs respectively. The modified WARs will then be copied to the set Tomcat instances, cleaning any exisiting exploded WARs. - Run "gradlew deployAmp" in the root directory. This will use the MMT to apply the RM AMPs to the Alfresco and Share WARs respectively. The modified WARs will then be copied to the set Tomcat instances, cleaning any exisiting exploded WARs.
- Start Tomcat(s). - Start Tomcat(s).
For users of the Alfresco DevEnv For users of the Alfresco DevEnv
- Create a normal project using "create-project". - Create a normal project using "create-project".
- Manually check out RM code into the "code" directory as described above. Don't use the checkout script provided. - Check out RM code into the "code" directory (checkout https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD)
- The devEnv will automatically set the TOMCAT_HOME and APP_TOMCAT_HOME environment variables to point to the Tomcat instances created by the use-tomcat6 and use-app-tomcat6 scipts. Magic! - The devEnv will automatically set the TOMCAT_HOME and APP_TOMCAT_HOME environment variables to point to the Tomcat instances created by the use-tomcat6 and use-app-tomcat6 scipts. Magic!
- You can use the dev-context.xml generated for you to configure the repository. Place it in <TOMCAT_HOME>/shared/alfresco/extension. - Copy the JDBC driver to <TOMCAT_HOME>/lib/
- You can use the dev-context.xml generated for you to configure the repository. Place it in <TOMCAT_HOME>/shared/classes/alfresco/extension and <PROJECT_NAME>/code/rm-server/config/alfresco/extension.
Summary Of Available Gradle Tasks Summary Of Available Gradle Tasks
@@ -51,3 +53,4 @@ Summary Of Available Gradle Tasks
NOTE: the installed WAR can be found in build/dist. NOTE: the installed WAR can be found in build/dist.
- deployAmp : depolys the project AMP to the configured Tomcat instance. - deployAmp : depolys the project AMP to the configured Tomcat instance.
- fetchWarFile : fetches the dependant Alfresco WAR files - fetchWarFile : fetches the dependant Alfresco WAR files
- eclipse : generates eclipse projects for repository and share projects

View File

@@ -101,6 +101,9 @@ subprojects {
compile fileTree(dir: explodedLibsDir, include: '*.jar') compile fileTree(dir: explodedLibsDir, include: '*.jar')
} }
// make sure existing eclipse projects are cleared
tasks.eclipse.dependsOn(cleanEclipse)
/** --- Compile tasks --- */ /** --- Compile tasks --- */
// make sure that the dependancies have been unpacked before compiling the Java // make sure that the dependancies have been unpacked before compiling the Java
@@ -239,6 +242,13 @@ subprojects {
} }
} }
task localisationPackage (type: Copy) << {
from configDir
include "**/*.properties"
into "${assembleDir}/i18n"
}
task deployExploded(dependsOn: 'jar') << { task deployExploded(dependsOn: 'jar') << {
def jarFileObj = file(jarFilePath) def jarFileObj = file(jarFilePath)

View File

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

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>rm-server</name>
<comment/>
<projects/>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<linkedResources/>
</projectDescription>

View File

@@ -1,13 +0,0 @@
#
#Tue Jul 10 13:39:51 EST 2012
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

View File

@@ -13,6 +13,33 @@ dependencies {
testRuntime files(testResourceDir) 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'
testRuntime group: 'org.alfresco.enterprise', name: 'alfresco-solr', version: alfrescoBaseVersion, type: 'zip'
}
task fetchSOLR(type:Copy) {
from configurations.testRuntime
into '.'
include '*.zip'
rename { String filename -> solrFile }
}
task useSOLR << {
}
eclipse {
classpath {
file {
withXml {
Map<String, String> map = new HashMap<String, String>()
map.put('kind', 'src')
map.put('path', configDir)
def node = it.asNode()
node.appendNode('classpathentry', map)
}
}
}
} }
task resetDatabase << { task resetDatabase << {

View File

@@ -2,6 +2,53 @@
<!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>
<bean id="permissionServiceImpl" class="org.alfresco.module.org_alfresco_module_rm.permission.PermissionServiceImpl" init-method="init">
<property name="nodeService">
<ref bean="mtAwareNodeService" />
</property>
<property name="tenantService">
<ref bean="tenantService"/>
</property>
<property name="dictionaryService">
<ref bean="dictionaryService" />
</property>
<property name="permissionsDaoComponent">
<ref bean="permissionsDaoComponent" />
</property>
<property name="modelDAO">
<ref bean="permissionsModelDAO" />
</property>
<property name="authorityService">
<ref bean="authorityService" />
</property>
<property name="accessCache">
<ref bean="permissionsAccessCache" />
</property>
<property name="readersCache">
<ref bean="readersCache" />
</property>
<property name="readersDeniedCache">
<ref bean="readersDeniedCache" />
</property>
<property name="policyComponent">
<ref bean="policyComponent" />
</property>
<property name="aclDAO">
<ref bean="aclDAO" />
</property>
<property name="ownableService">
<ref bean="ownableService" />
</property>
<property name="anyDenyDenies">
<value>${security.anyDenyDenies}</value>
</property>
<property name="dynamicAuthorities">
<list>
<ref bean="ownerDynamicAuthority" />
<ref bean="lockOwnerDynamicAuthority" />
</list>
</property>
</bean>
<!-- Bootstrap records management data --> <!-- Bootstrap records management data -->
<bean id="org_alfresco_module_rm_bootstrapData" <bean id="org_alfresco_module_rm_bootstrapData"

View File

@@ -292,7 +292,7 @@
{ {
"name" : "Vital Records Due For Review", "name" : "Vital Records Due For Review",
"description" : "All records currently due for review.", "description" : "All records currently due for review.",
"search" : "reviewAsOf:[MIN TO TODAY]", "search" : "rma:reviewAsOf:[MIN TO TODAY]",
"searchparams" : "searchparams" :
{ {
"records" : true, "records" : true,

View File

@@ -270,6 +270,7 @@
<property name="kinds"> <property name="kinds">
<set> <set>
<value>RECORD</value> <value>RECORD</value>
<value>RECORD_FOLDER</value>
</set> </set>
</property> </property>
<property name="capability" value="FileToRecords" /> <property name="capability" value="FileToRecords" />

View File

@@ -3,5 +3,6 @@ moduleid=org_alfresco_module_rm
webAppName=alfresco webAppName=alfresco
warFile=alfresco.war warFile=alfresco.war
solrFile=alfresco-solr.zip
tomcatEnv=TOMCAT_HOME tomcatEnv=TOMCAT_HOME

View File

@@ -83,6 +83,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
import org.springframework.extensions.surf.util.ParameterCheck; import org.springframework.extensions.surf.util.ParameterCheck;
import org.springframework.extensions.surf.util.URLDecoder;
/** /**
* Records Management AdminService Implementation. * Records Management AdminService Implementation.
@@ -765,6 +766,8 @@ public class RecordsManagementAdminServiceImpl implements RecordsManagementAdmin
if (newName == null) return propQName; if (newName == null) return propQName;
QName newPropQName = getQNameForClientId(newName); QName newPropQName = getQNameForClientId(newName);
if (newPropQName != null)
{
propDefn = dictionaryService.getProperty(newPropQName); propDefn = dictionaryService.getProperty(newPropQName);
if (propDefn != null) if (propDefn != null)
{ {
@@ -772,13 +775,14 @@ public class RecordsManagementAdminServiceImpl implements RecordsManagementAdmin
String propIdAsString = newPropQName.toPrefixString(namespaceService); String propIdAsString = newPropQName.toPrefixString(namespaceService);
throw new PropertyAlreadyExistsMetadataException(propIdAsString); throw new PropertyAlreadyExistsMetadataException(propIdAsString);
} }
}
NodeRef modelRef = getCustomModelRef(propQName.getNamespaceURI()); NodeRef modelRef = getCustomModelRef(propQName.getNamespaceURI());
M2Model deserializedModel = readCustomContentModel(modelRef); M2Model deserializedModel = readCustomContentModel(modelRef);
M2Property targetProperty = findProperty(propQName, deserializedModel); M2Property targetProperty = findProperty(propQName, deserializedModel);
targetProperty.setName(newName); targetProperty.setName(new StringBuilder().append(RecordsManagementCustomModel.RM_CUSTOM_PREFIX).append(QName.NAMESPACE_PREFIX).append(newName).toString());
targetProperty.setTitle(newName); targetProperty.setTitle(URLDecoder.decode(newName));
writeCustomContentModel(modelRef, deserializedModel); writeCustomContentModel(modelRef, deserializedModel);
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())

View File

@@ -473,8 +473,11 @@ public class RMAfterInvocationProvider extends RMSecurityCommon
{ {
inclusionMask.set(i, true); inclusionMask.set(i, true);
} }
filteringResultSet.setResultSetMetaData(new SimpleResultSetMetaData(returnedObject.getResultSetMetaData().getLimitedBy(), PermissionEvaluationMode.EAGER, returnedObject.getResultSetMetaData() filteringResultSet.setResultSetMetaData(
.getSearchParameters())); new SimpleResultSetMetaData(
returnedObject.getResultSetMetaData().getLimitedBy(),
PermissionEvaluationMode.EAGER,
returnedObject.getResultSetMetaData().getSearchParameters()));
return filteringResultSet; return filteringResultSet;
} }
else else
@@ -483,27 +486,37 @@ public class RMAfterInvocationProvider extends RMSecurityCommon
{ {
inclusionMask.set(i, true); inclusionMask.set(i, true);
} }
filteringResultSet.setResultSetMetaData(new SimpleResultSetMetaData(returnedObject.getResultSetMetaData().getLimitedBy(), PermissionEvaluationMode.EAGER, returnedObject.getResultSetMetaData() filteringResultSet.setResultSetMetaData(
.getSearchParameters())); new SimpleResultSetMetaData(
returnedObject.getResultSetMetaData().getLimitedBy(),
PermissionEvaluationMode.EAGER,
returnedObject.getResultSetMetaData().getSearchParameters()));
return filteringResultSet; return filteringResultSet;
} }
} }
// record the start time // record the start time
long startTimeMillis = System.currentTimeMillis(); long startTimeMillis = System.currentTimeMillis();
// set the default, unlimited resultset type // set the default, unlimited resultset type
filteringResultSet.setResultSetMetaData(new SimpleResultSetMetaData(returnedObject.getResultSetMetaData().getLimitedBy(), PermissionEvaluationMode.EAGER, returnedObject.getResultSetMetaData() filteringResultSet.setResultSetMetaData(
.getSearchParameters())); new SimpleResultSetMetaData(
returnedObject.getResultSetMetaData().getLimitedBy(),
PermissionEvaluationMode.EAGER,
returnedObject.getResultSetMetaData().getSearchParameters()));
for (int i = 0; i < returnedObject.length(); i++) for (int i = 0; i < returnedObject.length(); i++)
{ {
long currentTimeMillis = System.currentTimeMillis(); long currentTimeMillis = System.currentTimeMillis();
if (i >= maxChecks || (currentTimeMillis - startTimeMillis) > maxCheckTime) // if (i >= maxChecks || (currentTimeMillis - startTimeMillis) > maxCheckTime)
{ // {
filteringResultSet.setResultSetMetaData(new SimpleResultSetMetaData(LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS, PermissionEvaluationMode.EAGER, returnedObject // filteringResultSet.setResultSetMetaData(
.getResultSetMetaData().getSearchParameters())); // new SimpleResultSetMetaData(
break; // LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS,
} // PermissionEvaluationMode.EAGER,
// returnedObject.getResultSetMetaData().getSearchParameters()));
// break;
// }
// All permission checks must pass // All permission checks must pass
inclusionMask.set(i, true); inclusionMask.set(i, true);

View File

@@ -106,13 +106,14 @@ public class RMSecurityCommon
*/ */
public int checkRead(NodeRef nodeRef) public int checkRead(NodeRef nodeRef)
{ {
int result = AccessDecisionVoter.ACCESS_ABSTAIN;
if (nodeRef != null) if (nodeRef != null)
{ {
// now we know the node - we can abstain for certain types and aspects (eg, rm) // now we know the node - we can abstain for certain types and aspects (eg, rm)
return checkRead(nodeRef, false); result = checkRead(nodeRef, false);
} }
return AccessDecisionVoter.ACCESS_ABSTAIN; return result;
} }
/** /**
@@ -123,13 +124,13 @@ public class RMSecurityCommon
*/ */
public int checkRead(NodeRef nodeRef, boolean allowDMRead) public int checkRead(NodeRef nodeRef, boolean allowDMRead)
{ {
if (nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) int result = AccessDecisionVoter.ACCESS_ABSTAIN;
if (rmService.isFilePlanComponent(nodeRef) == true)
{ {
return checkRmRead(nodeRef); result = checkRmRead(nodeRef);
} }
else else if (allowDMRead == true)
{
if (allowDMRead)
{ {
// Check DM read for copy etc // Check DM read for copy etc
// DM does not grant - it can only deny // DM does not grant - it can only deny
@@ -140,18 +141,15 @@ public class RMSecurityCommon
logger.debug("\t\tPermission is denied"); logger.debug("\t\tPermission is denied");
Thread.dumpStack(); Thread.dumpStack();
} }
return AccessDecisionVoter.ACCESS_DENIED; result = AccessDecisionVoter.ACCESS_DENIED;
} }
else else
{ {
return AccessDecisionVoter.ACCESS_GRANTED; result = AccessDecisionVoter.ACCESS_GRANTED;
}
}
else
{
return AccessDecisionVoter.ACCESS_ABSTAIN;
} }
} }
return result;
} }
/** /**

View File

@@ -72,7 +72,7 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.job.RecordsManagementJobExecuter#execute() * @see org.alfresco.module.org_alfresco_module_rm.job.RecordsManagementJobExecuter#execute()
*/ */
public void execute() public void executeImpl()
{ {
logger.debug("Job Starting"); logger.debug("Job Starting");

View File

@@ -69,7 +69,7 @@ public class NotifyOfRecordsDueForReviewJobExecuter extends RecordsManagementJob
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.job.RecordsManagementJobExecuter#execute() * @see org.alfresco.module.org_alfresco_module_rm.job.RecordsManagementJobExecuter#execute()
*/ */
public void execute() public void executeImpl()
{ {
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {

View File

@@ -80,7 +80,7 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter
this.behaviourFilter = behaviourFilter; this.behaviourFilter = behaviourFilter;
} }
public void execute() public void executeImpl()
{ {
if (logger.isDebugEnabled() == true) if (logger.isDebugEnabled() == true)
{ {

View File

@@ -20,18 +20,73 @@ package org.alfresco.module.org_alfresco_module_rm.job;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.springframework.context.ApplicationEvent;
import org.springframework.extensions.surf.util.AbstractLifecycleBean;
/** /**
* Records management job executer base class.
*
* @author Roy Wetherall * @author Roy Wetherall
*/ */
public abstract class RecordsManagementJobExecuter implements RecordsManagementModel public abstract class RecordsManagementJobExecuter extends AbstractLifecycleBean
implements RecordsManagementModel
{ {
/** Retrying transaction helper */
protected RetryingTransactionHelper retryingTransactionHelper; protected RetryingTransactionHelper retryingTransactionHelper;
/** Indicates whether the application bootstrap is complete or not */
protected boolean bootstrapComplete = false;
/**
* @param retryingTransactionHelper retrying transaction helper
*/
public void setRetryingTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) public void setRetryingTransactionHelper(RetryingTransactionHelper retryingTransactionHelper)
{ {
this.retryingTransactionHelper = retryingTransactionHelper; this.retryingTransactionHelper = retryingTransactionHelper;
} }
public abstract void execute(); /**
* Executes the jobs work.
*/
public void execute()
{
// jobs not allowed to execute unless bootstrap is complete
if (bootstrapComplete == true)
{
executeImpl();
}
}
/**
* Jobs work implementation.
*/
public abstract void executeImpl();
/**
* @see org.springframework.extensions.surf.util.AbstractLifecycleBean#onBootstrap(org.springframework.context.ApplicationEvent)
*/
@Override
protected void onBootstrap(ApplicationEvent arg0)
{
// record that the bootstrap has complete
bootstrapComplete = true;
}
/**
* @see org.springframework.extensions.surf.util.AbstractLifecycleBean#onShutdown(org.springframework.context.ApplicationEvent)
*/
@Override
protected void onShutdown(ApplicationEvent arg0)
{
// no implementation
}
/**
* @see org.springframework.extensions.surf.util.AbstractLifecycleBean#onApplicationEvent(org.springframework.context.ApplicationEvent)
*/
@Override
public void onApplicationEvent(ApplicationEvent arg0)
{
// no implementation
}
} }

View File

@@ -0,0 +1,370 @@
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;
}
}
}

View File

@@ -33,6 +33,7 @@ import org.alfresco.service.namespace.QName;
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.surf.util.URLDecoder;
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.WebScriptException; import org.springframework.extensions.webscripts.WebScriptException;
@@ -152,7 +153,7 @@ public class CustomPropertyDefinitionPost extends BaseCustomPropertyWebScript
String customisableElement = (String)params.get(PARAM_ELEMENT); String customisableElement = (String)params.get(PARAM_ELEMENT);
QName customisableType = mapToTypeQName(customisableElement); QName customisableType = mapToTypeQName(customisableElement);
String label = (String)params.get(PARAM_LABEL); String label = URLDecoder.decode((String)params.get(PARAM_LABEL));
//According to the wireframes, type here can only be date|text|number //According to the wireframes, type here can only be date|text|number
Serializable serializableParam = params.get(PARAM_DATATYPE); Serializable serializableParam = params.get(PARAM_DATATYPE);

View File

@@ -136,12 +136,6 @@ public class CustomPropertyDefinitionPut extends BaseCustomPropertyWebScript
"Could not find property definition for: " + propId); "Could not find property definition for: " + propId);
} }
if (params.containsKey(PARAM_LABEL))
{
String label = (String)params.get(PARAM_LABEL);
result = rmAdminService.updateCustomPropertyDefinitionName(propQName, label);
}
if (params.containsKey(PARAM_CONSTRAINT_REF)) if (params.containsKey(PARAM_CONSTRAINT_REF))
{ {
String constraintRef = (String)params.get(PARAM_CONSTRAINT_REF); String constraintRef = (String)params.get(PARAM_CONSTRAINT_REF);
@@ -156,6 +150,13 @@ public class CustomPropertyDefinitionPut extends BaseCustomPropertyWebScript
result = rmAdminService.setCustomPropertyDefinitionConstraint(propQName, constraintRefQName); result = rmAdminService.setCustomPropertyDefinitionConstraint(propQName, constraintRefQName);
} }
} }
if (params.containsKey(PARAM_LABEL))
{
String label = (String)params.get(PARAM_LABEL);
result = rmAdminService.updateCustomPropertyDefinitionName(propQName, label);
}
return result; return result;
} }

View File

@@ -982,7 +982,7 @@ public class DispositionServiceImplTest extends BaseRMTestCase
{ {
// Publish the updates // Publish the updates
PublishUpdatesJobExecuter updater = (PublishUpdatesJobExecuter)applicationContext.getBean("publishUpdatesJobExecuter"); PublishUpdatesJobExecuter updater = (PublishUpdatesJobExecuter)applicationContext.getBean("publishUpdatesJobExecuter");
updater.execute(); updater.executeImpl();
// Check the record has been updated // Check the record has been updated
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(testRM386Record); DispositionAction dispositionAction = dispositionService.getNextDispositionAction(testRM386Record);