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

View File

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

View File

@@ -101,6 +101,42 @@ import org.alfresco.util.Pair;
*/ */
public class AVMServiceTest extends AVMServiceTestBase 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() public void testSpacesInStoreNames()
{ {
try try
@@ -2877,9 +2913,11 @@ public class AVMServiceTest extends AVMServiceTestBase
assertEquals("baz", list.get(0)); assertEquals("baz", list.get(0));
assertEquals("figs", list.get(1)); assertEquals("figs", list.get(1));
// Rename /layer/d to /layer/e and uncover /layer/d // 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.rename("main:/layer", "d", "main:/layer", "e");
fService.uncover("main:/layer", "d"); fService.uncover("main:/layer", "d");
fService.createSnapshot("main", null, null); fService.createSnapshot("main", null, null);
System.out.println(recursiveContents("main:/", -1, true));
// History unchanged. // History unchanged.
checkHistory(history, "main"); checkHistory(history, "main");
// /layer/d contains figs. // /layer/d contains figs.
@@ -2887,11 +2925,12 @@ public class AVMServiceTest extends AVMServiceTestBase
assertEquals(1, listing.size()); assertEquals(1, listing.size());
list = new ArrayList<String>(listing.keySet()); list = new ArrayList<String>(listing.keySet());
assertEquals("figs", list.get(0)); assertEquals("figs", list.get(0));
// /layer/e contains baz. // /layer/e contains baz and figs.
listing = fService.getDirectoryListing(-1, "main:/layer/e"); listing = fService.getDirectoryListing(-1, "main:/layer/e");
assertEquals(1, listing.size()); assertEquals(2, listing.size());
list = new ArrayList<String>(listing.keySet()); list = new ArrayList<String>(listing.keySet());
assertEquals("baz", list.get(0)); assertEquals("baz", list.get(0));
assertEquals("figs", list.get(1));
for (String val : history.values()) for (String val : history.values())
{ {
System.out.println(val); System.out.println(val);

View File

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