make session object directly editable
authorcrawshaw <crawshaw@ibex.org>
Wed, 24 Nov 2004 20:15:36 +0000 (20:15 +0000)
committercrawshaw <crawshaw@ibex.org>
Wed, 24 Nov 2004 20:15:36 +0000 (20:15 +0000)
darcs-hash:20041124201536-2eb37-2e1fe5fff0c271e08e7203cfd5a50821433979f1.gz

src/java/org/ibex/xt/Servlet.java

index fcdbde2..42de0ba 100644 (file)
@@ -61,6 +61,31 @@ public class Servlet extends HttpServlet {
             catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); }
         }
 
+        private JS session = new JS() {
+            public Object get(Object key) throws JSExn {
+                //#switch(JS.toString(key))
+                case "created":       return new JSDate(request.getSession(true).getCreationTime());
+                case "accessed":      return new JSDate(request.getSession(true).getLastAccessedTime());
+                case "invalidate":    return METHOD;
+                //#end
+                return super.get(key);
+            }
+            public void put(Object key, Object val) throws JSExn {
+                //#switch(JS.toString(key))
+                case "created":       throw new JSExn("can not set session.created");
+                case "accessed":      throw new JSExn("can not set session.accessed");
+                case "invalidate":    throw new JSExn("can not set session.invalidate");
+                //#end
+                super.put(key, val);
+            }
+            public Object callMethod(Object method, final Object a, final Object b, Object c, Object[] rest, int nargs)
+                throws JSExn {
+                //#switch(JS.toString(method))
+                case "invalidate":    request.getSession(true).invalidate(); return null;
+                //#end
+                return super.callMethod(method, a, b, c, rest, nargs);
+            }
+        };
         private JS params = new JS() {
             private List keys = null;
             public Object get(Object key) { return request.getParameter(JS.toString(key)); }
@@ -144,11 +169,7 @@ public class Servlet extends HttpServlet {
             case "request.path":          return request.getPathInfo();
             case "response":              return getSub("response");
             case "response.header":       return responseHeader;
-            case "session":               return getSub("session");
-            case "session.attr":          return sessionAttributes;
-            case "session.created":       return new JSDate(request.getSession(true).getCreationTime());
-            case "session.accessed":      return new JSDate(request.getSession(true).getLastAccessedTime());
-            case "session.invalidate":    return METHOD;
+            case "session":               return session;
             case "page":                  return getSub("page");
             //case "page.lastmodified":     return new JSDate(new File(path).lastModified()); FIXME
             case "context":               return getSub("context");