X-Git-Url: http://git.megacz.com/?p=org.ibex.xt.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fxt%2FServlet.java;fp=src%2Forg%2Fibex%2Fxml%2FServlet.java;h=be36ac86ce2c79b5b0e4157e3522bd8877e00e53;hp=833f8fc7f846c88901505fa3156da3c62cff715f;hb=5365f47787b1b4eeca31ad5da2373237371e264e;hpb=308cdcc279f012c0b69b871f81ec1c11c703bd13 diff --git a/src/org/ibex/xml/Servlet.java b/src/org/ibex/xt/Servlet.java similarity index 55% rename from src/org/ibex/xml/Servlet.java rename to src/org/ibex/xt/Servlet.java index 833f8fc..be36ac8 100644 --- a/src/org/ibex/xml/Servlet.java +++ b/src/org/ibex/xt/Servlet.java @@ -1,4 +1,4 @@ -package org.ibex.xml; +package org.ibex.xt; import org.ibex.js.*; import org.ibex.util.*; import org.ibex.io.*; @@ -11,42 +11,46 @@ import com.thoughtworks.xstream.*; import org.prevayler.*; import org.prevayler.implementation.snapshot.*; - public class Servlet extends HttpServlet { - private ServletResolver resolver = new ServletResolver(); - private class ServletResolver implements XML.Node.Stream.Resolver { - public XML.Node.Stream.Functor resolve(String uri) { - if (uri.indexOf(':') == -1) throw new RuntimeException("uri does not contain an method: " + uri); - String method = uri.substring(0, uri.indexOf(':')); - String rest = uri.substring(uri.indexOf(':'))+1; - //case "xtree": return XTree.tag(rest); - //#switch(method) - case "webinf": return new Template(cx.getRealPath(rest)); - case "java": try { return (XML.Node.Stream.Functor)Class.forName(rest).newInstance(); } - catch (Exception e) { throw new RuntimeException(e); } - //#end - throw new RuntimeException("unknown method " + method); + private ServletScope servletscope = null; + private String path; + private Prevayler prevayler; + private JS prevalent; + private ServletContext cx = null; + + public void destroy() { try { + synchronized(this.getClass()) { + Prevayler privatePrevayler = prevayler; + if (prevayler == null) return; + prevayler = null; + Prevalence.destroy(cx, prevayler); } + } catch (Exception e) { e.printStackTrace(); } } + + public void init(ServletConfig sc) throws ServletException { + cx = sc.getServletContext(); + prevayler = Prevalence.getPrevayler(cx); } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - JSScope scope = new ServletScope(request, response); - String path = cx.getRealPath(((HttpServletRequest)request).getServletPath()); + servletscope = new ServletScope(request, response, cx); + path = cx.getRealPath(((HttpServletRequest)request).getServletPath()); Reader xmlreader = new InputStreamReader(new FileInputStream(path)); - XML.Node.Stream s = new JSRewriter(XML.Node.Stream.in(xmlreader), scope); - s.out(response.getWriter()); + new Template(servletscope, new JSScope(servletscope), xmlreader).wrap(null).toXML(response.getWriter()); } - public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); } - public class ServletScope extends JSScope { HttpServletRequest request; HttpServletResponse response; - public ServletScope(ServletRequest request, ServletResponse 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; } private JS params = new JS() { public Object get(Object key) { return request.getParameter(JS.toString(key)); } @@ -96,19 +100,21 @@ public class Servlet extends HttpServlet { //#switch(method) case "prevalent.query": try { - return prevayler.execute(new JSQuery(JS.cloneWithNewParentScope((JS)a, null))); + return prevayler.execute(new Prevalence.JSQuery(JS.cloneWithNewParentScope((JS)a, null))); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } - case "prevalent.execute": - try { - prevayler.execute(new JSTransaction(JS.cloneWithNewParentScope((JS)a, null))); - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); } - case "session.invalidate": request.getSession(true).invalidate(); return null; + case "context.list": + String path = JS.toString(a); + 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