From 2d6fd3080339e8a91f6b0be15d7b71aeb2263862 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Thu, 19 Aug 2010 16:18:53 +0000 Subject: [PATCH] Replication - record target transfer report in replication definition git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21880 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../ReplicationActionExecutor.java | 65 +++++++++++++++++-- .../ReplicationServiceImplTest.java | 1 + .../ReplicationServiceIntegrationTest.java | 28 +++++--- 3 files changed, 81 insertions(+), 13 deletions(-) diff --git a/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java b/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java index 6754e39381..849477d8f8 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java +++ b/source/java/org/alfresco/repo/replication/ReplicationActionExecutor.java @@ -44,6 +44,7 @@ import org.alfresco.service.cmr.transfer.TransferDefinition; import org.alfresco.service.cmr.transfer.TransferEvent; import org.alfresco.service.cmr.transfer.TransferEventBegin; import org.alfresco.service.cmr.transfer.TransferEventEnterState; +import org.alfresco.service.cmr.transfer.TransferEventReport; import org.alfresco.service.cmr.transfer.TransferService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -182,8 +183,9 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { throw new ReplicationServiceException("Unable to execute a disabled replication definition"); } - // Clear the previous transfer report reference + // Clear the previous transfer report references replicationDef.setLocalTransferReport(null); + replicationDef.setRemoteTransferReport(null); // Lock the service - only one instance of the replication // should occur at a time @@ -199,6 +201,9 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { lock.close(); throw new ReplicationServiceException("Error processing payload list - " + e.getMessage(), e); } + + // Holder for reports generated by the transfer + ReplicationReportCollector reports = new ReplicationReportCollector(); // Ask the transfer service to do the replication // work for us @@ -208,14 +213,15 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { buildTransferDefinition(replicationDef, toTransfer); // Off we go - NodeRef transferReport = transferService.transfer( + transferService.transfer( replicationDef.getTargetName(), transferDefinition, - lock + lock, reports ); - // Record the details of the transfer report - replicationDef.setLocalTransferReport(transferReport); + // Record the details of the transfer reports + replicationDef.setLocalTransferReport(reports.getLocalReport()); + replicationDef.setRemoteTransferReport(reports.getRemoteReport()); } catch(Exception e) { if(! (e instanceof TransferCancelledException)) { @@ -341,4 +347,53 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase { ); } } + + /** + * A {@link TransferCallback} which collects the various reports generated by + * the transfer. + */ + protected class ReplicationReportCollector implements TransferCallback + { + private NodeRef localReport; + private NodeRef remoteReport; + + protected ReplicationReportCollector() + { + } + + /** + * Collect source and destination repository target reports + */ + public void processEvent(TransferEvent event) + { + if(event instanceof TransferEventReport) + { + TransferEventReport reportEvent = (TransferEventReport)event; + if (reportEvent.getReportType().equals(TransferEventReport.ReportType.SOURCE)) + { + localReport = reportEvent.getNodeRef(); + } + else if (reportEvent.getReportType().equals(TransferEventReport.ReportType.DESTINATION)) + { + remoteReport = reportEvent.getNodeRef(); + } + } + } + + /** + * @return local transfer report + */ + public NodeRef getLocalReport() + { + return localReport; + } + + /** + * @return target transfer report + */ + public NodeRef getRemoteReport() + { + return remoteReport; + } + } } diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java b/source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java index 665b0a2074..38e16a57ed 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java +++ b/source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java @@ -65,6 +65,7 @@ public class ReplicationServiceImplTest extends TestCase assertEquals(0, replicationAction.getPayload().size()); assertNull(replicationAction.getLocalTransferReport()); + assertNull(replicationAction.getRemoteTransferReport()); } } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java index 83cc9025d1..e48c5390ec 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java +++ b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java @@ -207,6 +207,7 @@ public class ReplicationServiceIntegrationTest extends TestCase assertEquals(0, replicationAction.getPayload().size()); assertNull(replicationAction.getLocalTransferReport()); + assertNull(replicationAction.getRemoteTransferReport()); } public void testCreateSaveLoad() throws Exception @@ -672,6 +673,7 @@ public class ReplicationServiceIntegrationTest extends TestCase rd.getPayload().add(folder2a); assertEquals(null, rd.getLocalTransferReport()); + assertEquals(null, rd.getRemoteTransferReport()); txn = transactionService.getUserTransaction(); txn.begin(); @@ -744,20 +746,30 @@ public class ReplicationServiceIntegrationTest extends TestCase } } - // Check we got a transfer report, and it looks sensible - NodeRef transferReport = rd.getLocalTransferReport(); - assertNotNull(transferReport); + // Check we got transfer reports, and they look sensible + NodeRef localReport = rd.getLocalTransferReport(); + assertNotNull(localReport); + NodeRef remoteReport = rd.getRemoteTransferReport(); + assertNotNull(remoteReport); txn = transactionService.getUserTransaction(); txn.begin(); - ContentReader transferReader = - contentService.getReader(transferReport, ContentModel.PROP_CONTENT); - String report = transferReader.getContentString(); + ContentReader localReader = + contentService.getReader(localReport, ContentModel.PROP_CONTENT); + String localReportContent = localReader.getContentString(); - assertTrue("XML not found in:\n" + report, report.contains("