/*- * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. 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. * ============LICENSE_END========================================================= */ package org.openecomp.mso.cloudify.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 CloudifyRequest { private CloudifyClient client; public CloudifyRequest() { } public CloudifyRequest(CloudifyClient 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; private boolean basicAuth = false; private String user = null; private String password = null; public CloudifyRequest endpoint(String endpoint) { this.endpoint = endpoint; return this; } public String endpoint() { return endpoint; } public CloudifyRequest method(HttpMethod method) { this.method = method; return this; } public HttpMethod method() { return method; } public CloudifyRequest path(String path) { this.path.append(path); return this; } public String path() { return path.toString(); } public CloudifyRequest 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; } /* * Use Basic Authentication for this request. If not set, the client will use Token authentication * if a token provider is defined. Otherwise, no authentication will be applied. */ public void setBasicAuthentication (String user, String password) { this.basicAuth = true; this.user = user; this.password= password; } public boolean isBasicAuth () { return this.basicAuth; } public String getUser() { return user; } public String getPassword() { return password; } public R execute() { return client.execute(this); } public CloudifyResponse request() { return client.request(this); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "CloudifyRequest [endpoint=" + endpoint + ", method=" + method + ", path=" + path + ", headers=" + headers + ", entity=" + entity + ", returnType=" + returnType + "]"; } private Map > queryParams = new LinkedHashMap >(); public Map > queryParams() { return queryParams; } public CloudifyRequest 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(); } }