diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java new file mode 100644 index 00000000..dd46269d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java @@ -0,0 +1,313 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +package org.apache.tools.ant.taskdefs.optional.ejb; + +import java.io.File; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.ExecTask; +import org.apache.tools.ant.taskdefs.Java; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Reference; + +/** + * Generates a Borland Application Server 4.5 client JAR using as + * input the EJB JAR file. + * + * Two mode are available: java mode (default) and fork mode. With the fork mode, + * it is impossible to add classpath to the command line. + * + * @ant.task name="blgenclient" category="ejb" + */ +public class BorlandGenerateClient extends Task { + static final String JAVA_MODE = "java"; + static final String FORK_MODE = "fork"; + + // CheckStyle:VisibilityModifier OFF - bc + /** debug the generateclient task */ + boolean debug = false; + + /** hold the ejbjar file name */ + File ejbjarfile = null; + + /** hold the client jar file name */ + File clientjarfile = null; + + /** hold the classpath */ + Path classpath; + + /** hold the mode (java|fork) */ + String mode = FORK_MODE; + + /** hold the version */ + int version = BorlandDeploymentTool.BAS; + // CheckStyle:VisibilityModifier ON + + /** + * Set the version attribute. + * @param version the value to use. + */ + public void setVersion(int version) { + this.version = version; + } + + /** + * Command launching mode: java or fork. + * @param s the mode to use. + */ + public void setMode(String s) { + mode = s; + } + + /** + * If true, turn on the debug mode for each of the Borland tools launched. + * @param debug a <code>boolean</code> value. + */ + public void setDebug(boolean debug) { + this.debug = debug; + } + + /** + * EJB JAR file. + * @param ejbfile the file to use. + */ + public void setEjbjar(File ejbfile) { + ejbjarfile = ejbfile; + } + + /** + * Client JAR file name. + * @param clientjar the file to use. + */ + public void setClientjar(File clientjar) { + clientjarfile = clientjar; + } + + /** + * Path to use for classpath. + * @param classpath the path to use. + */ + public void setClasspath(Path classpath) { + if (this.classpath == null) { + this.classpath = classpath; + } else { + this.classpath.append(classpath); + } + } + + /** + * Adds path to the classpath. + * @return a path to be configured as a nested element. + */ + public Path createClasspath() { + if (this.classpath == null) { + this.classpath = new Path(getProject()); + } + return this.classpath.createPath(); + } + + /** + * Reference to existing path, to use as a classpath. + * @param r the reference to use. + */ + public void setClasspathRef(Reference r) { + createClasspath().setRefid(r); + } + + + /** + * Do the work. + * + * The work is actually done by creating a separate JVM to run a java task. + * + * @exception BuildException if something goes wrong with the build + */ + public void execute() throws BuildException { + if (ejbjarfile == null || ejbjarfile.isDirectory()) { + throw new BuildException("invalid ejb jar file."); + } + + if (clientjarfile == null || clientjarfile.isDirectory()) { + log("invalid or missing client jar file.", Project.MSG_VERBOSE); + String ejbjarname = ejbjarfile.getAbsolutePath(); + //clientname = ejbjarfile+client.jar + String clientname = ejbjarname.substring(0, ejbjarname.lastIndexOf(".")); + clientname = clientname + "client.jar"; + clientjarfile = new File(clientname); + } + + if (mode == null) { + log("mode is null default mode is java"); + setMode(JAVA_MODE); + } + + if (!(version == BorlandDeploymentTool.BES + || version == BorlandDeploymentTool.BAS)) { + throw new BuildException("version " + version + + " is not supported"); + } + + log("client jar file is " + clientjarfile); + + if (mode.equalsIgnoreCase(FORK_MODE)) { + executeFork(); + } else { + executeJava(); + } // end of else + } + + /** + * launch the generate client using java api. + * @throws BuildException if there is an error. + */ + protected void executeJava() throws BuildException { + try { + if (version == BorlandDeploymentTool.BES) { + throw new BuildException("java mode is supported only for " + + "previous version <=" + BorlandDeploymentTool.BAS); + } + + log("mode : java"); + + Java execTask = null; + execTask = new Java(this); + + execTask.setDir(new File(".")); + execTask.setClassname("com.inprise.server.commandline.EJBUtilities"); + //classpath + //add at the end of the classpath + //the system classpath in order to find the tools.jar file + execTask.setClasspath(classpath.concatSystemClasspath()); + + execTask.setFork(true); + execTask.createArg().setValue("generateclient"); + if (debug) { + execTask.createArg().setValue("-trace"); + } + + execTask.createArg().setValue("-short"); + execTask.createArg().setValue("-jarfile"); + // ejb jar file + execTask.createArg().setValue(ejbjarfile.getAbsolutePath()); + //client jar file + execTask.createArg().setValue("-single"); + execTask.createArg().setValue("-clientjarfile"); + execTask.createArg().setValue(clientjarfile.getAbsolutePath()); + + log("Calling EJBUtilities", Project.MSG_VERBOSE); + execTask.execute(); + + } catch (Exception e) { + // Have to catch this because of the semantics of calling main() + String msg = "Exception while calling generateclient Details: " + e.toString(); + throw new BuildException(msg, e); + } + } + + /** + * launch the generate client using system api. + * @throws BuildException if there is an error. + */ + protected void executeFork() throws BuildException { + if (version == BorlandDeploymentTool.BAS) { + executeForkV4(); + } + if (version == BorlandDeploymentTool.BES) { + executeForkV5(); + } + } + + /** + * launch the generate client using system api. + * @throws BuildException if there is an error. + */ + protected void executeForkV4() throws BuildException { + try { + + log("mode : fork " + BorlandDeploymentTool.BAS, Project.MSG_DEBUG); + + ExecTask execTask = new ExecTask(this); + + execTask.setDir(new File(".")); + execTask.setExecutable("iastool"); + execTask.createArg().setValue("generateclient"); + if (debug) { + execTask.createArg().setValue("-trace"); + } + + execTask.createArg().setValue("-short"); + execTask.createArg().setValue("-jarfile"); + // ejb jar file + execTask.createArg().setValue(ejbjarfile.getAbsolutePath()); + //client jar file + execTask.createArg().setValue("-single"); + execTask.createArg().setValue("-clientjarfile"); + execTask.createArg().setValue(clientjarfile.getAbsolutePath()); + + log("Calling iastool", Project.MSG_VERBOSE); + execTask.execute(); + } catch (Exception e) { + // Have to catch this because of the semantics of calling main() + String msg = "Exception while calling generateclient Details: " + + e.toString(); + throw new BuildException(msg, e); + } + + } + + /** + * launch the generate client using system api. + * @throws BuildException if there is an error. + */ + protected void executeForkV5() throws BuildException { + try { + log("mode : fork " + BorlandDeploymentTool.BES, Project.MSG_DEBUG); + ExecTask execTask = new ExecTask(this); + + execTask.setDir(new File(".")); + + execTask.setExecutable("iastool"); + if (debug) { + execTask.createArg().setValue("-debug"); + } + execTask.createArg().setValue("-genclient"); + execTask.createArg().setValue("-jars"); + // ejb jar file + execTask.createArg().setValue(ejbjarfile.getAbsolutePath()); + //client jar file + execTask.createArg().setValue("-target"); + execTask.createArg().setValue(clientjarfile.getAbsolutePath()); + //classpath + execTask.createArg().setValue("-cp"); + execTask.createArg().setValue(classpath.toString()); + log("Calling iastool", Project.MSG_VERBOSE); + execTask.execute(); + } catch (Exception e) { + // Have to catch this because of the semantics of calling main() + String msg = "Exception while calling generateclient Details: " + + e.toString(); + throw new BuildException(msg, e); + } + + } + +} |