X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=mso-api-handlers%2Fmso-api-handler-infra%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fso%2Fapihandlerinfra%2FRequestHandlerUtils.java;h=a68309f1990d58eb46e2cbfd2449ccb84f20a811;hb=01653e0c3d43d6890296924da794494d1c497c70;hp=e2cee43812bacebe5d927b10ad25a6800215c644;hpb=2c5f88c80cd62d58cdb5954d15320ca5180b3637;p=so.git diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java index e2cee43812..a68309f199 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java @@ -38,22 +38,19 @@ import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; -import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; -import org.camunda.bpm.engine.history.HistoricProcessInstance; import org.camunda.bpm.engine.impl.persistence.entity.HistoricProcessInstanceEntity; +import org.onap.logging.filter.base.ErrorCode; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.so.apihandler.camundabeans.CamundaResponse; +import org.onap.so.apihandler.common.CamundaClient; import org.onap.so.apihandler.common.CommonConstants; import org.onap.so.apihandler.common.ErrorNumbers; -import org.onap.so.apihandler.common.RequestClient; -import org.onap.so.apihandler.common.RequestClientFactory; import org.onap.so.apihandler.common.RequestClientParameter; import org.onap.so.apihandler.common.ResponseBuilder; import org.onap.so.apihandler.common.ResponseHandler; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException; -import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException; import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException; import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException; import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException; @@ -74,9 +71,7 @@ import org.onap.so.db.catalog.beans.VnfResource; import org.onap.so.db.catalog.beans.VnfResourceCustomization; import org.onap.so.db.catalog.client.CatalogDbClient; import org.onap.so.db.request.beans.InfraActiveRequests; -import org.onap.so.db.request.client.RequestsDbClient; import org.onap.so.exceptions.ValidationException; -import org.onap.so.logger.ErrorCode; import org.onap.so.logger.LogConstants; import org.onap.so.logger.MessageEnum; import org.onap.so.serviceinstancebeans.CloudConfiguration; @@ -116,9 +111,6 @@ public class RequestHandlerUtils extends AbstractRestHandler { @Autowired private Environment env; - @Autowired - private RequestClientFactory reqClientFactory; - @Autowired private ResponseBuilder builder; @@ -131,121 +123,62 @@ public class RequestHandlerUtils extends AbstractRestHandler { @Autowired private CatalogDbClient catalogDbClient; - public Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter, - String orchestrationUri, String requestScope) throws ApiException { - HttpResponse response = null; - RequestClient requestClient = null; - - try { - requestClient = reqClientFactory.getRequestClient(orchestrationUri); - response = requestClient.post(requestClientParameter); - } catch (Exception e) { - logger.error("Error posting request to BPMN", e); - ErrorLoggerInfo errorLoggerInfo = - new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError) - .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build(); - String url = requestClient != null ? requestClient.getUrl() : ""; - ClientConnectionException clientException = - new ClientConnectionException.Builder(url, HttpStatus.SC_BAD_GATEWAY, - ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build(); - updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage()); - throw clientException; - } - - if (response == null) { + @Autowired + private CamundaClient camundaClient; - ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, - ErrorCode.BusinessProcesssError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build(); - ClientConnectionException clientException = new ClientConnectionException.Builder(requestClient.getUrl(), - HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build(); - updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage()); - throw clientException; - } + @Autowired + private ResponseHandler responseHandler; - ResponseHandler respHandler = null; - int bpelStatus = 500; + protected ResponseEntity postRequest(InfraActiveRequests currentActiveReq, + RequestClientParameter requestClientParameter, String orchestrationUri) throws ApiException { try { - respHandler = new ResponseHandler(response, requestClient.getType()); - bpelStatus = respHandler.getStatus(); + return camundaClient.post(requestClientParameter, orchestrationUri); } catch (ApiException e) { - logger.error("Exception occurred", e); - ErrorLoggerInfo errorLoggerInfo = - new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError) - .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build(); - ValidateException validateException = - new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", - HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e) - .errorInfo(errorLoggerInfo).build(); - updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage()); - throw validateException; + updateStatus(currentActiveReq, Status.FAILED, e.getMessage()); + throw e; } + } - // BPEL accepted the request, the request is in progress - if (bpelStatus == HttpStatus.SC_ACCEPTED) { - ServiceInstancesResponse jsonResponse; - CamundaResponse camundaResp = respHandler.getResponse(); - - if ("Success".equalsIgnoreCase(camundaResp.getMessage())) { - try { - ObjectMapper mapper = new ObjectMapper(); - jsonResponse = mapper.readValue(camundaResp.getResponse(), ServiceInstancesResponse.class); - jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId()); - Optional selfLinkUrl = - buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId()); - if (selfLinkUrl.isPresent()) { - jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get()); - } else { - jsonResponse.getRequestReferences().setRequestSelfLink(null); - } - } catch (IOException e) { - logger.error("Exception occurred", e); - ErrorLoggerInfo errorLoggerInfo = - new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError) - .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build(); - ValidateException validateException = - new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", - HttpStatus.SC_NOT_ACCEPTABLE, ErrorNumbers.SVC_BAD_PARAMETER).cause(e) - .errorInfo(errorLoggerInfo).build(); - updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage()); - throw validateException; + public Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter, + String orchestrationUri, String requestScope) throws ApiException { + ObjectMapper mapper = new ObjectMapper(); + ResponseEntity response = postRequest(currentActiveReq, requestClientParameter, orchestrationUri); + ServiceInstancesResponse jsonResponse = null; + int bpelStatus = responseHandler.setStatus(response.getStatusCodeValue()); + try { + responseHandler.acceptedResponse(response); + CamundaResponse camundaResponse = responseHandler.getCamundaResponse(response); + String responseBody = camundaResponse.getResponse(); + if ("Success".equalsIgnoreCase(camundaResponse.getMessage())) { + jsonResponse = mapper.readValue(responseBody, ServiceInstancesResponse.class); + jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId()); + Optional selfLinkUrl = + buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId()); + if (selfLinkUrl.isPresent()) { + jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get()); + } else { + jsonResponse.getRequestReferences().setRequestSelfLink(null); } - return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), - jsonResponse, requestClientParameter.getApiVersion()); + } else { + BPMNFailureException bpmnException = + new BPMNFailureException.Builder(String.valueOf(bpelStatus) + responseBody, bpelStatus, + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).build(); + updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage()); + throw bpmnException; } + } catch (ApiException e) { + updateStatus(currentActiveReq, Status.FAILED, e.getMessage()); + throw e; + } catch (IOException e) { + logger.error("Exception caught mapping Camunda JSON response to object: ", e); + updateStatus(currentActiveReq, Status.FAILED, e.getMessage()); + throw new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", + HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e).build(); } - - List variables = new ArrayList<>(); - variables.add(bpelStatus + ""); - String camundaJSONResponseBody = respHandler.getResponseBody(); - if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty()) { - - ErrorLoggerInfo errorLoggerInfo = - new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.BusinessProcesssError) - .errorSource(requestClient.getUrl()).build(); - BPMNFailureException bpmnException = - new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus, - ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build(); - - updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage()); - - throw bpmnException; - } else { - - ErrorLoggerInfo errorLoggerInfo = - new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.BusinessProcesssError) - .errorSource(requestClient.getUrl()).build(); - - - BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus), - bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build(); - updateStatus(currentActiveReq, Status.FAILED, servException.getMessage()); - - throw servException; - } + return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse, + requestClientParameter.getApiVersion()); } - - @Override public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage) throws RequestDbFailureException { @@ -274,12 +207,18 @@ public class RequestHandlerUtils extends AbstractRestHandler { } else if (action == Action.addMembers || action == Action.removeMembers) { return (ModelType.instanceGroup.toString()); } else { - String requestScope; + String requestScope = requestScopeFromUri(requestUri);; + + if (sir.getRequestDetails() == null) { + return requestScope; + } + if (sir.getRequestDetails().getModelInfo() == null) { + return requestScope; + } if (sir.getRequestDetails().getModelInfo().getModelType() == null) { - requestScope = requestScopeFromUri(requestUri); - } else { - requestScope = sir.getRequestDetails().getModelInfo().getModelType().name(); + return requestScope; } + requestScope = sir.getRequestDetails().getModelInfo().getModelType().name(); return requestScope; } } @@ -306,8 +245,24 @@ public class RequestHandlerUtils extends AbstractRestHandler { return requestUri; } - public InfraActiveRequests duplicateCheck(Actions action, HashMap instanceIdMap, - String instanceName, String requestScope, InfraActiveRequests currentActiveReq) throws ApiException { + public void checkForDuplicateRequests(Actions action, HashMap instanceIdMap, String requestScope, + InfraActiveRequests currentActiveReq, String instanceName) throws ApiException { + InfraActiveRequests dup = null; + boolean inProgress = false; + + dup = duplicateCheck(action, instanceIdMap, instanceName, requestScope, currentActiveReq); + + if (dup != null) { + inProgress = camundaHistoryCheck(dup, currentActiveReq); + } + + if (dup != null && inProgress) { + buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName, requestScope, dup); + } + } + + public InfraActiveRequests duplicateCheck(Actions action, Map instanceIdMap, String instanceName, + String requestScope, InfraActiveRequests currentActiveReq) throws ApiException { InfraActiveRequests dup = null; try { if (!(instanceName == null && "service".equals(requestScope) && (action == Action.createInstance @@ -333,7 +288,7 @@ public class RequestHandlerUtils extends AbstractRestHandler { String requestId = duplicateRecord.getRequestId(); ResponseEntity> response = null; try { - response = camundaRequestHandler.getCamundaProcessInstanceHistory(requestId, true); + response = camundaRequestHandler.getCamundaProcessInstanceHistory(requestId, true, true, false); } catch (RestClientException e) { logger.error("Error querying Camunda for process-instance history for requestId: {}, exception: {}", requestId, e.getMessage()); @@ -347,13 +302,8 @@ public class RequestHandlerUtils extends AbstractRestHandler { if (response.getBody().isEmpty()) { updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed"); - } - for (HistoricProcessInstance instance : response.getBody()) { - if (("ACTIVE").equals(instance.getState())) { - return true; - } else { - updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed"); - } + } else { + return true; } return false; } @@ -382,7 +332,7 @@ public class RequestHandlerUtils extends AbstractRestHandler { } } - public void parseRequest(ServiceInstancesRequest sir, HashMap instanceIdMap, Actions action, + public void parseRequest(ServiceInstancesRequest sir, Map instanceIdMap, Actions action, String version, String requestJSON, Boolean aLaCarte, String requestId, InfraActiveRequests currentActiveReq) throws ValidateException, RequestDbFailureException { int reqVersion = Integer.parseInt(version.substring(1)); @@ -404,7 +354,7 @@ public class RequestHandlerUtils extends AbstractRestHandler { } public void buildErrorOnDuplicateRecord(InfraActiveRequests currentActiveReq, Actions action, - HashMap instanceIdMap, String instanceName, String requestScope, InfraActiveRequests dup) + Map instanceIdMap, String instanceName, String requestScope, InfraActiveRequests dup) throws ApiException { String instance = null; @@ -488,6 +438,9 @@ public class RequestHandlerUtils extends AbstractRestHandler { if (instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID) != null) { currentActiveReq.setInstanceGroupId(instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID)); } + if (instanceIdMap.get("pnfName") != null) { + currentActiveReq.setPnfName(instanceIdMap.get("pnfName")); + } } } @@ -593,6 +546,8 @@ public class RequestHandlerUtils extends AbstractRestHandler { requestScope = ModelType.configuration.name(); } else if (requestUri.contains(ModelType.vnf.name())) { requestScope = ModelType.vnf.name(); + } else if (requestUri.contains(ModelType.pnf.name())) { + requestScope = ModelType.pnf.name(); } else { requestScope = ModelType.service.name(); } @@ -615,7 +570,7 @@ public class RequestHandlerUtils extends AbstractRestHandler { if (infraActiveRequest != null) { request.setTenantId(infraActiveRequest.getTenantId()); request.setRequestBody(updateRequestorIdInRequestBody(infraActiveRequest, requestorId)); - request.setAicCloudRegion(infraActiveRequest.getAicCloudRegion()); + request.setCloudRegion(infraActiveRequest.getCloudRegion()); request.setRequestScope(infraActiveRequest.getRequestScope()); request.setRequestAction(infraActiveRequest.getRequestAction()); setInstanceIdAndName(infraActiveRequest, request);