Reworks AVMService.getIndirection() to return the indirection path for a plain node

in a layered context.  Modified AVMHostConfig to use this method.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3903 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-09-23 17:40:54 +00:00
parent 1c16a6df2a
commit 4f715ac9bc
4 changed files with 44 additions and 6 deletions

View File

@@ -63,6 +63,30 @@ import org.alfresco.util.GUID;
*/
public class AVMServiceTest extends AVMServiceTestBase
{
/**
* Test getIndirection.
*/
public void testGetIndirection()
{
try
{
setupBasicTree();
fService.createAVMStore("layer");
fService.createLayeredDirectory("main:/a", "layer:/", "layer");
assertEquals("main:/a", fService.getIndirectionPath(-1, "layer:/layer"));
assertEquals("main:/a/b", fService.getIndirectionPath(-1, "layer:/layer/b"));
assertEquals("main:/a/b/c", fService.getIndirectionPath(-1, "layer:/layer/b/c"));
assertEquals("main:/a/b/c/foo", fService.getIndirectionPath(-1, "layer:/layer/b/c/foo"));
fService.createLayeredDirectory("main:/d", "layer:/layer/b", "dlayer");
assertEquals("main:/d", fService.getIndirectionPath(-1, "layer:/layer/b/dlayer"));
}
catch (Exception e)
{
e.printStackTrace(System.err);
fail();
}
}
/**
* Test the promote action.
*/

View File

@@ -692,16 +692,22 @@ public class AVMStoreImpl implements AVMStore, Serializable
{
throw new AVMNotFoundException("Path not found.");
}
if (!lPath.isLayered())
{
return null;
}
AVMNode node = lPath.getCurrentNode();
if (node.getType() == AVMNodeType.LAYERED_DIRECTORY)
{
return ((LayeredDirectoryNode)node).getUnderlying(lPath);
LayeredDirectoryNode dir = (LayeredDirectoryNode)node;
return dir.getUnderlying(lPath);
}
if (node.getType() == AVMNodeType.LAYERED_FILE)
else if (node.getType() == AVMNodeType.LAYERED_FILE)
{
return ((LayeredFileNode)node).getUnderlying(lPath);
LayeredFileNode file = (LayeredFileNode)node;
return file.getUnderlying(lPath);
}
throw new AVMWrongTypeException("Not a layered node: " + path);
return lPath.getIndirectionPath();
}
/**

View File

@@ -104,6 +104,7 @@ class Lookup
fFinalStore = store;
}
// TODO This is badly in need of cleanup.
/**
* Add a new node to the lookup.
* @param node The node to add.
@@ -135,6 +136,13 @@ class Lookup
comp.setIndirection(computeIndirection(name));
}
fLayeredYet = true;
// Record the first layer seen.
if (fTopLayer == null)
{
fTopLayer = oNode;
fTopLayerIndex = fPosition + 1;
}
fLowestLayerIndex = fPosition + 1;
}
fComponents.add(comp);
fPosition++;

View File

@@ -408,10 +408,10 @@ public interface AVMService
public AVMNodeDescriptor lookup(AVMNodeDescriptor dir, String name, boolean includeDeleted);
/**
* Get the indirection path for a layered file or directory.
* Get the indirection path for a node in a layered context.
* @param version The version number to get.
* @param path The path to the node of interest.
* @return The indirection path.
* @return The indirection path, or null if the path is not in a layered context.
* @throws AVMNotFoundException If <code>path</code> does not exist or
* if <code>version</code> does not exist.
* @throws AVMWrongTypeException If <code>path</code> contains a non-terminal