diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/AbstractEjbHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/AbstractEjbHotDeploymentTool.java new file mode 100644 index 000000000..83c4ba7cf --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/AbstractEjbHotDeploymentTool.java @@ -0,0 +1,158 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.taskdefs.optional.ejb; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; + +/** + * Abstract class to support vendor-specific hot deployment tools. + * This class will validate boilerplate attributes. + * + * Subclassing this class for a vendor specific tool involves the + * following. + *
    + *
  1. Implement the getClassName() method to supply the + * super-task class name of the vendor specific deployment tool to run. + *
  2. Implement the getArguments() method to supply the + * super-task the command line to pass for the vendor specific deployment + * tool. + *
  3. Implement the isActionValid() method to insure the + * action supplied as the "action" attribute of EjbDeploy is valid. + *
  4. Implement the validateAttributes() method to insure + * all required attributes are supplied, and are in the correct format. + *
  5. Add a create<TOOL> method to the EjbDeploy + * class. This method will be called when Ant encounters a + * create<TOOL> task nested in the + * ejbdeploy task. + * + * @author Christopher A. Longo - cal@cloud9.net + * + * @see EjbHotDeploymentTool + * @see EjbDeploy + */ +public abstract class AbstractEjbHotDeploymentTool + extends Task + implements EjbHotDeploymentTool +{ + /** The super-task **/ + private EjbDeploy deploy; + + /** + * Constructor. + * @param deploy The super-task which wraps this one. + */ + public AbstractEjbHotDeploymentTool(EjbDeploy deploy) { + this.deploy = deploy; + } + + /** + * Returns the class name of the weblogic.deploy tool to the super-task. + *

    This is called by the super-task, EjbDeploy. + *

    Subclasses should return the fully qualified class name of the + * vendor tool to run. IE: "com.foobar.tools.DeployTool" + * @return A String representing the classname of the deployment tool to run + */ + public abstract String getClassName(); + + /** + * Returns a String containing the runtime commandline arguments + * of the deployment tool. + *

    Subclasses should return the appropriate string from that + * vendor's tool. IE: "-url=http://myserver:31337 -user=foo -passsword=bar" + * @return a String containing the runtime commandline arguments + * of the deployment tool. + */ + public abstract String getArguments(); + + /** + * Validates the passed in attributes. + * Subclasses should chain to this super-method to insure + * validation of boilerplate attributes. + *

    Only the "action" and "password" attributes are required in the + * base class. Subclasses should check attributes accordingly. + * @exception BuildException if the attributes are invalid or incomplete + */ + public void validateAttributes() throws BuildException { + String action = deploy.getAction(); + + if(action == null) + throw new BuildException("The \"action\" attribute must be set"); + + if(!isActionValid()) + throw new BuildException("Invalid action \"" + action + "\" passed"); + + if(deploy.getPassword() == null) + throw new BuildException("The WebLogic system password must be set"); + } + + /** + * Determines if the "action" attribute defines a valid action. + *

    Subclasses should determine if the action passed in is + * supported by the vendor's deployment tool. + *

    Actions may by "deploy", "delete", etc... It all depends + * on the tool. + * @return true if the "action" attribute is valid, false if not. + */ + protected abstract boolean isActionValid(); + + /** + * Returns the super-task. + * @return An EjbDeploy object representing the super-task. + */ + protected EjbDeploy getDeploy() { + return deploy; + } +} diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbDeploy.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbDeploy.java new file mode 100644 index 000000000..ffefcaa7d --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbDeploy.java @@ -0,0 +1,263 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.taskdefs.optional.ejb; + +import java.io.File; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Java; +import org.apache.tools.ant.types.Path; + +/** + * A task to support "hot" deployment tools for J2EE servers. + * + * This class is used as a framework for the creation of vendor specific + * "hot" deployment tools. + * + * @author Christopher A. Longo - cal@cloud9.net + * + * @see EjbHotDeploymentTool + * @see AbstractEjbHotDeploymentTool + * @see WebLogicHotDeploymentTool + */ +public class EjbDeploy extends Task +{ + /** The action to be performed. IE: "deploy", "delete", etc... **/ + private String action; + + /** The classpath passed to the JVM on execution. **/ + private Path classpath; + + /** The username for the deployment server. **/ + private String userName; + + /** The password for the deployment server. **/ + private String password; + + /** The URL of the deployment server **/ + private String serverUrl; + + /** The source (fully-qualified path) to the component being deployed **/ + private File source; + + /** The vendor specific tool for deploying the component **/ + private EjbHotDeploymentTool vendorTool; + + /** + * Creates a classpath. Used to handle the nested classpath + * element. + * @return A Path object representing the classpath to be used. + */ + public Path createClasspath() { + if(classpath == null) + classpath = new Path(project); + + return classpath.createPath(); + } + + /////////////////////////////////////////////////////////////////////////// + // + // Place vendor specific tool creations here. + // + /////////////////////////////////////////////////////////////////////////// + + /** + * Creates a WebLogic deployment tool, for deployment to WebLogic servers. + *

    Ant calls this method on creation to handle embedded "weblogic" tags + * in the EjbDeploy task. + * @return An instance of WebLogicHotDeployment tool. + */ + public WebLogicHotDeploymentTool createWeblogic() { + WebLogicHotDeploymentTool weblogic = new WebLogicHotDeploymentTool(this); + vendorTool = (EjbHotDeploymentTool)weblogic; + return weblogic; + } + + /** + * Execute the task. + *

    This will fork a JVM and run the vendor-specific deployment tool. + * The process will fail if the tool returns an error. + * @exception BuildException if the attributes are invalid or incomplete + */ + public void execute() throws BuildException { + if (vendorTool == null) { + throw new BuildException("No vendor tool specified"); + } + + vendorTool.validateAttributes(); + + Java deploy = (Java)project.createTask("java"); + deploy.setFork(true); + deploy.setFailonerror(true); + deploy.setClasspath(classpath); + + deploy.setClassname(vendorTool.getClassName()); + deploy.createArg().setLine(vendorTool.getArguments()); + deploy.execute(); + + deploy = null; + } + + /////////////////////////////////////////////////////////////////////////// + // + // Set/get methods + // + /////////////////////////////////////////////////////////////////////////// + + /** + * Returns the action field. + * @return A string representing the "action" attribute. + */ + public String getAction() { + return action; + } + + /** + * Sets the action field. + * This is a required attribute. + * @param action A String representing the "action" attribute. + */ + public void setAction(String action) { + this.action = action; + } + + /** + * gets the classpath field. + * @return A Path representing the "classpath" attribute. + */ + public Path getClasspath() { + return classpath; + } + + /** + * Sets the classpath field. + * This is not a required attribute. + * @param classpath A Path object representing the "classpath" attribute. + */ + public void setClasspath(Path classpath) { + this.classpath = classpath; + } + + /** + * Returns the userName field. + * @return A String representing the "userName" attribute. + */ + public String getUserName() { + return userName; + } + + /** + * Sets the userName field. + * This is not a required attribute. + * @param userName A String representing the "userName" attribute. + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * Returns the password field. + * @return A String representing the "password" attribute. + */ + public String getPassword() { + return password; + } + + /** + * Set the password field. + * This is a required attribute. + * @param A String representing the "password" attribute. + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Returns the serverUrl field. + * @return A String representing the "serverUrl" attribute. + */ + public String getServerUrl() { + return serverUrl; + } + + /** + * Sets the serverUrl field. + * This is not a required attribute. + * @param serverUrl A String representing the "serverUrl" attribute. + */ + public void setServerUrl(String serverUrl) { + this.serverUrl = serverUrl; + } + + /** + * Returns the source field (the path/filename of the component to be + * deployed. + * @return A File object representing the "source" attribute. + */ + public File getSource() { + return source; + } + + /** + * Sets the source field (the path/filename of the component to be + * deployed. + * This is not a required attribute. + * @param A String representing the "source" attribute. + */ + public void setSource(File source) { + this.source = source; + } +} diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbHotDeploymentTool.java new file mode 100644 index 000000000..1ca6d28b0 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbHotDeploymentTool.java @@ -0,0 +1,97 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.tools.ant.taskdefs.optional.ejb; + +import org.apache.tools.ant.BuildException; + +/** + * An interface for vendor-specific "hot" deployment tools. + * + * @author Christopher A. Longo - cal@cloud9.net + * + * @see AbstractEjbHotDeploymentTool + * @see EjbDeploy + */ +public interface EjbHotDeploymentTool +{ + /** + * Returns the class name of the weblogic.deploy tool to the super-task. + *

    This is called by the super-task, EjbDeploy. + *

    Subclasses should return the fully qualified class name of the + * vendor tool to run. IE: "com.foobar.tools.DeployTool" + * @return A String representing the classname of the deployment tool to run + */ + public String getClassName(); + + /** + * Validates the passed in attributes. + *

    The rules are: + *

    1. If action is "deploy" or "update" the "application" and "source" + * attributes must be supplied. + *
    2. If action is "delete" or "undeploy" the "application" attribute must + * be supplied. + * @exception BuildException if the attributes are invalid or incomplete + */ + public void validateAttributes() throws BuildException; + + /** + * Returns a String containing the runtime commandline arguments + * of the deployment tool. + *

      Subclasses should return the appropriate string from that + * vendor's tool. IE: "-url=http://myserver:31337 -user=foo -passsword=bar" + * @return a String containing the runtime commandline arguments + * of the deployment tool. + */ + public String getArguments() throws BuildException; +} diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebLogicHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebLogicHotDeploymentTool.java new file mode 100644 index 000000000..772feed11 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebLogicHotDeploymentTool.java @@ -0,0 +1,291 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.taskdefs.optional.ejb; + +import org.apache.tools.ant.BuildException; + +/** + * An Ant wrapper task for the weblogic.deploy tool. This is used to + * hot-deploy J2EE applications to a running WebLogic server. + * This is not the same as creating the application archive. + * This task assumes the archive (EAR, JAR, or WAR) file has been + * assembled and is supplied as the "source" attribute. + *

      + * In the end, this task assembles the commadline parameters + * to run the weblogic.deploy tool. + * + * @author Christopher A. Longo - cal@cloud9.net + * + * @see EjbHotDeploymentTool + * @see AbstractEjbHotDeploymentTool + * @see EjbDeploy + */ +public class WebLogicHotDeploymentTool + extends AbstractEjbHotDeploymentTool + implements EjbHotDeploymentTool +{ + /** The delete action String **/ + public static final String ACTION_DELETE = "delete"; + + /** The deploy action String **/ + public static final String ACTION_DEPLOY = "deploy"; + + /** The list action String **/ + public static final String ACTION_LIST = "list"; + + /** The undeploy action String **/ + public static final String ACTION_UNDEPLOY = "undeploy"; + + /** The update action String **/ + public static final String ACTION_UPDATE = "update"; + + /** The classname of the tool to run **/ + private static final String WEBLOGIC_DEPLOY_CLASS_NAME = "weblogic.deploy"; + + /** All the valid actions that weblogic.deploy permits **/ + private static final String[] VALID_ACTIONS = + {ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY, ACTION_UPDATE}; + + /** Represents the "-debug" flag from weblogic.deploy **/ + public boolean debug; + + /** The application name that is being deployed **/ + public String application; + + /** The component name:target(s) for the "-component" argument of weblogic.deploy **/ + public String component; + + /** + * Constructor + * @param deploy - The super-task which wraps this task + */ + public WebLogicHotDeploymentTool(EjbDeploy deploy) { + super(deploy); + } + + /** + * Returns the class name of the weblogic.deploy tool to the super-task. + *

      This is called by the super-task, EjbDeploy. + * @return A String representing the classname of the deployment tool to run + */ + public String getClassName() { + return WEBLOGIC_DEPLOY_CLASS_NAME; + } + + /** + * Validates the passed in attributes. + *

      The rules are: + *

      1. If action is "deploy" or "update" the "application" and "source" + * attributes must be supplied. + *
      2. If action is "delete" or "undeploy" the "application" attribute must + * be supplied. + * @exception BuildException if the attributes are invalid or incomplete + */ + public void validateAttributes() throws BuildException { + super.validateAttributes(); + + String action = getDeploy().getAction(); + + // check for missing application on deploy & update + if((action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) + && application == null) + throw new BuildException( + "The application attribute must be set if action = " + action); + + // check for missing source on deploy & update + if((action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) + && getDeploy().getSource() == null) + throw new BuildException( + "The source attribute must be set if action = " + action); + + // check for missing application on delete & undeploy + if((action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) + && application == null) + throw new BuildException( + "The application attribute must be set if action = " + action); + } + + /** + * Builds the arguments to pass to weblogic.deploy according to the + * supplied action. + * @return A String containing the arguments for the weblogic.deploy tool. + */ + public String getArguments() throws BuildException { + String action = getDeploy().getAction(); + String args = null; + + if(action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) + args = buildDeployArgs(); + else if(action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) + args = buildUndeployArgs(); + else if(action.equals(ACTION_LIST)) + args = buildListArgs(); + + return args; + } + + /** + * Determines if the action supplied is valid. + *

        Valid actions are contained in the static array VALID_ACTIONS + * @return true if the action attribute is valid, false if not. + */ + protected boolean isActionValid() { + boolean valid = false; + + String action = getDeploy().getAction(); + + for(int i = 0; i < VALID_ACTIONS.length; i++) { + if(action.equals(VALID_ACTIONS[i])) { + valid = true; + break; + } + } + + return valid; + } + + /** + * Builds the prefix arguments to pass to weblogic.deploy. + * These arguments are generic across all actions. + * @return A StringBuffer containing the prefix arguments. + * The action-specific build methods will append to this StringBuffer. + */ + protected StringBuffer buildArgsPrefix() { + EjbDeploy deploy = getDeploy(); + + // constructs the "-url -debug " portion + // of the commmand line + return new StringBuffer(1024) + .append((deploy.getServerUrl() != null) + ? "-url " + deploy.getServerUrl() + : "") + .append(" ") + .append(debug ? "-debug " : "") + .append((deploy.getUserName() != null) + ? "-username " + deploy.getUserName() + : "") + .append(" ") + .append(deploy.getAction()).append(" ") + .append(deploy.getPassword()).append(" "); + } + + /** + * Builds the arguments to pass to weblogic.deploy for deployment actions + * ("deploy" and "update"). + * @return A String containing the full argument string for weblogic.deploy. + */ + protected String buildDeployArgs() { + String args = buildArgsPrefix() + .append(application).append(" ") + .append(getDeploy().getSource()) + .toString(); + + if(component != null) + args = "-component " + component + " " + args; + + return args; + } + + /** + * Builds the arguments to pass to weblogic.deploy for undeployment actions + * ("undeploy" and "delete"). + * @return A String containing the full argument string for weblogic.deploy. + */ + protected String buildUndeployArgs() { + return buildArgsPrefix() + .append(application).append(" ") + .toString(); + } + + /** + * Builds the arguments to pass to weblogic.deploy for the list action + * @return A String containing the full argument string for weblogic.deploy. + */ + protected String buildListArgs() { + return buildArgsPrefix() + .toString(); + } + + /** + * Sets the debug field. + *

        This attribute is not a required attribute. + * @param debug A boolean representing weblogic.deploy "-debug" flag. + */ + public void setDebug(boolean debug) { + this.debug = debug; + } + + /** + * Sets the application field. + *

        This attribute is a required attribute. + * @param application A String representing the application portion of the + * weblogic.deploy command line. + */ + public void setApplication(String application) { + this.application = application; + } + + /** + * Sets the component attribute. + *

        This attribute is not a required attribute. + * @param component A String representing the value of the "-component" + * argument of the weblogic.deploy command line argument.
        + * This string should be in the format of + * <componentName>:<target1>,<target2>... + */ + public void setComponent(String component) { + this.component = component; + } +}