diff options
Diffstat (limited to 'src/main/org/onap/ecomp/main/cloudify/CloudifyService.java')
-rw-r--r-- | src/main/org/onap/ecomp/main/cloudify/CloudifyService.java | 1004 |
1 files changed, 510 insertions, 494 deletions
diff --git a/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java b/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java index 9b39345..2818e76 100644 --- a/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java +++ b/src/main/org/onap/ecomp/main/cloudify/CloudifyService.java @@ -21,13 +21,13 @@ *******************************************************************************/ package org.onap.ecomp.main.cloudify; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; 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 java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -42,507 +42,523 @@ 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) { + private static final String UNAUTHORIZED = "Unauthorized"; + private static final String RESPONSE_CODE = "responseCode"; + private static final String BLUEPRINT_ID = "blueprint_id"; + private static final String RESPONSE_ERROR_MSG = "Error parsing the incoming DATA"; + private static final String DEPLOYMENTS = "/deployments/"; + private static final String DEPLOYMENT_ID = "deployment_id"; + private static final String PARAMETERS = "parameters"; + private static final String EXECUTIONS = "/executions/"; + private EELFLogger logger = EELFManager.getInstance().getLogger(CloudifyService.class); + + private CloudifyHelp cloudifyHelp; + + String errorLine = "Bad Request"; + + public CloudifyService() throws Exception { + cloudifyHelp = new CloudifyHelp(); + } + + /** + * Return the help for all the available API + * + * @param authString authorization + * @param userid user id + * @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 authorization + * @param userid user id + * @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(); + 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(); - } - + + 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 authString authorization + * @param userid user id + * @param request http 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 id + * @param authString authorization + * @param userid user id + * @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(RESPONSE_CODE); + 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 authString authorization + * @param userid user id + * @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(); + } + + StringBuilder check = new StringBuilder(); + String inputLine; + + try (BufferedReader in = new BufferedReader(new InputStreamReader(inputStream))) { + 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(RESPONSE_CODE); + 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) { + logger.error(e.getLocalizedMessage(), e); + return Response.status(400).entity(RESPONSE_ERROR_MSG).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 (Objects.equals("", 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 authString authorization + * @param userid user id + * @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 id + * @param authString authorization + * @param userid user id + * @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 input stream + * @param authString authorization + * @param userid user id + * @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; + + StringBuilder check = new StringBuilder(); + String inputLine; + + try (BufferedReader in = new BufferedReader(new InputStreamReader(inputStream))) { + 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) { + logger.error(e.getLocalizedMessage(), e); + return Response.status(400).entity(RESPONSE_ERROR_MSG).build(); + } + } + + /** + * Get the list of execution for a specific deployment + * + * @param authString authorization + * @param userid user id + * @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 executionId, + @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 :" + executionId); + url = EXECUTIONS + executionId; + } else { + url = EXECUTIONS + executionId + "?" + request.getQueryString(); + logger.info("Received request for list execution for query paramters = " + request.getQueryString() + + " and Execution id as :" + executionId); + } + + 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 input stream + * @param authString authorization + * @param userid user id + * @return response + */ + + @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"; + + StringBuilder check = new StringBuilder(); + String inputLine; + + try (BufferedReader in = new BufferedReader(new InputStreamReader(inputStream))) { + 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) { + logger.error(e.getLocalizedMessage(), e); + return Response.status(400).entity(RESPONSE_ERROR_MSG).build(); + } + } + + /** + * + * @param executionId execution id + * @param authString authorization + * @param userid user id + * @return response + */ + + @DELETE + @Path("/executions/{execution-id}") + @Produces(MediaType.APPLICATION_JSON) + public Response cancelExecution(@PathParam("execution-id") String executionId, @Context HttpServletRequest request, + @HeaderParam("authorization") String authString, @HeaderParam("userid") String userid) { + + logger.info("Received request for cancel execution for Execution id as :" + executionId); + + if (!APIHConfig.getInstance().validateUser(authString, userid, "POST")) { + return Response.status(401).entity(UNAUTHORIZED).build(); + } + + String url; + JSONObject outputJson = new JSONObject(); + + url = EXECUTIONS + executionId; + + try { + String[] query = request.getQueryString().split("&"); + String deploymentId = query[0].split("=")[1]; + String action = "cancel"; + if (query.length > 1) { + action = query[1].split("=")[1]; + } + outputJson.put(DEPLOYMENT_ID, deploymentId); + outputJson.put("action", action); + JSONObject result = CloudifyClient.getInstance().doPOST(url, outputJson); + logger.info("Handled cancel execution API Request"); + return handleResponse(result); + } catch (Exception e) { + logger.error(e.getLocalizedMessage(), e); + return Response.status(400).entity(RESPONSE_ERROR_MSG).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(RESPONSE_CODE); + 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(); + } } |