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);
- }
}