[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