org.eclipse.ecf.internal.bulletinboard.commons.webapp.MultipartRequest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ecf.internal.bulletinboard.commons.webapp.MultipartRequest.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2006 Erkki Lindpere and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Erkki Lindpere - initial API and implementation
 *******************************************************************************/
package org.eclipse.ecf.internal.bulletinboard.commons.webapp;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
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;

/**
 * @author Erkki
 */
public class MultipartRequest extends WebRequest {

    // private static final Logger log =
    // Logger.getLogger(MultipartRequest.class);

    private ArrayList<Part> parts;

    public MultipartRequest(HttpClient client, URL url, String appendPath) {
        super(client);
        this.parts = new ArrayList<Part>();
        this.method = new PostMethod(url.toString() + appendPath);
        // TODO: the comment below -- was it specific to the deprecated
        // MultipartPostMethod?
        // For some reason this ended up causing an infinite loop.
        // When uploading avatar @ idle thumbs.
        method.setFollowRedirects(false);
        // log.debug("Multipart POST request: " + method.getPath());
    }

    public void setParameters(NameValuePair[] params) {
        parts.clear();
        for (NameValuePair pair : params) {
            parts.add(new StringPart(pair.getName(), pair.getValue()));
        }
    }

    public void addParameters(NameValuePair[] params) {
        for (NameValuePair pair : params) {
            parts.add(new StringPart(pair.getName(), pair.getValue()));
        }
    }

    public void addParameter(NameValuePair param) {
        parts.add(new StringPart(param.getName(), param.getValue()));
    }

    public void addFileParameter(String name, File file) throws FileNotFoundException {
        parts.add(new FilePart(name, file));
    }

    /**
     * TODO: make sure we are using the MultipartRequestEntity in the correct
     * manner. The deprecated MultipartPostMethod was very different.
     * @throws IOException 
     */
    @Override
    public void execute() throws IOException {
        ((PostMethod) method).setRequestEntity(
                new MultipartRequestEntity(parts.toArray(new Part[parts.size()]), method.getParams()));
        super.execute();
    }

}