From 025301d08b061482c1f046d562bf017c8cbcfe8d Mon Sep 17 00:00:00 2001 From: ChrisC Date: Tue, 31 Jan 2017 11:40:03 +0100 Subject: Initial OpenECOMP MSO commit Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d Signed-off-by: ChrisC --- .../java/org/openecomp/mso/rest/APIResponse.java | 143 +++++ .../org/openecomp/mso/rest/HostNameVerifier.java | 45 ++ .../java/org/openecomp/mso/rest/HttpHeader.java | 65 +++ .../java/org/openecomp/mso/rest/RESTClient.java | 618 +++++++++++++++++++++ .../java/org/openecomp/mso/rest/RESTConfig.java | 131 +++++ .../java/org/openecomp/mso/rest/RESTException.java | 85 +++ 6 files changed, 1087 insertions(+) create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/APIResponse.java create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HostNameVerifier.java create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HttpHeader.java create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTConfig.java create mode 100644 bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTException.java (limited to 'bpmn/MSORESTClient/src/main/java/org') diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/APIResponse.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/APIResponse.java new file mode 100644 index 0000000000..dfb9f36e9a --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/APIResponse.java @@ -0,0 +1,143 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +import java.io.IOException; + +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; + +/** + * An immutable class that encapsulates an API response. + * + * @version 1.0 + * @since 1.0 + */ +public class APIResponse { + private final int statusCode; + private final byte[] responseBody; + private final HttpHeader[] headers; + + /** + * Internal method used to create http headers using the specified + * HttpResponse object. + * + * @param httpResponse used to create headers + * @return http headers + */ + private HttpHeader[] buildHeaders(final HttpResponse httpResponse) { + final Header[] headers = httpResponse.getAllHeaders(); + + HttpHeader[] httpHeaders = new HttpHeader[headers.length]; + for (int i = 0; i < headers.length; ++i) { + final Header header = headers[i]; + final String name = header.getName(); + final String value = header.getValue(); + final HttpHeader httpHeader = new HttpHeader(name, value); + httpHeaders[i] = httpHeader; + } + + return httpHeaders; + } + + /** + * Create an APIResponse object using the specified HttpResponse object. + * + * @param httpResponse used to create the APIResponse + * + * @throws RESTException if unable to read from the HttpResponse object + */ + public APIResponse(final HttpResponse httpResponse) throws RESTException { + try { + this.statusCode = httpResponse.getStatusLine().getStatusCode(); + + if (httpResponse.getEntity() == null) + { + this.responseBody = null; + } + else + { + this.responseBody = EntityUtils.toByteArray(httpResponse.getEntity()); + } + + this.headers = buildHeaders(httpResponse); + } catch (IOException ioe) { + throw new RESTException(ioe); + } + } + + /** + * Gets the http status code returned by the api server. + *

+ * For example, status code 200 represents 'OK.' + * + * @return status code + */ + public int getStatusCode() { + return this.statusCode; + } + + /** + * Gets the http response body as a byte array. + * + * @return http response body + */ + public byte[] getResponseBodyAsByteArray() { + return this.responseBody; + } + + /** + * Gets the http response body as a string. + * + * @return http response body + */ + public String getResponseBodyAsString() { + if (this.responseBody != null) { + return new String(this.responseBody); + } else { + return ""; + } + } + + /** + * Gets a list of all the headers returned by the API response. + * + * @return an array of all the HttpHeaders + */ + public HttpHeader[] getAllHeaders() { + // avoid exposing internals, create copy + HttpHeader[] copy = new HttpHeader[this.headers.length]; + for (int i = 0; i < this.headers.length; ++i) { + copy[i] = headers[i]; + } + return copy; + } + + public String getFirstHeader(String name) { + for (HttpHeader header : headers) { + if (header.getName().equals(name)) { + return header.getValue(); + } + } + return null; + } +} diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HostNameVerifier.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HostNameVerifier.java new file mode 100644 index 0000000000..f597fdfaa7 --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HostNameVerifier.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +import javax.net.ssl.SSLException; + +import org.apache.http.conn.ssl.AbstractVerifier; + +/** + * @version 1.0 + * Place holder to validate host name, for now just invokes the super class method + * + */ +public class HostNameVerifier extends AbstractVerifier { + + public final void verify( + final String host, + final String[] cns, + final String[] subjectAlts) throws SSLException { + try { + verify(host, cns, subjectAlts, true); + } catch (SSLException sex) { + + } + } + +} diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HttpHeader.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HttpHeader.java new file mode 100644 index 0000000000..e0d6c3056d --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/HttpHeader.java @@ -0,0 +1,65 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +/** + * An immutable class used to wrap an http header. + * + * @version 1.0 + * @since 1.0 + */ +public class HttpHeader { + private final String name; + private final String value; + + /** + * Create an http header using the specified name and value + * + * @param name name of http header + * @param value value of http header + */ + public HttpHeader(final String name, final String value) { + if (name == null) { + throw new IllegalArgumentException("Name may not be null."); + } + + this.name = name; + this.value = value; + } + + /** + * Gets the header name. + * + * @return header name + */ + public String getName() { + return this.name; + } + + /** + * Gets the header value. + * + * @return header value + */ + public String getValue() { + return this.value; + } +} diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java new file mode 100644 index 0000000000..5c200046ca --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java @@ -0,0 +1,618 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +import java.io.Closeable; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Set; + +import javax.net.ssl.SSLSocketFactory; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPatch; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.AbstractHttpMessage; +import org.apache.http.util.EntityUtils; + +/** + * Client used to send RESTFul requests. + *

+ * Many of the methods return a reference to the 'this,' thereby allowing + * method chaining. + *
+ * An example of usage can be found below: + *

+ * RESTClient client;
+ * try {
+ *     client = new RESTClient("http://www.openecomp.org");
+ *     APIResponse response = client
+ *         .setHeader("Accept", "application/json")
+ *         .setHeader("Clientid", "clientid")
+ *         .setHeader("header", "value")
+ *         .httpPost("postbody");
+ *     if (response.getStatusCode() == 200) {
+ *         System.out.println("Success!");
+ *     }
+ *  } catch (RESTException re) {
+ *      // Handle Exception
+ *  }
+ * 
+ * + * @version 1.0 + * @since 1.0 + */ +public class RESTClient { + private final String proxyHost; + private final int proxyPort; + + private final String URL; + + private final LinkedHashMap> headers; + private final LinkedHashMap> parameters; + + private HttpEntity httpEntity; + private HttpClient unitTestClient; + + /** + * Internal method used to build an APIResponse using the specified + * HttpResponse object. + * + * @param response response wrapped inside an APIResponse object + * @return api response + */ + private APIResponse buildResponse(HttpResponse response) + throws RESTException { + + return new APIResponse(response); + } + + /** + * Used to release any resources used by the connection. + * @param response HttpResponse object used for releasing the connection + * @throws RESTException if unable to release connection + * + */ + private void releaseConnection(HttpResponse response) throws RESTException { + try { + EntityUtils.consume(response.getEntity()); + } catch (IOException ioe) { + throw new RESTException(ioe); + } + } + + /** + * Sets headers to the http message. + * + * @param httpMsg http message to set headers for + */ + private void addInternalHeaders(AbstractHttpMessage httpMsg) { + if (headers.isEmpty()) { + return; + } + + final Set keySet = headers.keySet(); + for (final String key : keySet) { + final List values = headers.get(key); + for (final String value : values) { + httpMsg.addHeader(key, value); + } + } + } + + /** + * Builds the query part of a URL. + * + * @return query + */ + private String buildQuery() { + if (this.parameters.size() == 0) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + String charSet = "UTF-8"; + try { + Iterator keyitr = this.parameters.keySet().iterator(); + for (int i = 0; keyitr.hasNext(); ++i) { + if (i > 0) { + sb.append("&"); + } + + final String name = keyitr.next(); + final List values = this.parameters.get(name); + for(final String value : values) { + sb.append(URLEncoder.encode(name, charSet)); + sb.append("="); + sb.append(URLEncoder.encode(value, charSet)); + } + } + } catch (UnsupportedEncodingException e) { + // should not occur + e.printStackTrace(); + } + return sb.toString(); + } + + /** + * Creates an http client that can be used for sending http requests. + * + * @return created http client + * + * @throws RESTException if unable to create http client. + */ + private CloseableHttpClient createClient() throws RESTException { + //TODO - we may want to trust self signed certificate at some point - add implementation here + HttpClientBuilder clientBuilder; + + try { + SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory( + (SSLSocketFactory) SSLSocketFactory.getDefault(), + new HostNameVerifier()); + Registry registry = RegistryBuilder + . create() + .register("http", + PlainConnectionSocketFactory.getSocketFactory()) + .register("https", sslSocketFactory).build(); + PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager( + registry); + clientBuilder = HttpClientBuilder.create().setConnectionManager( + manager); + } catch (Exception ex) { + throw new RESTException(ex.getMessage()); + } + clientBuilder.disableRedirectHandling(); + + if ((this.proxyHost != null) && (this.proxyPort != -1)) { + HttpHost proxy = new HttpHost(this.proxyHost, this.proxyPort); + clientBuilder.setProxy(proxy); + } + + return clientBuilder.build(); + } + + /** + * Creates a RESTClient with the specified URL, proxy host, and proxy port. + * + * @param URL URL to send request to + * @param proxyHost proxy host to use for sending request + * @param proxyPort proxy port to use for sendin request + * + * @throws RESTException if unable to create a RESTClient + */ + public RESTClient(String URL, String proxyHost, int proxyPort) + throws RESTException { + this(new RESTConfig(URL, proxyHost, proxyPort)); + } + + /** + * Creates a RESTClient with the specified URL. No proxy host nor port will + * be used. + * + * @param URL URL to send request to + * + * @throws RESTException if unable to create a RESTClient + */ + public RESTClient(String URL) throws RESTException { + this(new RESTConfig(URL)); + } + + /** + * Creates a RESTClient with the RESTConfig object. + * + * @param RESTConfig config to use for sending request + * + * @throws RESTException if unable to create a RESTClient + */ + public RESTClient(RESTConfig cfg) throws RESTException { + this.headers = new LinkedHashMap>(); + this.parameters = new LinkedHashMap>(); + this.URL = cfg.getURL(); + this.proxyHost = cfg.getProxyHost(); + this.proxyPort = cfg.getProxyPort(); + } + + /** + * Adds parameter to be sent during http request. + *

+ * Does not remove any parameters with the same name, thus allowing + * duplicates. + * + * @param name name of parameter + * @param value value of parametr + * @return a reference to 'this', which can be used for method chaining + */ + public RESTClient addParameter(String name, String value) { + if (!parameters.containsKey(name)) { + parameters.put(name, new ArrayList()); + } + + List values = parameters.get(name); + values.add(value); + + return this; + } + + /** + * Sets parameter to be sent during http request. + *

+ * Removes any parameters with the same name, thus disallowing duplicates. + * + * @param name name of parameter + * @param value value of parametr + * @return a reference to 'this', which can be used for method chaining + */ + public RESTClient setParameter(String name, String value) { + if (parameters.containsKey(name)) { + parameters.get(name).clear(); + } + + addParameter(name, value); + + return this; + } + + /** + * Adds http header to be sent during http request. + *

+ * Does not remove any headers with the same name, thus allowing + * duplicates. + * + * @param name name of header + * @param value value of header + * @return a reference to 'this', which can be used for method chaining + */ + public RESTClient addHeader(String name, String value) { + if (!headers.containsKey(name)) { + headers.put(name, new ArrayList()); + } + + List values = headers.get(name); + values.add(value); + + return this; + } + + /** + * Sets http header to be sent during http request. + *

+ * Does not remove any headers with the same name, thus allowing + * duplicates. + * + * @param name name of header + * @param value value of header + * @return a reference to 'this', which can be used for method chaining + */ + public RESTClient setHeader(String name, String value) { + if (headers.containsKey(name)) { + headers.get(name).clear(); + } + + addHeader(name, value); + + return this; + } + + /** + * Convenience method for adding the authorization header using the + * specified OAuthToken object. + * + * @param token token to use for setting authorization + * @return a reference to 'this,' which can be used for method chaining + */ + public RESTClient addAuthorizationHeader(String token) { + this.addHeader("Authorization", token); + return this; + } + + /** + * Alias for httpGet(). + * + * @see RESTClient#httpGet() + */ + public APIResponse get() throws RESTException { + return httpGet(); + } + + /** + * Sends an http GET request using the parameters and headers previously + * set. + * + * @return api response + * + * @throws RESTException if request was unsuccessful + */ + public APIResponse httpGet() throws RESTException { + HttpResponse response = null; + + try (CloseableHttpClient httpClient = createClient()) { + String query = ""; + if (!buildQuery().equals("")) { + query = "?" + buildQuery(); + } + HttpGet httpGet = new HttpGet(this.getURL() + query); + addInternalHeaders(httpGet); + + response = httpClient.execute(httpGet); + + APIResponse apiResponse = buildResponse(response); + return apiResponse; + } catch (IOException ioe) { + throw new RESTException(ioe); + } finally { + if (response != null) { + this.releaseConnection(response); + } + } + } + + /** + * Alias for httpPost() + * + * @see RESTClient#httpPost() + */ + public APIResponse post() throws RESTException { + return httpPost(); + } + + /** + * Sends an http POST request. + *

+ * POST body will be set to the values set using add/setParameter() + * + * @return api response + * + * @throws RESTException if POST was unsuccessful + */ + public APIResponse httpPost() throws RESTException { + APIResponse response = httpPost(buildQuery()); + return response; + } + + /** + * Sends an http POST request using the specified body. + * + * @return api response + * + * @throws RESTException if POST was unsuccessful + */ + public APIResponse httpPost(String body) throws RESTException { + HttpResponse response = null; + try (CloseableHttpClient httpClient = createClient()) { + HttpPost httpPost = new HttpPost(this.getURL()); + addInternalHeaders(httpPost); + if (body != null && !body.equals("")) { + httpEntity = new StringEntity(body); + httpPost.setEntity(new StringEntity(body)); + } + + response = httpClient.execute(httpPost); + + return buildResponse(response); + } catch (IOException e) { + throw new RESTException(e); + } finally { + if (response != null) { + this.releaseConnection(response); + } + } + } + + /** + * + * @param body Data to PUT + * @return API response + * @throws RESTException + */ + public APIResponse httpPut(String body) throws RESTException { + HttpResponse response = null; + try (CloseableHttpClient httpClient = createClient()) { + + String query = ""; + if (!buildQuery().equals("")) { + query = "?" + buildQuery(); + } + HttpPut httpPut = new HttpPut(this.getURL() + query); + addInternalHeaders(httpPut); + if (body != null && !body.equals("")) { + httpEntity = new StringEntity(body); + httpPut.setEntity(httpEntity); + } + + response = httpClient.execute(httpPut); + + return buildResponse(response); + } catch (IOException e) { + throw new RESTException(e); + } finally { + if (response != null) { + this.releaseConnection(response); + } + } + } + + /** + * Alias for httpPatch(). + * + * @see RESTClient#httpPatch() + */ + public APIResponse patch(String body) throws RESTException { + return httpPatch(body); + } + + /** + * + * @param body Data to PATCH + * @return API response + * @throws RESTException + */ + public APIResponse httpPatch(String body) throws RESTException { + HttpResponse response = null; + try (CloseableHttpClient httpClient = createClient()) { + String query = ""; + if (!buildQuery().equals("")) { + query = "?" + buildQuery(); + } + HttpPatch httpPatch = new HttpPatch(this.getURL() + query); + addInternalHeaders(httpPatch); + if (body != null && !body.equals("")) { + httpEntity = new StringEntity(body); + httpPatch.setEntity(httpEntity); + } + + response = httpClient.execute(httpPatch); + + return buildResponse(response); + } catch (IOException e) { + throw new RESTException(e); + } finally { + if (response != null) { + this.releaseConnection(response); + } + } + } + + /** + * Alias for httpDelete(). + * + * @see RESTClient#httpDelete() + */ + public APIResponse delete() throws RESTException { + return httpDelete(); + } + + /** + * Sends an http DELETE request using the parameters and headers previously + * set. + * + * @return api response + * + * @throws RESTException if request was unsuccessful + */ + public APIResponse httpDelete() throws RESTException { + return httpDelete(null); + } + + /** + * Sends an http DELETE request with a body, using the parameters and headers + * previously set. + * + * @return api response + * + * @throws RESTException if request was unsuccessful + */ + public APIResponse httpDelete(String body) throws RESTException { + HttpResponse response = null; + + try (CloseableHttpClient httpClient = createClient()){ + + String query = ""; + if (!buildQuery().equals("")) { + query = "?" + buildQuery(); + } + HttpDeleteWithBody httpDelete = new HttpDeleteWithBody(this.getURL() + query); + addInternalHeaders(httpDelete); + + if (body != null && !body.equals("")) { + httpEntity = new StringEntity(body); + httpDelete.setEntity(httpEntity); + } + + response = httpClient.execute(httpDelete); + + APIResponse apiResponse = buildResponse(response); + return apiResponse; + } catch (IOException ioe) { + throw new RESTException(ioe); + } finally { + if (response != null) { + this.releaseConnection(response); + } + } + } + + public String getURL() { + return URL; + } + public LinkedHashMap> getHeaders() { + return headers; + } + public LinkedHashMap> getParameters() { + return parameters; + } + public HttpEntity getHttpEntity() { + return httpEntity; + } + + public HttpClient getUnitTestClient() { + return unitTestClient; + } + + public void setUnitTestClient(HttpClient unitTestClient) { + this.unitTestClient = unitTestClient; + } + + /** + * Allows inclusion of a request body with DELETE. + */ + private class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { + public static final String METHOD_NAME = "DELETE"; + + public String getMethod() { + return METHOD_NAME; + } + + public HttpDeleteWithBody(final String uri) { + super(); + setURI(URI.create(uri)); + } + + public HttpDeleteWithBody(final URI uri) { + super(); + setURI(uri); + } + + public HttpDeleteWithBody() { + super(); + } + } +} diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTConfig.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTConfig.java new file mode 100644 index 0000000000..a6685067f7 --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTConfig.java @@ -0,0 +1,131 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +/** + * Configuration values to be used by the RESTClient. + * + * @version 1.0 + * + */ +public class RESTConfig { + private final String URL; + + private final boolean trustAllCerts; + private final String proxyHost; + private final int proxyPort; + + /** + * Creates a RESTConfig with the specified URL. + *

+ * By default, no proxy will be used, and only valid certificates will + * be used. + * + * @param URL url to set + */ + public RESTConfig(final String URL) { + this(URL, null, -1, false); + } + + /** + * Creates a RESTConfig with the specified URL and whether to trust all + * certificates. + *

+ * Trusting all certificates is useful for testing self-signed + * certificates. By default, no proxy will be used. + * + * @param URL url to set + * @param trustAllCerts whether to trust all certificates + */ + public RESTConfig(final String URL, final boolean trustAllCerts) { + this(URL, null, -1, trustAllCerts); + } + + /** + * Creates a RESTConfig with the specified URL and proxy. + *

+ * By default, only valid certificates will be allowed. + * + * @param URL url to set + * @param proxyHost proxy host to set + * @param proxyPort proxy port to set + */ + public RESTConfig(final String URL, final String proxyHost, + final int proxyPort) { + + this(URL, proxyHost, proxyPort, false); + } + + /** + * Creates a RESTConfig object with the specified URL, proxy host, proxy + * port, and whether to trust all certificates. Allowing all certificates + * is useful for testing self-signed certificates. + * + * @param URL url to set + * @param proxyHost proxy host to set + * @param proxyPort porxy port to set + * @param trustAllCerts whether to trust all certificates + */ + public RESTConfig(final String URL, final String proxyHost, + final int proxyPort, boolean trustAllCerts) { + + this.URL = URL; + this.proxyHost = proxyHost; + this.proxyPort = proxyPort; + this.trustAllCerts = trustAllCerts; + } + + /** + * Gets the URL to use. + * + * @return URL to use + */ + public String getURL() { + return this.URL; + } + + /** + * Gets whether to trust all certificates. + * + * @return true if to trust all certificates, false otherwise + */ + public boolean trustAllCerts() { + return this.trustAllCerts; + } + + /** + * Gets proxy host or null if proxy host has not been set. + * + * @return proxy host + */ + public String getProxyHost() { + return this.proxyHost; + } + + /** + * Gets proxy port or -1 if no proxy port has been set. + * + * @return proxy port + */ + public int getProxyPort() { + return this.proxyPort; + } +} diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTException.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTException.java new file mode 100644 index 0000000000..1c28aa1f09 --- /dev/null +++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTException.java @@ -0,0 +1,85 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * 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.rest; + +/** + * A custom exception class. + * + * @version 1.0 + * + */ +public class RESTException extends Exception { + private static final long serialVersionUID = -6874042744590915838L; + // http status code + private final int statusCode; + + // error message + private final String errorMessage; + + /** + * {@inheritDoc} + * @see Exception#RESTException(String) + */ + public RESTException(final String errorMessage) { + this(-1, errorMessage); + } + + /** + * {@inheritDoc} + * @see Exception#RESTException(Throwable) + */ + public RESTException(final Throwable cause) { + super(cause); + this.statusCode = -1; + this.errorMessage = cause.getMessage(); + } + + /** + * Creates a RESTException with the specified status code and error + * message. + * + * @param statusCode http status code + * @param errorMessage http error message + */ + public RESTException(final int statusCode, final String errorMessage) { + super(statusCode + ":" + errorMessage); + this.statusCode = statusCode; + this.errorMessage = errorMessage; + } + + /** + * Gets the status code or -1 if none has been set. + * + * @return status code + */ + public int getStatusCode() { + return this.statusCode; + } + + /** + * Gets the error message. + * + * @return error message + */ + public String getErrorMessage() { + return this.errorMessage; + } +} -- cgit 1.2.3-korg