
org.objectweb.jonas.ant.GenICTask Maven / Gradle / Ivy
The newest version!
/**
* JOnAS: Java(TM) Open Application Server
* Copyright (C) 2005 Bull S.A.
* Contact: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* --------------------------------------------------------------------------
* $Id: GenICTask.java 10521 2007-06-04 15:30:13Z sauthieg $
* --------------------------------------------------------------------------
*/
package org.objectweb.jonas.ant;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
/**
* GenIC Task. That's basically an Ant Task wrapper around GenIC.
*
* @author Guillaume Sauthier
*/
public class GenICTask extends BootstrapTask {
/** WsGen class name */
private static final String GENIC_CLASS = "org.objectweb.jonas_ejb.genic.GenIC";
/** validation of XML files ? */
private boolean validation = true;
/** name of javac command */
private String javac = null;
/** list of javac options */
private String javacOpts = null;
/** will WsGen keep already generated files ? */
private boolean keepGen = false;
/**
* specifies which RMIC compiler to user: the built-in one or the external
* one
*/
private boolean noFastRMIC = false;
/** protocol list */
private String protocols = null;
/** nocompil */
private boolean nocompil = false;
/** Invoke Javac with tools.jar */
private boolean invokeCmd = false;
/** Options for rmic compiler */
private String rmicOpts = null;
/** extra arguments to be passed to GenIC */
private String additionalArgs = null;
/** verbose mode */
private boolean verbose = false;
/** additionnal classpath for libs */
private Path libraryClasspath = null;
/** inner FileSet list */
private List filesets = new ArrayList();
/** debug field */
private boolean debug = false;
/**
* @return Returns an empty Path for inner element classpath
*/
public Path createClasspath() {
libraryClasspath = new Path(getProject());
return libraryClasspath;
}
/**
* @return Returns an empty FileSet
*/
public FileSet createFileSet() {
FileSet set = new FileSet();
set.setProject(getProject());
filesets.add(set);
return set;
}
/**
* Set additional arguments for GenIC command line
* @param added additional args
*/
public void setAdditionalargs(String added) {
additionalArgs = added;
}
/**
* Set verbose mode on/off
* @param v boolean
*/
public void setVerbose(boolean v) {
verbose = v;
}
/**
* Set debug mode on/off. Used only by developpers that wants to Debug GenIC
* @param d boolean
*/
public void setJvmdebug(boolean d) {
debug = d;
}
/**
* Use InvokeCmd option on/off
* @param inv boolean
*/
public void setInvokecmd(boolean inv) {
invokeCmd = inv;
}
/**
* Do not compile generated java files
* @param noc on/off
*/
public void setNocompil(boolean noc) {
nocompil = noc;
}
/**
* Set the optios to be passed to the RMI compiler
* @param opts list of options
*/
public void setRmicopts(String opts) {
rmicOpts = opts;
}
/**
* Validate XML descriptors
* @param v on/off
*/
public void setValidation(boolean v) {
validation = v;
}
/**
* Set the javac command line to be used
* @param j path to javac executable
*/
public void setJavac(String j) {
javac = j;
}
/**
* Set the options to be given to javac
* @param opts options
*/
public void setJavacopts(String opts) {
javacOpts = opts;
}
/**
* Keep already generated files
* @param k on/off
*/
public void setKeepgenerated(boolean k) {
keepGen = k;
}
/**
* Specifies which RMIC compiler to use: the built-in fast one or the
* slower external one.
* @param value if true, use the external RMIC compiler
*/
public void setNoFastRMIC(boolean value) {
noFastRMIC = value;
}
/**
* Set the set of protocols for the generation
* @param p protocol list (comma separated)
*/
public void setProtocols(String p) {
protocols = p;
}
/**
* Execute the WsGen Ant Task.
* @throws BuildException if something goes wrong
*/
public void execute() throws BuildException {
// avoid a -n jonas in the GenIC command line
setServerName(null);
for (Iterator fsIterator = filesets.iterator(); fsIterator.hasNext();) {
FileSet set = (FileSet) fsIterator.next();
DirectoryScanner ds = set.getDirectoryScanner(getProject());
ds.scan();
String[] files = ds.getIncludedFiles();
File srcDirectory = set.getDir(getProject());
for (int i = 0; i < files.length; i++) {
Java genic = getBootstraptask(GENIC_CLASS);
configureGenIC(genic, srcDirectory + File.separator + files[i]);
// calling GenIC task
log("Calling GenIC task for '" + srcDirectory + File.separator + files[i] + "'.", Project.MSG_VERBOSE);
if (genic.executeJava() != 0) {
throw new BuildException("GenIC reported an error.");
}
}
}
}
/**
* @param genicJavaTask GenIC Task to be configured for GenIC
* @param filename name of the file to pass into GenIC
* @return a configured Java Task
* @throws BuildException if something goes wrong
*/
private Java configureGenIC(Java genicJavaTask, String filename) throws BuildException {
// keepgenerated
if (keepGen) {
genicJavaTask.createArg().setValue("-keepgenerated");
}
if (noFastRMIC) {
genicJavaTask.createArg().setValue("-nofastrmic");
}
// novalidation
if (!validation) {
genicJavaTask.createArg().setValue("-novalidation");
}
// classpath
if (libraryClasspath != null) {
genicJavaTask.createArg().setValue("-classpath");
genicJavaTask.createArg().setPath(libraryClasspath);
}
// nocompil
if (nocompil) {
genicJavaTask.createArg().setValue("-nocompil");
}
// invokecmd
if (invokeCmd) {
genicJavaTask.createArg().setValue("-invokecmd");
}
// javac
if (javac != null) {
genicJavaTask.createArg().setValue("-javac");
genicJavaTask.createArg().setLine(javac);
}
// javacopts
if (javacOpts != null && !javacOpts.equals("")) {
genicJavaTask.createArg().setValue("-javacopts");
genicJavaTask.createArg().setLine(javacOpts);
}
// rmicopts
if (rmicOpts != null && !rmicOpts.equals("")) {
genicJavaTask.createArg().setValue("-rmicopts");
genicJavaTask.createArg().setValue(rmicOpts);
}
// verbose
if (verbose) {
genicJavaTask.createArg().setValue("-verbose");
}
// debug
if (debug) {
this.log("Launching in debug mode on port 12345, waiting for connection ...", Project.MSG_INFO);
genicJavaTask.createJvmarg().setLine("-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=12345,suspend=y");
}
// additionalargs
if (additionalArgs != null) {
genicJavaTask.createArg().setLine(additionalArgs);
}
// protocols
if (protocols != null) {
genicJavaTask.createArg().setValue("-protocols");
genicJavaTask.createArg().setValue(protocols);
}
// input file to process by GenIC
genicJavaTask.createArg().setValue(filename);
return genicJavaTask;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy