X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fibex%2Fxt%2FServlet.java;fp=src%2Forg%2Fibex%2Fxt%2FServlet.java;h=94d3e2934aa0dbb56f9ca0252a7ca43d5ac05c36;hb=539b657bcea9488a467bccd6d43ede5e869cede2;hp=1d18563526b825a4c265cc7ba8ffa71c1c401d35;hpb=ceef03aad63c852ca44925dad0d417db07fd166e;p=org.ibex.xt-crawshaw.git diff --git a/src/org/ibex/xt/Servlet.java b/src/ibex/xt/Servlet.java similarity index 64% rename from src/org/ibex/xt/Servlet.java rename to src/ibex/xt/Servlet.java index 1d18563..94d3e29 100644 --- a/src/org/ibex/xt/Servlet.java +++ b/src/ibex/xt/Servlet.java @@ -1,19 +1,22 @@ -package org.ibex.xt; -import org.ibex.js.*; -import org.ibex.util.*; -import org.ibex.io.*; +package ibex.xt; + +import ibex.util.XML; +import org.ibex.js.JS; +import org.ibex.js.JSArray; +import org.ibex.js.JSDate; +import org.ibex.js.JSExn; + import java.io.*; import java.net.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; -import com.thoughtworks.xstream.*; + import org.prevayler.*; import org.prevayler.implementation.snapshot.*; public class Servlet extends HttpServlet { - private ServletScope servletscope = null; private String path; private Prevayler prevayler; private JS prevalent; @@ -35,28 +38,33 @@ public class Servlet extends HttpServlet { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); } - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - servletscope = new ServletScope(request, response, cx); - path = cx.getRealPath(((HttpServletRequest)request).getServletPath()); - Reader xmlreader = new InputStreamReader(new FileInputStream(path)); - new Template(servletscope, new JSScope(servletscope), xmlreader).wrap(null).toXML(response.getWriter()); + public void doGet(HttpServletRequest rq, HttpServletResponse rs) throws IOException { + String path = cx.getRealPath(rq.getServletPath()); + Servlet.Scope scope = new Servlet.Scope(cx, rq, rs, prevayler); + try { Template.wrap(Template.parse(path, scope), scope).toXML(rs.getWriter()); } + catch (Exception e) { e.printStackTrace(); System.out.println("e = "+e); } } - public class ServletScope extends JSScope { - HttpServletRequest request; - HttpServletResponse response; - ServletContext cx; - public String getRealPath(String s) { return cx.getRealPath(s); } - public ServletScope(ServletRequest request, ServletResponse response, ServletContext cx) { - super(null); - this.request = (HttpServletRequest)request; - this.response = (HttpServletResponse)response; - this.cx = cx; + public static class Scope extends Template.Scope { + private final ServletContext cx; + private final HttpServletRequest request; + private final HttpServletResponse response; + private final Prevayler prevayler; + + public Scope(ServletContext cx, HttpServletRequest rq, HttpServletResponse rs, Prevayler p) { + super(null); this.cx = cx; request = rq; response = rs; prevayler = p; + } + + public String getLocalPath() { return cx.getRealPath("/") + "/WEB-INF/"; } + public void transaction(JS t) { + try { prevayler.execute(new Prevalence.JSTransaction(t)); } + catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } + private JS params = new JS() { - public Object get(Object key) { return request.getParameter(JS.toString(key)); } - public Enumeration keys() { return request.getParameterNames(); } - }; + public Object get(Object key) { return request.getParameter(JS.toString(key)); } + public Enumeration keys() { return request.getParameterNames(); } + }; private JS cookies = new JS() { /* public Object get(Object key) { return request.getCookie(JS.toString(key)); } @@ -64,19 +72,21 @@ public class Servlet extends HttpServlet { */ }; private JS sessionAttributes = new JS() { - public Object get(Object key) { return request.getSession(true).getAttribute(JS.toString(key)); } - public void put(Object key, Object val) { - if (val == null) request.getSession(true).removeAttribute(JS.toString(key)); - else request.setAttribute(JS.toString(key), val); } - public Enumeration keys() { return request.getSession(true).getAttributeNames(); } - }; + public Object get(Object key) { + return request.getSession(true).getAttribute(JS.toString(key)); } + public void put(Object key, Object val) { + if (val == null) request.getSession(true).removeAttribute(JS.toString(key)); + else request.setAttribute(JS.toString(key), val); } + public Enumeration keys() { return request.getSession(true).getAttributeNames(); } + }; private JS requestHeader = new JS() { - public Object get(Object key) { return request.getHeader(JS.toString(key)); } - public Enumeration keys() { return request.getHeaderNames(); } - }; + public Object get(Object key) { return request.getHeader(JS.toString(key)); } + public Enumeration keys() { return request.getHeaderNames(); } + }; private JS responseHeader = new JS() { - public void put(Object key, Object val) { response.setHeader(JS.toString(key), JS.toString(val)); } - }; + public void put(Object key, Object val) { + response.setHeader(JS.toString(key), JS.toString(val)); } + }; /** lets us put multi-level get/put/call keys all in the same method */ @@ -84,14 +94,14 @@ public class Servlet extends HttpServlet { Object key; Sub(Object key) { this.key = key; } public void put(Object key, Object val) throws JSExn { - ServletScope.this.put(JS.toString(this.key) + "." + JS.toString(key), val); } + Scope.this.put(JS.toString(this.key) + "." + JS.toString(key), val); } public Object get(Object key) throws JSExn { - return ServletScope.this.get(JS.toString(this.key) + "." + JS.toString(key)); } + return Scope.this.get(JS.toString(this.key) + "." + JS.toString(key)); } public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { - return ServletScope.this.callMethod(this.key, a0, a1, a2, rest, nargs); + return Scope.this.callMethod(this.key, a0, a1, a2, rest, nargs); } public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { - return ServletScope.this.callMethod(JS.toString(this.key) + "." + return Scope.this.callMethod(JS.toString(this.key) + "." + JS.toString(method), a0, a1, a2, rest, nargs); } } @@ -124,7 +134,7 @@ public class Servlet extends HttpServlet { case "request.remote": return getSub("request.remote"); case "request.remote.ip": return request.getRemoteAddr(); case "request.remote.host": return request.getRemoteHost(); - case "request.ssl": return request.isSecure(); + case "request.ssl": return new Boolean(request.isSecure()); case "request.path": return request.getPathInfo(); case "response": return getSub("response"); case "response.header": return responseHeader; @@ -134,20 +144,19 @@ public class Servlet extends HttpServlet { case "session.accessed": return new JSDate(request.getSession(true).getLastAccessedTime()); case "session.invalidate": return METHOD; case "page": return getSub("page"); - case "page.lastmodified": return new JSDate(new File(path).lastModified()); + //case "page.lastmodified": return new JSDate(new File(path).lastModified()); FIXME case "context": return getSub("context"); case "context.list": return METHOD; case "params": return params; case "cookie": return cookies; + case "xt.date": return new JSDate(); // TODO: discuss //#end return null; } public void put(Object key, Object val) throws JSExn { try { //#switch(JS.toString(key)) - case "transaction": - try { prevayler.execute(new Prevalence.JSTransaction((JS)val)); - } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } + case "transaction": transaction((JS)val); case "response.code": response.setStatus(JS.toInt(val)); case "response.redirect": response.sendRedirect(JS.toString(val)); case "response.contentType": response.setContentType(JS.toString(val));