maguro      2004/11/09 23:38:31

  Modified:    modules/core/src/java/org/openejb/corba/compiler
                        AntCompiler.java Compiler.java
                        OpenORBSkeletonGenerator.java
                        SkeletonGenerator.java
  Log:

  Next step in CORBA skeleton generation.
  
  Revision  Changes    Path
  1.2       +37 -15    
openejb/modules/core/src/java/org/openejb/corba/compiler/AntCompiler.java
  
  Index: AntCompiler.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/AntCompiler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AntCompiler.java  5 Nov 2004 23:46:13 -0000       1.1
  +++ AntCompiler.java  10 Nov 2004 04:38:31 -0000      1.2
  @@ -45,6 +45,10 @@
   package org.openejb.corba.compiler;
   
   import java.io.File;
  +import java.net.URI;
  +import java.net.URISyntaxException;
  +import java.util.Iterator;
  +import java.util.Set;
   
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.taskdefs.Javac;
  @@ -55,27 +59,45 @@
   
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
  -public class AntCompiler extends Compiler {
  +public class AntCompiler implements Compiler {
   
  -    public void compileDirectory(File source, File destination) throws 
CompilerException {
  -        Project project = new Project();
  -        Path path = new Path(project);
  -        path.setLocation(source);
  -        Javac javac = new Javac();
  -        javac.setProject(project);
  -        javac.setSrcdir(path);
  -        javac.setDestdir(destination);
  -        javac.execute();
  +    public void compileDirectory(File srcDirectory, File destDirectory, Set 
classpaths) throws CompilerException {
  +        try {
  +            Project project = new Project();
  +
  +            Path path = new Path(project);
  +            path.setLocation(srcDirectory);
  +
  +            Javac javac = new Javac();
  +            javac.setProject(project);
  +            javac.setSrcdir(path);
  +            javac.setDestdir(destDirectory);
  +            javac.setFork(false);
  +
  +            for (Iterator iter = classpaths.iterator(); iter.hasNext();) {
  +                path = new Path(project);
  +                path.setLocation(new File(new URI(iter.next().toString())));
  +                if (javac.getClasspath() == null) {
  +                    javac.setClasspath(path);
  +                } else {
  +                    javac.getClasspath().addExisting(path);
  +                }
  +            }
  +
  +            javac.execute();
  +        } catch (URISyntaxException e) {
  +            throw new CompilerException(e);
  +        }
       }
   
       public static final GBeanInfo GBEAN_INFO;
   
       static {
  -        GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(AntCompiler.class, Compiler.GBEAN_INFO);
  +        GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(AntCompiler.class);
  +
  +        infoFactory.addInterface(Compiler.class);
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  
  1.2       +6 -20     
openejb/modules/core/src/java/org/openejb/corba/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/Compiler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Compiler.java     5 Nov 2004 23:46:13 -0000       1.1
  +++ Compiler.java     10 Nov 2004 04:38:31 -0000      1.2
  @@ -45,30 +45,16 @@
   package org.openejb.corba.compiler;
   
   import java.io.File;
  +import java.util.Set;
   
  -import org.apache.geronimo.gbean.GBeanInfo;
  -import org.apache.geronimo.gbean.GBeanInfoBuilder;
   
   /**
  - *
  + * Interface used to wrap compiler implementations.
    *
    * @version $Revision$ $Date$
    */
  -public abstract class Compiler {
  -
  -    abstract void compileDirectory(File source, File destination) throws 
CompilerException;
  -
  -    public static final GBeanInfo GBEAN_INFO;
  -
  -    static {
  -        GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(Compiler.class);
  -
  -        infoFactory.addOperation("compileDirectory", new Class[]{File.class, 
File.class});
  +public interface Compiler {
   
  -        GBEAN_INFO = infoFactory.getBeanInfo();
  -    }
  +    void compileDirectory(File srcDirectory, File destDirectory, Set 
classPaths) throws CompilerException;
   
  -    public static GBeanInfo getGBeanInfo() {
  -        return GBEAN_INFO;
  -    }
   }
  
  
  
  1.2       +64 -24    
openejb/modules/core/src/java/org/openejb/corba/compiler/OpenORBSkeletonGenerator.java
  
  Index: OpenORBSkeletonGenerator.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/OpenORBSkeletonGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- OpenORBSkeletonGenerator.java     5 Nov 2004 23:46:13 -0000       1.1
  +++ OpenORBSkeletonGenerator.java     10 Nov 2004 04:38:31 -0000      1.2
  @@ -44,12 +44,13 @@
    */
   package org.openejb.corba.compiler;
   
  +import javax.ejb.EJBHome;
   import java.io.File;
  +import java.net.URL;
  +import java.util.HashSet;
  +import java.util.Set;
  +import java.util.Iterator;
   
  -import org.apache.commons.logging.Log;
  -import org.apache.commons.logging.LogFactory;
  -import org.apache.tools.ant.Project;
  -import org.apache.tools.ant.taskdefs.Jar;
   import org.openorb.compiler.CompilerHost;
   import org.openorb.compiler.object.IdlObject;
   import org.openorb.compiler.object.IdlRoot;
  @@ -57,25 +58,36 @@
   import org.openorb.compiler.rmi.RmiCompilerProperties;
   import org.openorb.compiler.rmi.generator.Javatoidl;
   import org.openorb.compiler.rmi.parser.JavaParser;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.taskdefs.Jar;
   
   import org.apache.geronimo.deployment.util.DeploymentUtil;
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
   import org.apache.geronimo.gbean.GBeanLifecycle;
   import org.apache.geronimo.gbean.WaitingException;
  +import org.apache.geronimo.system.main.ToolsJarHack;
  +
  +import org.openejb.util.JarUtils;
   
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class OpenORBSkeletonGenerator extends SkeletonGenerator implements 
GBeanLifecycle, CompilerHost {
  +
       private static Log log = 
LogFactory.getLog(OpenORBSkeletonGenerator.class);
   
  +    private final ClassLoader classLoader;
       private boolean verbose;
       private Compiler compiler;
   
  +    public OpenORBSkeletonGenerator(ClassLoader classLoader) {
  +        this.classLoader = classLoader;
  +    }
  +
       public boolean isVerbose() {
           return verbose;
       }
  @@ -92,19 +104,24 @@
           this.compiler = compiler;
       }
   
  -    public void generateSkeleton(Class iface, File destination) throws 
CompilerException {
  +    public void generateSkeletons(Set interfaces, File destination, 
ClassLoader cl) throws CompilerException {
  +        ClassLoader savedLoader = 
Thread.currentThread().getContextClassLoader();
           File TEMPDIR = null;
           try {
  +            Thread.currentThread().setContextClassLoader(classLoader);
  +
  +
               TEMPDIR = DeploymentUtil.createTempDir();
  -            File IDLDIR = new File(TEMPDIR, "IDL");
  +            File SRCDIR = new File(TEMPDIR, "JAVA");
               File CLASSESDIR = new File(TEMPDIR, "classes");
  -            IDLDIR.mkdirs();
  +            SRCDIR.mkdirs();
               CLASSESDIR.mkdirs();
   
               RmiCompilerProperties rcp = new RmiCompilerProperties();
  -            rcp.setClassloader(getClass().getClassLoader());
  +            rcp.setClassloader(cl);
               rcp.setM_verbose(verbose);
  -            rcp.setM_destdir(IDLDIR);
  +            rcp.setM_destdir(SRCDIR);
  +            rcp.getM_includeList().add(new 
URL("resource:/org/openorb/idl/"));
               Configurator configurator = new Configurator(new String[0], 
getProps());
               JavaParser parser = new JavaParser(rcp, this, null, null, null);
   
  @@ -112,35 +129,52 @@
               parser.add_idl_files(rcp.getIncludedFiles(), 
rcp.getM_includeList());
               int start = parser.getCompilationTree().size();
   
  -            parser.parse_class(iface);
  +            Set set = new HashSet();
  +            for (Iterator iter = interfaces.iterator(); iter.hasNext();) {
  +                Class iface = cl.loadClass((String) iter.next());
  +
  +                parser.parse_class(iface);
  +
  +                IdlObject compilationGraph = parser.getIdlTreeRoot();
  +                Javatoidl toIDL = new Javatoidl(rcp, this);
  +                int end = parser.getCompilationTree().size();
  +                for (int i = start; i < end; i++) {
  +                    toIDL.translateRMITie((IdlRoot) 
parser.getCompilationTree().get(i));
  +                }
  +                toIDL.translateRMITie(compilationGraph);
   
  -            IdlObject compilationGraph = parser.getIdlTreeRoot();
  -            Javatoidl toIDL = new Javatoidl(rcp, this);
  +                start = end;
   
  -            // -------------
  -            // map tie class
  -            // -------------
  -            int end = parser.getCompilationTree().size();
  -            for (int i = start; i < end; i++) {
  -                toIDL.translateRMITie((IdlRoot) 
parser.getCompilationTree().get(i));
  +                collectClasspaths(set, iface);
               }
  -            toIDL.translateRMITie(compilationGraph);
  +            collectClasspaths(set, EJBHome.class);
   
  -            compiler.compileDirectory(IDLDIR, CLASSESDIR);
  +            compiler.compileDirectory(SRCDIR, CLASSESDIR, set);
   
               Project project = new Project();
               Jar jar = new Jar();
               jar.setProject(project);
               jar.setDestFile(destination);
               jar.setBasedir(CLASSESDIR);
  +            jar.setUpdate(true);
               jar.execute();
           } catch (Exception e) {
               throw new CompilerException(e);
           } finally {
  +            Thread.currentThread().setContextClassLoader(savedLoader);
               DeploymentUtil.recursiveDelete(TEMPDIR);
           }
       }
   
  +    protected void collectClasspaths(Set set, Class iface) throws 
CompilerException {
  +        set.add(iface.getProtectionDomain().getCodeSource().getLocation());
  +
  +        Class[] classes = iface.getDeclaredClasses();
  +        for (int i = 0; i < classes.length; i++) {
  +            collectClasspaths(set, classes[i]);
  +        }
  +    }
  +
       public void doStart() throws WaitingException, Exception {
           if (compiler == null) {
               compiler = new AntCompiler();
  @@ -156,9 +190,15 @@
       public static final GBeanInfo GBEAN_INFO;
   
       static {
  +        JarUtils.setHandlerSystemProperty();
  +        // Install the lame tools jar hack
  +        ToolsJarHack.install();
  +
           GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(OpenORBSkeletonGenerator.class, SkeletonGenerator.GBEAN_INFO);
           infoFactory.addAttribute("verbose", Boolean.TYPE, true);
           infoFactory.addReference("Compiler", Compiler.class);
  +        infoFactory.addAttribute("classLoader", ClassLoader.class, false);
  +        infoFactory.setConstructor(new String[]{"classLoader"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  
  1.2       +5 -3      
openejb/modules/core/src/java/org/openejb/corba/compiler/SkeletonGenerator.java
  
  Index: SkeletonGenerator.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/SkeletonGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SkeletonGenerator.java    5 Nov 2004 23:46:13 -0000       1.1
  +++ SkeletonGenerator.java    10 Nov 2004 04:38:31 -0000      1.2
  @@ -46,6 +46,7 @@
   
   import java.io.File;
   import java.util.Properties;
  +import java.util.Set;
   
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
  @@ -67,7 +68,7 @@
           this.props = props;
       }
   
  -    public abstract void generateSkeleton(Class iface, File destination) 
throws CompilerException;
  +    public abstract void generateSkeletons(Set interfaces, File destination, 
ClassLoader cl) throws CompilerException;
   
       public static final GBeanInfo GBEAN_INFO;
   
  @@ -75,6 +76,7 @@
           GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(SkeletonGenerator.class);
   
           infoFactory.addAttribute("props", Properties.class, true);
  +        infoFactory.addOperation("generateSkeletons", new Class[] 
{Set.class, File.class, ClassLoader.class});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  

Reply via email to