Author: tcurdt
Date: Sat Mar 24 10:12:18 2007
New Revision: 522054

URL: http://svn.apache.org/viewvc?view=rev&rev=522054
Log:
package.html files (still skeletons)
idientified an extension requirement for .java on the resource - would be nice 
to get rid of that,
exposed a few more methods,
improved the jsp example


Added:
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
   (with props)
    jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
   (with props)
    jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java
   (with props)
    
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html
   (with props)
    
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html
   (with props)
Removed:
    jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/
Modified:
    
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
    
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
    
jakarta/commons/sandbox/jci/trunk/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
    
jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
    
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
    
jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
    
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
    jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml

Modified: 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompiler.java
 Sat Mar 24 10:12:18 2007
@@ -245,12 +245,6 @@
                 
                log.debug("not in store " + pClazzName);
                
-//                if (pReader.isAvailable(clazzName.replace('.', '/') + 
".java")) {
-//                    log.debug("compile " + clazzName);
-//                    ICompilationUnit compilationUnit = new 
CompilationUnit(pReader, clazzName);
-//                    return new NameEnvironmentAnswer(compilationUnit, null);
-//                }
-
                 final InputStream is = 
pClassLoader.getResourceAsStream(resourceName);
                 if (is == null) {
                        log.debug("class " + pClazzName + " not found");
@@ -296,6 +290,7 @@
                        return false;
                }
                
+               // FIXME: this should not be tied to the extension
                final String source = pClazzName.replace('.', '/') + ".java";
                if (pReader.isAvailable(source)) {
                        log.debug("found the source " + source + " for " + 
pClazzName + " - no package ");

Modified: 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/main/java/org/apache/commons/jci/compilers/EclipseJavaCompilerSettings.java
 Sat Mar 24 10:12:18 2007
@@ -27,4 +27,11 @@
        
         return map;
     }
+    
+    public String toString() {
+        final StringBuffer sb = new StringBuffer();
+        sb.append(defaultEclipseSettings.toString());
+        // FIXME
+        return sb.toString();
+    }
 }

Modified: 
jakarta/commons/sandbox/jci/trunk/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/compilers/janino/src/main/java/org/apache/commons/jci/compilers/JaninoJavaCompiler.java
 Sat Mar 24 10:12:18 2007
@@ -79,6 +79,8 @@
             if (types.containsKey(pType)) {
                 return (IClass) types.get(pType);
             }
+            
+            // FIXME: should not be tied to the extension            
             final String resourceNameFromClass = className.replace('.', '/') + 
".java";
 
             final byte[] content = 
resourceReader.getBytes(resourceNameFromClass);

Modified: 
jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
 Sat Mar 24 10:12:18 2007
@@ -70,7 +70,7 @@
 
                        final Method compile = 
renamedClass.getMethod("compile", new Class[] { String[].class, 
PrintWriter.class });
                        final StringWriter out = new StringWriter();
-                       final Integer ok = (Integer) compile.invoke(null, new 
Object[] { pSourcePaths, new PrintWriter(out) });
+                       final Integer ok = (Integer) compile.invoke(null, new 
Object[] { buildCompilerArguments(pSourcePaths, pClasspathClassLoader), new 
PrintWriter(out) });
 
                        final CompilationResult result = parseModernStream(new 
BufferedReader(new StringReader(out.toString())));
 
@@ -189,7 +189,11 @@
                return null;
        }
 
-//     private String[] buildCompilerArguments( final String[] resourcePaths )
+       private String[] buildCompilerArguments( final String[] resourcePaths, 
final ClassLoader classloader ) {
+               
+               // FIXME: build classpath from classloader information
+               return resourcePaths;
+               
 //     {
 //             final List args = new ArrayList();
 //             for (int i = 0; i < resourcePaths.length; i++) {
@@ -257,5 +261,5 @@
 //             }
 //
 //             return (String[]) args.toArray(new String[args.size()]);
-//     }
+       }
 }

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/compilers/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Modified: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/CompilingListener.java
 Sat Mar 24 10:12:18 2007
@@ -64,6 +64,18 @@
         lastResult = null;
     }
     
+    public JavaCompiler getCompiler() {
+       return compiler;
+    }
+    
+    public String getSourceFileExtension() {
+       return ".java";
+    }
+
+    public ResourceReader getReader( final FilesystemAlterationObserver 
pObserver ) {
+       return new FileResourceReader(pObserver.getRootDirectory());
+    }
+    
     public ResourceStore getStore() {
         return transactionalStore;
     }
@@ -75,7 +87,7 @@
     public void onStart( final FilesystemAlterationObserver pObserver ) {
         super.onStart(pObserver);
 
-        reader = new FileResourceReader(pObserver.getRootDirectory());
+        reader = getReader(pObserver);
 
         transactionalStore.onStart();
     }
@@ -95,9 +107,8 @@
 
                 final String resourceName = 
ConversionUtils.getResourceNameFromFileName(ConversionUtils.relative(pObserver.getRootDirectory(),
 deletedFile));
                 
-                if (resourceName.endsWith(".java")) {
-                    transactionalStore.remove(
-                               ConversionUtils.stripExtension(resourceName) + 
".class");
+                if (resourceName.endsWith(getSourceFileExtension())) {
+                    
transactionalStore.remove(ConversionUtils.stripExtension(resourceName) + 
".class");
                 } else {
                     transactionalStore.remove(resourceName);                   
                 }
@@ -113,14 +124,14 @@
         
         for (final Iterator it = created.iterator(); it.hasNext();) {
             final File createdFile = (File) it.next();
-            if (createdFile.getName().endsWith(".java")) {
+            if (createdFile.getName().endsWith(getSourceFileExtension())) {
                 compileables.add(createdFile);
             }
         }
         
         for (final Iterator it = changed.iterator(); it.hasNext();) {
             final File changedFile = (File) it.next();
-            if (changedFile.getName().endsWith(".java")) {
+            if (changedFile.getName().endsWith(getSourceFileExtension())) {
                 compileables.add(changedFile);
             }
         }

Modified: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/ReloadingListener.java
 Sat Mar 24 10:12:18 2007
@@ -52,7 +52,7 @@
     public ReloadingListener( final ResourceStore pStore ) {
         store = pStore;
     }
-    
+
     public ResourceStore getStore() {
         return store;
     }

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/problems/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/readers/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/stores/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/core/src/main/java/org/apache/commons/jci/utils/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Modified: 
jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/CompilingClassLoaderTestCase.java
 Sat Mar 24 10:12:18 2007
@@ -46,18 +46,7 @@
     private ReloadingClassLoader classloader;
     private CompilingListener listener;
     private FilesystemAlterationMonitor fam;
-    
-//    private final static class BeanUtils {
-//        
-//        public static void setProperty( Object object, String property, 
Object value) throws SecurityException, NoSuchMethodException, 
IllegalArgumentException, IllegalAccessException, InvocationTargetException {
-//            final Class clazz = object.getClass();
-//            
-//            final Method setter = clazz.getMethod("set" + property, new 
Class[]{ value.getClass()});
-//            setter.invoke(object, new Object[]{ value });   
-//        }
-//    }
-    
-    
+        
     private final static class MockJavaCompiler implements JavaCompiler {
 
         private final Log log = LogFactory.getLog(MockJavaCompiler.class);
@@ -141,15 +130,6 @@
         log.debug("*** ready to test");        
     }
     
-    
-//    public void testCompileProblems() throws Exception {
-//        delay();        
-//        writeFile("jci/Simple.java", "JavaSources.error");
-//        listener.waitForEvent();
-//        
-//        // FIXME
-//    }
-    
     public void testCreate() throws Exception {
         initialCompile();
         
@@ -247,106 +227,6 @@
         }
         
     }
-
-
-//    public void testReference1() throws Exception {        
-//        delay();        
-//        writeFile("jci/Foo.java",
-//                "package jci;\n" + 
-//                "\n" + 
-//                "public class Foo {\n" + 
-//                "    public String toString() {\n" + 
-//                "        return \"foo1\";\n" + 
-//                "    }\n" + 
-//                "}"
-//                );        
-//        writeFile("jci/Bar.java",
-//                "package jci;\n" + 
-//                "\n" + 
-//                "public class Bar {\n" + 
-//                "    \n" + 
-//                "    private Foo foo;\n" + 
-//                "    \n" + 
-//                "    public void setFoo( Foo foo) {\n" + 
-//                "        this.foo = foo;\n" + 
-//                "    }\n" + 
-//                "    \n" + 
-//                "    public String toString() {\n" + 
-//                "        return \"bar1\";\n" + 
-//                "    }\n" + 
-//                "}"
-//                );        
-//        listener.waitForEvent();
-//        
-//        final Object foo1 = classloader.loadClass("jci.Foo").newInstance();  
      
-//        assertTrue("foo1".equals(foo1.toString()));
-//
-//        final Object bar1 = classloader.loadClass("jci.Bar").newInstance();  
      
-//        assertTrue("bar1".equals(bar1.toString()));
-//        
-//        BeanUtils.setProperty(bar1, "Foo", foo1);
-//        
-//        delay();
-//        writeFile("jci/Foo.java",
-//                "package jci;\n" + 
-//                "\n" + 
-//                "public class Foo {\n" + 
-//                "    public String toString() {\n" + 
-//                "        return \"foo2\";\n" + 
-//                "    }\n" + 
-//                "}"
-//                );        
-//        listener.waitForEvent();
-//
-//        final Object foo2 = classloader.loadClass("jci.Foo").newInstance();  
      
-//        assertTrue("foo2".equals(foo2.toString()));
-//
-//        final Object bar2 = classloader.loadClass("jci.Bar").newInstance();  
      
-//        // has not change -> still bar1
-//        assertTrue("bar1".equals(bar2.toString()));
-//    
-//        BeanUtils.setProperty(bar2, "Foo", foo2);
-//        BeanUtils.setProperty(bar1, "Foo", foo2);
-//
-//    }
-//
-//    public void testReference2() throws Exception {        
-//        delay();        
-//        writeFile("jci/Foo.java",
-//                "package jci;\n" + 
-//                "\n" + 
-//                "public class Foo implements org.apache.commons.jci.MyFoo 
{\n" + 
-//                "    public String toString() {\n" + 
-//                "        return \"foo1\";\n" + 
-//                "    }\n" + 
-//                "}"
-//                );        
-//        listener.waitForEvent();
-//        
-//        final MyFoo foo1 = (MyFoo) 
classloader.loadClass("jci.Foo").newInstance();        
-//        assertTrue("foo1".equals(foo1.toString()));
-//
-//
-//        final MyBar bar1 = new MyBar();
-//        bar1.setFoo(foo1);
-//        
-//        delay();
-//        writeFile("jci/Foo.java",
-//                "package jci;\n" + 
-//                "\n" + 
-//                "public class Foo implements org.apache.commons.jci.MyFoo 
{\n" + 
-//                "    public String toString() {\n" + 
-//                "        return \"foo2\";\n" + 
-//                "    }\n" + 
-//                "}"
-//                );        
-//        listener.waitForEvent();
-//
-//        final MyFoo foo2 = (MyFoo) 
classloader.loadClass("jci.Foo").newInstance();        
-//        assertTrue("foo2".equals(foo2.toString()));
-//
-//        bar1.setFoo(foo2);
-//    }
 
     protected void tearDown() throws Exception {
         fam.removeListener(listener);

Added: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java?view=auto&rev=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
 (added)
+++ 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
 Sat Mar 24 10:12:18 2007
@@ -0,0 +1,171 @@
+package org.apache.commons.jci.examples.serverpages;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.apache.commons.jci.readers.ResourceReader;
+import org.apache.commons.jci.utils.ConversionUtils;
+
+public final class JspReader implements ResourceReader {
+
+       private final ResourceReader reader;
+       
+       
+       public JspReader( final ResourceReader pReader ) {
+               reader = pReader;
+       }
+       
+       private String quote( final String s ) {
+               
+               final StringBuffer sb = new StringBuffer();
+               final char[] input = s.toCharArray();
+               
+               for (int i = 0; i < input.length; i++) {
+                       final char c = input[i];
+                       if (c == '"') {
+                               sb.append('\\');
+                       }
+                       if (c == '\\') {
+                               sb.append('\\');
+                       }
+                       
+                       if (c == '\n') {
+                               sb.append("\");\n").append("    out.write(\"");
+                               continue;
+                       }
+                       sb.append(c);
+               }
+               
+               return sb.toString();
+       }
+       
+       private void generateJavaCodeFor( final StringBuffer pInput, final 
Writer pOutput ) throws IOException {
+               
+               pOutput.append("    out.write(\"");
+               
+               pOutput.append(quote(pInput.toString()));
+
+               pOutput.append("\");").append('\n');
+       }
+       
+       private byte[] transform( String pResourceName, byte[] pBytes ) {
+
+               try {
+                       final ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream();
+                       final Reader input = new InputStreamReader(new 
ByteArrayInputStream(pBytes));
+                       final Writer output = new 
OutputStreamWriter(outputStream);
+                       
+                       final int p = pResourceName.lastIndexOf('/');
+
+                       final String className;
+                       final String packageName;
+
+                       if (p < 0) {
+                               className = 
ConversionUtils.stripExtension(pResourceName);
+                               packageName = "";
+                       } else {
+                               className = 
ConversionUtils.stripExtension(pResourceName.substring(p+1));
+                               packageName = pResourceName.substring(0, 
p).replace('/', '.');
+                               output.append("package 
").append(packageName).append(";").append('\n');                         
+                       }
+                       
+                       
+                       output.append("import 
java.io.PrintWriter;").append('\n');
+                       output.append("import 
java.io.IOException;").append('\n');
+                       output.append("import 
javax.servlet.http.HttpServlet;").append('\n');
+                       output.append("import 
javax.servlet.http.HttpServletRequest;").append('\n');
+                       output.append("import 
javax.servlet.http.HttpServletResponse;").append('\n');
+                       output.append("import 
javax.servlet.ServletException;").append('\n');
+                       output.append("public class 
").append(className).append(" extends HttpServlet {").append('\n');
+                       output.append("  protected void 
service(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException {").append('\n');
+                       output.append("    final PrintWriter out = 
response.getWriter();").append('\n');
+                       
+                       
+                       final char[] open = "<?".toCharArray();
+                       final char[] close = "?>".toCharArray();
+
+                       StringBuffer sb = new StringBuffer();
+                       char[] watch = open;
+                       int w = 0;
+                       while(true) {
+                               int c = input.read();
+                               
+                               if (c < 0) {
+                                       break;
+                               }
+
+                               if (c == watch[w]) {
+                                       w++;
+                                       if (watch.length == w) {
+                                               if (watch == open) {
+                                                       // found open
+                                                       
+                                                       generateJavaCodeFor(sb, 
output);
+
+                                                       sb = new StringBuffer();
+                                                       watch = close;
+                                               } else if (watch == close) {
+                                                       // found close
+
+                                                       // <? ... ?> is java
+                                                       
output.append(sb.toString());
+                                                       
+                                                       sb = new StringBuffer();
+                                                       watch = open;
+                                               }
+                                               w = 0;
+                                       }
+                               } else {
+                                       if (w > 0) {
+                                               sb.append(watch, 0, w);
+                                       }
+
+                                       sb.append((char)c);
+
+                                       w = 0;
+                               }
+                       }
+
+                       if (watch == open) {
+                               generateJavaCodeFor(sb, output);
+                       }
+
+                       
+                       output.append("    out.close();").append('\n');
+                       output.append("    out.flush();").append('\n');
+                       output.append("  }").append('\n');
+                       output.append("}").append('\n');
+                       
+                       
+                       output.close();
+                       
+                       return outputStream.toByteArray();
+               } catch (IOException e) {
+                       return null;
+               }
+       }
+       
+       public byte[] getBytes( String pResourceName ) {
+               final byte[] resourceBytes = reader.getBytes(pResourceName);
+               
+               if (resourceBytes == null) {
+                       return null;
+               }
+               
+               final byte[] jspServletCode = transform(pResourceName, 
resourceBytes);
+               
+               System.out.println(new String(jspServletCode));
+               
+               return jspServletCode;
+       }
+
+       public boolean isAvailable( String pResourceName ) {
+               return reader.isAvailable(pResourceName);
+       }
+
+}

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/JspReader.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
 (original)
+++ 
jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java
 Sat Mar 24 10:12:18 2007
@@ -19,10 +19,12 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collection;
+import java.io.PrintWriter;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -30,9 +32,16 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.jci.ReloadingClassLoader;
+import org.apache.commons.jci.compilers.CompilationResult;
+import org.apache.commons.jci.compilers.JavaCompilerFactory;
 import org.apache.commons.jci.listeners.CompilingListener;
 import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
 import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
+import org.apache.commons.jci.problems.CompilationProblem;
+import org.apache.commons.jci.readers.ResourceReader;
+import org.apache.commons.jci.stores.MemoryResourceStore;
+import org.apache.commons.jci.stores.TransactionalResourceStore;
+import org.apache.commons.jci.utils.ConversionUtils;
 
 
 /**
@@ -43,111 +52,92 @@
        private static final long serialVersionUID = 1L;
 
        private final ReloadingClassLoader classloader = new 
ReloadingClassLoader(ServerPageServlet.class.getClassLoader());
-       private CompilingListener listener;
        private FilesystemAlterationMonitor fam;
+       private CompilingListener jspListener; 
 
-       private Map serverPagesByClassName = new HashMap();
+       private Map servletsByClassname = new HashMap();
 
        public void init() throws ServletException {
                super.init();
                
-               final File directory = new 
File(getServletContext().getRealPath("/") + getInitParameter("directory"));
+               final File serverpagesDir = new 
File(getServletContext().getRealPath("/") + getInitParameter("serverpagesDir"));
                
-               log("monitoring classes in " + directory);
+               log("monitoring serverpages in " + serverpagesDir);
+               
+               final TransactionalResourceStore store = new 
TransactionalResourceStore(new MemoryResourceStore()) {
 
-        listener = new CompilingListener() {
+                       private Set newClasses;
+                       private Map newServletsByClassname;
+                       
+                       public void onStart() {
+                               super.onStart();
 
-                       public void onStop( final FilesystemAlterationObserver 
pObserver ) {
-                               super.onStop(pObserver);
+                               newClasses = new HashSet();
+                               newServletsByClassname = new 
HashMap(servletsByClassname);                              
+                       }
 
-                               final File root = pObserver.getRootDirectory();
-                                                               
-                               final Collection changedFiles = 
getChangedFiles();
-                               changedFiles.addAll(getCreatedFiles());
-                               final Collection deletedFiles = 
getDeletedFiles();
-                               
-                               boolean reload = false;
-                               
-                               final Map newServerPagesByClassName = new 
HashMap(serverPagesByClassName);
-                               
-                               for (Iterator it = deletedFiles.iterator(); 
it.hasNext();) {
-                                       final File file = (File) it.next();
-                                       final String serverPageClassName = 
convertFileToServerPageClassName(root, file);
-                                       
newServerPagesByClassName.remove(serverPageClassName);
-                                       reload = true;
-                                       log("removing " + serverPageClassName);
-                               }
+                       public void onStop() {
+                               super.onStop();
 
-                               for (Iterator it = changedFiles.iterator(); 
it.hasNext();) {
-                                       final File file = (File) it.next();
-                                       
-                                       final String serverPageClassName = 
convertFileToServerPageClassName(root, file);
-                                       
-                                       if (serverPageClassName == null) {
-                                               continue;
-                                       }
+                               boolean reload = false;
+                               for (Iterator it = newClasses.iterator(); 
it.hasNext();) {
+                                       final String clazzName = (String) 
it.next();
                                        
                                        try {
-                                               final Class clazz = 
classloader.loadClass(serverPageClassName);
-                                               final HttpServlet serverPage = 
(HttpServlet) clazz.newInstance();
-                                               
newServerPagesByClassName.put(serverPageClassName, serverPage);
+                                               final Class clazz = 
classloader.loadClass(clazzName);
+
+//                                             if 
(!clazz.isAssignableFrom(HttpServlet.class)) {
+//                                                     log(clazzName + " is 
not a servlet");
+//                                                     continue;
+//                                             }
+
+                                               final HttpServlet servlet = 
(HttpServlet) clazz.newInstance();
+                                               
newServletsByClassname.put(clazzName, servlet);
                                                reload = true;
-                                               log("compiled " + 
serverPageClassName);
-                                       } catch (ClassNotFoundException e) {
+                                       } catch(Exception e) {
                                                log("", e);
-                                       } catch (InstantiationException e) {
-                                               log("", e);
-                                       } catch (IllegalAccessException e) {
-                                               log("", e);
-                                       }
+                                       }                                       
                                }
 
                                if (reload) {
-                                       log("activating new map of serverpages 
"+ newServerPagesByClassName);
-                                       serverPagesByClassName = 
newServerPagesByClassName;                                     
+                                       log("activating new map of servlets "+ 
newServletsByClassname);
+                                       servletsByClassname = 
newServletsByClassname;                                   
                                }
+                       }
 
-                       }               
+                       public void write(String pResourceName, byte[] 
pResourceData) {
+                               super.write(pResourceName, pResourceData);
+                               
+                               if (pResourceName.endsWith(".class")) {
+                                       
newClasses.add(pResourceName.replace('/', '.').substring(0, 
pResourceName.length() - ".class".length()));
+                               }
+                       }
+                       
+               };
+               
+               jspListener = new CompilingListener(new 
JavaCompilerFactory().createCompiler("eclipse"), store) {
+
+                       public String getSourceFileExtension() {
+                               return ".java";
+                       }
+                       
+                       public ResourceReader getReader( final 
FilesystemAlterationObserver pObserver ) {
+                               return new 
JspReader(super.getReader(pObserver));
+                       }
         };
-        listener.addReloadNotificationListener(classloader);
+        jspListener.addReloadNotificationListener(classloader);
         
         fam = new FilesystemAlterationMonitor();
-        fam.addListener(directory, listener);
+        fam.addListener(serverpagesDir, jspListener);
         fam.start();
        }
 
-       private String convertFileToServerPageClassName( final File root, final 
File file ) {
-
-               if (!file.getName().endsWith(".java")) {
-                       return null;
-               }
-               
-               final String relativeName = 
file.getAbsolutePath().substring(root.getAbsolutePath().length() + 1);
-
-               log("relative: " + relativeName);
-               
-               final String clazzName = relativeName.replace('/', 
'.').substring(0, relativeName.length() - 5); 
-
-               log("clazz: " + clazzName);
-
-               return clazzName;
-       }
        
-       private String convertRequestToServerPageClassName( final 
HttpServletRequest request ) {
+       private String convertRequestToServletClassname( final 
HttpServletRequest request ) {
 
                final String path = request.getPathInfo().substring(1);
 
-//             log("1 " + request.getContextPath());
-//             log("2 " + request.getPathInfo());
-//             log("3 " + request.getPathTranslated());
-//             log("4 " + request.getRequestURI());
-//             log("5 " + request.getServletPath());
-//             log("6 " + request.getRequestURL());
-               
-               // FIXME
-               // /some/page/bla.jsp -> some.page.Bla
-               
-               final String clazz = path;
+               final String clazz = 
ConversionUtils.stripExtension(path).replace('/', '.');
                
                return clazz;
        }
@@ -155,21 +145,41 @@
        protected void service(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
                log("request " + request.getRequestURI());
                
-               final String serverPageNameClassName = 
convertRequestToServerPageClassName(request);
+               final CompilationResult result = 
jspListener.getCompilationResult();
+               final CompilationProblem[] errors = result.getErrors();
+
+               if (errors.length > 0) {
+                       final PrintWriter out = response.getWriter();
+                       
+                       out.append("<html><body>");
+
+                       for (int i = 0; i < errors.length; i++) {
+                               final CompilationProblem problem = errors[i];
+                               
out.append(problem.toString()).append("<br/>").append('\n');
+                       }
+                       
+                       out.append("</body></html>");
+                       
+                       out.flush();
+                       out.close();
+                       return;                 
+               }
+               
+               final String servletClassname = 
convertRequestToServletClassname(request);
 
-               log("checking for serverpage " + serverPageNameClassName);
+               log("checking for serverpage " + servletClassname);
                
-               final HttpServlet serverPage = (HttpServlet) 
serverPagesByClassName.get(serverPageNameClassName);
+               final HttpServlet servlet = (HttpServlet) 
servletsByClassname.get(servletClassname);
                
-               if (serverPage == null) {
-                       log("no serverpage  for " + request.getRequestURI());
+               if (servlet == null) {
+                       log("no servlet  for " + request.getRequestURI());
                        response.sendError(404);
                        return;
                }
 
-               log("delegating request to " + serverPageNameClassName);
+               log("delegating request to " + servletClassname);
                
-               serverPage.service(request, response);
+               servlet.service(request, response);
        }
 
        public void destroy() {

Added: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java?view=auto&rev=522054
==============================================================================
--- 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
 (added)
+++ 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
 Sat Mar 24 10:12:18 2007
@@ -0,0 +1,6 @@
+<html><body>
+    TEST
+    <?
+    System.out.println("TEST");
+    ?>
+</body></html>
\ No newline at end of file

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/Test.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/jsp/org/vafer/Test.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml?view=diff&rev=522054&r1=522053&r2=522054
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml 
(original)
+++ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml 
Sat Mar 24 10:12:18 2007
@@ -4,8 +4,8 @@
         <servlet-name>serverpages</servlet-name>
         
<servlet-class>org.apache.commons.jci.examples.serverpages.ServerPageServlet</servlet-class>
         <init-param>
-            <param-name>directory</param-name>
-            <param-value>/WEB-INF/classes</param-value>
+            <param-name>serverpagesDir</param-name>
+            <param-value>/WEB-INF/jsp</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>

Added: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/listeners/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html?view=auto&rev=522054
==============================================================================
    (empty)

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/package.html
------------------------------------------------------------------------------
    svn:mime-type = text/html



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to