adding engine

git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk@1400848 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
index 511a296..05f2b7e 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
@@ -33,11 +33,11 @@
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_RUBY;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_GROOVY;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_JAVA;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.GROOVY_FILE_ENDING;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.RUBY_FILE_ENDING;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.JRUBY_FILE_ENDING;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_INITIAL_COMPILE;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_RESOURCE_PATH;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_SCRIPTING_ADDITIONAL_CLASSPATH;
@@ -155,8 +155,8 @@
                 return JAVA_FILE_ENDING;
             case ENGINE_TYPE_JSF_GROOVY:
                 return GROOVY_FILE_ENDING;
-            case ENGINETYPE_JSF_RUBY:
-                return RUBY_FILE_ENDING;
+            case ENGINETYPE_JSF_JRUBY:
+                return JRUBY_FILE_ENDING;
             default:
                 throw new UnsupportedOperationException("Engine type unknown");
         }
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
index 51eb253..9af70c2 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
@@ -39,6 +39,8 @@
     public static final String INIT_PARAM_CUSTOM_GROOVY_LOADER_PATHS = "org.apache.myfaces.extensions.scripting.groovy.LOADER_PATHS";
     public static final String INIT_PARAM_CUSTOM_SCALA_LOADER_PATHS = "org.apache.myfaces.extensions.scripting.scala" +
             ".LOADER_PATHS";
+    public static final String INIT_PARAM_CUSTOM_JRUBY_LOADER_PATHS = "org.apache.myfaces.extensions.scripting.jruby.LOADER_PATHS";
+
     //TODO add this
 
 
@@ -60,7 +62,7 @@
     public static final int ENGINE_TYPE_JSF_GROOVY = 0;
     public static final int ENGINE_TYPE_JSF_JAVA = 1;
     public static final int ENGINE_TYPE_JSF_SCALA = 2;
-    public static final int ENGINETYPE_JSF_RUBY = 3;
+    public static final int ENGINETYPE_JSF_JRUBY = 3;
     public static final int ARTIFACT_TYPE_UNKNOWN = -1;
     public static final int ARTIFACT_TYPE_MANAGEDBEAN = 1;
     public static final int ARTIFACT_TYPE_MANAGEDPROPERTY = 2;
@@ -103,7 +105,7 @@
     public static final String GROOVY_FILE_ENDING = ".groovy";
     public static final String JAVA_FILE_ENDING = ".java";
     public static final String SCALA_FILE_ENDING = ".scala";
-    public static final String RUBY_FILE_ENDING = ".rb";
+    public static final String JRUBY_FILE_ENDING = ".rb";
 
     public static final String JSR199_COMPILER = "org.apache.myfaces.extensions.scripting.loaders.java.jsr199.JSR199Compiler";
     public static final String JAVA5_COMPILER = "org.apache.myfaces.extensions.scripting.loaders.java.compiler.JavacCompiler";
@@ -111,6 +113,7 @@
     public static final String SCOPE_APPLICATION = "application";
     public static final String SCOPE_REQUEST = "request";
     public static final String GROOVY_SOURCE_ROOT = "/WEB-INF/groovy/";
+    public static final String JRUBY_SOURCE_ROOT = "/WEB-INF/ruby/";
     public static final String SCALA_SOURCE_ROOT = "/WEB-INF/scala/";
 
     public static final String JAVA_SOURCE_ROOT = "/WEB-INF/java/";
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java
new file mode 100644
index 0000000..da2f3af
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+package org.apache.myfaces.extensions.scripting.core.engine;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.myfaces.extensions.scripting.core.api.Configuration;
+import org.apache.myfaces.extensions.scripting.core.api.ReloadingStrategy;
+import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+import org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
+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.JRubyCompiler;
+import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy;
+import org.jruby.RubyObject;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_GROOVY;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_CUSTOM_JRUBY_LOADER_PATHS;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.JRUBY_SOURCE_ROOT;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class EngineJRuby extends BaseEngine implements ScriptingEngine
+{
+    Logger log = Logger.getLogger(this.getClass().getName());
+
+    @Override
+    public void init(ServletContext context)
+    {
+        initPaths(context, INIT_PARAM_CUSTOM_JRUBY_LOADER_PATHS, JRUBY_SOURCE_ROOT);
+    }
+
+    @Override
+    public int getEngineType()
+    {
+        return ENGINE_TYPE_JSF_GROOVY;
+    }
+
+    public String getEngineTypeAsStr()
+    {
+        return "JRuby";
+    }
+
+    @Override
+    public ReloadingStrategy getBasicReloadingStrategy()
+    {
+        return new SimpleReloadingStrategy();
+    }
+
+    @Override
+    public boolean isArtifactOfEngine(Object artifact)
+    {
+        return (artifact instanceof RubyObject);
+    }
+
+    @Override
+    public void copyProperties(Object dest, Object src)
+    {
+        try
+        {
+
+            BeanUtils.copyProperties(dest, src);
+        }
+        catch (IllegalAccessException e)
+        {
+            log.log(Level.FINEST, e.toString());
+            //this is wanted
+        }
+        catch (InvocationTargetException e)
+        {
+            log.log(Level.FINEST, e.toString());
+            //this is wanted
+        }
+    }
+
+    @Override
+    public String getFileEnding()
+    {
+        return "rb";
+    }
+
+    @Override
+    //full compile
+    public CompilationResult compile()
+    {
+        WeavingContext context = WeavingContext.getInstance();
+        Configuration configuration = context.getConfiguration();
+        JRubyCompiler compiler = new JRubyCompiler();
+        File targetDir = configuration.getCompileTarget();
+        Collection<String> sourceDirs = configuration.getSourceDirs(ENGINETYPE_JSF_JRUBY);
+        CompilationResult res = null;
+        for (String sourceRoot : sourceDirs)
+        {
+            res = compiler.compile(new File(sourceRoot), targetDir, ClassUtils.getContextClassLoader());
+        }
+        return res;
+    }
+
+    public void scanDependencies()
+    {
+        log.info("[EXT-SCRIPTING] starting dependency scan");
+        //GroovyDependencyScanner scanner = new GroovyDependencyScanner();
+        //scanner.scanPaths();
+        log.info("[EXT-SCRIPTING] ending dependency scan");
+    }
+
+}
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/api/CompilerConst.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/api/CompilerConst.java
index f64b375..cbc3128 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/api/CompilerConst.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/api/CompilerConst.java
@@ -37,7 +37,7 @@
     public static final String JC_SOURCEPATH = "-sourcepath";
     public static final String JC_DEBUG = "-g";
     public static final String JAVA_WILDCARD = "*.java ";
-    public static final String RUBY_WILDARD = "*.ruby";
+    public static final String JRUBY_WILDARD = "*.rb";
 
     public static final String JC_VERBOSE = "-verbose";
     @SuppressWarnings("unused")
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
index 452a955..1065b09 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
@@ -32,8 +32,8 @@
 import java.io.File;
 import java.util.List;
 
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_RUBY;
-import static org.apache.myfaces.extensions.scripting.core.engine.api.CompilerConst.RUBY_WILDARD;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
+import static org.apache.myfaces.extensions.scripting.core.engine.api.CompilerConst.JRUBY_WILDARD;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -49,7 +49,7 @@
     private static final String ENGINE_JRUBY = "jruby";
 
     @Override
-    public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader) throws CompilationException
+    public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader)
     {
         targetPath.mkdirs();
         String sources = getSourceFiles();
@@ -98,7 +98,7 @@
         WeavingContext context = WeavingContext.getInstance();
         Configuration configuration = context.getConfiguration();
         List<File> sourceFiles = FileUtils.fetchSourceFiles(configuration.getWhitelistedSourceDirs
-                (ENGINETYPE_JSF_RUBY), RUBY_WILDARD);
+                (ENGINETYPE_JSF_JRUBY), JRUBY_WILDARD);
         StringBuilder sources = new StringBuilder(sourceFiles.size() * 30);
         for (File sourceFile : sourceFiles)
         {