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
This commit is contained in:
Mark Rogers
2010-03-01 11:21:45 +00:00
parent e6813d1620
commit ac71fed3db
2 changed files with 29 additions and 27 deletions

View File

@@ -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<NodeRef> nodes = new HashSet<NodeRef>();
/**
* 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
{

View File

@@ -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<ChildAssociationRef> parentAssocs = new ArrayList<ChildAssociationRef>();
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<AssociationRef> assocs = new ArrayList<AssociationRef>();
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<ChildAssociationRef> parentAssocs = new ArrayList<ChildAssociationRef>();
// 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<ChildAssociationRef> parentAssocs = (List<ChildAssociationRef>)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<ChildAssociationRef> parents = normalNode.getParentAssocs();
if (parents == null)
{
parents = new ArrayList<ChildAssociationRef>();
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<ChildAssociationRef> parentAssocs = (List<ChildAssociationRef>)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");