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.";
|
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);
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user