Merged 'master'.

Conflicts:
	rm-community/rm-community-share/pom.xml
	rm-enterprise/rm-enterprise-share/src/main/amp/config/alfresco/site-webscripts/org/alfresco/components/console/classification/security-clearance.get.js
This commit is contained in:
ddraper
2016-07-04 10:52:42 +01:00
parent 6cbe022956
commit 001eaa649c
10 changed files with 910 additions and 791 deletions

View File

@@ -89,7 +89,6 @@
</modules> </modules>
<properties> <properties>
<alfresco.rm.version>${project.version}</alfresco.rm.version>
<alfresco.db.params>AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=10000;MVCC=FALSE;LOCK_MODE=0;IGNORECASE=TRUE</alfresco.db.params> <alfresco.db.params>AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=10000;MVCC=FALSE;LOCK_MODE=0;IGNORECASE=TRUE</alfresco.db.params>
<maven.alfresco.includeDependencies>false</maven.alfresco.includeDependencies> <maven.alfresco.includeDependencies>false</maven.alfresco.includeDependencies>
<maven.build.sourceVersion>1.7</maven.build.sourceVersion> <maven.build.sourceVersion>1.7</maven.build.sourceVersion>
@@ -146,7 +145,7 @@
</regexPropertySetting> </regexPropertySetting>
<regexPropertySetting> <regexPropertySetting>
<name>rm.module.version</name> <name>rm.module.version</name>
<value>${alfresco.rm.version}</value> <value>${project.version}</value>
<regex>(\d+)\.(\d+).*</regex> <regex>(\d+)\.(\d+).*</regex>
<replacement>$1.$2</replacement> <replacement>$1.$2</replacement>
<failIfNoMatch>false</failIfNoMatch> <failIfNoMatch>false</failIfNoMatch>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>alfresco-rm-automation</artifactId> <artifactId>alfresco-rm-automation</artifactId>
@@ -65,8 +64,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<!-- License header generation -->
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId> <artifactId>license-maven-plugin</artifactId>
@@ -76,44 +73,34 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
<descriptionTemplate>${project.parent.basedir}/license/description.ftl</descriptionTemplate> <descriptionTemplate>${project.parent.basedir}/license/description.ftl</descriptionTemplate>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> <plugin>
<plugin> <groupId>org.eclipse.m2e</groupId>
<groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>
<artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version>
<version>1.0.0</version> <configuration>
<configuration> <lifecycleMappingMetadata>
<lifecycleMappingMetadata> <pluginExecutions>
<pluginExecutions> <pluginExecution>
<pluginExecution> <pluginExecutionFilter>
<pluginExecutionFilter> <groupId>org.codehaus.mojo</groupId>
<groupId> <artifactId>license-maven-plugin</artifactId>
org.codehaus.mojo <versionRange>[1.8,)</versionRange>
</groupId> <goals>
<artifactId> <goal>update-file-header</goal>
license-maven-plugin </goals>
</artifactId> </pluginExecutionFilter>
<versionRange> <action>
[1.8,) <ignore />
</versionRange> </action>
<goals> </pluginExecution>
<goal> </pluginExecutions>
update-file-header </lifecycleMappingMetadata>
</goal> </configuration>
</goals> </plugin>
</pluginExecutionFilter> </plugins>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement> </pluginManagement>
</build> </build>
@@ -242,24 +229,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
</goals> </goals>
<configuration> <configuration>
<artifactItems> <artifactItems>
<artifactItem>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-rm-community-share</artifactId>
<version>${project.version}</version>
<type>amp</type>
</artifactItem>
<artifactItem> <artifactItem>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-rm-enterprise-share</artifactId> <artifactId>alfresco-rm-enterprise-share</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<type>amp</type> <type>amp</type>
</artifactItem> </artifactItem>
<artifactItem>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-rm-community-repo</artifactId>
<version>${project.version}</version>
<type>amp</type>
</artifactItem>
<artifactItem> <artifactItem>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-rm-enterprise-repo</artifactId> <artifactId>alfresco-rm-enterprise-repo</artifactId>
@@ -278,18 +253,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
<artifactId>alfresco-maven-plugin</artifactId> <artifactId>alfresco-maven-plugin</artifactId>
<extensions>true</extensions> <extensions>true</extensions>
<executions> <executions>
<execution>
<id>install-community-repo-amp</id>
<goals>
<goal>install</goal>
</goals>
<phase>process-test-resources</phase>
<configuration>
<backup>true</backup>
<ampLocation>${project.build.directory}/amps/alfresco-rm-community-repo-${project.version}.amp</ampLocation>
<warLocation>${project.build.directory}/alf-installation/tomcat/webapps/alfresco.war</warLocation>
</configuration>
</execution>
<execution> <execution>
<id>install-enterprise-repo-amp</id> <id>install-enterprise-repo-amp</id>
<goals> <goals>
@@ -302,18 +265,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
<warLocation>${project.build.directory}/alf-installation/tomcat/webapps/alfresco.war</warLocation> <warLocation>${project.build.directory}/alf-installation/tomcat/webapps/alfresco.war</warLocation>
</configuration> </configuration>
</execution> </execution>
<execution>
<id>install-community-share-amp</id>
<goals>
<goal>install</goal>
</goals>
<phase>process-test-resources</phase>
<configuration>
<backup>true</backup>
<ampLocation>${project.build.directory}/amps/alfresco-rm-community-share-${project.version}.amp</ampLocation>
<warLocation>${project.build.directory}/alf-installation/tomcat/webapps/share.war</warLocation>
</configuration>
</execution>
<execution> <execution>
<id>install-enterprise-share-amp</id> <id>install-enterprise-share-amp</id>
<goals> <goals>

View File

@@ -37,3 +37,4 @@ rm.action.event-not-undone=The event {0} can't be undone, because it's not defin
rm.action.node-not-record-category=The disposition schedule could not be created, because the actioned upon node ({0}) was not a record category. rm.action.node-not-record-category=The disposition schedule could not be created, because the actioned upon node ({0}) was not a record category.
rm.action.parameter-not-supplied=The parameter ''{0}'' has not been supplied. rm.action.parameter-not-supplied=The parameter ''{0}'' has not been supplied.
rm.action.delete-not-hold-type=The hold couldn't be deleted, because the node isn't of type {0}. (actionedUponNodeRef={1}) rm.action.delete-not-hold-type=The hold couldn't be deleted, because the node isn't of type {0}. (actionedUponNodeRef={1})
rm.action.record-folder-create=Operation failed, because you can't place a record folder into another record folder.

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>alfresco-rm-community-repo</artifactId> <artifactId>alfresco-rm-community-repo</artifactId>
<name>Alfresco Records Management Community Repo</name> <name>Alfresco Records Management Community Repo</name>
<description>Alfresco Record Management Core Repository Extension</description> <description>Alfresco Record Management Community Repository Extension</description>
<packaging>amp</packaging> <packaging>amp</packaging>
<parent> <parent>
@@ -83,10 +83,10 @@
</goals> </goals>
<configuration> <configuration>
<target> <target>
<copy todir="${project.build.directory}/${project.build.finalName}/config/alfresco"> <move todir="${project.build.directory}/${project.build.finalName}/config/alfresco">
<fileset dir="${project.build.outputDirectory}/alfresco" /> <fileset dir="${project.build.outputDirectory}/alfresco" />
</copy> </move>
<move file="${project.build.directory}/${project.build.finalName}/config/alfresco/module/org_alfresco_module_rm/module.properties" todir="${project.build.directory}/${project.build.finalName}" /> <copy file="${project.build.directory}/${project.build.finalName}/config/alfresco/module/org_alfresco_module_rm/module.properties" todir="${project.build.directory}/${project.build.finalName}" />
</target> </target>
</configuration> </configuration>
</execution> </execution>
@@ -205,24 +205,21 @@
</excludes> </excludes>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<!-- License header generation --> <groupId>org.codehaus.mojo</groupId>
<plugin> <artifactId>license-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId> <configuration>
<artifactId>license-maven-plugin</artifactId> <licenseName>alfresco_community</licenseName>
<configuration> <roots>
<licenseName>alfresco_community</licenseName> <root>source/java</root>
<roots> <root>unit-test/java</root>
<root>source/java</root> <root>source/compatibility</root>
<root>unit-test/java</root> <root>config</root>
<root>source/compatibility</root> <root>test/java</root>
<root>config</root> <root>test/resources</root>
<root>test/java</root> </roots>
<root>test/resources</root> </configuration>
</roots> </plugin>
</configuration>
</plugin>
</plugins> </plugins>
<pluginManagement> <pluginManagement>
<plugins> <plugins>

View File

@@ -47,6 +47,9 @@ public class EditDispositionActionAsOfDateAction extends RMActionExecuterAbstrac
private static final String MSG_VALID_DATE_DISP_ASOF = "rm.action.valid-date-disp-asof"; private static final String MSG_VALID_DATE_DISP_ASOF = "rm.action.valid-date-disp-asof";
private static final String MSG_DISP_ASOF_LIFECYCLE_APPLIED = "rm.action.disp-asof-lifecycle-applied"; private static final String MSG_DISP_ASOF_LIFECYCLE_APPLIED = "rm.action.disp-asof-lifecycle-applied";
/** Action name */
public static final String NAME = "editDispositionActionAsOfDate";
/** Action parameters */ /** Action parameters */
public static final String PARAM_AS_OF_DATE = "asOfDate"; public static final String PARAM_AS_OF_DATE = "asOfDate";

View File

@@ -889,6 +889,13 @@ public class DispositionServiceImpl extends ServiceBaseImpl
// Get the current action // Get the current action
String currentADId = (String) nodeService.getProperty(currentDispositionAction, PROP_DISPOSITION_ACTION_ID); String currentADId = (String) nodeService.getProperty(currentDispositionAction, PROP_DISPOSITION_ACTION_ID);
currentDispositionActionDefinition = di.getDispositionActionDefinition(currentADId); currentDispositionActionDefinition = di.getDispositionActionDefinition(currentADId);
// When the record has multiple disposition schedules the current disposition action may not be found by id
// In this case it will be searched by name
if(currentDispositionActionDefinition == null)
{
String currentADName = (String) nodeService.getProperty(currentDispositionAction, PROP_DISPOSITION_ACTION);
currentDispositionActionDefinition = di.getDispositionActionDefinitionByName(currentADName);
}
// Get the next disposition action // Get the next disposition action
int index = currentDispositionActionDefinition.getIndex(); int index = currentDispositionActionDefinition.getIndex();

View File

@@ -31,6 +31,7 @@ import java.io.Serializable;
import java.util.Map; import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
@@ -49,6 +50,7 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.springframework.extensions.surf.util.I18NUtil;
/** /**
* rma:recordFolder behaviour bean * rma:recordFolder behaviour bean
@@ -73,6 +75,9 @@ public class RecordFolderType extends AbstractDisposableItem
/** vital record service */ /** vital record service */
protected VitalRecordService vitalRecordService; protected VitalRecordService vitalRecordService;
/** I18N */
private static final String MSG_CANNOT_CREATE_RECORD_FOLDER = "rm.action.record-folder-create";
/** /**
* @param recordService record service * @param recordService record service
*/ */
@@ -211,12 +216,13 @@ public class RecordFolderType extends AbstractDisposableItem
public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
{ {
NodeRef nodeRef = childAssocRef.getChildRef(); NodeRef nodeRef = childAssocRef.getChildRef();
if (nodeService.exists(nodeRef) && instanceOf(nodeRef, TYPE_RECORD_FOLDER))
if (nodeService.exists(nodeRef))
{ {
// ensure nothing is being added to a closed record folder // ensure nothing is being added to a closed record folder
NodeRef recordFolder = childAssocRef.getParentRef(); NodeRef recordFolder = childAssocRef.getParentRef();
Boolean isClosed = (Boolean) nodeService.getProperty(recordFolder, PROP_IS_CLOSED); Boolean isClosed = (Boolean) nodeService.getProperty(recordFolder, PROP_IS_CLOSED);
if (isClosed != null && Boolean.TRUE.equals(isClosed)) if (isClosed != null && isClosed)
{ {
throw new AlfrescoRuntimeException("You can't add new items to a closed record folder."); throw new AlfrescoRuntimeException("You can't add new items to a closed record folder.");
} }
@@ -238,6 +244,12 @@ public class RecordFolderType extends AbstractDisposableItem
{ {
final NodeRef recordFolder = childAssocRef.getChildRef(); final NodeRef recordFolder = childAssocRef.getChildRef();
// only records can be added in a record folder or hidden folders(is the case of e-mail attachments)
if (!instanceOf(recordFolder, ContentModel.TYPE_CONTENT) && !nodeService.hasAspect(recordFolder, ContentModel.ASPECT_HIDDEN))
{
throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER));
}
behaviourFilter.disableBehaviour(); behaviourFilter.disableBehaviour();
try try
{ {

View File

@@ -0,0 +1,148 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2016 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* 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/>.
* #L%
*/
package org.alfresco.module.org_alfresco_module_rm.test.integration.disposition;
import static org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils.DEFAULT_DISPOSITION_DESCRIPTION;
import static org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils.DEFAULT_DISPOSITION_INSTRUCTIONS;
import static org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils.DEFAULT_EVENT_NAME;
import static org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils.PERIOD_ONE_WEEK;
import static org.alfresco.util.GUID.generate;
import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction;
import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction;
import org.alfresco.module.org_alfresco_module_rm.action.impl.EditDispositionActionAsOfDateAction;
import org.alfresco.module.org_alfresco_module_rm.action.impl.TransferAction;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
/**
* Update next disposition step integration tests.
*
* @author Roxana Lucanu
* @since 2.4.1
*/
public class UpdateNextDispositionActionTest extends BaseRMTestCase
{
/**
* Given a record with multiple dispositions
* When updating the next step
* Then the action is available
* <p>
* relates to https://issues.alfresco.com/jira/browse/RM-3060
*/
public void testUpdateNextDispositionAction_RM3060() throws Exception
{
doBehaviourDrivenTest(new BehaviourDrivenTest()
{
NodeRef record;
NodeRef folder2;
@Override
public void given()
{
// create category1
NodeRef category1 = filePlanService.createRecordCategory(filePlan, generate());
// create disposition schedule for category1
createDispositionSchedule(category1);
// create category2
NodeRef category2 = filePlanService.createRecordCategory(filePlan, generate());
// create disposition schedule for category2
createDispositionSchedule(category2);
// create folder2 inside category2
folder2 = recordFolderService.createRecordFolder(category2, generate());
// create folder1 inside category1
NodeRef folder1 = recordFolderService.createRecordFolder(category1, generate());
// create record inside folder1
record = utils.createRecord(folder1, generate(), generate());
}
@Override
public void when() throws Exception
{
// link the record to folder2
recordService.link(record, folder2);
// complete record
utils.completeRecord(record);
// set the disposition as of date to now on the record
rmActionService.executeRecordsManagementAction(record,
EditDispositionActionAsOfDateAction.NAME,
Collections.singletonMap(EditDispositionActionAsOfDateAction.PARAM_AS_OF_DATE, new Date()));
// cut off
rmActionService.executeRecordsManagementAction(record, CutOffAction.NAME, null);
}
@Override
public void then() throws Exception
{
assertTrue(nodeService.hasAspect(record, ASPECT_CUT_OFF));
}
});
}
private void createDispositionSchedule(NodeRef category)
{
DispositionSchedule ds = utils.createDispositionSchedule(category, DEFAULT_DISPOSITION_INSTRUCTIONS, DEFAULT_DISPOSITION_DESCRIPTION, true, false, false);
// create the properties for CUTOFF action and add it to the disposition action definition
Map<QName, Serializable> cutOff = new HashMap<QName, Serializable>(3);
cutOff.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME);
cutOff.put(PROP_DISPOSITION_DESCRIPTION, generate());
cutOff.put(PROP_DISPOSITION_PERIOD, PERIOD_ONE_WEEK);
dispositionService.addDispositionActionDefinition(ds, cutOff);
// create the properties for TRANSFER action and add it to the disposition action definition
Map<QName, Serializable> transfer = new HashMap<QName, Serializable>(3);
transfer.put(PROP_DISPOSITION_ACTION_NAME, TransferAction.NAME);
transfer.put(PROP_DISPOSITION_DESCRIPTION, generate());
transfer.put(PROP_DISPOSITION_EVENT, (Serializable)Collections.singletonList(DEFAULT_EVENT_NAME));
dispositionService.addDispositionActionDefinition(ds, transfer);
// create the properties for DESTROY action and add it to the disposition action definition
Map<QName, Serializable> destroy = new HashMap<QName, Serializable>(3);
destroy.put(PROP_DISPOSITION_ACTION_NAME, DestroyAction.NAME);
destroy.put(PROP_DISPOSITION_DESCRIPTION, generate());
destroy.put(PROP_DISPOSITION_PERIOD, PERIOD_ONE_WEEK);
dispositionService.addDispositionActionDefinition(ds, destroy);
}
}

View File

@@ -86,6 +86,7 @@ public class CommonRMTestUtils implements RecordsManagementModel
public static final String DEFAULT_EVENT_NAME = "case_closed"; public static final String DEFAULT_EVENT_NAME = "case_closed";
public static final String PERIOD_NONE = "none|0"; public static final String PERIOD_NONE = "none|0";
public static final String PERIOD_IMMEDIATELY = "immediately|0"; public static final String PERIOD_IMMEDIATELY = "immediately|0";
public static final String PERIOD_ONE_WEEK = "week|1";
/** /**
* Constructor * Constructor