diff options
author | ChrisC <cc697w@intl.att.com> | 2017-01-31 11:40:03 +0100 |
---|---|---|
committer | ChrisC <cc697w@intl.att.com> | 2017-01-31 12:59:33 +0100 |
commit | 025301d08b061482c1f046d562bf017c8cbcfe8d (patch) | |
tree | 68a2a549736c9bf0f7cd4e71c76e40ef7e2606f2 /mso-api-handlers/mso-api-handler-infra/src/main/java/org | |
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-infra/src/main/java/org')
83 files changed, 17415 insertions, 0 deletions
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Action.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Action.java new file mode 100644 index 0000000000..8df4c87898 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Action.java @@ -0,0 +1,31 @@ +/*- + * ============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.apihandlerinfra; + +/* + * Enum for Status values returned by API Handler to Tail-F +*/ +public enum Action { + createInstance, + updateInstance, + deleteInstance, + configureInstance +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Constants.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Constants.java new file mode 100644 index 0000000000..34d739b310 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Constants.java @@ -0,0 +1,49 @@ +/*- + * ============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.apihandlerinfra; + + +public class Constants { + + public static final String VNF_TYPES_PATH = "/{version: v1|v2|v3}/vnf-types"; + public static final String NETWORK_TYPES_PATH = "/{version: v1|v2|v3}/network-types"; + public static final String VF_MODULE_MODEL_NAMES_PATH = "/{version: v2|v3}/vf-module-model-names"; + public static final String REQUEST_ID_PATH = "/{request-id}"; + + public static final String STATUS_SUCCESS = "SUCCESS"; + + public static final String MODIFIED_BY_APIHANDLER = "APIH"; + + public static final String SCHEMA_VERSION_V1 = "v1"; + public static final String SCHEMA_VERSION_V2 = "v2"; + public static final String SCHEMA_VERSION_V3 = "v3"; + + public static final long PROGRESS_REQUEST_COMPLETED = 100L; + public static final long PROGRESS_REQUEST_RECEIVED = 0L; + public static final long PROGRESS_REQUEST_IN_PROGRESS = 20L; + + public static final String VNF_TYPE_WILDCARD = "*"; + + public static final String VOLUME_GROUP_COMPONENT_TYPE = "VOLUME_GROUP"; + + public static final String VALID_INSTANCE_NAME_FORMAT = "^[a-zA-Z][a-zA-Z0-9_-]*$"; + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/HealthcheckHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/HealthcheckHandler.java new file mode 100644 index 0000000000..0ae1695516 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/HealthcheckHandler.java @@ -0,0 +1,112 @@ +/*- + * ============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.apihandlerinfra; + +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.core.Response; +import org.openecomp.mso.HealthCheckUtils; + +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/") +public class HealthcheckHandler { + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + @HEAD + @GET + @Path("/healthcheck") + @Produces("text/html") + public Response healthcheck (@QueryParam("requestId") String requestId) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("Healthcheck"); + UUIDChecker.verifyOldUUID(requestId, msoLogger); + HealthCheckUtils healthCheck = new HealthCheckUtils (); + if (!healthCheck.siteStatusCheck(msoLogger, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (!healthCheck.configFileCheck(msoLogger, startTime, MSO_PROP_APIHANDLER_INFRA)) { + return HealthCheckUtils.NOT_STARTED_RESPONSE; + } + + if (!healthCheck.requestDBCheck (msoLogger, startTime)) { + return HealthCheckUtils.NOT_STARTED_RESPONSE; + } + msoLogger.debug("healthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } + + @HEAD + @GET + @Path("/nodehealthcheck") + @Produces("text/html") + public Response nodeHealthcheck () { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("NodeHealthcheck"); + // Generate a Request Id + String requestId = UUIDChecker.generateUUID(msoLogger); + HealthCheckUtils healthCheck = new HealthCheckUtils (); + if (!healthCheck.siteStatusCheck (msoLogger, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (healthCheck.verifyNodeHealthCheck(HealthCheckUtils.NodeType.APIH, requestId)) { + msoLogger.debug("nodeHealthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } else { + msoLogger.debug("nodeHealthcheck - At leaset one of the sub-modules is not available."); + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + } + + @HEAD + @GET + @Path("/globalhealthcheck") + @Produces("text/html") + public Response globalHealthcheck (@DefaultValue("true") @QueryParam("enableBpmn") boolean enableBpmn) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("GlobalHealthcheck"); + // Generate a Request Id + String requestId = UUIDChecker.generateUUID(msoLogger); + HealthCheckUtils healthCheck = new HealthCheckUtils (); + if (!healthCheck.siteStatusCheck (msoLogger, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (healthCheck.verifyGlobalHealthCheck(enableBpmn, requestId)) { + msoLogger.debug("globalHealthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } else { + msoLogger.debug("globalHealthcheck - At leaset one of the sub-modules is not available"); + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/InfraUtils.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/InfraUtils.java new file mode 100644 index 0000000000..37cbb4de66 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/InfraUtils.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.apihandlerinfra; + + + +import org.openecomp.mso.properties.MsoJavaProperties; + +public class InfraUtils { + public static boolean isActionAllowed(MsoJavaProperties props, String requestType, String version, String action) { + // Check for allowable actions + String actionsPropertyName = requestType + "." + version + ".ApiAllowableActions"; + String allowableActions = props.getProperty(actionsPropertyName, null); + boolean actionAllowed = false; + if (allowableActions != null) { + String allowableActionsList[] = allowableActions.split(","); + for (int i=0; i<allowableActionsList.length; i++) { + if (action.equals (allowableActionsList[i])) { + actionAllowed = true; + break; + } + } + } + else { + actionAllowed = true; + } + return actionAllowed; + } + + // Checks if the name is acceptable for heat stack + public static boolean isValidHeatName(String name) { + if (name.matches("^[a-zA-Z][a-zA-Z0-9_\\.-]*$")) + return true; + return false; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Messages.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Messages.java new file mode 100644 index 0000000000..cdccaf27e3 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Messages.java @@ -0,0 +1,49 @@ +/*- + * ============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.apihandlerinfra; + + +import java.util.HashMap; +import java.util.Map; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; + +public class Messages { + + public static final Map<String,String> errors = new HashMap<String,String>(); + static { + errors.put(ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + "_service", "Service request FAILED schema validation. %s"); + errors.put(ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + "_feature", "Feature request FAILED schema validation. %s"); + errors.put(ErrorNumbers.RECIPE_DOES_NOT_EXIST, "Recipe for %s-type and action specified does not exist in catalog %s"); + errors.put(ErrorNumbers.SERVICE_PARAMETERS_FAILED_SCHEMA_VALIDATION, "Service specific parameters passed in request FAILED schema validation. %s"); + + errors.put(ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, "%s-name (%s) is locked (status = %s) because already working on a CREATE request with same %s-name."); + errors.put(ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, "%s-id (%s) is locked (status = %s) because already working on a request with same action (%s) for this %s-id."); + errors.put(ErrorNumbers.REQUEST_TIMED_OUT, "Service request timed out before completing"); + errors.put(ErrorNumbers.ERROR_FROM_BPEL, "BPEL returned an error: %s"); + errors.put(ErrorNumbers.NO_COMMUNICATION_TO_BPEL, "Could not communicate with BPEL %s"); + errors.put(ErrorNumbers.NO_RESPONSE_FROM_BPEL, "No response from BPEL %s"); + errors.put(ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, "Could not insert or update record in MSO_REQUESTS DB %s"); + errors.put(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, "Could not communicate with MSO_REQUESTS DB %s"); + errors.put(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, "Could not communicate with MSO_CATALOG DB %s"); + errors.put(ErrorNumbers.ERROR_FROM_CATALOG_DB, "Received error from MSO_CATALOG DB %s"); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ModelType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ModelType.java new file mode 100644 index 0000000000..2f01c4fcdb --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ModelType.java @@ -0,0 +1,32 @@ +/*- + * ============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.apihandlerinfra; + +/* + * Enum for Status values returned by API Handler to Tail-F +*/ +public enum ModelType { + service, + vnf, + vfModule, + volumeGroup, + network +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoException.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoException.java new file mode 100644 index 0000000000..2ef1e4a0ec --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoException.java @@ -0,0 +1,26 @@ +/*- + * ============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.apihandlerinfra; + +public enum MsoException { + ServiceException, + PolicyException, +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoPropertiesUtils.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoPropertiesUtils.java new file mode 100644 index 0000000000..0dd9a03c90 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoPropertiesUtils.java @@ -0,0 +1,59 @@ +/*- + * ============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.apihandlerinfra; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; + +public class MsoPropertiesUtils { + + private final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory (); + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static boolean noProperties = true; + + public synchronized static MsoJavaProperties loadMsoProperties () { + MsoJavaProperties msoProperties; + try { + msoProperties = msoPropertiesFactory.getMsoJavaProperties (MSO_PROP_APIHANDLER_INFRA); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_LOAD_PROPERTIES_FAIL, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Exception when loading MSO Properties", e); + return null; + } + + if (msoProperties != null && msoProperties.size () > 0) { + noProperties = false; + msoLogger.info (MessageEnum.APIH_PROPERTY_LOAD_SUC, "", ""); + return msoProperties; + } else { + msoLogger.error (MessageEnum.APIH_NO_PROPERTIES, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "No MSO APIH_INFRA Properties found"); + return null; + } + } + + public synchronized static final boolean getNoPropertiesState() { + return noProperties; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java new file mode 100644 index 0000000000..55c12eb6ff --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java @@ -0,0 +1,850 @@ +/*- + * ============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.apihandlerinfra; + +import java.io.StringReader; +import java.io.StringWriter; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.StringTokenizer; + +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamResult; + +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig.Feature; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.hibernate.Session; +import org.jboss.resteasy.specimpl.MultivaluedMapImpl; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.CloudConfiguration; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ModelInfo; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.PolicyException; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstance; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstanceList; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestError; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceException; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.requestsdb.HibernateUtil; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +public class MsoRequest { + + private String requestId; + private String requestXML; + private String requestJSON; + private String requestUri; + private VnfRequest vnfReq; + private RequestInfo requestInfo; + private ModelInfo modelInfo; + private CloudConfiguration cloudConfiguration ; + private VnfInputs vnfInputs; + private String vnfParams; + private Action action; + private String errorMessage; + private String errorCode; + private String httpResponse; + private String responseBody; + private RequestStatusType status; + private ServiceInstancesRequest sir; + private long startTime; + private long progress = Constants.PROGRESS_REQUEST_RECEIVED; + private String serviceInstanceType; + private String vnfType; + private String vfModuleType; + private String vfModuleModelName; + private String networkType; + private String asdcServiceModelVersion; + private String requestScope; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static final String NOT_PROVIDED = "not provided"; + + MsoRequest (String requestId) { + this.requestId = requestId; + Calendar startTimeCalendar = Calendar.getInstance (); + this.startTime = startTimeCalendar.getTimeInMillis (); + MsoLogger.setLogContext (requestId, null); + + } + + MsoRequest () { + + Calendar startTimeCalendar = Calendar.getInstance (); + this.startTime = startTimeCalendar.getTimeInMillis (); + MsoLogger.setLogContext (requestId, null); + + } + + + public Response buildServiceErrorResponse (int httpResponseCode, + MsoException exceptionType, + String text, + String messageId, + List<String> variables) { + + this.errorCode = messageId; + + if (text != null) { + this.errorMessage = text; + } + else { + this.errorMessage = ""; + } + this.httpResponse = Integer.toString(httpResponseCode); + if(errorMessage.length() > 1999){ + errorMessage = errorMessage.substring(0, 1999); + } + + RequestError re = new RequestError(); + + if(exceptionType.name().equals("PolicyException")){ + + PolicyException pe = new PolicyException(); + pe.setMessageId(messageId); + pe.setText(text); + if(variables != null){ + for(String variable: variables){ + pe.getVariables().add(variable); + } + } + re.setPolicyException(pe); + + } else { + + ServiceException se = new ServiceException(); + se.setMessageId(messageId); + se.setText(text); + if(variables != null){ + if(variables != null){ + for(String variable: variables){ + se.getVariables().add(variable); + } + } + } + re.setServiceException(se); + } + + String requestErrorStr = null; + + try{ + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT); + requestErrorStr = mapper.writeValueAsString(re); + }catch(Exception e){ + msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in buildServiceErrorResponse writing exceptionType to string ", e); + } + + + return Response.status (httpResponseCode).entity(requestErrorStr).build (); + + } + + + // Parse request JSON + void parse (ServiceInstancesRequest sir, HashMap<String,String> instanceIdMap, Action action) throws ValidationException { + + msoLogger.debug ("Validating the Service Instance request"); + + this.sir = sir; + this.action = action; + + try{ + ObjectMapper mapper = new ObjectMapper(); + //mapper.configure(Feature.WRAP_ROOT_VALUE, true); + requestJSON = mapper.writeValueAsString(sir.getRequestDetails()); + + } catch(Exception e){ + throw new ValidationException ("Parse ServiceInstanceRequest to JSON string"); + } + + if(instanceIdMap != null){ + if(instanceIdMap.get("serviceInstanceId") != null){ + if (!UUIDChecker.isValidUUID (instanceIdMap.get ("serviceInstanceId"))) { + throw new ValidationException ("serviceInstanceId"); + } + this.sir.setServiceInstanceId(instanceIdMap.get("serviceInstanceId")); + } + + if(instanceIdMap.get("vnfInstanceId") != null){ + if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vnfInstanceId"))) { + throw new ValidationException ("vnfInstanceId"); + } + this.sir.setVnfInstanceId(instanceIdMap.get("vnfInstanceId")); + } + + if(instanceIdMap.get("vfModuleInstanceId") != null){ + if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vfModuleInstanceId"))) { + throw new ValidationException ("vfModuleInstanceId"); + } + this.sir.setVfModuleInstanceId(instanceIdMap.get("vfModuleInstanceId")); + } + + if(instanceIdMap.get("volumeGroupInstanceId") != null){ + if (!UUIDChecker.isValidUUID (instanceIdMap.get ("volumeGroupInstanceId"))) { + throw new ValidationException ("volumeGroupInstanceId"); + } + this.sir.setVolumeGroupInstanceId(instanceIdMap.get("volumeGroupInstanceId")); + } + + if(instanceIdMap.get("networkInstanceId") != null){ + if (!UUIDChecker.isValidUUID (instanceIdMap.get ("networkInstanceId"))) { + throw new ValidationException ("networkInstanceId"); + } + this.sir.setNetworkInstanceId(instanceIdMap.get("networkInstanceId")); + } + } + + this.modelInfo = sir.getRequestDetails().getModelInfo(); + + if (this.modelInfo == null) { + throw new ValidationException ("model-info"); + } + + this.requestInfo = sir.getRequestDetails().getRequestInfo(); + + if (this.requestInfo == null) { + throw new ValidationException ("requestInfo"); + } + + if (modelInfo.getModelType () == null) { + throw new ValidationException ("modelType"); + } + + this.requestScope = modelInfo.getModelType().name(); + + if (empty (modelInfo.getModelInvariantId ()) && !(requestScope.equalsIgnoreCase (ModelType.network.name ()) && + (action == Action.createInstance || action == Action.updateInstance))) { + throw new ValidationException ("modelInvariantId"); + } + + if (!empty (modelInfo.getModelInvariantId ()) && !UUIDChecker.isValidUUID (modelInfo.getModelInvariantId ())) { + throw new ValidationException ("modelInvariantId format"); + } + + if (empty (modelInfo.getModelName ()) && (action == Action.createInstance || action == Action.updateInstance || (action == Action.deleteInstance && + (requestScope.equalsIgnoreCase (ModelType.network.name ()) || requestScope.equalsIgnoreCase (ModelType.vfModule.name ()))))) { + throw new ValidationException ("modelName"); + } + + if (empty (modelInfo.getModelVersion ()) && !(requestScope.equalsIgnoreCase (ModelType.network.name ()) && + (action == Action.createInstance || action == Action.updateInstance))) { + throw new ValidationException ("modelVersion"); + } + + if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action != Action.deleteInstance && empty (modelInfo.getModelCustomizationName ())) { + throw new ValidationException ("modelCustomizationName"); + } + + this.cloudConfiguration = sir.getRequestDetails ().getCloudConfiguration (); + if (!requestScope.equalsIgnoreCase (ModelType.service.name ()) && cloudConfiguration == null) { + throw new ValidationException ("cloudConfiguration"); + } + + if (cloudConfiguration != null) { + if (empty (cloudConfiguration.getLcpCloudRegionId ())) { + throw new ValidationException ("lcpCloudRegionId"); + } + if (empty (cloudConfiguration.getTenantId ())) { + throw new ValidationException ("tenantId"); + } + } + + if (requestScope.equalsIgnoreCase (ModelType.service.name ()) && action == Action.createInstance) { + if (sir.getRequestDetails ().getRequestParameters () == null) { + throw new ValidationException ("requestParameters"); + } + if (empty (sir.getRequestDetails ().getRequestParameters ().getSubscriptionServiceType ())) { + throw new ValidationException ("subscriptionServiceType"); + } + } + + if(requestScope.equalsIgnoreCase(ModelType.service.name())){ + this.serviceInstanceType = modelInfo.getModelName(); + } + + if(requestScope.equalsIgnoreCase(ModelType.network.name())){ + this.networkType = modelInfo.getModelName(); + } + + // Verify instanceName existence and format + if (empty (requestInfo.getInstanceName ()) && action == Action.createInstance) { + throw new ValidationException ("instanceName"); + } + + if (!empty (requestInfo.getInstanceName ()) && !requestInfo.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) { + throw new ValidationException ("instanceName format"); + } + + if (empty (requestInfo.getProductFamilyId ()) && ((requestScope.equalsIgnoreCase (ModelType.vnf.name ()) && action == Action.createInstance) || + (requestScope.equalsIgnoreCase (ModelType.network.name ()) && (action == Action.createInstance || action == Action.updateInstance)))) { + throw new ValidationException ("productFamilyId"); + } + + if (empty (requestInfo.getSource ())) { + throw new ValidationException ("source"); + } + + + RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList(); + + String serviceModelName = null; + String vnfModelName = null; + String asdcServiceModelVersion = null; + String volumeGroupId = null; + boolean isRelatedServiceInstancePresent = false; + boolean isRelatedVnfInstancePresent = false; + + if (instanceList != null) { + for(RelatedInstanceList relatedInstanceList : instanceList){ + RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance(); + + if (!empty (relatedInstance.getInstanceName ()) && !relatedInstance.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) { + throw new ValidationException ("instanceName format in relatedInstance"); + } + + if (empty (relatedInstance.getInstanceId ())) { + throw new ValidationException ("instanceId in relatedInstance"); + } + + if (!UUIDChecker.isValidUUID (relatedInstance.getInstanceId ())) { + throw new ValidationException ("instanceId format in relatedInstance"); + } + + if (relatedInstance.getModelInfo () == null) { + throw new ValidationException ("modelInfo in relatedInstance"); + } + + if (relatedInstance.getModelInfo ().getModelType () == null) { + throw new ValidationException ("modelType in relatedInstance"); + } + + if (action != Action.deleteInstance) { + + if (empty (relatedInstance.getModelInfo ().getModelInvariantId ()) && + !(requestScope.equalsIgnoreCase (ModelType.vfModule.name ()) && action == Action.createInstance && + relatedInstance.getModelInfo ().getModelType ().equals(ModelType.volumeGroup))) { + throw new ValidationException ("modelInvariantId in relatedInstance"); + } + + if (!empty (relatedInstance.getModelInfo ().getModelInvariantId ()) && + !UUIDChecker.isValidUUID (relatedInstance.getModelInfo ().getModelInvariantId ())) { + throw new ValidationException ("modelInvariantId format in relatedInstance"); + } + + if (empty(relatedInstance.getModelInfo ().getModelName ()) && + !(requestScope.equalsIgnoreCase (ModelType.vfModule.name ()) && action == Action.createInstance && + relatedInstance.getModelInfo ().getModelType ().equals (ModelType.volumeGroup))) { + throw new ValidationException ("modelName in relatedInstance"); + } + + if (empty (relatedInstance.getModelInfo ().getModelVersion ()) && + !(requestScope.equalsIgnoreCase (ModelType.vfModule.name ()) && action == Action.createInstance && + relatedInstance.getModelInfo ().getModelType ().equals (ModelType.volumeGroup))) { + throw new ValidationException ("modelVersion in relatedInstance"); + } + } + + if (empty (relatedInstance.getModelInfo ().getModelCustomizationName ()) && + relatedInstance.getModelInfo ().getModelType ().equals (ModelType.vnf)) { + throw new ValidationException ("modelCustomizationName in relatedInstance"); + } + + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)) { + isRelatedServiceInstancePresent = true; + if (!relatedInstance.getInstanceId ().equals (this.sir.getServiceInstanceId ())) { + throw new ValidationException ("serviceInstanceId matching the serviceInstanceId in request URI"); + } + serviceModelName = relatedInstance.getModelInfo ().getModelName (); + asdcServiceModelVersion = relatedInstance.getModelInfo().getModelVersion (); + } + else if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)) { + isRelatedVnfInstancePresent = true; + if (!relatedInstance.getInstanceId ().equals (this.sir.getVnfInstanceId ())) { + throw new ValidationException ("vnfInstanceId matching the vnfInstanceId in request URI"); + } + vnfModelName = relatedInstance.getModelInfo().getModelCustomizationName(); + } + else if(relatedInstance.getModelInfo().getModelType().equals(ModelType.volumeGroup)) { + volumeGroupId = relatedInstance.getInstanceId (); + } + } + + + if(requestScope.equalsIgnoreCase (ModelType.volumeGroup.name ())) { + if (!isRelatedServiceInstancePresent) { + throw new ValidationException ("related service instance for volumeGroup request"); + } + if (!isRelatedVnfInstancePresent) { + throw new ValidationException ("related vnf instance for volumeGroup request"); + } + this.serviceInstanceType = serviceModelName; + this.vnfType = serviceModelName + "/" + vnfModelName; + this.asdcServiceModelVersion = asdcServiceModelVersion; + } + else if(requestScope.equalsIgnoreCase(ModelType.vfModule.name ())) { + if (!isRelatedServiceInstancePresent) { + throw new ValidationException ("related service instance for vfModule request"); + } + if (!isRelatedVnfInstancePresent) { + throw new ValidationException ("related vnf instance for vfModule request"); + } + String vfModuleModelName = modelInfo.getModelName (); + this.vfModuleModelName = vfModuleModelName; + this.serviceInstanceType = serviceModelName; + this.vnfType = serviceModelName + "/" + vnfModelName; + this.asdcServiceModelVersion = asdcServiceModelVersion; + this.vfModuleType = vnfType + "::" + vfModuleModelName; + this.sir.setVolumeGroupInstanceId (volumeGroupId); + } + else if (requestScope.equalsIgnoreCase (ModelType.vnf.name ())) { + if (!isRelatedServiceInstancePresent) { + throw new ValidationException ("related service instance for vnf request"); + } + this.vnfType = serviceModelName + "/" + sir.getRequestDetails().getModelInfo().getModelCustomizationName(); + } + } + else if (action != Action.deleteInstance && !requestScope.equalsIgnoreCase(ModelType.service.name ()) && + !requestScope.equalsIgnoreCase(ModelType.network.name ())) { + throw new ValidationException ("related instances"); + } + + } + + public Map<String, List<String>> getOrchestrationFilters (MultivaluedMap<String, String> queryParams) throws ValidationException { + + String queryParam = null; + Map<String, List<String>> orchestrationFilterParams = new HashMap<String, List<String>>(); + + + for (Entry<String,List<String>> entry : queryParams.entrySet()) { + queryParam = entry.getKey(); + + try{ + if(queryParam.equalsIgnoreCase("filter")){ + + StringTokenizer st = new StringTokenizer(entry.getValue().get(0), ":"); + + int counter=0; + String mapKey=null; + List<String> orchestrationList = new ArrayList<String>(); + while (st.hasMoreElements()) { + if(counter == 0){ + mapKey = st.nextElement() + ""; + } else{ + orchestrationList.add(st.nextElement() + ""); + } + counter++; + } + orchestrationFilterParams.put(mapKey, orchestrationList); + } + + }catch(Exception e){ + //msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, e); + throw new ValidationException ("QueryParam ServiceInfo", e); + + } + + } + + + return orchestrationFilterParams; + } + + public void createRequestRecord (Status status, Action action) { + + Session session = null; + try { + + session = HibernateUtil.getSessionFactory ().openSession (); + session.beginTransaction (); + + InfraActiveRequests aq = new InfraActiveRequests (); + aq.setRequestId (requestId); + + aq.setRequestAction(action.name()); + aq.setAction(action.name()); + + Timestamp startTimeStamp = new Timestamp (Calendar.getInstance ().getTimeInMillis ()); + + aq.setStartTime (startTimeStamp); + + if (requestInfo != null) { + + if(requestInfo.getSource() != null){ + aq.setSource(requestInfo.getSource()); + } + if(requestInfo.getCallbackUrl() != null){ + aq.setCallBackUrl(requestInfo.getCallbackUrl()); + } + if(requestInfo.getCorrelator() != null){ + aq.setCorrelator(requestInfo.getCorrelator()); + } + + } + + if (modelInfo != null) { + aq.setRequestScope(requestScope); + } + + if (cloudConfiguration != null) { + if(cloudConfiguration.getLcpCloudRegionId() != null) { + aq.setAicCloudRegion(cloudConfiguration.getLcpCloudRegionId()); + } + + if(cloudConfiguration.getTenantId() != null) { + aq.setTenantId(cloudConfiguration.getTenantId()); + } + + } + + if(sir.getServiceInstanceId() != null){ + aq.setServiceInstanceId(sir.getServiceInstanceId()); + } + + if(sir.getVnfInstanceId() != null){ + aq.setVnfId(sir.getVnfInstanceId()); + } + + + if(requestScope.equalsIgnoreCase(ModelType.service.name())){ + if(requestInfo.getInstanceName() != null){ + aq.setServiceInstanceName(requestInfo.getInstanceName()); + } + } + + if(requestScope.equalsIgnoreCase(ModelType.network.name())){ + aq.setNetworkName(requestInfo.getInstanceName()); + aq.setNetworkType(networkType); + aq.setNetworkId(sir.getNetworkInstanceId()); + } + + if(requestScope.equalsIgnoreCase(ModelType.volumeGroup.name())){ + aq.setVolumeGroupId(sir.getVolumeGroupInstanceId()); + aq.setVolumeGroupName(requestInfo.getInstanceName()); + aq.setVnfType(vnfType); + + } + + if(requestScope.equalsIgnoreCase(ModelType.vfModule.name())){ + aq.setVfModuleName(requestInfo.getInstanceName()); + aq.setVfModuleModelName(modelInfo.getModelName()); + aq.setVfModuleId(sir.getVfModuleInstanceId()); + aq.setVolumeGroupId(sir.getVolumeGroupInstanceId()); + aq.setVnfType(vnfType); + + } + + if(requestScope.equalsIgnoreCase(ModelType.vnf.name())){ + aq.setVnfName(requestInfo.getInstanceName()); + RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList(); + + if (instanceList != null) { + + for(RelatedInstanceList relatedInstanceList : instanceList){ + + RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance(); + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)){ + aq.setVnfType(vnfType); + } + } + } + //aq.setVnfType(sir.getRequestDetails().getRelatedInstanceList()); + + } + + aq.setRequestBody (this.requestJSON); + + + aq.setRequestStatus (status.toString ()); + aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER); + + if ((status == Status.FAILED) || (status == Status.COMPLETE)) { + aq.setStatusMessage (this.errorMessage); + aq.setResponseBody (this.responseBody); + aq.setProgress(new Long(100)); + + Calendar endTime = Calendar.getInstance (); + Timestamp endTimeStamp = new Timestamp (endTime.getTimeInMillis ()); + aq.setEndTime (endTimeStamp); + } + + msoLogger.debug ("About to insert a record"); + + session.save (aq); + session.getTransaction ().commit (); + session.close (); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception when creation record request", e); + if (session != null) { + session.close (); + } + if (!status.equals (Status.FAILED)) { + throw e; + } + } + } + + public void updateFinalStatus (Status status) { + int result = 0; + try { + result = RequestsDatabase.updateInfraFinalStatus (requestId, + status.toString (), + this.errorMessage, + this.progress, + this.responseBody, + Constants.MODIFIED_BY_APIHANDLER); + } catch (Exception e) { + msoLogger.error(MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "Exception when updating record in DB"); + msoLogger.debug ("Exception: ", e); + } + } + + public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) { + return buildResponseWithError (httpResponseCode, errorCode, inProgress, null); + } + + public Response buildResponseWithError (int httpResponseCode, + String errorCode, + InfraActiveRequests inProgress, + String errorString) { + + + + // Log the failed request into the MSO Requests database + + return Response.status (httpResponseCode).entity (null).build (); + + } + + public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) { + + + + return Response.status (httpResponseCode).entity (null).build (); + } + + public String getRequestUri () { + return requestUri; + } + + public void setRequestUri (String requestUri) { + this.requestUri = requestUri; + } + + public VnfInputs getVnfInputs () { + return vnfInputs; + } + + public RequestInfo getRequestInfo () { + return requestInfo; + } + + public String getResponseBody () { + return responseBody; + } + + public void setResponseBody (String responseBody) { + this.responseBody = responseBody; + } + + public String getHttpResponse () { + return httpResponse; + } + + public void setHttpResponse (String httpResponse) { + this.httpResponse = httpResponse; + } + + public String getRequestId () { + return requestId; + } + + public String getRequestXML () { + return requestXML; + } + + public void setRequestXML (String requestXML) { + this.requestXML = requestXML; + } + + public RequestStatusType getStatus () { + return status; + } + + public String getServiceType () { + if (this.vnfInputs.getServiceType () != null) + return this.vnfInputs.getServiceType (); + if (this.vnfInputs.getServiceId () != null) + return this.vnfInputs.getServiceId (); + return null; + } + + public void setStatus (RequestStatusType status) { + this.status = status; + switch (status) { + case FAILED: + case COMPLETE: + this.progress = Constants.PROGRESS_REQUEST_COMPLETED; + break; + case IN_PROGRESS: + this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS; + break; + } + } + + public ModelInfo getModelInfo() { + return modelInfo; + } + + public ServiceInstancesRequest getServiceInstancesRequest() { + return sir; + } + + public String getServiceInstanceType () { + return serviceInstanceType; + } + + public String getNetworkType () { + return networkType; + } + + public String getVnfType () { + return vnfType; + } + + public String getVfModuleModelName () { + return vfModuleModelName; + } + + public String getVfModuleType () { + return vfModuleType; + } + + public String getAsdcServiceModelVersion () { + return asdcServiceModelVersion; + } + + public static String domToStr (Document doc) { + if (doc == null) { + return null; + } + + try { + StringWriter sw = new StringWriter (); + StreamResult sr = new StreamResult (sw); + TransformerFactory tf = TransformerFactory.newInstance (); + Transformer t = tf.newTransformer (); + t.setOutputProperty (OutputKeys.STANDALONE, "yes"); + NodeList nl = doc.getDocumentElement ().getChildNodes (); + DOMSource source = null; + for (int x = 0; x < nl.getLength (); x++) { + Node e = nl.item (x); + if (e instanceof Element) { + source = new DOMSource (e); + break; + } + } + if (source != null) { + t.transform (source, sr); + + String s = sw.toString (); + return s; + } + + return null; + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in domToStr", e); + } + return null; + } + + public void addBPMNSpecificInputs(String personaModelId, String personaModelVersion, Boolean isBaseVfModule, + String vnfPersonaModelId, String vnfPersonaModelVersion) { + vnfInputs.setPersonaModelId(personaModelId); + vnfInputs.setPersonaModelVersion(personaModelVersion); + vnfInputs.setIsBaseVfModule(isBaseVfModule); + vnfInputs.setVnfPersonaModelId(vnfPersonaModelId); + vnfInputs.setVnfPersonaModelVersion(vnfPersonaModelVersion); + + this.vnfReq.setVnfInputs(vnfInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (this.vnfReq, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + this.requestXML = stringWriter.toString (); + msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML); + + + } + + private static boolean empty(String s) { + return (s == null || s.trim().isEmpty()); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkInfoHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkInfoHandler.java new file mode 100644 index 0000000000..59b93eadde --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkInfoHandler.java @@ -0,0 +1,333 @@ + +package org.openecomp.mso.apihandlerinfra; + +/*- + * #%L + * MSO + * %% + * Copyright (C) 2016 OPENECOMP - MSO + * %% + * 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. + * #L% + */ + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.apache.http.HttpStatus; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.networkbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkInputs; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkOutputs; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequests; +import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/network-request") +public class NetworkInfoHandler { + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + @GET + public Response queryFilters (@QueryParam("network-type") String networkType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenant-id") String tenantId, + @PathParam("version") String version) { + MsoLogger.setServiceName ("QueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + long startTime = System.currentTimeMillis (); + + msoLogger.debug ("Incoming request received for query filters with Network type " + networkType + + " - service type " + + serviceType + + " - aicNodeClli " + + aicNodeClli + + " - tenant id " + + tenantId); + Response response = null; + if (networkType != null) { + response = this.getRequestList ("vnfType", networkType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + MsoLogger.setServiceName ("GetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with requestId=" + requestId + ", version = " + version); + long startTime = System.currentTimeMillis (); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + protected void fillNetworkRequest (NetworkRequest qr, InfraRequests ar, String version) { + NetworkInputs vi = beansObjectFactory.createNetworkInputs (); + + if (ar.getVnfId () != null) { + vi.setNetworkId (ar.getVnfId ()); + } + if (ar.getVnfName () != null) { + vi.setNetworkName (ar.getVnfName ()); + } + if (ar.getVnfType () != null) { + vi.setNetworkType (ar.getVnfType ()); + } + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + + } + + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + if (ar.getProvStatus () != null) { + vi.setProvStatus (ar.getProvStatus ()); + } + qr.setNetworkInputs (vi); + + qr.setNetworkParams (ar.getVnfParams ()); + + try { + String networkoutputs = ar.getVnfOutputs (); + if (networkoutputs != null && networkoutputs.length () > 0) { + msoLogger.debug ("Read NETWORK outputs: " + networkoutputs); + NetworkOutputs networkOutput = null; + + // Now unmarshal it into network outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (networkoutputs)); + SAXSource source = new SAXSource (inputSource); + + networkOutput = jaxbUnmarshaller.unmarshal (source, NetworkOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for network outputs"); + } + + qr.setNetworkOutputs (networkOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading networkOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + MsoLogger.setLogContext (requestId, null); + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, "NETWORK"); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + "NETWORK"); + + List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateNetworkRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private NetworkRequest fillGeneric (InfraRequests ar) { + NetworkRequest qr = beansObjectFactory.createNetworkRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <NetworkRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> (); + + for (InfraRequests ar : arList) { + NetworkRequest qr = fillGeneric (ar); + fillNetworkRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateNetworkRequests (List <NetworkRequest> queryResponseList) { + NetworkRequests queryResponses = new NetworkRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getNetworkRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + NetworkRequest qr = fillGeneric (ar); + fillNetworkRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkMsoInfraRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkMsoInfraRequest.java new file mode 100644 index 0000000000..f35ddfbda8 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkMsoInfraRequest.java @@ -0,0 +1,619 @@ +/*- + * ============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.apihandlerinfra; + +import java.io.StringReader; +import java.io.StringWriter; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamResult; + +import org.hibernate.Session; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.networkbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkInputs; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest; +import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.requestsdb.HibernateUtil; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; + +public class NetworkMsoInfraRequest { + + private String requestId; + private String requestXML; + private String requestUri; + private RequestInfo rinfo; + private NetworkInputs networkInputs; + private String networkParams; + private ActionType action; + private String errorMessage; + private String httpResponse; + private String responseBody; + private RequestStatusType status; + private long startTime; + private long progress = Constants.PROGRESS_REQUEST_RECEIVED; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static final String NOT_PROVIDED = "not provided"; + + NetworkMsoInfraRequest (String requestId) { + this.requestId = requestId; + Calendar startTimeCalendar = Calendar.getInstance (); + this.startTime = startTimeCalendar.getTimeInMillis (); + MsoLogger.setLogContext (requestId, null); + + } + + // Parse request XML + void parse (String reqXML, String version, MsoJavaProperties props) throws ValidationException { + + msoLogger.debug ("Validating the request"); + + this.requestXML = reqXML; + + NetworkRequest networkReq = null; + boolean isWrongRootElement = false; + + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (reqXML)); + SAXSource source = new SAXSource (inputSource); + + if (reqXML.contains ("network-request") && !reqXML.contains ("vnf-request")) { + networkReq = jaxbUnmarshaller.unmarshal (source, NetworkRequest.class).getValue (); + } else { + isWrongRootElement = true; + } + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_VNFREQUEST_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + throw new ValidationException ("format for network request"); + } + + if (isWrongRootElement) { + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR_REASON, "root element is not correct", "", "", MsoLogger.ErrorCode.DataError, "root element <network-request> expected"); + throw new ValidationException ("root element <network-request> expected"); + } + + if (networkReq == null) { + throw new ValidationException ("network-request"); + } + + this.rinfo = networkReq.getRequestInfo (); + + if (this.rinfo == null) { + throw new ValidationException ("request-info"); + } + + action = this.rinfo.getAction (); + if (action == null) { + throw new ValidationException ("action"); + } + + if (!InfraUtils.isActionAllowed (props, "network", version, action.value ())) { + throw new ValidationException ("action allowable for version " + version + " of network request"); + } + + this.networkInputs = networkReq.getNetworkInputs (); + if (this.networkInputs == null) { + throw new ValidationException ("network-inputs"); + } + + // Verify that the elements correspond to the version + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (this.networkInputs.getBackoutOnFailure() != null || this.networkInputs.getAicCloudRegion() != null || + this.networkInputs.getServiceInstanceId() != null) { + throw new ValidationException ("format for v1 version of network request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (this.networkInputs.getServiceType() != null || this.networkInputs.getAicNodeClli() != null || + this.networkInputs.getServiceInstanceId() != null) { + throw new ValidationException ("format for v2 version of network request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (this.networkInputs.getServiceType() != null || this.networkInputs.getAicNodeClli() != null) { + throw new ValidationException ("format for v3 version of network request"); + } + } + + switch (action) { + case UPDATE: + case DELETE: + if (this.networkInputs.getNetworkId () == null) { + throw new ValidationException ("network-id"); + } + break; + default: + break; + } + + if (ActionType.CREATE.equals (action) && this.networkInputs.getNetworkName () == null) { + throw new ValidationException ("network-name"); + } + + if (this.networkInputs.getNetworkType () == null) { + throw new ValidationException ("network-type"); + } + + if (!version.equals(Constants.SCHEMA_VERSION_V1) && this.networkInputs.getServiceId () == null) { + throw new ValidationException ("service-id "); + } + + if (this.networkInputs.getServiceType () != null && this.networkInputs.getServiceId () != null) { + throw new ValidationException ("service-type or service-id "); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1) && this.networkInputs.getAicNodeClli () == null) { + throw new ValidationException ("aic-node-clli"); + } + + if ((version.equals (Constants.SCHEMA_VERSION_V2) || version.equals (Constants.SCHEMA_VERSION_V3)) && (this.networkInputs.getAicCloudRegion () == null || this.networkInputs.getAicCloudRegion ().isEmpty())) { + throw new ValidationException ("aic-cloud-region"); + } + + if (version.equals(Constants.SCHEMA_VERSION_V3) && this.networkInputs.getServiceInstanceId () == null) { + throw new ValidationException ("service-instance-id"); + } + + if (ActionType.CREATE.equals (action)) { + if (this.networkInputs.getTenantId () == null) { + throw new ValidationException ("tenant-id"); + } + } + + + Object vpN = networkReq.getNetworkParams (); + + if (vpN != null) { + Node node = (Node) vpN; + Document doc = node.getOwnerDocument (); + this.networkParams = domToStr (doc); + } + + msoLogger.debug ("NetworkParams: " + this.networkParams); + + msoLogger.debug ("Request valid"); + + // Rebuild the request string for BPEL to include request-id + rinfo.setRequestId (this.requestId); + networkReq.setRequestInfo (rinfo); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (networkReq, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + this.requestXML = stringWriter.toString ().replace ("http://ecomp.att.com/mso/infra/network-request", + "http://ecomp.att.com/mso/infra/vnf-request"); + msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML); + + } + + public void createRequestRecord (Status status) { + + long startTime = System.currentTimeMillis (); + + Session session = null; + try { + + session = HibernateUtil.getSessionFactory ().openSession (); + session.beginTransaction (); + + InfraActiveRequests aq = new InfraActiveRequests (); + aq.setRequestId (requestId); + + Timestamp startTimeStamp = new Timestamp (Calendar.getInstance ().getTimeInMillis ()); + if (rinfo != null) { + if (rinfo.getAction () != null) { + aq.setAction (rinfo.getAction ().value ()); + aq.setRequestAction (RequestActionMap.getMappedRequestAction (rinfo.getAction ().value ())); + } + aq.setSource (rinfo.getSource ()); + } else { + // Set up mandatory parameters + aq.setAction (NOT_PROVIDED); + aq.setRequestAction (NOT_PROVIDED); + } + + aq.setRequestBody (this.requestXML); + aq.setRequestScope (ModelType.network.name ()); + + if (networkInputs != null) { + if (networkInputs.getNetworkId () != null) { + aq.setVnfId (networkInputs.getNetworkId ()); + } + if (networkInputs.getNetworkName () != null) { + aq.setVnfName (networkInputs.getNetworkName ()); + } + if (networkInputs.getNetworkType () != null) { + aq.setVnfType (networkInputs.getNetworkType ()); + } + if (networkInputs.getServiceInstanceId () != null) { + aq.setServiceInstanceId (networkInputs.getServiceInstanceId ()); + } + if (networkInputs.getServiceType () != null) { + aq.setServiceType (networkInputs.getServiceType ()); + } + if (networkInputs.getServiceId () != null) { + aq.setServiceType (networkInputs.getServiceId ()); + } + if (networkInputs.getAicNodeClli () != null) { + aq.setAicNodeClli (networkInputs.getAicNodeClli ()); + } + if (networkInputs.getTenantId () != null) { + aq.setTenantId (networkInputs.getTenantId ()); + } + if (networkInputs.getProvStatus () != null) { + aq.setProvStatus (networkInputs.getProvStatus ()); + } + + } + aq.setStartTime (startTimeStamp); + aq.setRequestStatus (status.toString ()); + aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER); + aq.setRequestType ("NETWORK"); + + if (networkParams != null) { + msoLogger.debug ("Storing networkParams: " + networkParams); + aq.setVnfParams (this.networkParams); + } + + if ((status == Status.FAILED) || (status == Status.COMPLETE)) { + aq.setStatusMessage (this.errorMessage); + aq.setResponseBody (this.responseBody); + + Calendar endTime = Calendar.getInstance (); + Timestamp endTimeStamp = new Timestamp (endTime.getTimeInMillis ()); + aq.setEndTime (endTimeStamp); + } + aq.setProgress (this.progress); + + + msoLogger.debug ("About to insert a record"); + + session.save (aq); + session.getTransaction ().commit (); + session.close (); + msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "saveRequest", null); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.SchemaError, "Exception in createRequestRecord", e); + msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, e.getMessage (), "RequestDB", "saveRequest", null); + if (session != null) { + session.close (); + } + if (!status.equals (Status.FAILED)) { + throw e; + } + } + } + + public void updateFinalStatus (Status status) { + try { + RequestsDatabase.updateInfraFinalStatus (requestId, + status.toString (), + this.errorMessage, + this.progress, + this.responseBody, + Constants.MODIFIED_BY_APIHANDLER); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage (), "", "", MsoLogger.ErrorCode.SchemaError, "Exception in updateFinalStatus"); + msoLogger.debug ("Exception: ", e); + } + } + + public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) { + return buildResponseWithError (httpResponseCode, errorCode, inProgress, null); + } + + public Response buildResponseWithError (int httpResponseCode, + String errorCode, + InfraActiveRequests inProgress, + String errorString) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + + NetworkRequest vr = beansObjectFactory.createNetworkRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + + ri.setRequestId (requestId); + ri.setRequestStatus (this.status); + ri.setAction (this.rinfo.getAction ()); + ri.setSource (this.rinfo.getSource ()); + + String errorMsg = null; + if (errorCode != null) { + // If error code is actually an XML error response from BPEL, treat it specially: + if (!Messages.errors.containsKey (errorCode)) { + if (errorCode.length () > 300) { + errorMsg = errorCode.substring (0, 299); + } else { + errorMsg = errorCode; + } + + } else { + + if (inProgress == null) { + if (errorCode.equals (ErrorNumbers.RECIPE_DOES_NOT_EXIST)) { + errorMsg = String.format (Messages.errors.get (errorCode), "network", errorString); + } else { + errorMsg = String.format (Messages.errors.get (errorCode), errorString); + } + } else if (errorCode.equals (ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "network", + inProgress.getVnfName (), + inProgress.getRequestStatus (), + "network"); + } else if (errorCode.equals (ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "network", + inProgress.getVnfId (), + inProgress.getRequestStatus (), + inProgress.getAction (), + "network"); + } + } + + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + } + ri.setProgress ((int) this.progress); + + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + + vr.setRequestInfo (ri); + vr.setNetworkInputs (this.networkInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + // Log the failed request into the MSO Requests database + + return Response.status (httpResponseCode).entity (response).build (); + + } + + public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + NetworkRequest vr = beansObjectFactory.createNetworkRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (requestId); + + if (this.rinfo != null) { + if (this.rinfo.getAction () != null) { + ri.setAction (this.rinfo.getAction ()); + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + if (this.rinfo.getSource () != null) { + ri.setSource (this.rinfo.getSource ()); + } + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + + // Nothing more is expected for this request + + String errorMsg = String.format (Messages.errors.get (ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + + "_service"), + exceptionMessage); + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + + ri.setProgress ((int) this.progress); + ri.setRequestStatus (RequestStatusType.FAILED); + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + + vr.setRequestInfo (ri); + vr.setNetworkInputs (this.networkInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + return Response.status (httpResponseCode).entity (response).build (); + } + + public String getRequestUri () { + return requestUri; + } + + public void setRequestUri (String requestUri) { + this.requestUri = requestUri; + } + + public NetworkInputs getNetworkInputs () { + return networkInputs; + } + + public RequestInfo getRequestInfo () { + return rinfo; + } + + public String getResponseBody () { + return responseBody; + } + + public void setResponseBody (String responseBody) { + this.responseBody = responseBody; + } + + public String getHttpResponse () { + return httpResponse; + } + + public void setHttpResponse (String httpResponse) { + this.httpResponse = httpResponse; + } + + public String getRequestId () { + return requestId; + } + + public String getRequestXML () { + return requestXML; + } + + public void setRequestXML (String requestXML) { + this.requestXML = requestXML; + } + + public RequestStatusType getStatus () { + return status; + } + + public void setStatus (RequestStatusType status) { + this.status = status; + switch (status) { + case FAILED: + case COMPLETE: + this.progress = Constants.PROGRESS_REQUEST_COMPLETED; + break; + case IN_PROGRESS: + this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS; + break; + } + } + + public String getServiceType () { + if (this.networkInputs.getServiceType () != null) + return this.networkInputs.getServiceType (); + if (this.networkInputs.getServiceId () != null) + return this.networkInputs.getServiceId (); + return null; + } + + public static String domToStr (Document doc) { + if (doc == null) { + return null; + } + + try { + StringWriter sw = new StringWriter (); + StreamResult sr = new StreamResult (sw); + TransformerFactory tf = TransformerFactory.newInstance (); + Transformer t = tf.newTransformer (); + t.setOutputProperty (OutputKeys.STANDALONE, "yes"); + NodeList nl = doc.getDocumentElement ().getChildNodes (); + DOMSource source = null; + for (int x = 0; x < nl.getLength (); x++) { + Node e = nl.item (x); + if (e instanceof Element) { + source = new DOMSource (e); + break; + } + } + if (source != null) { + t.transform (source, sr); + + String s = sw.toString (); + return s; + } + + return null; + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in domToStr", e); + } + return null; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkRequestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkRequestHandler.java new file mode 100644 index 0000000000..8d44d213b1 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkRequestHandler.java @@ -0,0 +1,667 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.RequestClient; +import org.openecomp.mso.apihandler.common.RequestClientFactory; +import org.openecomp.mso.apihandler.common.ResponseHandler; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.networkbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkInputs; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkOutputs; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequests; +import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.Recipe; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/network-request") +public class NetworkRequestHandler { + + @Context + private UriInfo uriInfo; + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + private static MsoJavaProperties props = MsoPropertiesUtils.loadMsoProperties (); + + private static final String NOT_FOUND = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not started, properties file missing or invalid or Database Connection failed</body></html>"; + + private static final Response NOT_STARTED_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_FOUND) + .build (); + + @GET + public Response queryFilters (@QueryParam("network-type") String networkType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenant-id") String tenantId, + @PathParam("version") String version) { + MsoLogger.setServiceName ("QueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + long startTime = System.currentTimeMillis (); + + msoLogger.debug ("Incoming request received for query filters with Network type " + networkType + + " - service type " + + serviceType + + " - aicNodeClli " + + aicNodeClli + + " - tenant id " + + tenantId); + Response response = null; + if (networkType != null) { + response = this.getRequestList ("vnfType", networkType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + MsoLogger.setServiceName ("GetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with requestId=" + requestId + ", version = " + version); + long startTime = System.currentTimeMillis (); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + protected void fillNetworkRequest (NetworkRequest qr, InfraRequests ar, String version) { + NetworkInputs vi = beansObjectFactory.createNetworkInputs (); + + if (ar.getVnfId () != null) { + vi.setNetworkId (ar.getVnfId ()); + } + if (ar.getVnfName () != null) { + vi.setNetworkName (ar.getVnfName ()); + } + if (ar.getVnfType () != null) { + vi.setNetworkType (ar.getVnfType ()); + } + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + + } + + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + if (ar.getProvStatus () != null) { + vi.setProvStatus (ar.getProvStatus ()); + } + qr.setNetworkInputs (vi); + + qr.setNetworkParams (ar.getVnfParams ()); + + try { + String networkoutputs = ar.getVnfOutputs (); + if (networkoutputs != null && networkoutputs.length () > 0) { + msoLogger.debug ("Read NETWORK outputs: " + networkoutputs); + NetworkOutputs networkOutput = null; + + // Now unmarshal it into network outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (networkoutputs)); + SAXSource source = new SAXSource (inputSource); + + networkOutput = jaxbUnmarshaller.unmarshal (source, NetworkOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for network outputs"); + } + + qr.setNetworkOutputs (networkOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading networkOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + MsoLogger.setLogContext (requestId, null); + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, "NETWORK"); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + "NETWORK"); + + List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateNetworkRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private NetworkRequest fillGeneric (InfraRequests ar) { + NetworkRequest qr = beansObjectFactory.createNetworkRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <NetworkRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> (); + + for (InfraRequests ar : arList) { + NetworkRequest qr = fillGeneric (ar); + fillNetworkRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateNetworkRequests (List <NetworkRequest> queryResponseList) { + NetworkRequests queryResponses = new NetworkRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getNetworkRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + NetworkRequest qr = fillGeneric (ar); + fillNetworkRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } + + @POST + @Path("/") + @Produces(MediaType.APPLICATION_XML) + public Response manageNetworkRequest (String reqXML, @PathParam("version") String version) { + MsoLogger.setServiceName ("NetworkRequest"); + if ("v1".equals(version)) { + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } else if ("v2".equals(version)) { + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } else if ("v3".equals(version)) { + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } else { + long startTime = System.currentTimeMillis (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Version not found"); + return Response.status(HttpStatus.SC_NOT_FOUND).build(); + } + } + + private Response manageNetworkRequestImpl (String reqXML, String version) { + String methodName = "NetworkRequest"; + + props = MsoPropertiesUtils.loadMsoProperties (); + + long startTime = System.currentTimeMillis (); + if (MsoPropertiesUtils.getNoPropertiesState()) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Application not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + uriInfo.getRequestUri (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + NetworkMsoInfraRequest msoRequest = new NetworkMsoInfraRequest (requestUUID.toString ()); + MsoLogger.setLogContext (msoRequest.getRequestId (), null); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The input Request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + + msoLogger.debug ("Incoming Request: " + reqXML); + + msoRequest.setRequestUri (requestUri); + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + if (msoRequest.getRequestInfo () + .getAction () == org.openecomp.mso.apihandlerinfra.networkbeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same network Name + msoLogger.debug ("Checking for a duplicate with the same network-name"); + InfraActiveRequests dup = null; + try { + + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getNetworkInputs ().getNetworkName (), + msoRequest.getRequestInfo ().getAction ().value (), + "NETWORK"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "network-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + "CREATE on the same Network Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same Network Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same Network Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same networkId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same network-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getNetworkInputs ().getNetworkId (), + msoRequest.getRequestInfo ().getAction ().value (), + "NETWORK"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "network-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the same network-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the same network-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same Network Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same Network Id already in progress"); + + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same Network Id already in progress."); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + // Query MSO Catalog DB + try (CatalogDatabase db = new CatalogDatabase()) { + + Recipe recipe = null; + + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getNetworkRecipe (msoRequest.getNetworkInputs ().getNetworkType (), + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + + } + if (recipe == null) { + recipe = db.getNetworkRecipe (msoRequest.getNetworkInputs ().getNetworkType (), + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "VNF Recipe attribute not found"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + db.close (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + + db.close (); + + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.DataError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.DataError, "bpelResponse is null"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is null"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is with status Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkTypesHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkTypesHandler.java new file mode 100644 index 0000000000..f89cae988a --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/NetworkTypesHandler.java @@ -0,0 +1,101 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringWriter; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpStatus; + +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkType; +import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkTypes; +import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.NetworkResource; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.utils.UUIDChecker; + +@Path(Constants.NETWORK_TYPES_PATH) +public class NetworkTypesHandler { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + @GET + public Response getNetworkTypes () { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("getNetworkTypes"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getNetworkTypes"); + + List <NetworkResource> networkResources = null; + try (CatalogDatabase db = new CatalogDatabase()){ + networkResources = db.getAllNetworkResources (); + } catch (Exception e) { + msoLogger.debug ("No connection to catalog DB", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "no connection to catalog DB"); + msoLogger.debug ("End of the transaction, the final response is: " + e.toString ()); + return Response.status (HttpStatus.SC_NOT_FOUND).entity (e.toString ()).build (); + } + + if (networkResources == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "NetworkType not found"); + msoLogger.debug ("End of the transaction. NetworkType not found the final response status: " + HttpStatus.SC_NOT_FOUND); + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + + ObjectFactory beansObjectFactory = new ObjectFactory (); + NetworkTypes networkTypes = beansObjectFactory.createNetworkTypes (); + for (int i = 0; i < networkResources.size (); i++) { + NetworkType networkType = beansObjectFactory.createNetworkType (); + NetworkResource vr = networkResources.get (i); + networkType.setType (vr.getNetworkType ()); + networkType.setDescription (vr.getDescription ()); + networkType.setId (String.valueOf (vr.getId ())); + networkTypes.getNetworkType ().add (networkType); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (NetworkTypes.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (networkTypes, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + response); + return Response.status (HttpStatus.SC_OK).entity (response).build (); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java new file mode 100644 index 0000000000..00104daaf6 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java @@ -0,0 +1,251 @@ +/*- + * ============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.apihandlerinfra; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +import org.apache.http.HttpStatus; +import org.codehaus.jackson.map.ObjectMapper; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.GetOrchestrationListResponse; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.GetOrchestrationResponse; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.InstanceReferences; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.Request; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestDetails; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestList; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestStatus; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; + +@Path("/orchestrationRequests/v2") +public class OrchestrationRequests { + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + /** + * + */ + public OrchestrationRequests() { + // TODO Auto-generated constructor stub + } + + @GET + @Path("/{requestId}") + @Produces(MediaType.APPLICATION_JSON) + public Response getOrchestrationRequest(@PathParam("requestId") String requestId) { + + GetOrchestrationResponse orchestrationResponse = new GetOrchestrationResponse(); + + MsoRequest msoRequest = new MsoRequest (requestId); + + long startTime = System.currentTimeMillis (); + + InfraActiveRequests requestDB = null; + + try { + requestDB = RequestsDatabase.getRequestFromInfraActive(requestId); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Request DB - Infra Request Lookup", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + e.getMessage (), + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with Request DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + + } + + if(requestDB == null) { + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NO_CONTENT, + MsoException.ServiceException, + "Orchestration RequestId " + requestId + " is not found in DB", + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from RequestDB when searching by RequestId"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Null response from RequestDB when searching by RequestId"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + + } + + Request request = mapInfraActiveRequestToRequest(requestDB); + + orchestrationResponse.setRequest(request); + + return Response.status(200).entity(orchestrationResponse).build(); + } + + @GET + @Path("/") + @Produces(MediaType.APPLICATION_JSON) + public Response getOrchestrationRequest(@Context UriInfo ui) { + + long startTime = System.currentTimeMillis (); + + MsoRequest msoRequest = new MsoRequest(); + + MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); + + List<InfraActiveRequests> activeRequests = null; + + GetOrchestrationListResponse orchestrationList = null; + + + try{ + + Map<String, List<String>> orchestrationMap = msoRequest.getOrchestrationFilters(queryParams); + + activeRequests = RequestsDatabase.getOrchestrationFiltersFromInfraActive(orchestrationMap); + + orchestrationList = new GetOrchestrationListResponse(); + + List<RequestList> requestLists = new ArrayList<RequestList>(); + + for(InfraActiveRequests infraActive : activeRequests){ + + Request request = mapInfraActiveRequestToRequest(infraActive); + RequestList requestList = new RequestList(); + requestList.setRequest(request); + + requestLists.add(requestList); + + } + + orchestrationList.setRequestList(requestLists); + + }catch(Exception e){ + msoLogger.debug ("Get Orchestration Request with Filters Failed : ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, MsoException.ServiceException, + "Get Orchestration Request with Filters Failed. " + e.getMessage(), + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null); + msoLogger.error (MessageEnum.APIH_GENERAL_EXCEPTION, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Get Orchestration Request with Filters Failed : " + e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataError, "Get Orchestration Request with Filters Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + return Response.status(200).entity(orchestrationList).build(); + } + + private Request mapInfraActiveRequestToRequest(InfraActiveRequests requestDB) { + + + Request request = new Request(); + + ObjectMapper mapper = new ObjectMapper(); + // mapper.configure(Feature.WRAP_ROOT_VALUE, true); + + request.setRequestId(requestDB.getRequestId()); + request.setRequestScope(requestDB.getRequestScope()); + request.setRequestType(requestDB.getRequestAction()); + + InstanceReferences ir = new InstanceReferences(); + if(requestDB.getNetworkId() != null) + ir.setNetworkInstanceId(requestDB.getNetworkId()); + if(requestDB.getNetworkName() != null) + ir.setNetworkInstanceName(requestDB.getNetworkName()); + if(requestDB.getServiceInstanceId() != null) + ir.setServiceInstanceId(requestDB.getServiceInstanceId()); + if(requestDB.getServiceInstanceName() != null) + ir.setServiceInstanceName(requestDB.getServiceInstanceName()); + if(requestDB.getVfModuleId() != null) + ir.setVfModuleInstanceId(requestDB.getVfModuleId()); + if(requestDB.getVfModuleName() != null) + ir.setVfModuleInstanceName(requestDB.getVfModuleName()); + if(requestDB.getVnfId() != null) + ir.setVnfInstanceId(requestDB.getVnfId()); + if(requestDB.getVnfName() != null) + ir.setVnfInstanceName(requestDB.getVnfName()); + if(requestDB.getVolumeGroupId() != null) + ir.setVolumeGroupInstanceId(requestDB.getVolumeGroupId()); + if(requestDB.getVolumeGroupName() != null) + ir.setVolumeGroupInstanceName(requestDB.getVolumeGroupName()); + + + request.setInstanceReferences(ir); + + String requestBody = requestDB.getRequestBody(); + + RequestDetails requestDetails = null; + + try{ + requestDetails = mapper.readValue(requestBody, RequestDetails.class); + + }catch(Exception e){ + msoLogger.debug("Exception caught mapping requestBody to RequestDetails"); + } + + request.setRequestDetails(requestDetails); + String startTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getStartTime()) + " GMT"; + request.setStartTime(startTimeStamp); + + RequestStatus status = new RequestStatus(); + if(requestDB.getStatusMessage() != null){ + status.setStatusMessage(requestDB.getStatusMessage()); + } + + if(requestDB.getEndTime() != null){ + String endTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getEndTime()) + " GMT"; + status.setFinishTime(endTimeStamp); + } + + + if(requestDB.getRequestStatus() != null){ + status.setRequestState(requestDB.getRequestStatus()); + } + + if(requestDB.getProgress() != null){ + status.setPercentProgress(requestDB.getProgress().intValue()); + } + + request.setRequestStatus(status); + + return request; + } + } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RecipeLookupResult.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RecipeLookupResult.java new file mode 100644 index 0000000000..234f4068e3 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RecipeLookupResult.java @@ -0,0 +1,50 @@ +/*- + * ============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.apihandlerinfra; + + +public class RecipeLookupResult { + + private String orchestrationURI; + private int recipeTimeout; + + public RecipeLookupResult(String orchestrationURI, int recipeTimeout) { + this.orchestrationURI = orchestrationURI; + this.recipeTimeout = recipeTimeout; + } + + public String getOrchestrationURI () { + return orchestrationURI; + } + + public void setOrchestrationURI (String orchestrationURI) { + this.orchestrationURI = orchestrationURI; + } + + public int getRecipeTimeout () { + return recipeTimeout; + } + + public void setRecipeTimeout (int recipeTimeout) { + this.recipeTimeout = recipeTimeout; + } +} + diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestActionMap.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestActionMap.java new file mode 100644 index 0000000000..940fcc9c57 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestActionMap.java @@ -0,0 +1,52 @@ +/*- + * ============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.apihandlerinfra; + +import java.util.HashMap; +import java.util.Map; + +/* + * Map of actions to RequestActions +*/ +public class RequestActionMap { + private static final Map<String, String> actionMap; + + static { + actionMap = new HashMap<String, String>(); + actionMap.put("CREATE_VF_MODULE", "createInstance"); + actionMap.put("DELETE_VF_MODULE", "deleteInstance"); + actionMap.put("UPDATE_VF_MODULE", "updateInstance"); + actionMap.put("CREATE_VF_MODULE_VOL", "createInstance"); + actionMap.put("DELETE_VF_MODULE_VOL", "deleteInstance"); + actionMap.put("UPDATE_VF_MODULE_VOL", "updateInstance"); + actionMap.put("CREATE", "createInstance"); + actionMap.put("DELETE", "deleteInstance"); + actionMap.put("UPDATE", "updateInstance"); + actionMap.put("createInstance", "createInstance"); + actionMap.put("deleteInstance", "deleteInstance"); + actionMap.put("updateInstance", "updateInstance"); + + } + + public static String getMappedRequestAction(String action) { + return actionMap.get(action); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestHandler.java new file mode 100644 index 0000000000..bfea00fad6 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/RequestHandler.java @@ -0,0 +1,2102 @@ +package org.openecomp.mso.apihandlerinfra; + +/*- + * #%L + * MSO + * %% + * Copyright (C) 2016 OPENECOMP - MSO + * %% + * 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. + * #L% + */ + + +import java.text.SimpleDateFormat; +import java.util.*; + +import javax.servlet.ServletContext; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +import org.openecomp.mso.HealthCheckUtils; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig.Feature; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.RequestClient; +import org.openecomp.mso.apihandler.common.RequestClientFactory; +import org.openecomp.mso.apihandler.common.ResponseHandler; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.GetOrchestrationListResponse; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.GetOrchestrationResponse; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.InstanceReferences; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstance; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstanceList; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.Request; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestDetails; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestError; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestList; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestStatus; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestReferences; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesResponse; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.Recipe; +import org.openecomp.mso.db.catalog.beans.Service; +import org.openecomp.mso.db.catalog.beans.ServiceRecipe; +import org.openecomp.mso.db.catalog.beans.VfModule; +import org.openecomp.mso.db.catalog.beans.VnfComponentsRecipe; +import org.openecomp.mso.db.catalog.beans.VnfRecipe; +import org.openecomp.mso.db.catalog.beans.VnfResource; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/") +public class RequestHandler { + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory (); + + @Context + private UriInfo uriInfo; + + private static final String NOT_FOUND = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not started, properties file missing or invalid or Database Connection failed</body></html>"; + + private static final Response NOT_STARTED_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_FOUND) + .build (); + + private static boolean noProperties = true; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + @Context + private ServletContext sc; + + private static MsoJavaProperties props = loadMsoProperties (); + HashMap<String, String> instanceIdMap = new HashMap<String,String>(); + + @HEAD + @GET + @Path("/healthcheck") + @Produces("text/html") + public Response healthcheck (@QueryParam("requestId") String requestId) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("Healthcheck"); + UUIDChecker.verifyOldUUID(requestId, msoLogger); + HealthCheckUtils healthCheck = new HealthCheckUtils (); + if (!healthCheck.siteStatusCheck(msoLogger, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (!healthCheck.configFileCheck(msoLogger, startTime, MSO_PROP_APIHANDLER_INFRA)) { + return HealthCheckUtils.NOT_STARTED_RESPONSE; + } + + if (!healthCheck.requestDBCheck (msoLogger, startTime)) { + return HealthCheckUtils.NOT_STARTED_RESPONSE; + } + msoLogger.debug("healthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } + + @HEAD + @GET + @Path("/globalhealthcheck") + @Produces("text/html") + public Response globalHealthcheck (@DefaultValue("true") @QueryParam("enableBpmn") boolean enableBpmn) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("GlobalHealthcheck"); + // Generate a Request Id + String requestId = UUIDChecker.generateUUID(msoLogger); + HealthCheckUtils healthCheck = new HealthCheckUtils (); + if (!healthCheck.siteStatusCheck (msoLogger, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (healthCheck.verifyGlobalHealthCheck(enableBpmn, requestId)) { + msoLogger.debug("globalHealthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } else { + msoLogger.debug("globalHealthcheck - At leaset one of the sub-modules is not available"); + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + } + + private static MsoJavaProperties loadMsoProperties () { + MsoJavaProperties msoProperties; + try { + msoProperties = msoPropertiesFactory.getMsoJavaProperties (MSO_PROP_APIHANDLER_INFRA); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_LOAD_PROPERTIES_FAIL, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Exception when loading MSO Properties", e); + return null; + } + + if (msoProperties != null && msoProperties.size () > 0) { + noProperties = false; + msoLogger.info (MessageEnum.APIH_PROPERTY_LOAD_SUC, "", ""); + return msoProperties; + } else { + msoLogger.error (MessageEnum.APIH_NO_PROPERTIES, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "No MSO APIH_INFRA Properties found"); + return null; + } + } + + @POST + @Path("/serviceInstances/v2") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createServiceInstance(String request) { + + Response response = serviceInstances(request, Action.createInstance, null); + + return response; + } + + @DELETE + @Path("/serviceInstances/v2/{serviceInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteServiceInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + return response; + } + + @POST + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVnfInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVnfInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + @POST + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + + @POST + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/serviceInstances/v2/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + @POST + @Path("/serviceInstances/v2/{serviceInstanceId}/networks") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/serviceInstances/v2/{serviceInstanceId}/networks/{networkInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("networkInstanceId") String networkInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("networkInstanceId", networkInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/serviceInstances/v2/{serviceInstanceId}/networks/{networkInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("networkInstanceId") String networkInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("networkInstanceId", networkInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + + + private Response serviceInstances(String requestJSON, Action action, HashMap<String,String> instanceIdMap) { + + String requestId = UUIDChecker.generateUUID(msoLogger); + long startTime = System.currentTimeMillis (); + msoLogger.debug ("requestId is: " + requestId); + ServiceInstancesRequest sir = null; + + MsoRequest msoRequest = new MsoRequest (requestId); + + + try{ + ObjectMapper mapper = new ObjectMapper(); + sir = mapper.readValue(requestJSON, ServiceInstancesRequest.class); + + } catch(Exception e){ + msoLogger.debug ("Mapping of request to JSON object failed : ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException, + "Mapping of request to JSON object failed. " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, null); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Mapping of request to JSON object failed"); + msoRequest.createRequestRecord (Status.FAILED, action); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Mapping of request to JSON object failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + try{ + msoRequest.parse(sir, instanceIdMap, action); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException, + "Error parsing request. " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, null); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED, action); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + InfraActiveRequests dup = null; + String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName(); + String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name(); + try { + dup = RequestsDatabase.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Error during duplicate check ", e); + + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, MsoException.ServiceException, + e.getMessage(), + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null) ; + + + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Error during duplicate check"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + String instance = null; + if(instanceName != null){ + instance = instanceName; + }else{ + instance = instanceIdMap.get(requestScope + "InstanceId"); + } + String dupMessage = "Error: Locked instance - This " + requestScope + " (" + instance + ") " + "already has a request being worked with a status of " + dup.getRequestStatus() + " (RequestId - " + dup.getRequestId() + "). The existing request must finish or be cleaned up before proceeding."; + //List<String> variables = new ArrayList<String>(); + //variables.add(dup.getRequestStatus()); + + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT, MsoException.ServiceException, + dupMessage, + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null) ; + + + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, dupMessage, "", "", MsoLogger.ErrorCode.SchemaError, "Duplicate request - Subscriber already has a request for this service"); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, dupMessage); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse(); + + RequestReferences referencesResponse = new RequestReferences(); + + referencesResponse.setRequestId(requestId); + + serviceResponse.setRequestReferences(referencesResponse); + + try (CatalogDatabase db = new CatalogDatabase()) { + + RecipeLookupResult recipeLookupResult = null; + try { + recipeLookupResult = getServiceInstanceOrchestrationURI (db, msoRequest, action); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Exception while querying Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "Recipe could not be retrieved from catalog DB " + e.getMessage (), + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.ERROR_FROM_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED,action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while querying Catalog DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + + if (recipeLookupResult == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "No recipe found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "Recipe does not exist in catalog DB", + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, + null); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + + + Boolean isBaseVfModule = false; + + if (msoRequest.getModelInfo().getModelType().equals(ModelType.vfModule)) { + String asdcServiceModelVersion = msoRequest.getAsdcServiceModelVersion (); + + // Get VF Module-specific base module indicator + VfModule vfm = null; + + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vfm = db.getVfModuleType (msoRequest.getVfModuleType (), asdcServiceModelVersion); + } + else { + vfm = db.getVfModuleType (msoRequest.getVfModuleType ()); + } + + if (vfm != null) { + if (vfm.getIsBase() == 1) { + isBaseVfModule = true; + } + } + else if (action == Action.createInstance || action == Action.updateInstance){ + // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB. + // This request cannot proceed + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "VF Module Type", "", MsoLogger.ErrorCode.DataError, "No VfModuleType found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + String serviceVersionText = ""; + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + serviceVersionText = " with version " + asdcServiceModelVersion; + } + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "VnfType " + msoRequest.getVnfType () + " and VF Module Model Name " + msoRequest.getVfModuleModelName() + serviceVersionText + " not found in MSO Catalog DB", + ErrorNumbers.SVC_BAD_PARAMETER, + null); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No matching vfModuleType found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + } + + db.close(); + + String serviceInstanceId = ""; + String vnfId = ""; + String vfModuleId = ""; + String volumeGroupId = ""; + String networkId = ""; + ServiceInstancesRequest siReq = msoRequest.getServiceInstancesRequest(); + + if(siReq.getServiceInstanceId () != null){ + serviceInstanceId = siReq.getServiceInstanceId (); + } + + if(siReq.getVnfInstanceId () != null){ + vnfId = siReq.getVnfInstanceId (); + } + + if(siReq.getVfModuleInstanceId () != null){ + vfModuleId = siReq.getVfModuleInstanceId (); + } + + if(siReq.getVolumeGroupInstanceId () != null){ + volumeGroupId = siReq.getVolumeGroupInstanceId (); + } + + if(siReq.getNetworkInstanceId () != null){ + networkId = siReq.getNetworkInstanceId (); + } + + + requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING, action); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_INTERNAL_SERVER_ERROR, + MsoException.ServiceException, + "Exception while creating record in DB " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, + null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (recipeLookupResult.getOrchestrationURI (), props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + + System.out.println("URL : " + requestClient.getUrl ()); + + response = requestClient.post(requestId, isBaseVfModule, recipeLookupResult.getRecipeTimeout (), action.name (), + serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, + msoRequest.getServiceInstanceType (), + msoRequest.getVnfType (), msoRequest.getVfModuleType (), + msoRequest.getNetworkType (), requestJSON); + + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI (), null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI (), null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_BAD_GATEWAY, + MsoException.ServiceException, + "Failed calling bpmn " + e.getMessage (), + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_BAD_GATEWAY, + MsoException.ServiceException, + "bpelResponse is null", + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String camundaJSONResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from Camunda: " + camundaJSONResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) camundaJSONResponseBody); + return Response.status (HttpStatus.SC_ACCEPTED).entity (camundaJSONResponseBody).build (); + } else { + List<String> variables = new ArrayList<String>(); + variables.add(bpelStatus + ""); + String camundaJSONResponseBody = respHandler.getResponseBody (); + if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, + MsoException.ServiceException, + "Request Failed due to BPEL error with HTTP Status= %1 " + '\n' + camundaJSONResponseBody, + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + variables); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, + MsoException.ServiceException, + "Request Failed due to BPEL error with HTTP Status= %1" , + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + variables); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + + //return Response.status (HttpStatus.SC_ACCEPTED).entity (serviceResponse).build (); + // return serviceResponse; + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "No communication to catalog DB " + e.getMessage (), + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED,action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + @GET + @Path("/orchestrationRequests/v2/{requestId}") + @Produces(MediaType.APPLICATION_JSON) + public Response getOrchestrationRequest(@PathParam("requestId") String requestId) { + + GetOrchestrationResponse orchestrationResponse = new GetOrchestrationResponse(); + + MsoRequest msoRequest = new MsoRequest (requestId); + + long startTime = System.currentTimeMillis (); + + InfraActiveRequests requestDB = null; + + try { + requestDB = RequestsDatabase.getRequestFromInfraActive(requestId); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Request DB - Infra Request Lookup", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + e.getMessage (), + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with Request DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + + } + + if(requestDB == null) { + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NO_CONTENT, + MsoException.ServiceException, + "Orchestration RequestId " + requestId + " is not found in DB", + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from RequestDB when searching by RequestId"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Null response from RequestDB when searching by RequestId"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + + } + + Request request = mapInfraActiveRequestToRequest(requestDB); + + orchestrationResponse.setRequest(request); + + return Response.status(200).entity(orchestrationResponse).build(); + } + + @GET + @Path("/orchestrationRequests/v2") + @Produces(MediaType.APPLICATION_JSON) + public Response getOrchestrationRequest(@Context UriInfo ui) { + + long startTime = System.currentTimeMillis (); + + MsoRequest msoRequest = new MsoRequest(); + + MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); + + List<InfraActiveRequests> activeRequests = null; + + GetOrchestrationListResponse orchestrationList = null; + + + try{ + + Map<String, List<String>> orchestrationMap = msoRequest.getOrchestrationFilters(queryParams); + + activeRequests = RequestsDatabase.getOrchestrationFiltersFromInfraActive(orchestrationMap); + + orchestrationList = new GetOrchestrationListResponse(); + + List<RequestList> requestLists = new ArrayList<RequestList>(); + + for(InfraActiveRequests infraActive : activeRequests){ + + Request request = mapInfraActiveRequestToRequest(infraActive); + RequestList requestList = new RequestList(); + requestList.setRequest(request); + + requestLists.add(requestList); + + } + + orchestrationList.setRequestList(requestLists); + + }catch(Exception e){ + msoLogger.debug ("Get Orchestration Request with Filters Failed : ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, MsoException.ServiceException, + "Get Orchestration Request with Filters Failed. " + e.getMessage(), + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null); + msoLogger.error (MessageEnum.APIH_GENERAL_EXCEPTION, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Get Orchestration Request with Filters Failed : " + e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataError, "Get Orchestration Request with Filters Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + return Response.status(200).entity(orchestrationList).build(); + } + + @POST + @Path("/v3/vnf-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVnfRequestV3 (String reqXML) { + // Set logger parameters + MsoLogger.setServiceName ("VnfRequest"); + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } + + + @POST + @Path("/v2/vnf-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVnfRequestV2 (String reqXML) { + // Set logger parameters + MsoLogger.setServiceName ("VnfRequest"); + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } + + @POST + @Path("/v1/vnf-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVnfRequestV1 (String reqXML) { + + // Set logger parameters + MsoLogger.setServiceName ("VnfRequest"); + + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } + + @POST + @Path("/v3/network-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageNetworkRequestV3 (String reqXML) { + + // Set logger parameters + MsoLogger.setServiceName ("NetworkRequest"); + + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } + + @POST + @Path("/v2/network-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageNetworkRequestV2 (String reqXML) { + + // Set logger parameters + MsoLogger.setServiceName ("NetworkRequest"); + + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } + + @POST + @Path("/v1/network-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageNetworkRequestV1 (String reqXML) { + + // Set logger parameters + MsoLogger.setServiceName ("NetworkRequest"); + + return manageNetworkRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } + + @POST + @Path("/v3/volume-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVolumeRequestV3 (String reqXML) { + // Set logger parameters + MsoLogger.setServiceName ("VolumeRequest"); + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } + + @POST + @Path("/v2/volume-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVolumeRequestV2 (String reqXML) { + // Set logger parameters + MsoLogger.setServiceName ("VolumeRequest"); + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } + + @POST + @Path("/v1/volume-request") + @Consumes("*/*") + @Produces("application/xml") + public Response manageVolumeRequestV1 (String reqXML) { + + // Set logger parameters + MsoLogger.setServiceName ("VolumeRequest"); + + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } + + + private Response manageVnfRequestImpl (String reqXML, String version) { + String methodName = "VnfRequest"; + props = loadMsoProperties (); + long startTime = System.currentTimeMillis (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + VnfMsoInfraRequest msoRequest = new VnfMsoInfraRequest (requestUUID.toString ()); + MsoLogger.setLogContext (msoRequest.getRequestId (), null); + + if (noProperties) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Exiting the transaction: Infra API Handler not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + + uriInfo.getRequestUri (); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The content of the request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + msoLogger.debug ("Incoming request received for pose VNFRequest:" + reqXML); + + msoRequest.setRequestUri (requestUri); + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.SchemaError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + if (msoRequest.getRequestInfo ().getAction () == org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same vnfName + msoLogger.debug ("Checking for a duplicate with the same vnf-name"); + InfraActiveRequests dup = null; + try { + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getVnfInputs ().getVnfName (), + msoRequest.getRequestInfo ().getAction ().value (), + "VNF"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "vnf-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, "CREATE on the same VNF Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same VNF Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same VNF Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same vnfId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same vnf-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getVnfInputs ().getVnfId (), + msoRequest.getRequestInfo ().getAction ().value (), + "VNF"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "vnf-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the same vnf-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the same vnf-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same VNF Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same VNF Id already in progress"); + + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same VNF Id already in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + try (CatalogDatabase db = new CatalogDatabase()) { + + Recipe recipe = null; + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + // First get recipe for the service type given + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + } + // If no recipe for the service type or no service type was given, look for recipe without service type + if (recipe == null) { + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + } + if (version.equals (Constants.SCHEMA_VERSION_V2) || version.equals (Constants.SCHEMA_VERSION_V3)) { + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE: + case UPDATE: + case DELETE: + // First get recipe for the vnf type given + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfRecipe (Constants.VNF_TYPE_WILDCARD, + msoRequest.getRequestInfo ().getAction ().value ()); + } + break; + case CREATE_VF_MODULE: + case UPDATE_VF_MODULE: + case DELETE_VF_MODULE: + // First get recipe for the vnf type/vf module model name through vf module id query + recipe = db.getVfModuleRecipe (msoRequest.getVnfInputs ().getVnfType (), msoRequest.getVnfInputs ().getVfModuleModelName (), + msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfRecipeByVfModuleId (msoRequest.getVnfInputs ().getVfModuleId (), + Constants.VNF_TYPE_WILDCARD, msoRequest.getRequestInfo ().getAction ().value ()); + } + // First get recipe for the vnf type given + //recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + // msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + //if (recipe == null) { + // recipe = db.getVnfRecipe (Constants.VNF_TYPE_WILDCARD, + // msoRequest.getRequestInfo ().getAction ().value ()); + // + //} + break; + default: + break; + } + + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "No recipe found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + db.close (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + + // Retrieve additional info for Vf Modules from Catalog DB to send it to BPMN + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE_VF_MODULE: + case UPDATE_VF_MODULE: + String personaModelId = ""; + String personaModelVersion = ""; + String vnfPersonaModelId = ""; + String vnfPersonaModelVersion = ""; + Boolean isBase = false; + String asdcServiceModelVersion = msoRequest.getVnfInputs ().getAsdcServiceModelVersion (); + + // Get VF Module-specific persona info and base module indicator + VfModule vfm = null; + String vfModuleType = msoRequest.getVnfInputs ().getVnfType () + "::" + msoRequest.getVnfInputs ().getVfModuleModelName (); + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vfm = db.getVfModuleType (vfModuleType, asdcServiceModelVersion); + } + else { + vfm = db.getVfModuleType (vfModuleType); + } + if (vfm != null) { + if (vfm.getIsBase() == 1) { + isBase = true; + } + personaModelId = vfm.getModelInvariantUuid(); + personaModelVersion = vfm.getModelVersion(); + msoLogger.debug("Setting personaModelId to " + personaModelId + + ", personaModelVersion to " + personaModelVersion); + } + // Get VNF-specific persona info + VnfResource vnfr = null; + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vnfr = db.getVnfResource (msoRequest.getVnfInputs ().getVnfType (), asdcServiceModelVersion); + } + else { + vnfr = db.getVnfResource (msoRequest.getVnfInputs ().getVnfType ()); + } + if (vnfr != null) { + vnfPersonaModelId = vnfr.getModelInvariantUuid (); + vnfPersonaModelVersion = vnfr.getModelVersion(); + msoLogger.debug("Setting vnfPersonaModelId to " + vnfPersonaModelId + + ", vnfPersonaModelVersion to " + vnfPersonaModelVersion); + } + + msoRequest.addBPMNSpecificInputs(personaModelId, personaModelVersion, isBase, + vnfPersonaModelId, vnfPersonaModelVersion); + + break; + default: + break; + } + + db.close (); + + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + msoLogger.debug("Request going to BPEL: " + msoRequest.getRequestXML ()); + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Null response from BPEL"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + private Response manageNetworkRequestImpl (String reqXML, String version) { + String methodName = "NetworkRequest"; + + props = loadMsoProperties (); + + long startTime = System.currentTimeMillis (); + if (noProperties) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Application not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + uriInfo.getRequestUri (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + NetworkMsoInfraRequest msoRequest = new NetworkMsoInfraRequest (requestUUID.toString ()); + MsoLogger.setLogContext (msoRequest.getRequestId (), null); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The input Request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + + msoLogger.debug ("Incoming Request: " + reqXML); + + msoRequest.setRequestUri (requestUri); + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + if (msoRequest.getRequestInfo () + .getAction () == org.openecomp.mso.apihandlerinfra.networkbeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same network Name + msoLogger.debug ("Checking for a duplicate with the same network-name"); + InfraActiveRequests dup = null; + try { + + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getNetworkInputs ().getNetworkName (), + msoRequest.getRequestInfo ().getAction ().value (), + "NETWORK"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "network-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + "CREATE on the same Network Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same Network Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same Network Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same networkId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same network-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getNetworkInputs ().getNetworkId (), + msoRequest.getRequestInfo ().getAction ().value (), + "NETWORK"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "network-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the same network-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the same network-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same Network Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same Network Id already in progress"); + + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same Network Id already in progress."); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + // Query MSO Catalog DB + try (CatalogDatabase db = new CatalogDatabase()) { + Recipe recipe = null; + + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getNetworkRecipe (msoRequest.getNetworkInputs ().getNetworkType (), + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + + } + if (recipe == null) { + recipe = db.getNetworkRecipe (msoRequest.getNetworkInputs ().getNetworkType (), + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "VNF Recipe attribute not found"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + db.close (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.DataError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.DataError, "bpelResponse is null"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is null"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is with status Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + private Response manageVolumeRequestImpl (String reqXML, String version) { + String methodName = "VolumeRequest"; + props = loadMsoProperties (); + + long startTime = System.currentTimeMillis (); + if (noProperties) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Application not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + + uriInfo.getRequestUri (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + VolumeMsoInfraRequest msoRequest = new VolumeMsoInfraRequest (requestUUID.toString ()); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The input request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + + msoLogger.debug ("Incoming Request: " + reqXML); + + msoRequest.setRequestUri (requestUri); + + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo ().getAction ().name ()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo ().getAction ().name ()); + if (msoRequest.getRequestInfo () + .getAction () == org.openecomp.mso.apihandlerinfra.volumebeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same network Name + msoLogger.debug ("Checking for a duplicate with the same volume-name"); + InfraActiveRequests dup = null; + try { + + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getVolumeInputs ().getVolumeGroupName (), + msoRequest.getRequestInfo ().getAction ().value (), + "VOLUME"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "volume-group-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + "CREATE on the same Volume Group Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same Volume Group Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same Volume Group Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same volumeGroupId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same volume-group-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getVolumeInputs ().getVolumeGroupId (), + msoRequest.getRequestInfo ().getAction ().value (), + "VOLUME"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "volume-group-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the sam volume-group-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the sam volume-group-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same Volume Group Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same Volume Group Id already in progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same Volume Group Id already in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + // Query MSO Catalog DB + try (CatalogDatabase db = new CatalogDatabase()) { + + Recipe recipe = null; + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + } + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + null); + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + } + } + else if (version.equals (Constants.SCHEMA_VERSION_V2) || version.equals (Constants.SCHEMA_VERSION_V3)) { + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE: + case UPDATE: + case DELETE: + // First get recipe for the vnf type given + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + } + break; + case CREATE_VF_MODULE_VOL: + case UPDATE_VF_MODULE_VOL: + case DELETE_VF_MODULE_VOL: + // First get recipe for the vnf type given + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + + // If no recipe for the vnf type is found, look for generic recipe with "*" in vf module id + if (recipe == null) { + recipe = db.getVnfComponentsRecipeByVfModuleId (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value ()); + } + break; + default: + break; + } + + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "VNF Recipe not found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "VNF Recipe not found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception in createRequestRecord", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.DataError, "Null response from BPMN engine"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.DataError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is with status Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.DataError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + private Request mapInfraActiveRequestToRequest(InfraActiveRequests requestDB) { + + + Request request = new Request(); + + ObjectMapper mapper = new ObjectMapper(); + // mapper.configure(Feature.WRAP_ROOT_VALUE, true); + + request.setRequestId(requestDB.getRequestId()); + request.setRequestScope(requestDB.getRequestScope()); + request.setRequestType(requestDB.getRequestAction()); + + InstanceReferences ir = new InstanceReferences(); + if(requestDB.getNetworkId() != null) + ir.setNetworkInstanceId(requestDB.getNetworkId()); + if(requestDB.getNetworkName() != null) + ir.setNetworkInstanceName(requestDB.getNetworkName()); + if(requestDB.getServiceInstanceId() != null) + ir.setServiceInstanceId(requestDB.getServiceInstanceId()); + if(requestDB.getServiceInstanceName() != null) + ir.setServiceInstanceName(requestDB.getServiceInstanceName()); + if(requestDB.getVfModuleId() != null) + ir.setVfModuleInstanceId(requestDB.getVfModuleId()); + if(requestDB.getVfModuleName() != null) + ir.setVfModuleInstanceName(requestDB.getVfModuleName()); + if(requestDB.getVnfId() != null) + ir.setVnfInstanceId(requestDB.getVnfId()); + if(requestDB.getVnfName() != null) + ir.setVnfInstanceName(requestDB.getVnfName()); + if(requestDB.getVolumeGroupId() != null) + ir.setVolumeGroupInstanceId(requestDB.getVolumeGroupId()); + if(requestDB.getVolumeGroupName() != null) + ir.setVolumeGroupInstanceName(requestDB.getVolumeGroupName()); + + + request.setInstanceReferences(ir); + + String requestBody = requestDB.getRequestBody(); + + RequestDetails requestDetails = null; + + try{ + requestDetails = mapper.readValue(requestBody, RequestDetails.class); + + }catch(Exception e){ + msoLogger.debug("Exception caught mapping requestBody to RequestDetails"); + } + + request.setRequestDetails(requestDetails); + String startTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getStartTime()) + " GMT"; + request.setStartTime(startTimeStamp); + + RequestStatus status = new RequestStatus(); + if(requestDB.getStatusMessage() != null){ + status.setStatusMessage(requestDB.getStatusMessage()); + } + + if(requestDB.getEndTime() != null){ + String endTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getEndTime()) + " GMT"; + status.setFinishTime(endTimeStamp); + } + + + if(requestDB.getRequestStatus() != null){ + status.setRequestState(requestDB.getRequestStatus()); + } + + if(requestDB.getProgress() != null){ + status.setPercentProgress(requestDB.getProgress().intValue()); + } + + request.setRequestStatus(status); + + return request; + } + + private RecipeLookupResult getServiceInstanceOrchestrationURI (CatalogDatabase db, MsoRequest msoRequest, Action action) throws Exception { + + RecipeLookupResult recipeLookupResult = null; + // Query MSO Catalog DB + + if (msoRequest.getModelInfo().getModelType().equals(ModelType.service)) { + + // SERVICE REQUEST + // Construct the default service name + // TODO need to make this a configurable property + + String defaultServiceName = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + Service serviceRecord = db.getServiceByName(defaultServiceName); + int serviceId = serviceRecord.getId(); + ServiceRecipe recipe = db.getServiceRecipe(serviceId, action.name()); + + if (recipe == null) { + return null; + } + + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.vfModule) || + msoRequest.getModelInfo().getModelType().equals(ModelType.volumeGroup)) { + + String vnfComponentType = msoRequest.getModelInfo().getModelType().name(); + VnfComponentsRecipe recipe = null; + + if (action != Action.deleteInstance) { + RelatedInstanceList[] instanceList = null; + if (msoRequest.getServiceInstancesRequest().getRequestDetails() != null) { + instanceList = msoRequest.getServiceInstancesRequest().getRequestDetails().getRelatedInstanceList(); + } + + String serviceModelName = null; + String vnfModelName = null; + String vfModuleModelName = null; + String asdcServiceModelVersion = null; + String modelVersion = null; + + if (instanceList != null) { + + for(RelatedInstanceList relatedInstanceList : instanceList){ + + RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance(); + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)){ + serviceModelName = relatedInstance.getModelInfo().getModelName(); + asdcServiceModelVersion = relatedInstance.getModelInfo().getModelVersion(); + } + + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)){ + vnfModelName = relatedInstance.getModelInfo().getModelCustomizationName(); + } + + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vfModule) || + relatedInstance.getModelInfo().getModelType().equals(ModelType.volumeGroup)) { + vfModuleModelName = relatedInstance.getModelInfo().getModelName(); + modelVersion = relatedInstance.getModelInfo().getModelVersion(); + } + } + } + + String vnfType = serviceModelName + "/" + vnfModelName; + + // Try to find a recipe for a custom flow first + recipe = db.getVnfComponentsRecipe(vnfType, vfModuleModelName, asdcServiceModelVersion, modelVersion, action.name()); + } + + if (recipe == null) { + // Find the default recipe record + recipe = db.getVnfComponentsRecipeByVfModuleId("VID_DEFAULT", vnfComponentType, action.name()); + + if (recipe == null) { + return null; + } + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.vnf)) { + // VNF REQUEST + // Construct the default vnf type + // TODO need to make this a configurable property + + String defaultVnfType = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + + VnfRecipe recipe = db.getVnfRecipe(defaultVnfType, action.name()); + + if (recipe == null) { + return null; + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.network)) { + // NETWORK REQUEST + // Construct the default network type + // TODO need to make this a configurable property + + String defaultNetworkType = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + + Recipe recipe = db.getNetworkRecipe(defaultNetworkType, action.name()); + + if (recipe == null) { + return null; + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + + if (recipeLookupResult != null) { + msoLogger.debug ("Orchestration URI is: " + recipeLookupResult.getOrchestrationURI() + ", recipe Timeout is: " + Integer.toString(recipeLookupResult.getRecipeTimeout ())); + } + else { + msoLogger.debug("No matching recipe record found"); + } + return recipeLookupResult; + } +}
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java new file mode 100644 index 0000000000..774b9d6f91 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java @@ -0,0 +1,734 @@ +/*- + * ============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.apihandlerinfra; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.codehaus.jackson.map.ObjectMapper; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.RequestClient; +import org.openecomp.mso.apihandler.common.RequestClientFactory; +import org.openecomp.mso.apihandler.common.ResponseHandler; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstance; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstanceList; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestReferences; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest; +import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesResponse; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.Recipe; +import org.openecomp.mso.db.catalog.beans.Service; +import org.openecomp.mso.db.catalog.beans.ServiceRecipe; +import org.openecomp.mso.db.catalog.beans.VfModule; +import org.openecomp.mso.db.catalog.beans.VnfComponentsRecipe; +import org.openecomp.mso.db.catalog.beans.VnfRecipe; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/serviceInstances/v2") +public class ServiceInstances { + + private HashMap<String, String> instanceIdMap = new HashMap<String,String>(); + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoJavaProperties props = MsoPropertiesUtils.loadMsoProperties (); + + /** + * + */ + public ServiceInstances() { + // TODO Auto-generated constructor stub + } + + @POST + @Path("/") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createServiceInstance(String request) { + + Response response = serviceInstances(request, Action.createInstance, null); + + return response; + } + + @DELETE + @Path("/{serviceInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteServiceInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + return response; + } + + @POST + @Path("/{serviceInstanceId}/vnfs") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVnfInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVnfInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + @POST + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVfModuleInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + + @POST + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteVolumeGroupInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("vnfInstanceId") String vnfInstanceId, + @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId) { + + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("vnfInstanceId", vnfInstanceId); + instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + @POST + @Path("/{serviceInstanceId}/networks") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response createNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + Response response = serviceInstances(request, Action.createInstance, instanceIdMap); + + return response; + } + + @PUT + @Path("/{serviceInstanceId}/networks/{networkInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response updateNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("networkInstanceId") String networkInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("networkInstanceId", networkInstanceId); + Response response = serviceInstances(request, Action.updateInstance, instanceIdMap); + + return response; + } + + @DELETE + @Path("/{serviceInstanceId}/networks/{networkInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response deleteNetworkInstance(String request, @PathParam("serviceInstanceId") String serviceInstanceId, + @PathParam("networkInstanceId") String networkInstanceId) { + + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("networkInstanceId", networkInstanceId); + Response response = serviceInstances(request, Action.deleteInstance, instanceIdMap); + + return response; + } + + + + private Response serviceInstances(String requestJSON, Action action, HashMap<String,String> instanceIdMap) { + + String requestId = UUIDChecker.generateUUID(msoLogger); + long startTime = System.currentTimeMillis (); + msoLogger.debug ("requestId is: " + requestId); + ServiceInstancesRequest sir = null; + + MsoRequest msoRequest = new MsoRequest (requestId); + + + try{ + ObjectMapper mapper = new ObjectMapper(); + sir = mapper.readValue(requestJSON, ServiceInstancesRequest.class); + + } catch(Exception e){ + msoLogger.debug ("Mapping of request to JSON object failed : ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException, + "Mapping of request to JSON object failed. " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, null); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Mapping of request to JSON object failed"); + msoRequest.createRequestRecord (Status.FAILED, action); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Mapping of request to JSON object failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + try{ + msoRequest.parse(sir, instanceIdMap, action); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException, + "Error parsing request. " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, null); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED, action); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + InfraActiveRequests dup = null; + String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName(); + String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name(); + try { + dup = RequestsDatabase.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope); + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Error during duplicate check ", e); + + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, MsoException.ServiceException, + e.getMessage(), + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null) ; + + + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Error during duplicate check"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + String instance = null; + if(instanceName != null){ + instance = instanceName; + }else{ + instance = instanceIdMap.get(requestScope + "InstanceId"); + } + String dupMessage = "Error: Locked instance - This " + requestScope + " (" + instance + ") " + "already has a request being worked with a status of " + dup.getRequestStatus() + " (RequestId - " + dup.getRequestId() + "). The existing request must finish or be cleaned up before proceeding."; + //List<String> variables = new ArrayList<String>(); + //variables.add(dup.getRequestStatus()); + + Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT, MsoException.ServiceException, + dupMessage, + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + null) ; + + + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, dupMessage, "", "", MsoLogger.ErrorCode.SchemaError, "Duplicate request - Subscriber already has a request for this service"); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, dupMessage); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + + ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse(); + + RequestReferences referencesResponse = new RequestReferences(); + + referencesResponse.setRequestId(requestId); + + serviceResponse.setRequestReferences(referencesResponse); + + try (CatalogDatabase db = new CatalogDatabase()){ + + RecipeLookupResult recipeLookupResult = null; + try { + recipeLookupResult = getServiceInstanceOrchestrationURI (db, msoRequest, action); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Exception while querying Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "Recipe could not be retrieved from catalog DB " + e.getMessage (), + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.ERROR_FROM_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED,action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while querying Catalog DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + + if (recipeLookupResult == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "No recipe found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "Recipe does not exist in catalog DB", + ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, + null); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + + + Boolean isBaseVfModule = false; + + if (msoRequest.getModelInfo().getModelType().equals(ModelType.vfModule)) { + String asdcServiceModelVersion = msoRequest.getAsdcServiceModelVersion (); + + // Get VF Module-specific base module indicator + VfModule vfm = null; + + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vfm = db.getVfModuleType (msoRequest.getVfModuleType (), asdcServiceModelVersion); + } + else { + vfm = db.getVfModuleType (msoRequest.getVfModuleType ()); + } + + if (vfm != null) { + if (vfm.getIsBase() == 1) { + isBaseVfModule = true; + } + } + else if (action == Action.createInstance || action == Action.updateInstance){ + // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB. + // This request cannot proceed + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "VF Module Type", "", MsoLogger.ErrorCode.DataError, "No VfModuleType found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + String serviceVersionText = ""; + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + serviceVersionText = " with version " + asdcServiceModelVersion; + } + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "VnfType " + msoRequest.getVnfType () + " and VF Module Model Name " + msoRequest.getVfModuleModelName() + serviceVersionText + " not found in MSO Catalog DB", + ErrorNumbers.SVC_BAD_PARAMETER, + null); + msoRequest.createRequestRecord (Status.FAILED, action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No matching vfModuleType found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + db.close(); + return response; + } + } + + db.close(); + + String serviceInstanceId = ""; + String vnfId = ""; + String vfModuleId = ""; + String volumeGroupId = ""; + String networkId = ""; + ServiceInstancesRequest siReq = msoRequest.getServiceInstancesRequest(); + + if(siReq.getServiceInstanceId () != null){ + serviceInstanceId = siReq.getServiceInstanceId (); + } + + if(siReq.getVnfInstanceId () != null){ + vnfId = siReq.getVnfInstanceId (); + } + + if(siReq.getVfModuleInstanceId () != null){ + vfModuleId = siReq.getVfModuleInstanceId (); + } + + if(siReq.getVolumeGroupInstanceId () != null){ + volumeGroupId = siReq.getVolumeGroupInstanceId (); + } + + if(siReq.getNetworkInstanceId () != null){ + networkId = siReq.getNetworkInstanceId (); + } + + + requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING, action); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_INTERNAL_SERVER_ERROR, + MsoException.ServiceException, + "Exception while creating record in DB " + e.getMessage(), + ErrorNumbers.SVC_BAD_PARAMETER, + null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (recipeLookupResult.getOrchestrationURI (), props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + + System.out.println("URL : " + requestClient.getUrl ()); + + response = requestClient.post(requestId, isBaseVfModule, recipeLookupResult.getRecipeTimeout (), action.name (), + serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, + msoRequest.getServiceInstanceType (), + msoRequest.getVnfType (), msoRequest.getVfModuleType (), + msoRequest.getNetworkType (), requestJSON); + + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI (), null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI (), null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_BAD_GATEWAY, + MsoException.ServiceException, + "Failed calling bpmn " + e.getMessage (), + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_BAD_GATEWAY, + MsoException.ServiceException, + "bpelResponse is null", + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String camundaJSONResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from Camunda: " + camundaJSONResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) camundaJSONResponseBody); + return Response.status (HttpStatus.SC_ACCEPTED).entity (camundaJSONResponseBody).build (); + } else { + List<String> variables = new ArrayList<String>(); + variables.add(bpelStatus + ""); + String camundaJSONResponseBody = respHandler.getResponseBody (); + if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, + MsoException.ServiceException, + "Request Failed due to BPEL error with HTTP Status= %1 " + '\n' + camundaJSONResponseBody, + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + variables); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, + MsoException.ServiceException, + "Request Failed due to BPEL error with HTTP Status= %1" , + ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, + variables); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + + //return Response.status (HttpStatus.SC_ACCEPTED).entity (serviceResponse).build (); + // return serviceResponse; + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND, + MsoException.ServiceException, + "No communication to catalog DB " + e.getMessage (), + ErrorNumbers.SVC_NO_SERVER_RESOURCES, + null); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED,action); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + private RecipeLookupResult getServiceInstanceOrchestrationURI (CatalogDatabase db, MsoRequest msoRequest, Action action) throws Exception { + + RecipeLookupResult recipeLookupResult = null; + // Query MSO Catalog DB + + if (msoRequest.getModelInfo().getModelType().equals(ModelType.service)) { + + // SERVICE REQUEST + // Construct the default service name + // TODO need to make this a configurable property + + String defaultServiceName = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + Service serviceRecord = db.getServiceByName(defaultServiceName); + int serviceId = serviceRecord.getId(); + ServiceRecipe recipe = db.getServiceRecipe(serviceId, action.name()); + + if (recipe == null) { + return null; + } + + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.vfModule) || + msoRequest.getModelInfo().getModelType().equals(ModelType.volumeGroup)) { + + String vnfComponentType = msoRequest.getModelInfo().getModelType().name(); + VnfComponentsRecipe recipe = null; + + if (action != Action.deleteInstance) { + RelatedInstanceList[] instanceList = null; + if (msoRequest.getServiceInstancesRequest().getRequestDetails() != null) { + instanceList = msoRequest.getServiceInstancesRequest().getRequestDetails().getRelatedInstanceList(); + } + + String serviceModelName = null; + String vnfModelName = null; + String vfModuleModelName = null; + String asdcServiceModelVersion = null; + String modelVersion = null; + + if (instanceList != null) { + + for(RelatedInstanceList relatedInstanceList : instanceList){ + + RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance(); + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)){ + serviceModelName = relatedInstance.getModelInfo().getModelName(); + asdcServiceModelVersion = relatedInstance.getModelInfo().getModelVersion(); + } + + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)){ + vnfModelName = relatedInstance.getModelInfo().getModelCustomizationName(); + } + + if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vfModule) || + relatedInstance.getModelInfo().getModelType().equals(ModelType.volumeGroup)) { + vfModuleModelName = relatedInstance.getModelInfo().getModelName(); + modelVersion = relatedInstance.getModelInfo().getModelVersion(); + } + } + } + + String vnfType = serviceModelName + "/" + vnfModelName; + + // Try to find a recipe for a custom flow first + recipe = db.getVnfComponentsRecipe(vnfType, vfModuleModelName, asdcServiceModelVersion, modelVersion, action.name()); + } + + if (recipe == null) { + // Find the default recipe record + recipe = db.getVnfComponentsRecipeByVfModuleId("VID_DEFAULT", vnfComponentType, action.name()); + + if (recipe == null) { + return null; + } + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.vnf)) { + // VNF REQUEST + // Construct the default vnf type + // TODO need to make this a configurable property + + String defaultVnfType = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + + VnfRecipe recipe = db.getVnfRecipe(defaultVnfType, action.name()); + + if (recipe == null) { + return null; + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + else if (msoRequest.getModelInfo().getModelType().equals(ModelType.network)) { + // NETWORK REQUEST + // Construct the default network type + // TODO need to make this a configurable property + + String defaultNetworkType = msoRequest.getRequestInfo().getSource() + "_DEFAULT"; + + Recipe recipe = db.getNetworkRecipe(defaultNetworkType, action.name()); + + if (recipe == null) { + return null; + } + recipeLookupResult = new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ()); + } + + if (recipeLookupResult != null) { + msoLogger.debug ("Orchestration URI is: " + recipeLookupResult.getOrchestrationURI() + ", recipe Timeout is: " + Integer.toString(recipeLookupResult.getRecipeTimeout ())); + } + else { + msoLogger.debug("No matching recipe record found"); + } + return recipeLookupResult; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Status.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Status.java new file mode 100644 index 0000000000..c98f90d70f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/Status.java @@ -0,0 +1,33 @@ +/*- + * ============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.apihandlerinfra; + + +/* + * Enum for Status values returned by API Handler to Tail-F +*/ +public enum Status { + PENDING, + IN_PROGRESS, + COMPLETE, + FAILED, + TIMEOUT +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VfModuleModelNamesHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VfModuleModelNamesHandler.java new file mode 100644 index 0000000000..8a0a1f3152 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VfModuleModelNamesHandler.java @@ -0,0 +1,104 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringWriter; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpStatus; + +import org.openecomp.mso.apihandlerinfra.vnfbeans.VfModuleModelName; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VfModuleModelNames; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.VfModule; +import org.openecomp.mso.logger.MsoLogger; + +@Path(Constants.VF_MODULE_MODEL_NAMES_PATH) +public class VfModuleModelNamesHandler { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static final String LOG_SERVICE_NAME = "InfrastructurePortal:MSO-APIH."; + private static final String LOG_REPLY_NAME = "MSO-APIH:InfrastructurePortal."; + + @GET + public Response getVfModuleModelNames () { + long startTime = System.currentTimeMillis (); + String methodName = "getVfModuleModelNames"; + MsoLogger.setServiceName (LOG_SERVICE_NAME + methodName); + msoLogger.debug ("Incoming request received for vfModuleModelNames"); + List <VfModule> vfModules = null; + try (CatalogDatabase db = new CatalogDatabase()){ + vfModules = db.getAllVfModules (); + } catch (Exception e) { + msoLogger.debug ("No connection to catalog DB", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "no connection to catalog DB"); + msoLogger.debug ("End of the transaction, the final response is: " + e.toString ()); + return Response.status (HttpStatus.SC_NOT_FOUND).entity (e.toString ()).build (); + } + + if (vfModules == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "VfModule not found"); + msoLogger.debug ("End of the transaction. VfModuleModelName not found the final response status: " + HttpStatus.SC_NOT_FOUND); + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + + ObjectFactory beansObjectFactory = new ObjectFactory (); + VfModuleModelNames vfModuleModelNames = beansObjectFactory.createVfModuleModelNames (); + for (int i = 0; i < vfModules.size (); i++) { + VfModuleModelName vfModuleModelName = beansObjectFactory.createVfModuleModelName (); + VfModule vm = vfModules.get (i); + vfModuleModelName.setModelName (vm.getType ()); + vfModuleModelName.setModelVersion (vm.getVersion ()); + vfModuleModelName.setModelInvariantUuid (vm.getModelInvariantUuid ()); + vfModuleModelName.setIsBase(vm.isBase()); + vfModuleModelName.setDescription (vm.getDescription ()); + vfModuleModelName.setId (String.valueOf (vm.getId ())); + vfModuleModelName.setAsdcServiceModelVersion(vm.getVersion ()); + vfModuleModelNames.getVfModuleModelName ().add (vfModuleModelName); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VfModuleModelNames.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (vfModuleModelNames, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + response); + return Response.status (HttpStatus.SC_OK).entity (response).build (); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfInfoHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfInfoHandler.java new file mode 100644 index 0000000000..7494747879 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfInfoHandler.java @@ -0,0 +1,373 @@ +package org.openecomp.mso.apihandlerinfra; + +/*- + * #%L + * MSO + * %% + * Copyright (C) 2016 OPENECOMP - MSO + * %% + * 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. + * #L% + */ + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpStatus; + +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfOutputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequests; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/vnf-request") +public class VnfInfoHandler { + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + + @GET + public Response queryFilters (@QueryParam("vnf-type") String vnfType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenant-id") String tenantId, + @QueryParam("volume-group-id") String volumeGroupId, + @QueryParam("volume-group-name") String volumeGroupName, + @QueryParam("vnf-name") String vnfName, + @PathParam("version") String version) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VNFQueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for queryFilter with vnf-type:" + vnfType + + " service-type:" + serviceType + + " aic-node-clli:" + aicNodeClli + + " tenant-id:" + tenantId + + " volume-group-id:" + volumeGroupId + + " volume-group-name:" + volumeGroupName + + " vnf-name: " + vnfName); + Response response = null; + if (vnfType != null) { + response = this.getRequestList ("vnfType", vnfType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName, vnfName, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VNFGetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with request-id:" + requestId + ", version = " + version); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + protected String getRequestType () { + return VnfRequestType.VNF.toString (); + } + + protected void fillVnfRequest (VnfRequest qr, InfraRequests ar, String version) { + VnfInputs vi = beansObjectFactory.createVnfInputs (); + + if (ar.getVnfId () != null) { + vi.setVnfId (ar.getVnfId ()); + } + if (ar.getVnfName () != null) { + vi.setVnfName (ar.getVnfName ()); + } + if (ar.getVnfType () != null) { + vi.setVnfType (ar.getVnfType ()); + } + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + if (ar.getProvStatus () != null) { + vi.setProvStatus (ar.getProvStatus ()); + } + if (ar.getVolumeGroupName () != null) { + vi.setVolumeGroupName (ar.getVolumeGroupName ()); + } + if (ar.getVolumeGroupId () != null) { + vi.setVolumeGroupId (ar.getVolumeGroupId ()); + } + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleName () != null) { + vi.setVfModuleName (ar.getVfModuleName ()); + } + if (ar.getVfModuleId () != null) { + vi.setVfModuleId (ar.getVfModuleId ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleName () != null) { + vi.setVfModuleName (ar.getVfModuleName ()); + } + if (ar.getVfModuleId () != null) { + vi.setVfModuleId (ar.getVfModuleId ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + } + qr.setVnfInputs (vi); + + qr.setVnfParams (ar.getVnfParams ()); + + try { + String vnfoutputs = ar.getVnfOutputs (); + if (vnfoutputs != null && vnfoutputs.length () > 0) { + msoLogger.debug ("Read VNF outputs: " + vnfoutputs); + VnfOutputs vnfOutput = null; + + // Now unmarshal it into vnf outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (vnfoutputs)); + SAXSource source = new SAXSource (inputSource); + + vnfOutput = jaxbUnmarshaller.unmarshal (source, VnfOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for vnf outputs"); + } + + qr.setVnfOutputs (vnfOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading vnfOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String volumeGroupId, String volumeGroupName, String vnfName, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + if (volumeGroupId != null) { + return this.getRequestList ("volumeGroupId", volumeGroupId, version); + } + if (volumeGroupName != null) { + return this.getRequestList ("volumeGroupName", volumeGroupName, version); + } + if (vnfName != null) { + return this.getRequestList ("vnfName", vnfName, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, getRequestType ()); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + getRequestType ()); + + List <VnfRequest> queryResponseList = new LinkedList <VnfRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateVnfRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private VnfRequest fillGeneric (InfraRequests ar) { + VnfRequest qr = beansObjectFactory.createVnfRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <VnfRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <VnfRequest> queryResponseList = new LinkedList <VnfRequest> (); + + for (InfraRequests ar : arList) { + VnfRequest qr = fillGeneric (ar); + fillVnfRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateVnfRequests (List <VnfRequest> queryResponseList) { + VnfRequests queryResponses = new VnfRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getVnfRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + VnfRequest qr = fillGeneric (ar); + fillVnfRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfMsoInfraRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfMsoInfraRequest.java new file mode 100644 index 0000000000..e22d182086 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfMsoInfraRequest.java @@ -0,0 +1,714 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringReader; +import java.io.StringWriter; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamResult; + +import org.hibernate.Session; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.requestsdb.HibernateUtil; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; + +public class VnfMsoInfraRequest { + + private String requestId; + private String requestXML; + private String requestUri; + private VnfRequest vnfReq; + private RequestInfo rinfo; + private VnfInputs vnfInputs; + private String vnfParams; + private ActionType action; + private String errorMessage; + private String httpResponse; + private String responseBody; + private RequestStatusType status; + private long startTime; + private long progress = Constants.PROGRESS_REQUEST_RECEIVED; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static final String NOT_PROVIDED = "not provided"; + + VnfMsoInfraRequest (String requestId) { + this.requestId = requestId; + Calendar startTimeCalendar = Calendar.getInstance (); + this.startTime = startTimeCalendar.getTimeInMillis (); + MsoLogger.setLogContext (requestId, null); + + } + + // Parse request XML + void parse (String reqXML, String version, MsoJavaProperties props) throws ValidationException { + + msoLogger.debug ("Validating the request"); + + this.requestXML = reqXML; + + VnfRequest vnfReq = null; + boolean isWrongRootElement = false; + + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (reqXML)); + SAXSource source = new SAXSource (inputSource); + + if (reqXML.contains ("vnf-request") && !reqXML.contains ("network-request")) { + vnfReq = jaxbUnmarshaller.unmarshal (source, VnfRequest.class).getValue (); + } else { + isWrongRootElement = true; + } + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_VNFREQUEST_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in format for vnf request ", e); + throw new ValidationException ("format for vnf request"); + } + + if (isWrongRootElement) { + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR_REASON, "root element is not correct", "", "", MsoLogger.ErrorCode.DataError, "root element is not correct"); + throw new ValidationException ("root element <vnf-request> expected"); + } + + if (vnfReq == null) { + throw new ValidationException ("vnf-request"); + } + this.vnfReq = vnfReq; + + this.rinfo = vnfReq.getRequestInfo (); + + if (this.rinfo == null) { + throw new ValidationException ("request-info"); + } + if (this.rinfo.getRequestId () != null) { + msoLogger.info (MessageEnum.APIH_GENERATED_REQUEST_ID, requestId, this.rinfo.getRequestId ()); + } + + action = this.rinfo.getAction (); + if (action == null) { + throw new ValidationException ("action"); + } + + this.vnfInputs = vnfReq.getVnfInputs (); + if (this.vnfInputs == null) { + throw new ValidationException ("vnf-inputs"); + } + + // Verify that BPMN-specific elements are not in the APIH incoming request + if (this.vnfInputs.getPersonaModelId () != null || this.vnfInputs.getPersonaModelVersion () != null || + this.vnfInputs.getIsBaseVfModule () != null || this.vnfInputs.getVnfPersonaModelId () != null || + this.vnfInputs.getVnfPersonaModelVersion () != null) { + throw new ValidationException ("format for vnf request"); + } + // Verify that the elements correspond to the version + + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (this.vnfInputs.getVfModuleName () != null || this.vnfInputs.getVfModuleId () != null || + this.vnfInputs.getVfModuleModelName () != null || this.vnfInputs.getAsdcServiceModelVersion () != null || + this.vnfInputs.getBackoutOnFailure() != null || this.vnfInputs.getAicCloudRegion() != null || + this.vnfInputs.getServiceInstanceId () != null) { + throw new ValidationException ("format for v1 version of vnf request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (this.vnfInputs.getServiceType() != null || this.vnfInputs.getAicNodeClli() != null || this.vnfInputs.getServiceInstanceId () != null) { + throw new ValidationException ("format for v2 version of vnf request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (this.vnfInputs.getServiceType() != null || this.vnfInputs.getAicNodeClli() != null) { + throw new ValidationException ("format for v3 version of vnf request"); + } + } + + + if (!InfraUtils.isActionAllowed (props, "vnf", version, action.value ())) { + throw new ValidationException ("action allowable for version " + version + " of vnf request"); + } + + if ((ActionType.UPDATE.equals(action) || ActionType.DELETE.equals(action)) && this.vnfInputs.getVnfId () == null) { + throw new ValidationException("vnf-id"); + } + + if ((ActionType.UPDATE_VF_MODULE.equals (action) || ActionType.DELETE_VF_MODULE.equals (action)) && this.vnfInputs.getVfModuleId () == null) { + throw new ValidationException ("vf-module-id"); + } + + if (ActionType.CREATE.equals (action) && this.vnfInputs.getVnfName () == null) { + throw new ValidationException ("vnf-name"); + } + + if (ActionType.CREATE_VF_MODULE.equals (action)) { + if (this.vnfInputs.getVfModuleName () == null) { + throw new ValidationException ("vf-module-name"); + } + if (!InfraUtils.isValidHeatName(this.vnfInputs.getVfModuleName ())) { + throw new ValidationException ("vf-module-name: no value meeting heat stack name syntax requirements"); + } + } + + if (this.vnfInputs.getVnfType () == null) { + throw new ValidationException ("vnf-type"); + } + + if ((ActionType.CREATE_VF_MODULE.equals (action) || ActionType.UPDATE_VF_MODULE.equals (action) || ActionType.DELETE_VF_MODULE.equals (action)) && this.vnfInputs.getVfModuleModelName () == null) { + throw new ValidationException ("vf-module-model-name"); + } + + if (!version.equals(Constants.SCHEMA_VERSION_V1) && this.vnfInputs.getServiceId () == null) { + throw new ValidationException ("service-id "); + } + + if (this.vnfInputs.getServiceType () != null && this.vnfInputs.getServiceId () != null) { + throw new ValidationException ("service-type or service-id "); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1) && this.vnfInputs.getAicNodeClli () == null) { + throw new ValidationException ("aic-node-clli"); + } + + if ((version.equals(Constants.SCHEMA_VERSION_V2) || version.equals(Constants.SCHEMA_VERSION_V3)) && (this.vnfInputs.getAicCloudRegion () == null || this.vnfInputs.getAicCloudRegion ().isEmpty())) { + throw new ValidationException ("aic-cloud-region"); + } + + if (version.equals(Constants.SCHEMA_VERSION_V3) && this.vnfInputs.getServiceInstanceId () == null) { + throw new ValidationException ("service-instance-id"); + } + + + if (this.vnfInputs.getTenantId () == null) { + throw new ValidationException ("tenant-id"); + } + + Object vp = vnfReq.getVnfParams (); + + if (vp != null) { + msoLogger.debug ("This object is not null"); + + Node node = (Node) vp; + Document doc = node.getOwnerDocument (); + this.vnfParams = domToStr (doc); + } + + msoLogger.debug ("VNFParams: " + this.vnfParams); + + msoLogger.debug ("Request valid"); + + // Rebuild the request string for BPEL to include request-id + rinfo.setRequestId (this.requestId); + this.vnfReq.setRequestInfo (rinfo); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (this.vnfReq, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + this.requestXML = stringWriter.toString (); + msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML); + + } + + public void createRequestRecord (Status status) { + + Session session = null; + try { + + session = HibernateUtil.getSessionFactory ().openSession (); + session.beginTransaction (); + + InfraActiveRequests aq = new InfraActiveRequests (); + aq.setRequestId (requestId); + aq.setClientRequestId(rinfo.getRequestId()); + + Timestamp startTimeStamp = new Timestamp (Calendar.getInstance ().getTimeInMillis ()); + if (rinfo != null) { + if (rinfo.getAction () != null) { + aq.setAction (rinfo.getAction ().value ()); + aq.setRequestAction (RequestActionMap.getMappedRequestAction (rinfo.getAction ().value ())); + } + aq.setSource (rinfo.getSource ()); + } else { + // Set up mandatory parameters + aq.setAction (NOT_PROVIDED); + aq.setRequestAction (NOT_PROVIDED); + } + + aq.setRequestBody (this.requestXML); + aq.setRequestScope (""); + + if (vnfInputs != null) { + if (vnfInputs.getVnfId () != null) { + aq.setVnfId (vnfInputs.getVnfId ()); + } + if (vnfInputs.getVnfName () != null) { + aq.setVnfName (vnfInputs.getVnfName ()); + } + if (vnfInputs.getVnfType () != null) { + aq.setVnfType (vnfInputs.getVnfType ()); + } + if (vnfInputs.getServiceInstanceId () != null) { + aq.setServiceInstanceId (vnfInputs.getServiceInstanceId ()); + } + if (vnfInputs.getServiceType () != null) { + aq.setServiceType (vnfInputs.getServiceType ()); + } + if (vnfInputs.getServiceId () != null) { + aq.setAaiServiceId (vnfInputs.getServiceId ()); + } + if (vnfInputs.getAicNodeClli () != null) { + aq.setAicNodeClli (vnfInputs.getAicNodeClli ()); + } + if (vnfInputs.getAicCloudRegion () != null) { + aq.setAicCloudRegion (vnfInputs.getAicCloudRegion ()); + } + if (vnfInputs.getTenantId () != null) { + aq.setTenantId (vnfInputs.getTenantId ()); + } + if (vnfInputs.getProvStatus () != null) { + aq.setProvStatus (vnfInputs.getProvStatus ()); + } + if (vnfInputs.getVolumeGroupName () != null) { + aq.setVolumeGroupName (vnfInputs.getVolumeGroupName ()); + } + if (vnfInputs.getVolumeGroupId () != null) { + aq.setVolumeGroupId (vnfInputs.getVolumeGroupId ()); + } + if (vnfInputs.getVfModuleId () != null) { + aq.setVfModuleId (vnfInputs.getVfModuleId ()); + } + if (vnfInputs.getVfModuleName () != null) { + aq.setVfModuleName (vnfInputs.getVfModuleName ()); + } + if (vnfInputs.getVfModuleModelName () != null) { + aq.setVfModuleModelName (vnfInputs.getVfModuleModelName ()); + } + + if (vnfInputs.getVfModuleName () != null || vnfInputs.getVfModuleId () != null) { + aq.setRequestScope (ModelType.vfModule.name ()); + } + else { + aq.setRequestScope (ModelType.vnf.name ()); + } + + + } + + aq.setStartTime (startTimeStamp); + aq.setRequestStatus (status.toString ()); + aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER); + aq.setRequestType ("VNF"); + + if (vnfParams != null) { + msoLogger.debug ("Storing vnfParams: " + vnfParams); + aq.setVnfParams (this.vnfParams); + } + + if ((status == Status.FAILED) || (status == Status.COMPLETE)) { + aq.setStatusMessage (this.errorMessage); + aq.setResponseBody (this.responseBody); + + Calendar endTime = Calendar.getInstance (); + Timestamp endTimeStamp = new Timestamp (endTime.getTimeInMillis ()); + aq.setEndTime (endTimeStamp); + } + + aq.setProgress (this.progress); + + + msoLogger.debug ("About to insert a record"); + + session.save (aq); + session.getTransaction ().commit (); + session.close (); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception in createRequestRecord", e); + if (session != null) { + session.close (); + } + if (!status.equals (Status.FAILED)) { + throw e; + } + } + } + + public void updateFinalStatus (Status status) { + int result = 0; + try { + result = RequestsDatabase.updateInfraFinalStatus (requestId, + status.toString (), + this.errorMessage, + this.progress, + this.responseBody, + Constants.MODIFIED_BY_APIHANDLER); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage (), "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception in updateFinalStatus"); + msoLogger.debug ("Exception: ", e); + } + } + + public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) { + return buildResponseWithError (httpResponseCode, errorCode, inProgress, null); + } + + public Response buildResponseWithError (int httpResponseCode, + String errorCode, + InfraActiveRequests inProgress, + String errorString) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + + VnfRequest vr = beansObjectFactory.createVnfRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + + ri.setRequestId (requestId); + ri.setRequestStatus (this.status); + ri.setAction (this.rinfo.getAction ()); + ri.setSource (this.rinfo.getSource ()); + + String errorMsg = null; + if (errorCode != null) { + // If error code is actually an XML error response from BPEL, treat it specially: + if (!Messages.errors.containsKey (errorCode)) { + if (errorCode.length () > 300) { + errorMsg = errorCode.substring (0, 299); + } else { + errorMsg = errorCode; + } + + } else { + + if (inProgress == null) { + if (errorCode.equals (ErrorNumbers.RECIPE_DOES_NOT_EXIST)) { + errorMsg = String.format (Messages.errors.get (errorCode), "vnf", errorString); + } else { + errorMsg = String.format (Messages.errors.get (errorCode), errorString); + } + } else if (errorCode.equals (ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "vnf", + inProgress.getVnfName (), + inProgress.getRequestStatus (), + "vnf"); + } else if (errorCode.equals (ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "vnf", + inProgress.getVnfId (), + inProgress.getRequestStatus (), + inProgress.getAction (), + "vnf"); + } + } + + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + } + ri.setProgress ((int) this.progress); + + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + + if (this.progress == Constants.PROGRESS_REQUEST_COMPLETED) { + ri.setEndTime(startTimeString); + } + + vr.setRequestInfo (ri); + + this.vnfInputs.setIsBaseVfModule(null); + this.vnfInputs.setPersonaModelId(null); + this.vnfInputs.setPersonaModelVersion(null); + this.vnfInputs.setVnfPersonaModelId(null); + this.vnfInputs.setVnfPersonaModelVersion(null); + + vr.setVnfInputs (this.vnfInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + + // Log the failed request into the MSO Requests database + + return Response.status (httpResponseCode).entity (response).build (); + + } + + public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + VnfRequest vr = beansObjectFactory.createVnfRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (requestId); + + if (this.rinfo != null) { + if (this.rinfo.getAction () != null) { + ri.setAction (this.rinfo.getAction ()); + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + if (this.rinfo.getSource () != null) { + ri.setSource (this.rinfo.getSource ()); + } + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + + // Nothing more is expected for this request + + String errorMsg = String.format (Messages.errors.get (ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + + "_service"), + exceptionMessage); + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + + ri.setProgress ((int) this.progress); + ri.setRequestStatus (RequestStatusType.FAILED); + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + ri.setEndTime(startTimeString); + + vr.setRequestInfo (ri); + + vr.setVnfInputs (this.vnfInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + return Response.status (httpResponseCode).entity (response).build (); + } + + public String getRequestUri () { + return requestUri; + } + + public void setRequestUri (String requestUri) { + this.requestUri = requestUri; + } + + public VnfInputs getVnfInputs () { + return vnfInputs; + } + + public RequestInfo getRequestInfo () { + return rinfo; + } + + public String getResponseBody () { + return responseBody; + } + + public void setResponseBody (String responseBody) { + this.responseBody = responseBody; + } + + public String getHttpResponse () { + return httpResponse; + } + + public void setHttpResponse (String httpResponse) { + this.httpResponse = httpResponse; + } + + public String getRequestId () { + return requestId; + } + + public String getRequestXML () { + return requestXML; + } + + public void setRequestXML (String requestXML) { + this.requestXML = requestXML; + } + + public RequestStatusType getStatus () { + return status; + } + + public String getServiceType () { + if (this.vnfInputs.getServiceType () != null) + return this.vnfInputs.getServiceType (); + if (this.vnfInputs.getServiceId () != null) + return this.vnfInputs.getServiceId (); + return null; + } + + public void setStatus (RequestStatusType status) { + this.status = status; + switch (status) { + case FAILED: + case COMPLETE: + this.progress = Constants.PROGRESS_REQUEST_COMPLETED; + break; + case IN_PROGRESS: + this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS; + break; + } + } + + public static String domToStr (Document doc) { + if (doc == null) { + return null; + } + + try { + StringWriter sw = new StringWriter (); + StreamResult sr = new StreamResult (sw); + TransformerFactory tf = TransformerFactory.newInstance (); + Transformer t = tf.newTransformer (); + t.setOutputProperty (OutputKeys.STANDALONE, "yes"); + NodeList nl = doc.getDocumentElement ().getChildNodes (); + DOMSource source = null; + for (int x = 0; x < nl.getLength (); x++) { + Node e = nl.item (x); + if (e instanceof Element) { + source = new DOMSource (e); + break; + } + } + if (source != null) { + t.transform (source, sr); + + String s = sw.toString (); + return s; + } + + return null; + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in domToStr", e); + } + return null; + } + + public void addBPMNSpecificInputs(String personaModelId, String personaModelVersion, Boolean isBaseVfModule, + String vnfPersonaModelId, String vnfPersonaModelVersion) { + vnfInputs.setPersonaModelId(personaModelId); + vnfInputs.setPersonaModelVersion(personaModelVersion); + vnfInputs.setIsBaseVfModule(isBaseVfModule); + vnfInputs.setVnfPersonaModelId(vnfPersonaModelId); + vnfInputs.setVnfPersonaModelVersion(vnfPersonaModelVersion); + + this.vnfReq.setVnfInputs(vnfInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (this.vnfReq, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + this.requestXML = stringWriter.toString (); + msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML); + + + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestHandler.java new file mode 100644 index 0000000000..617172be08 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestHandler.java @@ -0,0 +1,804 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; + +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.RequestClient; +import org.openecomp.mso.apihandler.common.RequestClientFactory; +import org.openecomp.mso.apihandler.common.ResponseHandler; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfOutputs; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequests; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.Recipe; +import org.openecomp.mso.db.catalog.beans.VfModule; +import org.openecomp.mso.db.catalog.beans.VnfResource; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/vnf-request") +public class VnfRequestHandler { + + @Context + private UriInfo uriInfo; + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + private static MsoJavaProperties props = MsoPropertiesUtils.loadMsoProperties (); + + private static final String NOT_FOUND = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not started, properties file missing or invalid or Database Connection failed</body></html>"; + + private static final Response NOT_STARTED_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_FOUND) + .build (); + + @GET + public Response queryFilters (@QueryParam("vnf-type") String vnfType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenant-id") String tenantId, + @QueryParam("volume-group-id") String volumeGroupId, + @QueryParam("volume-group-name") String volumeGroupName, + @QueryParam("vnf-name") String vnfName, + @PathParam("version") String version) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VNFQueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for queryFilter with vnf-type:" + vnfType + + " service-type:" + serviceType + + " aic-node-clli:" + aicNodeClli + + " tenant-id:" + tenantId + + " volume-group-id:" + volumeGroupId + + " volume-group-name:" + volumeGroupName + + " vnf-name: " + vnfName); + Response response = null; + if (vnfType != null) { + response = this.getRequestList ("vnfType", vnfType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName, vnfName, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VNFGetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with request-id:" + requestId + ", version = " + version); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + protected String getRequestType () { + return VnfRequestType.VNF.toString (); + } + + protected void fillVnfRequest (VnfRequest qr, InfraRequests ar, String version) { + VnfInputs vi = beansObjectFactory.createVnfInputs (); + + if (ar.getVnfId () != null) { + vi.setVnfId (ar.getVnfId ()); + } + if (ar.getVnfName () != null) { + vi.setVnfName (ar.getVnfName ()); + } + if (ar.getVnfType () != null) { + vi.setVnfType (ar.getVnfType ()); + } + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + if (ar.getProvStatus () != null) { + vi.setProvStatus (ar.getProvStatus ()); + } + if (ar.getVolumeGroupName () != null) { + vi.setVolumeGroupName (ar.getVolumeGroupName ()); + } + if (ar.getVolumeGroupId () != null) { + vi.setVolumeGroupId (ar.getVolumeGroupId ()); + } + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleName () != null) { + vi.setVfModuleName (ar.getVfModuleName ()); + } + if (ar.getVfModuleId () != null) { + vi.setVfModuleId (ar.getVfModuleId ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleName () != null) { + vi.setVfModuleName (ar.getVfModuleName ()); + } + if (ar.getVfModuleId () != null) { + vi.setVfModuleId (ar.getVfModuleId ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + } + qr.setVnfInputs (vi); + + qr.setVnfParams (ar.getVnfParams ()); + + try { + String vnfoutputs = ar.getVnfOutputs (); + if (vnfoutputs != null && vnfoutputs.length () > 0) { + msoLogger.debug ("Read VNF outputs: " + vnfoutputs); + VnfOutputs vnfOutput = null; + + // Now unmarshal it into vnf outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (vnfoutputs)); + SAXSource source = new SAXSource (inputSource); + + vnfOutput = jaxbUnmarshaller.unmarshal (source, VnfOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for vnf outputs"); + } + + qr.setVnfOutputs (vnfOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading vnfOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String volumeGroupId, String volumeGroupName, String vnfName, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + if (volumeGroupId != null) { + return this.getRequestList ("volumeGroupId", volumeGroupId, version); + } + if (volumeGroupName != null) { + return this.getRequestList ("volumeGroupName", volumeGroupName, version); + } + if (vnfName != null) { + return this.getRequestList ("vnfName", vnfName, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, getRequestType ()); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + getRequestType ()); + + List <VnfRequest> queryResponseList = new LinkedList <VnfRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateVnfRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private VnfRequest fillGeneric (InfraRequests ar) { + VnfRequest qr = beansObjectFactory.createVnfRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <VnfRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <VnfRequest> queryResponseList = new LinkedList <VnfRequest> (); + + for (InfraRequests ar : arList) { + VnfRequest qr = fillGeneric (ar); + fillVnfRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateVnfRequests (List <VnfRequest> queryResponseList) { + VnfRequests queryResponses = new VnfRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getVnfRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + VnfRequest qr = fillGeneric (ar); + fillVnfRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } + + @POST + @Path("/") + @Produces(MediaType.APPLICATION_XML) + public Response manageVnfRequest (String reqXML, @PathParam("version") String version) { + MsoLogger.setServiceName ("VnfRequest"); + if ("v1".equals(version)) { + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } else if ("v2".equals(version)) { + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } else if ("v3".equals(version)) { + return manageVnfRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } else { + long startTime = System.currentTimeMillis (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Version not found"); + return Response.status(HttpStatus.SC_NOT_FOUND).build(); + } + } + + private Response manageVnfRequestImpl (String reqXML, String version) { + String methodName = "VnfRequest"; + props = MsoPropertiesUtils.loadMsoProperties (); + long startTime = System.currentTimeMillis (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + VnfMsoInfraRequest msoRequest = new VnfMsoInfraRequest (requestUUID.toString ()); + MsoLogger.setLogContext (msoRequest.getRequestId (), null); + + if (MsoPropertiesUtils.getNoPropertiesState()) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Exiting the transaction: Infra API Handler not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + + uriInfo.getRequestUri (); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The content of the request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + msoLogger.debug ("Incoming request received for pose VNFRequest:" + reqXML); + + msoRequest.setRequestUri (requestUri); + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.SchemaError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo().getAction().name()); + if (msoRequest.getRequestInfo ().getAction () == org.openecomp.mso.apihandlerinfra.vnfbeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same vnfName + msoLogger.debug ("Checking for a duplicate with the same vnf-name"); + InfraActiveRequests dup = null; + try { + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getVnfInputs ().getVnfName (), + msoRequest.getRequestInfo ().getAction ().value (), + "VNF"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "vnf-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, "CREATE on the same VNF Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same VNF Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same VNF Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same vnfId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same vnf-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getVnfInputs ().getVnfId (), + msoRequest.getRequestInfo ().getAction ().value (), + "VNF"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "vnf-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the same vnf-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the same vnf-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same VNF Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same VNF Id already in progress"); + + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same VNF Id already in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + // Query MSO Catalog DB + try (CatalogDatabase db = new CatalogDatabase()){ + + Recipe recipe = null; + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + // First get recipe for the service type given + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + } + // If no recipe for the service type or no service type was given, look for recipe without service type + if (recipe == null) { + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + } + if (version.equals (Constants.SCHEMA_VERSION_V2) || version.equals (Constants.SCHEMA_VERSION_V3)) { + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE: + case UPDATE: + case DELETE: + // First get recipe for the vnf type given + recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfRecipe (Constants.VNF_TYPE_WILDCARD, + msoRequest.getRequestInfo ().getAction ().value ()); + } + break; + case CREATE_VF_MODULE: + case UPDATE_VF_MODULE: + case DELETE_VF_MODULE: + // First get recipe for the vnf type/vf module model name through vf module id query + recipe = db.getVfModuleRecipe (msoRequest.getVnfInputs ().getVnfType (), msoRequest.getVnfInputs ().getVfModuleModelName (), + msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfRecipeByVfModuleId (msoRequest.getVnfInputs ().getVfModuleId (), + Constants.VNF_TYPE_WILDCARD, msoRequest.getRequestInfo ().getAction ().value ()); + } + // First get recipe for the vnf type given + //recipe = db.getVnfRecipe (msoRequest.getVnfInputs ().getVnfType (), + // msoRequest.getRequestInfo ().getAction ().value ()); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + //if (recipe == null) { + // recipe = db.getVnfRecipe (Constants.VNF_TYPE_WILDCARD, + // msoRequest.getRequestInfo ().getAction ().value ()); + // + //} + break; + default: + break; + } + + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "No recipe found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + db.close (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "No recipe found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + + // Retrieve additional info for Vf Modules from Catalog DB to send it to BPMN + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE_VF_MODULE: + case UPDATE_VF_MODULE: + String personaModelId = ""; + String personaModelVersion = ""; + String vnfPersonaModelId = ""; + String vnfPersonaModelVersion = ""; + Boolean isBase = false; + String asdcServiceModelVersion = msoRequest.getVnfInputs ().getAsdcServiceModelVersion (); + + // Get VF Module-specific persona info and base module indicator + VfModule vfm = null; + String vfModuleType = msoRequest.getVnfInputs ().getVnfType () + "::" + msoRequest.getVnfInputs ().getVfModuleModelName (); + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vfm = db.getVfModuleType (vfModuleType, asdcServiceModelVersion); + } + else { + vfm = db.getVfModuleType (vfModuleType); + } + if (vfm != null) { + if (vfm.getIsBase() == 1) { + isBase = true; + } + personaModelId = vfm.getModelInvariantUuid(); + personaModelVersion = vfm.getModelVersion(); + msoLogger.debug("Setting personaModelId to " + personaModelId + + ", personaModelVersion to " + personaModelVersion); + } + // Get VNF-specific persona info + VnfResource vnfr = null; + if (asdcServiceModelVersion != null && !asdcServiceModelVersion.isEmpty ()) { + vnfr = db.getVnfResource (msoRequest.getVnfInputs ().getVnfType (), asdcServiceModelVersion); + } + else { + vnfr = db.getVnfResource (msoRequest.getVnfInputs ().getVnfType ()); + } + if (vnfr != null) { + vnfPersonaModelId = vnfr.getModelInvariantUuid (); + vnfPersonaModelVersion = vnfr.getModelVersion(); + msoLogger.debug("Setting vnfPersonaModelId to " + vnfPersonaModelId + + ", vnfPersonaModelVersion to " + vnfPersonaModelVersion); + } + + msoRequest.addBPMNSpecificInputs(personaModelId, personaModelVersion, isBase, + vnfPersonaModelId, vnfPersonaModelVersion); + + break; + default: + break; + } + + db.close (); + + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + msoLogger.debug("Request going to BPEL: " + msoRequest.getRequestXML ()); + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Null response from BPEL"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPEL engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestType.java new file mode 100644 index 0000000000..e8023b8bf9 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfRequestType.java @@ -0,0 +1,30 @@ +/*- + * ============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.apihandlerinfra; + + +/* + * Enum for VNF Request Type values +*/ +public enum VnfRequestType { + VNF, + NETWORK +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfTypesHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfTypesHandler.java new file mode 100644 index 0000000000..32fd80d58a --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VnfTypesHandler.java @@ -0,0 +1,107 @@ +/*- + * ============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.apihandlerinfra; + + +import org.openecomp.mso.apihandlerinfra.vnfbeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfType; +import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfTypes; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.VnfResource; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.utils.UUIDChecker; +import org.apache.http.HttpStatus; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import java.io.StringWriter; +import java.util.List; + +@Path(Constants.VNF_TYPES_PATH) +public class VnfTypesHandler { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + + @GET + public Response getVnfTypes (@QueryParam("vnf-role") String vnfRole) { + + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("GetVnfTypes"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getVnfTypes with vnf-role:" + vnfRole); + + List <VnfResource> vnfResources = null; + try(CatalogDatabase db = new CatalogDatabase ()) { + ; + if (vnfRole != null) { + vnfResources = db.getVnfResourcesByRole (vnfRole); + } else { + vnfResources = db.getAllVnfResources (); + } + } catch (Exception e) { + msoLogger.debug ("No connection to catalog DB", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "No connection to catalog DB"); + msoLogger.debug ("End of the transaction, the final response is: " + e.toString ()); + return Response.status (HttpStatus.SC_NOT_FOUND).entity (e.toString ()).build (); + } + + if (vnfResources == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Error:no vnf types found"); + msoLogger.debug ("End of the transaction. No VNF Types found. The final response status is: " + HttpStatus.SC_NOT_FOUND); + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + + ObjectFactory beansObjectFactory = new ObjectFactory (); + VnfTypes vnfTypes = beansObjectFactory.createVnfTypes (); + for (int i = 0; i < vnfResources.size (); i++) { + VnfType vnfType = beansObjectFactory.createVnfType (); + VnfResource vr = vnfResources.get (i); + vnfType.setType (vr.getVnfType ()); + vnfType.setDescription (vr.getDescription ()); + vnfType.setId (String.valueOf (vr.getId ())); + vnfTypes.getVnfType ().add (vnfType); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VnfTypes.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (vnfTypes, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + response); + return Response.status (HttpStatus.SC_OK).entity (response).build (); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeInfoHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeInfoHandler.java new file mode 100644 index 0000000000..3190fc507e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeInfoHandler.java @@ -0,0 +1,367 @@ +package org.openecomp.mso.apihandlerinfra; + +/*- + * #%L + * MSO + * %% + * Copyright (C) 2016 OPENECOMP - MSO + * %% + * 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. + * #L% + */ + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpStatus; + +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.volumebeans.ActionType; +import org.openecomp.mso.apihandlerinfra.volumebeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeInputs; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeOutputs; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeRequest; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeRequests; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/volume-request") +public class VolumeInfoHandler { + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH); + + @GET + public Response queryFilters (@QueryParam("vnf-type") String vnfType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenantId") String tenantId, + @QueryParam("volume-group-id") String volumeGroupId, + @QueryParam("volume-group-name") String volumeGroupName, + @PathParam("version") String version) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VolumeQueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for queryFilter with vnf-type:" + vnfType + + " service-type:" + serviceType + + " aic-node-clli:" + aicNodeClli + + " tenant-id:" + tenantId + + " volume-group-id:" + volumeGroupId + + " volume-group-name:" + volumeGroupName); + Response response = null; + if (vnfType != null) { + response = this.getRequestList ("vnfType", vnfType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VolumeGetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with request-id:" + requestId); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + + } + + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + + protected void fillVolumeRequest (VolumeRequest qr, InfraRequests ar, String version) { + VolumeInputs vi = beansObjectFactory.createVolumeInputs (); + + if (ar.getVolumeGroupId () != null) { + vi.setVolumeGroupId (ar.getVolumeGroupId ()); + } + if (ar.getVolumeGroupName () != null) { + vi.setVolumeGroupName (ar.getVolumeGroupName ()); + } + if (ar.getVnfType () != null) { + vi.setVnfType (ar.getVnfType ()); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + if (ar.getVnfId () != null) { + vi.setVnfId (ar.getVnfId ()); + } + } + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + + qr.setVolumeInputs (vi); + + qr.setVolumeParams(ar.getVnfParams ()); + + try { + String volumeoutputs = ar.getVnfOutputs (); + if (volumeoutputs != null && volumeoutputs.length () > 0) { + msoLogger.debug ("Read VOLUME outputs: " + volumeoutputs); + VolumeOutputs volumeOutput = null; + + // Now unmarshal it into network outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (volumeoutputs)); + SAXSource source = new SAXSource (inputSource); + + volumeOutput = (VolumeOutputs) jaxbUnmarshaller.unmarshal (source, VolumeOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for volume outputs"); + } + + qr.setVolumeOutputs (volumeOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading networkOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String volumeGroupId, String volumeGroupName, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + if (volumeGroupName != null) { + return this.getRequestList ("volumeGroupName", volumeGroupName, version); + } + if (volumeGroupId != null) { + return this.getRequestList ("volumeGroupId", volumeGroupId, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, + "VOLUME"); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + "VOLUME"); + + List <VolumeRequest> queryResponseList = new LinkedList <VolumeRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateVolumeRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private VolumeRequest fillGeneric (InfraRequests ar) { + VolumeRequest qr = beansObjectFactory.createVolumeRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <VolumeRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <VolumeRequest> queryResponseList = new LinkedList <VolumeRequest> (); + + for (InfraRequests ar : arList) { + VolumeRequest qr = fillGeneric (ar); + fillVolumeRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateVolumeRequests (List <VolumeRequest> queryResponseList) { + VolumeRequests queryResponses = new VolumeRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getVolumeRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + VolumeRequest qr = fillGeneric (ar); + fillVolumeRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } + + private String getAuditLogReturnMsg (Response response) { + String returnMsg = ""; + if (response.getStatus() == HttpStatus.SC_OK) { + returnMsg = "Successful. StatusCode=" + HttpStatus.SC_OK; + } else if (response.getStatus() == HttpStatus.SC_NOT_FOUND) { + returnMsg = "Record not found . StatusCode=" + HttpStatus.SC_NOT_FOUND; + } else if (response.getStatus() == HttpStatus.SC_BAD_REQUEST) { + returnMsg = "Bad request: one of the following attribute serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName should be defined. StatusCode=" + HttpStatus.SC_BAD_REQUEST; + } + return returnMsg; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeMsoInfraRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeMsoInfraRequest.java new file mode 100644 index 0000000000..42ef60bfaf --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeMsoInfraRequest.java @@ -0,0 +1,644 @@ +/*- + * ============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.apihandlerinfra; + +import java.io.StringReader; +import java.io.StringWriter; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamResult; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.volumebeans.ActionType; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeInputs; +import org.openecomp.mso.apihandlerinfra.volumebeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeRequest; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.requestsdb.HibernateUtil; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; + +public class VolumeMsoInfraRequest { + + private String requestId; + private String requestXML; + private String requestUri; + private RequestInfo rinfo; + private VolumeInputs volumeInputs; + private String volumeParams; + private ActionType action; + private String errorMessage; + private String httpResponse; + private String responseBody; + private RequestStatusType status; + private long startTime; + private long progress = Constants.PROGRESS_REQUEST_RECEIVED; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + private static final String NOT_PROVIDED = "not provided"; + + VolumeMsoInfraRequest (String requestId) { + this.requestId = requestId; + Calendar startTimeCalendar = Calendar.getInstance (); + this.startTime = startTimeCalendar.getTimeInMillis (); + MsoLogger.setLogContext (requestId, null); + + } + + // Parse request XML + void parse (String reqXML, String version, MsoJavaProperties props) throws ValidationException { + + msoLogger.debug ("Validating the request"); + + this.requestXML = reqXML; + + VolumeRequest volumeReq = null; + boolean isWrongRootElement = false; + + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (reqXML)); + SAXSource source = new SAXSource (inputSource); + + if (reqXML.contains ("volume-request") && !reqXML.contains("vnf-request")) { + volumeReq = jaxbUnmarshaller.unmarshal (source, VolumeRequest.class).getValue (); + } else { + isWrongRootElement = true; + } + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_VNFREQUEST_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + throw new ValidationException ("format for volume request"); + } + + if (isWrongRootElement) { + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR_REASON, "root element is not correct", "", "", MsoLogger.ErrorCode.SchemaError, "root element <volume-request> expected"); + throw new ValidationException ("root element <volume-request> expected"); + } + + if (volumeReq == null) { + throw new ValidationException ("volume-request"); + } + + this.rinfo = volumeReq.getRequestInfo (); + + if (this.rinfo == null) { + throw new ValidationException ("request-info"); + } + + action = this.rinfo.getAction (); + if (action == null) { + throw new ValidationException ("action"); + } + this.volumeInputs = volumeReq.getVolumeInputs (); + if (this.volumeInputs == null) { + throw new ValidationException ("volume-inputs"); + } + + // Verify that the elements correspond to the version + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (this.volumeInputs.getBackoutOnFailure() != null || this.volumeInputs.getAicCloudRegion() != null || + this.volumeInputs.getVfModuleModelName () != null || this.volumeInputs.getAsdcServiceModelVersion () != null || + this.volumeInputs.getServiceInstanceId () != null || this.volumeInputs.getVnfId () != null) { + throw new ValidationException ("format for v1 version of volume request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (this.volumeInputs.getServiceType() != null || this.volumeInputs.getAicNodeClli() != null || + this.volumeInputs.getServiceInstanceId () != null || this.volumeInputs.getVnfId () != null) { + throw new ValidationException ("format for v2 version of volume request"); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (this.volumeInputs.getServiceType() != null || this.volumeInputs.getAicNodeClli() != null) { + throw new ValidationException ("format for v3 version of volume request"); + } + } + + + if (!InfraUtils.isActionAllowed (props, "volume", version, action.value ())) { + throw new ValidationException ("action allowable for version " + version + " of volume request"); + } + + switch (action) { + case UPDATE: + case DELETE: + case UPDATE_VF_MODULE_VOL: + case DELETE_VF_MODULE_VOL: + if (this.volumeInputs.getVolumeGroupId () == null) { + throw new ValidationException ("volume-group-id"); + } + break; + default: + break; + } + + if (ActionType.CREATE.equals (action) || ActionType.CREATE_VF_MODULE_VOL.equals(action)) { + if (this.volumeInputs.getVolumeGroupName () == null) { + throw new ValidationException ("volume-group-name"); + } + if (!InfraUtils.isValidHeatName(this.volumeInputs.getVolumeGroupName ())) { + throw new ValidationException ("volume-group-name: no value meeting heat stack name syntax requirements"); + } + } + + + if (this.volumeInputs.getVnfType () == null) { + throw new ValidationException ("vnf-type"); + } + + + switch (action) { + case CREATE_VF_MODULE_VOL: + case UPDATE_VF_MODULE_VOL: + case DELETE_VF_MODULE_VOL: + if (this.volumeInputs.getVfModuleModelName () == null) { + throw new ValidationException ("vf-module-model-name"); + } + break; + default: + break; + } + + if (!version.equals(Constants.SCHEMA_VERSION_V1) && this.volumeInputs.getServiceId () == null) { + throw new ValidationException ("service-id "); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1) && this.volumeInputs.getServiceType () != null && this.volumeInputs.getServiceId () != null) { + throw new ValidationException ("service-type or service-id "); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1) && this.volumeInputs.getAicNodeClli () == null) { + throw new ValidationException ("aic-node-clli"); + } + + if ((version.equals(Constants.SCHEMA_VERSION_V2) || version.equals(Constants.SCHEMA_VERSION_V3)) && (this.volumeInputs.getAicCloudRegion () == null || this.volumeInputs.getAicCloudRegion ().isEmpty())) { + throw new ValidationException ("aic-cloud-region"); + } + + if (version.equals(Constants.SCHEMA_VERSION_V3) && this.volumeInputs.getServiceInstanceId () == null) { + throw new ValidationException ("service-instance-id"); + } + + if (version.equals(Constants.SCHEMA_VERSION_V3) && this.volumeInputs.getVnfId () == null && ActionType.CREATE_VF_MODULE_VOL.equals(action)) { + throw new ValidationException ("vnf-id"); + } + + if (ActionType.CREATE.equals (action) || ActionType.CREATE_VF_MODULE_VOL.equals(action)) { + if (this.volumeInputs.getTenantId () == null) { + throw new ValidationException ("tenant-id"); + } + } + + + Object vpN = volumeReq.getVolumeParams (); + + if (vpN != null) { + Node node = (Node) vpN; + Document doc = node.getOwnerDocument (); + this.volumeParams = domToStr (doc); + } + + msoLogger.debug ("VolumeParams: " + this.volumeParams); + + + msoLogger.debug ("Request valid"); + + // Rebuild the request string for BPEL to include request-id + rinfo.setRequestId (this.requestId); + volumeReq.setRequestInfo (rinfo); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (volumeReq, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + this.requestXML = stringWriter.toString ().replace("http://ecomp.att.com/mso/infra/volume-request", + "http://ecomp.att.com/mso/infra/vnf-request"); + + msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML); + + } + + public void createRequestRecord (Status status) { + + Session session = null; + try { + + session = HibernateUtil.getSessionFactory ().openSession (); + session.beginTransaction (); + + InfraActiveRequests aq = new InfraActiveRequests (); + aq.setRequestId (requestId); + + Timestamp startTimeStamp = new Timestamp (Calendar.getInstance ().getTimeInMillis ()); + if (rinfo != null) { + if (rinfo.getAction () != null) { + aq.setAction (rinfo.getAction ().value ()); + aq.setRequestAction (RequestActionMap.getMappedRequestAction (rinfo.getAction ().value ())); + } + aq.setSource (rinfo.getSource ()); + } else { + // Set up mandatory parameters + aq.setAction (NOT_PROVIDED); + aq.setAction (NOT_PROVIDED); + } + + aq.setRequestBody (this.requestXML); + aq.setRequestScope (ModelType.volumeGroup.name ()); + + if (volumeInputs != null) { + if (volumeInputs.getVolumeGroupId () != null) { + aq.setVolumeGroupId (volumeInputs.getVolumeGroupId ()); + } + if (volumeInputs.getVolumeGroupName () != null) { + aq.setVolumeGroupName (volumeInputs.getVolumeGroupName ()); + } + if (volumeInputs.getVnfType () != null) { + aq.setVnfType (volumeInputs.getVnfType ()); + } + if (volumeInputs.getVnfId () != null) { + aq.setVnfId (volumeInputs.getVnfId ()); + } + if (volumeInputs.getServiceInstanceId () != null) { + aq.setServiceInstanceId (volumeInputs.getServiceInstanceId ()); + } + if (volumeInputs.getServiceType () != null) { + aq.setServiceType (volumeInputs.getServiceType ()); + } + if (volumeInputs.getServiceId () != null) { + aq.setAaiServiceId (volumeInputs.getServiceId ()); + } + if (volumeInputs.getAicNodeClli () != null) { + aq.setAicNodeClli (volumeInputs.getAicNodeClli ()); + } + if (volumeInputs.getAicCloudRegion () != null) { + aq.setAicCloudRegion (volumeInputs.getAicCloudRegion ()); + } + if (volumeInputs.getTenantId () != null) { + aq.setTenantId (volumeInputs.getTenantId ()); + } + + } + aq.setStartTime (startTimeStamp); + aq.setRequestStatus (status.toString ()); + aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER); + aq.setRequestType ("VOLUME"); + + if (volumeParams != null) { + msoLogger.debug ("Storing volumeParams: " + volumeParams); + aq.setVnfParams (this.volumeParams); + } + + if ((status == Status.FAILED) || (status == Status.COMPLETE)) { + aq.setStatusMessage (this.errorMessage); + aq.setResponseBody (this.responseBody); + + Calendar endTime = Calendar.getInstance (); + Timestamp endTimeStamp = new Timestamp (endTime.getTimeInMillis ()); + aq.setEndTime (endTimeStamp); + } + aq.setProgress (this.progress); + + + msoLogger.debug ("About to insert a record"); + + session.save (aq); + session.getTransaction ().commit (); + session.close (); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception in createRequestRecord", e); + if (session != null) { + session.close (); + } + if (!status.equals (Status.FAILED)) { + throw e; + } + } + } + + public void updateFinalStatus (Status status) { + int result = 0; + try { + result = RequestsDatabase.updateInfraFinalStatus(requestId, status.toString (), + this.errorMessage, this.progress, this.responseBody, Constants.MODIFIED_BY_APIHANDLER); + } catch (Exception e) { + msoLogger.error(MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "Exception in updateFinalStatus"); + msoLogger.debug("Exception: ", e); + } + } + + public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) { + return buildResponseWithError (httpResponseCode, errorCode, inProgress, null); + } + + public Response buildResponseWithError (int httpResponseCode, + String errorCode, + InfraActiveRequests inProgress, + String errorString) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + + VolumeRequest vr = beansObjectFactory.createVolumeRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + + ri.setRequestId (requestId); + ri.setRequestStatus (this.status); + ri.setAction (this.rinfo.getAction ()); + ri.setSource (this.rinfo.getSource ()); + + String errorMsg = null; + if (errorCode != null) { + // If error code is actually an XML error response from BPEL, treat it specially: + if (!Messages.errors.containsKey (errorCode)) { + if (errorCode.length () > 300) { + errorMsg = errorCode.substring (0, 299); + } else { + errorMsg = errorCode; + } + + } else { + + if (inProgress == null) { + if (errorCode.equals(ErrorNumbers.RECIPE_DOES_NOT_EXIST)) { + errorMsg = String.format (Messages.errors.get (errorCode), "volume", errorString); + } + else { + errorMsg = String.format (Messages.errors.get (errorCode), errorString); + } + } else if (errorCode.equals (ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "volume", + inProgress.getVnfName (), + inProgress.getRequestStatus (), + "volume"); + } else if (errorCode.equals (ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID)) { + errorMsg = String.format (Messages.errors.get (errorCode), + "volume", + inProgress.getVnfId (), + inProgress.getRequestStatus (), + inProgress.getAction (), + "volume"); + } + } + + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + } + ri.setProgress ((int) this.progress); + + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + + vr.setRequestInfo (ri); + vr.setVolumeInputs (this.volumeInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Exception: ", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + // Log the failed request into the MSO Requests database + + return Response.status (httpResponseCode).entity (response).build (); + + } + + public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) { + + ObjectFactory beansObjectFactory = new ObjectFactory (); + VolumeRequest vr = beansObjectFactory.createVolumeRequest (); + + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (requestId); + + if (this.rinfo != null) { + if (this.rinfo.getAction () != null) { + ri.setAction (this.rinfo.getAction ()); + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + if (this.rinfo.getSource () != null) { + ri.setSource (this.rinfo.getSource ()); + } + } else { + ri.setAction (ActionType.NOT_PROVIDED); + } + + // Nothing more is expected for this request + + String errorMsg = String.format (Messages.errors.get (ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + + "_service"), + exceptionMessage); + ri.setStatusMessage (errorMsg); + this.errorMessage = errorMsg; + + ri.setProgress ((int) this.progress); + ri.setRequestStatus (RequestStatusType.FAILED); + Date startDate = new Date (this.startTime); + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS"); + String startTimeString = sdf.format (startDate); + + ri.setStartTime (startTimeString); + + vr.setRequestInfo (ri); + vr.setVolumeInputs (this.volumeInputs); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (vr, stringWriter); + + } catch (JAXBException e) { + msoLogger.debug ("Error marshalling", e); + } + + String response = stringWriter.toString (); + + this.httpResponse = Integer.toString (httpResponseCode); + this.responseBody = response; + + return Response.status (httpResponseCode).entity (response).build (); + } + + public String getRequestUri () { + return requestUri; + } + + public void setRequestUri (String requestUri) { + this.requestUri = requestUri; + } + + public VolumeInputs getVolumeInputs () { + return volumeInputs; + } + + public RequestInfo getRequestInfo () { + return rinfo; + } + + public String getResponseBody () { + return responseBody; + } + + public void setResponseBody (String responseBody) { + this.responseBody = responseBody; + } + + public String getHttpResponse () { + return httpResponse; + } + + public void setHttpResponse (String httpResponse) { + this.httpResponse = httpResponse; + } + + public String getRequestId () { + return requestId; + } + + public String getRequestXML () { + return requestXML; + } + + public void setRequestXML (String requestXML) { + this.requestXML = requestXML; + } + + public RequestStatusType getStatus () { + return status; + } + + public void setStatus (RequestStatusType status) { + this.status = status; + switch (status) { + case FAILED: + case COMPLETE: + this.progress = Constants.PROGRESS_REQUEST_COMPLETED; + break; + case IN_PROGRESS: + this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS; + break; + } + } + + public String getServiceType () { + if (this.volumeInputs.getServiceType () != null) + return this.volumeInputs.getServiceType (); + if (this.volumeInputs.getServiceId () != null) + return this.volumeInputs.getServiceId (); + return null; + } + + public static String domToStr (Document doc) { + if (doc == null) { + return null; + } + + try { + StringWriter sw = new StringWriter (); + StreamResult sr = new StreamResult (sw); + TransformerFactory tf = TransformerFactory.newInstance (); + Transformer t = tf.newTransformer (); + t.setOutputProperty (OutputKeys.STANDALONE, "yes"); + NodeList nl = doc.getDocumentElement ().getChildNodes (); + DOMSource source = null; + for (int x = 0; x < nl.getLength (); x++) { + Node e = nl.item (x); + if (e instanceof Element) { + source = new DOMSource (e); + break; + } + } + if (source != null) { + t.transform (source, sr); + + String s = sw.toString (); + return s; + } + + return null; + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception in domToStr", e); + } + return null; + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeRequestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeRequestHandler.java new file mode 100644 index 0000000000..7c1b74c684 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/VolumeRequestHandler.java @@ -0,0 +1,746 @@ +/*- + * ============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.apihandlerinfra; + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; + +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.sax.SAXSource; + +import org.xml.sax.InputSource; + +import org.openecomp.mso.apihandler.common.ErrorNumbers; +import org.openecomp.mso.apihandler.common.RequestClient; +import org.openecomp.mso.apihandler.common.RequestClientFactory; +import org.openecomp.mso.apihandler.common.ResponseHandler; +import org.openecomp.mso.apihandler.common.ValidationException; +import org.openecomp.mso.apihandlerinfra.volumebeans.ActionType; +import org.openecomp.mso.apihandlerinfra.volumebeans.ObjectFactory; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestInfo; +import org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeInputs; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeOutputs; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeRequest; +import org.openecomp.mso.apihandlerinfra.volumebeans.VolumeRequests; +import org.openecomp.mso.db.catalog.CatalogDatabase; +import org.openecomp.mso.db.catalog.beans.Recipe; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesFactory; +import org.openecomp.mso.requestsdb.InfraRequests; +import org.openecomp.mso.requestsdb.InfraActiveRequests; +import org.openecomp.mso.requestsdb.RequestsDatabase; +import org.openecomp.mso.utils.UUIDChecker; + +@Path("/{version: v1|v2|v3}/volume-request") +public class VolumeRequestHandler { + + @Context + private UriInfo uriInfo; + + protected ObjectFactory beansObjectFactory = new ObjectFactory (); + + public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH); + + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger (); + + private static MsoJavaProperties props = MsoPropertiesUtils.loadMsoProperties (); + + private static final String NOT_FOUND = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not started, properties file missing or invalid or Database Connection failed</body></html>"; + + private static final Response NOT_STARTED_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_FOUND) + .build (); + + @GET + public Response queryFilters (@QueryParam("vnf-type") String vnfType, + @QueryParam("service-type") String serviceType, + @QueryParam("aic-node-clli") String aicNodeClli, + @QueryParam("tenantId") String tenantId, + @QueryParam("volume-group-id") String volumeGroupId, + @QueryParam("volume-group-name") String volumeGroupName, + @PathParam("version") String version) { + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VolumeQueryFilters"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for queryFilter with vnf-type:" + vnfType + + " service-type:" + serviceType + + " aic-node-clli:" + aicNodeClli + + " tenant-id:" + tenantId + + " volume-group-id:" + volumeGroupId + + " volume-group-name:" + volumeGroupName); + Response response = null; + if (vnfType != null) { + response = this.getRequestList ("vnfType", vnfType, version); + } else { + response = queryGenericFilters (serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName, version); + } + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + @GET + @Path(Constants.REQUEST_ID_PATH) + public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) { + + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + long startTime = System.currentTimeMillis (); + MsoLogger.setServiceName ("VolumeGetRequest"); + // Generate a Request Id + UUIDChecker.generateUUID(msoLogger); + msoLogger.debug ("Incoming request received for getRequest with request-id:" + requestId); + + Response response = getRequestGeneric (requestId, version); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + + } + + + protected MsoLogger getMsoLogger () { + return msoLogger; + } + + + protected void fillVolumeRequest (VolumeRequest qr, InfraRequests ar, String version) { + VolumeInputs vi = beansObjectFactory.createVolumeInputs (); + + if (ar.getVolumeGroupId () != null) { + vi.setVolumeGroupId (ar.getVolumeGroupId ()); + } + if (ar.getVolumeGroupName () != null) { + vi.setVolumeGroupName (ar.getVolumeGroupName ()); + } + if (ar.getVnfType () != null) { + vi.setVnfType (ar.getVnfType ()); + } + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (ar.getServiceType () != null) { + vi.setServiceType (ar.getServiceType ()); + } + if (ar.getAicNodeClli () != null) { + vi.setAicNodeClli (ar.getAicNodeClli ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V2)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + } + else if (version.equals(Constants.SCHEMA_VERSION_V3)) { + if (ar.getAaiServiceId () != null) { + vi.setServiceId (ar.getAaiServiceId ()); + } + if (ar.getAicCloudRegion () != null) { + vi.setAicCloudRegion (ar.getAicCloudRegion ()); + } + if (ar.getVfModuleModelName () != null) { + vi.setVfModuleModelName (ar.getVfModuleModelName ()); + } + if (ar.getServiceInstanceId () != null) { + vi.setServiceInstanceId (ar.getServiceInstanceId ()); + } + if (ar.getVnfId () != null) { + vi.setVnfId (ar.getVnfId ()); + } + } + if (ar.getTenantId () != null) { + vi.setTenantId (ar.getTenantId ()); + } + + qr.setVolumeInputs (vi); + + qr.setVolumeParams(ar.getVnfParams ()); + + try { + String volumeoutputs = ar.getVnfOutputs (); + if (volumeoutputs != null && volumeoutputs.length () > 0) { + msoLogger.debug ("Read VOLUME outputs: " + volumeoutputs); + VolumeOutputs volumeOutput = null; + + // Now unmarshal it into network outputs + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeOutputs.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller (); + + InputSource inputSource = new InputSource (new StringReader (volumeoutputs)); + SAXSource source = new SAXSource (inputSource); + + volumeOutput = (VolumeOutputs) jaxbUnmarshaller.unmarshal (source, VolumeOutputs.class).getValue (); + + } catch (Exception e) { + msoLogger.debug ("Validation failed", e); + throw new ValidationException ("format for volume outputs"); + } + + qr.setVolumeOutputs (volumeOutput); + } + } catch (Exception e) { + msoLogger.debug ("exception reading networkOutputs Clob", e); + } + } + + protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String volumeGroupId, String volumeGroupName, String version) { + if (serviceType != null) { + return this.getRequestList ("serviceType", serviceType, version); + } + if (aicNodeClli != null) { + return this.getRequestList ("aicNodeClli", aicNodeClli, version); + } + if (tenantId != null) { + return this.getRequestList ("tenantId", tenantId, version); + } + if (volumeGroupName != null) { + return this.getRequestList ("volumeGroupName", volumeGroupName, version); + } + if (volumeGroupId != null) { + return this.getRequestList ("volumeGroupId", volumeGroupId, version); + } + return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build (); + } + + + protected Response getRequestGeneric (String requestId, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest: " + requestId); + + String responseString = null; + + InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, + "VOLUME"); + if (activeReq != null) { + // build response for active + responseString = infraRequestsResponse (activeReq, version); + return Response.status (HttpStatus.SC_OK).entity (responseString).build (); + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + protected Response getRequestList (String queryAttribute, String queryValue, String version) { + // Check INFRA_ACTIVE_REQUESTS table to find info + // on this request + + getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue); + + List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute, + queryValue, + "VOLUME"); + + List <VolumeRequest> queryResponseList = new LinkedList <VolumeRequest> (); + + if (activeReqList != null) { + // build response for active + queryResponseList = infraRequestsResponses (activeReqList, version); + + } + + + if (queryResponseList != null && !queryResponseList.isEmpty ()) { + String result = this.translateVolumeRequests (queryResponseList); + return Response.status (HttpStatus.SC_OK).entity (result).build (); + + } else { + // Report that no request has been found + return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build (); + } + } + + private VolumeRequest fillGeneric (InfraRequests ar) { + VolumeRequest qr = beansObjectFactory.createVolumeRequest (); + RequestInfo ri = beansObjectFactory.createRequestInfo (); + ri.setRequestId (ar.getRequestId ()); + ri.setAction (ActionType.fromValue (ar.getAction ())); + ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ())); + if (ar.getProgress () != null) { + ri.setProgress (ar.getProgress ().intValue ()); + } + if (ar.getSource () != null) { + ri.setSource (ar.getSource ()); + } + + ri.setStartTime (ar.getStartTime ().toString ()); + if (ar.getEndTime () != null) { + ri.setEndTime (ar.getEndTime ().toString ()); + } + + if (ar.getStatusMessage () != null) { + ri.setStatusMessage (ar.getStatusMessage ()); + } + qr.setRequestInfo (ri); + return qr; + } + + private List <VolumeRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) { + List <VolumeRequest> queryResponseList = new LinkedList <VolumeRequest> (); + + for (InfraRequests ar : arList) { + VolumeRequest qr = fillGeneric (ar); + fillVolumeRequest (qr, ar, version); + queryResponseList.add (qr); + } + return queryResponseList; + } + + private String translateVolumeRequests (List <VolumeRequest> queryResponseList) { + VolumeRequests queryResponses = new VolumeRequests (); + for (int i = 0; i < queryResponseList.size (); i++) { + queryResponses.getVolumeRequest ().add (queryResponseList.get (i)); + } + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequests.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + // output pretty printed + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal (queryResponses, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + return stringWriter.toString (); + } + + private String infraRequestsResponse (InfraRequests ar, String version) { + VolumeRequest qr = fillGeneric (ar); + fillVolumeRequest (qr, ar, version); + + StringWriter stringWriter = new StringWriter (); + try { + JAXBContext jaxbContext = JAXBContext.newInstance (VolumeRequest.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller (); + + jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal (qr, stringWriter); + + } catch (JAXBException e) { + getMsoLogger ().debug ("Marshalling issue", e); + } + + String response = stringWriter.toString (); + return response; + } + + private String getAuditLogReturnMsg (Response response) { + String returnMsg = ""; + if (response.getStatus() == HttpStatus.SC_OK) { + returnMsg = "Successful. StatusCode=" + HttpStatus.SC_OK; + } else if (response.getStatus() == HttpStatus.SC_NOT_FOUND) { + returnMsg = "Record not found . StatusCode=" + HttpStatus.SC_NOT_FOUND; + } else if (response.getStatus() == HttpStatus.SC_BAD_REQUEST) { + returnMsg = "Bad request: one of the following attribute serviceType, aicNodeClli, tenantId, volumeGroupId, volumeGroupName should be defined. StatusCode=" + HttpStatus.SC_BAD_REQUEST; + } + return returnMsg; + } + + @POST + @Path("/") + @Produces(MediaType.APPLICATION_XML) + public Response manageVolumeRequest (String reqXML, @PathParam("version") String version) { + MsoLogger.setServiceName ("VolumeRequest"); + if ("v1".equals(version)) { + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V1); + } else if ("v2".equals(version)) { + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V2); + } else if ("v3".equals(version)) { + return manageVolumeRequestImpl (reqXML, Constants.SCHEMA_VERSION_V3); + } else { + long startTime = System.currentTimeMillis (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Version not found"); + return Response.status(HttpStatus.SC_NOT_FOUND).build(); + } + } + + private Response manageVolumeRequestImpl (String reqXML, String version) { + String methodName = "VolumeRequest"; + props = MsoPropertiesUtils.loadMsoProperties (); + + long startTime = System.currentTimeMillis (); + if (MsoPropertiesUtils.getNoPropertiesState()) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable, "Application not started, properties file missing or invalid"); + return NOT_STARTED_RESPONSE; + } + + uriInfo.getRequestUri (); + + // Generate unique request id for the new request + UUID requestUUID = UUID.randomUUID (); + + VolumeMsoInfraRequest msoRequest = new VolumeMsoInfraRequest (requestUUID.toString ()); + + if (reqXML == null) { + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest, "The input request is null"); + return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build (); + } + + String requestUri = uriInfo.getRequestUri ().toString (); + + msoLogger.debug ("Incoming Request: " + reqXML); + + msoRequest.setRequestUri (requestUri); + + msoLogger.debug ("Schema version: " + version); + try { + msoRequest.parse (reqXML, version, props); + } catch (Exception e) { + msoLogger.debug ("Validation failed: ", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseFailedValidation (HttpStatus.SC_BAD_REQUEST, e.getMessage ()); + if (msoRequest.getRequestId () != null) { + msoLogger.debug ("Logging failed message to the database"); + msoRequest.createRequestRecord (Status.FAILED); + } + msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, reqXML, "", "", MsoLogger.ErrorCode.DataError, "Exception when parsing reqXML", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + MsoLogger.setServiceName (MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo ().getAction ().name ()); + msoLogger.debug ("Update serviceName with detailed action info to:" + MsoLogger.getServiceName () + "_" + msoRequest.getRequestInfo ().getAction ().name ()); + if (msoRequest.getRequestInfo () + .getAction () == org.openecomp.mso.apihandlerinfra.volumebeans.ActionType.CREATE) { + // Check if this request is a duplicate of the one with the same network Name + msoLogger.debug ("Checking for a duplicate with the same volume-name"); + InfraActiveRequests dup = null; + try { + + dup = RequestsDatabase.checkDuplicateByVnfName (msoRequest.getVolumeInputs ().getVolumeGroupName (), + msoRequest.getRequestInfo ().getAction ().value (), + "VOLUME"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "volume-group-name", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for duplicated request", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for duplicated request"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + "CREATE on the same Volume Group Name is already progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicates request - CREATE on the same Volume Group Name is already progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicates request - CREATE on the same Volume Group Name is already progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } else { + // Check if this request is a duplicate of the one with the same volumeGroupId + InfraActiveRequests dup = null; + msoLogger.debug ("Checking for a duplicate with the same volume-group-id"); + try { + dup = RequestsDatabase.checkDuplicateByVnfId (msoRequest.getVolumeInputs ().getVolumeGroupId (), + msoRequest.getRequestInfo ().getAction ().value (), + "VOLUME"); + + } catch (Exception e) { + msoLogger.debug ("Exception", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.error (MessageEnum.APIH_DUPLICATE_CHECK_EXC_ATT, "volume-group-id", "", "", MsoLogger.ErrorCode.DataError, "Exception while checking for a duplicate request with the sam volume-group-id", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while checking for a duplicate request with the sam volume-group-id"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + if (dup != null) { + // Found the duplicate record. Return the appropriate error. + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponse (HttpStatus.SC_CONFLICT, + ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, + dup); + msoLogger.warn (MessageEnum.APIH_DUPLICATE_FOUND, + msoRequest.getRequestInfo ().getAction ().value () + + " on the same Volume Group Id already in progress", "", "", MsoLogger.ErrorCode.DataError, "Duplicated request on the same Volume Group Id already in progress"); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict, "Duplicated request on the same Volume Group Id already in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + } + + String orchestrationURI = ""; + + // Query MSO Catalog DB + try(CatalogDatabase db = new CatalogDatabase ()) { + Recipe recipe = null; + + if (version.equals(Constants.SCHEMA_VERSION_V1)) { + if (msoRequest.getServiceType () != null + && msoRequest.getServiceType ().length () > 0) { + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + msoRequest.getServiceType ()); + } + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + null); + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), + null); + } + } + } + else if (version.equals (Constants.SCHEMA_VERSION_V2) || version.equals (Constants.SCHEMA_VERSION_V3)) { + switch (msoRequest.getRequestInfo ().getAction ()) { + case CREATE: + case UPDATE: + case DELETE: + // First get recipe for the vnf type given + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + + // If no recipe for the vnf type is found, look for generic recipe with "*" vnf type + if (recipe == null) { + recipe = db.getVnfComponentsRecipe (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + } + break; + case CREATE_VF_MODULE_VOL: + case UPDATE_VF_MODULE_VOL: + case DELETE_VF_MODULE_VOL: + // First get recipe for the vnf type given + recipe = db.getVnfComponentsRecipe (msoRequest.getVolumeInputs ().getVnfType (), + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value (), null); + + // If no recipe for the vnf type is found, look for generic recipe with "*" in vf module id + if (recipe == null) { + recipe = db.getVnfComponentsRecipeByVfModuleId (Constants.VNF_TYPE_WILDCARD, + Constants.VOLUME_GROUP_COMPONENT_TYPE, + msoRequest.getRequestInfo ().getAction ().value ()); + } + break; + default: + break; + } + + } + + if (recipe == null) { + msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, "VNF Recipe", "", "", MsoLogger.ErrorCode.DataError, "VNF Recipe not found in DB"); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.RECIPE_DOES_NOT_EXIST, + null, + ""); + msoRequest.createRequestRecord (Status.FAILED); + db.close (); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "VNF Recipe not found in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + orchestrationURI = recipe.getOrchestrationUri (); + msoLogger.debug ("Orchestration URI is: " + orchestrationURI); + String requestId = msoRequest.getRequestId (); + msoLogger.debug ("requestId is: " + requestId); + msoLogger.debug ("About to insert a record"); + + try { + msoRequest.createRequestRecord (Status.PENDING); + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception in createRequestRecord", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_INTERNAL_SERVER_ERROR, + ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, + null, + "non-unique request-id specified"); + // Cannot create a record of this request here, our communication with MSO DB just failed. Do not try + // to create a failed record + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while creating record in DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + RequestClient requestClient = null; + HttpResponse response = null; + long subStartTime = System.currentTimeMillis(); + try { + requestClient = RequestClientFactory.getRequestClient (orchestrationURI, props); + // Capture audit event + msoLogger.debug ("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl ()); + response = requestClient.post (msoRequest.getRequestXML (), + requestId, + Integer.toString (recipe.getRecipeTimeout ()).toString (), + version, + null, + null); + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationURI, null); + } catch (Exception e) { + msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationURI, null); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_COMMUNICATION_TO_BPEL, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoConfigurationError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_BPEL)); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, "Camunda", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine", e); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + if (response == null) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponseWithError (HttpStatus.SC_BAD_GATEWAY, + ErrorNumbers.NO_RESPONSE_FROM_BPEL, + null, + "bpelResponse is null"); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Null response from BPEL", "Camunda", "", MsoLogger.ErrorCode.DataError, "Null response from BPMN engine"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Null response from BPMN engine"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + + ResponseHandler respHandler = new ResponseHandler (response, requestClient.getType ()); + int bpelStatus = respHandler.getStatus (); + + // BPEL accepted the request, the request is in progress + if (bpelStatus == HttpStatus.SC_ACCEPTED) { + String bpelXMLResponseBody = respHandler.getResponseBody (); + msoLogger.debug ("Received from BPEL: " + bpelXMLResponseBody); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.IN_PROGRESS); + RequestsDatabase.updateInfraStatus (msoRequest.getRequestId (), + Status.IN_PROGRESS.toString (), + Constants.PROGRESS_REQUEST_IN_PROGRESS, + Constants.MODIFIED_BY_APIHANDLER); + Response resp = msoRequest.buildResponse (bpelStatus, null, null); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "BPMN accepted the request, the request is in progress"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + + String bpelXMLResponseBody = respHandler.getResponseBody (); + if (bpelXMLResponseBody != null && !bpelXMLResponseBody.isEmpty ()) { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, bpelXMLResponseBody, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, + "Response from BPEL engine is failed with HTTP Status=" + bpelStatus, "Camunda", "", MsoLogger.ErrorCode.DataError, "Response from BPEL engine is failed with HTTP Status=" + bpelStatus); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is with status Failed"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } else { + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response resp = msoRequest.buildResponse (bpelStatus, ErrorNumbers.ERROR_FROM_BPEL, null); + msoRequest.updateFinalStatus (Status.FAILED); + msoLogger.error (MessageEnum.APIH_BPEL_RESPONSE_ERROR, "Response from BPEL engine is empty", "Camunda", "", MsoLogger.ErrorCode.DataError, "Response from BPEL engine is empty"); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError, "Response from BPMN engine is empty"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ()); + return resp; + } + } + + } catch (Exception e) { + msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception while communciate with Catalog DB", e); + msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.volumebeans.RequestStatusType.FAILED); + Response response = msoRequest.buildResponseWithError (HttpStatus.SC_NOT_FOUND, + ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, + null, + e.getMessage ()); + alarmLogger.sendAlarm ("MsoDatabaseAccessError", + MsoAlarmLogger.CRITICAL, + Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB)); + msoRequest.createRequestRecord (Status.FAILED); + msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with DB"); + msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ()); + return response; + } + + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ActionType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ActionType.java new file mode 100644 index 0000000000..d5e9629ce1 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ActionType.java @@ -0,0 +1,74 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for action-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="action-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="CREATE"/> + * <enumeration value="SETSTATUS"/> + * <enumeration value="REPLACE"/> + * <enumeration value="UPDATE"/> + * <enumeration value="DELETE"/> + * <enumeration value="NOT_PROVIDED"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "action-type") +@XmlEnum +public enum ActionType { + + CREATE, + SETSTATUS, + REPLACE, + UPDATE, + DELETE, + NOT_PROVIDED; + + public String value() { + return name(); + } + + public static ActionType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkInputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkInputs.java new file mode 100644 index 0000000000..f2bf59e298 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkInputs.java @@ -0,0 +1,378 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="network-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="network-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="network-type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="service-instance-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="backout-on-failure" type="{http://www.w3.org/2001/XMLSchema}Boolean"/> + * <choice> + * <element name="service-type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="service-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <choice> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="aic-cloud-region" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="tenant-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="prov-status" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "networkId", + "networkName", + "networkType", + "serviceInstanceId", + "backoutOnFailure", + "serviceType", + "serviceId", + "aicNodeClli", + "aicCloudRegion", + "tenantId", + "provStatus" +}) +@XmlRootElement(name = "network-inputs") +public class NetworkInputs { + + @XmlElement(name = "network-id") + protected String networkId; + @XmlElement(name = "network-name") + protected String networkName; + @XmlElement(name = "network-type", required = true) + protected String networkType; + @XmlElement(name = "service-instance-id") + protected String serviceInstanceId; + @XmlElement(name = "backout-on-failure") + protected Boolean backoutOnFailure; + @XmlElement(name = "service-type") + protected String serviceType; + @XmlElement(name = "service-id") + protected String serviceId; + @XmlElement(name = "aic-node-clli") + protected String aicNodeClli; + @XmlElement(name = "aic-cloud-region") + protected String aicCloudRegion; + @XmlElement(name = "tenant-id", required = true) + protected String tenantId; + @XmlElement(name = "prov-status") + protected String provStatus; + + /** + * Gets the value of the networkId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNetworkId() { + return networkId; + } + + /** + * Sets the value of the networkId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNetworkId(String value) { + this.networkId = value; + } + + /** + * Gets the value of the networkName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNetworkName() { + return networkName; + } + + /** + * Sets the value of the networkName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNetworkName(String value) { + this.networkName = value; + } + + /** + * Gets the value of the networkType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNetworkType() { + return networkType; + } + + /** + * Sets the value of the networkType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNetworkType(String value) { + this.networkType = value; + } + + /** + * Gets the value of the serviceInstanceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceInstanceId() { + return serviceInstanceId; + } + + /** + * Sets the value of the serviceInstanceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceInstanceId(String value) { + this.serviceInstanceId = value; + } + + /** + * Gets the value of the serviceType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceType() { + return serviceType; + } + + /** + * Sets the value of the serviceType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceType(String value) { + this.serviceType = value; + } + + /** + * Gets the value of the serviceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceId() { + return serviceId; + } + + /** + * Sets the value of the serviceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceId (String value) { + this.serviceId = value; + } + + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the aicCloudRegion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicCloudRegion() { + return aicCloudRegion; + } + + /** + * Sets the value of the aicCloudRegion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicCloudRegion(String value) { + this.aicCloudRegion = value; + } + + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + /** + * Gets the value of the provStatus property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getProvStatus() { + return provStatus; + } + + /** + * Sets the value of the provStatus property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setProvStatus(String value) { + this.provStatus = value; + } + + /** + * Gets the value of the backoutOnFailure property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getBackoutOnFailure() { + return backoutOnFailure; + } + + /** + * Sets the value of the backoutOnFailure property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBackoutOnFailure(Boolean value) { + this.backoutOnFailure = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkOutputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkOutputs.java new file mode 100644 index 0000000000..683b76452b --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkOutputs.java @@ -0,0 +1,120 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="network-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="network-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "networkId", + "networkName" +}) +@XmlRootElement(name = "network-outputs") +public class NetworkOutputs { + + @XmlElement(name = "network-id", required = true) + protected String networkId; + @XmlElement(name = "network-name", required = true) + protected String networkName; + + /** + * Gets the value of the networkId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNetworkId() { + return networkId; + } + + /** + * Sets the value of the networkId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNetworkId(String value) { + this.networkId = value; + } + + /** + * Gets the value of the networkName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNetworkName() { + return networkName; + } + + /** + * Sets the value of the networkName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNetworkName(String value) { + this.networkName = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequest.java new file mode 100644 index 0000000000..41e1236a8b --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequest.java @@ -0,0 +1,179 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}request-info"/> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}network-inputs"/> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}network-params" minOccurs="0"/> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}network-outputs" minOccurs="0"/> + * </sequence> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestInfo", + "networkInputs", + "networkParams", + "networkOutputs" +}) +@XmlRootElement(name = "network-request") +public class NetworkRequest { + + @XmlElement(name = "request-info", required = true) + protected RequestInfo requestInfo; + @XmlElement(name = "network-inputs") + protected NetworkInputs networkInputs; + @XmlElement(name = "network-params") + protected Object networkParams; + @XmlElement(name = "network-outputs") + protected NetworkOutputs networkOutputs; + + /** + * Gets the value of the requestInfo property. + * + * @return + * possible object is + * {@link RequestInfo } + * + */ + public RequestInfo getRequestInfo() { + return requestInfo; + } + + /** + * Sets the value of the requestInfo property. + * + * @param value + * allowed object is + * {@link RequestInfo } + * + */ + public void setRequestInfo(RequestInfo value) { + this.requestInfo = value; + } + + + /** + * Gets the value of the networkInputs property. + * + * @return + * possible object is + * {@link NetworkInputs } + * + */ + public NetworkInputs getNetworkInputs() { + return networkInputs; + } + + /** + * Sets the value of the networkInputs property. + * + * @param value + * allowed object is + * {@link NetworkInputs } + * + */ + public void setNetworkInputs(NetworkInputs value) { + this.networkInputs = value; + } + + /** + * Gets the value of the networkParams property. + * + * @return + * possible object is + * {@link Object } + * + */ + public Object getNetworkParams() { + return networkParams; + } + + /** + * Sets the value of the networkParams property. + * + * @param value + * allowed object is + * {@link Object } + * + */ + public void setNetworkParams(Object value) { + this.networkParams = value; + } + + /** + * Gets the value of the networkOutputs property. + * + * @return + * possible object is + * {@link NetworkOutputs } + * + */ + public NetworkOutputs getNetworkOutputs() { + return networkOutputs; + } + + /** + * Sets the value of the networkOutputs property. + * + * @param value + * allowed object is + * {@link NetworkOutputs } + * + */ + public void setNetworkOutputs(NetworkOutputs value) { + this.networkOutputs = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequests.java new file mode 100644 index 0000000000..1c0cd94ca2 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkRequests.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/network-request/v1}network-request" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "networkRequest" +}) +@XmlRootElement(name = "network-requests") +public class NetworkRequests { + + @XmlElement(name = "network-request") + protected List<NetworkRequest> networkRequest; + + /** + * Gets the value of the networkRequest property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfRequest property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getNetworkRequest().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link NetworkRequest } + * + * + */ + public List<NetworkRequest> getNetworkRequest() { + if (networkRequest == null) { + networkRequest = new ArrayList<NetworkRequest>(); + } + return this.networkRequest; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkType.java new file mode 100644 index 0000000000..a92fd33234 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkType.java @@ -0,0 +1,148 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="description" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "type", + "id", + "description" +}) +@XmlRootElement(name = "network-type") +public class NetworkType { + + @XmlElement(required = true) + protected String type; + @XmlElement(required = true) + protected String id; + @XmlElement(required = true) + protected String description; + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getType() { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setType(String value) { + this.type = value; + } + + /** + * Gets the value of the id property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the value of the description property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDescription() { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDescription(String value) { + this.description = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkTypes.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkTypes.java new file mode 100644 index 0000000000..e7ddc929b2 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/NetworkTypes.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-type" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "networkType" +}) +@XmlRootElement(name = "network-types") +public class NetworkTypes { + + @XmlElement(name = "network-type") + protected List<NetworkType> networkType; + + /** + * Gets the value of the networkType property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfType property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getNetworkType().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link NetworkType } + * + * + */ + public List<NetworkType> getNetworkType() { + if (networkType == null) { + networkType = new ArrayList<NetworkType>(); + } + return this.networkType; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ObjectFactory.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ObjectFactory.java new file mode 100644 index 0000000000..df553da518 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/ObjectFactory.java @@ -0,0 +1,129 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.openecomp.mso.apihandlerinfra.vnfbeans1 package. + * <p>An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _NetworkParams_QNAME = new QName("http://ecomp.att.com/mso/infra/network-request/v1", "network-params"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.openecomp.mso.apihandlerinfra.vnfbeans1 + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link RequestInfo } + * + */ + public RequestInfo createRequestInfo() { + return new RequestInfo(); + } + + /** + * Create an instance of {@link NetworkRequest } + * + */ + public NetworkRequest createNetworkRequest() { + return new NetworkRequest(); + } + + /** + * Create an instance of {@link NetworkInputs } + * + */ + public NetworkInputs createNetworkInputs() { + return new NetworkInputs(); + } + + /** + * Create an instance of {@link NetworkOutputs } + * + */ + public NetworkOutputs createNetworkOutputs() { + return new NetworkOutputs(); + } + + /** + * Create an instance of {@link NetworkRequests } + * + */ + public NetworkRequests createNetworkRequests() { + return new NetworkRequests(); + } + + /** + * Create an instance of {@link NetworkTypes } + * + */ + public NetworkTypes createNetworkTypes() { + return new NetworkTypes(); + } + + /** + * Create an instance of {@link NetworkType } + * + */ + public NetworkType createNetworkType() { + return new NetworkType(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Object }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://ecomp.att.com/mso/infra/network-request/v1", name = "network-params") + public JAXBElement<Object> createNetworkParams(Object value) { + return new JAXBElement<Object>(_NetworkParams_QNAME, Object.class, null, value); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestInfo.java new file mode 100644 index 0000000000..c7e20aa034 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestInfo.java @@ -0,0 +1,286 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="request-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="action" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}action-type"/> + * <element name="request-status" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}request-status-type" minOccurs="0"/> + * <element name="status-message" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="progress" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="start-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="end-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="source" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestId", + "action", + "requestStatus", + "statusMessage", + "progress", + "startTime", + "endTime", + "source" +}) +@XmlRootElement(name = "request-info") +public class RequestInfo { + + @XmlElement(name = "request-id") + protected String requestId; + @XmlElement(required = true) + protected ActionType action; + @XmlElement(name = "request-status") + protected RequestStatusType requestStatus; + @XmlElement(name = "status-message") + protected String statusMessage; + protected Integer progress; + @XmlElement(name = "start-time") + protected String startTime; + @XmlElement(name = "end-time") + protected String endTime; + protected String source; + + /** + * Gets the value of the requestId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRequestId() { + return requestId; + } + + /** + * Sets the value of the requestId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRequestId(String value) { + this.requestId = value; + } + + /** + * Gets the value of the action property. + * + * @return + * possible object is + * {@link ActionType } + * + */ + public ActionType getAction() { + return action; + } + + /** + * Sets the value of the action property. + * + * @param value + * allowed object is + * {@link ActionType } + * + */ + public void setAction(ActionType value) { + this.action = value; + } + + /** + * Gets the value of the requestStatus property. + * + * @return + * possible object is + * {@link RequestStatusType } + * + */ + public RequestStatusType getRequestStatus() { + return requestStatus; + } + + /** + * Sets the value of the requestStatus property. + * + * @param value + * allowed object is + * {@link RequestStatusType } + * + */ + public void setRequestStatus(RequestStatusType value) { + this.requestStatus = value; + } + + /** + * Gets the value of the statusMessage property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStatusMessage() { + return statusMessage; + } + + /** + * Sets the value of the statusMessage property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStatusMessage(String value) { + this.statusMessage = value; + } + + /** + * Gets the value of the progress property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getProgress() { + return progress; + } + + /** + * Sets the value of the progress property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setProgress(Integer value) { + this.progress = value; + } + + /** + * Gets the value of the startTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStartTime() { + return startTime; + } + + /** + * Sets the value of the startTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStartTime(String value) { + this.startTime = value; + } + + /** + * Gets the value of the endTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEndTime() { + return endTime; + } + + /** + * Sets the value of the endTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEndTime(String value) { + this.endTime = value; + } + + /** + * Gets the value of the source property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * Sets the value of the source property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestStatusType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestStatusType.java new file mode 100644 index 0000000000..50d6daae7e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/RequestStatusType.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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.networkbeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for request-status-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="request-status-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="COMPLETE"/> + * <enumeration value="FAILED"/> + * <enumeration value="IN_PROGRESS"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "request-status-type") +@XmlEnum +public enum RequestStatusType { + + COMPLETE, + FAILED, + IN_PROGRESS, + PENDING, + TIMEOUT; + + public String value() { + return name(); + } + + public static RequestStatusType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/package-info.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/package-info.java new file mode 100644 index 0000000000..54fb4971b5 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/networkbeans/package-info.java @@ -0,0 +1,30 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://ecomp.att.com/mso/infra/network-request/v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package org.openecomp.mso.apihandlerinfra.networkbeans; + diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/package-info.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/package-info.java new file mode 100644 index 0000000000..9225523d87 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/package-info.java @@ -0,0 +1,30 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.01.08 at 03:50:12 PM EST +// + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://ecomp.att.com/mso/request/types/v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package org.openecomp.mso.apihandlerinfra; + diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/CloudConfiguration.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/CloudConfiguration.java new file mode 100644 index 0000000000..a9f7f7a880 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/CloudConfiguration.java @@ -0,0 +1,90 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class CloudConfiguration { + + protected String aicNodeClli; + protected String tenantId; + protected String lcpCloudRegionId; + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + + public String getLcpCloudRegionId() { + return lcpCloudRegionId; + } + + public void setLcpCloudRegionId(String lcpCloudRegionId) { + this.lcpCloudRegionId = lcpCloudRegionId; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ExceptionType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ExceptionType.java new file mode 100644 index 0000000000..aa596ef372 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ExceptionType.java @@ -0,0 +1,156 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2016.05.03 at 03:56:30 PM CDT +// + + +package org.openecomp.mso.apihandlerinfra.serviceinstancebeans; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for exceptionType complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType name="exceptionType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="messageId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="text" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="variables" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="50" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "exceptionType", propOrder = { + "messageId", + "text", + "variables" +}) +@XmlSeeAlso({ + ServiceException.class, + PolicyException.class +}) +public class ExceptionType { + + @XmlElement(required = true) + protected String messageId; + @XmlElement(required = true) + protected String text; + protected List<String> variables; + + /** + * Gets the value of the messageId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getMessageId() { + return messageId; + } + + /** + * Sets the value of the messageId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMessageId(String value) { + this.messageId = value; + } + + /** + * Gets the value of the text property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getText() { + return text; + } + + /** + * Sets the value of the text property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setText(String value) { + this.text = value; + } + + /** + * Gets the value of the variables property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the variables property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getVariables().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List<String> getVariables() { + if (variables == null) { + variables = new ArrayList<String>(); + } + return this.variables; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationListResponse.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationListResponse.java new file mode 100644 index 0000000000..6df45c7a0f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationListResponse.java @@ -0,0 +1,40 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import java.util.List; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class GetOrchestrationListResponse { + + protected List<RequestList> requestList; + + public List<RequestList> getRequestList() { + return requestList; + } + + public void setRequestList(List<RequestList> requestList) { + this.requestList = requestList; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationResponse.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationResponse.java new file mode 100644 index 0000000000..87aa15717e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/GetOrchestrationResponse.java @@ -0,0 +1,39 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class GetOrchestrationResponse { + + protected Request request; + + public Request getRequest() { + return request; + } + + public void setRequest(Request request) { + this.request = request; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/InstanceReferences.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/InstanceReferences.java new file mode 100644 index 0000000000..fd5c73f97f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/InstanceReferences.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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class InstanceReferences { + + protected String serviceInstanceId; + protected String serviceInstanceName; + protected String vnfInstanceId; + protected String vnfInstanceName; + protected String vfModuleInstanceId; + protected String vfModuleInstanceName; + protected String volumeGroupInstanceId; + protected String volumeGroupInstanceName; + protected String networkInstanceId; + protected String networkInstanceName; + + + public String getServiceInstanceId() { + return serviceInstanceId; + } + public void setServiceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + public String getServiceInstanceName() { + return serviceInstanceName; + } + public void setServiceInstanceName(String serviceInstanceName) { + this.serviceInstanceName = serviceInstanceName; + } + public String getVnfInstanceId() { + return vnfInstanceId; + } + public void setVnfInstanceId(String vnfInstanceId) { + this.vnfInstanceId = vnfInstanceId; + } + public String getVnfInstanceName() { + return vnfInstanceName; + } + public void setVnfInstanceName(String vnfInstanceName) { + this.vnfInstanceName = vnfInstanceName; + } + public String getVfModuleInstanceId() { + return vfModuleInstanceId; + } + public void setVfModuleInstanceId(String vfModuleInstanceId) { + this.vfModuleInstanceId = vfModuleInstanceId; + } + public String getVfModuleInstanceName() { + return vfModuleInstanceName; + } + public void setVfModuleInstanceName(String vfModuleInstanceName) { + this.vfModuleInstanceName = vfModuleInstanceName; + } + public String getVolumeGroupInstanceId() { + return volumeGroupInstanceId; + } + public void setVolumeGroupInstanceId(String volumeGroupInstanceId) { + this.volumeGroupInstanceId = volumeGroupInstanceId; + } + public String getVolumeGroupInstanceName() { + return volumeGroupInstanceName; + } + public void setVolumeGroupInstanceName(String volumeGroupInstanceName) { + this.volumeGroupInstanceName = volumeGroupInstanceName; + } + public String getNetworkInstanceId() { + return networkInstanceId; + } + public void setNetworkInstanceId(String networkInstanceId) { + this.networkInstanceId = networkInstanceId; + } + public String getNetworkInstanceName() { + return networkInstanceName; + } + public void setNetworkInstanceName(String networkInstanceName) { + this.networkInstanceName = networkInstanceName; + } + + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ModelInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ModelInfo.java new file mode 100644 index 0000000000..e361b1db32 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ModelInfo.java @@ -0,0 +1,84 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2016.03.30 at 02:48:23 PM CDT +// + + +package org.openecomp.mso.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +import org.openecomp.mso.apihandlerinfra.ModelType; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class ModelInfo { + + protected String modelCustomizationName; + protected String modelInvariantId; + protected ModelType modelType; + protected String modelNameVersionId; + protected String modelName; + protected String modelVersion; + + + public String getModelCustomizationName() { + return modelCustomizationName; + } + public void setModelCustomizationName(String modelCustomizationName) { + this.modelCustomizationName = modelCustomizationName; + } + public String getModelNameVersionId() { + return modelNameVersionId; + } + public void setModelNameVersionId(String modelNameVersionId) { + this.modelNameVersionId = modelNameVersionId; + } + public String getModelName() { + return modelName; + } + public void setModelName(String modelName) { + this.modelName = modelName; + } + public String getModelVersion() { + return modelVersion; + } + public void setModelVersion(String modelVersion) { + this.modelVersion = modelVersion; + } + public ModelType getModelType() { + return modelType; + } + public void setModelType(ModelType modelType) { + this.modelType = modelType; + } + public String getModelInvariantId() { + return modelInvariantId; + } + public void setModelInvariantId(String modelInvariantId) { + this.modelInvariantId = modelInvariantId; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/PolicyException.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/PolicyException.java new file mode 100644 index 0000000000..4d336c460a --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/PolicyException.java @@ -0,0 +1,59 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2016.03.30 at 02:48:23 PM CDT +// + + +package org.openecomp.mso.apihandlerinfra.serviceinstancebeans; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for policyException complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType name="policyException"> + * <complexContent> + * <extension base="{http://ecomp.att.com/mso/request/types/v1}exceptionType"> + * </extension> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "policyException") +public class PolicyException + extends ExceptionType +{ + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstance.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstance.java new file mode 100644 index 0000000000..90275f67c6 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstance.java @@ -0,0 +1,54 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class RelatedInstance { + + protected String instanceName; + protected String instanceId; + protected ModelInfo modelInfo; + + + public String getInstanceName() { + return instanceName; + } + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + public String getInstanceId() { + return instanceId; + } + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + public ModelInfo getModelInfo() { + return modelInfo; + } + public void setModelInfo(ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstanceList.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstanceList.java new file mode 100644 index 0000000000..1244d3b567 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RelatedInstanceList.java @@ -0,0 +1,37 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +public class RelatedInstanceList { + + protected RelatedInstance relatedInstance; + + public RelatedInstance getRelatedInstance() { + return relatedInstance; + } + + public void setRelatedInstance(RelatedInstance relatedInstance) { + this.relatedInstance = relatedInstance; + } + + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/Request.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/Request.java new file mode 100644 index 0000000000..7a88c2dd94 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/Request.java @@ -0,0 +1,85 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import java.util.Date; + +import org.codehaus.jackson.map.annotate.JsonRootName; +import org.codehaus.jackson.map.annotate.JsonSerialize; + +//@JsonRootName(value = "request") +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class Request { + + protected String requestId; + protected String startTime; + protected String requestScope; + protected String requestType; + //protected String requestDetails; + protected RequestDetails requestDetails; + protected InstanceReferences instanceReferences; + protected RequestStatus requestStatus; + + + public String getRequestId() { + return requestId; + } + public void setRequestId(String requestId) { + this.requestId = requestId; + } + public String getStartTime() { + return startTime; + } + public void setStartTime(String startTime) { + this.startTime = startTime; + } + public String getRequestScope() { + return requestScope; + } + public void setRequestScope(String requestScope) { + this.requestScope = requestScope; + } + public String getRequestType() { + return requestType; + } + public void setRequestType(String requestType) { + this.requestType = requestType; + } + public RequestStatus getRequestStatus() { + return requestStatus; + } + public void setRequestStatus(RequestStatus requestStatus) { + this.requestStatus = requestStatus; + } + public InstanceReferences getInstanceReferences() { + return instanceReferences; + } + public void setInstanceReferences(InstanceReferences instanceReferences) { + this.instanceReferences = instanceReferences; + } + public RequestDetails getRequestDetails() { + return requestDetails; + } + public void setRequestDetails(RequestDetails requestDetails) { + this.requestDetails = requestDetails; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestDetails.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestDetails.java new file mode 100644 index 0000000000..de6cbb7978 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestDetails.java @@ -0,0 +1,165 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonRootName; +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonRootName(value = "requestDetails") +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class RequestDetails { + + protected ModelInfo modelInfo; + protected RequestInfo requestInfo; + protected RelatedInstanceList[] relatedInstanceList; + protected SubscriberInfo subscriberInfo; + protected CloudConfiguration cloudConfiguration; + protected RequestParameters requestParameters; + + /** + * Gets the value of the serviceInfo property. + * + * @return + * possible object is + * {@link ModelInfo } + * + */ + public ModelInfo getModelInfo() { + return modelInfo; + } + + /** + * Sets the value of the serviceInfo property. + * + * @param value + * allowed object is + * {@link ModelInfo } + * + */ + public void setModelInfo(ModelInfo value) { + this.modelInfo = value; + } + + /** + * Gets the value of the requestInfo property. + * + * @return + * possible object is + * {@link RequestInfo } + * + */ + public RequestInfo getRequestInfo() { + return requestInfo; + } + + /** + * Sets the value of the requestInfo property. + * + * @param value + * allowed object is + * {@link RequestInfo } + * + */ + public void setRequestInfo(RequestInfo value) { + this.requestInfo = value; + } + + /** + * Gets the value of the subscriberInfo property. + * + * @return + * possible object is + * {@link SubscriberInfo } + * + */ + public SubscriberInfo getSubscriberInfo() { + return subscriberInfo; + } + + /** + * Sets the value of the subscriberInfo property. + * + * @param value + * allowed object is + * {@link SubscriberInfo } + * + */ + public void setSubscriberInfo(SubscriberInfo value) { + this.subscriberInfo = value; + } + + /** + * Gets the value of the cloudConfiguration property. + * + * @return + * possible object is + * {@link CloudConfiguration } + * + */ + public CloudConfiguration getCloudConfiguration() { + return cloudConfiguration; + } + + /** + * Sets the value of the cloudConfiguration property. + * + * @param value + * allowed object is + * {@link CloudConfiguration } + * + */ + public void setCloudConfiguration(CloudConfiguration value) { + this.cloudConfiguration = value; + } + + /** + * Gets the value of the requestParameters property. + * + * @return + * possible object is + * {@link RequestParameters } + * + */ + public RequestParameters getRequestParameters() { + return requestParameters; + } + + /** + * Sets the value of the requestParameters property. + * + * @param value + * allowed object is + * {@link RequestParameters } + * + */ + public void setRequestParameters(RequestParameters value) { + this.requestParameters = value; + } + + public RelatedInstanceList[] getRelatedInstanceList() { + return relatedInstanceList; + } + + public void setRelatedInstanceList(RelatedInstanceList[] relatedInstanceList) { + this.relatedInstanceList = relatedInstanceList; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestError.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestError.java new file mode 100644 index 0000000000..3a27238670 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestError.java @@ -0,0 +1,118 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2016.04.07 at 08:25:52 AM CDT +// + + +package org.openecomp.mso.apihandlerinfra.serviceinstancebeans; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <choice> + * <element name="policyException" type="{http://ecomp.att.com/mso/request/types/v1}policyException"/> + * <element name="serviceException" type="{http://ecomp.att.com/mso/request/types/v1}serviceException"/> + * </choice> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "policyException", + "serviceException" +}) +@XmlRootElement(name = "requestError") +public class RequestError { + + protected PolicyException policyException; + protected ServiceException serviceException; + + /** + * Gets the value of the policyException property. + * + * @return + * possible object is + * {@link PolicyException } + * + */ + public PolicyException getPolicyException() { + return policyException; + } + + /** + * Sets the value of the policyException property. + * + * @param value + * allowed object is + * {@link PolicyException } + * + */ + public void setPolicyException(PolicyException value) { + this.policyException = value; + } + + /** + * Gets the value of the serviceException property. + * + * @return + * possible object is + * {@link ServiceException } + * + */ + public ServiceException getServiceException() { + return serviceException; + } + + /** + * Sets the value of the serviceException property. + * + * @param value + * allowed object is + * {@link ServiceException } + * + */ + public void setServiceException(ServiceException value) { + this.serviceException = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestInfo.java new file mode 100644 index 0000000000..e5f3167c1f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestInfo.java @@ -0,0 +1,191 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class RequestInfo { + + protected String billingAccountNumber; + protected String callbackUrl; + protected String correlator; + protected String orderNumber; + protected String productFamilyId; + protected Integer orderVersion; + protected String source; + protected String instanceName; + protected boolean suppressRollback; + + /** + * Gets the value of the callbackUrl property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCallbackUrl() { + return callbackUrl; + } + + /** + * Sets the value of the callbackUrl property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCallbackUrl(String value) { + this.callbackUrl = value; + } + + /** + * Gets the value of the correlator property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCorrelator() { + return correlator; + } + + /** + * Sets the value of the correlator property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCorrelator(String value) { + this.correlator = value; + } + + /** + * Gets the value of the orderNumber property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getOrderNumber() { + return orderNumber; + } + + /** + * Sets the value of the orderNumber property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOrderNumber(String value) { + this.orderNumber = value; + } + + /** + * Gets the value of the orderVersion property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getOrderVersion() { + return orderVersion; + } + + /** + * Sets the value of the orderVersion property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setOrderVersion(Integer value) { + this.orderVersion = value; + } + + /** + * Gets the value of the source property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * Sets the value of the source property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + + public String getInstanceName() { + return instanceName; + } + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + public String getBillingAccountNumber() { + return billingAccountNumber; + } + + public void setBillingAccountNumber(String billingAccountNumber) { + this.billingAccountNumber = billingAccountNumber; + } + + public String getProductFamilyId() { + return productFamilyId; + } + + public void setProductFamilyId(String productFamilyId) { + this.productFamilyId = productFamilyId; + } + + public boolean isSuppressRollback() { + return suppressRollback; + } + + public void setSuppressRollback(boolean suppressRollback) { + this.suppressRollback = suppressRollback; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestList.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestList.java new file mode 100644 index 0000000000..dba82a80fc --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestList.java @@ -0,0 +1,38 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import java.util.List; + + +public class RequestList { + + protected Request request; + + public Request getRequest() { + return request; + } + + public void setRequest(Request request) { + this.request = request; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestParameters.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestParameters.java new file mode 100644 index 0000000000..1a8204055e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestParameters.java @@ -0,0 +1,54 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class RequestParameters { + + private String subscriptionServiceType; + private List<Map<String, String>> userParams = new ArrayList<>(); + + + public String getSubscriptionServiceType() { + return subscriptionServiceType; + } + + public void setSubscriptionServiceType(String subscriptionServiceType) { + this.subscriptionServiceType = subscriptionServiceType; + } + + public List<Map<String, String>> getUserParams() { + return userParams; + } + + public void setUserParams(List<Map<String, String>> userParams) { + this.userParams = userParams; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestReferences.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestReferences.java new file mode 100644 index 0000000000..c2e3ecfbbd --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestReferences.java @@ -0,0 +1,43 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +public class RequestReferences { + + String requestId; + String instanceId; + + + public String getRequestId() { + return requestId; + } + public void setRequestId(String requestId) { + this.requestId = requestId; + } + public String getInstanceId() { + return instanceId; + } + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestStatus.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestStatus.java new file mode 100644 index 0000000000..a9bf5e873f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/RequestStatus.java @@ -0,0 +1,61 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import java.util.Date; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class RequestStatus { + + protected String requestState; + protected String statusMessage; + protected Integer percentProgress; + protected String finishTime; + + + public String getRequestState() { + return requestState; + } + public void setRequestState(String requestState) { + this.requestState = requestState; + } + public String getStatusMessage() { + return statusMessage; + } + public void setStatusMessage(String statusMessage) { + this.statusMessage = statusMessage; + } + public Integer getPercentProgress() { + return percentProgress; + } + public void setPercentProgress(Integer percentProgress) { + this.percentProgress = percentProgress; + } + public String getFinishTime() { + return finishTime; + } + public void setFinishTime(String finishTime) { + this.finishTime = finishTime; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceException.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceException.java new file mode 100644 index 0000000000..f207e96cb5 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceException.java @@ -0,0 +1,59 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2016.03.30 at 02:48:23 PM CDT +// + + +package org.openecomp.mso.apihandlerinfra.serviceinstancebeans; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for serviceException complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType name="serviceException"> + * <complexContent> + * <extension base="{http://ecomp.att.com/mso/request/types/v1}exceptionType"> + * </extension> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "serviceException") +public class ServiceException + extends ExceptionType +{ + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesRequest.java new file mode 100644 index 0000000000..30903b9649 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesRequest.java @@ -0,0 +1,83 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + + + +public class ServiceInstancesRequest { + + private RequestDetails requestDetails; + private String serviceInstanceId; + private String vnfInstanceId; + private String networkInstanceId; + private String volumeGroupInstanceId; + private String vfModuleInstanceId; + + public RequestDetails getRequestDetails() { + return requestDetails; + } + + public void setRequestDetails(RequestDetails requestDetails) { + this.requestDetails = requestDetails; + } + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + public void setServiceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + public String getVnfInstanceId() { + return vnfInstanceId; + } + + public void setVnfInstanceId(String vnfInstanceId) { + this.vnfInstanceId = vnfInstanceId; + } + + public String getNetworkInstanceId() { + return networkInstanceId; + } + + public void setNetworkInstanceId(String networkInstanceId) { + this.networkInstanceId = networkInstanceId; + } + + public String getVolumeGroupInstanceId() { + return volumeGroupInstanceId; + } + + public void setVolumeGroupInstanceId(String volumeGroupInstanceId) { + this.volumeGroupInstanceId = volumeGroupInstanceId; + } + + public String getVfModuleInstanceId() { + return vfModuleInstanceId; + } + + public void setVfModuleInstanceId(String vfModuleInstanceId) { + this.vfModuleInstanceId = vfModuleInstanceId; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesResponse.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesResponse.java new file mode 100644 index 0000000000..b5be488367 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/ServiceInstancesResponse.java @@ -0,0 +1,36 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +public class ServiceInstancesResponse { + + RequestReferences requestReferences; + + public RequestReferences getRequestReferences() { + return requestReferences; + } + + public void setRequestReferences(RequestReferences requestReferences) { + this.requestReferences = requestReferences; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/SubscriberInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/SubscriberInfo.java new file mode 100644 index 0000000000..bf7a044b28 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/serviceinstancebeans/SubscriberInfo.java @@ -0,0 +1,79 @@ +/*- + * ============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.apihandlerinfra.serviceinstancebeans; + +import org.codehaus.jackson.map.annotate.JsonSerialize; + +@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) +public class SubscriberInfo { + + protected String globalSubscriberId; + protected String subscriberName; + + /** + * Gets the value of the globalSubscriberId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getGlobalSubscriberId() { + return globalSubscriberId; + } + + /** + * Sets the value of the globalSubscriberId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setGlobalSubscriberId(String value) { + this.globalSubscriberId = value; + } + + /** + * Gets the value of the subscriberName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSubscriberName() { + return subscriberName; + } + + /** + * Sets the value of the subscriberName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSubscriberName(String value) { + this.subscriberName = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ActionType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ActionType.java new file mode 100644 index 0000000000..3062dfcb96 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ActionType.java @@ -0,0 +1,80 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for action-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="action-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="CREATE"/> + * <enumeration value="SETSTATUS"/> + * <enumeration value="REPLACE"/> + * <enumeration value="UPDATE"/> + * <enumeration value="DELETE"/> + * <enumeration value="CREATE_VF_MODULE"/> + * <enumeration value="UPDATE_VF_MODULE"/> + * <enumeration value="DELETE_VF_MODULE"/> + * <enumeration value="NOT_PROVIDED"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "action-type") +@XmlEnum +public enum ActionType { + + CREATE, + SETSTATUS, + REPLACE, + UPDATE, + DELETE, + CREATE_VF_MODULE, + UPDATE_VF_MODULE, + DELETE_VF_MODULE, + NOT_PROVIDED; + + public String value() { + return name(); + } + + public static ActionType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ObjectFactory.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ObjectFactory.java new file mode 100644 index 0000000000..b1c000f348 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/ObjectFactory.java @@ -0,0 +1,150 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.openecomp.mso.apihandlerinfra.vnfbeans1 package. + * <p>An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _VnfParams_QNAME = new QName("http://ecomp.att.com/mso/infra/vnf-request/v1", "vnf-params"); + private final static QName _NetworkParams_QNAME = new QName("http://ecomp.att.com/mso/infra/vnf-request/v1", "network-params"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.openecomp.mso.apihandlerinfra.vnfbeans1 + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link VnfInputs } + * + */ + public VnfInputs createVnfInputs() { + return new VnfInputs(); + } + + /** + * Create an instance of {@link RequestInfo } + * + */ + public RequestInfo createRequestInfo() { + return new RequestInfo(); + } + + /** + * Create an instance of {@link VnfOutputs } + * + */ + public VnfOutputs createVnfOutputs() { + return new VnfOutputs(); + } + + /** + * Create an instance of {@link VnfType } + * + */ + public VnfType createVnfType() { + return new VnfType(); + } + + /** + * Create an instance of {@link VnfRequest } + * + */ + public VnfRequest createVnfRequest() { + return new VnfRequest(); + } + + + /** + * Create an instance of {@link VnfTypes } + * + */ + public VnfTypes createVnfTypes() { + return new VnfTypes(); + } + + /** + * Create an instance of {@link VnfRequests } + * + */ + public VnfRequests createVnfRequests() { + return new VnfRequests(); + } + + /** + * Create an instance of {@link VfModuleModelName } + * + */ + public VfModuleModelName createVfModuleModelName() { + return new VfModuleModelName(); + } + + /** + * Create an instance of {@link VfModuleModelNames } + * + */ + public VfModuleModelNames createVfModuleModelNames() { + return new VfModuleModelNames(); + } + + + + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Object }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://ecomp.att.com/mso/infra/vnf-request/v1", name = "vnf-params") + public JAXBElement<Object> createVnfParams(Object value) { + return new JAXBElement<Object>(_VnfParams_QNAME, Object.class, null, value); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestInfo.java new file mode 100644 index 0000000000..cb8973b83e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestInfo.java @@ -0,0 +1,286 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="request-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="action" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}action-type"/> + * <element name="request-status" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}request-status-type" minOccurs="0"/> + * <element name="status-message" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="progress" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="start-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="end-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="source" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestId", + "action", + "requestStatus", + "statusMessage", + "progress", + "startTime", + "endTime", + "source" +}) +@XmlRootElement(name = "request-info") +public class RequestInfo { + + @XmlElement(name = "request-id") + protected String requestId; + @XmlElement(required = true) + protected ActionType action; + @XmlElement(name = "request-status") + protected RequestStatusType requestStatus; + @XmlElement(name = "status-message") + protected String statusMessage; + protected Integer progress; + @XmlElement(name = "start-time") + protected String startTime; + @XmlElement(name = "end-time") + protected String endTime; + protected String source; + + /** + * Gets the value of the requestId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRequestId() { + return requestId; + } + + /** + * Sets the value of the requestId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRequestId(String value) { + this.requestId = value; + } + + /** + * Gets the value of the action property. + * + * @return + * possible object is + * {@link ActionType } + * + */ + public ActionType getAction() { + return action; + } + + /** + * Sets the value of the action property. + * + * @param value + * allowed object is + * {@link ActionType } + * + */ + public void setAction(ActionType value) { + this.action = value; + } + + /** + * Gets the value of the requestStatus property. + * + * @return + * possible object is + * {@link RequestStatusType } + * + */ + public RequestStatusType getRequestStatus() { + return requestStatus; + } + + /** + * Sets the value of the requestStatus property. + * + * @param value + * allowed object is + * {@link RequestStatusType } + * + */ + public void setRequestStatus(RequestStatusType value) { + this.requestStatus = value; + } + + /** + * Gets the value of the statusMessage property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStatusMessage() { + return statusMessage; + } + + /** + * Sets the value of the statusMessage property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStatusMessage(String value) { + this.statusMessage = value; + } + + /** + * Gets the value of the progress property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getProgress() { + return progress; + } + + /** + * Sets the value of the progress property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setProgress(Integer value) { + this.progress = value; + } + + /** + * Gets the value of the startTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStartTime() { + return startTime; + } + + /** + * Sets the value of the startTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStartTime(String value) { + this.startTime = value; + } + + /** + * Gets the value of the endTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEndTime() { + return endTime; + } + + /** + * Sets the value of the endTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEndTime(String value) { + this.endTime = value; + } + + /** + * Gets the value of the source property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * Sets the value of the source property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestStatusType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestStatusType.java new file mode 100644 index 0000000000..4698c785a9 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/RequestStatusType.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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for request-status-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="request-status-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="COMPLETE"/> + * <enumeration value="FAILED"/> + * <enumeration value="IN_PROGRESS"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "request-status-type") +@XmlEnum +public enum RequestStatusType { + + COMPLETE, + FAILED, + IN_PROGRESS, + PENDING, + TIMEOUT; + + public String value() { + return name(); + } + + public static RequestStatusType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelName.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelName.java new file mode 100644 index 0000000000..c9876487d6 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelName.java @@ -0,0 +1,261 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="model-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="model-version" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="model-invariant-uuid" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="is-base" type="{http://www.w3.org/2001/XMLSchema}Boolean"/> + * <element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="description" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="asdc-service-model-version" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "modelName", + "modelVersion", + "modelInvariantUuid", + "isBase", + "id", + "description", + "asdcServiceModelVersion" +}) +@XmlRootElement(name = "vf-module-model-name") +public class VfModuleModelName { + + @XmlElement(name="model-name", required = true) + protected String modelName; + @XmlElement(name="model-version", required = true) + protected String modelVersion; + @XmlElement(name="model-invariant-uuid", required = true) + protected String modelInvariantUuid; + @XmlElement(name="is-base", required = true) + protected Boolean isBase; + @XmlElement(name="id", required = true) + protected String id; + @XmlElement(name="description", required = true) + protected String description; + @XmlElement(name="asdc-service-model-version", required = true) + protected String asdcServiceModelVersion; + + /** + * Gets the value of the modelName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getModelName() { + return modelName; + } + + /** + * Sets the value of the modelName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setModelName(String value) { + this.modelName = value; + } + + /** + * Gets the value of the modelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getModelVersion() { + return modelVersion; + } + + /** + * Sets the value of the modelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setModelVersion(String value) { + this.modelVersion = value; + } + + /** + * Gets the value of the modelInvariantUuid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getModelInvariantUuid() { + return modelInvariantUuid; + } + + /** + * Sets the value of the modelInvariantUuid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setModelInvariantUuid(String value) { + this.modelInvariantUuid = value; + } + + /** + * Gets the value of the isBase property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getIsBase() { + return isBase; + } + + /** + * Sets the value of the isBase property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsBase(Boolean value) { + this.isBase = value; + } + + /** + * Gets the value of the id property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the value of the description property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDescription() { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDescription(String value) { + this.description = value; + } + + /** + * Gets the value of the asdcServiceModelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAsdcServiceModelVersion() { + return asdcServiceModelVersion; + } + + /** + * Sets the value of the asdcServiceModelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAsdcServiceModelVersion(String value) { + this.asdcServiceModelVersion = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelNames.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelNames.java new file mode 100644 index 0000000000..790a5e80ef --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VfModuleModelNames.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vf-module-model-name" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vfModuleModelName" +}) +@XmlRootElement(name = "vf-module-model-names") +public class VfModuleModelNames { + + @XmlElement(name = "vf-module-model-name") + protected List<VfModuleModelName> vfModuleModelName; + + /** + * Gets the value of the vfModuleModelName property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfType property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getVfModuleModelName().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link VfModuleModelName } + * + * + */ + public List<VfModuleModelName> getVfModuleModelName() { + if (vfModuleModelName == null) { + vfModuleModelName = new ArrayList<VfModuleModelName>(); + } + return this.vfModuleModelName; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfInputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfInputs.java new file mode 100644 index 0000000000..bfc0d84e43 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfInputs.java @@ -0,0 +1,689 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="vnf-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vnf-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vnf-type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-model-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="asdc-service-model-version" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="service-instance-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="backout-on-failure" type="{http://www.w3.org/2001/XMLSchema}Boolean"/> + * <choice> + * <element name="service-type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="service-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <choice> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="aic-cloud-region" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <element name="tenant-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="prov-status" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="volume-group-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="persona-model-id" type="{http://www.w3.org/2001/XMLSchema}string"/ minOccurs="0"> + * <element name="persona-model-version" type="{http://www.w3.org/2001/XMLSchema}string"/ minOccurs="0"> + * <element name="is-base-vf-module" type="{http://www.w3.org/2001/XMLSchema}Boolean"/ minOccurs="0"> + * <element name="vnf-persona-model-id" type="{http://www.w3.org/2001/XMLSchema}string"/ minOccurs="0"> + * <element name="vnf-persona-model-version" type="{http://www.w3.org/2001/XMLSchema}string"/ minOccurs="0"> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfId", + "vfModuleId", + "vnfName", + "vfModuleName", + "vnfType", + "vfModuleModelName", + "asdcServiceModelVersion", + "serviceInstanceId", + "backoutOnFailure", + "serviceType", + "serviceId", + "aicNodeClli", + "aicCloudRegion", + "tenantId", + "provStatus", + "volumeGroupName", + "volumeGroupId", + // BEGIN - elements valid only on BPMN interface + "personaModelId", + "personaModelVersion", + "isBaseVfModule", + "vnfPersonaModelId", + "vnfPersonaModelVersion" + // END - elements valid only on BPMN interface +}) +@XmlRootElement(name = "vnf-inputs") +public class VnfInputs { + + @XmlElement(name = "vnf-id") + protected String vnfId; + @XmlElement(name = "vf-module-id") + protected String vfModuleId; + @XmlElement(name = "vnf-name") + protected String vnfName; + @XmlElement(name = "vf-module-name") + protected String vfModuleName; + @XmlElement(name = "vnf-type") + protected String vnfType; + @XmlElement(name = "vf-module-model-name") + protected String vfModuleModelName; + @XmlElement(name = "asdc-service-model-version") + protected String asdcServiceModelVersion; + @XmlElement(name = "service-instance-id") + protected String serviceInstanceId; + @XmlElement(name = "backout-on-failure") + protected Boolean backoutOnFailure; + @XmlElement(name = "service-type") + protected String serviceType; + @XmlElement(name = "service-id") + protected String serviceId; + @XmlElement(name = "aic-node-clli") + protected String aicNodeClli; + @XmlElement(name = "aic-cloud-region") + protected String aicCloudRegion; + @XmlElement(name = "tenant-id", required = true) + protected String tenantId; + @XmlElement(name = "prov-status") + protected String provStatus; + @XmlElement(name = "volume-group-name") + protected String volumeGroupName; + @XmlElement(name = "volume-group-id") + protected String volumeGroupId; + @XmlElement(name = "persona-model-id") + protected String personaModelId; + @XmlElement(name = "persona-model-version") + protected String personaModelVersion; + @XmlElement(name = "is-base-vf-module") + protected Boolean isBaseVfModule; + @XmlElement(name = "vnf-persona-model-id") + protected String vnfPersonaModelId; + @XmlElement(name = "vnf-persona-model-version") + protected String vnfPersonaModelVersion; + + /** + * Gets the value of the vnfId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfId() { + return vnfId; + } + + /** + * Sets the value of the vnfId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfId(String value) { + this.vnfId = value; + } + + /** + * Gets the value of the vnfName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfName() { + return vnfName; + } + + /** + * Sets the value of the vnfName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfName(String value) { + this.vnfName = value; + } + + /** + * Gets the value of the vnfType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfType() { + return vnfType; + } + + /** + * Sets the value of the vnfType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfType(String value) { + this.vnfType = value; + } + + /** + * Gets the value of the serviceInstanceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceInstanceId() { + return serviceInstanceId; + } + + /** + * Sets the value of the serviceInstanceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceInstanceId(String value) { + this.serviceInstanceId = value; + } + + /** + * Gets the value of the serviceType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceType() { + return serviceType; + } + + /** + * Sets the value of the serviceType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceType(String value) { + this.serviceType = value; + } + + /** + * Gets the value of the serviceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceId() { + return serviceId; + } + + /** + * Sets the value of the serviceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceId (String value) { + this.serviceId = value; + } + + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the aicCloudRegion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicCloudRegion() { + return aicCloudRegion; + } + + /** + * Sets the value of the aicCloudRegion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicCloudRegion(String value) { + this.aicCloudRegion = value; + } + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + /** + * Gets the value of the provStatus property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getProvStatus() { + return provStatus; + } + + /** + * Sets the value of the provStatus property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setProvStatus(String value) { + this.provStatus = value; + } + + /** + * Gets the value of the volumeGroupName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupName() { + return volumeGroupName; + } + + /** + * Sets the value of the volumeGroupName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupName(String value) { + this.volumeGroupName = value; + } + + /** + * Gets the value of the volumeGroupId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupId() { + return volumeGroupId; + } + + /** + * Sets the value of the volumeGroupId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupId(String value) { + this.volumeGroupId = value; + } + + /** + * Gets the value of the vfModuleId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleId() { + return vfModuleId; + } + + /** + * Sets the value of the vfModuleId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleId(String value) { + this.vfModuleId = value; + } + + /** + * Gets the value of the vfModuleName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleName() { + return vfModuleName; + } + + /** + * Sets the value of the vfModuleName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleName(String value) { + this.vfModuleName = value; + } + + /** + * Gets the value of the vfModuleModelName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleModelName() { + return vfModuleModelName; + } + + /** + * Sets the value of the vfModuleModelName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleModelName(String value) { + this.vfModuleModelName = value; + } + + /** + * Gets the value of the asdcServiceModelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAsdcServiceModelVersion() { + return asdcServiceModelVersion; + } + + /** + * Sets the value of the asdcServiceModelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAsdcServiceModelVersion(String value) { + this.asdcServiceModelVersion = value; + } + + /** + * Gets the value of the backoutOnFailure property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getBackoutOnFailure() { + return backoutOnFailure; + } + + /** + * Sets the value of the backoutOnFailure property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBackoutOnFailure(Boolean value) { + this.backoutOnFailure = value; + } + + /** + * Gets the value of the personaModelId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPersonaModelId() { + return personaModelId; + } + + /** + * Sets the value of the personaModelId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPersonaModelId(String value) { + this.personaModelId = value; + } + + /** + * Gets the value of the personaModelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPersonaModelVersion() { + return personaModelVersion; + } + + /** + * Sets the value of the personaModelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPersonaModelVersion(String value) { + this.personaModelVersion = value; + } + + + /** + * Gets the value of the isBaseVfModule property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getIsBaseVfModule() { + return isBaseVfModule; + } + + /** + * Sets the value of the isBaseVfModule property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsBaseVfModule(Boolean value) { + this.isBaseVfModule = value; + } + + /** + * Gets the value of the vnfPersonaModelId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfPersonaModelId() { + return vnfPersonaModelId; + } + + /** + * Sets the value of the vnfPersonaModelId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfPersonaModelId(String value) { + this.vnfPersonaModelId = value; + } + + /** + * Gets the value of the vnfPersonaModelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfPersonaModelVersion() { + return vnfPersonaModelVersion; + } + + /** + * Sets the value of the vnfPersonaModelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfPersonaModelVersion(String value) { + this.vnfPersonaModelVersion = value; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfOutputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfOutputs.java new file mode 100644 index 0000000000..acb2a0a290 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfOutputs.java @@ -0,0 +1,291 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="vnf-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vnf-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="tenant-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="volume-group-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfId", + "vfModuleId", + "vnfName", + "vfModuleName", + "aicNodeClli", + "tenantId", + "volumeGroupName", + "volumeGroupId" +}) +@XmlRootElement(name = "vnf-outputs") +public class VnfOutputs { + + @XmlElement(name = "vnf-id", required = true) + protected String vnfId; + @XmlElement(name = "vf-module-id") + protected String vfModuleId; + @XmlElement(name = "vnf-name", required = true) + protected String vnfName; + @XmlElement(name = "vf-module-name", required = true) + protected String vfModuleName; + @XmlElement(name = "aic-node-clli", required = true) + protected String aicNodeClli; + @XmlElement(name = "tenant-id", required = true) + protected String tenantId; + @XmlElement(name = "volume-group-name") + protected String volumeGroupName; + @XmlElement(name = "volume-group-id") + protected String volumeGroupId; + + /** + * Gets the value of the vnfId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfId() { + return vnfId; + } + + /** + * Sets the value of the vnfId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfId(String value) { + this.vnfId = value; + } + + /** + * Gets the value of the vfModuleId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleId() { + return vfModuleId; + } + + /** + * Sets the value of the vfModuleId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleId(String value) { + this.vfModuleId = value; + } + + + + /** + * Gets the value of the vnfName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfName() { + return vnfName; + } + + /** + * Sets the value of the vnfName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfName(String value) { + this.vnfName = value; + } + + /** + * Gets the value of the vfModuleName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleName() { + return vfModuleName; + } + + /** + * Sets the value of the vfModuleName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleName(String value) { + this.vfModuleName = value; + } + + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + /** + * Gets the value of the volumeGroupName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupName() { + return volumeGroupName; + } + + /** + * Sets the value of the volumeGroupName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupName(String value) { + this.volumeGroupName = value; + } + + /** + * Gets the value of the volumeGroupId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupId() { + return volumeGroupId; + } + + /** + * Sets the value of the volumeGroupId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupId(String value) { + this.volumeGroupId = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequest.java new file mode 100644 index 0000000000..bd210a5aca --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequest.java @@ -0,0 +1,179 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}request-info"/> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-inputs"/> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-params" minOccurs="0"/> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-outputs" minOccurs="0"/> + * </sequence> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestInfo", + "vnfInputs", + "vnfParams", + "vnfOutputs" +}) +@XmlRootElement(name = "vnf-request") +public class VnfRequest { + + @XmlElement(name = "request-info", required = true) + protected RequestInfo requestInfo; + @XmlElement(name = "vnf-inputs") + protected VnfInputs vnfInputs; + @XmlElement(name = "vnf-params") + protected Object vnfParams; + @XmlElement(name = "vnf-outputs") + protected VnfOutputs vnfOutputs; + + + /** + * Gets the value of the requestInfo property. + * + * @return + * possible object is + * {@link RequestInfo } + * + */ + public RequestInfo getRequestInfo() { + return requestInfo; + } + + /** + * Sets the value of the requestInfo property. + * + * @param value + * allowed object is + * {@link RequestInfo } + * + */ + public void setRequestInfo(RequestInfo value) { + this.requestInfo = value; + } + + /** + * Gets the value of the vnfInputs property. + * + * @return + * possible object is + * {@link VnfInputs } + * + */ + public VnfInputs getVnfInputs() { + return vnfInputs; + } + + /** + * Sets the value of the vnfInputs property. + * + * @param value + * allowed object is + * {@link VnfInputs } + * + */ + public void setVnfInputs(VnfInputs value) { + this.vnfInputs = value; + } + + /** + * Gets the value of the vnfParams property. + * + * @return + * possible object is + * {@link Object } + * + */ + public Object getVnfParams() { + return vnfParams; + } + + /** + * Sets the value of the vnfParams property. + * + * @param value + * allowed object is + * {@link Object } + * + */ + public void setVnfParams(Object value) { + this.vnfParams = value; + } + + /** + * Gets the value of the vnfOutputs property. + * + * @return + * possible object is + * {@link VnfOutputs } + * + */ + public VnfOutputs getVnfOutputs() { + return vnfOutputs; + } + + /** + * Sets the value of the vnfOutputs property. + * + * @param value + * allowed object is + * {@link VnfOutputs } + * + */ + public void setVnfOutputs(VnfOutputs value) { + this.vnfOutputs = value; + } + + } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequests.java new file mode 100644 index 0000000000..65aa9c1d99 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfRequests.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-request" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfRequest" +}) +@XmlRootElement(name = "vnf-requests") +public class VnfRequests { + + @XmlElement(name = "vnf-request") + protected List<VnfRequest> vnfRequest; + + /** + * Gets the value of the vnfRequest property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfRequest property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getVnfRequest().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link VnfRequest } + * + * + */ + public List<VnfRequest> getVnfRequest() { + if (vnfRequest == null) { + vnfRequest = new ArrayList<VnfRequest>(); + } + return this.vnfRequest; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfType.java new file mode 100644 index 0000000000..9ddd4ca6db --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfType.java @@ -0,0 +1,148 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="description" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "type", + "id", + "description" +}) +@XmlRootElement(name = "vnf-type") +public class VnfType { + + @XmlElement(required = true) + protected String type; + @XmlElement(required = true) + protected String id; + @XmlElement(required = true) + protected String description; + + /** + * Gets the value of the type property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getType() { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setType(String value) { + this.type = value; + } + + /** + * Gets the value of the id property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the value of the description property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDescription() { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDescription(String value) { + this.description = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfTypes.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfTypes.java new file mode 100644 index 0000000000..473695c179 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/VnfTypes.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.vnfbeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/vnf-request/v1}vnf-type" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfType" +}) +@XmlRootElement(name = "vnf-types") +public class VnfTypes { + + @XmlElement(name = "vnf-type") + protected List<VnfType> vnfType; + + /** + * Gets the value of the vnfType property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfType property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getVnfType().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link VnfType } + * + * + */ + public List<VnfType> getVnfType() { + if (vnfType == null) { + vnfType = new ArrayList<VnfType>(); + } + return this.vnfType; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/package-info.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/package-info.java new file mode 100644 index 0000000000..700d7a9064 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/vnfbeans/package-info.java @@ -0,0 +1,30 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://ecomp.att.com/mso/infra/vnf-request/v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package org.openecomp.mso.apihandlerinfra.vnfbeans; + diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ActionType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ActionType.java new file mode 100644 index 0000000000..9e2c3ac525 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ActionType.java @@ -0,0 +1,76 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for action-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="action-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="CREATE"/> + * <enumeration value="UPDATE"/> + * <enumeration value="DELETE"/> + * <enumeration value="CREATE_VF_MODULE_VOL"/> + * <enumeration value="UPDATE_VF_MODULE_VOL"/> + * <enumeration value="DELETE_VF_MODULE_VOL"/> + * <enumeration value="NOT_PROVIDED"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "action-type") +@XmlEnum +public enum ActionType { + + CREATE, + UPDATE, + DELETE, + CREATE_VF_MODULE_VOL, + UPDATE_VF_MODULE_VOL, + DELETE_VF_MODULE_VOL, + NOT_PROVIDED; + + public String value() { + return name(); + } + + public static ActionType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ObjectFactory.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ObjectFactory.java new file mode 100644 index 0000000000..24b620eb6b --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/ObjectFactory.java @@ -0,0 +1,115 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.openecomp.mso.apihandlerinfra.vnfbeans1 package. + * <p>An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _VolumeParams_QNAME = new QName("http://ecomp.att.com/mso/infra/volume-request/v1", "volume-params"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.openecomp.mso.apihandlerinfra.vnfbeans1 + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link RequestInfo } + * + */ + public RequestInfo createRequestInfo() { + return new RequestInfo(); + } + + /** + * Create an instance of {@link VolumeRequest } + * + */ + public VolumeRequest createVolumeRequest() { + return new VolumeRequest(); + } + + /** + * Create an instance of {@link VolumeInputs } + * + */ + public VolumeInputs createVolumeInputs() { + return new VolumeInputs(); + } + + /** + * Create an instance of {@link VolumeOutputs } + * + */ + public VolumeOutputs createVolumeOutputs() { + return new VolumeOutputs(); + } + + /** + * Create an instance of {@link VolumeRequests } + * + */ + public VolumeRequests createVolumeRequests() { + return new VolumeRequests(); + } + + + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Object }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://ecomp.att.com/mso/infra/volume-request/v1", name = "volume-params") + public JAXBElement<Object> createVolumeParams(Object value) { + return new JAXBElement<Object>(_VolumeParams_QNAME, Object.class, null, value); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestInfo.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestInfo.java new file mode 100644 index 0000000000..40e809c9fa --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestInfo.java @@ -0,0 +1,286 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="request-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="action" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}action-type"/> + * <element name="request-status" type="{http://ecomp.att.com/mso/infra/vnf-request/v1}request-status-type" minOccurs="0"/> + * <element name="status-message" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="progress" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="start-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="end-time" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="source" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestId", + "action", + "requestStatus", + "statusMessage", + "progress", + "startTime", + "endTime", + "source" +}) +@XmlRootElement(name = "request-info") +public class RequestInfo { + + @XmlElement(name = "request-id") + protected String requestId; + @XmlElement(required = true) + protected ActionType action; + @XmlElement(name = "request-status") + protected RequestStatusType requestStatus; + @XmlElement(name = "status-message") + protected String statusMessage; + protected Integer progress; + @XmlElement(name = "start-time") + protected String startTime; + @XmlElement(name = "end-time") + protected String endTime; + protected String source; + + /** + * Gets the value of the requestId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRequestId() { + return requestId; + } + + /** + * Sets the value of the requestId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRequestId(String value) { + this.requestId = value; + } + + /** + * Gets the value of the action property. + * + * @return + * possible object is + * {@link ActionType } + * + */ + public ActionType getAction() { + return action; + } + + /** + * Sets the value of the action property. + * + * @param value + * allowed object is + * {@link ActionType } + * + */ + public void setAction(ActionType value) { + this.action = value; + } + + /** + * Gets the value of the requestStatus property. + * + * @return + * possible object is + * {@link RequestStatusType } + * + */ + public RequestStatusType getRequestStatus() { + return requestStatus; + } + + /** + * Sets the value of the requestStatus property. + * + * @param value + * allowed object is + * {@link RequestStatusType } + * + */ + public void setRequestStatus(RequestStatusType value) { + this.requestStatus = value; + } + + /** + * Gets the value of the statusMessage property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStatusMessage() { + return statusMessage; + } + + /** + * Sets the value of the statusMessage property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStatusMessage(String value) { + this.statusMessage = value; + } + + /** + * Gets the value of the progress property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getProgress() { + return progress; + } + + /** + * Sets the value of the progress property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setProgress(Integer value) { + this.progress = value; + } + + /** + * Gets the value of the startTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStartTime() { + return startTime; + } + + /** + * Sets the value of the startTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStartTime(String value) { + this.startTime = value; + } + + /** + * Gets the value of the endTime property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEndTime() { + return endTime; + } + + /** + * Sets the value of the endTime property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEndTime(String value) { + this.endTime = value; + } + + /** + * Gets the value of the source property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * Sets the value of the source property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestStatusType.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestStatusType.java new file mode 100644 index 0000000000..dfa36894a7 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/RequestStatusType.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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for request-status-type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="request-status-type"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="COMPLETE"/> + * <enumeration value="FAILED"/> + * <enumeration value="IN_PROGRESS"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "request-status-type") +@XmlEnum +public enum RequestStatusType { + + COMPLETE, + FAILED, + IN_PROGRESS, + PENDING, + TIMEOUT; + + public String value() { + return name(); + } + + public static RequestStatusType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeInputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeInputs.java new file mode 100644 index 0000000000..55acf3270e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeInputs.java @@ -0,0 +1,435 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="vnf-type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vf-module-model-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="asdc-service-model-version" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vnf-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="vnf-type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="service-instance-id" type="{http://www.w3.org/2001/XMLSchema}Boolean"/> + * <choice> + * <element name="service-type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="service-id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <choice> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="aic-cloud-region" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </choice> + * <element name="tenant-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfType", + "vnfId", + "vfModuleModelName", + "asdcServiceModelVersion", + "serviceInstanceId", + "backoutOnFailure", + "serviceType", + "serviceId", + "aicNodeClli", + "aicCloudRegion", + "tenantId", + "volumeGroupName", + "volumeGroupId" +}) +@XmlRootElement(name = "volume-inputs") +public class VolumeInputs { + @XmlElement(name = "vnf-type", required = true) + protected String vnfType; + @XmlElement(name = "vnf-id") + protected String vnfId; + @XmlElement(name = "vf-module-model-name") + protected String vfModuleModelName; + @XmlElement(name = "asdc-service-model-version") + protected String asdcServiceModelVersion; + @XmlElement(name = "service-instance-id", required = true) + protected String serviceInstanceId; + @XmlElement(name = "backout-on-failure") + protected Boolean backoutOnFailure; + @XmlElement(name = "service-type") + protected String serviceType; + @XmlElement(name = "service-id") + protected String serviceId; + @XmlElement(name = "aic-node-clli", required = true) + protected String aicNodeClli; + @XmlElement(name = "aic-cloud-region") + protected String aicCloudRegion; + @XmlElement(name = "tenant-id", required = true) + protected String tenantId; + @XmlElement(name = "volume-group-name") + protected String volumeGroupName; + @XmlElement(name = "volume-group-id") + protected String volumeGroupId; + + /** + * Gets the value of the volumeGroupId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupId() { + return volumeGroupId; + } + + /** + * Sets the value of the volumeGroupId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupId(String value) { + this.volumeGroupId = value; + } + + /** + * Gets the value of the volumeGroupName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupName() { + return volumeGroupName; + } + + /** + * Sets the value of the volumeGroupName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupName(String value) { + this.volumeGroupName = value; + } + + /** + * Gets the value of the vnfType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfType() { + return vnfType; + } + + /** + * Sets the value of the vnfType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfType(String value) { + this.vnfType = value; + } + + /** + * Gets the value of the vnfId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfId() { + return vnfId; + } + + /** + * Sets the value of the vnfId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfId(String value) { + this.vnfId = value; + } + + /** + * Gets the value of the serviceInstanceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceInstanceId() { + return serviceInstanceId; + } + + /** + * Sets the value of the serviceInstanceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceInstanceId(String value) { + this.serviceInstanceId = value; + } + + /** + * Gets the value of the serviceType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceType() { + return serviceType; + } + + /** + * Sets the value of the serviceType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceType(String value) { + this.serviceType = value; + } + + /** + * Gets the value of the serviceId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceId() { + return serviceId; + } + + /** + * Sets the value of the serviceId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceId (String value) { + this.serviceId = value; + } + + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the aicCloudRegion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicCloudRegion() { + return aicCloudRegion; + } + + /** + * Sets the value of the aicCloudRegion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicCloudRegion(String value) { + this.aicCloudRegion = value; + } + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + /** + * Gets the value of the vfModuleModelName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVfModuleModelName() { + return vfModuleModelName; + } + + /** + * Sets the value of the vfModuleModelName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVfModuleModelName(String value) { + this.vfModuleModelName = value; + } + + /** + * Gets the value of the asdcServiceModelVersion property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAsdcServiceModelVersion() { + return asdcServiceModelVersion; + } + + /** + * Sets the value of the asdcServiceModelVersion property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAsdcServiceModelVersion(String value) { + this.asdcServiceModelVersion = value; + } + + /** + * Gets the value of the backoutOnFailure property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getBackoutOnFailure() { + return backoutOnFailure; + } + + /** + * Sets the value of the backoutOnFailure property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBackoutOnFailure(Boolean value) { + this.backoutOnFailure = value; + } + + + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeOutputs.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeOutputs.java new file mode 100644 index 0000000000..be0d844d0a --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeOutputs.java @@ -0,0 +1,233 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="vnf-type" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="service-type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="aic-node-clli" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="tenant-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-name" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="volume-group-id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "vnfType", + "serviceType", + "aicNodeClli", + "tenantId", + "volumeGroupName", + "volumeGroupId" +}) +@XmlRootElement(name = "volume-outputs") +public class VolumeOutputs { + @XmlElement(name = "vnf-type", required = true) + protected String vnfType; + @XmlElement(name = "service-type") + protected String serviceType; + @XmlElement(name = "aic-node-clli", required = true) + protected String aicNodeClli; + @XmlElement(name = "tenant-id", required = true) + protected String tenantId; + @XmlElement(name = "volume-group-name") + protected String volumeGroupName; + @XmlElement(name = "volume-group-id") + protected String volumeGroupId; + + /** + * Gets the value of the volumeId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupId() { + return volumeGroupId; + } + + /** + * Sets the value of the volumeGroupId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupId(String value) { + this.volumeGroupId = value; + } + + /** + * Gets the value of the volumeGroupName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVolumeGroupName() { + return volumeGroupName; + } + + /** + * Sets the value of the volumeGroupName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVolumeGroupName(String value) { + this.volumeGroupName = value; + } + + /** + * Gets the value of the vnfType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getVnfType() { + return vnfType; + } + + /** + * Sets the value of the vnfType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVnfType(String value) { + this.vnfType = value; + } + + /** + * Gets the value of the serviceType property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getServiceType() { + return serviceType; + } + + /** + * Sets the value of the serviceType property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setServiceType(String value) { + this.serviceType = value; + } + + /** + * Gets the value of the aicNodeClli property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAicNodeClli() { + return aicNodeClli; + } + + /** + * Sets the value of the aicNodeClli property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAicNodeClli(String value) { + this.aicNodeClli = value; + } + + /** + * Gets the value of the tenantId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTenantId() { + return tenantId; + } + + /** + * Sets the value of the tenantId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTenantId(String value) { + this.tenantId = value; + } + + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequest.java new file mode 100644 index 0000000000..9ec3d7e4d5 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequest.java @@ -0,0 +1,179 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/volume-request/v1}request-info"/> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/volume-request/v1}volume-inputs"/> + * <element ref="{http://ecomp.att.com/mso/infra/volume-request/v1}volume-params" minOccurs="0"/> + * <element ref="{http://ecomp.att.com/mso/infra/volume-request/v1}volume-outputs" minOccurs="0"/> + * </sequence> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "requestInfo", + "volumeInputs", + "volumeParams", + "volumeOutputs" +}) +@XmlRootElement(name = "volume-request") +public class VolumeRequest { + + @XmlElement(name = "request-info", required = true) + protected RequestInfo requestInfo; + @XmlElement(name = "volume-inputs") + protected VolumeInputs volumeInputs; + @XmlElement(name = "volume-params") + protected Object volumeParams; + @XmlElement(name = "volume-outputs") + protected VolumeOutputs volumeOutputs; + + /** + * Gets the value of the requestInfo property. + * + * @return + * possible object is + * {@link RequestInfo } + * + */ + public RequestInfo getRequestInfo() { + return requestInfo; + } + + /** + * Sets the value of the requestInfo property. + * + * @param value + * allowed object is + * {@link RequestInfo } + * + */ + public void setRequestInfo(RequestInfo value) { + this.requestInfo = value; + } + + + /** + * Gets the value of the volumeInputs property. + * + * @return + * possible object is + * {@link VolumeInputs } + * + */ + public VolumeInputs getVolumeInputs() { + return volumeInputs; + } + + /** + * Sets the value of the volumeInputs property. + * + * @param value + * allowed object is + * {@link VolumeInputs } + * + */ + public void setVolumeInputs(VolumeInputs value) { + this.volumeInputs = value; + } + + /** + * Gets the value of the volumeParams property. + * + * @return + * possible object is + * {@link Object } + * + */ + public Object getVolumeParams() { + return volumeParams; + } + + /** + * Sets the value of the volumeParams property. + * + * @param value + * allowed object is + * {@link Object } + * + */ + public void setVolumeParams(Object value) { + this.volumeParams = value; + } + + /** + * Gets the value of the volumeOutputs property. + * + * @return + * possible object is + * {@link VolumeOutputs } + * + */ + public VolumeOutputs getVolumeOutputs() { + return volumeOutputs; + } + + /** + * Sets the value of the volumeOutputs property. + * + * @param value + * allowed object is + * {@link VolumeOutputs } + * + */ + public void setVolumeOutputs(VolumeOutputs value) { + this.volumeOutputs = value; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequests.java new file mode 100644 index 0000000000..04fc16e822 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/VolumeRequests.java @@ -0,0 +1,99 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + + +package org.openecomp.mso.apihandlerinfra.volumebeans; + + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element ref="{http://ecomp.att.com/mso/infra/volume-request/v1}volume-request" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "volumeRequest" +}) +@XmlRootElement(name = "volume-requests") +public class VolumeRequests { + + @XmlElement(name = "volume-request") + protected List<VolumeRequest> volumeRequest; + + /** + * Gets the value of the volumeRequest property. + * + * <p> + * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a <CODE>set</CODE> method for the vnfRequest property. + * + * <p> + * For example, to add a new item, do as follows: + * <pre> + * getVolumeRequest().add(newItem); + * </pre> + * + * + * <p> + * Objects of the following type(s) are allowed in the list + * {@link VolumeRequest } + * + * + */ + public List<VolumeRequest> getVolumeRequest() { + if (volumeRequest == null) { + volumeRequest = new ArrayList<VolumeRequest>(); + } + return this.volumeRequest; + } + +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/package-info.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/package-info.java new file mode 100644 index 0000000000..3678024b75 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/volumebeans/package-info.java @@ -0,0 +1,30 @@ +/*- + * ============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========================================================= + */ + +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 +// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2015.09.03 at 02:02:13 PM EDT +// + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://ecomp.att.com/mso/infra/volume-request/v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package org.openecomp.mso.apihandlerinfra.volumebeans; + |