w.flush();
}
- public class ServletScope extends JS.Obj {
+ // ServletScope //////////////////////////////////////////////////////////////////////////////
+
+ public class ServletScope extends JSSubProperties {
HttpServletRequest request;
HttpServletResponse response;
ServletContext cx;
this.response = (HttpServletResponse)response;
this.cx = cx;
}
+
+ // FIXME: setattributes
+ //#repeat params/cookies/requestHeader/attributes \
+ // getParameter/getCookie/getHeader/getAttribute \
+ // getParameterNames/getCookieNames/getHeaderNames/getAttributeNames \
+ // request/request/request/session/response \
+ // setParameter/setCookie/setHeader/setAttribute
private JS params = new JS.Obj() {
- public JS get(JS key) throws JSExn { return JSU.S(request.getParameter(JSU.toString(key))); }
- public Enumeration keys() throws JSExn { return new JS.Enumeration.JavaStringEnumeration(request.getParameterNames()); }
- };
- private JS cookies = new JS.Obj() {
- /*
- public Object get(Object key) { return request.getCookie(JSU.toString(key)); }
- public Enumeration keys() { return request.getCookieNames(); }
- */
- };
- private JS sessionAttributes = new JS.Obj() {
- public JS get(JS key) throws JSExn { return JSU.S(request.getSession(true).getAttribute(JSU.toString(key)).toString()); }
- public void put(JS key, JS val) throws JSExn {
- if (val == null) request.getSession(true).removeAttribute(JSU.toString(key));
- else request.setAttribute(JSU.toString(key), val); }
- public Enumeration keys() throws JSExn { return new JS.Enumeration.JavaStringEnumeration(request.getSession(true).getAttributeNames()); }
- };
- private JS requestHeader = new JS.Obj() {
- public JS get(JS key) throws JSExn { return JSU.S(request.getHeader(JSU.toString(key))); }
- public Enumeration keys() throws JSExn { return new JS.Enumeration.JavaStringEnumeration(request.getHeaderNames()); }
- };
- private JS responseHeader = new JS.Obj() {
- public void put(JS key, JS val) throws JSExn { response.setHeader(JSU.toString(key), JSU.toString(val)); }
+ public JS get(JS key) throws JSExn { return JSU.S(request.getParameter(JSU.toString(key)).toString()); }
+ public void put(JS key, JS val) throws JSExn { request.setParameter(JSU.toString(key), JSU.toString(val)); }
+ public Enumeration keys() throws JSExn {
+ return new JS.Enumeration.JavaStringEnumeration(request.getParameterNames()); }
};
+ //#end
-
- /** lets us put multi-level get/put/call keys all in the same method */
- private class Sub extends JS.Obj {
- JS key;
- Sub(JS key) { this.key = key; }
- public void put(JS key, JS val) throws JSExn {
- ServletScope.this.put(JSU.S(JSU.toString(this.key) + "." + JSU.toString(key)), val); }
- public JS get(JS key) throws JSExn {
- return ServletScope.this.get(JSU.S(JSU.toString(this.key) + "." + JSU.toString(key))); }
- public JS call(JS method, JS[] args) throws JSExn {
- return ServletScope.this.call(JSU.S(JSU.toString(this.key) + "." + JSU.toString(method)), args);
- }
- }
- private Sub getSub(String key) { return new Sub(JSU.S(key)); }
-
- public JS call(JS method, JS[] args) throws JSExn {
- //#switch(JSU.toString(method))
- case "session.invalidate": request.getSession(true).invalidate(); return null;
- case "context.list":
- String path = JSU.toString(args[0]);
- if (path.indexOf("..") != -1) throw new JSExn("cannot use .. in paths");
- File f = new File(cx.getRealPath("/") + File.separatorChar + path);
- if (!f.isDirectory()) return null;
- String[] contents = f.list();
- JSArray ret = new JSArray(contents.length);
- for(int i=0; i<contents.length; i++) ret.put(JSU.N(ret.size()), JSU.S(contents[i]));
- return ret;
- //#end
- return null;
- }
- public JS get(JS key) throws JSExn {
+ public JS _get(JS key) throws JSExn {
//#switch(JSU.toString(key))
case "body":
case "arg": return null;
case "prevalent": return (JS)prevayler.prevalentSystem();
- case "request": return getSub("request");
+ case "request": return SUBPROPERTY;
case "request.user": return JSU.S(request.getRemoteUser());
case "request.header": return requestHeader;
case "request.method": return JSU.S(request.getMethod());
- case "request.remote": return getSub("request.remote");
+ case "request.remote": return SUBPROPERTY;
case "request.remote.ip": return JSU.S(request.getRemoteAddr());
case "request.remote.host": return JSU.S(request.getRemoteHost());
case "request.ssl": return JSU.B(request.isSecure());
case "request.path": return JSU.S(request.getPathInfo());
- case "response": return getSub("response");
+ case "response": return SUBPROPERTY;
case "response.header": return responseHeader;
- case "session": return getSub("session");
+ case "session": return SUBPROPERTY;
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 "page": return getSub("page");
+ case "page": return SUBPROPERTY;
case "page.lastmodified": return new JSDate(new File(path).lastModified());
- case "context": return getSub("context");
+ case "context": return SUBPROPERTY;
case "context.list": return METHOD;
case "params": return params;
case "cookie": return cookies;
//#end
return null;
}
+
public void put(JS key, JS val) throws JSExn {
try {
//#switch(JSU.toString(key))
- case "transaction":
- try { prevayler.execute(new Prevalence.JSTransaction((JS)val));
- } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); }
case "response.code": response.setStatus(JSU.toInt(val));
case "response.redirect": response.sendRedirect(JSU.toString(val));
case "response.contentType": response.setContentType(JSU.toString(val));
+ case "transaction":
+ try { prevayler.execute(new Prevalence.JSTransaction((JS)val));
+ } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); }
//#end
} catch (IOException e) { throw new JSExn(JSU.S(e.toString())); }
}
+
+ public JS call(JS method, JS[] args) throws JSExn {
+ //#switch(JSU.toString(method))
+ case "session.invalidate": request.getSession(true).invalidate(); return null;
+ case "context.list":
+ String path = JSU.toString(args[0]);
+ if (path.indexOf("..") != -1) throw new JSExn("cannot use .. in paths");
+ File f = new File(cx.getRealPath("/") + File.separatorChar + path);
+ if (!f.isDirectory()) return null;
+ String[] contents = f.list();
+ JSArray ret = new JSArray(contents.length);
+ for(int i=0; i<contents.length; i++) ret.put(JSU.N(ret.size()), JSU.S(contents[i]));
+ return ret;
+ //#end
+ return null;
+ }
}
}