summaryrefslogtreecommitdiffstats
path: root/src/main/org/onap/ecomp/main/cloudify
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/org/onap/ecomp/main/cloudify')
-rw-r--r--src/main/org/onap/ecomp/main/cloudify/CloudifyClient.java343
-rw-r--r--src/main/org/onap/ecomp/main/cloudify/CloudifyHelp.java64
-rw-r--r--src/main/org/onap/ecomp/main/cloudify/CloudifyService.java548
3 files changed, 955 insertions, 0 deletions
diff --git a/src/main/org/onap/ecomp/main/cloudify/CloudifyClient.java b/src/main/org/onap/ecomp/main/cloudify/CloudifyClient.java
new file mode 100644
index 0000000..78f4008
--- /dev/null
+++ b/src/main/org/onap/ecomp/main/cloudify/CloudifyClient.java
@@ -0,0 +1,343 @@
+/*******************************************************************************
+ * =============LICENSE_START=========================================================
+ *
+ * =================================================================================
+ * 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *******************************************************************************/
+package org.onap.ecomp.main.cloudify;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.ecomp.main.APIHConfig;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import org.apache.commons.codec.binary.Base64;
+
+public class CloudifyClient {
+
+ private static CloudifyClient client = null;
+ final static EELFLogger logger = EELFManager.getInstance().getLogger(CloudifyClient.class);
+ HttpURLConnection connection = null;
+
+ public static CloudifyClient getInstance() {
+ if (client == null)
+ return new CloudifyClient();
+ else
+ return client;
+ }
+
+ public JSONObject doGET(String urlString) {
+
+ URL url;
+ JSONObject returnObj = null;
+ try {
+ urlString = getManagerID() + urlString;
+ url = new URL(urlString);
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("GET");
+ connection.setDoOutput(true);
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(10000);
+ connection.setRequestProperty("Authorization", getAuthString());
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ connection.getInputStream()));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+
+ // get the Response code from the HTTP
+ int responseCode = connection.getResponseCode();
+
+ returnObj = new JSONObject();
+ returnObj.put("responseMsg",check.toString());
+ returnObj.put("responseCode", responseCode);
+ returnObj.put("timestamp", getCurrentDataAndTime());
+ return returnObj;
+
+ } catch (Exception e) {
+ logger.error("Exception found : " + e.getLocalizedMessage());
+ returnObj = new JSONObject();
+ String responseMsg = "";
+ int responseCode;
+ try {
+ responseMsg = connection.getResponseMessage();
+ JSONObject errorSteam = getErrorSteam();
+ if (errorSteam != null)
+ responseMsg = errorSteam.optString("message");
+ responseCode = connection.getResponseCode();
+ returnObj.put("responseMsg", responseMsg);
+ returnObj.put("responseCode", responseCode);
+ } catch (Exception e1) {
+ responseMsg = "Some Exception while retreiving the response";
+ responseCode = 500;
+ }
+ return returnObj;
+ }finally{
+ connection.disconnect();
+ }
+ }
+
+ public JSONObject doPOST(String urlString, JSONObject outputJSON) {
+ URL url;
+ JSONObject returnObj = null;
+ try {
+ urlString = getManagerID() + urlString;
+ url = new URL(urlString);
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("POST");
+ connection.setDoOutput(true);
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(10000);
+ connection.setRequestProperty("Authorization", getAuthString());
+
+ connection.setRequestProperty("Content-Type", "application/json");
+ OutputStreamWriter out = new OutputStreamWriter(
+ connection.getOutputStream());
+ out.write(outputJSON.toString());
+ out.close();
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ connection.getInputStream()));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+
+ // get the Response code from the HTTP
+ int responseCode = connection.getResponseCode();
+
+ returnObj = new JSONObject();
+ returnObj.put("responseMsg",check.toString());
+ returnObj.put("responseCode", responseCode);
+ returnObj.put("timestamp", getCurrentDataAndTime());
+
+ return returnObj;
+
+ } catch (Exception e) {
+ logger.error("Exception found : " + e.getLocalizedMessage());
+ returnObj = new JSONObject();
+ String responseMsg = "";
+ int responseCode;
+ try {
+ responseMsg = connection.getResponseMessage();
+ JSONObject errorSteam = getErrorSteam();
+ if (errorSteam != null)
+ responseMsg = errorSteam.optString("message");
+ responseCode = connection.getResponseCode();
+ returnObj.put("responseMsg", responseMsg);
+ returnObj.put("responseCode", responseCode);
+ } catch (Exception e1) {
+ responseMsg = "Some Exception while retreiving the response";
+ responseCode = 500;
+ }
+ return returnObj;
+ } finally{
+ connection.disconnect();
+ }
+
+ }
+
+ public JSONObject doPUT(String urlString, JSONObject outputJson) {
+
+ URL url;
+ JSONObject returnObj = null;
+ try {
+ urlString = getManagerID() + urlString;
+ url = new URL(urlString);
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("PUT");
+ connection.setDoOutput(true);
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(10000);
+ connection.setRequestProperty("Authorization", getAuthString());
+
+ if (outputJson != null) {
+ connection.setRequestProperty("Content-Type",
+ "application/json");
+ OutputStreamWriter out = new OutputStreamWriter(
+ connection.getOutputStream());
+ out.write(outputJson.toString());
+ out.close();
+ }
+
+ System.out.println(connection.getResponseMessage());
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ connection.getInputStream()));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+
+ // get the Response code from the HTTP
+ int responseCode = connection.getResponseCode();
+
+ returnObj = new JSONObject();
+ returnObj.put("responseMsg",check.toString());
+ returnObj.put("responseCode", responseCode);
+ returnObj.put("timestamp", getCurrentDataAndTime());
+
+ return returnObj;
+
+ } catch (Exception e) {
+ logger.error("Exception found : " + e.getLocalizedMessage());
+ returnObj = new JSONObject();
+ String responseMsg = "";
+ int responseCode;
+ try {
+ responseMsg = connection.getResponseMessage();
+ JSONObject errorSteam = getErrorSteam();
+ if (errorSteam != null)
+ responseMsg = errorSteam.optString("message");
+ responseCode = connection.getResponseCode();
+ returnObj.put("responseMsg", responseMsg);
+ returnObj.put("responseCode", responseCode);
+ } catch (Exception e1) {
+ responseMsg = "Some Exception while retreiving the response";
+ responseCode = 500;
+ }
+ return returnObj;
+ }finally{
+ connection.disconnect();
+ }
+ }
+
+ public JSONObject doDELETE(String urlString) {
+ URL url;
+ JSONObject returnObj = null;
+ try {
+ urlString = getManagerID() + urlString;
+ url = new URL(urlString);
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("DELETE");
+ connection.setDoOutput(true);
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(10000);
+ connection.setRequestProperty("Authorization", getAuthString());
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ connection.getInputStream()));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+
+ // get the Response code from the HTTP
+ int responseCode = connection.getResponseCode();
+
+ returnObj = new JSONObject();
+ returnObj.put("responseMsg",check.toString());
+ returnObj.put("responseCode", responseCode);
+ returnObj.put("timestamp", getCurrentDataAndTime());
+
+ return returnObj;
+
+ } catch (Exception e) {
+ logger.error("Exception found : " + e.getLocalizedMessage());
+ returnObj = new JSONObject();
+ String responseMsg = "";
+ int responseCode;
+ try {
+ responseMsg = connection.getResponseMessage();
+ JSONObject errorSteam = getErrorSteam();
+ if (errorSteam != null)
+ responseMsg = errorSteam.optString("message");
+ responseCode = connection.getResponseCode();
+ returnObj.put("responseMsg", responseMsg);
+ returnObj.put("responseCode", responseCode);
+ } catch (Exception e1) {
+ responseMsg = "Some Exception while retreiving the response";
+ responseCode = 500;
+ }
+ return returnObj;
+ }finally{
+ connection.disconnect();
+ }
+ }
+
+ private String getCurrentDataAndTime() {
+ DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ Date date = new Date();
+ return dateFormat.format(date);
+ }
+
+ private String getManagerID() {
+ String manager_ip = "";
+ String api_version = "";
+ manager_ip = APIHConfig.getInstance().getConfigObject().optString("manager_ip");
+ api_version = APIHConfig.getInstance().getConfigObject().optString("api_version");
+ return "http://" + manager_ip + "/api/" + api_version;
+ }
+
+ private String getManagerUsername() {
+ String manager_username = "";
+ manager_username = APIHConfig.getInstance().getConfigObject().optString("manager_username");
+ return manager_username;
+ }
+
+ private String getManagerPassword() {
+ String manager_password = "";
+ manager_password = APIHConfig.getInstance().getConfigObject().optString("manager_password");
+ return manager_password;
+ }
+
+ private String getAuthString(){
+ String username = getManagerUsername();
+ String password = getManagerPassword();
+ String authString = username + ":" + password;
+ byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
+ String authStringEnc = new String(authEncBytes);
+ return "Basic " + authStringEnc;
+ }
+ private JSONObject getErrorSteam() {
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ connection.getErrorStream()));
+ StringBuilder check = new StringBuilder();
+ try {
+
+ String inputLine;
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+ } catch (Exception ex) {
+
+ }
+
+ try {
+ return new JSONObject(check.toString());
+ } catch (JSONException e) {
+ return null;
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/main/org/onap/ecomp/main/cloudify/CloudifyHelp.java b/src/main/org/onap/ecomp/main/cloudify/CloudifyHelp.java
new file mode 100644
index 0000000..55d8207
--- /dev/null
+++ b/src/main/org/onap/ecomp/main/cloudify/CloudifyHelp.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * =============LICENSE_START=========================================================
+ *
+ * =================================================================================
+ * 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *******************************************************************************/
+package org.onap.ecomp.main.cloudify;
+
+import java.io.IOException;
+import java.util.Scanner;
+import java.io.*;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class CloudifyHelp {
+
+ final static EELFLogger logger = EELFManager.getInstance().getLogger(CloudifyHelp.class);
+
+ public String getHelp() {
+ return generateHelpJSON();
+ }
+
+ private String generateHelpJSON() {
+
+ StringBuilder result = new StringBuilder("");
+ ClassLoader classLoader = getClass().getClassLoader();
+ File file = new File(classLoader.getResource("cloudifyhelp.txt")
+ .getFile());
+
+ try (Scanner scanner = new Scanner(file)) {
+
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ result.append(line).append("\n");
+ }
+
+ scanner.close();
+
+ } catch (IOException e) {
+ logger.error("Help File not found in provided location");
+ return null;
+ }
+
+ return result.toString();
+
+ }
+
+}
diff --git a/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java b/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java
new file mode 100644
index 0000000..9b39345
--- /dev/null
+++ b/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java
@@ -0,0 +1,548 @@
+/*******************************************************************************
+ * =============LICENSE_START=========================================================
+ *
+ * =================================================================================
+ * 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *******************************************************************************/
+package org.onap.ecomp.main.cloudify;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.ecomp.main.APIHConfig;
+import org.onap.ecomp.persistence.EcompBlueprintPersistence;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+
+@Path("/")
+public class CloudifyService {
+
+ EELFLogger logger = EELFManager.getInstance().getLogger(CloudifyService.class);
+
+ CloudifyHelp cloudifyHelp;
+
+ String errorLine = "Bad Request";
+
+ public CloudifyService() throws Exception {
+ cloudifyHelp = new CloudifyHelp();
+ }
+
+ /**
+ * Return the help for all the available API
+ *
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @GET
+ @Path("")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getdefaultHelp(@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+ return Response.status(200).entity(" API server is Alive!!")
+ .build();
+ }
+ /**
+ * Return the help for all the available API
+ *
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @GET
+ @Path("/help")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getHelp(@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ /*if(!APIHConfig.getInstance().validateUser(authString,userid,"GET")){
+ return Response.status(401).entity("Unauthorized").build();
+ }*/
+
+ String result = cloudifyHelp.getHelp();
+ logger.info("Handled get help API Request");
+ return Response.status(200).entity(result)
+ .build();
+
+ }
+
+
+ /**
+ * Get the list or a specific blueprint which are already uploaded
+ * @param id
+ * @param authString
+ * @param userid
+ * @param request
+ * @return Response
+ */
+
+ @GET
+ @Path("/blueprints")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getBlueprints(@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid,@Context HttpServletRequest request) {
+
+ String url = "";
+ //validate the user and the application for GET request
+
+ if (request.getQueryString() == null) {
+ logger.info("Received request for all blueprints");
+ url = "/blueprints";
+ } else {
+ logger.info("Received request for blueprint with query parameters = " + request.getQueryString());
+ url = "/blueprints?"+ request.getQueryString();
+ }
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"GET")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ JSONObject result = CloudifyClient.getInstance().doGET(url);
+ logger.info("Handled get blueprints API Request");
+ return handleResponse(result);
+
+ }
+
+ /**
+ * DELETE a blueprint
+ *
+ * @param id
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @DELETE
+ @Path("/blueprints/{id}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response deleteBlueprints(@PathParam("id") String id,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ String url = "";
+ logger.info("Received request for deleting blueprint with ID = " + id);
+ //validate the user and application for DELETE operation
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"DELETE")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ url = "/blueprints/" + id;
+
+ JSONObject result = CloudifyClient.getInstance().doDELETE(url);
+ int responseCode = result.optInt("responseCode");
+ if(responseCode == 200 ){
+ logger.info("Deleting the blueprint from Inventory");
+ if(new EcompBlueprintPersistence().deleteBlueprint(id))
+ logger.info("Deleted the blueprint from Inventory");
+ }
+ logger.info("Handled delete blueprint API Request");
+ return handleResponse(result);
+
+ }
+
+ /**
+ * Upload a new Blueprint
+ * @param id
+ * @param blueprintfileName
+ * @param zipFileURL
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @POST
+ @Path("/blueprints")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response uploadBlueprints(InputStream inputStream,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ String url = "";
+ logger.info("Received request for uploading blueprint");
+
+ //validate the user and application for PUT operation
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"PUT")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+
+ try {
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+
+ JSONObject incomingJSON = new JSONObject(check.toString());
+ if(incomingJSON.optString("blueprint_id","").equals(""))
+ return Response.status(400).entity("blueprint_id is mandatory in payload").build();
+
+ url = "/blueprints/" + incomingJSON.optString("blueprint_id","") + "?application_file_name="
+ + incomingJSON.optString("blueprint_filename","") + "&blueprint_archive_url="
+ + incomingJSON.optString("zip_url","");
+
+ JSONObject result = CloudifyClient.getInstance().doPUT(url,null);
+ logger.info("Handled uploading blueprint API Request");
+ int responseCode = result.optInt("responseCode");
+ if(responseCode == 201){
+ logger.info("Pushing the blueprint in DB");
+ new EcompBlueprintPersistence().saveBlueprint(incomingJSON.optString("blueprint_id",""),incomingJSON.optString("blueprint_filename",""),incomingJSON.optString("zip_url",""));
+ }
+ return handleResponse(result);
+ }catch(Exception e){
+ e.printStackTrace();
+ return Response.status(400).entity("Error parsing the incoming DATA").build();
+ }
+
+ }
+
+ @GET
+ @Path("/viewblueprints")
+ public Response fetchBlueprintByID(@QueryParam("id") String id,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ // validate the user and application for PUT operation
+ if (!APIHConfig.getInstance().validateUser(authString, userid, "PUT")) {
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ if(id == "")
+ return Response.status(400).entity("id parameter is must for fetching the blueprint").build();
+ logger.info("Fetching the blueprint with id = " + id);
+ EcompBlueprintPersistence blueprintPersistence = new EcompBlueprintPersistence();
+ try {
+ File returnFile = blueprintPersistence.fetchBlueprint(id);
+ if (returnFile == null) {
+ ResponseBuilder rbuilder = Response.status(Status.OK);
+ String logMessage = "No such blueprint found in the inventory.";
+ logger.info(logMessage);
+ return rbuilder
+ .type(MediaType.TEXT_PLAIN)
+ .entity("")
+ .build();
+ } else {
+ ResponseBuilder rbuilder = Response.status(Status.OK);
+ logger.info("Blueprint found. Returing the yaml file");
+ return rbuilder.type(MediaType.APPLICATION_OCTET_STREAM)
+ .entity(returnFile).build();
+ }
+ } catch (Exception E) {
+ logger.info("Exception in handling the fetch command =" + E.getMessage());
+ return Response.status(500)
+ .entity("Error fetching the blueprint resource").build();
+ }
+ }
+
+
+ /**
+ * Get the deployment list or specific deployment
+ * @param id
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @GET
+ @Path("/deployments")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDeployments(@Context HttpServletRequest request,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ String url = "";
+ if (request.getQueryString() == null) {
+ logger.info("Received request for all deployments");
+ url = "/deployments";
+ } else {
+ logger.info("Received request for deployment with query = " + request.getQueryString());
+ url = "/deployments?"+request.getQueryString();
+ }
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"GET")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ JSONObject result = CloudifyClient.getInstance().doGET(url);
+ logger.info("Handled get deployment API Request");
+ return handleResponse(result);
+ }
+
+ /**
+ * DELETE a deployment
+ * @param id
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+
+ @DELETE
+ @Path("/deployments/{id}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response deleteDeployments(@Context HttpServletRequest request,@PathParam("id") String id,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ logger.info("Received request for deleting deployment with ID = " + id);
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"DELETE")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ String url = "";
+ url = "/deployments/" + id;
+ if(request.getQueryString() != null)
+ url = "/deployments/" + id + "?" + request.getQueryString();
+
+ JSONObject result = CloudifyClient.getInstance().doDELETE(url);
+ logger.info("Handled delete deployment API Request");
+ return handleResponse(result);
+ }
+
+ /**
+ * Create a new deployment
+ * @param inputStream
+ * @param deploymentID
+ * @param authString
+ * @param userid
+ * @return JSONObject
+ */
+ @POST
+ @Path("/deployments")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response createDeployment(InputStream inputStream,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ logger.info("Received request for creating deployment");
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"PUT")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ String url = "";
+ JSONObject inputJSon;
+ JSONObject outputJSON;
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ try {
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+ inputJSon = new JSONObject(check.toString());
+
+ if(inputJSon.optString("deployment_id", "").equals(""))
+ return Response.status(400).entity("deployment_id is mandatory in payload").build();
+ String blueprintID = inputJSon.optString("blueprint_id", "");
+ JSONObject parameters = inputJSon.optJSONObject("parameters");
+
+ outputJSON = new JSONObject();
+ outputJSON.put("blueprint_id", blueprintID);
+ outputJSON.put("inputs", parameters);
+ url = "/deployments/" + inputJSon.optString("deployment_id", "");
+ JSONObject result = CloudifyClient.getInstance().doPUT(url,outputJSON);
+ logger.info("Handled create deployment API Request");
+ return handleResponse(result);
+ } catch (Exception e) {
+ return Response.status(400).entity("Error parsing the incoming DATA").build();
+ }
+ }
+
+ /**
+ * Get the list of execution for a specific deployment
+ * @param deployment_id
+ * @param authString
+ * @param userid
+ * @return
+ */
+ @GET
+ @Path("/executions")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getExecutionForDeployment(
+ @Context HttpServletRequest request,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ String url = "";
+
+ if (request.getQueryString() == null) {
+ logger.info("Received request for list execution");
+ url = "/executions";
+ } else {
+ logger.info("Received request for list execution with query paramters = " + request.getQueryString());
+ url = "/executions?"+request.getQueryString();
+ }
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"GET")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ JSONObject result = CloudifyClient.getInstance().doGET(url);
+ logger.info("Handled get Execution API Request");
+ return handleResponse(result);
+ }
+
+ @GET
+ @Path("/executions/{id}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getExecutionWithID(
+ @Context HttpServletRequest request,@PathParam("id") String execution_id,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ String url = "";
+ if(request.getQueryString() == null){
+ logger.info("Received request for list execution for Execution id as :" + execution_id);
+ url = "/executions/"+ execution_id;
+ }
+ else{
+ url = "/executions/"+ execution_id + "?" + request.getQueryString();
+ logger.info("Received request for list execution for query paramters = " + request.getQueryString() + " and Execution id as :" + execution_id);
+ }
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"GET")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ JSONObject result = CloudifyClient.getInstance().doGET(url);
+ logger.info("Handled get specific execution API Request");
+ return handleResponse(result);
+ }
+
+ /**
+ * Start an execution
+ * @param inputStream
+ * @param authString
+ * @param userid
+ * @return
+ */
+
+ @POST
+ @Path("/executions")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response startExecution(InputStream inputStream,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ logger.info("Received request for starting an execution");
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"POST")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ String url = "";
+ JSONObject outputJson = new JSONObject();
+
+
+ url = "/executions";
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+ StringBuilder check = new StringBuilder();
+ String inputLine;
+
+ try {
+ while ((inputLine = in.readLine()) != null)
+ check.append(inputLine);
+ JSONObject inputJSon = new JSONObject(check.toString());
+ String deploymentID = inputJSon.optString("deployment_id","");
+ String workflow = inputJSon.optString("workflow_name","");
+ String customParameter = inputJSon.optString("allow_custom_parameter","false");
+ String force = inputJSon.optString("force","false");
+ JSONArray parameters = inputJSon.optJSONArray("parameters");
+
+ outputJson.put("deployment_id", deploymentID);
+ outputJson.put("workflow_id", workflow);
+ outputJson.put("allow_custom_parameters", customParameter);
+ outputJson.put("force", force);
+ outputJson.put("parameters", parameters);
+
+ logger.info("output JSON is " + outputJson.toString());
+ JSONObject result = CloudifyClient.getInstance().doPOST(url,outputJson);
+ logger.info("Handled start execution API Request");
+ return handleResponse(result);
+ } catch (Exception e) {
+ return Response.status(400).entity("Error parsing the incoming DATA").build();
+ }
+
+ }
+
+ /**
+ *
+ * @param execution_id
+ * @param inputStream
+ * @param authString
+ * @param userid
+ * @return
+ */
+
+ @DELETE
+ @Path("/executions/{execution-id}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response cancelExecution(@PathParam("execution-id") String execution_id,@Context HttpServletRequest request,@HeaderParam("authorization") String authString,@HeaderParam("userid") String userid) {
+
+ logger.info("Received request for cancel execution for Execution id as :" + execution_id);
+
+ if(!APIHConfig.getInstance().validateUser(authString,userid,"POST")){
+ return Response.status(401).entity("Unauthorized").build();
+ }
+
+ String url = "";
+ JSONObject outputJson = new JSONObject();
+
+ url = "/executions/"+ execution_id;
+
+ try {
+ String[] query = request.getQueryString().split("&");
+ String deployment_id = query[0].split("=")[1];
+ String action = "cancel";
+ if(query.length>1)
+ action = query[1].split("=")[1];
+ outputJson.put("deployment_id", deployment_id);
+ outputJson.put("action", action);
+ JSONObject result = CloudifyClient.getInstance().doPOST(url,outputJson);
+ logger.info("Handled cancel execution API Request");
+ return handleResponse(result);
+ } catch (Exception e) {
+ return Response.status(400).entity("Error parsing the incoming DATA").build();
+ }
+ }
+
+ private Response handleResponse(JSONObject result) {
+
+ if(result == null){
+ return Response.status(500).entity("Internal Server Error – We had a problem with our server. Try again later.").build();
+ }
+ int responseCode = result.optInt("responseCode");
+ String responseMsg = result.optString("responseMsg", "");
+
+ if(responseCode >= 300)
+ {
+ logger.info("Response code is: " + responseCode + " and Error msg is :" + responseMsg);
+ }
+
+ return Response.status(responseCode).entity(responseMsg).build();
+ }
+
+}