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

Norman Richards norman.richards at jboss.com
Wed Nov 15 01:12:46 EST 2006


  User: nrichards
  Date: 06/11/15 01:12:46

  Modified:    src/main/org/jboss/seam/deployment    Scanner.java
  Added:       src/main/org/jboss/seam/deployment    ComponentScanner.java
                        NamespaceScanner.java
  Log:
  JBSEAM-502: add package namespaces for simplified xml configuration
  
  Revision  Changes    Path
  1.17      +19 -57    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.16
  retrieving revision 1.17
  diff -u -b -r1.16 -r1.17
  --- Scanner.java	14 Nov 2006 00:15:01 -0000	1.16
  +++ Scanner.java	15 Nov 2006 06:12:46 -0000	1.17
  @@ -1,4 +1,4 @@
  -//$Id: Scanner.java,v 1.16 2006/11/14 00:15:01 gavin Exp $
  +//$Id: Scanner.java,v 1.17 2006/11/15 06:12:46 nrichards Exp $
   package org.jboss.seam.deployment;
   
   import java.io.DataInputStream;
  @@ -22,13 +22,12 @@
   import org.apache.commons.logging.LogFactory;
   import org.jboss.seam.annotations.Name;
   
  -public class Scanner
  +public abstract class Scanner
   {
  -
      private static final Log log = LogFactory.getLog(Scanner.class);
   
  -   private String resourceName;
  -   private ClassLoader classLoader;
  +    protected  String resourceName;
  +    protected  ClassLoader classLoader;
      
      public Scanner(String resourceName)
      {
  @@ -47,12 +46,8 @@
               .replace('/', '.').replace('\\', '.');
      }
      
  -   /**
  -    * Returns only Seam components (ie: classes annotated with @Name)
  -    */
  -   public Set<Class<Object>> getClasses()
  -   {
  -      Set<Class<Object>> result = new HashSet<Class<Object>>();
  +
  +    protected void scan() {
         Enumeration<URL> urls;
         try
         {
  @@ -60,7 +55,7 @@
         }
         catch (IOException ioe) {
            log.warn("could not read: " + resourceName, ioe);
  -         return result;
  +         return;
         }
         
         while (urls.hasMoreElements())
  @@ -87,21 +82,21 @@
               File file = new File(urlPath);
               if ( file.isDirectory() )
               {
  -               handleDirectory(result, file, null);
  +               handleDirectory(file, null);
               }
               else
               {
  -               handleArchive(result, file);
  +               handleArchive(file);
               }
            }
            catch (IOException ioe) {
               log.warn("could not read entries", ioe);
            }
         }
  -      return result;
      }
   
  -   private void handleArchive(Set<Class<Object>> result, File file) throws ZipException, IOException
  +
  +   private void handleArchive(File file) throws ZipException, IOException
      {
         log.debug("archive: " + file);
         ZipFile zip = new ZipFile(file);
  @@ -111,11 +106,11 @@
            ZipEntry entry = entries.nextElement();
            String name = entry.getName();
            log.debug("found: " + name);
  -         handleItem(result, name);
  +         handleItem(name);
         }
      }
   
  -   private void handleDirectory(Set<Class<Object>> result, File file, String path)
  +   private void handleDirectory(File file, String path)
      {
         log.debug("directory: " + file);
         for ( File child: file.listFiles() )
  @@ -124,51 +119,18 @@
                     child.getName() : path + '/' + child.getName();
            if ( child.isDirectory() )
            {
  -            handleDirectory( result, child, newPath );
  +            handleDirectory(child, newPath);
            }
            else
            {
  -            handleItem( result, newPath );
  +            handleItem(newPath);
            }
         }
      }
   
  -   private void handleItem(Set<Class<Object>> result, String name)
  -   {
  -      if ( 
  -            name.endsWith(".class") && 
  -            !name.startsWith("org/jboss/seam/core") 
  -            && !name.startsWith("org/jboss/seam/persistence")
  -            && !name.startsWith("org/jboss/seam/debug")
  -            && !name.startsWith("org/jboss/seam/theme")
  -         )
  -      {
  -         String classname = filenameToClassname(name);
  -         String filename = Scanner.componentFilename(name);
  -         try
  -         {
  -            ClassFile classFile = getClassFile(name);
  -            if (  hasAnnotation(classFile, Name.class) || classLoader.getResources(filename).hasMoreElements() )
  -            {
  -               result.add( (Class<Object>) classLoader.loadClass(classname) );
  -            }
  -         }
  -         catch (ClassNotFoundException cnfe)
  -         {
  -            log.debug( "could not load class: " + classname, cnfe );
  -         }
  -         catch (NoClassDefFoundError ncdfe)
  -         {
  -            log.debug( "could not load class (missing dependency): " + classname, ncdfe );
  -         }
  -         catch (IOException ioe)
  -         {
  -            log.debug( "could not load classfile: " + classname, ioe );
  -         }
  -      }
  -   }
  +   abstract void handleItem(String name);
   
  -   private ClassFile getClassFile(String name) throws IOException 
  +   protected ClassFile getClassFile(String name) throws IOException 
      {
         InputStream stream = classLoader.getResourceAsStream(name);
         DataInputStream dstream = new DataInputStream(stream); 
  @@ -184,7 +146,7 @@
         }
      }
      
  -   private boolean hasAnnotation(ClassFile cf, Class<? extends Annotation> annotationType)
  +   protected boolean hasAnnotation(ClassFile cf, Class<? extends Annotation> annotationType)
      { 
         AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute( AnnotationsAttribute.visibleTag ); 
         if ( visible != null ) 
  
  
  
  1.1      date: 2006/11/15 06:12:46;  author: nrichards;  state: Exp;jboss-seam/src/main/org/jboss/seam/deployment/ComponentScanner.java
  
  Index: ComponentScanner.java
  ===================================================================
  package org.jboss.seam.deployment;
  
  import org.jboss.seam.annotations.Name;
  
  import java.io.IOException;
  import java.util.HashSet;
  import java.util.Set;
  
  import javassist.bytecode.ClassFile;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  public class ComponentScanner
      extends Scanner 
  {
      private static final Log log = LogFactory.getLog(ComponentScanner.class);
  
      private Set<Class<Object>> classes;
      
      public ComponentScanner(String resourceName)
      {
          super(resourceName);
      }
      
      public ComponentScanner(String resourceName, ClassLoader classLoader)
      {
          super(resourceName,classLoader);
      }
      
      /**
       * Returns only Seam components (ie: classes annotated with @Name)
       */
      public Set<Class<Object>> getClasses()
      {
          if (classes == null) {
              classes = new HashSet<Class<Object>>();
              scan();
          } 
          return classes;
      }
  
      protected void handleItem(String name)
      {
          if (name.endsWith(".class") && 
              !name.startsWith("org/jboss/seam/core") &&
              !name.startsWith("org/jboss/seam/persistence") &&
              !name.startsWith("org/jboss/seam/debug") &&
              !name.startsWith("org/jboss/seam/theme"))
          {
              String classname = filenameToClassname(name);
              String filename = Scanner.componentFilename(name);
              try {
                  ClassFile classFile = getClassFile(name);
                  if (hasAnnotation(classFile, Name.class) || 
                      classLoader.getResources(filename).hasMoreElements() ) 
                  {
                      classes.add( (Class<Object>) classLoader.loadClass(classname) );
                  }
              } catch (ClassNotFoundException cnfe) {
                  log.debug( "could not load class: " + classname, cnfe );
  
              } catch (NoClassDefFoundError ncdfe) {
                  log.debug( "could not load class (missing dependency): " + classname, ncdfe );
  
              } catch (IOException ioe) {
                  log.debug( "could not load classfile: " + classname, ioe );
              }
          }
      }
  
  
      
  }
  
  
  
  1.1      date: 2006/11/15 06:12:46;  author: nrichards;  state: Exp;jboss-seam/src/main/org/jboss/seam/deployment/NamespaceScanner.java
  
  Index: NamespaceScanner.java
  ===================================================================
  package org.jboss.seam.deployment;
  
  import org.jboss.seam.annotations.Namespace;
  
  import java.io.IOException;
  import java.util.HashSet;
  import java.util.Set;
  
  import javassist.bytecode.ClassFile;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  public class NamespaceScanner
      extends Scanner 
  {
      private static final Log log = LogFactory.getLog(NamespaceScanner.class);
  
      private Set<Package> packages;
      
      public NamespaceScanner(String resourceName)
      {
          super(resourceName);
      }
      
      public NamespaceScanner(String resourceName, ClassLoader classLoader)
      {
          super(resourceName,classLoader);
      }
      
      /**
       * Returns packages with @Namespace declarations
       */
      public Set<Package> getPackages()
      {
          if (packages == null) {
              packages = new HashSet<Package>();
              scan();
          } 
          return packages;
      }
  
      public static String filenameToPackageName(String filename)
      {
          return filename.substring(0, filename.lastIndexOf("/package-info.class"))
              .replace('/', '.').replace('\\', '.');
      }
      
      protected void handleItem(String name)
      {
          if (name.endsWith("/package-info.class")) {
              String packageName = filenameToPackageName(name);
              // XXX - can't get package info from a classloader directly?
              Package pkg = Package.getPackage(packageName);
              if (pkg.getAnnotation(Namespace.class) != null) {
                  packages.add(pkg);
              }
          }
      }
  
  
      
  }
  
  
  



More information about the jboss-cvs-commits mailing list