ovidiu      01/12/12 09:34:00

  Modified:    scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet
                        REPLEvalServlet.java REPLGenericServlet.java
                        REPLServlet.java
  Log:
  Use a configurable init-expr, destroy-expr, and a main-expr to evaluate Scheme 
expressions. Pass the HTTP request and response objects in the dynamic environment.
  
  Revision  Changes    Path
  1.2       +1 -2      
xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLEvalServlet.java
  
  Index: REPLEvalServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLEvalServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- REPLEvalServlet.java      2001/12/10 08:45:17     1.1
  +++ REPLEvalServlet.java      2001/12/12 17:34:00     1.2
  @@ -69,8 +69,7 @@
   
         System.out.println("executing '" + sbuf + "'");
         
  -      Value value = interpreter.eval(sbuf.toString());
  -      out.println(value.write());
  +      out.println(eval(sbuf.toString(), request, response));
       }
       catch (Exception ex) {
         out.println("ERROR: " + ex);
  
  
  
  1.2       +70 -1     
xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLGenericServlet.java
  
  Index: REPLGenericServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLGenericServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- REPLGenericServlet.java   2001/12/10 08:45:17     1.1
  +++ REPLGenericServlet.java   2001/12/12 17:34:00     1.2
  @@ -1,10 +1,13 @@
   package org.apache.cocoon.scheme.servlet;
   
   import java.io.BufferedInputStream;
  +import java.io.BufferedReader;
   import java.io.DataInputStream;
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.IOException;
  +import java.io.InputStreamReader;
  +import java.io.PrintWriter;
   import java.util.zip.GZIPInputStream;
   import javax.servlet.ServletConfig;
   import javax.servlet.ServletContext;
  @@ -14,7 +17,11 @@
   import javax.servlet.http.HttpServlet;
   import sisc.ContinuationException;
   import sisc.Interpreter;
  +import sisc.data.InputPort;
  +import sisc.data.OutputPort;
  +import sisc.data.Symbol;
   import sisc.data.Value;
  +import sisc.modules.J2S;
   
   /**
    * Common functionality for REPL servlets. Reads the configuration
  @@ -27,15 +34,43 @@
   {
     protected Interpreter interpreter;
     protected ServletContext servletContext;
  +  protected String initExpression;
  +  protected String destroyExpression;
  +  protected String mainExpression;
   
     public void init(ServletConfig config)
       throws ServletException
     {
  +    super.init(config);
       servletContext = config.getServletContext();
  -    interpreter = new Interpreter(System.in, System.out);
  +
  +    synchronized (servletContext) {
  +      String attributeName = "sisc scheme interpreter";
  +
  +      interpreter = (Interpreter)servletContext.getAttribute(attributeName);
  +      if (interpreter == null) {
  +        interpreter = new Interpreter(System.in, System.out);
  +        servletContext.setAttribute(attributeName, interpreter);
  +      }
  +    }
  +
       interpreter.setEvaluator("eval");
       loadHeap(config.getInitParameter("sisc-heap"));
       loadHeap(config.getInitParameter("schecoon-heap"));
  +
  +    initExpression = config.getInitParameter("init-expression");
  +    destroyExpression = config.getInitParameter("destroy-expression");
  +    mainExpression = config.getInitParameter("main-expression");
  +
  +    // Evaluate the init expression, discard the returned value and
  +    // any exception thrown
  +    try {
  +      if (initExpression != null && !initExpression.equals(""))
  +        interpreter.eval(initExpression);
  +    }
  +    catch (Exception ex) {
  +      System.out.println("Exception evaluating the init expression: " + ex);
  +    }
     }
   
     protected void loadHeap(String relativePath)
  @@ -56,6 +91,40 @@
       } catch (IOException e) {
         System.err.println("Error loading heap!");
         e.printStackTrace();
  +    }
  +  }
  +
  +  public void destroy()
  +  {
  +    // Evaluate the destroy expression, discard the returned value and
  +    // any exception thrown
  +    try {
  +      if (destroyExpression != null && !destroyExpression.equals(""))
  +        interpreter.eval(destroyExpression);
  +    }
  +    catch (Exception ex) {
  +      System.out.println("Exception evaluating the destroy expression: " + ex);
  +    }
  +  }
  +
  +  public Value eval(String expression,
  +                    ServletRequest request,
  +                    ServletResponse response)
  +  {
  +    try {
  +      interpreter.define(Symbol.get("*http-request*"),
  +                         new J2S.JavaObject(request),
  +                         sisc.Util.TOPLEVEL);
  +      interpreter.define(Symbol.get("*http-response*"),
  +                         new J2S.JavaObject(response),
  +                         sisc.Util.TOPLEVEL);
  +      Value value = interpreter.eval(expression);
  +      return value;
  +    }
  +    catch (Exception ex) {
  +      System.out.println("evaluation error: " + ex);
  +      ex.printStackTrace();
  +      return null;
       }
     }
   }
  
  
  
  1.2       +1 -20     
xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLServlet.java
  
  Index: REPLServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- REPLServlet.java  2001/12/10 08:45:17     1.1
  +++ REPLServlet.java  2001/12/12 17:34:00     1.2
  @@ -1,20 +1,7 @@
   package org.apache.cocoon.scheme.servlet;
   
  -import java.io.BufferedInputStream;
  -import java.io.DataInputStream;
  -import java.io.File;
  -import java.io.FileInputStream;
  -import java.io.IOException;
  -import java.util.zip.GZIPInputStream;
  -import javax.servlet.ServletConfig;
  -import javax.servlet.ServletContext;
  -import javax.servlet.ServletException;
   import javax.servlet.ServletRequest;
   import javax.servlet.ServletResponse;
  -import javax.servlet.http.HttpServlet;
  -import sisc.ContinuationException;
  -import sisc.Interpreter;
  -import sisc.data.Value;
   
   /**
    * The entry point in the system. This servlet drives the processing
  @@ -27,12 +14,6 @@
   {
     public void service(ServletRequest request, ServletResponse response)
     {
  -    try {
  -      Value value = interpreter.eval("(plus 1 2)");
  -      System.out.println(value.write());
  -    }
  -    catch (Exception ex) {
  -      System.out.println("evaluation error: " + ex);
  -    }
  +    System.out.println(eval(mainExpression, request, response));
     }
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to