Package net.sf.antcontrib.net.httpclient

Source Code of net.sf.antcontrib.net.httpclient.AbstractMethodTask$ResponseHeader

/*
* Copyright (c) 2001-2006 Ant-Contrib project.  All rights reserved.
*
* Licensed 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 net.sf.antcontrib.net.httpclient;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.URIException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.tools.ant.util.FileUtils;

public abstract class AbstractMethodTask
  extends Task {

  private HttpMethodBase method;
  private File responseDataFile;
  private String responseDataProperty;
  private String statusCodeProperty;
  private HttpClient httpClient;
  private List responseHeaders = new ArrayList();
 
  public static class ResponseHeader {
    private String name;
    private String property;
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public String getProperty() {
      return property;
    }
    public void setProperty(String property) {
      this.property = property;
    }   
  }
 
  protected abstract HttpMethodBase createNewMethod();
  protected void configureMethod(HttpMethodBase method) { 
  }
  protected void cleanupResources(HttpMethodBase method) {   
  }
 
  public void addConfiguredResponseHeader(ResponseHeader responseHeader) {
    this.responseHeaders.add(responseHeader);
  }
 
  public void addConfiguredHttpClient(HttpClientType httpClientType) {
    this.httpClient = httpClientType.getClient();
  }
 
  protected HttpMethodBase createMethodIfNecessary() {
    if (method == null) {
      method = createNewMethod();
    }
    return method;
  }
 
  public void setResponseDataFile(File responseDataFile) {
    this.responseDataFile = responseDataFile;
  }

  public void setResponseDataProperty(String responseDataProperty) {
    this.responseDataProperty = responseDataProperty;
  }

  public void setStatusCodeProperty(String statusCodeProperty) {
    this.statusCodeProperty = statusCodeProperty;
  }

  public void setClientRefId(String clientRefId) {
    Object clientRef = getProject().getReference(clientRefId);
    if (clientRef == null) {
      throw new BuildException("Reference '" + clientRefId + "' does not exist.");
    }
    if (! (clientRef instanceof HttpClientType)) {
      throw new BuildException("Reference '" + clientRefId + "' is of the wrong type.");
    }
    httpClient = ((HttpClientType) clientRef).getClient();
  }

  public void setDoAuthentication(boolean doAuthentication) {
    createMethodIfNecessary().setDoAuthentication(doAuthentication);
  }

  public void setFollowRedirects(boolean doFollowRedirects) {
    createMethodIfNecessary().setFollowRedirects(doFollowRedirects);
  }

  public void addConfiguredParams(MethodParams params) {
    createMethodIfNecessary().setParams(params);
  }
 
  public void setPath(String path) {
    createMethodIfNecessary().setPath(path);
  }
 
  public void setURL(String url) {
    try {
      createMethodIfNecessary().setURI(new URI(url, false));
    }
    catch (URIException e) {
      throw new BuildException(e);
    }
  }
 
  public void setQueryString(String queryString) {
    createMethodIfNecessary().setQueryString(queryString);
  }
 
  public void addConfiguredHeader(Header header) {
    createMethodIfNecessary().setRequestHeader(header);
  }
 
  public void execute() throws BuildException {
    if (httpClient == null) {
      httpClient = new HttpClient();
    }
   
    HttpMethodBase method = createMethodIfNecessary();
    configureMethod(method);
    try {
      int statusCode = httpClient.executeMethod(method);
      if (statusCodeProperty != null) {
        Property p = (Property)getProject().createTask("property");
        p.setName(statusCodeProperty);
        p.setValue(String.valueOf(statusCode));
        p.perform();
      }
     
      Iterator it = responseHeaders.iterator();
      while (it.hasNext()) {
        ResponseHeader header = (ResponseHeader)it.next();
        Property p = (Property)getProject().createTask("property");
        p.setName(header.getProperty());
        Header h = method.getResponseHeader(header.getName());
        if (h != null && h.getValue() != null) {
          p.setValue(h.getValue());
          p.perform();
        }
       
      }
      if (responseDataProperty != null) {
        Property p = (Property)getProject().createTask("property");
        p.setName(responseDataProperty);
        p.setValue(method.getResponseBodyAsString());
        p.perform();       
      }
      else if (responseDataFile != null) {
        FileOutputStream fos = null;
        InputStream is = null;
        try {
          is = method.getResponseBodyAsStream();
          fos = new FileOutputStream(responseDataFile);
          byte buf[] = new byte[10*1024];
          int read = 0;
          while ((read = is.read(buf, 0, 10*1024)) != -1) {
            fos.write(buf, 0, read);
          }
        }
        finally {
          FileUtils.close(fos);
          FileUtils.close(is);
        }
      }
    }
    catch (IOException e) {
      throw new BuildException(e);
    }
    finally {
      cleanupResources(method);
    }
  }
}
TOP

Related Classes of net.sf.antcontrib.net.httpclient.AbstractMethodTask$ResponseHeader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.