net.sf.antcontrib.net.httpclient.PostMethodTask.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.antcontrib.net.httpclient.PostMethodTask.java

Source

/*
 * 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.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.FileUtils;

public class PostMethodTask extends AbstractMethodTask {

    private List parts = new ArrayList();
    private boolean multipart;
    private transient FileInputStream stream;

    public static class FilePartType {
        private File path;
        private String contentType = FilePart.DEFAULT_CONTENT_TYPE;
        private String charSet = FilePart.DEFAULT_CHARSET;

        public File getPath() {
            return path;
        }

        public void setPath(File path) {
            this.path = path;
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        public String getCharSet() {
            return charSet;
        }

        public void setCharSet(String charSet) {
            this.charSet = charSet;
        }
    }

    public static class TextPartType {
        private String name = "";
        private String value = "";
        private String charSet = StringPart.DEFAULT_CHARSET;
        private String contentType = StringPart.DEFAULT_CONTENT_TYPE;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getCharSet() {
            return charSet;
        }

        public void setCharSet(String charSet) {
            this.charSet = charSet;
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        public void setText(String text) {
            this.value = text;
        }
    }

    public void addConfiguredFile(FilePartType file) {
        this.parts.add(file);
    }

    public void setMultipart(boolean multipart) {
        this.multipart = multipart;
    }

    public void addConfiguredText(TextPartType text) {
        this.parts.add(text);
    }

    public void setParameters(File parameters) {
        PostMethod post = getPostMethod();
        Properties p = new Properties();
        Iterator it = p.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            post.addParameter(entry.getKey().toString(), entry.getValue().toString());
        }
    }

    protected HttpMethodBase createNewMethod() {
        return new PostMethod();
    }

    private PostMethod getPostMethod() {
        return ((PostMethod) createMethodIfNecessary());
    }

    public void addConfiguredParameter(NameValuePair pair) {
        getPostMethod().setParameter(pair.getName(), pair.getValue());
    }

    public void setContentChunked(boolean contentChunked) {
        getPostMethod().setContentChunked(contentChunked);
    }

    protected void configureMethod(HttpMethodBase method) {
        PostMethod post = (PostMethod) method;

        if (parts.size() == 1 && !multipart) {
            Object part = parts.get(0);
            if (part instanceof FilePartType) {
                FilePartType filePart = (FilePartType) part;
                try {
                    stream = new FileInputStream(filePart.getPath().getAbsolutePath());
                    post.setRequestEntity(new InputStreamRequestEntity(stream, filePart.getPath().length(),
                            filePart.getContentType()));
                } catch (IOException e) {
                    throw new BuildException(e);
                }
            } else if (part instanceof TextPartType) {
                TextPartType textPart = (TextPartType) part;
                try {
                    post.setRequestEntity(new StringRequestEntity(textPart.getValue(), textPart.getContentType(),
                            textPart.getCharSet()));
                } catch (UnsupportedEncodingException e) {
                    throw new BuildException(e);
                }
            }
        } else if (!parts.isEmpty()) {
            Part partArray[] = new Part[parts.size()];
            for (int i = 0; i < parts.size(); i++) {
                Object part = parts.get(i);
                if (part instanceof FilePartType) {
                    FilePartType filePart = (FilePartType) part;
                    try {
                        partArray[i] = new FilePart(filePart.getPath().getName(), filePart.getPath().getName(),
                                filePart.getPath(), filePart.getContentType(), filePart.getCharSet());
                    } catch (FileNotFoundException e) {
                        throw new BuildException(e);
                    }
                } else if (part instanceof TextPartType) {
                    TextPartType textPart = (TextPartType) part;
                    partArray[i] = new StringPart(textPart.getName(), textPart.getValue(), textPart.getCharSet());
                    ((StringPart) partArray[i]).setContentType(textPart.getContentType());
                }
            }
            MultipartRequestEntity entity = new MultipartRequestEntity(partArray, post.getParams());
            post.setRequestEntity(entity);
        }
    }

    protected void cleanupResources(HttpMethodBase method) {
        FileUtils.close(stream);
    }

}