[jboss-cvs] jboss-seam/src/main/org/jboss/seam/deployment ...

Emmanuel Bernard emmanuel.bernard at jboss.com
Wed Apr 18 02:40:06 EDT 2007


  User: ebernard
  Date: 07/04/18 02:40:06

  Modified:    src/main/org/jboss/seam/deployment    Scanner.java
                        ComponentScanner.java
  Added:       src/main/org/jboss/seam/deployment   
                        GroovyComponentScanner.java
  Log:
  JBSEAM-1199 Support for .groovy deployment in WEB-INF/dev Cannot be used to write EJB 3 Groovy session beans
  JBSEAM-1200 Support for Groovy in the seam-gen environment
  
  Revision  Changes    Path
  1.27      +7 -2      jboss-seam/src/main/org/jboss/seam/deployment/Scanner.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Scanner.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/deployment/Scanner.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -b -r1.26 -r1.27
  --- Scanner.java	7 Mar 2007 16:38:48 -0000	1.26
  +++ Scanner.java	18 Apr 2007 06:40:06 -0000	1.27
  @@ -1,4 +1,4 @@
  -//$Id: Scanner.java,v 1.26 2007/03/07 16:38:48 gavin Exp $
  +//$Id: Scanner.java,v 1.27 2007/04/18 06:40:06 ebernard Exp $
   package org.jboss.seam.deployment;
   
   import java.io.DataInputStream;
  @@ -54,7 +54,7 @@
         Set<String> paths = new HashSet<String>();
         if (resourceName==null)
         {
  -         for ( URL url: ( (URLClassLoader) classLoader ).getURLs() )
  +         for ( URL url: getURLsFromClassLoader() )
            {
               String urlPath = url.getFile();
               if ( urlPath.endsWith("/") )
  @@ -125,6 +125,11 @@
         }
      }
   
  +   protected URL[] getURLsFromClassLoader()
  +   {
  +      return ( (URLClassLoader) classLoader ).getURLs();
  +   }
  +
   
      private void handleArchive(File file) throws ZipException, IOException
      {
  
  
  
  1.8       +1 -1      jboss-seam/src/main/org/jboss/seam/deployment/ComponentScanner.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ComponentScanner.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/deployment/ComponentScanner.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -b -r1.7 -r1.8
  --- ComponentScanner.java	7 Mar 2007 05:20:40 -0000	1.7
  +++ ComponentScanner.java	18 Apr 2007 06:40:06 -0000	1.8
  @@ -16,7 +16,7 @@
   {
      private static final LogProvider log = Logging.getLogProvider(ComponentScanner.class);
   
  -   private Set<Class<Object>> classes;
  +   protected Set<Class<Object>> classes;
   
      public ComponentScanner(String resourceName)
      {
  
  
  
  1.1      date: 2007/04/18 06:40:06;  author: ebernard;  state: Exp;jboss-seam/src/main/org/jboss/seam/deployment/GroovyComponentScanner.java
  
  Index: GroovyComponentScanner.java
  ===================================================================
  //$Id: GroovyComponentScanner.java,v 1.1 2007/04/18 06:40:06 ebernard Exp $
  package org.jboss.seam.deployment;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.net.URL;
  import java.net.URLClassLoader;
  
  import groovy.lang.GroovyClassLoader;
  import groovy.lang.GroovyRuntimeException;
  import org.codehaus.groovy.control.CompilationFailedException;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  
  /**
   * Scan Groovy files as well as Java files
   * <p/>
   * TODO: make it so that you can plug any Scripting scanner
   *
   * @author Emmanuel Bernard
   */
  public class GroovyComponentScanner extends ComponentScanner
  {
     private static final LogProvider log = Logging.getLogProvider(GroovyComponentScanner.class);
     private final String groovyFileExtension;
  
     public GroovyComponentScanner(String resourceName, String groovyFileExtension)
     {
        super(resourceName);
        this.groovyFileExtension = groovyFileExtension;
     }
  
     //has to be a GroovyClassLoader see #getURLsFromClassLoader
     public GroovyComponentScanner(String resourceName, GroovyClassLoader classLoader, String groovyFileExtension)
     {
        super(resourceName, classLoader);
        this.groovyFileExtension = groovyFileExtension;
     }
  
     protected URL[] getURLsFromClassLoader()
     {
        /*
         * a GroovyClassLoader accept no URL,
         * use the parent URL
         */
        return ( (URLClassLoader) classLoader.getParent() ).getURLs();
     }
  
     @Override
     protected void handleItem(String name)
     {
        //handle java classes
        super.handleItem(name);
  
        if (name.endsWith(groovyFileExtension))
        {
           log.debug("Found a groovy file: " + name);
           String classname = filenameToGroovyname(name);
           String filename = groovyComponentFilename(name);
           BufferedReader buffReader = null;
           try
           {
              InputStream stream = classLoader.getResourceAsStream(name);
              //TODO is BufferedInputStream necessary?
              buffReader = new BufferedReader(new InputStreamReader(stream));
              String line = buffReader.readLine();
              while (line != null)
              {
                 if (line.indexOf("@Name") != -1 || line.indexOf("@" + Name.class.getName()) != -1)
                 {
                    //possibly a Seam component
                    log.debug("Groovy file possibly a Seam component: " + name);
                    Class<Object> groovyClass = (Class<Object>) classLoader.loadClass(classname);
                    Install install = groovyClass.getAnnotation(Install.class);
                    boolean installable = ( install == null || install.value() )
                          && ( groovyClass.isAnnotationPresent(Name.class)
                             || classLoader.getResources(filename).hasMoreElements() );
                    if (installable)
                    {
                       log.debug("found groovy component class: " + name);
                       classes.add(groovyClass);
                    }
                    break;
                 }
                 line = buffReader.readLine();
              }
           }
           catch (ClassNotFoundException cnfe)
           {
              log.debug("could not load groovy class: " + classname, cnfe);
  
           }
           catch (NoClassDefFoundError ncdfe)
           {
              log.debug("could not load groovy class (missing dependency): " + classname, ncdfe);
  
           }
           catch (IOException ioe)
           {
              log.debug("could not load groovy file: " + classname, ioe);
           }
           catch( CompilationFailedException e) {
              log.info("Compilation error in Groovy file:" + classname, e);
           }
           catch(GroovyRuntimeException e) {
              log.info("Unknown error reading Groovy file:" + classname, e);
           }
           finally
           {
              if (buffReader != null) {
                 try
                 {
                    buffReader.close();
                 }
                 catch (IOException e)
                 {
                    log.trace("Could not close stream");
                 }
              }
           }
        }
     }
  
     public String filenameToGroovyname(String filename)
     {
        return filename.substring(0, filename.lastIndexOf(groovyFileExtension))
              .replace('/', '.').replace('\\', '.');
     }
  
     public String groovyComponentFilename(String name)
     {
        return name.substring(0, name.lastIndexOf(groovyFileExtension)) + ".component.xml";
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list