diff --git a/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java b/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java index 3a9e38266b..71943217c9 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java +++ b/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java @@ -182,6 +182,9 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { throw new ReplicationServiceException("Unable to execute a disabled replication definition"); } + // Clear the previous transfer report reference + replicationDef.setLocalTransferReport(null); + // Lock the service - only one instance of the replication // should occur at a time ReplicationDefinitionLockExtender lock = @@ -205,11 +208,14 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { buildTransferDefinition(replicationDef, toTransfer); // Off we go - transferService.transfer( + NodeRef transferReport = transferService.transfer( replicationDef.getTargetName(), transferDefinition, lock ); + + // Record the details of the transfer report + replicationDef.setLocalTransferReport(transferReport); } catch(Exception e) { if(! (e instanceof TransferCancelledException)) { diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java index 11585dbd19..452356c15c 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java +++ b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java @@ -46,6 +46,7 @@ import org.alfresco.service.cmr.replication.ReplicationDefinition; import org.alfresco.service.cmr.replication.ReplicationService; import org.alfresco.service.cmr.replication.ReplicationServiceException; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -79,6 +80,7 @@ public class ReplicationServiceIntegrationTest extends TestCase private ReplicationService replicationService; private TransactionService transactionService; private TransferService transferService; + private ContentService contentService; private JobLockService jobLockService; private ActionService actionService; private NodeService nodeService; @@ -114,6 +116,7 @@ public class ReplicationServiceIntegrationTest extends TestCase replicationService = (ReplicationService) ctx.getBean("replicationService"); transactionService = (TransactionService) ctx.getBean("transactionService"); transferService = (TransferService) ctx.getBean("transferService"); + contentService = (ContentService) ctx.getBean("contentService"); jobLockService = (JobLockService) ctx.getBean("jobLockService"); actionService = (ActionService) ctx.getBean("actionService"); nodeService = (NodeService) ctx.getBean("nodeService"); @@ -662,6 +665,8 @@ public class ReplicationServiceIntegrationTest extends TestCase rd.getPayload().add(folder1); rd.getPayload().add(folder2a); + assertEquals(null, rd.getLocalTransferReport()); + txn = transactionService.getUserTransaction(); txn.begin(); actionService.executeAction(rd, replicationRoot); @@ -732,6 +737,22 @@ public class ReplicationServiceIntegrationTest extends TestCase fail("Found zone as " + r.getChildRef() + " but it shouldn't be transfered!"); } } + + // Check we got a transfer report, and it looks sensible + NodeRef transferReport = rd.getLocalTransferReport(); + assertNotNull(transferReport); + + txn = transactionService.getUserTransaction(); + txn.begin(); + + ContentReader transferReader = + contentService.getReader(transferReport, ContentModel.PROP_CONTENT); + String report = transferReader.getContentString(); + + assertTrue("XML not found in:\n" + report, report.contains("