KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > quercus > script > QuercusScriptEngine


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  *
23  * Free Software Foundation, Inc.
24  * 59 Temple Place, Suite 330
25  * Boston, MA 02111-1307 USA
26  *
27  * @author Scott Ferguson
28  */

29
30 package com.caucho.quercus.script;
31
32 import com.caucho.quercus.Quercus;
33 import com.caucho.quercus.env.Env;
34 import com.caucho.quercus.page.InterpretedPage;
35 import com.caucho.quercus.page.QuercusPage;
36 import com.caucho.quercus.parser.QuercusParser;
37 import com.caucho.quercus.program.QuercusProgram;
38 import com.caucho.vfs.*;
39
40 import javax.script.*;
41 import java.io.Reader JavaDoc;
42 import java.io.StringReader JavaDoc;
43 import java.io.Writer JavaDoc;
44
45 /**
46  * Script engine
47  */

48 public class QuercusScriptEngine
49   extends AbstractScriptEngine
50   implements Compilable {
51   private QuercusScriptEngineFactory _factory;
52   private final Quercus _quercus;
53
54   QuercusScriptEngine(QuercusScriptEngineFactory factory)
55   {
56     _factory = factory;
57     _quercus = new Quercus();
58   }
59
60   /**
61    * Returns the Quercus object.
62    */

63   Quercus getQuercus()
64   {
65     return _quercus;
66   }
67
68   /**
69    * evaluates based on a reader.
70    */

71   public Object JavaDoc eval(Reader JavaDoc script, ScriptContext cxt)
72     throws ScriptException
73   {
74     try {
75       QuercusProgram program = QuercusParser.parse(_quercus, null, script);
76
77       Writer JavaDoc writer = cxt.getWriter();
78       
79       WriteStream out;
80
81       if (writer != null) {
82     ReaderWriterStream s = new ReaderWriterStream(null, writer);
83     WriteStream os = new WriteStream(s);
84     
85     try {
86       os.setEncoding("utf-8");
87     } catch (Exception JavaDoc e) {
88     }
89
90     out = os;
91       }
92       else
93     out = new NullWriteStream();
94
95       QuercusPage page = new InterpretedPage(program);
96
97       Env env = new Env(_quercus, page, out, null, null);
98
99       env.setScriptContext(cxt);
100
101       Object JavaDoc value = program.execute(env).toJavaObject();
102
103       out.flushBuffer();
104       out.free();
105
106       return value;
107       
108       /*
109     } catch (ScriptException e) {
110       throw e;
111       */

112     } catch (RuntimeException JavaDoc e) {
113       throw e;
114     } catch (Exception JavaDoc e) {
115       throw new ScriptException(e);
116     } catch (Throwable JavaDoc e) {
117       throw new RuntimeException JavaDoc(e);
118     }
119   }
120
121   /**
122    * evaluates based on a script.
123    */

124   public Object JavaDoc eval(String JavaDoc script, ScriptContext cxt)
125     throws ScriptException
126   {
127     return eval(new StringReader JavaDoc(script), cxt);
128   }
129
130   /**
131    * compiles based on a reader.
132    */

133   public CompiledScript compile(Reader JavaDoc script)
134     throws ScriptException
135   {
136     try {
137       QuercusProgram program = QuercusParser.parse(_quercus, null, script);
138
139       return new QuercusCompiledScript(this, program);
140     } catch (RuntimeException JavaDoc e) {
141       throw e;
142     } catch (Exception JavaDoc e) {
143       throw new ScriptException(e);
144     } catch (Throwable JavaDoc e) {
145       throw new RuntimeException JavaDoc(e);
146     }
147   }
148
149   /**
150    * evaluates based on a script.
151    */

152   public CompiledScript compile(String JavaDoc script)
153     throws ScriptException
154   {
155     return compile(new StringReader JavaDoc(script));
156   }
157
158   /**
159    * Returns the engine's factory.
160    */

161   public QuercusScriptEngineFactory getFactory()
162   {
163     return _factory;
164   }
165
166   /**
167    * Creates a bindings.
168    */

169   public Bindings createBindings()
170   {
171     return new SimpleBindings();
172   }
173
174   public String JavaDoc toString()
175   {
176     return "QuercusScriptEngine[]";
177   }
178 }
179
180
Popular Tags