Renames of directories now behave as one would expect. (Fixes WCM-856)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6920 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2007-10-04 17:32:10 +00:00
parent 4e276a9ee5
commit e5bef04dbf
4 changed files with 394 additions and 335 deletions

View File

@@ -181,7 +181,7 @@ public class AVMInterpreter
return "Not Found.";
}
Map<String, AVMNodeDescriptor> listing =
fService.getDirectoryListing(desc);
fService.getDirectoryListing(desc, true);
for (String name : listing.keySet())
{
out.println(name + " " + listing.get(name));
@@ -552,7 +552,7 @@ public class AVMInterpreter
private void recursiveList(PrintStream out, AVMNodeDescriptor dir, int indent)
{
Map<String, AVMNodeDescriptor> listing = fService.getDirectoryListing(dir);
Map<String, AVMNodeDescriptor> listing = fService.getDirectoryListing(dir, true);
for (String name : listing.keySet())
{
AVMNodeDescriptor child = listing.get(name);

View File

@@ -491,7 +491,7 @@ public class AVMRepository
else if (srcNode.getType() == AVMNodeType.LAYERED_DIRECTORY)
{
dstNode =
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo);
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo, sPath, false);
((LayeredDirectoryNode)dstNode).setLayerID(issueLayerID());
}
else if (srcNode.getType() == AVMNodeType.LAYERED_FILE)
@@ -688,7 +688,7 @@ public class AVMRepository
// layer. Allowing it makes the logic absurdly complex.
if (dPath.isLayered() && dPath.getTopLayer().equals(sPath.getTopLayer()))
{
dstNode = new LayeredDirectoryNodeImpl((PlainDirectoryNode)srcNode, dstRepo, sPath, false);
dstNode = new LayeredDirectoryNodeImpl((PlainDirectoryNode)srcNode, dstRepo, sPath, true);
((LayeredDirectoryNode)dstNode).setLayerID(sPath.getTopLayer().getLayerID());
}
else
@@ -708,9 +708,10 @@ public class AVMRepository
srcDir.getType() == AVMNodeType.LAYERED_DIRECTORY &&
((LayeredDirectoryNode)srcDir).directlyContains(srcNode)))
{
Lookup srcLookup = lookup(-1, srcPath + "/" + srcName, true);
// Use the simple 'copy' constructor.
dstNode =
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo);
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo, srcLookup, true);
((LayeredDirectoryNode)dstNode).setLayerID(((LayeredDirectoryNode)srcNode).getLayerID());
}
else
@@ -720,8 +721,9 @@ public class AVMRepository
// indirection is calculated from it's source context.
if (((LayeredDirectoryNode)srcNode).getPrimaryIndirection())
{
Lookup srcLookup = lookup(-1, srcPath + "/" + srcName, true);
dstNode =
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo);
new LayeredDirectoryNodeImpl((LayeredDirectoryNode)srcNode, dstRepo, srcLookup, true);
}
else
{

View File

@@ -101,6 +101,42 @@ import org.alfresco.util.Pair;
*/
public class AVMServiceTest extends AVMServiceTestBase
{
public void testRename6()
{
try
{
setupBasicTree();
fService.createStore("layer");
fService.createLayeredDirectory("main:/a", "layer:/", "a");
fService.rename("layer:/a/b", "c", "layer:/a/b", "z");
System.out.println(recursiveContents("layer:/", -1, true));
List<AVMDifference> diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null);
System.out.println(diffs);
fSyncService.update(diffs, null, false, false, false, false, null, null);
System.out.println(recursiveContents("layer:/", -1, true));
System.out.println(recursiveContents("main:/", -1, true));
fSyncService.flatten("layer:/a", "main:/a");
System.out.println(recursiveContents("layer:/", -1, true));
System.out.println(recursiveContents("main:/", -1, true));
fService.createFile("layer:/a/b/z", "fudge").close();
fService.rename("layer:/a/b", "z", "layer:/a/b", "y");
System.out.println(recursiveContents("layer:/", -1, true));
diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null);
System.out.println(diffs);
fSyncService.update(diffs, null, false, false, false, false, null, null);
System.out.println(recursiveContents("layer:/", -1, true));
System.out.println(recursiveContents("main:/", -1, true));
fSyncService.flatten("layer:/a", "main:/a");
System.out.println(recursiveContents("layer:/", -1, true));
System.out.println(recursiveContents("main:/", -1, true));
}
catch (Exception e)
{
e.printStackTrace();
fail();
}
}
public void testSpacesInStoreNames()
{
try
@@ -2877,9 +2913,11 @@ public class AVMServiceTest extends AVMServiceTestBase
assertEquals("baz", list.get(0));
assertEquals("figs", list.get(1));
// Rename /layer/d to /layer/e and uncover /layer/d
System.out.println(recursiveContents("main:/", -1, true));
fService.rename("main:/layer", "d", "main:/layer", "e");
fService.uncover("main:/layer", "d");
fService.createSnapshot("main", null, null);
System.out.println(recursiveContents("main:/", -1, true));
// History unchanged.
checkHistory(history, "main");
// /layer/d contains figs.
@@ -2887,11 +2925,12 @@ public class AVMServiceTest extends AVMServiceTestBase
assertEquals(1, listing.size());
list = new ArrayList<String>(listing.keySet());
assertEquals("figs", list.get(0));
// /layer/e contains baz.
// /layer/e contains baz and figs.
listing = fService.getDirectoryListing(-1, "main:/layer/e");
assertEquals(1, listing.size());
assertEquals(2, listing.size());
list = new ArrayList<String>(listing.keySet());
assertEquals("baz", list.get(0));
assertEquals("figs", list.get(1));
for (String val : history.values())
{
System.out.println(val);

View File

@@ -119,7 +119,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
*/
@SuppressWarnings("unchecked")
public LayeredDirectoryNodeImpl(LayeredDirectoryNode other,
AVMStore repos)
AVMStore repos,
Lookup lookup, boolean copyAll)
{
super(repos.getAVMRepository().issueID(), repos);
fIndirection = other.getIndirection();
@@ -128,12 +129,20 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
fLayerID = -1;
fOpacity = false;
AVMDAOs.Instance().fAVMNodeDAO.save(this);
for (ChildEntry child : AVMDAOs.Instance().fChildEntryDAO.getByParent(other))
Map<String, AVMNode> children = null;
if (copyAll)
{
ChildKey key = new ChildKey(this, child.getKey().getName());
ChildEntryImpl newChild = new ChildEntryImpl(key,
child.getChild());
AVMDAOs.Instance().fChildEntryDAO.save(newChild);
children = other.getListing(lookup, true);
}
else
{
children = other.getListingDirect(lookup, true);
}
for (Map.Entry<String, AVMNode> child : children.entrySet())
{
ChildKey key = new ChildKey(this, child.getKey());
ChildEntry entry = new ChildEntryImpl(key, child.getValue());
AVMDAOs.Instance().fChildEntryDAO.save(entry);
}
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.flush();
@@ -200,6 +209,13 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
fOpacity = false;
setVersionID(dir.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.save(this);
Map<String, AVMNode> children = dir.getListing(srcLookup, true);
for (Map.Entry<String, AVMNode> child : children.entrySet())
{
ChildKey key = new ChildKey(this, child.getKey());
ChildEntry entry = new ChildEntryImpl(key, child.getValue());
AVMDAOs.Instance().fChildEntryDAO.save(entry);
}
AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(dir);
copyAspects(dir);
@@ -307,7 +323,9 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
{
// A simple copy is made.
newMe = new LayeredDirectoryNodeImpl(this,
store);
store,
lPath,
false);
newMe.setLayerID(getLayerID());
}
newMe.setAncestor(this);