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, 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(); for (String element : elements) { stringBuilder.append(element); } return stringBuilder.toString(); } }