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/06/07 21:23:29 UTC

svn commit: r1347761 - in /velocity/sandbox/jsr223/velocity-engine-scripting: ./ src/main/java/org/apache/velocity/script/

Author: dishara
Date: Thu Jun  7 19:23:29 2012
New Revision: 1347761

URL: http://svn.apache.org/viewvc?rev=1347761&view=rev
Log:
Added Factory implementation and filled some Engine implementation and added a dummy JUnit test case

Modified:
    velocity/sandbox/jsr223/velocity-engine-scripting/pom.xml
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java
    velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptException.java

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/pom.xml
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/pom.xml?rev=1347761&r1=1347760&r2=1347761&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/pom.xml (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/pom.xml Thu Jun  7 19:23:29 2012
@@ -10,4 +10,17 @@
     <modelVersion>4.0.0</modelVersion>
     <artifactId>velocity-engine-scripting</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.8.2</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>

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=1347761&r1=1347760&r2=1347761&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 Jun  7 19:23:29 2012
@@ -19,24 +19,53 @@ package org.apache.velocity.script;
  * under the License.
  */
 
+import org.apache.velocity.app.VelocityEngine;
+
 import javax.script.*;
 import java.io.Reader;
 
 public class VelocityScriptEngine extends AbstractScriptEngine {
 
+    private ScriptEngineFactory scriptEngineFactory;
+    private VelocityEngine velocityEngine;
+
+    public VelocityScriptEngine(ScriptEngineFactory scriptEngineFactory) {
+      this.scriptEngineFactory=scriptEngineFactory;
+    }
+
     public Object eval(String s, ScriptContext scriptContext) throws ScriptException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public Object eval(Reader reader, ScriptContext scriptContext) throws ScriptException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public Bindings createBindings() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
+    /**
+     *
+     * @return a  ScriptEngineFactory , if null return a newly created one . Added creation inside sync block to avoid creating
+     * two factories from a engine by two parallel threads at the same time. Also the additional null check out from sync block is to avoid every
+     * thread to get blocked inside it even there is an already created factory..
+     */
     public ScriptEngineFactory getFactory() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        if(scriptEngineFactory == null) {
+            createNewFactory();
+        }
+        return scriptEngineFactory;
+    }
+
+   private void createNewFactory(){
+    synchronized (this) {
+     if(scriptEngineFactory == null){
+       scriptEngineFactory = new VelocityScriptEngineFactory();
     }
 }
+}
+
+
+
+}
\ No newline at end of file

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java?rev=1347761&r1=1347760&r2=1347761&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java Thu Jun  7 19:23:29 2012
@@ -20,54 +20,174 @@ package org.apache.velocity.script;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineFactory;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 public class VelocityScriptEngineFactory implements ScriptEngineFactory {
+
+    private List<String> names;
+    private List<String> extensions;
+    private List<String> mimeTypes;
+    private String name = "velocity";
+    private String version = "1.8";
+    private String langName = "velocity";
+    private String langVersion = "1.8";
+
+
+    /**
+     * Provides full capability to change default engine settings
+     *
+     * @param names       Override default names for script engine
+     * @param extensions  Override default extensions for script engine
+     * @param mimeTypes   Override default mime types for script engine
+     * @param name        Override default name for script engine
+     * @param version     Override default version for script engine
+     * @param langName    Override default language names for script engine
+     * @param langVersion Override default language version for script engine
+     */
+    public VelocityScriptEngineFactory(List<String> names, List<String> extensions
+            , List<String> mimeTypes
+            , String name
+            , String version
+            , String langName
+            , String langVersion
+    ) {
+        this.names = Collections.unmodifiableList(names);
+        this.extensions = Collections.unmodifiableList(extensions);
+        this.mimeTypes = Collections.unmodifiableList(mimeTypes);
+        this.name = name;
+        this.version = version;
+        this.langName = langName;
+        this.langVersion = langVersion;
+    }
+
+    /**
+     * @param name    Override default name for script engine
+     * @param version Override default version for script engine
+     */
+    public VelocityScriptEngineFactory(String name, String version) {
+        this.name = name;
+        this.version = version;
+        initDefaultSettings();
+    }
+
+    /**
+     * Simple Factory with all default settings
+     */
+    public VelocityScriptEngineFactory() {
+        initDefaultSettings();
+    }
+
+    private void initDefaultSettings() {
+        names = new ArrayList<String>(1);
+        names.add("Velocity");
+        names = Collections.unmodifiableList(names);
+        extensions = new ArrayList<String>(1);
+        extensions.add("vm");
+        extensions = Collections.unmodifiableList(extensions);
+        mimeTypes = new ArrayList<String>(0);
+        mimeTypes = Collections.unmodifiableList(mimeTypes);
+    }
+
     public String getEngineName() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return name;
     }
 
     public String getEngineVersion() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return version;
     }
 
     public List<String> getExtensions() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return extensions;
     }
 
     public List<String> getMimeTypes() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return mimeTypes;
     }
 
     public List<String> getNames() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return names;
     }
 
     public String getLanguageName() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return langName;
     }
 
     public String getLanguageVersion() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return langVersion;
     }
 
     public Object getParameter(String s) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
+        if (s.equals(ScriptEngine.ENGINE)) {
+            return getEngineName();
+        } else if (s.equals(ScriptEngine.NAME)) {
+            return getNames().get(0);
+        } else if (s.equals(ScriptEngine.LANGUAGE)) {
+            return getLanguageName();
+        } else if (s.equals(ScriptEngine.ENGINE_VERSION)) {
+            return getEngineVersion();
+        } else if (s.equals(ScriptEngine.LANGUAGE_VERSION)) {
+            return getLanguageVersion();
+        } else if (s.equals("THREADING")) {
+            return "MULTITHREADED";
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     *
+     * @param s   Name of the Object to whom the method belongs to
+     * @param s1  Name of the method
+     * @param strings method arguments to be passed
+     * @return  the method syntax for velocity script
+     */
     public String getMethodCallSyntax(String s, String s1, String... strings) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
+        StringBuilder syntax = new StringBuilder();
+        syntax.append("$");
+        syntax.append("{");
+        syntax.append(s);
+        syntax.append(".");
+        syntax.append(s1);
+        syntax.append("(");
+        if (strings.length != 0) {
+            int i = 0;
+            for (; i < strings.length - 1; i++) {
+                syntax.append("$" + strings[i]);
+                syntax.append(", ");
+            }
+            syntax.append("$" + strings[i]);
+        }
+        syntax.append(")");
+        syntax.append("}");
+        return syntax.toString();
+    }
+
+    /**
+     *
+     * @param s  String to display
+     * @return    //TODO
+     */
     public String getOutputStatement(String s) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
+    /**
+     *
+     * @param strings  scripting statements provided
+     * @return the program from the statements given
+     */
     public String getProgram(String... strings) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        StringBuilder program = new StringBuilder();
+        for (int i = 0; i < strings.length; i++) {
+            program.append(strings[i]);
+            program.append("\n");
+        }
+        return program.toString();
     }
 
     public ScriptEngine getScriptEngine() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return new VelocityScriptEngine(this);
     }
 }

Modified: velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptException.java
URL: http://svn.apache.org/viewvc/velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptException.java?rev=1347761&r1=1347760&r2=1347761&view=diff
==============================================================================
--- velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptException.java (original)
+++ velocity/sandbox/jsr223/velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptException.java Thu Jun  7 19:23:29 2012
@@ -30,11 +30,4 @@ public class VelocityScriptException ext
         super(e);
     }
 
-    public VelocityScriptException(String s, String s1, int i) {
-        super(s, s1, i);
-    }
-
-    public VelocityScriptException(String s, String s1, int i, int i1) {
-        super(s, s1, i, i1);
-    }
 }