You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/03/20 15:09:34 UTC
svn commit: r1302908 - in /myfaces/extensions/scripting/trunk:
extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/
extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scr...
Author: werpu
Date: Tue Mar 20 14:09:33 2012
New Revision: 1302908
URL: http://svn.apache.org/viewvc?rev=1302908&view=rev
Log:
EXTSCRIPT-159: Add scala language support if possible: scala support now working
Added:
myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/
myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/
myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/TestBean.scala
Modified:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompiler.scala
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/resources/webapp/WEB-INF/web.xml
myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/web.xml
myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/blog.xhtml
myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/conf/dev/web.xml
myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-extscript-helloworld/src/main/webapp/WEB-INF/web.xml
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java Tue Mar 20 14:09:33 2012
@@ -156,6 +156,7 @@ public class FileUtils {
return strategy.getFoundFiles();
}
+
/**
* fetches the source files from a list of source paths
*
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java Tue Mar 20 14:09:33 2012
@@ -27,6 +27,7 @@ import org.apache.myfaces.extensions.scr
import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
import org.apache.myfaces.extensions.scripting.core.engine.compiler.GroovyCompiler;
+import org.apache.myfaces.extensions.scripting.core.engine.compiler.ScalaCompiler;
import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy;
import scala.ScalaObject;
@@ -109,9 +110,9 @@ public class EngineScala extends BaseEng
{
WeavingContext context = WeavingContext.getInstance();
Configuration configuration = context.getConfiguration();
- GroovyCompiler compiler = new GroovyCompiler();
+ ScalaCompiler compiler = new ScalaCompiler();
File targetDir = configuration.getCompileTarget();
- Collection<String> sourceDirs = configuration.getSourceDirs(ENGINE_TYPE_JSF_GROOVY);
+ Collection<String> sourceDirs = configuration.getSourceDirs(ENGINE_TYPE_JSF_SCALA);
CompilationResult res = null;
for (String sourceRoot : sourceDirs)
{
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java Tue Mar 20 14:09:33 2012
@@ -19,19 +19,12 @@
package org.apache.myfaces.extensions.scripting.core.engine;
import org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
-import org.apache.myfaces.extensions.scripting.core.common.util.FileStrategy;
-import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
import org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
-import java.io.File;
import java.io.IOException;
-import java.net.URL;
import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Logger;
-import java.util.regex.Pattern;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -44,79 +37,57 @@ public class FactoryEngines
{
final Logger _log = Logger.getLogger(this.getClass().getName());
/*we have to keep the order of the engines for the class detection*/
- Map<Integer, ScriptingEngine> _engines = new LinkedHashMap<Integer, ScriptingEngine> ();
- List<ScriptingEngine> _engineOrder = new CopyOnWriteArrayList<ScriptingEngine>();
+ Map<Integer, ScriptingEngine> _engines = new LinkedHashMap<Integer, ScriptingEngine>();
public void init() throws IOException
{
//loadEnginesDynamically();
+ ScriptingEngine javaEngine = new EngineJava();
+ ScriptingEngine groovyEngine = null;
+ ScriptingEngine scalaEngine = null;
+ try
+ {
+ ClassUtils.getContextClassLoader().loadClass("groovy.lang.GroovyObject");
+ groovyEngine = (ScriptingEngine) ReflectUtil.instantiate("org.apache.myfaces.extensions.scripting.core" +
+ ".engine.EngineGroovy");
+ }
+ catch (Exception ex)
+ {
+ }
+ try
+ {
+ ClassUtils.getContextClassLoader().loadClass("scala.ScalaObject");
+ scalaEngine = (ScriptingEngine) ReflectUtil.instantiate("org.apache.myfaces.extensions.scripting.core" +
+ ".engine.EngineScala");
+ }
+ catch (Exception ex)
+ {
+ }
- EngineJava javaEngine = new EngineJava();
- EngineGroovy groovyEngine = new EngineGroovy();
- EngineScala scalaEngine = new EngineScala();
if (_engines.isEmpty())
{
//We now add the keys as linked hashmap keys
//so that java always is last hence the class
//detection has to work from top to bottom
- _engines.put(groovyEngine.getEngineType(), groovyEngine);
- _engines.put(scalaEngine.getEngineType(), scalaEngine);
- _engines.put(javaEngine.getEngineType(), javaEngine);
+ if (groovyEngine != null)
+ _engines.put(groovyEngine.getEngineType(), groovyEngine);
+ if (scalaEngine != null)
+ _engines.put(scalaEngine.getEngineType(), scalaEngine);
- _engineOrder.add(javaEngine);
- _engineOrder.add(groovyEngine);
+ _engines.put(javaEngine.getEngineType(), javaEngine);
}
}
- /**
- * loads the engins dynamically from
- * their corresponding package and name
- *
- * @throws IOException
- */
- private void loadEnginesDynamically() throws IOException
- {
- ClassLoader currentLoader = ClassUtils.getContextClassLoader();//this.getClass().getClassLoader();
- String canonicalPackageName = this.getClass().getPackage().getName().replaceAll("\\.", File.separator);
- //TODO not working in a servlet environment we for now map it hardcoded
- Enumeration<URL> enumeration = currentLoader.getResources(canonicalPackageName);
- while (enumeration.hasMoreElements())
- {
- //we load all classes which start with engine initially those are our
- //enginesvTH
- URL element = enumeration.nextElement();
- File file = new File(element.getFile());
- FileStrategy strategy = new FileStrategy(Pattern.compile("engine[^\\.(test)]+\\.class$"));
- FileUtils.listFiles(file, strategy);
- for (File foundFile : strategy.getFoundFiles())
- {
- String absoluteDir = foundFile.getAbsolutePath();
-
- //TODO windows
- String rootDir = absoluteDir.substring(0, absoluteDir.indexOf(canonicalPackageName));
- String className = absoluteDir.substring(rootDir.length()).replaceAll(File.separator, ".");
- className = className.substring(0, className.length() - 6);
- try
- {
- ScriptingEngine engine = (ScriptingEngine) ReflectUtil.instantiate(currentLoader.loadClass
- (className));
- _engines.put(engine.getEngineType(), engine);
- String supportedLanguage = className.substring(className.indexOf(".Engine") + ".Engine".length
- ());
- _log.info("[EXT-SCRIPTING] initializing Engine " + supportedLanguage);
- _engineOrder.add(engine);
- }
- catch (ClassNotFoundException e)
- {
- //cannot happen
- }
- }
- }
- }
+
public Collection<ScriptingEngine> getEngines()
{
- return _engineOrder;
+ List<ScriptingEngine> engineList = new ArrayList<ScriptingEngine>();
+ for(Map.Entry<Integer, ScriptingEngine> entry: _engines.entrySet()) {
+ engineList.add(entry.getValue());
+ }
+
+ return engineList;
}
public ScriptingEngine getEngine(int engineType)
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompiler.scala
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompiler.scala?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompiler.scala (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompiler.scala Tue Mar 20 14:09:33 2012
@@ -21,9 +21,9 @@ package org.apache.myfaces.extensions.sc
import java.io.File
import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult
import org.apache.myfaces.extensions.scripting.core.api.WeavingContext
-import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils
import scala.tools.nsc.{Global, Settings}
import scala.collection.JavaConversions._
+import org.apache.myfaces.extensions.scripting.core.common.util.{ClassUtils, FileUtils}
/**
*
@@ -53,9 +53,25 @@ class ScalaCompiler extends org.apache.m
settings.outdir.value = configuration.getCompileTarget.getAbsolutePath
settings.deprecation.value = true // enable detailed deprecation warnings
settings.unchecked.value = true // enable detailed unchecked warnings
- val cp: String = System.getProperty("java.class.path")
- settings.classpath.value = cp
+ var cp: String = System.getProperty("java.class.path")
+
+
+ if(!cp.contains("scala")) {
+ val classesDir = ClassUtils.getContextClassLoader().getResource("./").getFile();
+ val libDir = classesDir+".."+File.separator+"lib"
+ val libs = FileUtils.fetchSourceFiles(new File(libDir),"*.jar")
+ val finalPath = new StringBuilder
+ finalPath.append(cp)
+ finalPath.append(File.pathSeparator)
+ finalPath.append(classesDir)
+ for(singleLib:File<-libs){
+ finalPath.append(File.pathSeparator)
+ finalPath.append(singleLib.getAbsolutePath)
+ }
+ cp = finalPath.toString()
+ }
+ settings.classpath.value = cp
val reporter = new CompilationResultReporter(settings)
val compiler = new Global(settings, reporter)
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/resources/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/resources/webapp/WEB-INF/web.xml?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/resources/webapp/WEB-INF/web.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/resources/webapp/WEB-INF/web.xml Tue Mar 20 14:09:33 2012
@@ -122,20 +122,6 @@
</param-value>
</context-param>
-
- <filter>
- <filter-name>scriptingFilter</filter-name>
- <filter-class>org.apache.myfaces.extensions.scripting.servlet.ScriptingServletFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>scriptingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
-
<!-- Listener, to allow Jetty serving MyFaces apps -->
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
Added: myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/TestBean.scala
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/TestBean.scala?rev=1302908&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/TestBean.scala (added)
+++ myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala/scalaBlog/TestBean.scala Tue Mar 20 14:09:33 2012
@@ -0,0 +1,11 @@
+package scalaBlog
+
+import beans.BeanProperty
+import javax.faces.bean.{ApplicationScoped, ManagedBean}
+
+@ManagedBean(name="scalaTestBean")
+@ApplicationScoped
+class TestBean {
+ @BeanProperty
+ var title = "A Simple Blogging Example"
+}
\ No newline at end of file
Modified: myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/web.xml?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/web.xml Tue Mar 20 14:09:33 2012
@@ -19,9 +19,9 @@
* under the License.
-->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ version="3.0">
<description>Webproject.xml</description>
@@ -51,6 +51,16 @@
</param-value>
</context-param>
+ <context-param>
+ <description>Additional comma separated loader paths to allow direct editing on the sources directory instead
+ of the deployment dir
+ </description>
+ <param-name>org.apache.myfaces.extensions.scripting.scala.LOADER_PATHS</param-name>
+ <param-value>
+ /Users/werpu2/development/workspace/extscript_trunk/extscript-examples/blog-example/src/main/webapp/WEB-INF/scala
+ </param-value>
+ </context-param>
+
<context-param>
<description>Additional comma separated loader paths to allow direct editing on the sources directory instead
Modified: myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/blog.xhtml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/blog.xhtml?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/blog.xhtml (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/blog-example/src/main/webapp/blog.xhtml Tue Mar 20 14:09:33 2012
@@ -36,6 +36,7 @@
</h1>
<h:panelGroup styleClass="stdBoxBig" style="color:black;">
+ <h1>#{scalaTestBean.title}</h1>
<h2>In this example you can blog simply by entering text in the fields below and send submit</h2>
<p>You can change the blogging artifacts on the fly, all the sources can be found under
Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/conf/dev/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/conf/dev/web.xml?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/conf/dev/web.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/conf/dev/web.xml Tue Mar 20 14:09:33 2012
@@ -128,18 +128,6 @@
</context-param>
- <filter>
- <filter-name>scriptingFilter</filter-name>
- <filter-class>org.apache.myfaces.extensions.scripting.servlet.ScriptingServletFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>scriptingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
<!-- Listener, to allow Jetty serving MyFaces apps -->
<listener>
Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-extscript-helloworld/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-extscript-helloworld/src/main/webapp/WEB-INF/web.xml?rev=1302908&r1=1302907&r2=1302908&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-extscript-helloworld/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-extscript-helloworld/src/main/webapp/WEB-INF/web.xml Tue Mar 20 14:09:33 2012
@@ -130,18 +130,6 @@
Note, this servlet filter is vital without it Ext-Scripting will not work,
if you do not set it you will get an appropriate warning in the command line
-->
- <filter>
- <filter-name>scriptingFilter</filter-name>
- <filter-class>org.apache.myfaces.extensions.scripting.servlet.ScriptingServletFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>scriptingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
<!-- Listener, to allow Jetty serving MyFaces apps -->
<listener>