From ac71fed3dba83c22db178dbefe7294904e435112 Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Mon, 1 Mar 2010 11:21:45 +0000 Subject: [PATCH] Bug fix for primary parent assoc in XMLTransferManifestReader git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18900 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../manifest/ManifestIntegrationTest.java | 16 ++++---- .../manifest/XMLTransferManifestReader.java | 40 ++++++++++--------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java b/source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java index 3c14de96a5..dec492200f 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java +++ b/source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java @@ -25,11 +25,9 @@ package org.alfresco.repo.transfer.manifest; import java.io.BufferedReader; -import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; -import java.io.Writer; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -54,7 +52,6 @@ import org.alfresco.service.cmr.repository.MLText; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferService; import org.alfresco.service.cmr.transfer.TransferTarget; import org.alfresco.service.namespace.QName; @@ -70,7 +67,6 @@ public class ManifestIntegrationTest extends BaseAlfrescoSpringTest { private TransferService transferService; private ContentService contentService; - private SearchService searchService; /** * Called during the transaction setup @@ -82,7 +78,6 @@ public class ManifestIntegrationTest extends BaseAlfrescoSpringTest // Get the required services this.transferService = (TransferService)this.applicationContext.getBean("TransferService"); this.contentService = (ContentService)this.applicationContext.getBean("ContentService"); - this.searchService = (SearchService)this.applicationContext.getBean("SearchService"); } public void testSnapshot() throws Exception @@ -137,12 +132,19 @@ public class ManifestIntegrationTest extends BaseAlfrescoSpringTest Set nodes = new HashSet(); + /** + * Write three nodes + * a: the root node of the workspace store + * b: the target node + * c: child of the target node + */ nodes.add(nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE)); nodes.add(target.getNodeRef()); nodes.add(childNodeRef); TransferManifestWriter formatter = new XMLTransferManifestWriter(); TransferManifestHeader header = new TransferManifestHeader(); + header.setNodeCount(nodes.size()); header.setCreatedDate(new Date()); formatter.startTransferManifest(snapshotWriter); formatter.writeTransferManifestHeader(header); @@ -230,7 +232,7 @@ public class ManifestIntegrationTest extends BaseAlfrescoSpringTest assertEquals("parent q name", readNode.getParentAssocs().get(0).getQName(), QName.createQName(CONTENT_ASSOC_NAME)); assertEquals("parent type q name", readNode.getParentAssocs().get(0).getTypeQName(), ContentModel.ASSOC_CONTAINS); assertEquals("child node ref", readNode.getParentAssocs().get(0).getChildRef(), childNodeRef); - assertEquals("parent node ref", readNode.getParentAssocs().get(0).getParentRef(), readNode.getPrimaryParentAssoc()); + assertEquals("parent node ref", readNode.getParentAssocs().get(0).getParentRef(), target.getNodeRef()); assertTrue("zero child assoc", readNode.getChildAssocs().size() == 0); /** @@ -242,8 +244,6 @@ public class ManifestIntegrationTest extends BaseAlfrescoSpringTest assertEquals("content not found", content.size(), 1); } } - - } finally { diff --git a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java index 85ec88e0e5..c942a61fbd 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java +++ b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java @@ -204,6 +204,10 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS)) { TransferManifestNormalNode node = (TransferManifestNormalNode)props.get("node"); + ArrayList parentAssocs = new ArrayList(); + node.setParentAssocs(parentAssocs); + // To receive the primary parent assoc. + props.put("parentAssocs", parentAssocs); } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS)) { @@ -230,7 +234,6 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content props.put("from", from); props.put("type", type); props.put("isPrimary", isPrimary); - } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS)) { @@ -245,7 +248,6 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content List assocs = new ArrayList(); node.setSourceAssocs(assocs); props.put("assocs", assocs); - } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_ASSOC)) { @@ -260,6 +262,10 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT)) { buffer = new StringBuffer(); + + ArrayList parentAssocs = new ArrayList(); + // Synthetic element - To receive the primary parent assoc. + props.put("parentAssocs", parentAssocs); } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_VALUES)) { @@ -406,24 +412,9 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content QName type = (QName) props.get("type"); Boolean isPrimary = (Boolean)props.get("isPrimary"); TransferManifestNode node = (TransferManifestNode)props.get("node"); - + List parentAssocs = (List)props.get("parentAssocs"); ChildAssociationRef childAssociationRef = new ChildAssociationRef(type, from, name, node.getNodeRef(), isPrimary, -1); - - if (TransferManifestNormalNode.class.isAssignableFrom(node.getClass())) - { - TransferManifestNormalNode normalNode = (TransferManifestNormalNode)node; - List parents = normalNode.getParentAssocs(); - if (parents == null) - { - parents = new ArrayList(); - normalNode.setParentAssocs(parents); - } - parents.add(childAssociationRef); - } - if (isPrimary) - { - node.setPrimaryParentAssoc(childAssociationRef); - } + parentAssocs.add(childAssociationRef); } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS)) { @@ -445,6 +436,17 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content assocs.add(assoc); props.put("assoc", new AssociationRef(null, source, type, target)); } + else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT)) + { + TransferManifestNode node = (TransferManifestNode)props.get("node"); + List parentAssocs = (List)props.get("parentAssocs"); + if(parentAssocs != null) + { + // Size should allways be 1. + assert(parentAssocs.size() == 1); + node.setPrimaryParentAssoc(parentAssocs.get(0)); + } + } else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH)) { TransferManifestNode node = (TransferManifestNode)props.get("node");