From 07b18358aed8747948bb95e3ca75bc99b923b79d Mon Sep 17 00:00:00 2001 From: Britt Park Date: Mon, 4 Dec 2006 13:43:44 +0000 Subject: [PATCH] Slightly less broken RepoLs. Checkpoint. Also gave Pair a reasonable toString method. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4508 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- source/java/org/alfresco/repo/clt/RepoLs.java | 6 ++- .../alfresco/repo/remote/RepoRemoteImpl.java | 4 +- .../repo/remote/RepoRemoteService.java | 47 ++++++++++++------- .../remote/RepoRemoteTransportService.java | 4 +- .../service/cmr/remote/RepoRemote.java | 4 +- .../cmr/remote/RepoRemoteTransport.java | 6 +-- 6 files changed, 47 insertions(+), 24 deletions(-) diff --git a/source/java/org/alfresco/repo/clt/RepoLs.java b/source/java/org/alfresco/repo/clt/RepoLs.java index 9ced5261b8..c2aaeb5269 100644 --- a/source/java/org/alfresco/repo/clt/RepoLs.java +++ b/source/java/org/alfresco/repo/clt/RepoLs.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Map; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; /** * List the contents of a directory in a repo. @@ -45,10 +47,10 @@ public class RepoLs extends CltBase System.exit(1); } } - Map listing = fRepoRemote.getListing(dir); + Map> listing = fRepoRemote.getListing(dir); for (String name : listing.keySet()) { - System.out.println(name); + System.out.println(name + "\t" + listing.get(name)); } } diff --git a/source/java/org/alfresco/repo/remote/RepoRemoteImpl.java b/source/java/org/alfresco/repo/remote/RepoRemoteImpl.java index ecbce39259..a8631ca3f4 100644 --- a/source/java/org/alfresco/repo/remote/RepoRemoteImpl.java +++ b/source/java/org/alfresco/repo/remote/RepoRemoteImpl.java @@ -10,6 +10,8 @@ import java.util.Map; import org.alfresco.service.cmr.remote.RepoRemote; import org.alfresco.service.cmr.remote.RepoRemoteTransport; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; /** * Client side implementation of RepoRemote interface. @@ -57,7 +59,7 @@ public class RepoRemoteImpl implements RepoRemote /* (non-Javadoc) * @see org.alfresco.service.cmr.remote.RepoRemote#getListing(org.alfresco.service.cmr.repository.NodeRef) */ - public Map getListing(NodeRef dir) + public Map> getListing(NodeRef dir) { return fTransport.getListing(ClientTicketHolder.GetTicket(), dir); } diff --git a/source/java/org/alfresco/repo/remote/RepoRemoteService.java b/source/java/org/alfresco/repo/remote/RepoRemoteService.java index 7bc4e7e954..cb0a5a81b5 100644 --- a/source/java/org/alfresco/repo/remote/RepoRemoteService.java +++ b/source/java/org/alfresco/repo/remote/RepoRemoteService.java @@ -12,6 +12,7 @@ import java.util.TreeMap; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileNotFoundException; @@ -22,6 +23,7 @@ import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.apache.log4j.Logger; @@ -124,13 +126,22 @@ public class RepoRemoteService implements RepoRemote /* (non-Javadoc) * @see org.alfresco.service.cmr.remote.RepoRemote#getListing(org.alfresco.service.cmr.repository.NodeRef) */ - public Map getListing(NodeRef dir) + public Map> getListing(NodeRef dir) { - List list = fFileFolderService.listFiles(dir); - Map result = new TreeMap(); - for (FileInfo info : list) + List listing = fNodeService.getChildAssocs(dir); + Map> result = new TreeMap>(); + for (ChildAssociationRef child : listing) { - result.put(info.getName(), info.getNodeRef()); + fgLogger.error(child.getQName()); + NodeRef childRef = child.getChildRef(); + QName type = fNodeService.getType(childRef); + if (type.equals(ContentModel.TYPE_CONTENT) || + type.equals(ContentModel.TYPE_FOLDER)) + { + result.put(child.getQName().getLocalName(), + new Pair(child.getChildRef(), + type)); + } } return result; } @@ -159,19 +170,23 @@ public class RepoRemoteService implements RepoRemote public NodeRef lookup(NodeRef base, String path) { List pathList = splitPath(path); - if (pathList.size() == 1) + NodeRef curr = base; + for (String name : pathList) { - return fNodeService.getChildByName(base, ContentModel.ASSOC_CONTAINS, pathList.get(0)); - } - try - { - FileInfo info = fFileFolderService.resolveNamePath(base, pathList); - return info.getNodeRef(); - } - catch (FileNotFoundException e) - { - return null; + fgLogger.error(name); + NodeRef next = fNodeService.getChildByName(curr, ContentModel.ASSOC_CONTAINS, name); + if (next == null) + { + fgLogger.error("Wasn't a contains."); + next = fNodeService.getChildByName(curr, ContentModel.ASSOC_CHILDREN, name); + if (next == null) + { + return null; + } + } + curr = next; } + return curr; } /* (non-Javadoc) diff --git a/source/java/org/alfresco/repo/remote/RepoRemoteTransportService.java b/source/java/org/alfresco/repo/remote/RepoRemoteTransportService.java index d28d7f909f..ae98fded0c 100644 --- a/source/java/org/alfresco/repo/remote/RepoRemoteTransportService.java +++ b/source/java/org/alfresco/repo/remote/RepoRemoteTransportService.java @@ -16,7 +16,9 @@ import org.alfresco.service.cmr.remote.RepoRemote; import org.alfresco.service.cmr.remote.RepoRemoteTransport; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AuthenticationService; +import org.alfresco.service.namespace.QName; import org.alfresco.util.GUID; +import org.alfresco.util.Pair; /** * The server side implementation of RepoRemoteTransport. It @@ -291,7 +293,7 @@ public class RepoRemoteTransportService implements RepoRemoteTransport, /* (non-Javadoc) * @see org.alfresco.service.cmr.remote.RepoRemoteTransport#getListing(java.lang.String, org.alfresco.service.cmr.repository.NodeRef) */ - public Map getListing(String ticket, NodeRef dir) + public Map> getListing(String ticket, NodeRef dir) { fAuthService.validate(ticket); return fRepoRemote.getListing(dir); diff --git a/source/java/org/alfresco/service/cmr/remote/RepoRemote.java b/source/java/org/alfresco/service/cmr/remote/RepoRemote.java index 7dbc0a429a..693c363a38 100644 --- a/source/java/org/alfresco/service/cmr/remote/RepoRemote.java +++ b/source/java/org/alfresco/service/cmr/remote/RepoRemote.java @@ -8,6 +8,8 @@ import java.io.OutputStream; import java.util.Map; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; /** * A highly simplified remote interface for the repo. @@ -26,7 +28,7 @@ public interface RepoRemote * @param dir The node ref of the directory. * @return A Map of names to node refs. */ - public Map getListing(NodeRef dir); + public Map> getListing(NodeRef dir); /** * Lookup a node by path relative to a node. diff --git a/source/java/org/alfresco/service/cmr/remote/RepoRemoteTransport.java b/source/java/org/alfresco/service/cmr/remote/RepoRemoteTransport.java index a18872a349..2afea8f41d 100644 --- a/source/java/org/alfresco/service/cmr/remote/RepoRemoteTransport.java +++ b/source/java/org/alfresco/service/cmr/remote/RepoRemoteTransport.java @@ -3,11 +3,11 @@ */ package org.alfresco.service.cmr.remote; -import java.io.InputStream; -import java.io.OutputStream; import java.util.Map; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; /** * Over the wire, and authentication safe flavor of @@ -27,7 +27,7 @@ public interface RepoRemoteTransport * @param dir The node ref of the directory. * @return A Map of names to node refs. */ - public Map getListing(String ticket, NodeRef dir); + public Map> getListing(String ticket, NodeRef dir); /** * Lookup a node by path relative to a node.