diff --git a/src/helma/scripting/fesi/ESUser.java b/src/helma/scripting/fesi/ESUser.java index 4cfc9e82..32798caa 100644 --- a/src/helma/scripting/fesi/ESUser.java +++ b/src/helma/scripting/fesi/ESUser.java @@ -5,13 +5,14 @@ package helma.scripting.fesi; import helma.framework.core.*; import helma.objectmodel.*; +import helma.objectmodel.db.Node; import FESI.Interpreter.*; import FESI.Exceptions.*; import FESI.Data.*; /** * The ESUser is a special kind of Node object that represents a user of - * a HOP application. The actual user session data are kept in class User. + * a Helma application. The actual user session data are kept in class User. * If the user is logged in as a registered member, the wrapped node represents * the user object in the database, while for anonymous surfers the node object * is just a transient node.
@@ -39,6 +40,8 @@ public class ESUser extends ESNode { * Overrides getProperty to return the uid (which is not a regular property) */ public ESValue getProperty (String propname, int hash) throws EcmaScriptException { + // if there is a user session object, we expose some of its properties. + // Otherwise, we call the parent's class getProperty method. if ("uid".equals (propname)) { if (user == null || user.getUID () == null) return ESNull.theNull; @@ -51,7 +54,7 @@ public class ESUser extends ESNode { else return new ESString (user.getSessionID ()); } - if ("cache".equals (propname)) + if ("cache".equals (propname) && user != null) return cacheWrapper; return super.getProperty (propname, hash); } @@ -62,6 +65,10 @@ public class ESUser extends ESNode { * own node, but just reach through to the session user object instead. */ public void setNode (INode node) { + // this only makes sense if this wrapper represents an active user + if (user == null) + return; + // set the node on the transient user session object user.setNode (node); if (node != null) { this.node = node; @@ -71,8 +78,8 @@ public class ESUser extends ESNode { this.node = user.getNode (); } // set node handle to wrapped node - if (node instanceof helma.objectmodel.db.Node) - handle = ((helma.objectmodel.db.Node) node).getHandle (); + if (node instanceof Node) + handle = ((Node) node).getHandle (); else handle = null; // we don't take over the transient cache from the node, @@ -80,10 +87,13 @@ public class ESUser extends ESNode { } public void updateNodeFromUser () { + // this only makes sense if this wrapper represents an active user + if (user == null) + return; node = user.getNode (); // set node handle to wrapped node - if (node instanceof helma.objectmodel.db.Node) - handle = ((helma.objectmodel.db.Node) node).getHandle (); + if (node instanceof Node) + handle = ((Node) node).getHandle (); else handle = null;