diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluator.java
index 8a22f8085a..6ef3904d55 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluator.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2011 Alfresco Software Limited.
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -27,29 +27,73 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.RegexQNamePattern;
/**
+ * Evaluates whether the node in question is transferring is either a transfer or accession.
+ *
* @author Roy Wetherall
*/
public class TransferEvaluator extends BaseEvaluator
{
+ /** indicates whether we are looking for accessions or transfers */
private boolean transferAccessionIndicator = false;
+ /**
+ * @param transferAccessionIndicator true if accession, false otherwise
+ */
public void setTransferAccessionIndicator(boolean transferAccessionIndicator)
{
this.transferAccessionIndicator = transferAccessionIndicator;
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.jscript.app.BaseEvaluator#evaluateImpl(org.alfresco.service.cmr.repository.NodeRef)
+ */
@Override
protected boolean evaluateImpl(NodeRef nodeRef)
{
+ boolean result = false;
+
+ NodeRef transfer = getTransferNodeRef(nodeRef);
+ if (transfer != null)
+ {
+ boolean actual = ((Boolean)nodeService.getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR)).booleanValue();
+ result = (actual == transferAccessionIndicator);
+ }
+
+ return result;
+ }
+
+ /**
+ * Helper method to get the transfer node reference.
+ *
+ * Takes into account records in tranferred record folders.
+ *
+ * @param nodeRef node reference
+ * @return {@link NodeRef} transfer node
+ */
+ private NodeRef getTransferNodeRef(NodeRef nodeRef)
+ {
+ NodeRef result = null;
+
List parents = nodeService.getParentAssocs(nodeRef, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
if (parents.size() == 1)
{
- boolean actual = ((Boolean)nodeService.getProperty(parents.get(0).getParentRef(), RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR)).booleanValue();
- return (actual == transferAccessionIndicator);
+ result = parents.get(0).getParentRef();
}
else
{
- return false;
+ if (recordService.isRecord(nodeRef))
+ {
+ for (NodeRef recordFolder : recordFolderService.getRecordFolders(nodeRef))
+ {
+ result = getTransferNodeRef(recordFolder);
+ if (result != null)
+ {
+ break;
+ }
+ };
+ }
}
+
+ return result;
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java
index 7d9ece2618..8c004ddbfc 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java
@@ -185,7 +185,15 @@ public class TransferServiceImpl extends ServiceBaseImpl implements TransferServ
setPDFIndicationFlag(transferNodeRef, nodeRef);
// Set the transferring indicator aspect
- nodeService.addAspect(nodeRef, ASPECT_TRANSFERRING, null);
+ nodeService.addAspect(nodeRef, ASPECT_TRANSFERRING, null);
+ if (isRecordFolder(nodeRef) == true)
+ {
+ // add the transferring indicator aspect to all the child records
+ for (NodeRef record : recordService.getRecords(nodeRef))
+ {
+ nodeService.addAspect(record, ASPECT_TRANSFERRING, null);
+ }
+ }
return transferNodeRef;
}
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/AllUnitTestSuite.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/AllUnitTestSuite.java
index 3f35bfca29..f5d000dd29 100755
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/AllUnitTestSuite.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/AllUnitTestSuite.java
@@ -20,6 +20,7 @@ package org.alfresco.module.org_alfresco_module_rm;
import org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementTypeFormFilterUnitTest;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServiceImplUnitTest;
+import org.alfresco.module.org_alfresco_module_rm.jscript.app.evaluator.TransferEvaluatorUnitTest;
import org.alfresco.module.org_alfresco_module_rm.record.RecordMetadataBootstrapUnitTest;
import org.alfresco.module.org_alfresco_module_rm.record.RecordServiceImplUnitTest;
import org.junit.runner.RunWith;
@@ -38,7 +39,8 @@ import org.junit.runners.Suite.SuiteClasses;
RecordMetadataBootstrapUnitTest.class,
RecordServiceImplUnitTest.class,
RecordsManagementTypeFormFilterUnitTest.class,
- HoldServiceImplUnitTest.class
+ HoldServiceImplUnitTest.class,
+ TransferEvaluatorUnitTest.class
})
public class AllUnitTestSuite
{
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/BaseUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/BaseUnitTest.java
index 485102a1ae..40ea420c7d 100755
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/BaseUnitTest.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/BaseUnitTest.java
@@ -18,19 +18,29 @@
*/
package org.alfresco.module.org_alfresco_module_rm;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
+import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
import org.alfresco.service.cmr.dictionary.DictionaryService;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
+import org.alfresco.service.namespace.QNamePattern;
import org.alfresco.util.GUID;
import org.alfresco.util.collections.CollectionUtils;
import org.junit.Before;
@@ -46,6 +56,9 @@ public class BaseUnitTest implements RecordsManagementModel
{
protected NodeRef filePlanComponent;
protected NodeRef filePlan;
+
+ protected NodeRef recordFolder;
+ protected NodeRef record;
/** core service mocks */
@Mock(name="nodeService") protected NodeService mockedNodeService;
@@ -54,6 +67,8 @@ public class BaseUnitTest implements RecordsManagementModel
@Mock(name="identifierService") protected IdentifierService mockedIdentifierService;
@Mock(name="filePlanService") protected FilePlanService mockedFilePlanService;
+ @Mock(name="recordFolderService") protected RecordFolderService mockedRecordFolderService;
+ @Mock(name="recordService") protected RecordService mockedRecordService;
/**
* Test method setup
@@ -71,6 +86,20 @@ public class BaseUnitTest implements RecordsManagementModel
when(mockedNamespaceService.getNamespaceURI(RM_PREFIX)).thenReturn(RM_URI);
when(mockedNamespaceService.getPrefixes(RM_URI)).thenReturn(CollectionUtils.unmodifiableSet(RM_PREFIX));
+ // setup record folder and record
+ recordFolder = generateRecordFolder();
+ doReturn(true).when(mockedRecordFolderService).isRecordFolder(recordFolder);
+ record = generateRecord();
+ doReturn(true).when(mockedRecordService).isRecord(record);
+
+ // set record as child of record folder
+ List result = new ArrayList(1);
+ result.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, recordFolder, generateQName(), record, true, 1));
+ doReturn(result).when(mockedNodeService).getChildAssocs(eq(recordFolder), eq(ContentModel.ASSOC_CONTAINS), any(QNamePattern.class));
+ doReturn(result).when(mockedNodeService).getParentAssocs(record);
+ doReturn(Collections.singletonList(recordFolder)).when(mockedRecordFolderService).getRecordFolders(record);
+ doReturn(Collections.singletonList(record)).when(mockedRecordService).getRecords(recordFolder);
+
}
/**
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java
index 589040a917..9e39b48ca1 100644
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java
@@ -42,19 +42,15 @@ import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.BaseUnitTest;
-import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
-import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
-import org.alfresco.service.namespace.QNamePattern;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
-import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -74,12 +70,7 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
protected NodeRef holdContainer;
protected NodeRef hold;
- protected NodeRef hold2;
- protected NodeRef recordFolder;
- protected NodeRef record;
-
- @Mock(name="recordFolderService") protected RecordFolderService mockedRecordFolderService;
- @Mock(name="recordService") protected RecordService mockedRecordService;
+ protected NodeRef hold2;
@Spy @InjectMocks HoldServiceImpl holdService;
@@ -93,19 +84,11 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
holdContainer = generateNodeRef(TYPE_HOLD_CONTAINER);
hold = generateNodeRef(TYPE_HOLD);
hold2 = generateNodeRef(TYPE_HOLD);
- recordFolder = generateRecordFolder();
- record = generateRecord();
// setup interactions
doReturn(holdContainer).when(mockedFilePlanService).getHoldContainer(filePlan);
- // set record as child of record folder
- List result = new ArrayList(1);
- result.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, recordFolder, generateQName(), record, true, 1));
- doReturn(result).when(mockedNodeService).getChildAssocs(eq(recordFolder), eq(ContentModel.ASSOC_CONTAINS), any(QNamePattern.class));
- doReturn(result).when(mockedNodeService).getParentAssocs(record);
- doReturn(Collections.singletonList(recordFolder)).when(mockedRecordFolderService).getRecordFolders(record);
- doReturn(Collections.singletonList(record)).when(mockedRecordService).getRecords(recordFolder);
+
}
@Test
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluatorUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluatorUnitTest.java
new file mode 100644
index 0000000000..25d626dc0e
--- /dev/null
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/evaluator/TransferEvaluatorUnitTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.module.org_alfresco_module_rm.jscript.app.evaluator;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.alfresco.module.org_alfresco_module_rm.BaseUnitTest;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.namespace.RegexQNamePattern;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+
+/**
+ * Transfer evaluator unit test.
+ *
+ * @author Roy Wetherall
+ */
+public class TransferEvaluatorUnitTest extends BaseUnitTest
+{
+ private NodeRef transfer;
+
+ @Spy @InjectMocks TransferEvaluator transferEvaluator;
+
+ @Override
+ public void before()
+ {
+ super.before();
+
+ // setup node references
+ transfer = generateNodeRef(TYPE_TRANSFER);
+ }
+
+ private List getParentAssocs(NodeRef provided)
+ {
+ List result = new ArrayList(1);
+ result.add(new ChildAssociationRef(ASSOC_TRANSFERRED, transfer, generateQName(), provided, false, 1));
+ return result;
+ }
+
+ @Test
+ public void isNotTransferringRecord()
+ {
+ // setup interactions
+ doReturn(Collections.emptyList()).when(mockedNodeService).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+
+ // evaluate
+ assertFalse(transferEvaluator.evaluate(record));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, never()).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, times(1)).getRecordFolders(record);
+
+ }
+
+ @Test
+ public void isTransferringWhenExpectingAccending()
+ {
+ // setup interactions
+ doReturn(Boolean.FALSE).when(mockedNodeService).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ doReturn(getParentAssocs(record)).when(mockedNodeService).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ transferEvaluator.setTransferAccessionIndicator(true);
+
+ // evaluate
+ assertFalse(transferEvaluator.evaluate(record));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, times(1)).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, never()).getRecordFolders(record);
+ }
+
+ @Test
+ public void transferringRecord()
+ {
+ // setup interactions
+ doReturn(Boolean.FALSE).when(mockedNodeService).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ doReturn(getParentAssocs(record)).when(mockedNodeService).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+
+ // evaluate
+ assertTrue(transferEvaluator.evaluate(record));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, times(1)).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, never()).getRecordFolders(record);
+
+ }
+
+ @Test
+ public void transferringRecordFolder()
+ {
+ // setup interactions
+ doReturn(Boolean.FALSE).when(mockedNodeService).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ doReturn(getParentAssocs(recordFolder)).when(mockedNodeService).getParentAssocs(recordFolder, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+
+ // evaluate
+ assertTrue(transferEvaluator.evaluate(recordFolder));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(recordFolder, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, times(1)).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, never()).getRecordFolders(record);
+ }
+
+ @Test
+ public void transferringRecordWithinRecordFolder()
+ {
+ // setup interactions
+ doReturn(Boolean.FALSE).when(mockedNodeService).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ doReturn(Collections.emptyList()).when(mockedNodeService).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ doReturn(getParentAssocs(recordFolder)).when(mockedNodeService).getParentAssocs(recordFolder, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+
+ // evaluate
+ assertTrue(transferEvaluator.evaluate(record));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, times(1)).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, times(1)).getRecordFolders(record);
+
+ }
+
+ @Test
+ public void accendingRecord()
+ {
+ // setup interactions
+ doReturn(Boolean.TRUE).when(mockedNodeService).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ doReturn(getParentAssocs(record)).when(mockedNodeService).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ transferEvaluator.setTransferAccessionIndicator(true);
+
+ // evaluate
+ assertTrue(transferEvaluator.evaluate(record));
+
+ // verify interactions
+ verify(mockedNodeService, times(1)).getParentAssocs(record, RecordsManagementModel.ASSOC_TRANSFERRED, RegexQNamePattern.MATCH_ALL);
+ verify(mockedNodeService, times(1)).getProperty(transfer, RecordsManagementModel.PROP_TRANSFER_ACCESSION_INDICATOR);
+ verify(mockedRecordFolderService, never()).getRecordFolders(record);
+
+ }
+
+}
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordMetadataBootstrapUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordMetadataBootstrapUnitTest.java
index d3293f4520..e34ed315e7 100755
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordMetadataBootstrapUnitTest.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordMetadataBootstrapUnitTest.java
@@ -27,7 +27,6 @@ import org.alfresco.module.org_alfresco_module_rm.BaseUnitTest;
import org.alfresco.service.namespace.QName;
import org.junit.Test;
import org.mockito.InjectMocks;
-import org.mockito.Mock;
/**
* Unit test for RecordMetadataBootstrap
@@ -36,8 +35,6 @@ import org.mockito.Mock;
*/
public class RecordMetadataBootstrapUnitTest extends BaseUnitTest
{
- @Mock(name="recordService") protected RecordService mockedRecordService;
-
@InjectMocks private RecordMetadataBootstrap bootstrap;
/**