FileDocCategorySizeDatePackage
AbstractCatalinaTask.javaAPI DocApache Tomcat 6.0.149416Fri Jul 20 04:20:30 BST 2007org.apache.catalina.ant

AbstractCatalinaTask

public abstract class AbstractCatalinaTask extends BaseRedirectorHelperTask
Abstract base class for Ant tasks that interact with the Manager web application for dynamically deploying and undeploying applications. These tasks require Ant 1.4 or later.
author
Craig R. McClanahan
version
$Revision: 467222 $ $Date: 2006-10-24 05:17:11 +0200 (mar., 24 oct. 2006) $
since
4.1

Fields Summary
private static String
CHARSET
manager webapp's encoding.
protected String
charset
The charset used during URL encoding.
protected String
password
The login password for the Manager application.
protected String
url
The URL of the Manager application to be used.
protected String
username
The login username for the Manager application.
Constructors Summary
Methods Summary
public voidexecute(java.lang.String command)
Execute the specified command, based on the configured properties.

param
command Command to be executed
exception
BuildException if an error occurs


        execute(command, null, null, -1);

    
public voidexecute(java.lang.String command, java.io.InputStream istream, java.lang.String contentType, int contentLength)
Execute the specified command, based on the configured properties. The input stream will be closed upon completion of this task, whether it was executed successfully or not.

param
command Command to be executed
param
istream InputStream to include in an HTTP PUT, if any
param
contentType Content type to specify for the input, if any
param
contentLength Content length to specify for the input, if any
exception
BuildException if an error occurs


        URLConnection conn = null;
        InputStreamReader reader = null;
        try {

            // Create a connection for this command
            conn = (new URL(url + command)).openConnection();
            HttpURLConnection hconn = (HttpURLConnection) conn;

            // Set up standard connection characteristics
            hconn.setAllowUserInteraction(false);
            hconn.setDoInput(true);
            hconn.setUseCaches(false);
            if (istream != null) {
                hconn.setDoOutput(true);
                hconn.setRequestMethod("PUT");
                if (contentType != null) {
                    hconn.setRequestProperty("Content-Type", contentType);
                }
                if (contentLength >= 0) {
                    hconn.setRequestProperty("Content-Length",
                                             "" + contentLength);
                }
            } else {
                hconn.setDoOutput(false);
                hconn.setRequestMethod("GET");
            }
            hconn.setRequestProperty("User-Agent",
                                     "Catalina-Ant-Task/1.0");

            // Set up an authorization header with our credentials
            String input = username + ":" + password;
            String output = new String(Base64.encode(input.getBytes()));
            hconn.setRequestProperty("Authorization",
                                     "Basic " + output);

            // Establish the connection with the server
            hconn.connect();

            // Send the request data (if any)
            if (istream != null) {
                BufferedOutputStream ostream =
                    new BufferedOutputStream(hconn.getOutputStream(), 1024);
                byte buffer[] = new byte[1024];
                while (true) {
                    int n = istream.read(buffer);
                    if (n < 0) {
                        break;
                    }
                    ostream.write(buffer, 0, n);
                }
                ostream.flush();
                ostream.close();
                istream.close();
            }

            // Process the response message
            reader = new InputStreamReader(hconn.getInputStream(), CHARSET);
            StringBuffer buff = new StringBuffer();
            String error = null;
            int msgPriority = Project.MSG_INFO;
            boolean first = true;
            while (true) {
                int ch = reader.read();
                if (ch < 0) {
                    break;
                } else if ((ch == '\r") || (ch == '\n")) {
                    // in Win \r\n would cause handleOutput() to be called
                    // twice, the second time with an empty string,
                    // producing blank lines
                    if (buff.length() > 0) {
                        String line = buff.toString();
                        buff.setLength(0);
                        if (first) {
                            if (!line.startsWith("OK -")) {
                                error = line;
                                msgPriority = Project.MSG_ERR;
                            }
                            first = false;
                        }
                        handleOutput(line, msgPriority);
                    }
                } else {
                    buff.append((char) ch);
                }
            }
            if (buff.length() > 0) {
                handleOutput(buff.toString(), msgPriority);
            }
            if (error != null && isFailOnError()) {
                // exception should be thrown only if failOnError == true
                // or error line will be logged twice
                throw new BuildException(error);
            }
        } catch (Throwable t) {
            if (isFailOnError()) {
                throw new BuildException(t);
            } else {
                handleErrorOutput(t.getMessage());
            }
        } finally {
            closeRedirector();
            if (reader != null) {
                try {
                    reader.close();
                } catch (Throwable u) {
                    ;
                }
                reader = null;
            }
            if (istream != null) {
                try {
                    istream.close();
                } catch (Throwable u) {
                    ;
                }
                istream = null;
            }
        }

    
public voidexecute()
Execute the specified command. This logic only performs the common attribute validation required by all subclasses; it does not perform any functional logic directly.

exception
BuildException if a validation error occurs


        if ((username == null) || (password == null) || (url == null)) {
            throw new BuildException
                ("Must specify all of 'username', 'password', and 'url'");
        }

    
public java.lang.StringgetCharset()


       
        return (this.charset);
    
public java.lang.StringgetPassword()


       
        return (this.password);
    
public java.lang.StringgetUrl()


       
        return (this.url);
    
public java.lang.StringgetUsername()


       
        return (this.username);
    
public voidsetCharset(java.lang.String charset)

        this.charset = charset;
    
public voidsetPassword(java.lang.String password)

        this.password = password;
    
public voidsetUrl(java.lang.String url)

        this.url = url;
    
public voidsetUsername(java.lang.String username)

        this.username = username;