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 2010/01/15 17:28:24 UTC

svn commit: r899684 - in /myfaces/extensions/scripting/trunk/core: core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/ core/src/main/java/org/apache/myfaces/scr...

Author: werpu
Date: Fri Jan 15 16:28:22 2010
New Revision: 899684

URL: http://svn.apache.org/viewvc?rev=899684&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-43
change to groovy compile instead of interpretation

Added:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java
      - copied, changed from r899683, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/
    myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy
    myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy
Modified:
    myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java

Modified: myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java (original)
+++ myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java Fri Jan 15 16:28:22 2010
@@ -53,7 +53,7 @@
     }
 
     public void refreshClassloader() {
-        classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+        classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA,".java");
     }
 
     @Override

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java Fri Jan 15 16:28:22 2010
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.extensions.scripting.loader.ClassLoaderUtils;
+import org.apache.myfaces.scripting.core.util.FileUtils;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.CompilerConfiguration;
@@ -32,6 +33,7 @@
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.List;
 
 /**
  * <p>A compiler implementation that can be used to compile Groovy source files.</p>
@@ -59,6 +61,44 @@
         return compile(sourcePath, targetPath, new File(sourcePath, file), classLoader);
     }
 
+    public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader) {
+
+        List<File> sourceFiles = FileUtils.fetchSourceFiles(sourcePath, "*.groovy");
+
+        StringWriter compilerOutput = new StringWriter();
+
+        CompilationUnit compilationUnit = new CompilationUnit(
+                buildCompilerConfiguration(sourcePath, targetPath, classLoader));
+        compilationUnit.getConfiguration().setOutput(new PrintWriter(compilerOutput));
+
+        for (File sourceFile : sourceFiles) {
+            compilationUnit.addSource(sourceFile);
+        }
+
+        CompilationResult result;
+
+        try {
+            compilationUnit.compile();
+
+            result = new CompilationResult(compilerOutput.toString());
+        } catch (CompilationFailedException ex) {
+            // Register all collected error messages from the Groovy compiler
+            result = new CompilationResult(compilerOutput.toString());
+            ErrorCollector collector = compilationUnit.getErrorCollector();
+            for (int i = 0; i < collector.getErrorCount(); ++i) {
+                result.registerError(convertMessage(collector.getError(i)));
+            }
+        }
+
+        // Register all collected warnings from the Groovy compiler
+        ErrorCollector collector = compilationUnit.getErrorCollector();
+        for (int i = 0; i < collector.getWarningCount(); ++i) {
+            result.registerWarning(convertMessage(collector.getWarning(i)));
+        }
+
+        return result;
+    }
+
     /**
      * <p>Compiles the given file and creates an according class file in the given target path.</p>
      *
@@ -73,7 +113,7 @@
         StringWriter compilerOutput = new StringWriter();
 
         CompilationUnit compilationUnit = new CompilationUnit(
-                buildCompilerConfiguration(sourcePath, targetPath, file, classLoader));
+                buildCompilerConfiguration(sourcePath, targetPath, classLoader));
         compilationUnit.getConfiguration().setOutput(new PrintWriter(compilerOutput));
         compilationUnit.addSource(file);
 
@@ -133,11 +173,10 @@
      *
      * @param sourcePath  the path to the source directory
      * @param targetPath  the path to the target directory
-     * @param file        the file of the class you want to compile
      * @param classLoader the class loader to use to determine the classpath
      * @return the compiler configuration
      */
-    protected CompilerConfiguration buildCompilerConfiguration(File sourcePath, File targetPath, File file, ClassLoader classLoader) {
+    protected CompilerConfiguration buildCompilerConfiguration(File sourcePath, File targetPath, ClassLoader classLoader) {
         CompilerConfiguration configuration = new CompilerConfiguration();
 
         // Set the destination / target directory for the compiled .class files.

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java Fri Jan 15 16:28:22 2010
@@ -66,4 +66,5 @@
     public static final String CTX_REQUEST_CNT = "RequestCnt";
     public static final String CTX_CONFIGURATION = "ExtScriptingConfig";
     public static final String INIT_PARAM_RESOURCE_PATH = "org.apache.myfaces.scripting.resources.LOADER_PATHS";
+    public static final String FILE_EXTENSION_GROOVY = ".groovy";
 }

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java Fri Jan 15 16:28:22 2010
@@ -18,13 +18,7 @@
 
     @Override
     protected ClassLoader getClassLoader() {
-        //TODO return the groovy classloader here
-        //which has to serve the groovy resources
-
-        GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-        for (String sourceDir : WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_GROOVY)) {
-            gcl.addClasspath(sourceDir);
-        }
-        return gcl;
+        return new GroovyRecompiledClassloader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_GROOVY, ScriptingConst.FILE_EXTENSION_GROOVY);
     }
+
 }

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,16 @@
+package org.apache.myfaces.scripting.loaders.groovy;
+
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 20:08:18
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyRecompiledClassloader extends RecompiledClassLoader {
+    public GroovyRecompiledClassloader(ClassLoader classLoader, int scriptingEngine, String engineExtension) {
+        super(classLoader, scriptingEngine, engineExtension);
+    }
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,190 @@
+package org.apache.myfaces.scripting.loaders.groovy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.scripting.api.BaseWeaver;
+import org.apache.myfaces.scripting.api.ClassScanner;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.api.ScriptingWeaver;
+import org.apache.myfaces.scripting.core.util.Cast;
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.core.util.ReflectUtil;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 18:25:27
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyScriptingWeaver extends BaseWeaver {
+
+    Log log = LogFactory.getLog(GroovyScriptingWeaver.class);
+    String classPath = "";
+    org.apache.myfaces.scripting.loaders.groovy.DynamicClassIdentifier identifier = new org.apache.myfaces.scripting.loaders.groovy.DynamicClassIdentifier();
+
+    private static final String GROOVY_FILE_ENDING = ".groovy";
+
+    ClassScanner _annotationScanner = null;
+    ClassScanner _dependencyScanner = null;
+
+    org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade compiler = null;
+
+    /**
+     * helper to allow initial compiler classpath scanning
+     *
+     * @param servletContext
+     */
+    public GroovyScriptingWeaver(ServletContext servletContext) {
+        super(GROOVY_FILE_ENDING, ScriptingConst.ENGINE_TYPE_GROOVY);
+        //init classpath removed we can resolve that over the
+        //url classloader at the time myfaces is initialized
+        try {
+            Class scanner = ClassUtils.getContextClassLoader().loadClass("org.apache.myfaces.scripting.jsf2.annotation.GenericAnnotationScanner");
+            this._annotationScanner = (ClassScanner) ReflectUtil.instantiate(scanner, new Cast(ScriptingWeaver.class, this));
+
+        } catch (ClassNotFoundException e) {
+            //we do nothing here
+        }
+
+        this._dependencyScanner = new GroovyDependencyScanner(this);
+
+
+    }
+
+    @Override
+    public void appendCustomScriptPath(String scriptPath) {
+        super.appendCustomScriptPath(scriptPath);
+        if (_annotationScanner != null) {
+            _annotationScanner.addScanPath(scriptPath);
+        }
+        _dependencyScanner.addScanPath(scriptPath);
+    }
+
+    public GroovyScriptingWeaver() {
+        super(ScriptingConst.FILE_EXTENSION_GROOVY, ScriptingConst.ENGINE_TYPE_GROOVY);
+    }
+
+
+    /**
+     * loads a class from a given sourceroot and filename
+     * note this method does not have to be thread safe
+     * it is called in a thread safe manner by the base class
+     * <p/>
+     * //TODO eliminate the source root we have the roots now somewhere else
+     *
+     * @param sourceRoot the source search lookup path
+     * @param file       the filename to be compiled and loaded
+     * @return a valid class if it could be found, null if none was found
+     */
+    @Override
+    protected Class loadScriptingClassFromFile(String sourceRoot, String file) {
+        //we load the scripting class from the given className
+
+        File currentClassFile = new File(sourceRoot + File.separator + file);
+        if (!currentClassFile.exists()) {
+            return null;
+        }
+
+        if (log.isInfoEnabled()) {
+            log.info("[EXT-SCRIPTING] Loading Groovy file:" + file);
+        }
+
+        Iterator<String> it = WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine()).iterator();
+        Class retVal = null;
+
+        try {
+            //we initialize the compiler lazy
+            //because the facade itself is lazy
+            if (compiler == null) {
+                compiler = new org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade();
+            }
+            retVal = compiler.compileFile(sourceRoot, classPath, file);
+
+            if (retVal == null) {
+                return retVal;
+            }
+        } catch (ClassNotFoundException e) {
+            //can be safely ignored
+        }
+
+
+        if (_annotationScanner != null && retVal != null) {
+            _annotationScanner.scanClass(retVal);
+        }
+
+        return retVal;
+    }
+
+   
+
+    public boolean isDynamic(Class clazz) {
+        return identifier.isDynamic(clazz);  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+
+    /**
+     * full scan, scans for all artefacts in all files
+     */
+    public void fullClassScan() {
+        _dependencyScanner.scanPaths();
+
+
+        if (_annotationScanner == null || FacesContext.getCurrentInstance() == null) {
+            return;
+        }
+        _annotationScanner.scanPaths();
+
+    }
+
+    public void fullRecompile() {
+        if (isFullyRecompiled()) {
+            return;
+        }
+
+        if (compiler == null) {
+            compiler = new org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade();//new ReflectCompilerFacade();
+        }
+
+        for (String scriptPath : WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine())) {
+            //compile via javac dynamically, also after this block dynamic compilation
+            //for the entire length of the request,
+            try {
+                compiler.compileAllFiles(scriptPath, classPath);
+            } catch (ClassNotFoundException e) {
+                log.error(e);
+            }
+
+        }
+
+        markAsFullyRecompiled();
+    }
+
+
+    private void markAsFullyRecompiled() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            //mark the request as tainted with recompile
+            if (context != null) {
+                Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+                requestMap.put(GroovyScriptingWeaver.class.getName() + "_recompiled", Boolean.TRUE);
+            }
+        }
+        WeavingContext.getRefreshContext().setRecompileRecommended(ScriptingConst.ENGINE_TYPE_GROOVY, Boolean.FALSE);
+    }
+
+    private boolean isFullyRecompiled() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return context.getExternalContext().getRequestMap().containsKey(GroovyScriptingWeaver.class.getName() + "_recompiled");
+        }
+        return false;
+    }
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java Fri Jan 15 16:28:22 2010
@@ -23,6 +23,7 @@
  *
  * that way we can properly add artefact refreshing
  * to avoid classcast exceptions also on groovy level
+ * @deprecated
  */
 public class ScanningGroovyClassloader extends GroovyClassLoader {
     public ScanningGroovyClassloader() {

Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java (from r899683, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java&p1=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java&r1=899683&r2=899684&rev=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java Fri Jan 15 16:28:22 2010
@@ -16,14 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.scripting.loaders.java.jdk5;
+package org.apache.myfaces.extensions.scripting.loaders.groovy.compiler;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationException;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+import org.apache.myfaces.extensions.scripting.compiler.GroovyCompiler;
 import org.apache.myfaces.scripting.api.DynamicCompiler;
 import org.apache.myfaces.scripting.core.util.ClassUtils;
 import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.apache.myfaces.scripting.loaders.groovy.compiler.GroovyContainerFileManager;
 import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.jdk5.ContainerFileManager;
 
 import java.io.File;
 
@@ -35,60 +40,39 @@
  *          we can call javac directly
  */
 
-public class CompilerFacade implements DynamicCompiler {
-    JavacCompiler compiler = null;
+public class GroovyCompilerFacade implements DynamicCompiler {
 
-    Log log = LogFactory.getLog(this.getClass());
     ContainerFileManager fileManager = null;
 
+    Log log = LogFactory.getLog(this.getClass());
+    GroovyCompiler compiler;
 
-    public CompilerFacade() {
+    public GroovyCompilerFacade() {
         super();
 
-        compiler = new JavacCompiler();
-        fileManager = new ContainerFileManager();
-    }
-
-
-    /**
-     * does a compilation of all files one compile per request
-     * is allowed for performance reasons, the request blocking will be done
-     * probably on the caller side of things
-     *
-     * @param sourceRoot
-     * @param classPath
-     */
-    public void compileAll(String sourceRoot, String classPath) {
-        try {
-            //TODO do a full compile and block the compile for the rest of the request
-            //so that we do not run into endless compile cycles
-
-            CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassPath());
-            displayMessages(result);
-            if (result.hasErrors()) {
-                log.error("Compiler output:" + result.getCompilerOutput());
-            }
-
-        } catch (CompilationException e) {
-            log.error(e);
-        }
+        compiler = new GroovyCompiler();
+        fileManager = new GroovyContainerFileManager();
     }
 
-
     public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
 
         String separator = FileUtils.getFileSeparatorForRegex();
         String className = filePath.replaceAll(separator, ".");
         className = ClassUtils.relativeFileToClassName(className);
 
-        try {
-            CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), filePath, fileManager.getClassPath());
+       // try {
+            //no need we do a full recompile at the beginning
+            //CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), filePath, fileManager.getClassLoader());
 
-            displayMessages(result);
+            //displayMessages(result);
 
-            if (!result.hasErrors()) {
+            //if (!result.hasErrors()) {
+                fileManager.refreshClassloader();
                 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
-                if (!(oldClassLoader instanceof RecompiledClassLoader)) {
+                //we now quickly check for the groovy classloader being, set we cannot deal with instances here
+
+                //TODO change the check as well for java
+                if (!(oldClassLoader.equals(fileManager.getClassLoader()))) {
                     try {
                         RecompiledClassLoader classLoader = (RecompiledClassLoader) fileManager.getClassLoader();
                         classLoader.setSourceRoot(sourceRoot);
@@ -102,13 +86,14 @@
                         Thread.currentThread().setContextClassLoader(oldClassLoader);
                     }
                 }
-            } else {
-                log.error("Compiler output:" + result.getCompilerOutput());
-            }
-
-        } catch (CompilationException e) {
-            log.error(e);
-        }
+            //} else {
+            //    log.error("Compiler errors");
+            //    displayMessages(result);
+            //}
+
+        //} catch (CompilationException e) {
+        //    log.error(e);
+        //}
         return null;
     }
 
@@ -122,16 +107,11 @@
      * @throws ClassNotFoundException
      */
     public File compileAllFiles(String sourceRoot, String classPath) throws ClassNotFoundException {
-        try {
-            CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassPath());
-            fileManager.refreshClassloader();
-            ((RecompiledClassLoader) fileManager.getClassLoader()).setSourceRoot(sourceRoot);
-            displayMessages(result);
-            return fileManager.getTempDir();
-        } catch (CompilationException e) {
-            log.error(e);
-        }
-        return null;
+        CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassLoader());
+        fileManager.refreshClassloader();
+        ((RecompiledClassLoader) fileManager.getClassLoader()).setSourceRoot(sourceRoot);
+        displayMessages(result);
+        return fileManager.getTempDir();
     }
 
     private void displayMessages(CompilationResult result) {

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,22 @@
+package org.apache.myfaces.scripting.loaders.groovy.compiler;
+
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.groovy.GroovyRecompiledClassloader;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.jdk5.ContainerFileManager;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 18:19:17
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyContainerFileManager extends ContainerFileManager {
+
+    public void refreshClassloader() {
+         classLoader = new GroovyRecompiledClassloader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_GROOVY, ".groovy");
+     }
+
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java Fri Jan 15 16:28:22 2010
@@ -27,10 +27,8 @@
 import org.apache.myfaces.scripting.core.dependencyScan.DefaultDependencyScanner;
 import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
-import org.apache.myfaces.scripting.loaders.java.util.ExtendedLoopCnt;
 
 import java.util.*;
-import java.util.concurrent.Semaphore;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -55,7 +53,6 @@
 
     }
 
-
     public synchronized void scanPaths() {
         if (log.isInfoEnabled()) {
             log.info("[EXT-SCRITPING] starting class dependency scan");
@@ -90,7 +87,7 @@
 
 
     protected ClassLoader getClassLoader() {
-        return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+        return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
     }
 
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java Fri Jan 15 16:28:22 2010
@@ -138,7 +138,7 @@
 
 
     protected ClassLoader getClassLoader() {
-        return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+        return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
     }
 
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java Fri Jan 15 16:28:22 2010
@@ -176,7 +176,7 @@
             //jsr199 compliant jdk
             return JSR199_COMPILER;
         }
-        //otherwise 
+        //otherwise
         return JAVA5_COMPILER;
     }
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java Fri Jan 15 16:28:22 2010
@@ -44,10 +44,11 @@
     static File tempDir = null;
     static double _tempMarker = Math.random();
     int _scriptingEngine;
+    String _engineExtension;
 
     String sourceRoot;
 
-    public RecompiledClassLoader(ClassLoader classLoader, int scriptingEngine) {
+    public RecompiledClassLoader(ClassLoader classLoader, int scriptingEngine, String engineExtension) {
         super(classLoader);
         if (tempDir == null) {
             synchronized (this.getClass()) {
@@ -59,6 +60,7 @@
             }
         }
         _scriptingEngine = scriptingEngine;
+        _engineExtension = engineExtension;
     }
 
     RecompiledClassLoader() {
@@ -66,7 +68,7 @@
 
 
     /*
-     * TODO the classcast excepton is caused by a loadClassIntrnal triggered
+     * TODO the classcast exception is caused by a loadClassInternal triggered
      * at the time the referencing class is loaded and then by another classload
      * at the time the bean is refreshed
      *
@@ -144,7 +146,7 @@
         }
 
 
-        return super.loadClass(className);    //To change body of overridden methods use File | Settings | File Templates.
+        return super.loadClass(className);    
     }
 
     private Class<?> storeReloadableDefinitions(String className, File target, int fileLength, byte[] fileContent) {
@@ -155,8 +157,8 @@
         //find the source for the given class and then
         //store the filename
         String separator = FileUtils.getFileSeparatorForRegex();
-        String fileName = className.replaceAll("\\.", separator) + ".java";
-        Collection<String> sourceDirs = WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_JAVA);
+        String fileName = className.replaceAll("\\.", separator) + getStandardFileExtension();
+        Collection<String> sourceDirs = WeavingContext.getConfiguration().getSourceDirs(_scriptingEngine);
         String rootDir = null;
         File sourceFile = null;
         for (String sourceDir : sourceDirs) {
@@ -186,6 +188,9 @@
         return retVal;
     }
 
+    protected String getStandardFileExtension() {
+        return _engineExtension;
+    }
 
     @Override
     protected Class<?> findClass(String name) throws ClassNotFoundException {

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java Fri Jan 15 16:28:22 2010
@@ -3,7 +3,7 @@
 /**
  *
  */
-class CompilationException extends Exception {
+public class CompilationException extends Exception {
 
     // ------------------------------------------ Constructors
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java Fri Jan 15 16:28:22 2010
@@ -6,7 +6,7 @@
 /**
  *
  */
-class CompilationResult {
+public class CompilationResult {
 
     /**
      * The compiler output

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java Fri Jan 15 16:28:22 2010
@@ -36,11 +36,11 @@
  */
 
 public class CompilerFacade implements DynamicCompiler {
-    JavacCompiler compiler = null;
+    protected Compiler compiler = null;
 
-    Log log = LogFactory.getLog(this.getClass());
     ContainerFileManager fileManager = null;
 
+    Log log = LogFactory.getLog(this.getClass());
 
     public CompilerFacade() {
         super();
@@ -49,7 +49,6 @@
         fileManager = new ContainerFileManager();
     }
 
-
     /**
      * does a compilation of all files one compile per request
      * is allowed for performance reasons, the request blocking will be done
@@ -74,7 +73,6 @@
         }
     }
 
-
     public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
 
         String separator = FileUtils.getFileSeparatorForRegex();
@@ -88,7 +86,7 @@
 
             if (!result.hasErrors()) {
                 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
-                if (!(oldClassLoader instanceof RecompiledClassLoader)) {
+                if (!(oldClassLoader.getClass().equals(RecompiledClassLoader.class))) {
                     try {
                         RecompiledClassLoader classLoader = (RecompiledClassLoader) fileManager.getClassLoader();
                         classLoader.setSourceRoot(sourceRoot);

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java Fri Jan 15 16:28:22 2010
@@ -35,15 +35,15 @@
 
 
 public class ContainerFileManager {
-    String _classPath = null;
-    RecompiledClassLoader classLoader = null;
+    protected String _classPath = null;
+    protected RecompiledClassLoader classLoader = null;
 
     public ContainerFileManager() {
         refreshClassloader();
     }
 
     public void refreshClassloader() {
-        classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+        classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
     }
 
     public String getClassPath() {

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java Fri Jan 15 16:28:22 2010
@@ -22,6 +22,7 @@
 import org.apache.myfaces.scripting.api.ScriptingWeaver;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
 import org.apache.myfaces.scripting.core.CoreWeaver;
+import org.apache.myfaces.scripting.loaders.groovy.GroovyScriptingWeaver;
 import org.apache.myfaces.scripting.loaders.java.JavaScriptingWeaver;
 import org.apache.myfaces.shared_impl.util.ClassLoaderExtension;
 import org.apache.commons.lang.StringUtils;
@@ -59,7 +60,7 @@
     //every weaver should know itself how to initialize itself
 
     public CustomChainLoader(ServletContext servletContext) {
-        ScriptingWeaver groovyWeaver = new GroovyWeaver();
+        ScriptingWeaver groovyWeaver = new GroovyScriptingWeaver(servletContext);
         ScriptingWeaver javaWeaver = new JavaScriptingWeaver(servletContext);
 
         setupScriptingPaths(servletContext, groovyWeaver, GROOVY_SOURCE_ROOT, CUSTOM_LOADER_PATHS);
@@ -114,6 +115,9 @@
         else if (name.startsWith("org.apache") && !name.startsWith("org.apache.myfaces")) {
             return null;
         }
+        if(name.contains(".Blog")) {
+            log.debug("Debugpoint found for Blog");
+        }
 
         return scriptingWeaver.loadScriptingClassFromName(name);
     }

Added: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,123 @@
+/*
+ * 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.groovyCompiler;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationException;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+import org.apache.myfaces.extensions.scripting.compiler.GroovyCompiler;
+import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Another testcase for the groovy compiler which
+ * picks up the probes given in src/main/resources
+ * <p/>
+ * the advantage over our old groovy compiler testcase simply
+ * is that the probes are separate files which already exist
+ * the pattern already works on java files so it ought to work
+ * on groovy files as well
+ */
+
+public class GroovyCompilerTest {
+
+    private static final String PROBE1 = "../../src/test/resources/compiler/TestProbe1Groovy.groovy";
+    private static final String PROBE2 = "../../src/test/resources/compiler/TestProbe2Groovy.groovy";
+    private static final String RESOURCES = "../../src/test/resources/";
+
+    File probe1;
+    File probe2;
+    File root;
+
+    GroovyCompiler compiler = new GroovyCompiler();
+
+    public GroovyCompilerTest() {
+        //we use a location relative to our current root one to reach the sources
+        //because the test also has to be performed outside of maven
+        //and the ide cannot cope with resource paths for now
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+        String currentPath = loader.getResource("./").getPath();
+        String sourcePath1 = currentPath + PROBE1;
+        String sourcePath2 = currentPath + PROBE2;
+        String rootPath = currentPath + RESOURCES;
+
+        sourcePath1 = FilenameUtils.normalize(sourcePath1);
+        sourcePath2 = FilenameUtils.normalize(sourcePath2);
+        rootPath = FilenameUtils.normalize(rootPath);
+
+        probe1 = new File(sourcePath1);
+        probe2 = new File(sourcePath2);
+        root = new File(rootPath);
+    }
+
+    @Test
+    public void testCompileSingleFile() {
+
+        try {
+            File targetDir = FileUtils.getTempDir();
+            ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            targetDir.mkdirs();
+            targetDir.deleteOnExit();
+            File sourceFile = new File(root.getAbsolutePath() + File.separator + "compiler" + File.separator + "TestProbe1Groovy.groovy");
+
+            CompilationResult result = null;
+
+            result = compiler.compile(root, targetDir, sourceFile, loader);
+
+            assertTrue("result has no errors", !result.hasErrors());
+
+            assertTrue("targetDir exists files are compiled into the targetDir", targetDir != null);
+            File classFile1 = new File(targetDir.getAbsolutePath() + "/compiler/TestProbe1Groovy.class");
+
+            assertTrue("Classfile1 is compiled into the targetDir", classFile1.exists());
+
+        } catch (CompilationException e) {
+            fail(e.toString());
+        }
+    }
+
+    @Test
+    public void testFullCompile() {
+        File targetDir = null;
+
+        File target = FileUtils.getTempDir();
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        target.mkdirs();
+        target.deleteOnExit();
+
+        CompilationResult result = compiler.compile(root, target, loader);
+
+        assertTrue("result has no errors", !result.hasErrors());
+
+        assertTrue("target exists files are compiled into the target", target != null);
+        File classFile1 = new File(target.getAbsolutePath() + "/compiler/TestProbe1Groovy.class");
+        File classFile2 = new File(target.getAbsolutePath() + "/compiler/TestProbe2Groovy.class");
+
+        assertTrue("Classfile1 is compiled into the target", classFile1.exists());
+        assertTrue("Classfile2 is compiled into the target", classFile2.exists());
+
+    }
+
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy Fri Jan 15 16:28:22 2010
@@ -0,0 +1,9 @@
+package compiler;
+
+/**
+ * a simple testprobe to check if the compiler api works
+ */
+
+public class TestProbe1Groovy {
+
+}
\ No newline at end of file

Added: myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy Fri Jan 15 16:28:22 2010
@@ -0,0 +1,10 @@
+package compiler;
+
+/**
+ * a simple testprobe to check if the compiler api works
+ */
+
+public class TestProbe2Groovy {
+  
+}
+