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

com.woorea.openstack.base.client.OpenStackRequest Maven / Gradle / Ivy

There is a newer version: 3.2.9
Show newest version
package com.woorea.openstack.base.client;

import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;

public class OpenStackRequest {

	private OpenStackClient client;
	
	public OpenStackRequest() {
		
	}

	public OpenStackRequest(OpenStackClient client, HttpMethod method, String path, Entity entity, Class returnType) {
		this(client, method, (CharSequence)path, entity, returnType);
	}
	
	public OpenStackRequest(OpenStackClient client, HttpMethod method, CharSequence path, Entity entity, Class returnType) {
		this.client = client;
		this.method = method;
		this.path = new StringBuilder(path);
		this.entity = entity;
		this.returnType = returnType;
		header("Accept", "application/json");
	}
	
	private String endpoint;
	
	private HttpMethod method;
	
	private StringBuilder path = new StringBuilder();
	
	private Map> headers = new HashMap>();
	
	private Entity entity;
	
	private Class returnType;
	
	public OpenStackRequest endpoint(String endpoint) {
		this.endpoint = endpoint;
		return this;
	}
	
	public String endpoint() {
		return endpoint;
	}

	public OpenStackRequest method(HttpMethod method) {
		this.method = method;
		return this;
	}
	
	public HttpMethod method() {
		return method;
	}
	
	public OpenStackRequest path(String path) {
		this.path.append(path);
		return this;
	}
	
	public String path() {
		return path.toString();
	}

	public OpenStackRequest header(String name, Object value) {
		if(value != null) {
			headers.put(name, Arrays.asList(value));
		}
		return this;
	}
	
	public Map> headers() {
		return headers;
	}
	
	public  Entity entity(T entity, String contentType) {
		return new Entity(entity, contentType);
	}
	
	public Entity entity() {
		return entity;
	}
	
	public  Entity json(T entity) {
		return entity(entity, "application/json");
	}
	
	public void returnType(Class returnType) {
		this.returnType = returnType;
	}
	
	public Class returnType() {
		return returnType;
	}
	
	public R execute() {
		return client.execute(this);
	}
	
	public OpenStackResponse request() {
		return client.request(this);
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "OpenStackRequest [endpoint=" + endpoint + ", method=" + method
				+ ", path=" + path + ", headers=" + headers + ", entity="
				+ entity + ", returnType=" + returnType + "]";
	}

	private Map > queryParams = new LinkedHashMap >();

	public Map > queryParams() {
		return queryParams;
	}

	public OpenStackRequest queryParam(String key, Object value) {
		if (queryParams.containsKey(key)) {
			List values = queryParams.get(key);
			values.add(value);
		} else {
			List values = new ArrayList();
			values.add(value);
			queryParams.put(key, values);
		}

		return this;
    }
	
	protected static String buildPath(String ... elements) {
	    StringBuilder stringBuilder = new StringBuilder();
	    final String PATH_SEPARATOR = "/";
	    for (String element : elements) {
            stringBuilder.append(PATH_SEPARATOR);
            stringBuilder.append(element);
        }

	    return stringBuilder.toString();
	}
}