Coverage Report - org.webslinger.ext.quercus.bsf.QuercusEngine
 
Classes in this File Line Coverage Branch Coverage Complexity
QuercusEngine
57%
27/47
0%
0/1
0
 
 1  
 package org.webslinger.ext.quercus.bsf;
 2  
 
 3  
 import java.io.IOException;
 4  
 import java.io.OutputStreamWriter;
 5  
 import java.io.StringWriter;
 6  
 import java.io.Writer;
 7  
 import java.util.Arrays;
 8  
 import java.util.List;
 9  
 import java.util.Vector;
 10  
 
 11  
 import org.apache.bsf.BSFException;
 12  
 import org.apache.bsf.BSFManager;
 13  
 
 14  
 import com.caucho.quercus.Quercus;
 15  
 import com.caucho.quercus.env.Env;
 16  
 import com.caucho.quercus.env.MethodMap;
 17  
 import com.caucho.quercus.env.QuercusClass;
 18  
 import com.caucho.quercus.env.Value;
 19  
 import com.caucho.vfs.WriterStreamImpl;
 20  
 import com.caucho.vfs.WriteStream;
 21  
 
 22  
 import org.webslinger.bsf.CompilingLanguageEngineImpl;
 23  
 import org.webslinger.bsf.LanguageEngineInfo;
 24  
 import org.webslinger.ext.quercus.LocalEnv;
 25  
 
 26  3
 public class QuercusEngine extends CompilingLanguageEngineImpl<Value, QuercusClass> {
 27  3
     protected final Quercus php = new Quercus();
 28  
     protected final LocalEnv globalEnv;
 29  3
     protected final ThreadLocal<LocalEnv> tl = new ThreadLocal<LocalEnv>();
 30  3
     protected final int _methodHash = MethodMap.hash("method");
 31  3
     protected final char[] _methodArray = "method".toCharArray();
 32  
 
 33  
     public QuercusEngine() {
 34  3
         super();
 35  3
         compiler = new QuercusCompiler(this);
 36  3
         php.setCompile(true);
 37  3
         php.setLazyCompile(false);
 38  3
         globalEnv = newLocalEnv();
 39  3
     }
 40  
 
 41  
     public LanguageEngineInfo getLanguageEngineInfo() {
 42  0
         return QuercusInfo.INSTANCE;
 43  
     }
 44  
 
 45  
     public void initialize(BSFManager manager, String lang, Vector declaredBeans) throws BSFException {
 46  3
         super.initialize(manager, lang, declaredBeans);
 47  3
     }
 48  
 
 49  
     public void terminate() {
 50  0
         globalEnv.close();
 51  0
     }
 52  
 
 53  
     public Quercus getQuercus() {
 54  15
         return php;
 55  
     }
 56  
 
 57  
     public Object apply(Object body, Value compiled, Object[] args) throws Throwable {
 58  3
         WriterStreamImpl writerImpl = new WriterStreamImpl();
 59  3
         writerImpl.setWriter(new OutputStreamWriter(System.err));
 60  3
         LocalEnv env = new LocalEnv(getQuercus(), null, writerImpl, null, null);
 61  3
         env.start();
 62  
         try {
 63  3
             return compiled.callMethod(env, _methodHash, _methodArray, _methodArray.length, (Value[]) args);
 64  
         } finally {
 65  3
             env.close();
 66  3
             env.getOriginalOut().flush();
 67  
         }
 68  
     }
 69  
 
 70  
     public Object eval(Object body, Value compiled) throws Throwable {
 71  0
         LocalEnv env = getLocalEnv();
 72  0
         env.start();
 73  
         try {
 74  0
             return compiled.callMethod(env, _methodHash, _methodArray, _methodArray.length);
 75  
         } finally {
 76  0
             env.close();
 77  0
             env.getOriginalOut().flush();
 78  
         }
 79  
     }
 80  
 
 81  
     public void exec(Object body, Value compiled) throws Throwable {
 82  0
         LocalEnv env = getLocalEnv();
 83  0
         env.start();
 84  
         try {
 85  0
             compiled.callMethod(env, _methodHash, _methodArray, _methodArray.length);
 86  
         } finally {
 87  0
             env.close();
 88  0
             env.getOriginalOut().flush();
 89  0
         }
 90  0
     }
 91  
 
 92  
     public LocalEnv getLocalEnv() {
 93  0
         LocalEnv env = tl.get();
 94  0
         if (env == null) {
 95  0
             env = newLocalEnv();
 96  0
             tl.set(env);
 97  
         }
 98  0
         return env;
 99  
     }
 100  
 
 101  
     public LocalEnv getGlobalEnv() {
 102  15
         return globalEnv;
 103  
     }
 104  
 
 105  
     public LocalEnv newLocalEnv() {
 106  3
         return newLocalEnv(new OutputStreamWriter(System.err));
 107  
     }
 108  
 
 109  
     public LocalEnv newLocalEnv(Writer writer) {
 110  3
         LocalEnv env = new LocalEnv(getQuercus(), null, null, null);
 111  3
         WriteStream writeStream = env.getOriginalOut();
 112  3
         env.getWriterStreamImpl().setWriter(new OutputStreamWriter(System.err));
 113  3
         return env;
 114  
     }
 115  
 }