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
This commit is contained in:
David Caruana
2010-08-19 16:18:53 +00:00
parent 68ba2c044a
commit 2d6fd30803
3 changed files with 81 additions and 13 deletions

View File

@@ -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
@@ -200,6 +202,9 @@ public class ReplicationActionExecutor extends ActionExecuterAbstractBase {
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
try {
@@ -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;
}
}
}

View File

@@ -65,6 +65,7 @@ public class ReplicationServiceImplTest extends TestCase
assertEquals(0, replicationAction.getPayload().size());
assertNull(replicationAction.getLocalTransferReport());
assertNull(replicationAction.getRemoteTransferReport());
}
}

View File

@@ -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,19 +746,29 @@ 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("<?xml"));
assertTrue("Report XML not found in:\n" + report, report.contains("<report:transferReport"));
assertTrue("XML not found in:\n" + localReportContent, localReportContent.contains("<?xml"));
assertTrue("Report XML not found in:\n" + localReportContent, localReportContent.contains("<report:transferReport"));
ContentReader remoteReader =
contentService.getReader(remoteReport, ContentModel.PROP_CONTENT);
String remoteReportContent = remoteReader.getContentString();
// TODO: update these tests when transfer report is converted to XML
assertFalse("XML found in:\n" + remoteReportContent, remoteReportContent.contains("<?xml"));
assertTrue("Report Status not found in:\n" + remoteReportContent, remoteReportContent.contains("Status update: COMPLETE"));
txn.commit();
}