diff options
author | 2017-01-31 11:40:03 +0100 | |
---|---|---|
committer | 2017-01-31 12:59:33 +0100 | |
commit | 025301d08b061482c1f046d562bf017c8cbcfe8d (patch) | |
tree | 68a2a549736c9bf0f7cd4e71c76e40ef7e2606f2 /mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common | |
parent | 2754ad52f833278a5c925bd788a16d1dce16a598 (diff) |
Initial OpenECOMP MSO commit
Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d
Signed-off-by: ChrisC <cc697w@intl.att.com>
Diffstat (limited to 'mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common')
12 files changed, 1228 insertions, 0 deletions
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java new file mode 100644 index 0000000000..511b874e15 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java @@ -0,0 +1,95 @@ +/*- + * ============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.apihandler.common; + +import java.io.IOException; + +import javax.ws.rs.core.MediaType; +import javax.xml.bind.DatatypeConverter; + +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; + +import org.openecomp.mso.logger.MsoLogger; + +public class BPELRestClient extends RequestClient { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + public BPELRestClient () { + super (CommonConstants.BPEL); + } + + @Override + public HttpResponse post (String bpelReqXML, + String requestId, + String requestTimeout, + String schemaVersion, + String serviceInstanceId, + String action) throws ClientProtocolException, IOException { + String encryptedCredentials = null; + HttpPost post = new HttpPost (url); + msoLogger.debug ("BPEL url is: " + url); + StringEntity input = new StringEntity (bpelReqXML); + input.setContentType (MediaType.TEXT_XML); + if (props != null) { + encryptedCredentials = props.getProperty (CommonConstants.BPEL_AUTH,null); + if (encryptedCredentials != null) { + String userCredentials = getEncryptedPropValue (encryptedCredentials, + CommonConstants.DEFAULT_BPEL_AUTH, + CommonConstants.ENCRYPTION_KEY); + if (userCredentials != null) { + post.addHeader ("Authorization", + "Basic " + new String (DatatypeConverter.printBase64Binary (userCredentials.getBytes ()))); + } + } + } + post.addHeader (CommonConstants.REQUEST_ID_HEADER, requestId); + post.addHeader (CommonConstants.REQUEST_TIMEOUT_HEADER, requestTimeout); + post.addHeader (CommonConstants.SCHEMA_VERSION_HEADER, schemaVersion); + if (serviceInstanceId != null) { + post.addHeader (CommonConstants.SERVICE_INSTANCE_ID_HEADER, serviceInstanceId); + } + if (action != null) { + post.addHeader (CommonConstants.ACTION_HEADER, action); + } + post.setEntity (input); + HttpResponse response = client.execute (post); + msoLogger.debug ("bpel response " + response); + return response; + } + + @Override + public HttpResponse post (String bpelReqXML) { + return null; + } + + @Override + public HttpResponse post(String requestId, boolean isBaseVfModule, + int recipeTimeout, String requestAction, String serviceInstanceId, + String vnfId, String vfModuleId, String volumeGroupId, String networkId, + String serviceType, String vnfType, String vfModuleType, String networkType, + String requestDetails) { + return null; + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java new file mode 100644 index 0000000000..dd83d24c9e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java @@ -0,0 +1,313 @@ +/*- + * ============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.apihandler.common; + + +import org.openecomp.mso.apihandler.camundabeans.*; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig; + +import javax.xml.bind.DatatypeConverter; +import java.io.IOException; + +public class CamundaClient extends RequestClient{ + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH); + + public CamundaClient() { + super(CommonConstants.CAMUNDA); + } + + + @Override + public HttpResponse post(String camundaReqXML, String requestId, + String requestTimeout, String schemaVersion, String serviceInstanceId, String action) + throws ClientProtocolException, IOException{ + HttpPost post = new HttpPost(url); + msoLogger.debug("Camunda url is: "+ url); + String jsonReq = wrapRequest(camundaReqXML, requestId, serviceInstanceId, requestTimeout, schemaVersion); + + StringEntity input = new StringEntity(jsonReq); + input.setContentType(CommonConstants.CONTENT_TYPE_JSON); + + String encryptedCredentials = null; + if(props!=null){ + encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH,null); + if(encryptedCredentials != null){ + String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY); + if(userCredentials != null){ + post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes()))); + } + } + } + + post.setEntity(input); + HttpResponse response = client.execute(post); + + return response; + } + + @Override + public HttpResponse post(String jsonReq) + throws ClientProtocolException, IOException{ + HttpPost post = new HttpPost(url); + msoLogger.debug("Camunda url is: "+ url); + //String jsonReq = wrapRequest(camundaReqXML, requestId, serviceInstanceId, requestTimeout, schemaVersion); + + StringEntity input = new StringEntity(jsonReq); + input.setContentType(CommonConstants.CONTENT_TYPE_JSON); + + String encryptedCredentials = null; + if(props!=null){ + encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH,null); + if(encryptedCredentials != null){ + String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY); + if(userCredentials != null){ + post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes()))); + } + } + } + + post.setEntity(input); + HttpResponse response = client.execute(post); + + return response; + } + + @Override + public HttpResponse post(String requestId, boolean isBaseVfModule, + int recipeTimeout, String requestAction, String serviceInstanceId, + String vnfId, String vfModuleId, String volumeGroupId, String networkId, + String serviceType, String vnfType, String vfModuleType, String networkType, + String requestDetails) + throws ClientProtocolException, IOException{ + HttpPost post = new HttpPost(url); + msoLogger.debug("Camunda url is: "+ url); + String jsonReq = wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction, + serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, + serviceType, vnfType, vfModuleType, networkType, requestDetails); + + StringEntity input = new StringEntity(jsonReq); + input.setContentType(CommonConstants.CONTENT_TYPE_JSON); + + String encryptedCredentials = null; + if(props!=null){ + encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH,null); + if(encryptedCredentials != null){ + String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY); + if(userCredentials != null){ + post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes()))); + } + } + } + + post.setEntity(input); + HttpResponse response = client.execute(post); + + return response; + } + + private String wrapRequest(String reqXML, String requestId, String serviceInstanceId, String requestTimeout, String schemaVersion){ + String jsonReq = null; + if(reqXML == null){ + reqXML =""; + } + if(requestTimeout == null){ + requestTimeout =""; + } + if(schemaVersion == null){ + schemaVersion = ""; + } + + + try{ + CamundaRequest camundaRequest = new CamundaRequest(); + CamundaInput camundaInput = new CamundaInput(); + CamundaInput host = new CamundaInput(); + CamundaInput schema = new CamundaInput(); + CamundaInput reqid = new CamundaInput(); + CamundaInput svcid = new CamundaInput(); + CamundaInput timeout = new CamundaInput(); + camundaInput.setValue(reqXML); + host.setValue(parseURL()); + schema.setValue(schemaVersion); + reqid.setValue(requestId); + svcid.setValue(serviceInstanceId); + timeout.setValue(requestTimeout); + camundaRequest.setServiceInput(camundaInput); + camundaRequest.setHost(host); + camundaRequest.setReqid(reqid); + camundaRequest.setSvcid(svcid); + camundaRequest.setSchema(schema); + camundaRequest.setTimeout(timeout); + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); + + jsonReq = mapper.writeValueAsString(camundaRequest); + msoLogger.debug("request body is " + jsonReq); + }catch(Exception e){ + msoLogger.error(MessageEnum.APIH_WARP_REQUEST, "Camunda", "wrapRequest", MsoLogger.ErrorCode.BusinessProcesssError, "Error in APIH Warp request", e); + } + return jsonReq; + } + + private String wrapVIDRequest(String requestId, boolean isBaseVfModule, + int recipeTimeout, String requestAction, String serviceInstanceId, + String vnfId, String vfModuleId, String volumeGroupId, String networkId, + String serviceType, String vnfType, String vfModuleType, String networkType, + String requestDetails){ + String jsonReq = null; + if(requestId == null){ + requestId =""; + } + if(requestAction == null){ + requestAction =""; + } + if(serviceInstanceId == null){ + serviceInstanceId =""; + } + if(vnfId == null){ + vnfId =""; + } + if(vfModuleId == null){ + vfModuleId =""; + } + if(volumeGroupId == null){ + volumeGroupId =""; + } + if(networkId == null){ + networkId =""; + } + if(serviceType == null){ + serviceType =""; + } + if(vnfType == null){ + vnfType =""; + } + if(vfModuleType == null){ + vfModuleType =""; + } + if(networkType == null){ + networkType =""; + } + if(requestDetails == null){ + requestDetails =""; + } + + + + try{ + CamundaVIDRequest camundaRequest = new CamundaVIDRequest(); + BpmnRequest bpmnRequest = new BpmnRequest(); + CamundaInput serviceInput = new CamundaInput(); + CamundaInput host = new CamundaInput(); + CamundaInput requestIdInput= new CamundaInput(); + CamundaBooleanInput isBaseVfModuleInput = new CamundaBooleanInput(); + CamundaIntegerInput recipeTimeoutInput = new CamundaIntegerInput(); + CamundaInput requestActionInput = new CamundaInput(); + CamundaInput serviceInstanceIdInput = new CamundaInput(); + CamundaInput vnfIdInput = new CamundaInput(); + CamundaInput vfModuleIdInput = new CamundaInput(); + CamundaInput volumeGroupIdInput = new CamundaInput(); + CamundaInput networkIdInput = new CamundaInput(); + CamundaInput serviceTypeInput = new CamundaInput(); + CamundaInput vnfTypeInput = new CamundaInput(); + CamundaInput vfModuleTypeInput = new CamundaInput(); + CamundaInput networkTypeInput = new CamundaInput(); + + host.setValue(parseURL()); + requestIdInput.setValue(requestId); + isBaseVfModuleInput.setValue(isBaseVfModule); + recipeTimeoutInput.setValue(recipeTimeout); + requestActionInput.setValue(requestAction); + serviceInstanceIdInput.setValue(serviceInstanceId); + vnfIdInput.setValue(vnfId); + vfModuleIdInput.setValue(vfModuleId); + volumeGroupIdInput.setValue(volumeGroupId); + networkIdInput.setValue(networkId); + serviceTypeInput.setValue(serviceType); + vnfTypeInput.setValue(vnfType); + vfModuleTypeInput.setValue(vfModuleType); + networkTypeInput.setValue(networkType); + + bpmnRequest.setRequestId(requestIdInput); + bpmnRequest.setIsBaseVfModule(isBaseVfModuleInput); + bpmnRequest.setRecipeTimeout(recipeTimeoutInput); + bpmnRequest.setRequestAction(requestActionInput); + bpmnRequest.setServiceInstanceId(serviceInstanceIdInput); + bpmnRequest.setVnfId(vnfIdInput); + bpmnRequest.setVfModuleId(vfModuleIdInput); + bpmnRequest.setVolumeGroupId(volumeGroupIdInput); + bpmnRequest.setNetworkId(networkIdInput); + bpmnRequest.setServiceType(serviceTypeInput); + bpmnRequest.setVnfType(vnfTypeInput); + bpmnRequest.setVfModuleType(vfModuleTypeInput); + bpmnRequest.setNetworkType(networkTypeInput); + //bpmnRequest.setRequestDetails(requestDetailsInput); + + serviceInput.setValue(requestDetails); + camundaRequest.setServiceInput(serviceInput); + camundaRequest.setHost(host); + camundaRequest.setRequestId(requestIdInput); + camundaRequest.setAttMsoRequestId(requestIdInput); + camundaRequest.setIsBaseVfModule(isBaseVfModuleInput); + camundaRequest.setRecipeTimeout(recipeTimeoutInput); + camundaRequest.setRequestAction(requestActionInput); + camundaRequest.setServiceInstanceId(serviceInstanceIdInput); + camundaRequest.setVnfId(vnfIdInput); + camundaRequest.setVfModuleId(vfModuleIdInput); + camundaRequest.setVolumeGroupId(volumeGroupIdInput); + camundaRequest.setNetworkId(networkIdInput); + camundaRequest.setServiceType(serviceTypeInput); + camundaRequest.setVnfType(vnfTypeInput); + camundaRequest.setVfModuleType(vfModuleTypeInput); + camundaRequest.setNetworkType(networkTypeInput); + + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); + + jsonReq = mapper.writeValueAsString(camundaRequest); + msoLogger.debug("request body is " + jsonReq); + }catch(Exception e){ + msoLogger.error(MessageEnum.APIH_WARP_REQUEST, "Camunda", "wrapVIDRequest", MsoLogger.ErrorCode.BusinessProcesssError, "Error in APIH Warp request", e); + } + return jsonReq; + } + + private String parseURL(){ + String[] parts = url.split(":"); + String host = ""; + if(parts.length>=2){ + host = parts[1]; + if(host.length()>2){ + host = host.substring(2); + } + } + return host; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java new file mode 100644 index 0000000000..3a9ad60ac2 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java @@ -0,0 +1,68 @@ +/*- + * ============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.apihandler.common; + + +public final class CommonConstants { + + public static final String DEFAULT_BPEL_AUTH = "admin:admin"; + public static final String ENCRYPTION_KEY = "aa3871669d893c7fb8abbcda31b88b4f"; + + public static final String REQUEST_ID_HEADER = "att-mso-request-id"; + public static final String REQUEST_TIMEOUT_HEADER = "att-mso-service-request-timeout"; + public static final String SCHEMA_VERSION_HEADER = "att-mso-schema-version"; + public static final String SERVICE_INSTANCE_ID_HEADER = "att-mso-service-instance-id"; + public static final String ACTION_HEADER = "att-mso-action"; + + public static final String CAMUNDA_SERVICE_INPUT = "bpmnRequest"; + public static final String CAMUNDA_ROOT_INPUT = "variables"; + public static final String CONTENT_TYPE_JSON= "application/json"; + public static final String CAMUNDA_TYPE = "type"; + public static final String CAMUNDA_VALUE = "value"; + public static final String CAMUNDA_URL = "camundaURL"; + public static final String CAMUNDA_AUTH = "camundaAuth"; + public static final String BPEL_SEARCH_STR = "active-bpel"; + public static final String BPEL_URL = "bpelURL"; + public static final String BPEL_AUTH = "bpelAuth"; + public static final int BPEL = 0; + public static final int CAMUNDA = 1; + public static final String CAMUNDA_HOST = "host"; + public static final String SDNC_UUID_HEADER = "att-mso-sdnc-request-id"; + + public static final String REQUEST_ID_VARIABLE = "requestId"; + public static final String IS_BASE_VF_MODULE_VARIABLE = "isBaseVfModule"; + public static final String RECIPE_TIMEOUT_VARIABLE = "recipeTimeout"; + public static final String REQUEST_ACTION_VARIABLE = "requestAction"; + public static final String SERVICE_INSTANCE_ID_VARIABLE = "serviceInstanceId"; + public static final String VNF_ID_VARIABLE = "vnfId"; + public static final String VF_MODULE_ID_VARIABLE = "vfModuleId"; + public static final String VOLUME_GROUP_ID_VARIABLE = "volumeGroupId"; + public static final String NETWORK_ID_VARIABLE = "networkId"; + public static final String SERVICE_TYPE_VARIABLE = "serviceType"; + public static final String VNF_TYPE_VARIABLE = "vnfType"; + public static final String VF_MODULE_TYPE_VARIABLE = "vfModuleType"; + public static final String NETWORK_TYPE_VARIABLE = "networkType"; + public static final String REQUEST_DETAILS_VARIABLE = "requestDetails"; + + private CommonConstants () { + // prevent creating an instance of this class + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ErrorNumbers.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ErrorNumbers.java new file mode 100644 index 0000000000..498952fe83 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ErrorNumbers.java @@ -0,0 +1,70 @@ +/*- + * ============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.apihandler.common; + +public final class ErrorNumbers { + + public static final String REQUEST_FAILED_SCHEMA_VALIDATION = "1000"; + public static final String RECIPE_DOES_NOT_EXIST = "1010"; + public static final String VFMODULE_TYPE_DOES_NOT_EXIST = "1011"; + public static final String SERVICE_PARAMETERS_FAILED_SCHEMA_VALIDATION = "1020"; + public static final String LOCKED_SAME_SERVICE_TYPE_AND_REQUEST_ACTION = "1030"; + public static final String LOCKED_CANCEL_ON_REQUEST_IN_PROGRESS = "1031"; + public static final String LOCKED_REQUEST_IN_PROGRESS_TIMEOUT = "1032"; + public static final String LOCKED_NOT_ALLOWED_FOR_REQUEST_IN_PROGRESS = "1033"; + public static final String WITHDRAW_AFTER_COMPLETE = "1034"; + public static final String COMPLETE_AFTER_WITHDRAW = "1035"; // NOT USED + public static final String REQUEST_PREVIOUSLY_COMPLETED = "1036"; + public static final String CANNOT_RETRY_FINAL_ACTIVATION = "1037"; + public static final String PREVIOUSLY_COMPLETED_WITH_DIFF_ORDER_VERSION = "1038"; + public static final String LOCKED_DIFFERENT_REQUEST_ACTION = "1040"; + public static final String LOCKED_DIFF_REQUEST_ACTION_SAME_SERVICE_INSTANCE_ID = "1041"; + public static final String REQUEST_TIMED_OUT = "1050"; + + public static final String DISCONNECT_ALREADY_COMPLETE = "1100"; + public static final String CANCEL_ALREADY_COMPLETE = "1110"; + + public static final String LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS = "1400"; + public static final String LOCKED_SAME_ACTION_AND_VNF_ID = "1410"; + + public static final String ERROR_FROM_BPEL = "2000"; + public static final String NO_COMMUNICATION_TO_BPEL = "2010"; + public static final String NO_RESPONSE_FROM_BPEL = "2020"; + + public static final String COULD_NOT_WRITE_TO_REQUESTS_DB = "4000"; + public static final String NO_COMMUNICATION_TO_REQUESTS_DB = "4010"; + public static final String NO_COMMUNICATION_TO_CATALOG_DB = "4020"; + public static final String ERROR_FROM_CATALOG_DB = "4030"; + + public static final String ERROR_FROM_SDNC = "5300"; + public static final String NO_COMMUNICATION_TO_SDNC = "5310"; + public static final String NO_RESPONSE_FROM_SDNC = "5320"; + + public static final String NO_COMMUNICATION_TO_SDNC_ADAPTER = "7000"; + public static final String NO_RESPONSE_FROM_SDNC_ADAPTER = "7010"; + public static final String ERROR_FROM_SDNC_ADAPTER = "7020"; + + public static final String SVC_GENERAL_SERVICE_ERROR = "SVC0001"; + public static final String SVC_BAD_PARAMETER = "SVC0002"; + public static final String SVC_NO_SERVER_RESOURCES = "SVC1000"; + public static final String SVC_DETAILED_SERVICE_ERROR = "SVC2000"; + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/LSInputImpl.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/LSInputImpl.java new file mode 100644 index 0000000000..ea26d25212 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/LSInputImpl.java @@ -0,0 +1,122 @@ +/*- + * ============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.apihandler.common; + + +import java.io.InputStream; +import java.io.Reader; + +import org.w3c.dom.ls.LSInput; + +public class LSInputImpl implements LSInput { + + protected String fPublicId; + protected String fSystemId; + protected String fBaseSystemId; + protected InputStream fByteStream; + protected Reader fCharStream; + protected String fData; + protected String fEncoding; + protected boolean fCertifiedText; + + public LSInputImpl () { + } + + @Override + public InputStream getByteStream () { + return fByteStream; + } + + @Override + public void setByteStream (InputStream byteStream) { + fByteStream = byteStream; + } + + @Override + public Reader getCharacterStream () { + return fCharStream; + } + + @Override + public void setCharacterStream (Reader characterStream) { + fCharStream = characterStream; + } + + @Override + public String getStringData () { + return fData; + } + + @Override + public void setStringData (String stringData) { + fData = stringData; + } + + @Override + public String getEncoding () { + return fEncoding; + } + + @Override + public void setEncoding (String encoding) { + fEncoding = encoding; + } + + @Override + public String getPublicId () { + return fPublicId; + } + + @Override + public void setPublicId (String publicId) { + fPublicId = publicId; + } + + @Override + public String getSystemId () { + return fSystemId; + } + + @Override + public void setSystemId (String systemId) { + fSystemId = systemId; + } + + @Override + public String getBaseURI () { + return fBaseSystemId; + } + + @Override + public void setBaseURI (String baseURI) { + fBaseSystemId = baseURI; + } + + @Override + public boolean getCertifiedText () { + return fCertifiedText; + } + + @Override + public void setCertifiedText (boolean certifiedText) { + fCertifiedText = certifiedText; + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/PathResourceResolver.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/PathResourceResolver.java new file mode 100644 index 0000000000..ec1e1aee97 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/PathResourceResolver.java @@ -0,0 +1,64 @@ +/*- + * ============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.apihandler.common; + + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSResourceResolver; + +import org.openecomp.mso.logger.MsoLogger; + +public class PathResourceResolver implements LSResourceResolver { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH); + + private String path; + + public PathResourceResolver(String path) { + + this.path = path; + } + + @Override + public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { + + LSInputImpl input = new LSInputImpl(); + + InputStream stream = null; + try { + stream = new FileInputStream(path + systemId); + } catch (FileNotFoundException e) { + msoLogger.debug ("Could not resolve resource based on file: " + path + systemId, e); + } + + input.setPublicId(publicId); + input.setSystemId(systemId); + input.setBaseURI(baseURI); + input.setCharacterStream(new InputStreamReader(stream)); + + return input; + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java new file mode 100644 index 0000000000..0b796d5ac2 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java @@ -0,0 +1,95 @@ +/*- + * ============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.apihandler.common; + +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.Properties; + +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; + +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.utils.CryptoUtils; + +public abstract class RequestClient { + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH); + protected MsoJavaProperties props; + protected String url; + protected HttpClient client; + private int type; + + public RequestClient(int type){ + this.type = type; + } + + public void setProps(MsoJavaProperties props) { + this.props = props; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } + + public int getType(){ + return type; + } + + public HttpClient getClient() { + return client; + } + + public void setClient(HttpClient client) { + this.client = client; + } + + public abstract HttpResponse post(String request, String requestId, String requestTimeout, String schemaVersion, String serviceInstanceId, String action) throws ClientProtocolException, IOException; + + public abstract HttpResponse post(String request) throws ClientProtocolException, IOException; + + public abstract HttpResponse post(String requestId, boolean isBaseVfModule, + int recipeTimeout, String requestAction, String serviceInstanceId, + String vnfId, String vfModuleId, String volumeGroupId, String networkId, + String serviceType, String vnfType, String vfModuleType, String networkType, + String requestDetails) + throws ClientProtocolException, IOException; + + protected String getEncryptedPropValue (String prop, String defaultValue, String encryptionKey) { + try { + String result = CryptoUtils.decrypt(prop, encryptionKey); + return result; + } + catch (GeneralSecurityException e) { + msoLogger.debug("Security exception", e); + } + return defaultValue; + } + + + + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientFactory.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientFactory.java new file mode 100644 index 0000000000..9dc43c7e7a --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientFactory.java @@ -0,0 +1,56 @@ +/*- + * ============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.apihandler.common; + + +import java.util.Properties; + +import org.apache.http.impl.client.DefaultHttpClient; + +import org.openecomp.mso.properties.MsoJavaProperties; + +public class RequestClientFactory { + + //based on URI, returns BPEL or Camunda client + public static RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{ + RequestClient retClient; + if(props ==null){ + throw new IllegalStateException("properties is null"); + } + String url = null; + if(orchestrationURI.contains(CommonConstants.BPEL_SEARCH_STR)){ + url = props.getProperty(CommonConstants.BPEL_URL,null) + orchestrationURI; + retClient= new BPELRestClient(); + + }else{ + url = props.getProperty(CommonConstants.CAMUNDA_URL,null) + orchestrationURI; + retClient = new CamundaClient(); + } + retClient.setClient(new DefaultHttpClient()); + retClient.setProps(props); + retClient.setUrl(url); + return retClient; + + } + + + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ResponseHandler.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ResponseHandler.java new file mode 100644 index 0000000000..2edf686e07 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ResponseHandler.java @@ -0,0 +1,173 @@ +/*- + * ============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.apihandler.common; + + +import java.io.IOException; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.util.EntityUtils; +import org.codehaus.jackson.map.ObjectMapper; + +import org.openecomp.mso.apihandler.camundabeans.CamundaResponse; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.logger.MessageEnum; + +public class ResponseHandler { + + private CamundaResponse response; + private int status; + private String responseBody=""; + private HttpResponse httpResponse; + private int type; + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH); + + public ResponseHandler(HttpResponse httpResponse, int type) { + this.httpResponse = httpResponse; + this.type=type; + parseResponse(); + } + + + private void parseResponse() { + int statusCode = httpResponse.getStatusLine().getStatusCode(); + msoLogger.debug("Returned status is: " + statusCode); + status = setStatus(statusCode); + msoLogger.debug("Parsed status is: " + status); + if(type==CommonConstants.CAMUNDA){ + parseCamunda(); + }else{ + parseBpel(); + } + + } + + + + private void parseCamunda(){ + try{ + HttpEntity entity = httpResponse.getEntity(); + responseBody = EntityUtils.toString(entity); + } catch (IOException e) { + msoLogger.debug("IOException getting Camunda response body", e); + } + + ObjectMapper mapper = new ObjectMapper(); + try { + response = mapper.readValue(responseBody, CamundaResponse.class); + } catch (IOException e) { + msoLogger.debug("IOException getting Camunda response body", e); + } + msoLogger.debug("json response is: " + responseBody); + if(response!=null){ + responseBody = response.getResponse(); + } + msoLogger.debug("response body is: " + responseBody); + + + if(status!=HttpStatus.SC_ACCEPTED){ + msoLogger.error(MessageEnum.APIH_ERROR_FROM_BPEL_SERVER, "Camunda", String.valueOf(status), responseBody, "Camunda", "parseCamunda", MsoLogger.ErrorCode.BusinessProcesssError, "Error in APIH from Camunda"); + } + } + + private void parseBpel(){ + + HttpEntity bpelEntity = httpResponse.getEntity(); + + try { + if (bpelEntity!=null) { + responseBody = EntityUtils.toString(bpelEntity); + msoLogger.debug("response body is: " + responseBody); + + } + if(status!=HttpStatus.SC_ACCEPTED){ + msoLogger.error(MessageEnum.APIH_ERROR_FROM_BPEL_SERVER, "BPEL", String.valueOf(status), responseBody, "BPEL", "parseBpel", MsoLogger.ErrorCode.BusinessProcesssError, "Error in APIH from BPEL"); + } + } + catch (IOException e) { + msoLogger.debug("IOException getting BPEL response body", e); + } + } + + + + + private int setStatus(int statusCode){ + int status = 0; + switch(statusCode) { + case HttpStatus.SC_ACCEPTED: + case HttpStatus.SC_OK: + status = HttpStatus.SC_ACCEPTED; + break; + case HttpStatus.SC_BAD_REQUEST: + status = HttpStatus.SC_BAD_REQUEST; + break; + case HttpStatus.SC_UNAUTHORIZED: + case HttpStatus.SC_FORBIDDEN: + status = HttpStatus.SC_INTERNAL_SERVER_ERROR; + break; + case HttpStatus.SC_NOT_FOUND: + status = HttpStatus.SC_NOT_IMPLEMENTED; + break; + case HttpStatus.SC_INTERNAL_SERVER_ERROR: + status = HttpStatus.SC_BAD_GATEWAY; + break; + case HttpStatus.SC_SERVICE_UNAVAILABLE: + status = HttpStatus.SC_SERVICE_UNAVAILABLE; + break; + default: + status = HttpStatus.SC_INTERNAL_SERVER_ERROR; + break; + } + return status; + } + + + public CamundaResponse getResponse() { + return response; + } + + + public void setResponse(CamundaResponse response) { + this.response = response; + } + + + public String getResponseBody() { + return responseBody; + } + + + public void setResponseBody(String responseBody) { + this.responseBody = responseBody; + } + + + public int getStatus() { + return status; + } + + + + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ValidationException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ValidationException.java new file mode 100644 index 0000000000..0136a2d3b7 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/ValidationException.java @@ -0,0 +1,44 @@ +/*- + * ============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.apihandler.common; + + +public class ValidationException extends Exception { + + /** + * This class simply extends Exception (without addition additional functionality) + * to provide an identifier for RequestsDB related exceptions on create, delete, query. + * + * + **/ + + private static final long serialVersionUID = 1L; + private static final String validationFailMessage = "No valid $ELEMENT is specified"; + + public ValidationException (String msg) { + super (validationFailMessage.replaceAll ("\\$ELEMENT", msg)); + } + + public ValidationException (String msg, Exception cause) { + super (validationFailMessage.replaceAll ("\\$ELEMENT", msg), cause); + } + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java new file mode 100644 index 0000000000..bd73b226a2 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java @@ -0,0 +1,103 @@ +/*- + * ============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.apihandler.common; + + +import java.io.FileInputStream; +import java.io.IOException; + +import javax.xml.XMLConstants; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.apache.commons.io.IOUtils; +import org.xml.sax.SAXException; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; + +public class XMLValidator { + + private static String XSDS_PATH; + + static { + String prefixMsoPropertiesPath = System.getProperty ("mso.config.path"); + if (prefixMsoPropertiesPath == null) { + prefixMsoPropertiesPath = ""; + } + XSDS_PATH = prefixMsoPropertiesPath + "xsds/"; + } + + private String stringXsd; + private String errorMsg = null; + private SchemaFactory factory; + private Schema schema; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + public XMLValidator (String xsdFile) { + + try (FileInputStream xsdStream = new FileInputStream (XSDS_PATH + xsdFile)) { + + stringXsd = IOUtils.toString (xsdStream); + + factory = SchemaFactory.newInstance (XMLConstants.W3C_XML_SCHEMA_NS_URI); + factory.setResourceResolver ((new PathResourceResolver (XSDS_PATH))); + factory.setFeature (XMLConstants.FEATURE_SECURE_PROCESSING, true); + + String quotedXsd = stringXsd.replaceAll (""", "\""); + Source src = new StreamSource (new java.io.StringReader (quotedXsd)); + schema = factory.newSchema (src); + + } catch (IOException | SAXException e) { + msoLogger.debug ("Cannot open file " + XSDS_PATH + xsdFile, e); + errorMsg = "ErrorDetails: xsd file " + xsdFile + "could not be opened - " + e.getMessage (); + } + } + + // Returns null when XML valid, otherwise returns error details. + public String isXmlValid (String stringXml) { + try { + if (errorMsg != null && !errorMsg.isEmpty ()) { + return errorMsg; + } + Source src2 = new StreamSource (new java.io.StringReader (stringXml)); + Validator validator = schema.newValidator (); + validator.validate (src2); + + } catch (IOException | SAXException e) { + msoLogger.debug ("Exception: ", e); + return ("ErrorDetails: " + e.getMessage ()); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_CANNOT_READ_SCHEMA, "", "", MsoLogger.ErrorCode.SchemaError, "APIH cannot read schema file", e); + alarmLogger.sendAlarm ("MsoConfigurationError", MsoAlarmLogger.CRITICAL, "Unable to read the schema file"); + return "ErrorDetails: " + "Unable to read the schema file"; + } + + return null; + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/package-info.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/package-info.java new file mode 100644 index 0000000000..790edd3f3e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/package-info.java @@ -0,0 +1,25 @@ +/*- + * ============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========================================================= + */ + +/** + * Common classes for API Handlers. + */ +package org.openecomp.mso.apihandler.common; + |