You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by di...@apache.org on 2012/08/09 21:17:31 UTC

svn commit: r1371393 - in /velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script: VelocityBindings.java VelocityScriptContext.java VelocityScriptEngine.java util/ScriptUtil.java

Author: dishara
Date: Thu Aug  9 19:17:31 2012
New Revision: 1371393

URL: http://svn.apache.org/viewvc?rev=1371393&view=rev
Log:
Refactored the code with some dev feedback

Added:
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/util/ScriptUtil.java
Modified:
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityBindings.java
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptContext.java
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityBindings.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityBindings.java?rev=1371393&r1=1371392&r2=1371393&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityBindings.java (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityBindings.java Thu Aug  9 19:17:31 2012
@@ -20,6 +20,7 @@ package org.apache.velocity.script;
  */
 
 import org.apache.velocity.context.Context;
+import org.apache.velocity.script.util.ScriptUtil;
 
 import javax.script.Bindings;
 import java.util.Collection;
@@ -40,6 +41,7 @@ public class VelocityBindings implements
      */
     public VelocityBindings(Map<String,Object> map) {
         if(map == null) {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Cannot pass a null map to initialize VelocityBindings"));
           throw new NullPointerException("Cannot pass a null map to initialize VelocityBindings");
         }
         this.map = map;
@@ -189,12 +191,15 @@ public class VelocityBindings implements
      */
     private void validateKey(Object key) {
         if (key == null) {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Cannot pass a null map to initialize VelocityBindings"));
             throw new NullPointerException("The key cannot be null..!!");
         }
         if (!(key instanceof String)) {
+            ScriptUtil.addExceptionToErrorWriter(new ClassCastException("The key must be of the type String..!!"));
             throw new ClassCastException("The key must be of the type String..!!");
         }
         if (key.equals("")) {
+            ScriptUtil.addExceptionToErrorWriter(new IllegalArgumentException("The key cannot be empty..!!"));
             throw new IllegalArgumentException("The key cannot be empty..!!");
         }
     }

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptContext.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptContext.java?rev=1371393&r1=1371392&r2=1371393&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptContext.java (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptContext.java Thu Aug  9 19:17:31 2012
@@ -52,9 +52,9 @@ public class VelocityScriptContext imple
 
 
     /**
-     *   The Writer for scripts to use when displaying output.
+     *   The Writer for scripts to use when displaying output. It defaults to system.out
      */
-    private Writer writer;
+    private Writer writer = new PrintWriter(System.out);
 
 
     /**

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java?rev=1371393&r1=1371392&r2=1371393&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java Thu Aug  9 19:17:31 2012
@@ -24,6 +24,7 @@ import org.apache.velocity.VelocityConte
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.exception.ResourceNotFoundException;
 import org.apache.velocity.script.util.ScriptResourceHolder;
+import org.apache.velocity.script.util.ScriptUtil;
 import sun.font.Script;
 
 import javax.script.*;
@@ -70,6 +71,7 @@ public class VelocityScriptEngine implem
     public VelocityScriptEngine(ScriptEngineFactory scriptEngineFactory) {
         this.scriptEngineFactory = scriptEngineFactory;
         this.scriptContext = new VelocityScriptContext();
+        ScriptUtil.setScriptContext(scriptContext);
     }
 
     /**
@@ -79,9 +81,11 @@ public class VelocityScriptEngine implem
     public VelocityScriptEngine(ScriptEngineFactory scriptEngineFactory, Bindings bindings) {
         this.scriptEngineFactory = scriptEngineFactory;
         this.scriptContext = new VelocityScriptContext();
+        ScriptUtil.setScriptContext(scriptContext);
         if (bindings != null) {
             this.scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
         } else {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Bindings cannot be null"));
             throw new NullPointerException("Bindings cannot be null");
         }
     }
@@ -176,7 +180,7 @@ public class VelocityScriptEngine implem
                 properties.load(new FileInputStream(propFile));
                 return properties;
             } catch (IOException e) {
-                //TODO log error msg
+                ScriptUtil.addExceptionToErrorWriter(e);
                 return null;
             }
         }
@@ -206,44 +210,7 @@ public class VelocityScriptEngine implem
      * @throws ScriptException
      */
     public Object eval(String s, ScriptContext scriptContext) throws ScriptException {
-        if (s == null) {
-            throw new NullPointerException("Reader passed cannot be null");
-        }
-        constructVelocityEngine(scriptContext);
-        VelocityContext velocityContext = getVelocityContext(scriptContext);
-
-        Writer outPut;
-        if (scriptContext.getWriter() != null) {
-            outPut = scriptContext.getWriter();
-        } else {
-            outPut = new StringWriter();
-        }
-        boolean result = false;
-
-        try {
-//            Check for velocity tools vm file
-            if (scriptContext.getAttribute(VelocityScriptEngine.FILENAME) != null) {
-                Template template = null;
-                String fileName = scriptContext.getAttribute(VelocityScriptEngine.FILENAME).toString();
-                //Cache hit
-                if (ScriptResourceHolder.hasTemplate(fileName)) {
-                    template = ScriptResourceHolder.getTemplate(fileName);
-                } else {
-                    try {
-                        template = velocityEngine.getTemplate(fileName);
-                        ScriptResourceHolder.putTemplate(fileName,template);
-                        template.merge(velocityContext, outPut);
-                    } catch(ResourceNotFoundException e1){
-                    }
-
-                }
-            }
-            result = velocityEngine.evaluate(velocityContext, outPut, VelocityScriptEngine.DEFAULT_LOG_TAG, s);
-        } catch (Exception exp) {
-            return new ScriptException(exp);
-        }
-        return String.valueOf(result);
-
+            return eval(new StringReader(s),scriptContext);
     }
 
 
@@ -294,7 +261,8 @@ public class VelocityScriptEngine implem
             result = velocityEngine.evaluate(velocityContext, outPut, VelocityScriptEngine.DEFAULT_LOG_TAG, reader);
 
         } catch (Exception exp) {
-            return new ScriptException(exp);
+            ScriptUtil.addExceptionToErrorWriter(exp);
+            throw new ScriptException(exp);
         }
         return String.valueOf(result);
     }
@@ -365,6 +333,7 @@ public class VelocityScriptEngine implem
         if (bindings != null) {
             tmpContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
         } else {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Engine scope Bindings cannot be null."));
             throw new NullPointerException("Engine scope Bindings cannot be null.");
         }
 
@@ -389,10 +358,12 @@ public class VelocityScriptEngine implem
     public void put(String s, Object o) {
 
         if (s == null) {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Name cannot be null"));
             throw new NullPointerException("Name cannot be null");
         }
 
         if ("".equals(s)) {
+            ScriptUtil.addExceptionToErrorWriter(new IllegalArgumentException("Name cannot be empty"));
             throw new IllegalArgumentException("Name cannot be empty");
         }
 
@@ -415,10 +386,12 @@ public class VelocityScriptEngine implem
     public Object get(String s) {
 
         if (s == null) {
+            ScriptUtil.addExceptionToErrorWriter(new NullPointerException("Name cannot be null"));
             throw new NullPointerException("Name cannot be null");
         }
 
         if ("".equals(s)) {
+            ScriptUtil.addExceptionToErrorWriter(new IllegalArgumentException("Name cannot be empty"));
             throw new IllegalArgumentException("Name cannot be empty");
         }
 

Added: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/util/ScriptUtil.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/util/ScriptUtil.java?rev=1371393&view=auto
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/util/ScriptUtil.java (added)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/util/ScriptUtil.java Thu Aug  9 19:17:31 2012
@@ -0,0 +1,43 @@
+package org.apache.velocity.script.util;
+
+
+import javax.script.ScriptContext;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+public class ScriptUtil {
+
+    private static ScriptContext scriptContext;
+
+    public static void setScriptContext(ScriptContext scriptContext){
+        ScriptUtil.scriptContext = scriptContext;
+    }
+
+    public static void addExceptionToErrorWriter(Exception exc) {
+        StringWriter stringWriter = new StringWriter();
+        PrintWriter printWriter = new PrintWriter(stringWriter);
+        exc.printStackTrace(printWriter);
+        scriptContext.setErrorWriter(stringWriter);
+    }
+}
+
+
+