diff options
Diffstat (limited to 'winery/org.eclipse.winery.highlevelrestapi/src/main/java/org/eclipse/winery/highlevelrestapi/HighLevelRestApi.java')
-rw-r--r-- | winery/org.eclipse.winery.highlevelrestapi/src/main/java/org/eclipse/winery/highlevelrestapi/HighLevelRestApi.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/winery/org.eclipse.winery.highlevelrestapi/src/main/java/org/eclipse/winery/highlevelrestapi/HighLevelRestApi.java b/winery/org.eclipse.winery.highlevelrestapi/src/main/java/org/eclipse/winery/highlevelrestapi/HighLevelRestApi.java new file mode 100644 index 0000000..376d0da --- /dev/null +++ b/winery/org.eclipse.winery.highlevelrestapi/src/main/java/org/eclipse/winery/highlevelrestapi/HighLevelRestApi.java @@ -0,0 +1,163 @@ +/******************************************************************************* + * Copyright (c) 2013 University of Stuttgart. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and the Apache License 2.0 which both accompany this distribution, + * and are available at http://www.eclipse.org/legal/epl-v10.html + * and http://www.apache.org/licenses/LICENSE-2.0 + * + * Contributors: + * Uwe Breitenbücher - initial API and implementation + * Kálmán Képes - improvements + *******************************************************************************/ +package org.eclipse.winery.highlevelrestapi; + +import org.apache.commons.httpclient.HttpMethodBase; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.DeleteMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.PutMethod; + +/** + * This class wraps HTTP-Method functionality and thereby abstracts from low + * level code to simplify the usage. + */ +public class HighLevelRestApi { + + /** + * This method implements the HTTP Put Method + * + * @param uri Resource URI + * @param requestPayload Content which has to be put into the Resource + * @return ResponseCode of HTTP Interaction + */ + @SuppressWarnings("deprecation") + public static HttpResponseMessage Put(String uri, String requestPayload, String acceptHeaderValue) { + + PutMethod method = new PutMethod(uri); + // requestPayload = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + // requestPayload; + + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + method.setRequestBody(requestPayload); + + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + + // kill <?xml... in front of response + HighLevelRestApi.cleanResponseBody(responseMessage); + + return responseMessage; + } + + /** + * This method implements the HTTP Post Method + * + * @param uri Resource URI + * @param requestPayload Content which has to be posted into the Resource + * @return ResponseCode of HTTP Interaction + */ + @SuppressWarnings("deprecation") + public static HttpResponseMessage Post(String uri, String requestPayload, String acceptHeaderValue) { + + PostMethod method = null; + if (uri.contains("?")) { + System.out.println("Found query trying to split"); + String[] split = uri.split("\\?"); + System.out.println("Raw URI part: " + split[0]); + System.out.println("Raw Query part: " + split[1]); + method = new PostMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new PostMethod(uri); + ; + } + method.setRequestBody(requestPayload); + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + HighLevelRestApi.cleanResponseBody(responseMessage); + return responseMessage; + } + + /** + * This method implements the HTTP Get Method + * + * @param uri Resource URI + * @return Content represented by the Resource URI + */ + public static HttpResponseMessage Get(String uri, String acceptHeaderValue) { + System.out.println("Setting URI to: \n"); + System.out.println(uri); + GetMethod method = null; + if (uri.contains("?")) { + System.out.println("Found query trying to split"); + String[] split = uri.split("\\?"); + System.out.println("Raw URI part: " + split[0]); + System.out.println("Raw Query part: " + split[1]); + method = new GetMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new GetMethod(uri); + } + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + HighLevelRestApi.cleanResponseBody(responseMessage); + return responseMessage; + } + + private static NameValuePair[] createNameValuePairArrayFromQuery(String query) { + // example: + // csarID=Moodle.csar&serviceTemplateID={http://www.example.com/tosca/ServiceTemplates/Moodle}Moodle&nodeTemplateID={http://www.example.com/tosca/ServiceTemplates/Moodle}VmApache + System.out.println("Splitting query: " + query); + String[] pairs = query.trim().split("&"); + NameValuePair[] nameValuePairArray = new NameValuePair[pairs.length]; + int count = 0; + for (String pair : pairs) { + System.out.println("Splitting query pair: " + pair); + String[] keyValue = pair.split("="); + NameValuePair nameValuePair = new NameValuePair(); + System.out.println("Key: " + keyValue[0] + " Value: " + keyValue[1]); + nameValuePair.setName(keyValue[0]); + nameValuePair.setValue(keyValue[1]); + nameValuePairArray[count] = nameValuePair; + count++; + } + return nameValuePairArray; + } + + /** + * This method implements the HTTP Delete Method + * + * @param uri Resource URI + * @return ResponseCode of HTTP Interaction + */ + public static HttpResponseMessage Delete(String uri, String acceptHeaderValue) { + + DeleteMethod method = new DeleteMethod(uri); + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + HighLevelRestApi.cleanResponseBody(responseMessage); + return responseMessage; + } + + private static void setAcceptHeader(HttpMethodBase method, String value) { + if (!value.equals("")) { + method.setRequestHeader("Accept", value); + } else { + method.setRequestHeader("Accept", "application/xml"); + } + } + + private static void cleanResponseBody(HttpResponseMessage responseMessage) { + System.out.println("ResponseBody: \n"); + System.out.println(responseMessage.getResponseBody()); + // @formatter:off + String temp = responseMessage + .getResponseBody() + .replace( + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", + ""); + // @formatter:on + responseMessage.setResponseBody(temp); + } +} |