All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wisdom.test.http.MultipartBody Maven / Gradle / Ivy

There is a newer version: 0.10.0
Show newest version
/*
 * #%L
 * Wisdom-Framework
 * %%
 * Copyright (C) 2013 - 2014 Wisdom Framework
 * %%
 * 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.
 * #L%
 */
package org.wisdom.test.http;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.message.BasicNameValuePair;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 * An implementation of HTTP Request used to send the results from a form. It's useful when testing controller expecting
 * input from forms.
 * 

* To use this class, creates a regular request that you give this class (in the constructor). */ public class MultipartBody extends BaseRequest implements Body { private Map parameters = new HashMap(); private boolean hasFile; private HttpRequest httpRequestObj; /** * Creates the Multipart body from the given request. * * @param httpRequest the base request, must not be {@literal null}. */ public MultipartBody(HttpRequest httpRequest) { super(httpRequest); this.httpRequestObj = httpRequest; } /** * Adds a field. * * @param name the field's name * @param value the value * @return the current multipart body */ public MultipartBody field(String name, String value) { parameters.put(name, value); return this; } /** * Adds an upload file. * * @param name the field's name * @param file the file to upload * @return the current multipart body */ public MultipartBody field(String name, File file) { this.parameters.put(name, file); hasFile = true; return this; } /** * Sets the basic authentication. * * @param username the username * @param password the password * @return the current multipart body */ public MultipartBody basicAuth(String username, String password) { httpRequestObj.basicAuth(username, password); return this; } /** * Computes the request payload. * * @return the payload containing the declared fields and files. */ public HttpEntity getEntity() { if (hasFile) { MultipartEntityBuilder builder = MultipartEntityBuilder.create(); for (Entry part : parameters.entrySet()) { if (part.getValue() instanceof File) { hasFile = true; builder.addPart(part.getKey(), new FileBody((File) part.getValue())); } else { builder.addPart(part.getKey(), new StringBody(part.getValue().toString(), ContentType.APPLICATION_FORM_URLENCODED)); } } return builder.build(); } else { try { return new UrlEncodedFormEntity(getList(parameters), UTF_8); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } /** * A helper method to build a list a {@link org.apache.http.NameValuePair} from a map of parameters. * * @param parameters the parameters * @return the list */ public static List getList(Map parameters) { List result = new ArrayList<>(); if (parameters != null) { for (Map.Entry entry : parameters.entrySet()) { if (entry.getValue() != null) { result.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); } } } return result; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy