diff --git a/config/alfresco/transfer-service-context.xml b/config/alfresco/transfer-service-context.xml index 6d4bb89cc9..996410da69 100644 --- a/config/alfresco/transfer-service-context.xml +++ b/config/alfresco/transfer-service-context.xml @@ -19,6 +19,9 @@ + + + /${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.transfers.childname}/${spaces.transfer_groups.childname} diff --git a/source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java b/source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java index 9e8d858546..84b2f9490c 100644 --- a/source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java +++ b/source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java @@ -896,6 +896,7 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest TransferManifestHeader header = new TransferManifestHeader(); header.setCreatedDate(new Date()); header.setNodeCount(nodes.size()); + header.setRepositoryId("repo 1"); manifestWriter.writeTransferManifestHeader(header); for (TransferManifestNode node : nodes) { diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java b/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java index 844e60be9b..825691160a 100644 --- a/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java +++ b/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java @@ -73,6 +73,8 @@ import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferProgress; import org.alfresco.service.cmr.transfer.TransferService; import org.alfresco.service.cmr.transfer.TransferTarget; +import org.alfresco.service.descriptor.Descriptor; +import org.alfresco.service.descriptor.DescriptorService; import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.service.transaction.TransactionService; @@ -109,6 +111,7 @@ public class TransferServiceImpl implements TransferService PropertyCheck.mandatory(this, "namespaceResolver", transmitter); PropertyCheck.mandatory(this, "actionService", actionService); PropertyCheck.mandatory(this, "transactionService", transactionService); + PropertyCheck.mandatory(this, "descriptorService", descriptorService); } private String transferSpaceQuery; @@ -121,6 +124,7 @@ public class TransferServiceImpl implements TransferService private TransferManifestNodeFactory transferManifestNodeFactory; private TransferReporter transferReporter; private TenantService tenantService; + private DescriptorService descriptorService; /** * How long to delay while polling for commit status. @@ -557,6 +561,8 @@ public class TransferServiceImpl implements TransferService // Write the manifest file TransferManifestWriter formatter = new XMLTransferManifestWriter(); TransferManifestHeader header = new TransferManifestHeader(); + Descriptor descriptor = descriptorService.getCurrentRepositoryDescriptor(); + header.setRepositoryId(descriptor.getId()); header.setCreatedDate(new Date()); header.setNodeCount(nodes.size()); formatter.startTransferManifest(snapshotWriter); @@ -1111,6 +1117,16 @@ public class TransferServiceImpl implements TransferService return commitPollDelay; } + public void setDescriptorService(DescriptorService descriptorService) + { + this.descriptorService = descriptorService; + } + + public DescriptorService getDescriptorService() + { + return descriptorService; + } + private class TransferStatus { TransferStatus(String transferId) diff --git a/source/java/org/alfresco/repo/transfer/manifest/ManifestModel.java b/source/java/org/alfresco/repo/transfer/manifest/ManifestModel.java index 4483850755..bdcd8b366f 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/ManifestModel.java +++ b/source/java/org/alfresco/repo/transfer/manifest/ManifestModel.java @@ -29,6 +29,7 @@ public interface ManifestModel extends TransferModel static final String LOCALNAME_TRANSFER_HEADER = "transferManifestHeader"; static final String LOCALNAME_HEADER_CREATED_DATE = "createdDate"; static final String LOCALNAME_HEADER_NODE_COUNT = "nodeCount"; + static final String LOCALNAME_HEADER_REPOSITORY_ID = "repositoryId"; static final String LOCALNAME_ELEMENT_NODES = "nodes"; static final String LOCALNAME_ELEMENT_NODE = "node"; static final String LOCALNAME_ELEMENT_DELETED_NODE = "deletedNode"; diff --git a/source/java/org/alfresco/repo/transfer/manifest/TransferManifestHeader.java b/source/java/org/alfresco/repo/transfer/manifest/TransferManifestHeader.java index aeb4197421..50f37d1efc 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/TransferManifestHeader.java +++ b/source/java/org/alfresco/repo/transfer/manifest/TransferManifestHeader.java @@ -30,7 +30,8 @@ public class TransferManifestHeader { private Date createdDate; private int nodeCount; - + private String repositoryId; + public void setCreatedDate(Date createDate) { this.createdDate = createDate; @@ -57,4 +58,15 @@ public class TransferManifestHeader this.nodeCount = nodeCount; } + public void setRepositoryId(String repositoryId) + { + this.repositoryId = repositoryId; + } + + public String getRepositoryId() + { + return repositoryId; + } + + } diff --git a/source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java b/source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java index 6c1893630f..c6bafab2dd 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java +++ b/source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java @@ -64,6 +64,7 @@ public class TransferManifestTest extends TestCase */ String prefix = "TRX-SNAP"; String suffix = ".xml"; + String repoId = "repoId"; // where to put snapshot ? File snapshotFile = TempFileProvider.createTempFile(prefix, suffix); @@ -73,6 +74,7 @@ public class TransferManifestTest extends TestCase TransferManifestWriter formatter = new XMLTransferManifestWriter(); TransferManifestHeader header = new TransferManifestHeader(); header.setCreatedDate(new Date()); + header.setRepositoryId(repoId); formatter.startTransferManifest(snapshotWriter); formatter.writeTransferManifestHeader(header); diff --git a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java index 373d889a52..36f2e9b927 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java +++ b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java @@ -199,6 +199,10 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content { buffer = new StringBuffer(); } + else if(elementName.equals(ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID)) + { + buffer = new StringBuffer(); + } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS)) { TransferManifestNormalNode node = (TransferManifestNormalNode)props.get("node"); @@ -349,7 +353,7 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content { TransferManifestDeletedNode node = (TransferManifestDeletedNode)props.get("node"); processor.processTransferManifestNode(node); - } + } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_ASPECTS)) { @@ -383,6 +387,12 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content header.setNodeCount(Integer.parseInt(buffer.toString())); buffer = null; } + else if(elementName.equals(ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID)) + { + TransferManifestHeader header = (TransferManifestHeader)props.get("header"); + header.setRepositoryId(buffer.toString()); + buffer = null; + } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS)) { // No-op diff --git a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java index 0381f2a366..1f082394c5 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java +++ b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java @@ -140,6 +140,20 @@ public class XMLTransferManifestWriter implements TransferManifestWriter writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_HEADER_NODE_COUNT, PREFIX + ":" + ManifestModel.LOCALNAME_HEADER_NODE_COUNT); + + if(header.getRepositoryId() != null) + { + // Repository Id + writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, + ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID, PREFIX + ":" + + ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID, EMPTY_ATTRIBUTES); + char[] repositoryId = header.getRepositoryId().toCharArray(); + writer.characters(repositoryId, 0, repositoryId.length); + writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, + ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID, PREFIX + ":" + + ManifestModel.LOCALNAME_HEADER_REPOSITORY_ID); + } + // End Header writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,