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
@@ -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;
}
}
}