ovidiu      02/01/18 16:54:58

  Added:       src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap
                        SchemeInterpreterImpl.java
  Log:
  Created.
  
  Revision  Changes    Path
  1.1                  
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap/SchemeInterpreterImpl.java
  
  Index: SchemeInterpreterImpl.java
  ===================================================================
  package org.apache.cocoon.scheme.sitemap;
  
  import java.io.BufferedInputStream;
  import java.io.DataInputStream;
  import java.io.InputStream;
  import java.util.ArrayList;
  import java.util.zip.GZIPInputStream;
  import org.apache.avalon.framework.component.Component;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.cocoon.Constants;
  import org.apache.cocoon.environment.http.HttpContext;
  import org.apache.cocoon.scheme.servlet.REPLGenericServlet;
  import sisc.AppContext;
  import sisc.DynamicEnv;
  import sisc.Interpreter;
  import sisc.data.Procedure;
  import sisc.data.Symbol;
  import sisc.data.Value;
  import org.apache.avalon.framework.thread.ThreadSafe;
  
  public class SchemeInterpreterImpl
    implements SchemeInterpreter, Component, Contextualizable, Configurable, ThreadSafe
  {
    protected Symbol mainFunction;
    protected Symbol sitemapParseFunction;
    protected ArrayList interPool;
    AppContext siscContext;
    HttpContext httpContext;
    Context cocoonContext;
  
    public void configure(Configuration confs)
      throws ConfigurationException
    {
      String mainFunctionString = confs.getAttribute("entry-point");
      if (mainFunctionString == null)
        throw new ConfigurationException("Scheme entry point not specified");
  
      String sitemapParseFunctionString = confs.getAttribute("sitemap-parse");
      if (sitemapParseFunctionString == null)
        throw new ConfigurationException("Scheme sitemap parse function not 
specified");
  
      String heapFileName = confs.getAttribute("heap");
      if (heapFileName == null)
        throw new ConfigurationException("Heap Scheme file not specified");
  
      synchronized (httpContext) {
        siscContext = 
(AppContext)httpContext.getAttribute(REPLGenericServlet.appCtxAttrName);
  
        if (siscContext == null) {
          siscContext = new AppContext();
          httpContext.setAttribute(REPLGenericServlet.appCtxAttrName, siscContext);
  
          interPool = new ArrayList();
          Interpreter interp = getInterpreter();
  
          try {
            org.apache.cocoon.environment.Context context =
              
(org.apache.cocoon.environment.Context)cocoonContext.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
  
            System.out.println("loading heap "
                             + context.getResource(heapFileName));
  
            InputStream is = context.getResource(heapFileName).openStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            GZIPInputStream gzis = new GZIPInputStream(bis);
            DataInputStream dis
              = new DataInputStream(new BufferedInputStream(gzis));
            siscContext.loadEnv(interp, dis);
          } catch (Exception ex) {
            System.err.println("Error loading heap:" + ex);
            ex.printStackTrace();
            throw new ConfigurationException("Cannot load heap file: " + ex);
          }
  
          mainFunction = Symbol.get(mainFunctionString);
          sitemapParseFunction = Symbol.get(sitemapParseFunctionString);
          siscContext.setEvaluator("eval");
        }
      }
    }
  
    public void contextualize(Context context)
      throws ContextException
    {
      this.cocoonContext = context;
      httpContext = (HttpContext)context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
    }
  
    /**
     * Obtain a Scheme Interpreter from the internal pool of
     * interpreters.
     *
     * @return an <code>Interpreter</code> value
     */
    public Interpreter getInterpreter()
    {
      synchronized(interPool) {
        int size = interPool.size();
        if (size != 0)
          return (Interpreter)interPool.remove(size - 1);
      }
  
      // Create a new interpreter and return it
      DynamicEnv environment = new DynamicEnv(System.in, System.out);
      Interpreter interp = new Interpreter(siscContext, environment);
      return interp;
    }
  
    /**
     * Put back into the pool an Interpreter instance.
     *
     * @param interp an <code>Interpreter</code> value
     */
    public void releaseInterpreter(Interpreter interp)
    {
      synchronized(interPool) {
        interPool.add(interp);
      }
    }
  
    public Symbol getMainFunction()
    {
      return mainFunction;
    }
  
    public Symbol getSitemapParseFunction()
    {
      return sitemapParseFunction;
    }
  }
  
  
  

----------------------------------------------------------------------
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