mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
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:
@@ -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);
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user