INode now extends the pretty simple IPathElement interface.

getUrl is now handled in Application where it belongs.
This commit is contained in:
hns 2001-08-13 12:45:26 +00:00
parent 3eb484b9a0
commit 1b0c4329e5
3 changed files with 46 additions and 17 deletions
src/helma/objectmodel

View file

@ -5,6 +5,7 @@ package helma.objectmodel;
import java.util.*; import java.util.*;
import java.io.*; import java.io.*;
import helma.framework.IPathElement;
/** /**
* Interface that all Nodes implement. Currently, there are two implementations: * Interface that all Nodes implement. Currently, there are two implementations:
@ -12,7 +13,7 @@ import java.io.*;
* stored in a database (either the internal Object DB or an external relational DB). * stored in a database (either the internal Object DB or an external relational DB).
*/ */
public interface INode extends INodeState { public interface INode extends INodeState, IPathElement {
/** /**
@ -21,7 +22,7 @@ public interface INode extends INodeState {
public String getID (); public String getID ();
public String getName (); public String getName ();
public String getNameOrID (); // get name or id depending if it's a named or an anonymous node. // public String get (); // get name or id depending if it's a named or an anonymous node.
public void setDbMapping (DbMapping dbmap); public void setDbMapping (DbMapping dbmap);
public DbMapping getDbMapping (); public DbMapping getDbMapping ();
public int getState (); public int getState ();
@ -36,8 +37,8 @@ public interface INode extends INodeState {
public String getFullName (); public String getFullName ();
public String getFullName (INode root); public String getFullName (INode root);
public INode[] getPath (); // public INode[] getPath ();
public String getUrl (INode root, INode users, String tmpname, String rootproto); // public String getUrl (INode root, INode users, String tmpname, String rootproto);
/** /**
* node-related methods * node-related methods

View file

@ -11,6 +11,7 @@ import java.util.Date;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.io.*; import java.io.*;
import helma.util.*; import helma.util.*;
import helma.framework.IPathElement;
/** /**
* A transient implementation of INode. An instance of this class can't be * A transient implementation of INode. An instance of this class can't be
@ -91,7 +92,7 @@ public class Node implements INode, Serializable {
return name; return name;
} }
public String getNameOrID () { public String getElementName () {
return anonymous ? id : name; return anonymous ? id : name;
} }
@ -117,13 +118,13 @@ public class Node implements INode, Serializable {
b.insert (0, divider); b.insert (0, divider);
else else
divider = "/"; divider = "/";
b.insert (0, p.getNameOrID ()); b.insert (0, p.getElementName ());
p = p.parent; p = p.parent;
} }
return b.toString (); return b.toString ();
} }
public INode[] getPath () { /* public INode[] getPath () {
int pathSize = 1; int pathSize = 1;
INode p = getParent (); INode p = getParent ();
while (p != null) { while (p != null) {
@ -137,7 +138,7 @@ public class Node implements INode, Serializable {
p = p.getParent (); p = p.getParent ();
} }
return path; return path;
} } */
public void setName (String name) { public void setName (String name) {
if (name.indexOf('/') > -1) if (name.indexOf('/') > -1)
@ -253,6 +254,14 @@ public class Node implements INode, Serializable {
links.addElement (from); links.addElement (from);
} */ } */
public IPathElement getParentElement () {
return getParent ();
}
public IPathElement getChildElement (String name) {
return getNode (name, false);
}
public INode getSubnode (String name) { public INode getSubnode (String name) {
return getSubnode (name, false); return getSubnode (name, false);
} }
@ -571,9 +580,9 @@ public class Node implements INode, Serializable {
} }
public String getUrl (INode root, INode users, String tmpname, String rootproto) { /* public String getUrl (INode root, INode users, String tmpname, String rootproto) {
throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported"); throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported");
} } */
public long lastModified () { public long lastModified () {

View file

@ -15,6 +15,7 @@ import java.io.*;
import java.sql.Types; import java.sql.Types;
import helma.objectmodel.*; import helma.objectmodel.*;
import helma.util.*; import helma.util.*;
import helma.framework.IPathElement;
import com.workingdogs.village.*; import com.workingdogs.village.*;
@ -431,7 +432,7 @@ public final class Node implements INode, Serializable {
* Get something to identify this node within a URL. This is the ID for anonymous nodes * Get something to identify this node within a URL. This is the ID for anonymous nodes
* and a property value for named properties. * and a property value for named properties.
*/ */
public String getNameOrID () { public String getElementName () {
// if subnodes are also mounted as properties, try to get the "nice" prop value // if subnodes are also mounted as properties, try to get the "nice" prop value
// instead of the id by turning the anonymous flag off. // instead of the id by turning the anonymous flag off.
// Work around this for user objects to alsways return a URL like /users/username // Work around this for user objects to alsways return a URL like /users/username
@ -477,7 +478,7 @@ public final class Node implements INode, Serializable {
b.insert (0, divider); b.insert (0, divider);
else else
divider = "/"; divider = "/";
b.insert (0, p.getNameOrID ()); b.insert (0, p.getElementName ());
p = p.getParent (); p = p.getParent ();
loopWatch++; loopWatch++;
@ -489,7 +490,7 @@ public final class Node implements INode, Serializable {
return b.toString (); return b.toString ();
} }
public INode[] getPath () { /* public INode[] getPath () {
int pathSize = 1; int pathSize = 1;
INode p = getParent (); INode p = getParent ();
@ -506,7 +507,7 @@ public final class Node implements INode, Serializable {
p = p.getParent (); p = p.getParent ();
} }
return path; return path;
} } */
public String getPrototype () { public String getPrototype () {
if (prototype == null && propMap != null) { if (prototype == null && propMap != null) {
@ -870,6 +871,24 @@ public final class Node implements INode, Serializable {
links.add (fromHandle); links.add (fromHandle);
} }
/**
* This implements the getChild() method of the IPathElement interface
*/
public IPathElement getChildElement (String name) {
IPathElement child = (IPathElement) getSubnode (name);
if (child == null)
child = (IPathElement) getNode (name, false);
return child;
}
/**
* This implements the getParentElement() method of the IPathElement interface
*/
public IPathElement getParentElement () {
return getParent ();
}
public INode getSubnode (String subid) { public INode getSubnode (String subid) {
// System.err.println ("GETSUBNODE : "+this+" > "+subid); // System.err.println ("GETSUBNODE : "+this+" > "+subid);
Node retval = null; Node retval = null;
@ -1689,7 +1708,7 @@ public final class Node implements INode, Serializable {
* 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 users, String tmpname, String rootproto) { /* public String getUrl (INode root, INode users, String tmpname, String rootproto) {
if (state == TRANSIENT) if (state == TRANSIENT)
throw new RuntimeException ("Can't get URL for transient Object"); throw new RuntimeException ("Can't get URL for transient Object");
@ -1713,7 +1732,7 @@ public final class Node implements INode, Serializable {
break; break;
} }
b.insert (0, UrlEncoder.encode (p.getNameOrID ())); b.insert (0, UrlEncoder.encode (p.getElementName ()));
p = p.getParent (); p = p.getParent ();
@ -1726,7 +1745,7 @@ public final class Node implements INode, Serializable {
b.insert (0, "users"); b.insert (0, "users");
} }
return b.toString()+UrlEncoder.encode (tmpname); return b.toString()+UrlEncoder.encode (tmpname);
} } */
public long lastModified () { public long lastModified () {
return lastmodified; return lastmodified;