completely got rid of getHref function in INode, just using getUrl from now on.

added optional root prototype name for getUrl.
This commit is contained in:
hns 2001-07-26 14:46:30 +00:00
parent 1be9b1687b
commit a041b8ec78
3 changed files with 23 additions and 20 deletions

View file

@ -100,9 +100,7 @@ public interface INode {
public void setContent (String content); public void setContent (String content);
public byte[] getContent (); public byte[] getContent ();
public String getText (); public String getText ();
public String getUrl (INode root, INode userroot, String tmpname); public String getUrl (INode root, INode users, String tmpname, String rootproto);
public String getHref (INode root, INode userroot, String tmpname, String prefix);
} }

View file

@ -736,11 +736,7 @@ public class Node implements INode, Serializable {
} }
public String getHref (INode root, INode userroot, String tmpname, String prefix) { public String getUrl (INode root, INode users, String tmpname, String rootproto) {
return prefix + getUrl (root, userroot, tmpname);
}
public String getUrl (INode root, INode userroot, String tmpname) {
throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported"); throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported");
} }

View file

@ -1796,34 +1796,43 @@ public class Node implements INode, Serializable {
} }
public String getHref (INode root, INode userroot, String tmpname, String prefix) {
return prefix + getUrl (root, userroot, tmpname);
}
/** /**
* Get the path to eiter the general data-root or the user root, depending on * Get the path to eiter the general data-root or the user root, depending on
* where this node is located. * where this node is located.
*/ */
public String getUrl (INode root, INode userroot, String tmpname) { public String getUrl (INode root, INode users, String tmpname, String rootproto) {
// String fullname = "";
String divider = "/"; String divider = "/";
StringBuffer b = new StringBuffer (); StringBuffer b = new StringBuffer ();
INode p = this; INode p = this;
int loopWatch = 0; int loopWatch = 0;
while (p != null && p.getParent () != null && p != root && p != userroot) {
b.insert (0, divider);
b.insert (0, UrlEncoder.encode (p.getNameOrID ()));
while (p != null && p.getParent () != null && p != root) {
if (rootproto != null && rootproto.equals (p.getPrototype ()))
break;
b.insert (0, divider);
// users always have a canonical URL like /users/username
if ("user".equals (p.getPrototype ())) { if ("user".equals (p.getPrototype ())) {
b.insert (0, "users"+divider); b.insert (0, UrlEncoder.encode (p.getName ()));
p = users;
break; break;
} }
b.insert (0, UrlEncoder.encode (p.getNameOrID ()));
p = p.getParent (); p = p.getParent ();
if (loopWatch++ > 10) if (loopWatch++ > 20)
break; break;
} }
if (p == users) {
b.insert (0, divider);
b.insert (0, "users");
}
return b.toString()+UrlEncoder.encode (tmpname); return b.toString()+UrlEncoder.encode (tmpname);
} }