From 3982f4f67314ec37fd9b22ae54049958af777c1b Mon Sep 17 00:00:00 2001 From: jimmydot Date: Sun, 7 May 2017 14:58:24 -0400 Subject: [VID-6] Initial rebase push Change-Id: I9077be9663754d9b22f77c6a7b3109b361b39346 Signed-off-by: jimmydot --- .../java/org/openecomp/aai/util/AAIProperties.java | 68 ++ .../org/openecomp/aai/util/AAIRestInterface.java | 303 ++++++++ .../aai/util/CustomJacksonJaxBJsonProvider.java | 73 ++ .../org/openecomp/aai/util/HttpsAuthClient.java | 140 ++++ .../openecomp/aai/util/HttpsComponentsClient.java | 99 +++ .../JettyObfuscationConversionCommandLineUtil.java | 78 ++ .../openecomp/vid/asdc/AsdcCatalogException.java | 58 ++ .../java/org/openecomp/vid/asdc/AsdcClient.java | 128 +++ .../org/openecomp/vid/asdc/beans/Artifact.java | 314 ++++++++ .../org/openecomp/vid/asdc/beans/Resource.java | 429 ++++++++++ .../java/org/openecomp/vid/asdc/beans/Service.java | 351 +++++++++ .../org/openecomp/vid/asdc/beans/SubResource.java | 175 +++++ .../openecomp/vid/asdc/beans/tosca/Capability.java | 140 ++++ .../openecomp/vid/asdc/beans/tosca/Constraint.java | 199 +++++ .../org/openecomp/vid/asdc/beans/tosca/Group.java | 135 ++++ .../org/openecomp/vid/asdc/beans/tosca/Import.java | 48 ++ .../org/openecomp/vid/asdc/beans/tosca/Input.java | 166 ++++ .../vid/asdc/beans/tosca/NodeTemplate.java | 117 +++ .../openecomp/vid/asdc/beans/tosca/Property.java | 157 ++++ .../vid/asdc/beans/tosca/Requirement.java | 120 +++ .../org/openecomp/vid/asdc/beans/tosca/Schema.java | 53 ++ .../vid/asdc/beans/tosca/SubstitutionMappings.java | 101 +++ .../vid/asdc/beans/tosca/TopologyTemplate.java | 124 +++ .../openecomp/vid/asdc/beans/tosca/ToscaCsar.java | 101 +++ .../openecomp/vid/asdc/beans/tosca/ToscaMeta.java | 122 +++ .../vid/asdc/beans/tosca/ToscaMetadata.java | 461 +++++++++++ .../openecomp/vid/asdc/beans/tosca/ToscaModel.java | 166 ++++ .../vid/asdc/memory/InMemoryAsdcClient.java | 372 +++++++++ .../openecomp/vid/asdc/rest/RestfulAsdcClient.java | 462 +++++++++++ .../org/openecomp/vid/client/HttpBasicClient.java | 67 ++ .../org/openecomp/vid/client/HttpsBasicClient.java | 143 ++++ .../openecomp/vid/controller/AaiController.java | 864 +++++++++++++++++++++ .../controller/BrowseServiceTypesController.java | 87 +++ .../vid/controller/HealthCheckController.java | 196 +++++ .../openecomp/vid/controller/MsoController.java | 761 ++++++++++++++++++ .../vid/controller/PropertyController.java | 122 +++ .../openecomp/vid/controller/VidController.java | 351 +++++++++ .../vid/controller/VidHomeController.java | 79 ++ .../vid/controller/ViewEditSubController.java | 107 +++ .../vid/controller/ViewLogController.java | 84 ++ .../vid/controller/test/TestAaiController.java | 93 +++ .../vid/controller/test/TestAsdcController.java | 112 +++ .../vid/controller/test/TestMsoController.java | 729 +++++++++++++++++ .../vid/controller/test/TestPageController.java | 57 ++ .../java/org/openecomp/vid/dao/FnAppDoaImpl.java | 112 +++ .../java/org/openecomp/vid/dao/ProfileDao.java | 45 ++ .../exceptions/VidServiceUnavailableException.java | 69 ++ .../org/openecomp/vid/model/CommandProperty.java | 93 +++ .../org/openecomp/vid/model/ExceptionResponse.java | 70 ++ .../org/openecomp/vid/model/ModelConstants.java | 42 + .../main/java/org/openecomp/vid/model/Network.java | 62 ++ .../main/java/org/openecomp/vid/model/Node.java | 301 +++++++ .../java/org/openecomp/vid/model/Resource.java | 28 + .../main/java/org/openecomp/vid/model/Result.java | 58 ++ .../main/java/org/openecomp/vid/model/Service.java | 253 ++++++ .../java/org/openecomp/vid/model/ServiceModel.java | 261 +++++++ .../src/main/java/org/openecomp/vid/model/VNF.java | 165 ++++ .../java/org/openecomp/vid/model/VfModule.java | 308 ++++++++ .../java/org/openecomp/vid/model/VolumeGroup.java | 196 +++++ .../java/org/openecomp/vid/mso/MsoProperties.java | 100 +++ .../org/openecomp/vid/mso/MsoResponseWrapper.java | 107 +++ .../java/org/openecomp/vid/mso/MsoRestInt.java | 71 ++ .../org/openecomp/vid/mso/MsoRestInterface.java | 290 +++++++ .../openecomp/vid/mso/MsoRestInterfaceFactory.java | 48 ++ .../org/openecomp/vid/mso/MsoRestInterfaceIfc.java | 79 ++ .../main/java/org/openecomp/vid/mso/MsoUtil.java | 125 +++ .../java/org/openecomp/vid/mso/RestObject.java | 68 ++ .../openecomp/vid/mso/rest/AsyncRequestStatus.java | 123 +++ .../openecomp/vid/mso/rest/RelatedInstance.java | 125 +++ .../org/openecomp/vid/mso/rest/RelatedModel.java | 121 +++ .../java/org/openecomp/vid/mso/rest/Request.java | 140 ++++ .../org/openecomp/vid/mso/rest/RequestDetails.java | 233 ++++++ .../org/openecomp/vid/mso/rest/RequestList.java | 137 ++++ .../vid/properties/AsdcClientConfiguration.java | 116 +++ .../openecomp/vid/properties/VidProperties.java | 93 +++ 75 files changed, 13151 insertions(+) create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/AAIProperties.java create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/AAIRestInterface.java create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/CustomJacksonJaxBJsonProvider.java create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/HttpsAuthClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/HttpsComponentsClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/aai/util/JettyObfuscationConversionCommandLineUtil.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcCatalogException.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Artifact.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Resource.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Service.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/SubResource.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Capability.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Constraint.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Group.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Import.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Input.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/NodeTemplate.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Property.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Requirement.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Schema.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/SubstitutionMappings.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/TopologyTemplate.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaCsar.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMeta.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMetadata.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaModel.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/memory/InMemoryAsdcClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/asdc/rest/RestfulAsdcClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/client/HttpBasicClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/client/HttpsBasicClient.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/AaiController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/BrowseServiceTypesController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/HealthCheckController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/MsoController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/PropertyController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/VidController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/VidHomeController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/ViewEditSubController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/ViewLogController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAaiController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAsdcController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestMsoController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestPageController.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/dao/FnAppDoaImpl.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/dao/ProfileDao.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/exceptions/VidServiceUnavailableException.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/CommandProperty.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/ExceptionResponse.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/ModelConstants.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/Network.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/Node.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/Resource.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/Result.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/Service.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/ServiceModel.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/VNF.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/VfModule.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/model/VolumeGroup.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoProperties.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoResponseWrapper.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInt.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterface.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceFactory.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceIfc.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/MsoUtil.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/RestObject.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/AsyncRequestStatus.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedInstance.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedModel.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/Request.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestDetails.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestList.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/properties/AsdcClientConfiguration.java create mode 100755 vid-app-common/src/main/java/org/openecomp/vid/properties/VidProperties.java (limited to 'vid-app-common/src/main/java/org/openecomp') diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/AAIProperties.java b/vid-app-common/src/main/java/org/openecomp/aai/util/AAIProperties.java new file mode 100755 index 000000000..ca710f6fc --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/AAIProperties.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + + +import org.openecomp.portalsdk.core.util.SystemProperties; + +/** + * The Class AAIProperties. + */ +public class AAIProperties extends SystemProperties { + + /** The Constant AAI_SERVER_URL_BASE. */ + //VID Specific + public static final String AAI_SERVER_URL_BASE = "aai.server.url.base"; + + /** The Constant AAI_SERVER_URL. */ + public static final String AAI_SERVER_URL = "aai.server.url"; + + /** The Constant AAI_OLDSERVER_URL_BASE. */ + public static final String AAI_OLDSERVER_URL_BASE = "aai.oldserver.url.base"; + + /** The Constant AAI_OLDSERVER_URL. */ + public static final String AAI_OLDSERVER_URL = "aai.oldserver.url"; + + /** The Constant AAI_TRUSTSTORE_FILENAME. */ + public static final String AAI_TRUSTSTORE_FILENAME = "aai.truststore.filename"; + + /** The Constant AAI_TRUSTSTORE_PASSWD_X. */ + public static final String AAI_TRUSTSTORE_PASSWD_X = "aai.truststore.passwd.x"; + + /** The Constant AAI_KEYSTORE_FILENAME. */ + public static final String AAI_KEYSTORE_FILENAME = "aai.keystore.filename"; + + /** The Constant AAI_KEYSTORE_PASSWD_X. */ + public static final String AAI_KEYSTORE_PASSWD_X = "aai.keystore.passwd.x"; + + /** The Constant AAI_VID_USERNAME. */ + public static final String AAI_VID_USERNAME = "aai.vid.username"; + + /** The Constant AAI_VID_PASSWD_X. */ + public static final String AAI_VID_PASSWD_X = "aai.vid.passwd.x"; + + /** The Constant FILESEPARTOR. */ + public static final String FILESEPARTOR = (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator"); + + /** The Constant AAI_USE_CLIENT_CERT */ + public static final String AAI_USE_CLIENT_CERT = "aai.use.client.cert"; + +} diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/AAIRestInterface.java b/vid-app-common/src/main/java/org/openecomp/aai/util/AAIRestInterface.java new file mode 100755 index 000000000..fa4eefc6c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/AAIRestInterface.java @@ -0,0 +1,303 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Base64; +import java.util.Date; +import java.util.UUID; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.eclipse.jetty.util.security.Password; +import org.openecomp.aai.util.AAIProperties; +import org.openecomp.aai.util.HttpsAuthClient; +/** + * The Class AAIRestInterface. + */ +public class AAIRestInterface { + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AAIRestInterface.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The client. */ + private static Client client = null; + + /** The rest srvr base URL. */ + private String restSrvrBaseURL; + + /** The certificate path. */ + public String certificatePath = ""; + + /** + * Instantiates a new AAI rest interface. + * + * @param certPath the cert path + */ + public AAIRestInterface(String certPath) + { + certificatePath = certPath; + } + + /** + * Encode URL. + * + * @param nodeKey the node key + * @return the string + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + public String encodeURL (String nodeKey) throws UnsupportedEncodingException { + return URLEncoder.encode(nodeKey, "UTF-8").replaceAll("\\+", "%20"); + } + + /** + * Inits the rest client. + */ + private void initRestClient() + { + String methodName = "initRestClient"; + + if (client == null) { + try { + client = HttpsAuthClient.getClient(certificatePath); + } + catch (KeyManagementException e){ + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== KeyManagementException in " + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== KeyManagementException in " + methodName + e.toString()); + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== Exception in REST call to DB in initRestClient" + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== Exception in REST call to DB : " + e.toString()); + } + } + } + + /** + * Sets the rest srvr base URL. + * + * @param baseURL the base URL + */ + public void SetRestSrvrBaseURL(String baseURL) + { + if (baseURL == null) + { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== REST Server base URL cannot be null."); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== REST Server base URL cannot be null."); + } + + restSrvrBaseURL = baseURL; + } + + /** + * Gets the rest srvr base URL. + * + * @return the rest srvr base URL + */ + public String getRestSrvrBaseURL() + { + return restSrvrBaseURL; + } + + + /** + * Rest get. + * + * @param fromAppId the from app id + * @param transId the trans id + * @param requestUri the request uri + * @param xml the xml + * @return the string + * @throws UnsupportedEncodingException + */ + public Response RestGet(String fromAppId, String transId, String requestUri, boolean xml) throws UnsupportedEncodingException { + String methodName = "RestGet"; + + String responseType = "application/json"; + if (xml) + responseType = "application/xml"; + + initRestClient(); + + String clientCert = SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT); + + boolean useClientCert = false; + if (clientCert != null && + SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT).equalsIgnoreCase("true")) { + useClientCert = true; + } + String url = ""; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + url = SystemProperties.getProperty(AAIProperties.AAI_SERVER_URL) + requestUri; + + try { + // what is the point of this, just to check syntax?? + URL urlObj= new URL(url); + URI uri = new URI(urlObj.getProtocol(), urlObj.getUserInfo(), urlObj.getHost(), urlObj.getPort(), urlObj.getPath(), urlObj.getQuery(), urlObj.getRef()); + url = uri.toASCIIString(); + } catch (URISyntaxException | MalformedURLException e) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " bad URL"); + return null; + } + logger.debug(dateFormat.format(new Date()) + "<== " + url + " for the get REST API"); + + final Response cres; + if (useClientCert == true) { + cres = client.target(url) + .request() + .accept(responseType) + .header("X-TransactionId", transId) + .header("X-FromAppId", fromAppId) + .header("Content-Type", "application/json") + .get(); + } else { + + String vidUsername = SystemProperties.getProperty(AAIProperties.AAI_VID_USERNAME); + String vidPassword = Password.deobfuscate(SystemProperties.getProperty(AAIProperties.AAI_VID_PASSWD_X)); + String encodeThis = vidUsername + ":" + vidPassword; + + cres = client.target(url) + .request() + .accept(responseType) + .header("X-TransactionId", transId) + .header("X-FromAppId", fromAppId) + .header("Content-Type", "application/json") + .header("Authorization", "Basic " + Base64.getEncoder().encodeToString(encodeThis.getBytes("utf-8"))) + .get(); + } +// String r = cres.readEntity(String.class); + if (cres.getStatus() == 200) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api GET was successful!"); + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api GET was successful!"); + } else { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName +" with status="+cres.getStatus()+", url="+url); + } + return cres; +// logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName +" resp=" + r ); +// return r; + } + + + /** + * Delete. + * + * @param sourceID the source ID + * @param transId the trans id + * @param path the path + * @return true, if successful + */ + public boolean Delete(String sourceID, String transId, String path) { + String methodName = "Delete"; + String url=""; + transId += ":" + UUID.randomUUID().toString(); + logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start"); + + initRestClient(); + String request = "{}"; + url = SystemProperties.getProperty(AAIProperties.AAI_SERVER_URL) + path; + final Response cres = client.target(url) + .request() + .accept("application/json") + .header("X-TransactionId", transId) + .header("X-FromAppId", sourceID) + //.entity(request) + .delete(); + + if (cres.getStatus() == 404) { // resource not found + String msg = "Resource does not exist...: " + cres.getStatus() + + ":" + cres.readEntity(String.class); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + msg); + return false; + } else if (cres.getStatus() == 200 || cres.getStatus() == 204){ + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "Resource " + url + " deleted"); + return true; + } else { + String msg = "Deleting Resource failed: " + cres.getStatus() + + ":" + cres.readEntity(String.class); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + msg); + } + + return false; + } + + + /** + * Rest post. + * + * @param fromAppId the from app id + * @param transId the trans id + * @param path the path + * @param payload the payload + * @param xml the xml + * @return the string + */ + public Response RestPost(String fromAppId, String transId, String path, String payload, boolean xml) { + String methodName = "RestPost"; + String url=""; + transId = UUID.randomUUID().toString(); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + try { + + String responseType = "application/json"; + if (xml) + responseType = "application/xml"; + + initRestClient(); + + url = SystemProperties.getProperty(AAIProperties.AAI_SERVER_URL_BASE) + path; + + final Response cres = client.target(url) + .request() + .accept(responseType) + .header("X-TransactionId", transId) + .header("X-FromAppId", fromAppId) + .post(Entity.entity(payload, MediaType.APPLICATION_JSON)); + + if (cres.getStatus() == 200 && cres.getStatus() <= 299) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!"); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!"); + } else { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName +" with status="+cres.getStatus()+", url="+url); + } + return cres; + } catch (Exception e) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString()); + } + return null; + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/CustomJacksonJaxBJsonProvider.java b/vid-app-common/src/main/java/org/openecomp/aai/util/CustomJacksonJaxBJsonProvider.java new file mode 100755 index 000000000..2623d6b6f --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/CustomJacksonJaxBJsonProvider.java @@ -0,0 +1,73 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + + +import javax.ws.rs.ext.Provider; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; +import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; + +/** + * The Class CustomJacksonJaxBJsonProvider. + */ +@Provider +public class CustomJacksonJaxBJsonProvider extends JacksonJaxbJsonProvider { + + /** The common mapper. */ + private static ObjectMapper commonMapper = null; + + /** + * Instantiates a new custom jackson jax B json provider. + */ + public CustomJacksonJaxBJsonProvider() { + if (commonMapper == null) { + ObjectMapper mapper = new ObjectMapper(); + + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.configure(SerializationFeature.INDENT_OUTPUT, false); + mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); + + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false); + + mapper.registerModule(new JaxbAnnotationModule()); + + commonMapper = mapper; + } + super.setMapper(commonMapper); + } + + /** + * Gets the mapper. + * + * @return the mapper + */ + public ObjectMapper getMapper() { + return commonMapper; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsAuthClient.java b/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsAuthClient.java new file mode 100755 index 000000000..8335d15b2 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsAuthClient.java @@ -0,0 +1,140 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + + +import java.io.FileInputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; + +import org.eclipse.jetty.util.security.Password; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.HttpUrlConnectorProvider; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +/** + * The Class HttpsAuthClient. + */ +public class HttpsAuthClient{ + /** The logger. */ + static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpsAuthClient.class); + + /** + * Gets the client. + * + * @param certFilePath the cert file path + * @return the client + * @throws KeyManagementException the key management exception + */ + public static Client getClient(String certFilePath) throws KeyManagementException { + + ClientConfig config = new ClientConfig(); + //config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + //config.getClasses().add(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + + try { + + config.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, Boolean.TRUE ); + + config.connectorProvider(new HttpUrlConnectorProvider().useSetMethodWorkaround()); + String truststore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_FILENAME); + String truststore_password = SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_PASSWD_X); + String decrypted_truststore_password = Password.deobfuscate(truststore_password); + + boolean useClientCert = false; + + String keystore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_FILENAME); + String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X); + String decrypted_keystore_password = Password.deobfuscate(keystore_password); + + String clientCert = SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT); + + if (clientCert != null && + SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT).equalsIgnoreCase("true")) { + useClientCert = true; + } + + System.setProperty("javax.net.ssl.trustStore", truststore_path); + System.setProperty("javax.net.ssl.trustStorePassword", decrypted_truststore_password); + HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){ + public boolean verify(String string,SSLSession ssls) { + return true; + } + }); + + final SSLContext ctx = SSLContext.getInstance("TLS"); + + KeyManagerFactory kmf = null; + if (useClientCert) { + + try { + kmf = KeyManagerFactory.getInstance("SunX509"); + FileInputStream fin = new FileInputStream(keystore_path); + KeyStore ks = KeyStore.getInstance("PKCS12"); + char[] pwd = decrypted_keystore_password.toCharArray(); + ks.load(fin, pwd); + kmf.init(ks, pwd); + } catch (Exception e) { + //System.out.println("Error setting up kmf: exiting"); + logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up kmf: exiting"); + e.printStackTrace(); + return null; + } + ctx.init(kmf.getKeyManagers(), null, null); + + return ClientBuilder.newBuilder() + .sslContext(ctx) + .hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify( String s, SSLSession sslSession ) { + return true; + } + }).withConfig(config) + .build() + .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + } else { + return ClientBuilder.newBuilder() + .hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify( String s, SSLSession sslSession ) { + return true; + } + }).withConfig(config) + .build() + .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + } + } catch (Exception e) { + logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting"); + //System.out.println("Error setting up config: exiting"); + e.printStackTrace(); + System.exit(1); + return null; + } + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsComponentsClient.java b/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsComponentsClient.java new file mode 100755 index 000000000..a041c6520 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/HttpsComponentsClient.java @@ -0,0 +1,99 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + +import java.io.FileInputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.HttpClients; +import org.eclipse.jetty.util.security.Password; +import org.openecomp.portalsdk.core.util.SystemProperties; + + +/** + * The Class HttpsComponentsClient. + */ +public class HttpsComponentsClient{ + + /** + * Gets the client. + * + * @param certFilePath the cert file path + * @return the client + * @throws KeyManagementException the key management exception + */ + public static CloseableHttpClient getClient(String certFilePath) throws Exception { + CloseableHttpClient httpclient = null; + try { + + String truststore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_FILENAME); + String truststore_password = SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_PASSWD_X); + String decrypted_truststore_password = Password.deobfuscate(truststore_password); + String keystore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_FILENAME); + String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X); + String decrypted_keystore_password = Password.deobfuscate(keystore_password); + + SSLContextBuilder sslContextB = new SSLContextBuilder(); + + KeyStore ks = KeyStore.getInstance("PKCS12"); + FileInputStream fin = new FileInputStream(keystore_path); + char[] pwd = decrypted_keystore_password.toCharArray(); + ks.load(fin, pwd); + + sslContextB.loadKeyMaterial(ks, pwd); + + KeyStore ts = KeyStore.getInstance("JKS"); + FileInputStream fin1 = new FileInputStream(truststore_path); + char[] pwd1 = decrypted_truststore_password.toCharArray(); + ts.load(fin1, pwd1); + + sslContextB.loadTrustMaterial(ts); + sslContextB.loadKeyMaterial(ks, pwd); + sslContextB.useTLS(); + + SSLContext sslcontext = sslContextB.build(); + + SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory( + sslcontext, + new String[] { "TLSv1.1", "TLSv1.2" }, + null, + SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER ); + + httpclient = HttpClients.custom() + .setSSLSocketFactory(sslFactory) + .build(); + + + } catch (Exception e) { + throw e; + } + return httpclient; + } + + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/aai/util/JettyObfuscationConversionCommandLineUtil.java b/vid-app-common/src/main/java/org/openecomp/aai/util/JettyObfuscationConversionCommandLineUtil.java new file mode 100755 index 000000000..e4c4bcef1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/aai/util/JettyObfuscationConversionCommandLineUtil.java @@ -0,0 +1,78 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.aai.util; + + +import org.apache.commons.cli.BasicParser; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; +import org.eclipse.jetty.util.security.Password; + + +public class JettyObfuscationConversionCommandLineUtil { + /** + * The main method. + * + * @param args the arguments + */ + public static void main(String[] args){ + Options options = new Options(); + options.addOption("e", true, "obfuscate the given string"); + options.addOption("d", true, "deobfuscate the given string"); + + CommandLineParser parser = new BasicParser(); + + try { + CommandLine cmd = parser.parse(options, args); + String toProcess = null; + + if (cmd.hasOption("e")){ + toProcess = cmd.getOptionValue("e"); + String encoded = Password.obfuscate(toProcess); + System.out.println(encoded); + } else if (cmd.hasOption("d")) { + toProcess = cmd.getOptionValue("d"); + String decoded_str = Password.deobfuscate(toProcess); + System.out.println(decoded_str); + } else { + usage(); + } + } catch (ParseException e) { + System.out.println("failed to parse input"); + System.out.println(e.toString()); + usage(); + } catch (Exception e) { + System.out.println("exception:" + e.toString()); + } + } + + /** + * Usage. + */ + private static void usage(){ + System.out.println("usage:");; + System.out.println("-e [string] to obfuscate"); + System.out.println("-d [string] to deobfuscate"); + System.out.println("-h help"); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcCatalogException.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcCatalogException.java new file mode 100755 index 000000000..aafb11cad --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcCatalogException.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc; + +/** + * The Class AsdcCatalogException. + */ +public class AsdcCatalogException extends Exception { + + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + /** + * Instantiates a new sdc catalog exception. + * + * @param msg the msg + */ + public AsdcCatalogException(String msg) { + super(msg); + } + + /** + * Instantiates a new sdc catalog exception. + * + * @param cause the cause + */ + public AsdcCatalogException(Throwable cause) { + super(cause); + } + + /** + * Instantiates a new sdc catalog exception. + * + * @param msg the msg + * @param t the t + */ + public AsdcCatalogException(String msg, Throwable t) { + super(msg, t); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcClient.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcClient.java new file mode 100755 index 000000000..c4a8b1c0c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/AsdcClient.java @@ -0,0 +1,128 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc; + +import java.util.Collection; +import java.util.Map; +import java.util.UUID; + +import org.openecomp.vid.asdc.beans.Artifact; +import org.openecomp.vid.asdc.beans.Resource; +import org.openecomp.vid.asdc.beans.Service; +import org.openecomp.vid.asdc.beans.tosca.ToscaCsar; + +/** + * The Interface AsdcClient. + */ +public interface AsdcClient { + + /** + * Gets the resource. + * + * @param uuid the uuid + * @return the resource + * @throws AsdcCatalogException the sdc catalog exception + */ + public Resource getResource(UUID uuid) throws AsdcCatalogException; + + /** + * Gets the resources. + * + * @return the resources + * @throws AsdcCatalogException the sdc catalog exception + */ + public Collection getResources() throws AsdcCatalogException; + + /** + * Gets the resources. + * + * @param filter the filter + * @return the resources + * @throws AsdcCatalogException the sdc catalog exception + */ + public Collection getResources(Map filter) throws AsdcCatalogException; + + /** + * Gets the resource artifact. + * + * @param resourceUuid the resource uuid + * @param artifactUuid the artifact uuid + * @return the resource artifact + * @throws AsdcCatalogException the sdc catalog exception + */ + public Artifact getResourceArtifact(UUID resourceUuid, UUID artifactUuid) throws AsdcCatalogException; + + /** + * Gets the resource tosca model. + * + * @param uuid the uuid + * @return the resource tosca model + * @throws AsdcCatalogException the sdc catalog exception + */ + public ToscaCsar getResourceToscaModel(UUID uuid) throws AsdcCatalogException; + + /** + * Gets the service. + * + * @param uuid the uuid + * @return the service + * @throws AsdcCatalogException the sdc catalog exception + */ + public Service getService(UUID uuid) throws AsdcCatalogException; + + /** + * Gets the services. + * + * @return the services + * @throws AsdcCatalogException the sdc catalog exception + */ + public Collection getServices() throws AsdcCatalogException; + + /** + * Gets the services. + * + * @param filter the filter + * @return the services + * @throws AsdcCatalogException the asdc catalog exception + */ + public Collection getServices(Map filter) throws AsdcCatalogException; + + /** + * Gets the service artifact. + * + * @param serviceUuid the service uuid + * @param artifactUuid the artifact uuid + * @return the service artifact + * @throws AsdcCatalogException the asdc catalog exception + */ + public Artifact getServiceArtifact(UUID serviceUuid, UUID artifactUuid) throws AsdcCatalogException; + + /** + * Gets the service tosca model. + * + * @param uuid the uuid + * @return the service tosca model + * @throws AsdcCatalogException the asdc catalog exception + */ + public ToscaCsar getServiceToscaModel(UUID uuid) throws AsdcCatalogException; + + //TODO: Collect TOSCA information from CSAR +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Artifact.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Artifact.java new file mode 100755 index 000000000..d24d1232a --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Artifact.java @@ -0,0 +1,314 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans; + +import java.util.UUID; + +/** + * The Class Artifact. + */ +public class Artifact { + +/* + * SDC has widened this to a String type for 1610. + public enum Type { + HEAT, + HEAT_ENV, + HEAT_VOL, + HEAT_NET, + HEAT_NESTED, + HEAT_ARTIFACT, + YANG_XML, + VNF_CATALOG, + VF_LICENSE, + VENDOR_LICENSE, + ASSET_INVENTORY_PROFILE, + ASSET_QUERY_SPEC, + APPC_CONFIG, + VF_MODULES_METADATA, + DCAE_TOSCA, + DCAE_JSON, + DCAE_EMF, + DCAE_DOC, + DCAE_BLUEPRINT, + DCAE_EVENT, + DCAE_INVENTORY_TOSCA, + DCAE_INVENTORY_JSON, + DCAE_INVENTORY_EMF, + DCAE_INVENTORY_DOC, + DCAE_INVENTORY_BLUEPRINT, + DCAE_INVENTORY_EVENT, + OTHER, + AAI_SERVICE_MODEL //HEY! READ ME! YES, YOU! I AM A TEMPORARY FIX, PLEASE REMOVE ME BECAUSE I AM A FRAUD. I DON'T BELONG HERE. + //Warm Regards, + // *The* Artifact.Type.AAI_SERVICE_MODEL Constant + } + */ + + /** The artifact name. */ + private String artifactName; + + /** The artifact label. */ + private String artifactLabel; + + /** The artifact group type. */ + private String artifactGroupType; + + /** The artifact type. */ + private String artifactType; + + /** The artifact URL. */ + private String artifactURL; + + /** The artifact description. */ + private String artifactDescription; + + /** The artifact timeout. */ + private int artifactTimeout; + + /** The artifact checksum. */ + private String artifactChecksum; + + /** The artifact UUID. */ + private String artifactUUID; + + /** The artifact version. */ + private String artifactVersion; + + /** The generated from UUID. */ + private String generatedFromUUID; + + /** + * Gets the artifact name. + * + * @return the artifact name + */ + public String getArtifactName() { + return artifactName; + } + + /** + * Gets the artifact type. + * + * @return the artifact type + */ + public String getArtifactType() { + return artifactType; + } + /** + * Gets the artifact group type. + * + * @return the artifact group type + */ + public String getArtifactGroupType() { + return artifactGroupType; + } + + /** + * Gets the artifact label. + * + * @return the artifact label + */ + public String getArtifactLabel() { + return artifactLabel; + } + /** + * Gets the artifact URL. + * + * @return the artifact URL + */ + public String getArtifactURL() { + return artifactURL; + } + + /** + * Gets the artifact description. + * + * @return the artifact description + */ + public String getArtifactDescription() { + return artifactDescription; + } + + /** + * Gets the artifact timeout. + * + * @return the artifact timeout + */ + public int getArtifactTimeout() { + return artifactTimeout; + } + + /** + * Gets the artifact checksum. + * + * @return the artifact checksum + */ + public String getArtifactChecksum() { + return artifactChecksum; + } + + /** + * Gets the artifact UUID. + * + * @return the artifact UUID + */ + public String getArtifactUUID() { + return artifactUUID; + } + + /** + * Gets the artifact version. + * + * @return the artifact version + */ + public String getArtifactVersion() { + return artifactVersion; + } + + /** + * Gets the generated from UUID. + * + * @return the generated from UUID + */ + public String getGeneratedFromUUID() { + return generatedFromUUID; + } + + /** + * Sets the artifact name. + * + * @param artifactName the new artifact name + */ + public void setArtifactName(String artifactName) { + this.artifactName = artifactName; + } + + /** + * Sets the artifact type. + * + * @param artifactType the new artifact type + */ + public void setArtifactType(String artifactType) { + this.artifactType = artifactType; + } + /** + * Sets the artifact group type. + * + * @param artifactGroupType the new artifact group type + */ + public void setArtifactGroupType(String artifactGroupType) { + this.artifactGroupType = artifactGroupType; + } + /** + * Sets the artifact label. + * + * @param artifactGroupType the new artifact label + */ + public void setArtifactLabel(String artifactLabel) { + this.artifactLabel = artifactLabel; + } + /** + * Sets the artifact URL. + * + * @param artifactURL the new artifact URL + */ + public void setArtifactURL(String artifactURL) { + this.artifactURL = artifactURL; + } + + /** + * Sets the artifact description. + * + * @param artifactDescription the new artifact description + */ + public void setArtifactDescription(String artifactDescription) { + this.artifactDescription = artifactDescription; + } + + /** + * Sets the artifact timeout. + * + * @param artifactTimeout the new artifact timeout + */ + public void setArtifactTimeout(int artifactTimeout) { + this.artifactTimeout = artifactTimeout; + } + + /** + * Sets the artifact checksum. + * + * @param artifactChecksum the new artifact checksum + */ + public void setArtifactChecksum(String artifactChecksum) { + this.artifactChecksum = artifactChecksum; + } + + /** + * Sets the artifact UUID. + * + * @param artifactUUID the new artifact UUID + */ + public void setArtifactUUID(String artifactUUID) { + this.artifactUUID = artifactUUID; + } + + /** + * Sets the artifact version. + * + * @param artifactVersion the new artifact version + */ + public void setArtifactVersion(String artifactVersion) { + this.artifactVersion = artifactVersion; + } + + /** + * Sets the generated from UUID. + * + * @param generatedFromUUID the new generated from UUID + */ + public void setGeneratedFromUUID(String generatedFromUUID) { + this.generatedFromUUID = generatedFromUUID; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final UUID uuid = UUID.fromString(getArtifactUUID()); + + return uuid.hashCode(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof Artifact)) return false; + + final Artifact artifact = (Artifact) o; + + return (artifact.getArtifactUUID().equals(getArtifactUUID())); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Resource.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Resource.java new file mode 100755 index 000000000..3911c699a --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Resource.java @@ -0,0 +1,429 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans; + +import java.util.Collection; +import java.util.UUID; + +/** + * The Class Resource. + */ +public class Resource { + + /** + * The Enum Type. + */ + public enum Type { + + /** The vf. */ + VF, + + /** The vfc. */ + VFC, + + /** The cp. */ + CP, + + /** The vl. */ + VL, + + /** The vfcmt. */ + VFCMT + } + + /** + * The Enum LifecycleState. + */ + public enum LifecycleState { + + /** The not certified checkout. */ + NOT_CERTIFIED_CHECKOUT, + + /** The not certified checkin. */ + NOT_CERTIFIED_CHECKIN, + + /** The ready for certification. */ + READY_FOR_CERTIFICATION, + + /** The certification in progress. */ + CERTIFICATION_IN_PROGRESS, + + /** The certified. */ + CERTIFIED + } + + /** The uuid. */ + private String uuid; + + /** The invariant UUID. */ + private String invariantUUID; + + /** The name. */ + private String name; + + /** The description. */ + private String description; + + /** The version. */ + private String version; + + /** The tosca model URL. */ + private String toscaModelURL; + + /** The category. */ + private String category; + + /** The sub category. */ + private String subCategory; + + /** The resource type. */ + private Resource.Type resourceType; + + /** The lifecycle state. */ + private Resource.LifecycleState lifecycleState; + + /** The last updater user ID. */ + private String lastUpdaterUserId; + + /** The last updater full name. */ + private String lastUpdaterFullName; + + /** The tosca model. */ + private String toscaModel; + + /** The tosca resource name. */ + private String toscaResourceName; + + /** The artifacts. */ + private Collection artifacts; + + /** The resources. */ + private Collection resources; + + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + + /** + * Gets the invariant UUID. + * + * @return the invariant UUID + */ + public String getInvariantUUID() { + return invariantUUID; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Gets the tosca model URL. + * + * @return the tosca model URL + */ + public String getToscaModelURL() { + return toscaModelURL; + } + + /** + * Gets the category. + * + * @return the category + */ + public String getCategory() { + return category; + } + + /** + * Gets the sub category. + * + * @return the sub category + */ + public String getSubCategory() { + return subCategory; + } + + /** + * Gets the resource type. + * + * @return the resource type + */ + public Resource.Type getResourceType() { + return resourceType; + } + + /** + * Gets the lifecycle state. + * + * @return the lifecycle state + */ + public Resource.LifecycleState getLifecycleState() { + return lifecycleState; + } + + /** + * Gets the last updater user ID. + * + * @return the last updater user ID + */ + public String getLastUpdaterUserId() { + return lastUpdaterUserId; + } + + /** + * Gets the last updater full name. + * + * @return the last updater full name + */ + public String getLastUpdaterFullName() { + return lastUpdaterFullName; + } + + /** + * Gets the tosca model. + * + * @return the tosca model + */ + public String getToscaModel() { + return toscaModel; + } + + /** + * Gets the tosca resource name. + * + * @return the tosca resource name + */ + public String getToscaResourceName() { + return toscaResourceName; + } + + /** + * Gets the artifacts. + * + * @return the artifacts + */ + public Collection getArtifacts() { + return artifacts; + } + + /** + * Gets the resources. + * + * @return the resources + */ + public Collection getResources() { + return resources; + } + + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant UUID. + * + * @param invariantUUID the new invariant UUID + */ + public void setInvariantUUID(String invariantUUID) { + this.invariantUUID = invariantUUID; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + /** + * Sets the description. + * + * @param name the new description + */ + public void setDescription(String description) { + this.description = description; + } + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * Sets the tosca model URL. + * + * @param toscaModelURL the new tosca model URL + */ + public void setToscaModelURL(String toscaModelURL) { + this.toscaModelURL = toscaModelURL; + } + + /** + * Sets the category. + * + * @param category the new category + */ + public void setCategory(String category) { + this.category = category; + } + + /** + * Sets the sub category. + * + * @param subCategory the new sub category + */ + public void setSubCategory(String subCategory) { + this.subCategory = subCategory; + } + + /** + * Sets the resource type. + * + * @param resourceType the new resource type + */ + public void setResourceType(Resource.Type resourceType) { + this.resourceType = resourceType; + } + + /** + * Sets the lifecycle state. + * + * @param lifecycleState the new lifecycle state + */ + public void setLifecycleState(Resource.LifecycleState lifecycleState) { + this.lifecycleState = lifecycleState; + } + + /** + * Sets the last updater user ID. + * + * @param lastUpdaterUserId the new last updater user ID + */ + public void setLastUpdaterUserId(String lastUpdaterUserId) { + this.lastUpdaterUserId = lastUpdaterUserId; + } + + /** + * Sets the last updater full name. + * + * @param lastUpdaterFullName the new last updater full name + */ + public void setLastUpdaterFullName(String lastUpdaterFullName) { + this.lastUpdaterFullName = lastUpdaterFullName; + } + + /** + * Sets the tosca model. + * + * @param toscaModel the new tosca model + */ + public void setToscaModel(String toscaModel) { + this.toscaModel = toscaModel; + } + + /** + * Sets the tosca resource name. + * + * @param toscaResourceName the new tosca resource name + */ + public void setToscaResourceName(String toscaResourceName) { + this.toscaResourceName = toscaResourceName; + } + + /** + * Sets the artifacts. + * + * @param artifacts the new artifacts + */ + public void setArtifacts(Collection artifacts) { + this.artifacts = artifacts; + } + + /** + * Sets the resources. + * + * @param resources the new resources + */ + public void setResources(Collection resources) { + this.resources = resources; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final UUID uuid = UUID.fromString(getUuid()); + + return uuid.hashCode(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof Resource)) return false; + + final Resource resource = (Resource) o; + + return (resource.getUuid().equals(getUuid())); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Service.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Service.java new file mode 100755 index 000000000..fa898e56a --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/Service.java @@ -0,0 +1,351 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans; + +import java.util.Collection; +import java.util.UUID; +/** + * The Class Service. + */ +public class Service { + + /** + * The Enum DistributionStatus. + */ + public enum DistributionStatus { + + /** The distribution not approved. */ + DISTRIBUTION_NOT_APPROVED, + + /** The distribution approved. */ + DISTRIBUTION_APPROVED, + + /** The distributed. */ + DISTRIBUTED, + + /** The distribution rejected. */ + DISTRIBUTION_REJECTED + } + + /** + * The Enum LifecycleState. + */ + public enum LifecycleState { + + /** The not certified checkout. */ + NOT_CERTIFIED_CHECKOUT, + + /** The not certified checkin. */ + NOT_CERTIFIED_CHECKIN, + + /** The ready for certification. */ + READY_FOR_CERTIFICATION, + + /** The certification in progress. */ + CERTIFICATION_IN_PROGRESS, + + /** The certified. */ + CERTIFIED + } + + /** The uuid. */ + private String uuid; + + /** The invariant UUID. */ + private String invariantUUID; + + /** The name. */ + private String name; + + /** The version. */ + private String version; + + /** The tosca model URL. */ + private String toscaModelURL; + + /** The category. */ + private String category; + + /** The lifecycle state. */ + private Service.LifecycleState lifecycleState; + + /** The last updater user uid. */ + private String lastUpdaterUserId; + + /** The last updater full name. */ + private String lastUpdaterFullName; + + /** The distribution status. */ + private Service.DistributionStatus distributionStatus; + + /** The artifacts. */ + private Collection artifacts; + + /** The resources. */ + private Collection resources; + + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + + /** + * Gets the invariant UUID. + * + * @return the invariant UUID + */ + public String getInvariantUUID() { + return invariantUUID; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Gets the tosca model URL. + * + * @return the tosca model URL + */ + public String getToscaModelURL() { + return toscaModelURL; + } + + /** + * Gets the category. + * + * @return the category + */ + public String getCategory() { + return category; + } + + /** + * Gets the lifecycle state. + * + * @return the lifecycle state + */ + public Service.LifecycleState getLifecycleState() { + return lifecycleState; + } + + /** + * Gets the last updater user uid. + * + * @return the last updater user uid + */ + public String getLastUpdaterUserId() { + return lastUpdaterUserId; + } + + /** + * Gets the last updater full name. + * + * @return the last updater full name + */ + public String getLastUpdaterFullName() { + return lastUpdaterFullName; + } + + /** + * Gets the distribution status. + * + * @return the distribution status + */ + public Service.DistributionStatus getDistributionStatus() { + return distributionStatus; + } + + /** + * Gets the artifacts. + * + * @return the artifacts + */ + public Collection getArtifacts() { + return artifacts; + } + + /** + * Gets the resources. + * + * @return the resources + */ + public Collection getResources() { + return resources; + } + + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant UUID. + * + * @param invariantUUID the new invariant UUID + */ + public void setInvariantUUID(String invariantUUID) { + this.invariantUUID = invariantUUID; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * Sets the tosca model URL. + * + * @param toscaModelURL the new tosca model URL + */ + public void setToscaModelURL(String toscaModelURL) { + this.toscaModelURL = toscaModelURL; + } + + /** + * Sets the category. + * + * @param category the new category + */ + public void setCategory(String category) { + this.category = category; + } + + /** + * Sets the lifecycle state. + * + * @param lifecycleState the new lifecycle state + */ + public void setLifecycleState(Service.LifecycleState lifecycleState) { + this.lifecycleState = lifecycleState; + } + + /** + * Sets the last updater user uid. + * + * @param lastUpdaterUserId the new last updater user uid + */ + public void set(String lastUpdaterUserId) { + this.lastUpdaterUserId = lastUpdaterUserId; + } + + /** + * Sets the last updater full name. + * + * @param lastUpdaterFullName the new last updater full name + */ + public void setLastUpdaterFullName(String lastUpdaterFullName) { + this.lastUpdaterFullName = lastUpdaterFullName; + } + + /** + * Sets the distribution status. + * + * @param distributionStatus the new distribution status + */ + public void setDistributionStatus(Service.DistributionStatus distributionStatus) { + this.distributionStatus = distributionStatus; + } + + /** + * Sets the artifacts. + * + * @param artifacts the new artifacts + */ + public void setArtifacts(Collection artifacts) { + this.artifacts = artifacts; + } + + /** + * Sets the resources. + * + * @param resources the new resources + */ + public void setResources(Collection resources) { + this.resources = resources; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return uuid; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final UUID uuid = UUID.fromString(getUuid()); + + return uuid.hashCode(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof Service)) return false; + + final Service service = (Service) o; + + return (service.getUuid().equals(getUuid())); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/SubResource.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/SubResource.java new file mode 100755 index 000000000..6d7fb41b1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/SubResource.java @@ -0,0 +1,175 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans; + +import java.util.Collection; +/** + * The Class SubResource. + */ +public class SubResource { + + /** The resource instance name. */ + private String resourceInstanceName; + + /** The resource name. */ + private String resourceName; + + /** The resource invariant UUID. */ + private String resourceInvariantUUID; + + /** The resource version. */ + private String resourceVersion; + + /** The resource type. */ + private String resourceType; + + /** The resource UUID. */ + private String resourceUUID; + + /** The artifacts. */ + private Collection artifacts; + + /** + * Gets the resource instance name. + * + * @return the resource instance name + */ + public String getResourceInstanceName() { + return resourceInstanceName; + } + + /** + * Gets the resource name. + * + * @return the resource name + */ + public String getResourceName() { + return resourceName; + } + + /** + * Gets the resource invariant UUID. + * + * @return the resource invariant UUID + */ + public String getResourceInvariantUUID() { + return resourceInvariantUUID; + } + + /** + * Gets the resource version. + * + * @return the resource version + */ + public String getResourceVersion() { + return resourceVersion; + } + + /** + * Gets the resoucre type. + * + * @return the resoucre type + */ + public String getResoucreType() { + return resourceType; + } + + /** + * Gets the resource UUID. + * + * @return the resource UUID + */ + public String getResourceUUID() { + return resourceUUID; + } + + /** + * Gets the artifacts. + * + * @return the artifacts + */ + public Collection getArtifacts() { + return artifacts; + } + + /** + * Sets the resource instance name. + * + * @param resourceInstanceName the new resource instance name + */ + public void setResourceInstanceName(String resourceInstanceName) { + this.resourceInstanceName = resourceInstanceName; + } + + /** + * Sets the resource name. + * + * @param resourceName the new resource name + */ + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + + /** + * Sets the resource invariant UUID. + * + * @param resourceInvariantUUID the new resource invariant UUID + */ + public void setResourceInvariantUUID(String resourceInvariantUUID) { + this.resourceInvariantUUID = resourceInvariantUUID; + } + + /** + * Sets the resource version. + * + * @param resourceVersion the new resource version + */ + public void setResourceVersion(String resourceVersion) { + this.resourceVersion = resourceVersion; + } + + /** + * Sets the resoucre type. + * + * @param resourceType the new resoucre type + */ + public void setResoucreType(String resourceType) { + this.resourceType = resourceType; + } + + /** + * Sets the resource UUID. + * + * @param resourceUUID the new resource UUID + */ + public void setResourceUUID(String resourceUUID) { + this.resourceUUID = resourceUUID; + } + + /** + * Sets the artifacts. + * + * @param artifacts the new artifacts + */ + public void setArtifacts(Collection artifacts) { + this.artifacts = artifacts; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Capability.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Capability.java new file mode 100755 index 000000000..21a50d3bb --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Capability.java @@ -0,0 +1,140 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Collection; +import java.util.Map; + +/** + * The Class Capability. + */ +public class Capability { + + /** The type. */ + private String type; //FIXME: Make an enumeration? + + /** The description. */ + private String description; + + /** The occurrences. */ + private Collection occurrences; //FIXME: Make an enumeration? + + /** The properties. */ + private Map properties; + + /** The valid source types. */ + private Collection valid_source_types; //FIXME: Make an enumeration? + + /** + * Instantiates a new capability. + */ + public Capability() {} + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the occurrences. + * + * @return the occurrences + */ + public Collection getOccurrences() { + return occurrences; + } + + /** + * Gets the properties. + * + * @return the properties + */ + public Map getProperties() { + return properties; + } + + /** + * Gets the valid source types. + * + * @return the valid source types + */ + public Collection getValid_source_types() { + return valid_source_types; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the occurrences. + * + * @param occurrences the new occurrences + */ + public void setOccurrences(Collection occurrences) { + this.occurrences = occurrences; + } + + /** + * Sets the properties. + * + * @param properties the properties + */ + public void setProperties(Map properties) { + this.properties = properties; + } + + /** + * Sets the valid source types. + * + * @param valid_source_types the new valid source types + */ + public void setValid_source_types(Collection valid_source_types) { + this.valid_source_types = valid_source_types; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Constraint.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Constraint.java new file mode 100755 index 000000000..b68b51a09 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Constraint.java @@ -0,0 +1,199 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; +import java.util.List; +import java.util.ArrayList; + +/** + * The Class Constraint. + */ + +public class Constraint { + private List valid_values; + private Object equal; + private Object greater_than; + private Object greater_or_equal; + private Object less_than; + private Object less_or_equal; + private List in_range; + private Object length; + private Object min_length; + private Object max_length; + + /** + * Instantiates a new Constraint. + */ + public Constraint() { + valid_values = new ArrayList(); + in_range = new ArrayList(); + } + + /** + * Gets the valid_values. + * + * @return the valid_values + */ + public List getvalid_values() { + return valid_values; + } + /** + * Gets equal. + * + * @return equal + */ + public Object getEqual() { + return equal; + } + /** + * Gets greater_than. + * + * @return greater_than + */ + public Object getGreater_than() { + return greater_than; + } + /** + * Gets greater_or_equal. + * + * @return greater_or_equal + */ + public Object getGreater_or_equal() { + return greater_or_equal; + } + /** + * Gets less_than. + * + * @return less_than + */ + public Object getLess_than() { + return less_than; + } + /** + * Gets less_or_equal. + * + * @return less_or_equal + */ + public Object getLess_or_equal() { + return less_or_equal; + } + /** + * Gets in_range. + * + * @return in_range + */ + public List getIn_range() { + return in_range; + } + /** + * Gets length. + * + * @return length + */ + public Object getLength() { + return length; + } + /** + * Gets min_length. + * + * @return min_length + */ + public Object getMin_length() { + return min_length; + } + /** + * Gets max_length. + * + * @return max_length + */ + public Object getMax_length() { + return max_length; + } + /** + * Sets the valid_values. + * + * @param op the new valid_values + */ + public void setvalid_values(List vlist) { + this.valid_values = vlist; + } + /** + * Sets equal. + * + * @param e the new equal + */ + public void setEqual(Object e) { + this.equal = e; + } + /** + * Sets greater_than. + * + * @param e the new greater_than + */ + public void setGreater_than(Object e) { + this.greater_than = e; + } + /** + * Sets less_than. + * + * @param e the new less_than + */ + public void setLess_than(Object e) { + this.less_than = e; + } + /** + * Sets in_range. + * + * @param e the new in_range + */ + public void setIn_range(List e) { + this.in_range = e; + } + /** + * Sets length. + * + * @param e the length + */ + public void setLength(Object e) { + this.length = e; + } + /** + * Sets min_length. + * + * @param e the min_length + */ + public void setMin_length(Object e) { + this.min_length = e; + } + /** + * Sets max_length. + * + * @param e the max_length + */ + public void setMax_length(Object e) { + this.max_length = e; + } + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "valid_values=" + valid_values; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Group.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Group.java new file mode 100755 index 000000000..275db3c0d --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Group.java @@ -0,0 +1,135 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Collection; +import java.util.Map; + +/** + * The Class Group. + */ +public class Group { + + /** The type. */ + private String type; + + /** The members. */ + private Collection members; + + /** The metadata. */ + private ToscaMetadata metadata; + + /** The vf module type. */ + private String vf_module_type; + + /** The properties. */ + private Map properties; + + /** + * Gets the metadata. + * + * @return the metadata + */ + public ToscaMetadata getMetadata() { + return metadata; + } + + /** + * Sets the metadata. + * + * @param metadata the new metadata + */ + public void setMetadata(ToscaMetadata metadata) { + this.metadata = metadata; + } + + /** + * Gets the members. + * + * @return the members + */ + public Collection getMembers() { + return members; + } + + /** + * Sets the members. + * + * @param members the new members + */ + public void setMembers(Collection members) { + this.members = members; + } + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Gets the vf module type. + * + * @return the vf module type + */ + public String getvf_module_type() { + return vf_module_type; + } + + /** + * Sets the vf module type. + * + * @param vf_module_type the new vf module type + */ + public void setvf_module_type(String vf_module_type) { + this.vf_module_type = vf_module_type; + } + + /** + * Gets the properties. + * + * @return the properties + */ + public Map getProperties() { + return properties; + } + + /** + * Sets the properties. + * + * @param properties the properties + */ + public void setProperties(Map properties) { + this.properties = properties; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Import.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Import.java new file mode 100755 index 000000000..33f317579 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Import.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +/** + * The Class Import. + */ +public class Import { + + /** The file. */ + private String file; + + /** + * Gets the file. + * + * @return the file + */ + public String getFile() { + return file; + } + + /** + * Sets the file. + * + * @param file the new file + */ + public void setFile(String file) { + this.file = file; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Input.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Input.java new file mode 100755 index 000000000..f98820716 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Input.java @@ -0,0 +1,166 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.List; +import java.util.ArrayList; + +// TODO: Auto-generated Javadoc +/** + * The Class Input. + */ +public class Input { + + /** The type. */ + private String type; + + /** The description. */ + private String description; + + /** The default. */ + private Object _default; + + /** The entry schema. */ + private Input entry_schema; + + /** The constraints */ + private List constraints; + + /** The required field. If not set, the default is true */ + private boolean required = true; + + /** + * Instantiates a new input. + */ + public Input() { + constraints = new ArrayList(); + } + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + /** + * Gets the required field. + * + * @return the required field + */ + public boolean getRequired() { + return required; + } + /** + * Sets the required value. + * + * @param required the new required value + */ + public void setRequired(boolean required) { + this.required = required; + } + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Gets the default. + * + * @return the default + */ + public Object getDefault() { + return _default; + } + + /** + * Sets the default. + * + * @param _default the new default + */ + public void setDefault(Object _default) { + this._default = _default; + } + + /** + * Gets the entry schema. + * + * @return the entry schema + */ + public Input getentry_schema() { + return entry_schema; + } + /** + * Sets the entry schema. + * + * @param the entry schema + */ + public void setentry_schema(Input s) { + this.entry_schema = s; + } + /** + * Sets the constraints. + * + * @param c the new constraints + */ + public void setConstraints(List c) { + this.constraints = c; + } + /** + * Gets the constraints + * + * @return the constraints + */ + public List getConstraints() { + return constraints; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "type=" + type + ",description=" + description + ",default=" + _default; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/NodeTemplate.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/NodeTemplate.java new file mode 100755 index 000000000..73eead93f --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/NodeTemplate.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Map; +import java.util.HashMap; + +/** + * The Class NodeTemplate. + */ +public class NodeTemplate { + + /** The type. */ + private String type; + + /** The metadata. */ + private ToscaMetadata metadata; + + /** The properties. */ + private Map properties; //HEAT? + + /** The requirements. */ + private Object requirements; + + public NodeTemplate () { + properties = new HashMap(); + } + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Gets the metadata. + * + * @return the metadata + */ + public ToscaMetadata getMetadata() { + return metadata; + } + + /** + * Sets the metadata. + * + * @param metadata the new metadata + */ + public void setMetadata(ToscaMetadata metadata) { + this.metadata = metadata; + } + + /** + * Gets the properties. + * + * @return the properties + */ + public Map getProperties() { + return properties; + } + + /** + * Sets the properties. + * + * @param properties the properties + */ + public void setProperties(Map properties) { + this.properties = properties; + } + + /** + * Gets the requirements. + * + * @return the requirements + */ + public Object getRequirements() { + return requirements; + } + + /** + * Sets the requirements. + * + * @param requirements the new requirements + */ + public void setRequirements(Object requirements) { + this.requirements = requirements; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Property.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Property.java new file mode 100755 index 000000000..c8f048ced --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Property.java @@ -0,0 +1,157 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +/** + * The Class Property. + */ +public class Property { + + /** The type. */ + private String type; + + /** The description. */ + private String description; + + /** The entry schema. */ + private Schema entry_schema; + + /** The default. */ + private String _default; + + /** The required. */ + private boolean required; + + /** + * Instantiates a new property. + */ + private Property() {} + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the entry schema. + * + * @return the entry schema + */ + public Schema getEntry_schema() { + return entry_schema; + } + + /** + * Gets the default. + * + * @return the default + */ + public String get_default() { + return _default; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the entry schema. + * + * @param entry_schema the new entry schema + */ + public void setEntry_schema(Schema entry_schema) { + this.entry_schema = entry_schema; + } + + /** + * Sets the default. + * + * @param _default the new default + */ + public void set_default(String _default) { + this._default = _default; + } + + /** + * Gets the default. + * + * @return the default + */ + public String getDefault() { + return _default; + } + + /** + * Checks if is required. + * + * @return true, if is required + */ + public boolean isRequired() { + return required; + } + + /** + * Sets the default. + * + * @param _default the new default + */ + public void setDefault(String _default) { + this._default = _default; + } + + /** + * Sets the required. + * + * @param required the new required + */ + public void setRequired(boolean required) { + this.required = required; + } + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Requirement.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Requirement.java new file mode 100755 index 000000000..fce41ec6e --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Requirement.java @@ -0,0 +1,120 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Collection; + +/** + * The Class Requirement. + */ +public class Requirement { + + /** The occurrences. */ + private Collection occurrences; + + /** The capability. */ + private String capability; + + /** The node. */ + private String node; + + /** The relationship. */ + private String relationship; + + /** + * Instantiates a new requirement. + */ + private Requirement() {} + + /** + * Gets the occurrences. + * + * @return the occurrences + */ + public Collection getOccurrences() { + return occurrences; + } + + /** + * Gets the capability. + * + * @return the capability + */ + public String getCapability() { + return capability; + } + + /** + * Gets the node. + * + * @return the node + */ + public String getNode() { + return node; + } + + /** + * Gets the relationship. + * + * @return the relationship + */ + public String getRelationship() { + return relationship; + } + + /** + * Sets the occurrences. + * + * @param occurrences the new occurrences + */ + public void setOccurrences(Collection occurrences) { + this.occurrences = occurrences; + } + + /** + * Sets the capability. + * + * @param capability the new capability + */ + public void setCapability(String capability) { + this.capability = capability; + } + + /** + * Sets the node. + * + * @param node the new node + */ + public void setNode(String node) { + this.node = node; + } + + /** + * Sets the relationship. + * + * @param relationship the new relationship + */ + public void setRelationship(String relationship) { + this.relationship = relationship; + } + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Schema.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Schema.java new file mode 100755 index 000000000..bd3a2f0a5 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/Schema.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +/** + * The Class Schema. + */ +public class Schema { + + /** The type. */ + public String type; + + /** + * Instantiates a new schema. + */ + public Schema() {} + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/SubstitutionMappings.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/SubstitutionMappings.java new file mode 100755 index 000000000..026f29bbe --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/SubstitutionMappings.java @@ -0,0 +1,101 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.HashMap; +import java.util.Map; + +/** + * The Class SubstitutionMappings. + */ +public class SubstitutionMappings { + + /** The node type. */ + private String node_type; + + /** The capabilities. */ + private Map capabilities; + + /** The requirements. */ + private Map requirements; + + /** + * Instantiates a new substitution mappings. + */ + public SubstitutionMappings() { + capabilities = new HashMap (); + requirements = new HashMap (); + } + + /** + * Gets the node type. + * + * @return the node type + */ + public String getnode_type() { + return node_type; + } + + /** + * Sets the node type. + * + * @param node_type the new node type + */ + public void setnode_type(String node_type) { + this.node_type = node_type; + } + + /** + * Gets the capabilities. + * + * @return the capabilities + */ + public Map getCapabilities() { + return capabilities; + } + + /** + * Sets the capabilities. + * + * @param capabilities the capabilities + */ + public void setCapabilities(Map capabilities) { + this.capabilities = capabilities; + } + + /** + * Gets the requirements. + * + * @return the requirements + */ + public Map getRequirements() { + return requirements; + } + + /** + * Sets the requirements. + * + * @param requirements the requirements + */ + public void setRequirements(Map requirements) { + this.requirements = requirements; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/TopologyTemplate.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/TopologyTemplate.java new file mode 100755 index 000000000..ce7ce5755 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/TopologyTemplate.java @@ -0,0 +1,124 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.HashMap; +import java.util.Map; + +/** + * The Class TopologyTemplate. + */ +public class TopologyTemplate { + + /** The substitution mappings. */ + private SubstitutionMappings substitution_mappings; + + /** The inputs. */ + private Map inputs; + + /** The node templates. */ + private Map node_templates; + + /** The groups. */ + private Map groups; + + /** + * Instantiates a new topology template. + */ + public TopologyTemplate() { + substitution_mappings = new SubstitutionMappings(); + inputs = new HashMap (); + node_templates = new HashMap (); + groups = new HashMap (); + } + + /** + * Gets the substitution mappings. + * + * @return the substitution mappings + */ + public SubstitutionMappings getsubstitution_mappings() { + return this.substitution_mappings; + } + + /** + * Sets the substitution mappings. + * + * @param substitution_mappings the new substitution mappings + */ + public void setsubstitution_mappings(SubstitutionMappings substitution_mappings) { + this.substitution_mappings = substitution_mappings; + } + + /** + * Gets the inputs. + * + * @return the inputs + */ + public Map getInputs() { + return inputs; + } + + /** + * Sets the inputs. + * + * @param inputs the inputs + */ + public void setInputs(Map inputs) { + this.inputs = inputs; + } + + /** + * Gets the node templates. + * + * @return the node templates + */ + public Map getnode_templates() { + return node_templates; + } + + /** + * Setnode templates. + * + * @param node_templates the node templates + */ + public void setnode_templates(Map node_templates) { + this.node_templates = node_templates; + } + + /** + * Gets the groups. + * + * @return the groups + */ + public Map getGroups() { + return groups; + } + + /** + * Sets the groups. + * + * @param groups the groups + */ + public void setGroups(Map groups) { + this.groups = groups; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaCsar.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaCsar.java new file mode 100755 index 000000000..cca4ae7c2 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaCsar.java @@ -0,0 +1,101 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Collection; +import java.util.LinkedList; + +/** + * The Class ToscaCsar. + */ +public class ToscaCsar { + + /** The parent. */ + private final ToscaModel parent; + + /** The children. */ + private final Collection children; + + /** + * The Class Builder. + */ + public static class Builder { + + /** The parent. */ + private final ToscaModel parent; + + /** The children. */ + private Collection children = new LinkedList (); + + /** + * Instantiates a new builder. + * + * @param parent the parent + */ + public Builder(ToscaModel parent) { + this.parent = parent; + } + + /** + * Adds the vnf. + * + * @param child the child + * @return the builder + */ + public Builder addVnf(ToscaModel child) { + children.add(child); + return this; + } + + /** + * Builds the. + * + * @return the tosca csar + */ + public ToscaCsar build() { + return new ToscaCsar(this); + } + } + + /** + * Instantiates a new tosca csar. + * + * @param builder the builder + */ + public ToscaCsar(Builder builder) { + this.parent = builder.parent; + this.children = builder.children; + } + + /** + * Gets the parent. + * + * @return the parent + */ + public ToscaModel getParent() { return parent; } + + /** + * Gets the children. + * + * @return the children + */ + public Collection getChildren() { return children; } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMeta.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMeta.java new file mode 100755 index 000000000..66938372e --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMeta.java @@ -0,0 +1,122 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +import org.openecomp.vid.asdc.AsdcCatalogException; + +/** + * The Class ToscaMeta. + */ +public class ToscaMeta { + + /** The metadata. */ + private final Map metadata; + + /** + * Instantiates a new tosca meta. + * + * @param builder the builder + * @throws IOException Signals that an I/O exception has occurred. + * @throws AsdcCatalogException the asdc catalog exception + */ + private ToscaMeta(Builder builder) throws IOException, AsdcCatalogException { + metadata = new HashMap (); + + read(builder.inputStream); + } + + /** + * The Class Builder. + */ + public static class Builder { + + /** The input stream. */ + private final InputStream inputStream; + + /** + * Instantiates a new builder. + * + * @param inputStream the input stream + */ + public Builder(InputStream inputStream) { + this.inputStream = inputStream; + } + + /** + * Builds the. + * + * @return the tosca meta + * @throws IOException Signals that an I/O exception has occurred. + * @throws AsdcCatalogException the asdc catalog exception + */ + public ToscaMeta build() throws IOException, AsdcCatalogException { + return new ToscaMeta(this); + } + } + + /** + * Gets the. + * + * @param property the property + * @return the string + */ + public String get(String property) { + return metadata.get(property); + } + + /** + * Read. + * + * @param inputStream the input stream + * @throws IOException Signals that an I/O exception has occurred. + * @throws AsdcCatalogException the asdc catalog exception + */ + private void read(InputStream inputStream) throws IOException, AsdcCatalogException { + + final BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); + + String line; + + try { + while ((line = br.readLine()) != null) { + final String[] entry = line.split(":"); + + if (entry.length != 2) throw new AsdcCatalogException("TOSCA.meta file cannot be parsed (more than 1 colon found on a single line"); + if (!entry[1].startsWith(" ")) throw new AsdcCatalogException("TOSCA.meta file cannot be parsed (: not immediately followed by ' ')"); + + metadata.put(entry[0], entry[1].substring(1)); + } + } catch (IOException e) { + metadata.clear(); + throw e; + } catch (AsdcCatalogException e) { + metadata.clear(); + throw e; + } + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMetadata.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMetadata.java new file mode 100755 index 000000000..d42c1f150 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaMetadata.java @@ -0,0 +1,461 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +/** + * The Class ToscaMetadata. + */ +public class ToscaMetadata { + + /** The template name. */ + private String template_name; + + /** The invariant UUID. */ + private String invariantUUID; + + /** The customization UUID. */ + private String customizationUUID; + + /** The uuid. */ + private String uuid; + + /** The version. */ + private String version; + + /** The name. */ + private String name; + + /** The description. */ + private String description; + + /** The category. */ + private String category; + + /** The subcategory. */ + private String subcategory; + + /** The type. */ + private String type; + + /** The resource vendor. */ + private String resourceVendor; + + /** The resource vendor release. */ + private String resourceVendorRelease; + + /** The service ecomp naming. */ + private String serviceEcompNaming; + + /** The ecomp generated naming - duplicate for serviceEcompNaming */ + private boolean ecompGeneratedNaming; + + /** The naming policy */ + private String namingPolicy; + + /** The service homing. */ + private boolean serviceHoming; + + /** The vf module model name. */ + //ToscaMetadata for VF Modules + private String vfModuleModelName; + + /** The vf module model invariant UUID. */ + private String vfModuleModelInvariantUUID; + + /** The vf module model customization UUID. */ + private String vfModuleModelCustomizationUUID; + + /** The vf module model UUID. */ + private String vfModuleModelUUID; + + /** The vf module model version. */ + private String vfModuleModelVersion; + + /** + * Instantiates a new tosca metadata. + */ + public ToscaMetadata() {} + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Gets the invariant UUID. + * + * @return the invariant UUID + */ + public String getInvariantUUID() { + return invariantUUID; + } + /** + * Gets the customization UUID. + * + * @return the customization UUID + */ + public String getCustomizationUUID() { + return customizationUUID; + } + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUUID() { + return uuid; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the category. + * + * @return the category + */ + public String getCategory() { + return category; + } + + /** + * Gets the subcategory. + * + * @return the subcategory + */ + public String getSubcategory() { + return subcategory; + } + + /** + * Gets the resource vendor. + * + * @return the resource vendor + */ + public String getResourceVendor() { + return resourceVendor; + } + + /** + * Gets the resource vendor release. + * + * @return the resource vendor release + */ + public String getResourceVendorRelease() { + return resourceVendorRelease; + } + + /** + * Returns the value of service ecomp naming. + * + * @return serviceEcompNaming + */ + public String getServiceEcompNaming() { + return serviceEcompNaming; + } + /** + * Returns the value of the naming policy. + * + * @return namingPolicy + */ + public String getNamingPolicy() { + return namingPolicy; + } + /** + * Checks if is service homing. + * + * @return true, if is service homing + */ + public boolean isServiceHoming() { + return serviceHoming; + } + /** + * Checks if is ecomp generated naming. + * + * @return true, if ecomp generated naming is true + */ + public boolean isEcompGeneratedNaming() { + return ecompGeneratedNaming; + } + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Sets the invariant UUID. + * + * @param invariantUUID the new invariant UUID + */ + public void setInvariantUUID(String invariantUUID) { + this.invariantUUID = invariantUUID; + } + /** + * Sets the naming policy. + * + * @param namingPolicy the new naming policy + */ + public void setNamingPolicy(String namingPolicy) { + this.namingPolicy = namingPolicy; + } + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUUID(String uuid) { + this.uuid = uuid; + } + /** + * Sets the customization uuid. + * + * @param u the new customization uuid + */ + public void setCustomizationUUID(String u) { + this.customizationUUID = u; + } + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the category. + * + * @param category the new category + */ + public void setCategory(String category) { + this.category = category; + } + + /** + * Sets the service ecomp naming. + * + * @param serviceEcompNaming the new service ecomp naming + */ + public void setServiceEcompNaming(String serviceEcompNaming) { + this.serviceEcompNaming = serviceEcompNaming; + } + + /** + * Sets the service homing. + * + * @param serviceHoming the new service homing + */ + public void setServiceHoming(boolean serviceHoming) { + this.serviceHoming = serviceHoming; + } + /** + * Sets the ecomp generated naming. + * + * @param ecompGeneratedNaming the new ecomp generated naming + */ + public void setEcompGeneratedNaming(boolean ecompGeneratedNaming) { + this.ecompGeneratedNaming = ecompGeneratedNaming; + } + /** + * Gets the template name. + * + * @return the template name + */ + public String gettemplate_name() { + return template_name; + } + + /** + * Sets the template name. + * + * @param template_name the new template name + */ + public void settemplate_name(String template_name) { + this.template_name = template_name; + } + + /** + * Sets the subcategory. + * + * @param subcategory the new subcategory + */ + public void setSubcategory(String subcategory) { + this.subcategory = subcategory; + } + + /** + * Sets the resource vendor. + * + * @param resourceVendor the new resource vendor + */ + public void setResourceVendor(String resourceVendor) { + this.resourceVendor = resourceVendor; + } + + /** + * Sets the resource vendor release. + * + * @param resourceVendorRelease the new resource vendor release + */ + public void setResourceVendorRelease(String resourceVendorRelease) { + this.resourceVendorRelease = resourceVendorRelease; + } + + /** + * Gets the vf module model name. + * + * @return the vf module model name + */ + public String getVfModuleModelName() { + return vfModuleModelName; + } + + /** + * Sets the vf module model name. + * + * @param vfModuleModelName the new vf module model name + */ + public void setVfModuleModelName(String vfModuleModelName) { + this.vfModuleModelName = vfModuleModelName; + } + + /** + * Gets the vf module model invariant UUID. + * + * @return the vf module model invariant UUID + */ + public String getVfModuleModelInvariantUUID() { + return vfModuleModelInvariantUUID; + } + + /** + * Sets the vf module model invariant UUID. + * + * @param vfModuleModelInvariantUUID the new vf module model invariant UUID + */ + public void setVfModuleModelInvariantUUID(String vfModuleModelInvariantUUID) { + this.vfModuleModelInvariantUUID = vfModuleModelInvariantUUID; + } + + /** + * Gets the vf module model UUID. + * + * @return the vf module model UUID + */ + public String getVfModuleModelUUID() { + return vfModuleModelUUID; + } + + /** + * Sets the vf module model UUID. + * + * @param vfModuleModelUUID the new vf module model UUID + */ + public void setVfModuleModelUUID(String vfModuleModelUUID) { + this.vfModuleModelUUID = vfModuleModelUUID; + } + + /** + * Gets the vf module model version. + * + * @return the vf module model version + */ + public String getVfModuleModelVersion() { + return vfModuleModelVersion; + } + + /** + * Sets the vf module model version. + * + * @param vfModuleModelVersion the new vf module model version + */ + public void setVfModuleModelVersion(String vfModuleModelVersion) { + this.vfModuleModelVersion = vfModuleModelVersion; + } + /** + * Sets the vf module customization uuid. + * + * @param u the new vf module model customization uuid + */ + public void setVfModuleModelCustomizationUUID(String u) { + this.vfModuleModelCustomizationUUID = u; + } + /** + * Gets the vf module model customization uuid. + * + * @return the vf module model customization uuid + */ + public String getVfModuleModelCustomizationUUID() { + + return vfModuleModelCustomizationUUID; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaModel.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaModel.java new file mode 100755 index 000000000..c9e42f291 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/beans/tosca/ToscaModel.java @@ -0,0 +1,166 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.beans.tosca; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.Map; + +/** + * The Class ToscaModel. + */ +public class ToscaModel { + + /** The tosca definitions version. */ + private String tosca_definitions_version; + + /** The description. */ + private String description; + + /** The metadata. */ + private ToscaMetadata metadata; + + /** The topology template. */ + private TopologyTemplate topology_template; + + /** The imports. */ + private Collection>> imports; + + /** The node types. */ + private Map node_types; + + /** + * Instantiates a new tosca model. + */ + public ToscaModel() { + metadata = new ToscaMetadata(); + topology_template = new TopologyTemplate(); + imports = new LinkedList>> (); + } + + /** + * Gets the metadata. + * + * @return the metadata + */ + public ToscaMetadata getMetadata() { + return metadata; + } + + /** + * Sets the metadata. + * + * @param metadata the new metadata + */ + public void setMetadata(ToscaMetadata metadata) { + this.metadata = metadata; + } + + /** + * Gets the tosca definitions version. + * + * @return the tosca definitions version + */ + public String gettosca_definitions_version() { + return tosca_definitions_version; + } + + /** + * Sets the tosca definitions version. + * + * @param tosca_definitions_version the new tosca definitions version + */ + public void settosca_definitions_version(String tosca_definitions_version) { + this.tosca_definitions_version = tosca_definitions_version; + } + + /** + * Gets the topology template. + * + * @return the topology template + */ + public TopologyTemplate gettopology_template() { + return topology_template; + } + + /** + * Sets the topology template. + * + * @param topology_template the new topology template + */ + public void settopology_template(TopologyTemplate topology_template) { + this.topology_template = topology_template; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Gets the imports. + * + * @return the imports + */ + public Collection>> getImports() { + return imports; + } + + /** + * Sets the imports. + * + * @param imports the imports + */ + public void setImports(Collection>> imports) { + this.imports = imports; + } + + /** + * Gets the node types. + * + * @return the node types + */ + public Map getnode_types() { + return node_types; + } + + /** + * Setnode types. + * + * @param node_types the node types + */ + public void setnode_types(Map node_types) { + this.node_types = node_types; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/memory/InMemoryAsdcClient.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/memory/InMemoryAsdcClient.java new file mode 100755 index 000000000..c5134bfca --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/memory/InMemoryAsdcClient.java @@ -0,0 +1,372 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.memory; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Collection; +import java.util.LinkedList; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.zip.ZipFile; + +import org.codehaus.jackson.JsonParseException; +import org.codehaus.jackson.map.JsonMappingException; +import org.codehaus.jackson.map.ObjectMapper; +import org.json.JSONArray; +import org.json.JSONObject; +import org.yaml.snakeyaml.Yaml; + +import org.openecomp.vid.asdc.AsdcCatalogException; +import org.openecomp.vid.asdc.AsdcClient; +import org.openecomp.vid.asdc.beans.Artifact; +import org.openecomp.vid.asdc.beans.Resource; +import org.openecomp.vid.asdc.beans.Service; +import org.openecomp.vid.asdc.beans.tosca.ToscaCsar; +import org.openecomp.vid.asdc.beans.tosca.ToscaMeta; +import org.openecomp.vid.asdc.beans.tosca.ToscaModel; + +/** + * The Class InMemoryAsdcClient. + */ +public class InMemoryAsdcClient implements AsdcClient { + + /** The catalog. */ + private final JSONObject catalog; + + /** The mapper. */ + private final ObjectMapper mapper; + + /** + * The Class Builder. + */ + public static class Builder { + + /** The catalog. */ + private JSONObject catalog = new JSONObject() + .put("resources", new JSONObject()) + .put("services", new JSONObject()); + + /** The mapper. */ + private ObjectMapper mapper = new ObjectMapper(); + + /** + * Instantiates a new builder. + */ + public Builder() {} + + /** + * Catalog. + * + * @param catalog the catalog + * @return the builder + */ + public Builder catalog(JSONObject catalog) { + this.catalog = catalog; + return this; + } + + /** + * Mapper. + * + * @param mapper the mapper + * @return the builder + */ + public Builder mapper(ObjectMapper mapper) { + this.mapper = mapper; + return this; + } + + /** + * Builds the. + * + * @return the in memory sdc client + */ + public InMemoryAsdcClient build() { + return new InMemoryAsdcClient(this); + } + } + + /** + * Instantiates a new in memory sdc client. + * + * @param builder the builder + */ + private InMemoryAsdcClient(Builder builder) { + catalog = builder.catalog; + mapper = builder.mapper; + } + + /** + * Gets the catalog. + * + * @return the catalog + */ + private JSONObject getCatalog() { + return catalog; + } + + /** + * Gets the mapper. + * + * @return the mapper + */ + private ObjectMapper getMapper() { + return mapper; + } + + /** + * Convert. + * + * @param the generic type + * @param json the json + * @param clazz the clazz + * @return the t + * @throws AsdcCatalogException the sdc catalog exception + */ + private T convert(JSONObject json, Class clazz) throws AsdcCatalogException { + try { + return getMapper().readValue(json.toString(), clazz); + } catch (JsonParseException e) { + throw new AsdcCatalogException("Failed to parse SDC response (bad data)", e); + } catch (JsonMappingException e) { + throw new AsdcCatalogException("Failed to map SDC response to internal VID data structure(s)", e); + } catch (IOException e) { + throw new AsdcCatalogException("Failed to get a response from SDC", e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResource(java.util.UUID) + */ + public Resource getResource(UUID uuid) throws AsdcCatalogException { + final JSONObject resource = getCatalog().getJSONObject("resources") + .getJSONObject(uuid.toString()); + return convert(resource, Resource.class); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResources() + */ + public Collection getResources() throws AsdcCatalogException { + final Collection resources = new LinkedList (); + + for (String key : getCatalog().getJSONObject("resources").keySet()) { + final JSONObject json = getCatalog().getJSONObject("resources").getJSONObject(key); + final Resource resource = convert(json, Resource.class); + resources.add(resource); + } + + return resources; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResources(java.util.Map) + */ + public Collection getResources(Map filter) throws AsdcCatalogException { + final Collection resources = new LinkedList (); + + for (String key : getCatalog().getJSONObject("resources").keySet()) { + final JSONObject json = getCatalog().getJSONObject("resources").getJSONObject(key); + + boolean filterMatch = true; + + for (Entry entry : filter.entrySet()) { + for (int i = 0; i < entry.getValue().length; i++) { + if (!json.getString(entry.getKey()).equals(entry.getValue()[i])) { + filterMatch = false; + break; + } + } + } + + if (filterMatch) resources.add(convert(json, Resource.class)); + } + + return resources; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getService(java.util.UUID) + */ + public Service getService(UUID uuid) throws AsdcCatalogException { + final JSONObject service = getCatalog().getJSONObject("services") + .getJSONObject(uuid.toString()); + return convert(service, Service.class); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServices() + */ + public Collection getServices() throws AsdcCatalogException { + final Collection services = new LinkedList (); + + for (String key : getCatalog().getJSONObject("services").keySet()) { + final JSONObject json = getCatalog().getJSONObject("services").getJSONObject(key); + final Service service = convert(json, Service.class); + services.add(service); + } + + return services; + } + + /* (non-Javadoc) + * @see org.openecompt.vid.asdc.AsdcClient#getServices(java.util.Map) + */ + public Collection getServices(Map filter) throws AsdcCatalogException { + final Collection services = new LinkedList (); + + for (String key : getCatalog().getJSONObject("services").keySet()) { + final JSONObject json = getCatalog().getJSONObject("services").getJSONObject(key); + + boolean filterMatch = true; + + for (Entry entry : filter.entrySet()) { + for (int i = 0; i < entry.getValue().length; i++) { + if (!json.getString(entry.getKey()).equals(entry.getValue()[i])) { + filterMatch = false; + break; + } + } + } + + if (filterMatch) services.add(convert(json, Service.class)); + } + + return services; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID) + */ + public Artifact getResourceArtifact(UUID resourceUuid, UUID artifactUuid) throws AsdcCatalogException { + final JSONArray artifacts = getCatalog().getJSONObject("resources") + .getJSONObject(resourceUuid.toString()) + .getJSONArray("artifacts"); + + for (int i = 0; i < artifacts.length(); i++) { + final JSONObject artifact = artifacts.getJSONObject(i); + + if (artifact.getString("artifactUUID").equals(artifactUuid.toString())) { + return convert(artifact, Artifact.class); + } + } + + return null; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID) + */ + public Artifact getServiceArtifact(UUID serviceUuid, UUID artifactUuid) throws AsdcCatalogException { + final JSONArray artifacts = getCatalog().getJSONObject("services") + .getJSONObject(serviceUuid.toString()) + .getJSONArray("artifacts"); + + for (int i = 0; i < artifacts.length(); i++) { + final JSONObject artifact = artifacts.getJSONObject(i); + + if (artifact.getString("artifactUUID").equals(artifactUuid.toString())) { + return convert(artifact, Artifact.class); + } + } + + return null; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID) + */ + public ToscaCsar getResourceToscaModel(UUID resourceUuid) throws AsdcCatalogException { + final String toscaModelURL = getCatalog().getJSONObject("resources") + .getJSONObject(resourceUuid.toString()) + .getString("toscaModelURL"); + + + final InputStream toscaModelStream = getClass().getClassLoader().getResourceAsStream(toscaModelURL); + + if (toscaModelStream == null) return null; + + return getToscaModel(toscaModelStream); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID) + */ + public ToscaCsar getServiceToscaModel(UUID serviceUuid) throws AsdcCatalogException { + final String toscaModelURL = getCatalog().getJSONObject("services") + .getJSONObject(serviceUuid.toString()) + .getString("toscaModelURL"); + + final InputStream toscaModelStream = getClass().getClassLoader().getResourceAsStream(toscaModelURL); + + if (toscaModelStream == null) return null; + + return getToscaModel(toscaModelStream); + } + + /** + * Gets the tosca model. + * + * @param csarInputStream the csar input stream + * @return the tosca model + * @throws AsdcCatalogException the asdc catalog exception + */ + private ToscaCsar getToscaModel(InputStream csarInputStream) throws AsdcCatalogException { + final Path csarFile; + + try { + csarFile = Files.createTempFile("csar", ".zip"); + Files.copy(csarInputStream, csarFile, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new AsdcCatalogException("Caught IOException while creating CSAR", e); + } + + try (final ZipFile csar = new ZipFile(csarFile.toFile())) { + + final InputStream toscaMetaStream = csar.getInputStream(csar.getEntry("TOSCA-Metadata/TOSCA.meta")); + final ToscaMeta toscaMeta = new ToscaMeta.Builder(toscaMetaStream).build(); + final String entryDefinitions = toscaMeta.get("Entry-Definitions"); + final InputStream toscaParentEntryYamlStream = csar.getInputStream(csar.getEntry(entryDefinitions)); + + final Yaml yaml = new Yaml(); + final ToscaModel parentModel = yaml.loadAs(toscaParentEntryYamlStream, ToscaModel.class); + + final ToscaCsar.Builder csarBuilder = new ToscaCsar.Builder(parentModel); + + for (Map> imports : parentModel.getImports()) { + for (Entry> entry : imports.entrySet()) { + final InputStream toscaChildEntryYamlStream = csar.getInputStream(csar.getEntry("Definitions/" + entry.getValue().get("file"))); + final ToscaModel childModel = yaml.loadAs(toscaChildEntryYamlStream, ToscaModel.class); + csarBuilder.addVnf(childModel); + } + } + + return csarBuilder.build(); + } catch (IOException e) { + throw new AsdcCatalogException("Caught IOException while processing CSAR", e); + } + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/asdc/rest/RestfulAsdcClient.java b/vid-app-common/src/main/java/org/openecomp/vid/asdc/rest/RestfulAsdcClient.java new file mode 100755 index 000000000..26d45cc7e --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/asdc/rest/RestfulAsdcClient.java @@ -0,0 +1,462 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.asdc.rest; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.logging.Logger; +import java.util.zip.ZipFile; + +import javax.ws.rs.NotFoundException; +import javax.ws.rs.ProcessingException; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ResponseProcessingException; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; + +import org.openecomp.vid.asdc.AsdcCatalogException; +import org.openecomp.vid.asdc.AsdcClient; +import org.openecomp.vid.asdc.beans.Artifact; +import org.openecomp.vid.asdc.beans.Resource; +import org.openecomp.vid.asdc.beans.Service; +import org.openecomp.vid.asdc.beans.tosca.ToscaCsar; +import org.openecomp.vid.asdc.beans.tosca.ToscaMeta; +import org.openecomp.vid.asdc.beans.tosca.ToscaModel; +import org.openecomp.vid.model.ModelConstants; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.error.YAMLException; + +import org.openecomp.vid.properties.VidProperties; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; + +/** + * The Class RestfulAsdcClient. + */ +public class RestfulAsdcClient implements AsdcClient { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = Logger.getLogger(RestfulAsdcClient.class.getName()); + + /** The client. */ + private final Client client; + + /** The uri. */ + private final URI uri; + + /** The common headers. */ + private final MultivaluedHashMap commonHeaders; + + /** The auth. */ + private final String auth; + + /** + * The Class Builder. + */ + public static class Builder { + + /** The client. */ + private final Client client; + + /** The uri. */ + private final URI uri; + + /** The auth. */ + private String auth = null; + + /** + * Instantiates a new builder. + * + * @param client the client + * @param uri the uri + */ + public Builder(Client client, URI uri) { + this.client = client; + this.client.register(JacksonJsonProvider.class); + this.uri = uri; + } + + /** + * Auth. + * + * @param auth the auth + * @return the builder + */ + public Builder auth(String auth) { + this.auth = auth; + return this; + } + + /** + * Builds the. + * + * @return the restful asdc client + */ + public RestfulAsdcClient build() { + return new RestfulAsdcClient(this); + } + } + + /** + * Instantiates a new restful asdc client. + * + * @param builder the builder + */ + private RestfulAsdcClient(Builder builder) { + client = builder.client; + uri = builder.uri; + auth = builder.auth; + + commonHeaders = new MultivaluedHashMap (); + commonHeaders.put("X-ECOMP-InstanceID", Collections.singletonList((Object) "VID")); + commonHeaders.put("Authorization", Collections.singletonList((Object) (auth))); + } + + /** + * Gets the client. + * + * @return the client + */ + private Client getClient() { return client; } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResource(java.util.UUID) + */ + public Resource getResource(UUID uuid) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_RESOURCE_API_PATH, ModelConstants.DEFAULT_ASDC_RESOURCE_API_PATH); + try { + return getClient() + .target(uri) + .path(path + "/" + uuid.toString() + "/metadata") + .request(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(Resource.class); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResources() + */ + public Collection getResources() throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_RESOURCE_API_PATH, ModelConstants.DEFAULT_ASDC_RESOURCE_API_PATH); + try { + return getClient() + .target(uri) + .path(path) + .request(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(new GenericType> () {}); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResources(java.util.Map) + */ + public Collection getResources(Map filter) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_RESOURCE_API_PATH, ModelConstants.DEFAULT_ASDC_RESOURCE_API_PATH); + WebTarget target = getClient() + .target(uri) + .path(path); + + for (Entry filterEntry : filter.entrySet()) { + target = target.queryParam(filterEntry.getKey(), (Object []) filterEntry.getValue()); + } + + try { + return target.request() + .accept(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(new GenericType> () {}); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (NotFoundException e) { + throw e; + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID) + */ + public Artifact getResourceArtifact(UUID resourceUuid, UUID artifactUuid) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_RESOURCE_API_PATH, ModelConstants.DEFAULT_ASDC_RESOURCE_API_PATH); + try { + return getClient() + .target(uri) + .path(path + "/" + resourceUuid + "/artifacts/" + artifactUuid) + .request(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(Artifact.class); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getService(java.util.UUID) + */ + public Service getService(UUID uuid) throws AsdcCatalogException { + + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_SVC_API_PATH, ModelConstants.DEFAULT_ASDC_SVC_API_PATH); + try { + return getClient() + .target(uri) + .path( path + "/" + uuid.toString() + "/metadata") + .request(MediaType.APPLICATION_JSON) + .headers(commonHeaders) + .get(Service.class); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServices() + */ + public Collection getServices() throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_SVC_API_PATH, ModelConstants.DEFAULT_ASDC_SVC_API_PATH); + try { + return getClient() + .target(uri) + .path(path) + .request() + .accept(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(new GenericType> () {}); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServices(java.util.Map) + */ + public Collection getServices(Map filter) throws AsdcCatalogException { + + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_SVC_API_PATH, ModelConstants.DEFAULT_ASDC_SVC_API_PATH); + WebTarget target = getClient() + .target(uri) + .path(path); + + + for (Entry filterEntry : filter.entrySet()) { + target = target.queryParam(filterEntry.getKey(), (Object []) filterEntry.getValue()); + } + + try { + return target.request() + .accept(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(new GenericType> () {}); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (NotFoundException e) { + throw e; + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID) + */ + public Artifact getServiceArtifact(UUID serviceUuid, UUID artifactUuid) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_SVC_API_PATH, ModelConstants.DEFAULT_ASDC_SVC_API_PATH); + try { + return getClient() + .target(uri) + .path(path + "/" + serviceUuid + "/artifacts/" + artifactUuid) + .request(MediaType.APPLICATION_JSON_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_JSON) + .get(Artifact.class); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID) + */ + public ToscaCsar getResourceToscaModel(UUID resourceUuid) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_RESOURCE_API_PATH, ModelConstants.DEFAULT_ASDC_RESOURCE_API_PATH); + try (final InputStream csarInputStream = (InputStream) getClient() + .target(uri) + .path(path + "/" + resourceUuid + "/toscaModel") + .request(MediaType.APPLICATION_OCTET_STREAM_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_OCTET_STREAM) + .get(InputStream.class)) { + + return getToscaModel(csarInputStream); + } catch (IOException e) { + throw new AsdcCatalogException("Failed to retrieve resource TOSCA model from ASDC", e); + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID) + */ + public ToscaCsar getServiceToscaModel(UUID serviceUuid) throws AsdcCatalogException { + String path = VidProperties.getPropertyWithDefault(ModelConstants.ASDC_SVC_API_PATH, ModelConstants.DEFAULT_ASDC_SVC_API_PATH); + try { + final InputStream csarInputStream = (InputStream) getClient() + .target(uri) + .path(path + "/" + serviceUuid + "/toscaModel") + .request(MediaType.APPLICATION_OCTET_STREAM_TYPE) + .headers(commonHeaders) + .header("Content-Type", MediaType.APPLICATION_OCTET_STREAM) + .get(InputStream.class); + + return getToscaModel(csarInputStream); + } catch (ResponseProcessingException e) { + //Couldn't convert response to Java type + throw new AsdcCatalogException("ASDC response could not be processed", e); + } catch (ProcessingException e) { + //IO problems during request + throw new AsdcCatalogException("Failed to get a response from ASDC service", e); + } catch (WebApplicationException e) { + //Web service returned data, but the response status wasn't a good one (i.e. non 2xx) + throw new AsdcCatalogException(e); + } + } + + /** + * Gets the tosca model. + * + * @param csarInputStream the csar input stream + * @return the tosca model + * @throws AsdcCatalogException the asdc catalog exception + */ + private ToscaCsar getToscaModel(InputStream csarInputStream) throws AsdcCatalogException { + final Path csarFile; + + try { + csarFile = Files.createTempFile("csar", ".zip"); + Files.copy(csarInputStream, csarFile, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new AsdcCatalogException("Caught IOException while creating CSAR", e); + } + + try (final ZipFile csar = new ZipFile(csarFile.toFile())) { + + final InputStream toscaMetaStream = csar.getInputStream(csar.getEntry("TOSCA-Metadata/TOSCA.meta")); + final ToscaMeta toscaMeta = new ToscaMeta.Builder(toscaMetaStream).build(); + final String entryDefinitions = toscaMeta.get("Entry-Definitions"); + final InputStream toscaParentEntryYamlStream = csar.getInputStream(csar.getEntry(entryDefinitions)); + + try { + final Yaml yaml = new Yaml(); + final ToscaModel parentModel = yaml.loadAs(toscaParentEntryYamlStream, ToscaModel.class); + + final ToscaCsar.Builder csarBuilder = new ToscaCsar.Builder(parentModel); + + for (Map> imports : parentModel.getImports()) { + for (Entry> entry : imports.entrySet()) { + final InputStream toscaChildEntryYamlStream = csar.getInputStream(csar.getEntry("Definitions/" + entry.getValue().get("file"))); + final ToscaModel childModel = yaml.loadAs(toscaChildEntryYamlStream, ToscaModel.class); + csarBuilder.addVnf(childModel); + } + } + + return csarBuilder.build(); + } catch (YAMLException e) { + throw new AsdcCatalogException("Caught exception while processing TOSCA YAML", e); + } + } catch (IOException e) { + throw new AsdcCatalogException("Caught IOException while processing CSAR", e); + } + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/client/HttpBasicClient.java b/vid-app-common/src/main/java/org/openecomp/vid/client/HttpBasicClient.java new file mode 100755 index 000000000..ef2ade914 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/client/HttpBasicClient.java @@ -0,0 +1,67 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.client; + + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +import javax.servlet.ServletContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; + +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.springframework.beans.factory.annotation.Autowired; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; + +/** + * General HTTP client. + */ + +public class HttpBasicClient{ + + /** The servlet context. */ + @Autowired + private ServletContext servletContext; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpBasicClient.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** + * Obtain a basic HTTP client . + * + * @return Client client object + * @throws Exception the exception + */ + public static Client getClient() throws Exception { + + ClientConfig config = new ClientConfig(); + config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + + return ClientBuilder.newClient(config) + .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/client/HttpsBasicClient.java b/vid-app-common/src/main/java/org/openecomp/vid/client/HttpsBasicClient.java new file mode 100755 index 000000000..dc0e35590 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/client/HttpsBasicClient.java @@ -0,0 +1,143 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.client; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; + +import org.eclipse.jetty.util.security.Password; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.openecomp.vid.properties.VidProperties; + + /** + * General SSL client using the VID tomcat keystore. It doesn't use client certificates. + */ + +public class HttpsBasicClient{ + + /** The logger. */ + static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpsBasicClient.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** + * Retrieve an SSL client. + * + * @return Client The SSL client + * @throws Exception the exception + */ + public static Client getClient() throws Exception { + String methodName = "getClient"; + ClientConfig config = new ClientConfig(); + //config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + //config.getClasses().add(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + + SSLContext ctx = null; + + try { + + config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + + String truststore_path = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_FILENAME); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " truststore_path=" + truststore_path); + String truststore_password = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_PASSWD_X); + + + String decrypted_truststore_password = Password.deobfuscate(truststore_password); + //logger.debug(dateFormat.format(new Date()) + " " + methodName + " decrypted_truststore_password=" + decrypted_truststore_password); + + File tr = new File (truststore_path); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " absolute truststore path=" + tr.getAbsolutePath()); + + //String keystore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_FILENAME); + //String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X); + //String decrypted_keystore_password = EncryptedPropValue.decryptTriple(keystore_password); + + System.setProperty("javax.net.ssl.trustStore", truststore_path); + System.setProperty("javax.net.ssl.trustStorePassword", decrypted_truststore_password); + HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){ + public boolean verify(String string,SSLSession ssls) { + return true; + } + }); + + //May need to make the algorithm a parameter. MSO requires TLSv1.1 or TLSv1.2 + ctx = SSLContext.getInstance("TLSv1.2"); + + /* + KeyManagerFactory kmf = null; + try { + kmf = KeyManagerFactory.getInstance("SunX509"); + FileInputStream fin = new FileInputStream(keystore_path); + KeyStore ks = KeyStore.getInstance("PKCS12"); + char[] pwd = decrypted_keystore_password.toCharArray(); + ks.load(fin, pwd); + kmf.init(ks, pwd); + } catch (Exception e) { + System.out.println("Error setting up kmf: exiting"); + e.printStackTrace(); + System.exit(1); + } + + ctx.init(kmf.getKeyManagers(), null, null); + */ + ctx.init(null, null, null); + //config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, + // new HTTPSProperties( , ctx)); + + return ClientBuilder.newBuilder() + .sslContext(ctx) + .hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify( String s, SSLSession sslSession ) { + return true; + } + }).withConfig(config) + .build() + .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class); + + } catch (Exception e) { + logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting"); + //System.out.println("Error setting up config: exiting"); + e.printStackTrace(); + return null; + } + + //Client client = ClientBuilder.newClient(config); + // uncomment this line to get more logging for the request/response + // client.addFilter(new LoggingFilter(System.out)); + + //return client; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/AaiController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/AaiController.java new file mode 100755 index 000000000..7cb25c264 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/AaiController.java @@ -0,0 +1,864 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + +import java.io.File; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.ws.rs.BadRequestException; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.openecomp.aai.util.AAIRestInterface; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; +import org.openecomp.portalsdk.core.domain.User; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; + +/** + * Controller to handle a&ai requests. + */ + +@RestController +public class AaiController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AaiController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The from app id. */ + protected String fromAppId = "VidAaiController"; + + /** The model. */ + private Map model = new HashMap(); + + /** The servlet context. */ + private @Autowired ServletContext servletContext; + + /** + * Welcome method. + * + * @param request the request + * @return ModelAndView The view + */ + @RequestMapping(value = {"/subscriberSearch" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== AaiController welcome start"); + return new ModelAndView(getViewName()); + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String viewName) { + this.viewName = viewName; + } + + /** + * Get services from a&ai. + * + * @return ResponseEntity The response entity with the logged in user uuid. + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value = {"/getuserID" }, method = RequestMethod.GET) + public ResponseEntity getUserID(HttpServletRequest request) throws IOException, InterruptedException { + + String userId = ""; + HttpSession session = request.getSession(); + if (session != null) + { + User user = (User) session.getAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME)); + if (user != null) + { + userId = user.getHrid(); + } + } + + return new ResponseEntity( userId, HttpStatus.OK); + } + + + /** + * Get services from a&ai. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/aai_get_services",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doGetServices() throws IOException, InterruptedException { + File certiPath = GetCertificatesPath(); + Response resp = doAaiGet(certiPath.getAbsolutePath(), "service-design-and-creation/services", false); + + return convertResponseToResponseEntity(resp); + } + + /** + * Lookup single service instance in a&ai. Get the service-subscription and customer, too, i guess? + * + * @param serviceInstanceId the service instance Id + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/aai_get_service_instance/{service-instance-id}/{service-instance-type}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doGetServiceInstance(@PathVariable("service-instance-id") String serviceInstanceId,@PathVariable("service-instance-type") String serviceInstanceType) throws IOException, InterruptedException { + File certiPath = GetCertificatesPath(); + Response resp=null; + + if(serviceInstanceType.equalsIgnoreCase("Service Instance Id")){ + resp = doAaiGet( certiPath.getAbsolutePath(), + "search/nodes-query?search-node-type=service-instance&filter=service-instance-id:EQUALS:" + + serviceInstanceId, false); + } else { + resp = doAaiGet( certiPath.getAbsolutePath(), + "search/nodes-query?search-node-type=service-instance&filter=service-instance-name:EQUALS:" + + serviceInstanceId, false); + } + return convertResponseToResponseEntity(resp); + } + + + /** + * Get services from a&ai. + * + * @param globalCustomerId the global customer id + * @param serviceSubscriptionId the service subscription id + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/aai_get_service_subscription/{global-customer-id}/{service-subscription-id}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doGetServices(@PathVariable("global-customer-id") String globalCustomerId, + @PathVariable("service-subscription-id") String serviceSubscriptionId) throws IOException, InterruptedException { + File certiPath = GetCertificatesPath(); + Response resp = doAaiGet(certiPath.getAbsolutePath(), "business/customers/customer/" + globalCustomerId + + "/service-subscriptions/service-subscription/" + serviceSubscriptionId + "?depth=0", false); + return convertResponseToResponseEntity(resp); + } + + /** + * Obtain the subscriber list from a&ai. + * + * @param fullSet the full set + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/aai_get_subscribers",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doGetSubscriberList(@DefaultValue("n") @QueryParam("fullSet") String fullSet) throws IOException, InterruptedException { + Response resp = getSubscribers(false); + return convertResponseToResponseEntity(resp); + } + + /** + * Obtain the Target Prov Status from the System.Properties file. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/get_system_prop_vnf_prov_status",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getTargetProvStatus() throws IOException, InterruptedException { + String p = SystemProperties.getProperty("aai.vnf.provstatus"); + return new ResponseEntity(p, HttpStatus.OK); + } + + /** + * Obtain the full subscriber list from a&ai. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/aai_get_full_subscribers",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getFullSubscriberList() throws IOException, InterruptedException { + Response resp = getSubscribers(true); + return convertResponseToResponseEntity(resp); + } + + + /** + * Refresh the subscriber list from a&ai. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + */ + @RequestMapping(value="/aai_refresh_subscribers",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doRefreshSubscriberList() throws IOException { + Response resp = getSubscribers(false); + return convertResponseToResponseEntity(resp); + } + + /** + * Refresh the full subscriber list from a&ai. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + */ + @RequestMapping(value="/aai_refresh_full_subscribers",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity doRefreshFullSubscriberList() throws IOException { + Response resp = getSubscribers(false); + return convertResponseToResponseEntity(resp); + } + + /** + * Get subscriber details from a&ai. + * + * @param subscriberId the subscriber id + * @return ResponseEntity The response entity + */ + @RequestMapping(value="/aai_sub_details/{subscriberId}", method = RequestMethod.GET) + public ResponseEntity GetSubscriber(@PathVariable("subscriberId") String subscriberId) { + Response resp = getSubscriberDetails(subscriberId); + return convertResponseToResponseEntity(resp); + } + + /** + * Issue a named query to a&ai. + * + * @param namedQueryId the named query id + * @param globalCustomerId the global customer id + * @param serviceType the service type + * @param serviceInstance the service instance + * @return ResponseEntity The response entity + */ + @RequestMapping(value="/aai_sub_viewedit/{namedQueryId}/{globalCustomerId}/{serviceType}/{serviceInstance}", method = RequestMethod.GET) + public ResponseEntity viewEditGetComponentList( + @PathVariable("namedQueryId") String namedQueryId, + @PathVariable("globalCustomerId") String globalCustomerId, + @PathVariable("serviceType") String serviceType, + @PathVariable("serviceInstance") String serviceInstance) { + + String componentListPayload = getComponentListPutPayload(namedQueryId, globalCustomerId, serviceType, serviceInstance); + File certiPath = GetCertificatesPath(); + + Response resp = doAaiPost(certiPath.getAbsolutePath(), "search/named-query", componentListPayload, false); + return convertResponseToResponseEntity(resp); + } + + /** + * Issue a named query to a&ai. + * + * @param namedQueryId the named query id + * @param globalCustomerId the global customer id + * @param serviceType the service type + * @param serviceInstance the service instance + * @return ResponseEntity The response entity + */ + @RequestMapping(value="/aai_get_models_by_service_type/{namedQueryId}/{globalCustomerId}/{serviceType}", method = RequestMethod.GET) + public ResponseEntity viewEditGetComponentList( + @PathVariable("namedQueryId") String namedQueryId, + @PathVariable("globalCustomerId") String globalCustomerId, + @PathVariable("serviceType") String serviceType) { + + String componentListPayload = getModelsByServiceTypePayload(namedQueryId, globalCustomerId, serviceType); + File certiPath = GetCertificatesPath(); + + Response resp = doAaiPost(certiPath.getAbsolutePath(), "search/named-query", componentListPayload, false); + return convertResponseToResponseEntity(resp); + } + + /** + * Parses the for tenants. + * + * @param resp the resp + * @return the string + */ + private String parseForTenants(String resp) + { + String tenantList = ""; + + try + { + JSONParser jsonParser = new JSONParser(); + + JSONObject jsonObject = (JSONObject) jsonParser.parse(resp); + + return parseCustomerObjectForTenants(jsonObject); + } + catch (Exception ex) { + + } + + return tenantList; + } + + /** + * Parses the for tenants by service subscription. + * + * @param resp the resp + * @return the string + */ + private String parseForTenantsByServiceSubscription(String resp) + { + String tenantList = ""; + + try + { + JSONParser jsonParser = new JSONParser(); + + JSONObject jsonObject = (JSONObject) jsonParser.parse(resp); + + return parseServiceSubscriptionObjectForTenants(jsonObject); + } + catch (Exception ex) { + + } + + return tenantList; + } + + + // @RequestMapping(value="/aai_get_tenants/{global-customer-id}", method = RequestMethod.GET) + // public ResponseEntity viewEditGetComponentList( + // @PathVariable("global-customer-id") String globalCustomerId) { + // return new ResponseEntity(getTenants(globalCustomerId), HttpStatus.OK); + // } + + /** + * Obtain tenants for a given service type. + * + * @param globalCustomerId the global customer id + * @param serviceType the service type + * @return ResponseEntity The response entity + */ + @RequestMapping(value="/aai_get_tenants/{global-customer-id}/{service-type}", method = RequestMethod.GET) + public ResponseEntity viewEditGetTenantsFromServiceType( + @PathVariable("global-customer-id") String globalCustomerId, @PathVariable("service-type") String serviceType) { + return getTenantsFromServiceType(globalCustomerId, serviceType); + } + + private ResponseEntity convertResponseToResponseEntity(Response resp) { + ResponseEntity respEnt; + if (resp == null) { + respEnt = new ResponseEntity("Failed to fetch data from A&AI, check server logs for details.", HttpStatus.INTERNAL_SERVER_ERROR); + } else { + respEnt = new ResponseEntity((String)resp.readEntity(String.class), HttpStatus.valueOf(resp.getStatus())); + } + return respEnt; + } + + /** + * Gets the tenants. + * + * @param globalCustomerId the global customer id + * @return the tenants + */ + private ResponseEntity getTenants(String globalCustomerId) + { + File certiPath = GetCertificatesPath(); + Response resp = doAaiGet(certiPath.getAbsolutePath(), "business/customers/customer/" + globalCustomerId, false); + + ResponseEntity respEnt; + if (resp.getStatus() >= 200 && resp.getStatus() <= 299) { + respEnt = new ResponseEntity(parseForTenants((String)resp.readEntity(String.class)), HttpStatus.OK); + } else { + respEnt = new ResponseEntity((String)resp.readEntity(String.class), HttpStatus.valueOf(resp.getStatus())); + } + return respEnt; + + } + + /** + * Gets the tenants from service type. + * + * @param globalCustomerId the global customer id + * @param serviceType the service type + * @return the tenants from service type + */ + private ResponseEntity getTenantsFromServiceType(String globalCustomerId, String serviceType) + { + File certiPath = GetCertificatesPath(); + String url = "business/customers/customer/" + globalCustomerId + "/service-subscriptions/service-subscription/" + serviceType; + + Response resp = doAaiGet(certiPath.getAbsolutePath(), url, false); + + ResponseEntity respEnt; + if (resp.getStatus() >= 200 && resp.getStatus() <= 299) { + respEnt = new ResponseEntity(parseForTenantsByServiceSubscription((String)resp.readEntity(String.class)), HttpStatus.OK); + } else { + respEnt = new ResponseEntity((String)resp.readEntity(String.class), HttpStatus.valueOf(resp.getStatus())); + } + return respEnt; + + } + + /** + * Gets the services. + * + * @return the services + */ + private Response getServices() + { + File certiPath = GetCertificatesPath(); + Response resp = doAaiGet(certiPath.getAbsolutePath(), "service-design-and-creation/services", false); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "getServices() resp=" + resp.getStatusInfo()); + + //model.put("aai_get_services", resp); + return resp; + } + + + /** + * Gets the subscribers. + * + * @param isFullSet the is full set + * @return the subscribers + */ + private Response getSubscribers(boolean isFullSet) + { + File certiPath = GetCertificatesPath(); + String depth = "0"; + + Response resp = doAaiGet(certiPath.getAbsolutePath(), "business/customers?subscriber-type=INFRA&depth=" + depth, false); + if (resp != null) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "getSubscribers() resp=" + resp.getStatusInfo().toString()); + } + return resp; + } + + + + /** + * Gets the subscriber details. + * + * @param subscriberId the subscriber id + * @return the subscriber details + */ + private Response getSubscriberDetails(String subscriberId) + { + File certiPath = GetCertificatesPath(); + Response resp = doAaiGet(certiPath.getAbsolutePath(), "business/customers/customer/" + subscriberId + "?depth=2", false); + //String resp = doAaiGet(certiPath.getAbsolutePath(), "business/customers/customer/" + subscriberId, false); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "getSubscriberDetails() resp=" + resp.getStatusInfo().toString()); + return resp; + } + + /** + * Gets the certificates path. + * + * @return the file + */ + private File GetCertificatesPath() + { + if (servletContext != null) + return new File( servletContext.getRealPath("/WEB-INF/cert/") ); + return null; + } + + /** + * Send a GET request to a&ai. + * + * @param certiPath the certi path + * @param uri the uri + * @param xml the xml + * @return String The response + */ + protected Response doAaiGet(String certiPath, String uri, boolean xml) { + String methodName = "getSubscriberList"; + String transId = UUID.randomUUID().toString(); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + Response resp = null; + try { + + AAIRestInterface restContrller = new AAIRestInterface(certiPath); + resp = restContrller.RestGet(fromAppId, transId, uri, xml); + + } catch (WebApplicationException e) { + final String message = ((BadRequestException) e).getResponse().readEntity(String.class); + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + message); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + message); + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + } + + return resp; + } + + /** + * Send a POST request to a&ai. + * + * @param certiPath the certi path + * @param uri the uri + * @param payload the payload + * @param xml the xml + * @return String The response + */ + protected Response doAaiPost(String certiPath, String uri, String payload, boolean xml) { + String methodName = "getSubscriberList"; + String transId = UUID.randomUUID().toString(); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + Response resp = null; + try { + + AAIRestInterface restContrller = new AAIRestInterface(certiPath); + resp = restContrller.RestPost(fromAppId, transId, uri, payload, xml); + + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + } + + return resp; + } + + /** + * Gets the component list put payload. + * + * @param namedQueryId the named query id + * @param globalCustomerId the global customer id + * @param serviceType the service type + * @param serviceInstance the service instance + * @return the component list put payload + */ + private String getComponentListPutPayload(String namedQueryId, String globalCustomerId, String serviceType, String serviceInstance) { + return + " {" + + " \"instance-filters\": {" + + " \"instance-filter\": [" + + " {" + + " \"customer\": {" + + " \"global-customer-id\": \"" + globalCustomerId + "\"" + + " }," + + " \"service-instance\": {" + + " \"service-instance-id\": \"" + serviceInstance + "\"" + + " }," + + " \"service-subscription\": {" + + " \"service-type\": \"" + serviceType + "\"" + + " }" + + " }" + + " ]" + + " }," + + " \"query-parameters\": {" + + " \"named-query\": {" + + " \"named-query-uuid\": \"" + namedQueryId + "\"" + + " }" + + " }" + + "}"; + + } + private String getModelsByServiceTypePayload(String namedQueryId, String globalCustomerId, String serviceType) { + // TODO Auto-generated method stub + return " {" + + " \"instance-filters\": {" + + " \"instance-filter\": [" + + " {" + + " \"customer\": {" + + " \"global-customer-id\": \"" + globalCustomerId + "\"" + + " }," + + " \"service-subscription\": {" + + " \"service-type\": \"" + serviceType + "\"" + + " }" + + " }" + + " ]" + + " }," + + " \"query-parameters\": {" + + " \"named-query\": {" + + " \"named-query-uuid\": \"" + namedQueryId + "\"" + + " }" + + " }" + + "}"; + + } + + /** + * Return tenant details. + * + * @param jsonObject the json object + * @return String The parsing results + */ + public static String parseCustomerObjectForTenants(JSONObject jsonObject) { + + JSONArray tenantArray = new JSONArray(); + boolean bconvert = false; + + try { + + JSONObject serviceSubsObj = (JSONObject) jsonObject.get("service-subscriptions"); + + if (serviceSubsObj != null) + { + JSONArray srvcSubArray = (JSONArray) serviceSubsObj.get("service-subscription"); + + if (srvcSubArray != null) + { + Iterator i = srvcSubArray.iterator(); + + while (i.hasNext()) { + + JSONObject innerObj = (JSONObject) i.next(); + + if (innerObj == null) + continue; + + JSONObject relationShipListsObj = (JSONObject) innerObj.get("relationship-list"); + if (relationShipListsObj != null) + { + JSONArray rShipArray = (JSONArray) relationShipListsObj.get("relationship"); + if (rShipArray != null) + { + Iterator i1 = rShipArray.iterator(); + + while (i1.hasNext()) { + + JSONObject inner1Obj = (JSONObject) i1.next(); + + if (inner1Obj == null) + continue; + + String relatedTo = checkForNull((String)inner1Obj.get("related-to")); + if (relatedTo.equalsIgnoreCase("tenant")) + { + JSONObject tenantNewObj = new JSONObject(); + + String relatedLink = checkForNull((String) inner1Obj.get("related-link")); + tenantNewObj.put("link", relatedLink); + + JSONArray rDataArray = (JSONArray) inner1Obj.get("relationship-data"); + if (rDataArray != null) + { + Iterator i2 = rDataArray.iterator(); + + while (i2.hasNext()) { + JSONObject inner2Obj = (JSONObject) i2.next(); + + if (inner2Obj == null) + continue; + + String rShipKey = checkForNull((String)inner2Obj.get("relationship-key")); + String rShipVal = checkForNull((String)inner2Obj.get("relationship-value")); + if (rShipKey.equalsIgnoreCase("cloud-region.cloud-owner")) + { + tenantNewObj.put("cloudOwner", rShipVal); + } + else if (rShipKey.equalsIgnoreCase("cloud-region.cloud-region-id")) + { + tenantNewObj.put("cloudRegionID", rShipVal); + } + + if (rShipKey.equalsIgnoreCase("tenant.tenant-id")) + { + tenantNewObj.put("tenantID", rShipVal); + } + } + } + + JSONArray relatedTPropArray = (JSONArray) inner1Obj.get("related-to-property"); + if (relatedTPropArray != null) + { + Iterator i3 = relatedTPropArray.iterator(); + + while (i3.hasNext()) { + JSONObject inner3Obj = (JSONObject) i3.next(); + + if (inner3Obj == null) + continue; + + String propKey = checkForNull((String)inner3Obj.get("property-key")); + String propVal = checkForNull((String)inner3Obj.get("property-value")); + if (propKey.equalsIgnoreCase("tenant.tenant-name")) + { + tenantNewObj.put("tenantName", propVal); + } + } + } + bconvert = true; + tenantArray.add(tenantNewObj); + } + } + } + } + } + } + } + } catch (NullPointerException ex) { + + + } + + if (bconvert) + return tenantArray.toJSONString(); + else + return ""; + + } + + + /** + * Retrieve the service subscription from the jsonObject. + * + * @param jsonObject the json object + * @return String + */ + public static String parseServiceSubscriptionObjectForTenants(JSONObject jsonObject) { + + JSONArray tenantArray = new JSONArray(); + boolean bconvert = false; + + try { + JSONObject relationShipListsObj = (JSONObject) jsonObject.get("relationship-list"); + if (relationShipListsObj != null) + { + JSONArray rShipArray = (JSONArray) relationShipListsObj.get("relationship"); + if (rShipArray != null) + { + Iterator i1 = rShipArray.iterator(); + + while (i1.hasNext()) { + + JSONObject inner1Obj = (JSONObject) i1.next(); + + if (inner1Obj == null) + continue; + + String relatedTo = checkForNull((String)inner1Obj.get("related-to")); + if (relatedTo.equalsIgnoreCase("tenant")) + { + JSONObject tenantNewObj = new JSONObject(); + + String relatedLink = checkForNull((String) inner1Obj.get("related-link")); + tenantNewObj.put("link", relatedLink); + + JSONArray rDataArray = (JSONArray) inner1Obj.get("relationship-data"); + if (rDataArray != null) + { + Iterator i2 = rDataArray.iterator(); + + while (i2.hasNext()) { + JSONObject inner2Obj = (JSONObject) i2.next(); + + if (inner2Obj == null) + continue; + + String rShipKey = checkForNull((String)inner2Obj.get("relationship-key")); + String rShipVal = checkForNull((String)inner2Obj.get("relationship-value")); + if (rShipKey.equalsIgnoreCase("cloud-region.cloud-owner")) + { + tenantNewObj.put("cloudOwner", rShipVal); + } + else if (rShipKey.equalsIgnoreCase("cloud-region.cloud-region-id")) + { + tenantNewObj.put("cloudRegionID", rShipVal); + } + + if (rShipKey.equalsIgnoreCase("tenant.tenant-id")) + { + tenantNewObj.put("tenantID", rShipVal); + } + } + } + + JSONArray relatedTPropArray = (JSONArray) inner1Obj.get("related-to-property"); + if (relatedTPropArray != null) + { + Iterator i3 = relatedTPropArray.iterator(); + + while (i3.hasNext()) { + JSONObject inner3Obj = (JSONObject) i3.next(); + + if (inner3Obj == null) + continue; + + String propKey = checkForNull((String)inner3Obj.get("property-key")); + String propVal = checkForNull((String)inner3Obj.get("property-value")); + if (propKey.equalsIgnoreCase("tenant.tenant-name")) + { + tenantNewObj.put("tenantName", propVal); + } + } + } + bconvert = true; + tenantArray.add(tenantNewObj); + } + } + + } + } + } catch (NullPointerException ex) { + + + } + + if (bconvert) + return tenantArray.toJSONString(); + else + return ""; + + } + + /** + * Check for null. + * + * @param local the local + * @return the string + */ + private static String checkForNull(String local) + { + if (local != null) + return local; + else + return ""; + + } +} + diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/BrowseServiceTypesController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/BrowseServiceTypesController.java new file mode 100755 index 000000000..0698cfd9c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/BrowseServiceTypesController.java @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + + + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + + +/** + * The Class BrowseServiceTypesController. + */ +@RestController +public class BrowseServiceTypesController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(BrowseServiceTypesController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The servlet context. */ + private @Autowired ServletContext servletContext; + + /** + * Welcome. + * + * @param request the request + * @return the model and view + */ + @RequestMapping(value = {"/browseservicetypes" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + + return new ModelAndView(getViewName()); + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String viewName) { + this.viewName = viewName; + } + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/HealthCheckController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/HealthCheckController.java new file mode 100755 index 000000000..abef8d62b --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/HealthCheckController.java @@ -0,0 +1,196 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import org.openecomp.portalsdk.core.controller.UnRestrictedBaseController; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.openecomp.vid.dao.FnAppDoaImpl; + +/** + * Controller for user profile view. The view is restricted to authenticated + * users. The view name resolves to page user_profile.jsp which uses Angular. + */ + +@RestController +@RequestMapping("/") +public class HealthCheckController extends UnRestrictedBaseController { + + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthCheckController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + private static final String HEALTH_CHECK_PATH = "/healthCheck"; + + /** + * Model for JSON response with health-check results. + */ + public class HealthStatus { + // Either 200 or 500 + public int statusCode; + + // Additional detail in case of error, empty in case of success. + public String message; + + public String date; + + public HealthStatus(int code, String msg) { + this.statusCode = code; + this.message = msg; + } + + public HealthStatus(int code,String date, String msg) { + this.statusCode = code; + this.message = msg; + this.date=date; + } + + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int code) { + this.statusCode = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String msg) { + this.message = msg; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + } + + @SuppressWarnings("unchecked") + public int getProfileCount(String driver, String URL, String username, String password) { + FnAppDoaImpl doa= new FnAppDoaImpl(); + int count= doa.getProfileCount(driver,URL,username,password); + return count; + } + + + + /** + * Obtain the HealthCheck Status from the System.Properties file. + * Used by IDNS for redundancy + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + */ + @RequestMapping(value="/healthCheck",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public HealthStatus gethealthCheckStatusforIDNS() throws IOException, InterruptedException { + + String driver = SystemProperties.getProperty("db.driver"); + String URL = SystemProperties.getProperty("db.connectionURL"); + String username = SystemProperties.getProperty("db.userName"); + String password = SystemProperties.getProperty("db.password"); + + logger.debug(EELFLoggerDelegate.debugLogger, "driver ::" + driver); + logger.debug(EELFLoggerDelegate.debugLogger, "URL::" + URL); + logger.debug(EELFLoggerDelegate.debugLogger, "username::" + username); + logger.debug(EELFLoggerDelegate.debugLogger,"password::" + password); + + + HealthStatus healthStatus = null; + try { + logger.debug(EELFLoggerDelegate.debugLogger, "Performing health check"); + int count=getProfileCount(driver,URL,username,password); + logger.debug(EELFLoggerDelegate.debugLogger,"count:::"+count); + healthStatus = new HealthStatus(200, "health check succeeded"); + } catch (Exception ex) { + + logger.error(EELFLoggerDelegate.errorLogger, "Failed to perform health check", ex); + healthStatus = new HealthStatus(500, "health check failed: " + ex.toString()); + } + return healthStatus; + } + + /** + * Obtain the HealthCheck Status from the System.Properties file. + * + * @return ResponseEntity The response entity + * @throws IOException Signals that an I/O exception has occurred. + * @throws InterruptedException the interrupted exception + * Project : + */ + @RequestMapping(value="rest/healthCheck/{User-Agent}/{X-ECOMP-RequestID}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public HealthStatus getHealthCheck( + @PathVariable("User-Agent") String UserAgent, + @PathVariable("X-ECOMP-RequestID") String ECOMPRequestID) throws IOException, InterruptedException { + + String driver = SystemProperties.getProperty("db.driver"); + String URL = SystemProperties.getProperty("db.connectionURL"); + String username = SystemProperties.getProperty("db.userName"); + String password = SystemProperties.getProperty("db.password"); + + logger.debug(EELFLoggerDelegate.debugLogger, "driver ::" + driver); + logger.debug(EELFLoggerDelegate.debugLogger, "URL::" + URL); + logger.debug(EELFLoggerDelegate.debugLogger, "username::" + username); + logger.debug(EELFLoggerDelegate.debugLogger,"password::" + password); + + + HealthStatus healthStatus = null; + try { + logger.debug(EELFLoggerDelegate.debugLogger, "Performing health check"); + logger.debug(EELFLoggerDelegate.debugLogger, "User-Agent" + UserAgent); + logger.debug(EELFLoggerDelegate.debugLogger, "X-ECOMP-RequestID" + ECOMPRequestID); + + + int count=getProfileCount(driver,URL,username,password); + + logger.debug(EELFLoggerDelegate.debugLogger,"count:::"+count); + healthStatus = new HealthStatus(200,dateFormat.format(new Date()) ,"health check succeeded"); + } catch (Exception ex) { + + logger.error(EELFLoggerDelegate.errorLogger, "Failed to perform health check", ex); + healthStatus = new HealthStatus(500,dateFormat.format(new Date()),"health check failed: " + ex.toString()); + } + return healthStatus; + } +} + diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/MsoController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/MsoController.java new file mode 100755 index 000000000..f051ed389 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/MsoController.java @@ -0,0 +1,761 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +//import java.util.UUID; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jackson.JsonEncoding; +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.JsonParser; +import org.codehaus.jackson.JsonToken; +import org.glassfish.jersey.client.ClientResponse; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.openecomp.vid.domain.mso.CloudConfiguration; +import org.openecomp.vid.domain.mso.ModelInfo; +import org.openecomp.vid.domain.mso.ModelInfo.ModelType; +import org.openecomp.vid.domain.mso.RequestInfo; +import org.openecomp.vid.domain.mso.RequestParameters; +import org.openecomp.vid.model.ExceptionResponse; +import org.openecomp.vid.mso.MsoProperties; +import org.openecomp.vid.mso.MsoResponseWrapper; +import org.openecomp.vid.mso.MsoRestInterfaceFactory; +import org.openecomp.vid.mso.MsoRestInterfaceIfc; +import org.openecomp.vid.mso.MsoUtil; +import org.openecomp.vid.mso.RestObject; +import org.openecomp.vid.mso.rest.RelatedModel; +import org.openecomp.vid.mso.rest.RequestDetails; +import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.DeserializationFeature; + +/** + * The Class MsoController. + */ +@RestController +@RequestMapping("mso") +public class MsoController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The Constant SVC_INSTANCE_ID. */ + public final static String SVC_INSTANCE_ID = ""; + + /** The Constant VNF_INSTANCE_ID. */ + public final static String VNF_INSTANCE_ID = ""; + + /** + * Welcome. + * + * @param request the request + * @return the model and view + + public ModelAndView welcome(HttpServletRequest request) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== MsoController welcome start"); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " MSO_SERVER_URL=" + + SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) ); + return new ModelAndView(getViewName()); + } + */ + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + + public String getViewName() { + return viewName; + } + */ + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + + public void setViewName(String viewName) { + this.viewName = viewName; + } + */ + + /** + * Creates the svc instance. + * + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_svc_instance", method = RequestMethod.POST) + public ResponseEntity createSvcInstance(HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + String methodName = "createSvcInstance"; + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start" ); + +// mso_request = retrieveRequestObject (request, mso_request); + + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE); + + MsoResponseWrapper w = createInstance(mso_request, p); + // always return OK, the MSO status code is embedded in the body + + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Creates the vnf. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value="/mso_create_vnf_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVnf(@PathVariable("serviceInstanceId") String serviceInstanceId, HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "createVnf"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VNF_INSTANCE); + + if ( p == null || p.isEmpty()) { + throw new Exception ( "Vnf instance path is not defined"); + } + // /serviceInstances/v2//vnfs + String vnf_path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId ); + MsoResponseWrapper w = createInstance(mso_request, vnf_path); + + // always return OK, the MSO status code is embedded in the body + + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Creates the nw instance. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_nw_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity createNwInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "createNwInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start, serviceInstanceId = " + serviceInstanceId ); + + //RequestDetails mso_request = retrieveRequestObject (request); + + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_NETWORK_INSTANCE); + + if ( p == null || p.isEmpty()) { + throw new Exception ( "Network instance path is not defined"); + } + // /serviceInstances/v2//networks/ + + String nw_path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId ); + MsoResponseWrapper w = createInstance(mso_request, nw_path); + + // always return OK, the MSO status code is embedded in the body + + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Creates the volume group instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_volumegroup_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVolumeGroupInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, @PathVariable("vnfInstanceId") String vnfInstanceId, + HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + String methodName = "createVolumeGroupInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE); + + if ( p == null || p.isEmpty()) { + throw new Exception ( "Volume group instance path is not defined"); + } + String path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId); + path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId); + + MsoResponseWrapper w = createInstance(mso_request, path); + + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + } + + /** + * Creates the vf module instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_vfmodule_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVfModuleInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + String methodName = "createVfModuleInstance"; + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + //RequestDetails mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE); + + if ( p == null || p.isEmpty()) { + throw new Exception ( "VF module instance path is not defined"); + } + // /serviceInstances/v2//vnfs//vfmodules + String path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId); + path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId); + + MsoResponseWrapper w = createInstance(mso_request, path); + + // always return OK, the MSO status code is embedded in the body + + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + } + + /** + * Creates the instance. + * + * @param request the request + * @param path the path + * @return the mso response wrapper + * @throws ClientHandlerException the client handler exception + * @throws Exception the exception + */ + protected MsoResponseWrapper createInstance(RequestDetails request, String path) throws Exception { + String methodName = "createInstance"; + logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start"); + + try { + MsoRestInterfaceIfc restController = MsoRestInterfaceFactory.getInstance(); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " calling Post, request = (" + request + ")"); + + RestObject restObjStr = new RestObject(); + String str = new String(); + restObjStr.set(str); + restController.Post(str, request, "", path, restObjStr ); + MsoResponseWrapper w = MsoUtil.wrapResponse (restObjStr); + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + return w; + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + } + + /** + * Delete svc instance. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_svc_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteSvcInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "deleteSvcInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE); + String path = p + "/" + serviceInstanceId; + MsoResponseWrapper w = deleteInstance ( mso_request, path ); + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + // always return OK, the MSO status code is embedded in the body + + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Delete vnf. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_vnf_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + + public ResponseEntity deleteVnf(@PathVariable("serviceInstanceId") String serviceInstanceId, @PathVariable("vnfInstanceId") String vnfInstanceId, + HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + String methodName = "deleteVnf"; + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VNF_INSTANCE); + if ( p == null || p.isEmpty()) { + throw new Exception ( "Vnf instance path is not defined"); + } + // /serviceInstances/v2//vnfs/ + String vnf_path = p.replaceFirst(SVC_INSTANCE_ID, vnfInstanceId ); + MsoResponseWrapper w = deleteInstance ( mso_request, vnf_path + "/" + vnfInstanceId ); + + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Delete vf module. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param vfModuleId the vf module id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + //mso_delete_vf_module/bc305d54-75b4-431b-adb2-eb6b9e546014/vnfs/fe9000-0009-9999/vfmodules/abeeee-abeeee-abeeee + @RequestMapping(value = "/mso_delete_vfmodule_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfModuleId}", method = RequestMethod.POST) + public ResponseEntity deleteVfModule ( + @PathVariable("serviceInstanceId") String serviceInstanceId, @PathVariable("vnfInstanceId") String vnfInstanceId, + @PathVariable("vfModuleId") String vfModuleId, HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "deleteVfModule"; + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = new RequestDetails(); + //mso_request = retrieveRequestObject (request); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE); + if ( p == null || p.isEmpty()) { + throw new Exception ( "VF Module instance path is not defined"); + } + // /serviceInstances/v2//vnfs//vfmodules + String path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId ); + path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId ); + MsoResponseWrapper w = deleteInstance ( mso_request, path + "/" + vfModuleId); + + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Delete volume group instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param volumeGroupId the volume group id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_volumegroup_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupId}", method = RequestMethod.POST) + public ResponseEntity deleteVolumeGroupInstance ( + @PathVariable("serviceInstanceId") String serviceInstanceId, @PathVariable("vnfInstanceId") String vnfInstanceId, @PathVariable("volumeGroupId") String volumeGroupId, + HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "deleteVolumeGroupInstance"; + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + //RequestDetails mso_request = retrieveRequestObject (request); + + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE); + if ( p == null || p.isEmpty()) { + throw new Exception ( "Volume group instance path is not defined"); + } + // /serviceInstances/v2/{serviceInstanceId}/volumeGroups + String path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId ); + path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId ); + MsoResponseWrapper w = deleteInstance ( mso_request, path + "/" + volumeGroupId); + + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + } + + /** + * Delete nw instance. + * + * @param serviceInstanceId the service instance id + * @param networkInstanceId the network instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_nw_instance/{serviceInstanceId}/networks/{networkInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteNwInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("networkInstanceId") String networkInstanceId, HttpServletRequest request, @RequestBody RequestDetails mso_request) throws Exception { + + String methodName = "deleteNwInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + //RequestDetails mso_request = retrieveRequestObject (request); + + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_NETWORK_INSTANCE); + if ( p == null || p.isEmpty()) { + throw new Exception ( "Network instance path is not defined"); + } + // /serviceInstances/v2//networks + String path = p.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId ); + MsoResponseWrapper w = deleteInstance ( mso_request, path + "/" + networkInstanceId); + + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + + } + + /** + * Delete instance. + * + * @param request the request + * @param path the path + * @return the mso response wrapper + * @throws Exception the exception + */ + protected MsoResponseWrapper deleteInstance(RequestDetails request, String path) throws Exception { + String methodName = "deleteInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + try { + MsoRestInterfaceIfc restController = MsoRestInterfaceFactory.getInstance(); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " calling Delete, path =[" + path + "]"); + + RestObject restObjStr = new RestObject(); + String str = new String(); + restObjStr.set(str); + restController.Delete(str, request, "", path, restObjStr ); + MsoResponseWrapper w = MsoUtil.wrapResponse (restObjStr); + + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + return w; + + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + + } + + /** + * Gets the orchestration request. + * + * @param requestId the request id + * @param request the request + * @return the orchestration request + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_get_orch_req/{requestId}", method = RequestMethod.GET) + public ResponseEntity getOrchestrationRequest(@PathVariable("requestId") String requestId, + HttpServletRequest request) throws Exception { + + String methodName = "getOrchestrationRequest"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + MsoResponseWrapper w = null; + try { + MsoRestInterfaceIfc restController = MsoRestInterfaceFactory.getInstance(); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ); + String path = p + "/" + requestId; + + RestObject restObjStr = new RestObject(); + String str = new String(); + restObjStr.set(str); + + restController.Get(str, "", path, restObjStr); + + w = MsoUtil.wrapResponse (restObjStr); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + // always return OK, the MSO status code is embedded in the body + + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + } + + + /** + * Gets the orchestration requests. + * + * @param filterString the filter string + * @param request the request + * @return the orchestration requests + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_get_orch_reqs/{filterString}", method = RequestMethod.GET) + public ResponseEntity getOrchestrationRequests(@PathVariable("filterString") String filterString, + HttpServletRequest request) throws Exception { + + String methodName = "getOrchestrationRequests"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + MsoResponseWrapper w = null; + try { + MsoRestInterfaceIfc restController = MsoRestInterfaceFactory.getInstance(); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS); + String path = p + filterString; + + RestObject restObjStr = new RestObject(); + String str = new String(); + restObjStr.set(str); + + restController.Get(str, "", path, restObjStr); + + w = MsoUtil.wrapResponse (restObjStr); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + // always return OK, the MSO status code is embedded in the body + return ( new ResponseEntity(w.getResponse(), HttpStatus.OK) ); + } + + /** + * Gets the orchestration requests for svc instance. + * + * @param svc_instance_id the svc instance id + * @return the orchestration requests for svc instance + * @throws Exception the exception + */ + public MsoResponseWrapper getOrchestrationRequestsForSvcInstance (String svc_instance_id) throws Exception { + + String methodName = "getOrchestrationRequestsForSvcInstance"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + MsoResponseWrapper w = null; + + try { + MsoRestInterfaceIfc restController = MsoRestInterfaceFactory.getInstance(); + String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS); + String path = p + svc_instance_id; + + RestObject restObjStr = new RestObject(); + String str = new String(); + restObjStr.set(str); + + restController.Get(str, "", path, restObjStr); + w = MsoUtil.wrapResponse (restObjStr); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse()); + + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + return w; + } + + /** + * Exception handler. + * + * @param e the e + * @param response the response + * @throws IOException Signals that an I/O exception has occurred. + */ + @ExceptionHandler(Exception.class) + private void exceptionHandler(Exception e, HttpServletResponse response) throws IOException { + + /* + * The following "logger.error" lines "should" be sufficient for logging the exception. + * However, the console output in my Eclipse environment is NOT showing ANY of the + * logger statements in this class. Thus the temporary "e.printStackTrace" statement + * is also included. + */ + + String methodName = "exceptionHandler"; + logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw)); + logger.error(EELFLoggerDelegate.errorLogger, sw.toString()); + + /* + * Temporary - IF the above mentioned "logger.error" glitch is resolved ... + * this statement could be removed since it would then likely result in duplicate + * trace output. + */ + e.printStackTrace(System.err); + + response.setContentType("application/json; charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ExceptionResponse exceptionResponse = new ExceptionResponse(); + exceptionResponse.setException(e.getClass().toString().replaceFirst("^.*\\.", "")); + exceptionResponse.setMessage(e.getMessage()); + + response.getWriter().write(new ObjectMapper().writeValueAsString(exceptionResponse)); + + response.flushBuffer(); + + } + + /** + * Parses the orchestration requests for svc instance. + * + * @param resp the resp + * @return the list + * @throws ParseException the parse exception + * @throws Exception the exception + */ + @SuppressWarnings("unchecked") + public List parseOrchestrationRequestsForSvcInstance ( ClientResponse resp ) throws org.json.simple.parser.ParseException, Exception { + + String methodName = "parseOrchestrationRequestsForSvcInstance"; + + ArrayList json_list = new ArrayList(); + + String rlist_str = resp.readEntity (String.class); + logger.debug (EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + " Response string: " + rlist_str); + + JSONParser parser = new JSONParser(); + try { + Object obj = parser.parse(rlist_str); + + JSONObject jsonObject = (JSONObject) obj; + + JSONArray requestList = (JSONArray) jsonObject.get("requestList"); + + if ( requestList != null && ! (requestList.isEmpty()) ) + for ( Object container : requestList) { + + JSONObject containerJsonObj = (JSONObject) container; + //logger.debug(dateFormat.format(new Date()) + "<== " + "." + methodName + " reqJsonObj: " + containerJsonObj.toJSONString()); + JSONObject reqJsonObj = (JSONObject) containerJsonObj.get("request"); + + //logger.debug(dateFormat.format(new Date()) + "<== " + "." + methodName + " reqJsonObj.requestId: " + + // reqJsonObj.get("requestId") ); + JSONObject result = new JSONObject(); + + result.put("requestId", reqJsonObj.get ("requestId")); + if ( reqJsonObj.get("requestType") != null ) { + result.put("requestType", (reqJsonObj.get("requestType").toString())); + } + JSONObject req_status = (JSONObject)reqJsonObj.get("requestStatus"); + if ( req_status != null ) { + result.put("timestamp", (req_status.get("timestamp"))); + result.put("requestState", (req_status.get("requestState"))); + result.put("statusMessage", (req_status.get("statusMessage"))); + result.put("percentProgress", (req_status.get("percentProgress"))); + } + json_list.add (result); + } + } catch (org.json.simple.parser.ParseException pe) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + " Parse exception: " + pe.toString()); + throw pe; + } catch (Exception e) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + " Exception: " + e.toString()); + throw e; + } + return ( json_list ); + } + + /** + * Retrieve request object. + * + * @param request the request + * @return the request details + * @throws Exception the exception + */ + public RequestDetails retrieveRequestObject ( HttpServletRequest request, @RequestBody RequestDetails mso_request ) throws Exception { + + String methodName = "retrieveRequestObject"; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start" ); + + ObjectMapper mapper = new ObjectMapper(); + //JSON from String to Object + //RequestDetails mso_request; + + try { + //mso_request = new RequestDetails(); + //mso_request = mapper.readValue(request.getInputStream(), RequestDetails.class); + } + catch ( Exception e ) { + logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " Unable to read json object RequestDetails e=" + e.getMessage()); + throw e; + } + if ( mso_request == null) { + logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " mso_request is null"); + throw new Exception ("RequestDetails is missing"); + } + try { + String json_req = mapper.writeValueAsString(mso_request); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " request=[" + json_req + "]"); + } + catch ( Exception e ) { + logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " Unable to convert RequestDetails to json string e=" + e.getMessage()); + throw e; + } + return (mso_request); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/PropertyController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/PropertyController.java new file mode 100755 index 000000000..90080769b --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/PropertyController.java @@ -0,0 +1,122 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; + +/** + * The Class PropertyController. + */ +@RestController +public class PropertyController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PropertyController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** + * Welcome. + * + * @param request the request + * @return the model and view + */ + @RequestMapping(value = {"/propertyhome" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== PropertyController welcome start"); + return new ModelAndView(getViewName()); + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String _viewName) { + this.viewName = _viewName; + } + + /** + * Gets the property. + * + * @param name the name + * @param defaultvalue the defaultvalue + * @param request the request + * @return the property + * @throws Exception the exception + */ + @RequestMapping(value = "/get_property/{name}/{defaultvalue}", method = RequestMethod.GET) + public ResponseEntity getProperty (@PathVariable("name") String name, @PathVariable("defaultvalue") String defaultvalue, + HttpServletRequest request) throws Exception { + + String methodName = "getProperty"; + ResponseEntity resp = null; + String pvalue = null; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start"); + + try { + // convert "_" to "." in the property name + if (name == null || name.length() == 0 ) { + return ( new ResponseEntity (defaultvalue, HttpStatus.OK)); + } + // convert "_" to "." in the property name + String propertyName = name.replace('_', '.'); + pvalue = SystemProperties.getProperty(propertyName); + if ( ( pvalue == null ) || ( pvalue.length() == 0 ) ) { + pvalue = defaultvalue; + } + resp = new ResponseEntity(pvalue, HttpStatus.OK); + } + catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString()); + throw e; + } + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " returning " + pvalue); + return ( resp ); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/VidController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/VidController.java new file mode 100755 index 000000000..e22448aeb --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/VidController.java @@ -0,0 +1,351 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import javax.net.ssl.SSLContext; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Client; + +import org.json.JSONObject; +import org.json.JSONTokener; +import org.openecomp.vid.exceptions.VidServiceUnavailableException; +import org.openecomp.vid.model.ModelConstants; +import org.openecomp.vid.model.Network; +import org.openecomp.vid.model.ServiceModel; +import org.openecomp.vid.model.VNF; +import org.openecomp.vid.model.VfModule; +import org.openecomp.vid.model.VolumeGroup; +//import org.openecomp.vid.model.Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.vid.asdc.AsdcCatalogException; +import org.openecomp.vid.asdc.AsdcClient; +import org.openecomp.vid.asdc.beans.Resource; +import org.openecomp.vid.asdc.beans.Service; +import org.openecomp.vid.asdc.beans.tosca.Group; +import org.openecomp.vid.asdc.beans.tosca.NodeTemplate; +import org.openecomp.vid.asdc.beans.tosca.ToscaCsar; +import org.openecomp.vid.asdc.beans.tosca.ToscaModel; +import org.openecomp.vid.asdc.memory.InMemoryAsdcClient; +import org.openecomp.vid.asdc.rest.RestfulAsdcClient; +import org.openecomp.vid.properties.AsdcClientConfiguration; +import org.openecomp.vid.properties.AsdcClientConfiguration.AsdcClientType; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.openecomp.vid.properties.VidProperties; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + +/** + * The Class VidController. + */ +@RestController +public class VidController extends RestrictedBaseController { + + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(VidController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The app context. */ + @Autowired + private ApplicationContext appContext; + + /** + * Gets the object mapper. + * + * @return the object mapper + */ + @Bean + public ObjectMapper getObjectMapper() { + return new ObjectMapper(); + } + + /** + * Gets the asdc client. + * + * @return the asdc client + */ + @Bean + public AsdcClient getAsdcClient() { + + final AsdcClientConfiguration asdcClientConfig = appContext.getBean(AsdcClientConfiguration.class); + + switch (asdcClientConfig.getAsdcClientType()) { + case IN_MEMORY: + final InputStream asdcCatalogFile = VidController.class.getClassLoader().getResourceAsStream("catalog.json"); + final JSONTokener tokener = new JSONTokener(asdcCatalogFile); + final JSONObject catalog = new JSONObject(tokener); + + return new InMemoryAsdcClient.Builder().catalog(catalog).build(); + case REST: + + final String protocol = asdcClientConfig.getAsdcClientProtocol(); + final String host = asdcClientConfig.getAsdcClientHost(); + final int port = asdcClientConfig.getAsdcClientPort(); + final String auth = asdcClientConfig.getAsdcClientAuth(); + Client cl = null; + if ( protocol.equalsIgnoreCase("https") ) { + try { + SSLContext ctx = SSLContext.getInstance("TLSv1.2"); + ctx.init(null, null, null); + cl = ClientBuilder.newBuilder().sslContext(ctx).build(); + } + catch ( NoSuchAlgorithmException n ) { + throw new RuntimeException("SDC Client could not be instantiated due to unsupported protocol TLSv1.2", n); + } + catch ( KeyManagementException k ) { + throw new RuntimeException("SDC Client could not be instantiated due to a key management exception", k); + } + } + else { + cl = ClientBuilder.newBuilder().build(); + } + + try { + final URI uri = new URI(protocol + "://" + host + ":" + port + "/"); + return new RestfulAsdcClient.Builder(cl, uri) + .auth(auth) + .build(); + } catch (URISyntaxException e) { + throw new RuntimeException("SDC Client could not be instantiated due to a syntax error in the URI", e); + } + + default: + throw new RuntimeException(asdcClientConfig.getAsdcClientType() + " is invalid; must be one of " + Arrays.toString(AsdcClientType.values())); + } + } + + /** + * Gets the services. + * + * @param request the request + * @return the services + * @throws VidServiceUnavailableException the vid service unavailable exception + */ + @RequestMapping(value={"/rest/models/services"}, method = RequestMethod.GET) + public Collection getServices(HttpServletRequest request) throws VidServiceUnavailableException { + try { + return getAsdcClient().getServices(request.getParameterMap()); + } catch (AsdcCatalogException e) { + LOG.error("Failed to retrieve service definitions from SDC", e); + throw new VidServiceUnavailableException("Failed to retrieve service definitions from SDC", e); + } catch (Throwable t) { + LOG.debug("Unexpected error while retrieving service definitions from SDC: " + t.getMessage() + ":", t); + t.printStackTrace(); + throw new VidServiceUnavailableException("Unexpected error while retrieving service definitions from SDC: " + t.getMessage(), t); + } + } + + /** + * Gets the services. + * + * @param uuid the uuid + * @return the services + * @throws VidServiceUnavailableException the vid service unavailable exception + */ + @RequestMapping(value={"/rest/models/services/{uuid}"}, method = RequestMethod.GET) + public ServiceModel getServices(@PathVariable("uuid") String uuid) throws VidServiceUnavailableException { + String methodName = "getServices"; + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " start"); + boolean isNewFlow = false; + + String asdcModelNamespace = VidProperties.getAsdcModelNamespace(); + + String vnfTag = asdcModelNamespace + ModelConstants.VNF; + String networkTag = asdcModelNamespace + ModelConstants.NETWORK; + String vfModuleTag = asdcModelNamespace + ModelConstants.VF_MODULE; + + try { + final ServiceModel serviceModel = new ServiceModel(); + final Map vnfs = new HashMap (); + final Map networks = new HashMap (); + + final ToscaCsar serviceCsar = getAsdcClient().getServiceToscaModel(UUID.fromString(uuid)); + final Service asdcServiceMetadata = getAsdcClient().getService(UUID.fromString(uuid)); + final ToscaModel asdcServiceToscaModel = serviceCsar.getParent(); + + serviceModel.setService(ServiceModel.extractService(asdcServiceToscaModel, asdcServiceMetadata)); + + for (Entry component: asdcServiceToscaModel.gettopology_template().getnode_templates().entrySet()) { + final String modelCustomizationName = component.getKey(); + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " model customization name: " + modelCustomizationName); + final NodeTemplate nodeTemplate = component.getValue(); + final String type = nodeTemplate.getType(); + + if (type.startsWith(vnfTag)) { + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " found node template type: " + type); + + final UUID vnfUuid = UUID.fromString(nodeTemplate.getMetadata().getUUID()); + final VNF vnf = new VNF(); + vnf.extractVnf(modelCustomizationName, nodeTemplate); + + if (vnf.getVersion() == null) { + // vnf version should always be populated. The call below may not return the correct metadata since + // uuid is not unique + final Resource vnfMetadata = getAsdcClient().getResource(UUID.fromString(nodeTemplate.getMetadata().getUUID())); + vnf.setVersion(vnfMetadata.getVersion()); + } + + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " VNF commands: " + vnf.getCommands()); + vnfs.put(modelCustomizationName, vnf); + if ( (vnf.getCustomizationUuid() != null) && (vnf.getCustomizationUuid().length() > 0 ) ) { + isNewFlow = true; + } + } + // Networks + if (type.startsWith(networkTag)) { + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " found node template type: " + type); + final UUID networkUuid = UUID.fromString(nodeTemplate.getMetadata().getUUID()); + final Network network = new Network(); + network.extractNetwork(modelCustomizationName, nodeTemplate); + + if (network.getVersion() == null) { + // network version should always be populated. The call below may not return the correct metadata since + // uuid is not unique + final Resource networkMetadata = getAsdcClient().getResource(UUID.fromString(nodeTemplate.getMetadata().getUUID())); + network.setVersion(networkMetadata.getVersion()); + } + if ( (network.getCustomizationUuid() != null) && (network.getCustomizationUuid().length() > 0 ) ) { + isNewFlow = true; + } + networks.put(modelCustomizationName, network); + + } + } + serviceModel.setVnfs(vnfs); + serviceModel.setNetworks(networks); + // If we see customization uuid under vnf or network, follow 1702 flow + if ( isNewFlow ) { + return ( getCustomizedServices(asdcServiceToscaModel, serviceModel) ); + } + VNF vnf = null; + for (ToscaModel vnfModel : serviceCsar.getChildren()) { + + // using uuid to match should only be valid for 1610 models + + final String vnfUuid = (vnfModel.getMetadata().getUUID()); + // find the VNF with that uuid, uuid is not the key anymore + for ( Entry vnfComp : vnfs.entrySet() ) { + if ( ( ( vnfComp.getValue().getUuid() ).equalsIgnoreCase(vnfUuid) ) ) { + // found the vnf + vnf = vnfComp.getValue(); + } + } + final Map vfModules = new HashMap (); + final Map volumeGroups = new HashMap (); + + if (vnf == null) { + LOG.warn("Couldn't find VNF object " + vnfUuid + ". Problem with Tosca model?"); + continue; + } + + vnf.setInputs(vnfModel.gettopology_template().getInputs()); + + for (Entry component1 : vnfModel.gettopology_template().getGroups().entrySet()) { + final Group group = component1.getValue(); + final String type = group.getType(); + final String modelCustomizationName = component1.getKey(); + + // VF Module Customization UUID: We may have the complete set of all VF Modules for all VNFs under service and VF Modules under each VNF. + // Keep using the VF Modules under VNFs but we need to get the customization uuid from the service level and put them + // under each VF module at the VNF level + + if (type.startsWith(vfModuleTag)) { + + VfModule vfMod = VfModule.extractVfModule(modelCustomizationName, group); + + // Add the vf module customization uuid from the service model + // The key of the VF Module in the service level will be the VF instance name appended to the VF Module name: + // .. + /* String normalizedVnfCustomizationName = VNF.normalizeName (vnf.getModelCustomizationName()); + org.openecomp.vid.model.Service.extractVfModuleCustomizationUUID (serviceModel.getService(), normalizedVnfCustomizationName, vfMod);*/ + + vfModules.put(modelCustomizationName, vfMod); + + if ( vfMod.isVolumeGroupAllowed() ) { + volumeGroups.put(modelCustomizationName, VolumeGroup.extractVolumeGroup(modelCustomizationName, group)); + } + + } + } + + vnf.setVfModules(vfModules); + vnf.setVolumeGroups(volumeGroups); + } + + serviceModel.setVnfs(vnfs); + serviceModel.setNetworks(networks); + + return serviceModel; + } catch (AsdcCatalogException e) { + LOG.error("Failed to retrieve service definitions from SDC", e); + throw new VidServiceUnavailableException("Failed to retrieve service definitions from SDC", e); + } + } + + public ServiceModel getCustomizedServices(ToscaModel asdcServiceToscaModel, ServiceModel serviceModel) { + String methodName = "asdcServiceToscaModel"; + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " start"); + + // asdcServiceToscaModel should have vf modules and vol groups populated at this point but + // they are not associated with the VNFs + serviceModel.extractGroups(asdcServiceToscaModel); + // Now put the vf modules and volume groups under the VNF they belong too + serviceModel.associateGroups(); + return (serviceModel); + } + + /** + * Gets the services view. + * + * @param request the request + * @return the services view + * @throws VidServiceUnavailableException the vid service unavailable exception + */ + @RequestMapping(value={"/serviceModels"}, method=RequestMethod.GET) + public ModelAndView getServicesView(HttpServletRequest request) throws VidServiceUnavailableException { + return new ModelAndView("serviceModels"); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/VidHomeController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/VidHomeController.java new file mode 100755 index 000000000..cfb915b03 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/VidHomeController.java @@ -0,0 +1,79 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + + +/** + * The Class VidHomeController. + */ +@RestController +public class VidHomeController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + + /** The servlet context. */ + private @Autowired ServletContext servletContext; + + /** + * Welcome. + * + * @param request the request + * @return the model and view + */ + @RequestMapping(value = {"/vidhome" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + + return new ModelAndView(getViewName()); + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String viewName) { + this.viewName = viewName; + } + + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewEditSubController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewEditSubController.java new file mode 100755 index 000000000..e23b99ba4 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewEditSubController.java @@ -0,0 +1,107 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + + +import java.io.File; +import java.text.DateFormat; +import java.util.HashMap; +import java.util.Map; + + + + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + + +/** + * The Class ViewEditSubController. + */ +@RestController +public class ViewEditSubController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ViewEditSubController.class); + + /** The model. */ + private Map model = new HashMap(); + + /** The servlet context. */ + private @Autowired ServletContext servletContext; + + /** + * Welcome. + * + * @param request the request + * @return the model and view + */ + @RequestMapping(value = {"/vieweditsub" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + return new ModelAndView("vieweditsub","model", model); + // return new ModelAndView(getViewName()); + } + + /** + * Post subscriber. + * + * @param request the request + */ + @RequestMapping(value="/vieweditsub/subedit", method = RequestMethod.POST) + public void PostSubscriber(HttpServletRequest request) { + + String subID = request.getParameter("subscriberID"); + model.put("subInfo", subID); + + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String viewName) { + this.viewName = viewName; + } + + + + +} + diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewLogController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewLogController.java new file mode 100755 index 000000000..31e64983e --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/ViewLogController.java @@ -0,0 +1,84 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + + +/** + * The Class ViewLogController. + */ +@RestController +public class ViewLogController extends RestrictedBaseController{ + + /** The view name. */ + String viewName; + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ViewLogController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The servlet context. */ + private @Autowired ServletContext servletContext; + + /** + * Welcome. + * + * @param request the request + * @return the model and view + */ + @RequestMapping(value = {"/viewlog" }, method = RequestMethod.GET) + public ModelAndView welcome(HttpServletRequest request) { + + return new ModelAndView(getViewName()); + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#getViewName() + */ + public String getViewName() { + return viewName; + } + + /* (non-Javadoc) + * @see org.openecomp.portalsdk.core.controller.RestrictedBaseController#setViewName(java.lang.String) + */ + public void setViewName(String viewName) { + this.viewName = viewName; + } + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAaiController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAaiController.java new file mode 100755 index 000000000..79017410c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAaiController.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller.test; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jackson.map.ObjectMapper; +import org.openecomp.vid.model.ExceptionResponse; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + +/** + * The Class TestAaiController. + */ +@RestController +@RequestMapping("testaai") +public class TestAaiController extends RestrictedBaseController { + + /** + * Gets the subscription service type list. + * + * @param globalCustomerId the global customer id + * @param request the request + * @return the subscription service type list + * @throws Exception the exception + */ + @RequestMapping(value = "/getSubscriptionServiceTypeList/{globalCustomerId}", method = RequestMethod.GET) + public String getSubscriptionServiceTypeList(@PathVariable("globalCustomerId") String globalCustomerId, HttpServletRequest request) + throws Exception { + + System.err.println("GET SUBSCRIPTION SERVICE TYPE LIST: globalCustomerId: " + globalCustomerId); + + return "[\"vMOG\", \"sevice type 2\", \"sevice type 3\", \"sevice type 4\"]"; + } + + /** + * Exception. + * + * @param e the e + * @param response the response + * @throws IOException Signals that an I/O exception has occurred. + */ + @ExceptionHandler(Exception.class) + private void exception(Exception e, HttpServletResponse response) throws IOException { + + /* + * This logging step should preferably be replaced with an appropriate + * logging method consistent whatever logging mechanism the rest of the + * application code uses. + */ + + e.printStackTrace(System.err); + + response.setContentType("application/json; charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ExceptionResponse exceptionResponse = new ExceptionResponse(); + exceptionResponse.setException(e.getClass().toString().replaceFirst("^.*\\.", "")); + exceptionResponse.setMessage(e.getMessage()); + + response.getWriter().write(new ObjectMapper().writeValueAsString(exceptionResponse)); + + response.flushBuffer(); + + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAsdcController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAsdcController.java new file mode 100755 index 000000000..84a56b3b2 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestAsdcController.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller.test; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jackson.map.ObjectMapper; +import org.openecomp.vid.model.ExceptionResponse; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + +/** + * The Class TestAsdcController. + */ +@RestController +@RequestMapping("testasdc") +public class TestAsdcController extends RestrictedBaseController { + + /** + * Gets the model. + * + * @param modelId the model id + * @param request the request + * @return the model + * @throws Exception the exception + */ + @RequestMapping(value = "/getModel/{modelId}", method = RequestMethod.GET) + public String getModel(@PathVariable("modelId") String modelId, HttpServletRequest request) throws Exception { + + System.err.println("SDC: GET MODEL: modelId: " + modelId); + + // @formatter:off + return + "{" + + "\"uuid\": \"5be686dc-fdca-4d54-8548-5d0ed23e962b\"," + + "\"invariantUUID\": \"e5962da9-fe4f-433a-bc99-b43e0d88a9a1\"," + + "\"name\": \"DE220127\"," + + "\"version\": \"0.1\"," + + "\"inputs\": {" + + "\"defaultGateway\": {" + + "\"type\": \"String\"," + + "\"default\": \"192.168.1.1\"," + + "\"description\": \"Router default gateway - use any valid IPv4 address\"" + + "}," + + "\"subnetMask\": {" + + "\"type\": \"String\"," + + "\"default\": \"255.255.255.0\"," + + "\"description\": \"Router subnet mask - example (255.255.255.0)\"" + + "}" + + "}" + + "}"; + // @formatter:on + } + + /** + * Exception. + * + * @param e the e + * @param response the response + * @throws IOException Signals that an I/O exception has occurred. + */ + @ExceptionHandler(Exception.class) + private void exception(Exception e, HttpServletResponse response) throws IOException { + + /* + * This logging step should preferably be replaced with an appropriate + * logging method consistent whatever logging mechanism the rest of the + * application code uses. + */ + + e.printStackTrace(System.err); + + response.setContentType("application/json; charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ExceptionResponse exceptionResponse = new ExceptionResponse(); + exceptionResponse.setException(e.getClass().toString().replaceFirst("^.*\\.", "")); + exceptionResponse.setMessage(e.getMessage()); + + response.getWriter().write(new ObjectMapper().writeValueAsString(exceptionResponse)); + + response.flushBuffer(); + + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestMsoController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestMsoController.java new file mode 100755 index 000000000..02c29f678 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestMsoController.java @@ -0,0 +1,729 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller.test; + +import java.io.IOException; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jackson.map.ObjectMapper; +import org.openecomp.vid.model.ExceptionResponse; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + +/* + * The "TestMsoController" class is primarily designed to help test "msoCommitController.js" + * + * This class expects and receives JSON data in the same format as expected + * in the "real" application version of this code. However, string versions of JSON are + * maintained internally here instead of marshalled / unmarshalled JSON objects. + * The primary reasons for this were to encapsulate all the test code in this single file and + * minimize the time required to support initial test cases. + * + * The non-test equivalent of this controller could alternatively incorporate POJO objects + * instead of strings. However, the same data format sent to / received from the browser + * JavaScript code would still be expected. + * + * Two specific mechanisms used in this test class may be useful to the application version: + * + * 1) The use of "{variable}" elements in @RequestMappings along with the corresponding + * @PathVariable declarations. + * + * 2) The use of @ExceptionHandler for general purpose exception handler. + * (See @ExceptionHandler comments) + * + * This class is intended to be used in either: + * + * A) Eclipse environments + * OR + * B) Linux environments with ONLY a single user running tests. + * The "quick and dirty" error simulation approach used here makes use of static states for some + * scenarios. Thus multiple users simultaneously testing in Linux environments + * may have contention issues. + */ + +/** + * The Class TestMsoController. + */ +@RestController +@RequestMapping("testmso") +public class TestMsoController extends RestrictedBaseController { + + /* + * Artificial delay (in milliseconds) added before responding to create / + * delete requests + */ + + /** The Constant TEST_DELAY_SHORT_MSEC. */ + private final static int TEST_DELAY_SHORT_MSEC = 1000; + + /* + * Long delay to simulate non-responsive server test + */ + + /** The Constant TEST_DELAY_LONG_MSEC. */ + private final static int TEST_DELAY_LONG_MSEC = 15000; + + /* + * Default number of polls expected before transaction complete. + */ + + /** The Constant MAXIMUM_POLLS_DEFAULT. */ + private final static int MAXIMUM_POLLS_DEFAULT = 4; + + /* + * Number of polls to simulate "maximum polls exceeded" test. + */ + + /** The Constant MAXIMUM_POLLS_LARGE. */ + private final static int MAXIMUM_POLLS_LARGE = 10; + + /* + * Simulated error types. The GUI front end is expected to set these values + * in the "modelName" field of the "mso_create_svc_instance" request. + */ + + /** The Constant ERROR_POLICY_EXCEPTION. */ + private final static String ERROR_POLICY_EXCEPTION = "ERROR_POLICY_EXCEPTION"; + + /** The Constant ERROR_SERVICE_EXCEPTION. */ + private final static String ERROR_SERVICE_EXCEPTION = "ERROR_SERVICE_EXCEPTION"; + + /** The Constant ERROR_POLL_FAILURE. */ + private final static String ERROR_POLL_FAILURE = "ERROR_POLL_FAILURE"; + + /** The Constant ERROR_INVALID_FIELD_INITIAL. */ + private final static String ERROR_INVALID_FIELD_INITIAL = "ERROR_INVALID_FIELD_INITIAL"; + + /** The Constant ERROR_INVALID_FIELD_POLL. */ + private final static String ERROR_INVALID_FIELD_POLL = "ERROR_INVALID_FIELD_POLL"; + + /** The Constant ERROR_GENERAL_SERVER_EXCEPTION. */ + private final static String ERROR_GENERAL_SERVER_EXCEPTION = "ERROR_GENERAL_SERVER_EXCEPTION"; + + /** The Constant ERROR_MAX_POLLS. */ + private final static String ERROR_MAX_POLLS = "ERROR_MAX_POLLS"; + + /** The Constant ERROR_SERVER_TIMEOUT_INITIAL. */ + private final static String ERROR_SERVER_TIMEOUT_INITIAL = "ERROR_SERVER_TIMEOUT_INITIAL"; + + /** The Constant ERROR_SERVER_TIMEOUT_POLL. */ + private final static String ERROR_SERVER_TIMEOUT_POLL = "ERROR_SERVER_TIMEOUT_POLL"; + + /** The simulated error. */ + private String simulatedError = ""; + + /** The maximum polls. */ + private int maximumPolls = 0; + + /** The attempt count. */ + private int attemptCount = 0; + + /** + * Creates the svc instance. + * + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_svc_instance", method = RequestMethod.POST) + public ResponseEntity createSvcInstance(HttpServletRequest request) throws Exception { + readAndLogRequest("CREATE SERVICE INSTANCE", request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + + /* + * This block of code simulates various errors and would NOT be expected + * in a non-test method + */ + System.err.println("simulatedError: " + simulatedError); + + if (simulatedError.equals(ERROR_POLICY_EXCEPTION)) { + return new ResponseEntity(policyExceptionResponse, HttpStatus.OK); + } + if (simulatedError.equals(ERROR_SERVICE_EXCEPTION)) { + return new ResponseEntity(serviceExceptionResponse, HttpStatus.OK); + } + if (simulatedError.equals(ERROR_INVALID_FIELD_INITIAL)) { + /* + * Force invalid response field name. Return + * "XXXXXrequestReferences" instead of "requestReferences" + */ + return new ResponseEntity(acceptResponse.replace("requestReferences", "XXXXXrequestReferences"), + HttpStatus.OK); + } + + if (simulatedError.equals(ERROR_GENERAL_SERVER_EXCEPTION)) { + throw new IOException("an example of an IO exception"); + } + + if (simulatedError.equals(ERROR_SERVER_TIMEOUT_INITIAL)) { + Thread.sleep(TEST_DELAY_LONG_MSEC); + } + + if (simulatedError.equals(ERROR_MAX_POLLS)) { + maximumPolls = MAXIMUM_POLLS_LARGE; + } + + /* + * End of block of simulated error code. + */ + + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Delete svc instance. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_svc_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteSvcInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + HttpServletRequest request) throws Exception { + readAndLogRequest("DELETE SERVICE INSTANCE: serviceInstanceId: " + serviceInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Creates the vnf instance. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_vnf_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVnfInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + HttpServletRequest request) throws Exception { + readAndLogRequest("CREATE VNF INSTANCE: serviceInstanceId: " + serviceInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Delete vnf instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_vnf_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteVnfInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, HttpServletRequest request) throws Exception { + readAndLogRequest( + "DELETE VNF INSTANCE: serviceInstanceId: " + serviceInstanceId + " vnfInstanceId: " + vnfInstanceId, + request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Creates the vf module instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + // /serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-ff1b-adb2-eb6b9e5460ff/vfModules + @RequestMapping(value = "/mso_create_vfmodule_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVfModuleInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, HttpServletRequest request) throws Exception { + readAndLogRequest("CREATE VF MODULE INSTANCE: serviceInstanceId: " + serviceInstanceId + " vnfInstanceId: " + + vnfInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Delete vf module instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param vfModuleInstanceId the vf module instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + // /serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-ff1b-adb2-eb6b9e5460ff/vfModules/ff305d54-75b4-ff1b-bdb2-eb6b9e5460ff + @RequestMapping(value = "/mso_delete_vfmodule_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfModuleInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteVfModuleInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, + @PathVariable("vfModuleInstanceId") String vfModuleInstanceId, HttpServletRequest request) + throws Exception { + readAndLogRequest("DELETE VF MODULE INSTANCE: serviceInstanceId: " + serviceInstanceId + " vnfInstanceId: " + + vnfInstanceId + " vfModuleInstanceId: " + vfModuleInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + // POST + /** + * Creates the volume group instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + // /serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups + @RequestMapping(value = "/mso_create_volumegroup_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}", method = RequestMethod.POST) + public ResponseEntity createVolumeGroupInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, HttpServletRequest request) throws Exception { + readAndLogRequest("CREATE VOLUME GROUP INSTANCE: seviceInstanceId: " + serviceInstanceId + " vnfInstanceId: " + + vnfInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Delete volume group instance. + * + * @param serviceInstanceId the service instance id + * @param vnfInstanceId the vnf instance id + * @param volumeGroupInstanceId the volume group instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + // /serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-ff1b-cdb2-eb6b9e5460ff + @RequestMapping(value = "/mso_delete_volumegroup_instance/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteVolumeGroupInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, + @PathVariable("volumeGroupInstanceId") String volumeGroupInstanceId, HttpServletRequest request) + throws Exception { + readAndLogRequest("DELETE NW INSTANCE: serviceInstanceId: " + serviceInstanceId + " vnfInstanceId: " + + vnfInstanceId + " volumeGroupInstanceId: " + volumeGroupInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Creates the nw instance. + * + * @param serviceInstanceId the service instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_create_nw_instance/{serviceInstanceId}", method = RequestMethod.POST) + public ResponseEntity createNwInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + HttpServletRequest request) throws Exception { + readAndLogRequest("CREATE NW INSTANCE: serviceInstanceId: " + serviceInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Delete nw instance. + * + * @param serviceInstanceId the service instance id + * @param networkInstanceId the network instance id + * @param request the request + * @return the response entity + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_delete_nw_instance/{serviceInstanceId}/networks/{networkInstanceId}", method = RequestMethod.POST) + public ResponseEntity deleteNwInstance(@PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("networkInstanceId") String networkInstanceId, HttpServletRequest request) throws Exception { + readAndLogRequest("DELETE NW INSTANCE: serviceInstanceId: " + serviceInstanceId + " networkInstanceId: " + + networkInstanceId, request); + Thread.sleep(TEST_DELAY_SHORT_MSEC); + maximumPolls = MAXIMUM_POLLS_DEFAULT; // Simulates MSO polling behavior + attemptCount = 0; + return new ResponseEntity(acceptResponse, HttpStatus.OK); + } + + /** + * Gets the orchestration request. + * + * @param requestId the request id + * @param request the request + * @return the orchestration request + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_get_orch_req/{requestId}", method = RequestMethod.GET) + public ResponseEntity getOrchestrationRequest(@PathVariable("requestId") String requestId, + HttpServletRequest request) throws Exception { + + System.err.println("GET ORCHESTRATION REQUEST: requestId: " + requestId); + + /* + * This block of code simulates various errors and would NOT be expected + * in a non-test method + */ + + if (simulatedError.equals(ERROR_INVALID_FIELD_POLL)) { + /* + * Force invalid response field name. Return "XXXXXrequestStatus" + * instead of "requestStatus" + */ + return new ResponseEntity(inProgressResponse.replace("requestStatus", "XXXXXrequestStatus"), + HttpStatus.OK); + } + + if (simulatedError.equals(ERROR_POLL_FAILURE)) { + /* + * Force status field with "Failure" + */ + return new ResponseEntity(inProgressResponse.replace("InProgress", "Failure"), HttpStatus.OK); + } + + if (simulatedError.equals(ERROR_SERVER_TIMEOUT_POLL)) { + Thread.sleep(TEST_DELAY_LONG_MSEC); + } + + /* + * End of block of simulated error code. + */ + + /* + * This logic simulates how MSO might behave ... i.e. return different + * results depending on the value of 'maximumPolls'. + * + */ + int percentProgress = (++attemptCount * 100) / maximumPolls; + + System.err.println("attempts: " + attemptCount + " max: " + maximumPolls + " percent: " + percentProgress); + + String response = inProgressResponse.replace("\"50\"", "\"" + Integer.toString(percentProgress) + "\""); + + if (attemptCount < maximumPolls) { + if (attemptCount > 1) { + response = response.replace("vLan setup", "setup step " + Integer.toString(attemptCount)); + } + return new ResponseEntity(response, HttpStatus.OK); + } else { + return new ResponseEntity( + response.replace("InProgress", "Complete").replace("vLan setup complete", ""), HttpStatus.OK); + } + } + + /** + * Gets the orchestration requests. + * + * @param filterString the filter string + * @param request the request + * @return the orchestration requests + * @throws Exception the exception + */ + @RequestMapping(value = "/mso_get_orch_reqs/{filterString}", method = RequestMethod.GET) + public ResponseEntity getOrchestrationRequests(@PathVariable("filterString") String filterString, + HttpServletRequest request) throws Exception { + + System.err.println("GET ORCHESTRATION REQUESTS: filterString: " + filterString); + + return new ResponseEntity(getOrchestrationRequestsResponse, HttpStatus.OK); + + } + + /* + * General purpose exception handler that could be used in application code. + * + * The method returns exceptions as error code 500. Both the exception type + * and message are written as a JSON object. + * + * See the following references: + * + * 1) The ExceptionResponse POJO. + * + * 2) The "getHttpErrorMessage" function in "utilityService.js" - an example + * of how the browser JavaScript code can interpret this response. + */ + + /** + * Exception. + * + * @param e the e + * @param response the response + * @throws IOException Signals that an I/O exception has occurred. + */ + @ExceptionHandler(Exception.class) + private void exception(Exception e, HttpServletResponse response) throws IOException { + + /* + * This logging step should preferably be replaced with an appropriate + * logging method consistent whatever logging mechanism the rest of the + * application code uses. + */ + + e.printStackTrace(System.err); + + response.setContentType("application/json; charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ExceptionResponse exceptionResponse = new ExceptionResponse(); + exceptionResponse.setException(e.getClass().toString().replaceFirst("^.*\\.", "")); + exceptionResponse.setMessage(e.getMessage()); + + response.getWriter().write(new ObjectMapper().writeValueAsString(exceptionResponse)); + + response.flushBuffer(); + + } + + /* + * 'readAndLogRequest' only intended to be used for testing. + * + * The method reads JSON from the input stream and thus prevents other + * mechanisms from reading the input. + */ + + /** + * Read and log request. + * + * @param label the label + * @param request the request + * @throws Exception the exception + */ + private void readAndLogRequest(String label, HttpServletRequest request) throws Exception { + String input = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); + + ObjectMapper mapper = new ObjectMapper(); + Object json = mapper.readValue(input, Object.class); + + System.err.println(label + "\n" + mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json)); + + /* + * Only needed for error simulation ... + */ + if (input.matches("^.*modelName.*$")) { + simulatedError = input.replaceAll("^.*\"modelName\":\"", "").replaceAll("\".*$", ""); + } + } + + /* + * Various test responses: + */ + + // @formatter:off + + /** The accept response. */ + /* + * Sample responses to initial create / delete transaction + */ + private String acceptResponse = + "{" + + " \"status\": 202," + + " \"entity\": {" + + " \"requestReferences\": {" + + " \"instanceId\": \"bc305d54-75b4-431b-adb2-eb6b9e546014\"," + + " \"requestId\": \"rq1234d1-5a33-55df-13ab-12abad84e331\"" + + " }" + + " }" + + "}"; + + /** The policy exception response. */ + private String policyExceptionResponse = + "{" + + " \"status\": 400," + + " \"entity\": { " + + " \"requestError\": {" + + " \"policyException\": {" + + " \"messageId\": \"POL9003\"," + + " \"text\": \"Message content size exceeds the allowable limit\"" + + " }" + + " }" + + " }" + + "}"; + + /** The service exception response. */ + private String serviceExceptionResponse = + "{" + + " \"status\": 400," + + " \"entity\": { " + + " \"requestError\": {" + + " \"serviceException\": {" + + " \"messageId\": \"SVC2000\"," + + " \"text\": \"Missing Parameter: %1. Error code is %2\"," + + " \"variables\": [" + + " \"severity\"," + + " \"400\"" + + " ]" + + " }" + + " }" + + " }" + + "}" + + ""; + + /** The in progress response. */ + /* + * Sample response to subsequent getOrchestrationRequest + */ + private String inProgressResponse = + "{" + + " \"status\": 200," + + " \"entity\": {" + + " \"request\": {" + + " \"requestId\": \"rq1234d1-5a33-55df-13ab-12abad84e333\"," + + " \"startTime\": \"Thu, 04 Jun 2009 02:51:59 GMT\"," + + " \"instanceIds\": {" + + " \"serviceInstanceId\": \"bc305d54-75b4-431b-adb2-eb6b9e546014\"" + + " }," + + " \"requestScope\": \"service\"," + + " \"requestType\": \"createInstance\"," + + " \"requestDetails\": {" + + " \"modelInfo\": {" + + " \"modelType\": \"service\"," + + " \"modelId\": \"sn5256d1-5a33-55df-13ab-12abad84e764\"," + + " \"modelNameVersionId\": \"ab6478e4-ea33-3346-ac12-ab121484a333\"," + + " \"modelName\": \"WanBonding\"," + + " \"modelVersion\": \"1\"" + + " }," + + " \"subscriberInfo\": {" + + " \"globalSubscriberId\": \"C12345\"," + + " \"subscriberName\": \"General Electric Division 12\"" + + " }," + + " \"requestParameters\": {" + + " \"vpnId\": \"1a2b3c4d5e6f\"," + + " \"productName\": \"Trinity\"," + + " \"customerId\": \"icore9883749\"" + + " }" + + " }," + + " \"requestStatus\": {" + + " \"timestamp\": \"Thu, 04 Jun 2009 02:53:39 GMT\"," + + " \"requestState\": \"InProgress\"," + + " \"statusMessage\": \"vLan setup complete\"," + + " \"percentProgress\": \"50\"" + + " }" + + " }" + + " }" + + "}"; + + /* + * Sample response to subsequent getOrchestrationRequests + */ + + /** The get orchestration requests response. */ + private String getOrchestrationRequestsResponse = + "{" + + " \"status\": 200," + + " \"entity\": {" + + " \"requestList\": [" + + " {" + + " \"request\": {" + + " \"requestId\": \"rq1234d1-5a33-55df-13ab-12abad84e333\"," + + " \"startTime\": \"Thu, 04 Jun 2009 02:51:59 GMT\"," + + " \"finishTime\": \"Thu, 04 Jun 2009 02:55:59 GMT\"," + + " \"instanceReferences\": {" + + " \"serviceInstanceId\": \"bc305d54-75b4-431b-adb2-eb6b9e546014\"" + + " }," + + " \"requestScope\": \"service\"," + + " \"requestType\": \"createInstance\"," + + " \"requestDetails\": {" + + " \"modelInfo\": {" + + " \"modelType\": \"service\"," + + " \"modelId\": \"sn5256d1-5a33-55df-13ab-12abad84e764\"," + + " \"modelNameVersionId\": \"ab6478e4-ea33-3346-ac12-ab121484a333\"," + + " \"modelName\": \"WanBonding\"," + + " \"modelVersion\": \"1\"" + + " }," + + " \"subscriberInfo\": {" + + " \"globalSubscriberId\": \"C12345\"," + + " \"subscriberName\": \"General Electric Division 12\"" + + " }," + + " \"requestParameters\": {" + + " \"vpnId\": \"1a2b3c4d5e6f\"," + + " \"productName\": \"Trinity\"," + + " \"customerId\": \"icore9883749\"" + + " }" + + " }," + + " \"requestStatus\": {" + + " \"timestamp\": \"Thu, 04 Jun 2009 02:54:49 GMT\"," + + " \"requestState\": \"complete\"," + + " \"statusMessage\": \"Resource Created\"," + + " \"percentProgress\": \"100\"" + + " }" + + " }" + + " }," + + " {" + + " \"request\": {" + + " \"requestId\": \"rq1234d1-5a33-55df-13ab-12abad84e334\"," + + " \"startTime\": \"Thu, 04 Jun 2009 03:52:59 GMT\"," + + " \"instanceReferences\": {" + + " \"serviceInstanceId\": \"bc305d54-75b4-431b-adb2-eb6b9e546014\"" + + " }," + + " \"requestScope\": \"service\"," + + " \"requestType\": \"updateInstance\"," + + " \"requestDetails\": {" + + " \"modelInfo\": {" + + " \"modelType\": \"service\"," + + " \"modelId\": \"sn5256d1-5a33-55df-13ab-12abad84e764\"," + + " \"modelNameVersionId\": \"ab6478e4-ea33-3346-ac12-ab121484a333\"," + + " \"modelName\": \"WanBonding\"," + + " \"modelVersion\": \"1\"" + + " }," + + " \"subscriberInfo\": {" + + " \"globalSubscriberId\": \"C12345\"," + + " \"subscriberName\": \"General Electric Division 12\"" + + " }," + + " \"requestParameters\": {" + + " \"vpnId\": \"1a2b3c4d5e70\"," + + " \"productName\": \"Trinity\"," + + " \"customerId\": \"icore9883749\"" + + " }" + + " }," + + " \"requestStatus\": {" + + " \"timestamp\": \"Thu, 04 Jun 2009 03:53:39 GMT\"," + + " \"requestState\": \"InProgress\"," + + " \"statusMessage\": \"vLan setup complete\"," + + " \"percentProgress\": \"50\"" + + " }" + + " }" + + " }" + + " ]" + + " }" + + "}"; +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestPageController.java b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestPageController.java new file mode 100755 index 000000000..92f86f0bd --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/controller/test/TestPageController.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.controller.test; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; + +/** + * The Class TestPageController. + */ +@Controller +public class TestPageController extends RestrictedBaseController { + + /** + * Test mso page. + * + * @return the model and view + */ + @RequestMapping(value = { "testMso.htm" }, method = RequestMethod.GET) + public ModelAndView testMsoPage() { + return new ModelAndView(getViewName()); + } + + /** + * Test view edit page. + * + * @return the model and view + */ + @RequestMapping(value = { "testViewEdit" }, method = RequestMethod.GET) + public ModelAndView testViewEditPage() { + return new ModelAndView(getViewName()); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/dao/FnAppDoaImpl.java b/vid-app-common/src/main/java/org/openecomp/vid/dao/FnAppDoaImpl.java new file mode 100755 index 000000000..6d2810aa0 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/dao/FnAppDoaImpl.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.dao; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URL; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Properties; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; + + +public class FnAppDoaImpl { + + /** The logger. */ + static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FnAppDoaImpl.class); + + public int getProfileCount(String driver, String URL, String username, String password) { + Connection dbc = null; + PreparedStatement pst = null; + ResultSet rs = null; + String q = null; + int count = 0; + try { + dbc = getConnection(driver,URL,username,password); + logger.debug(EELFLoggerDelegate.debugLogger, "getConnection:::"+ dbc); + q = "select count(*) from fn_app"; + pst = dbc.prepareStatement(q); + rs = pst.executeQuery(); + + if (rs.next()) + count = rs.getInt(1); + } catch(Exception ex) { + logger.error(EELFLoggerDelegate.errorLogger, "Failed to perform health check", ex); + } finally { + cleanup(rs,pst,dbc); + } + logger.debug(EELFLoggerDelegate.debugLogger, "count:::"+ count); + return count; + } + + public static Connection getConnection(String driver2, String url, String username, String password) throws IOException, SQLException, ClassNotFoundException{ + java.sql.Connection con=null; + + if( url!=null && username!=null && password!=null ){ + con = DriverManager.getConnection(url, username, password); + } + + System.out.println("Connection Successful"); + return con; + + } + + public static void cleanup(ResultSet rs, PreparedStatement st, Connection c) { + if (rs != null) { + try { + rs.close(); + } catch (Exception e) { + if (logger != null) + logger.error("Error when trying to close result set", e); + } + } + if (st != null) { + try { + st.close(); + } catch (Exception e) { + if (logger != null) + logger.error("Error when trying to close statement", e); + } + } + if (c != null) { + try { + c.rollback(); + } catch (Exception e) { + if (logger != null) + logger.error("Error when trying to rollback connection", e); + } + try { + c.close(); + } catch (Exception e) { + if (logger != null) + logger.error("Error when trying to close connection", e); + } + } + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/dao/ProfileDao.java b/vid-app-common/src/main/java/org/openecomp/vid/dao/ProfileDao.java new file mode 100755 index 000000000..256a4bd8d --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/dao/ProfileDao.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.dao; + +import java.util.List; +import org.openecomp.portalsdk.core.domain.Profile; + +/** + * The Interface ProfileDao. + */ +public interface ProfileDao { + + /** + * Find all. + * + * @return the list + */ + List findAll(); + + /** + * Gets the profile. + * + * @param id the id + * @return the profile + */ + Profile getProfile(int id); +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/exceptions/VidServiceUnavailableException.java b/vid-app-common/src/main/java/org/openecomp/vid/exceptions/VidServiceUnavailableException.java new file mode 100755 index 000000000..fcd897f78 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/exceptions/VidServiceUnavailableException.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +/** + * The Class VidServiceUnavailableException. + */ +@ResponseStatus(value=HttpStatus.SERVICE_UNAVAILABLE) +public class VidServiceUnavailableException extends Exception { + + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + /** + * Instantiates a new vid service unavailable exception. + */ + public VidServiceUnavailableException() { + super(); + } + + /** + * Instantiates a new vid service unavailable exception. + * + * @param msg the msg + */ + public VidServiceUnavailableException(String msg) { + super(msg); + } + + /** + * Instantiates a new vid service unavailable exception. + * + * @param t the t + */ + public VidServiceUnavailableException(Throwable t) { + super(t); + } + + /** + * Instantiates a new vid service unavailable exception. + * + * @param msg the msg + * @param t the t + */ + public VidServiceUnavailableException(String msg, Throwable t) { + super(msg, t); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/CommandProperty.java b/vid-app-common/src/main/java/org/openecomp/vid/model/CommandProperty.java new file mode 100755 index 000000000..fe114c380 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/CommandProperty.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.util.Map; + +/** + * The Class Command Property. + */ +public class CommandProperty { + + /** The display name for this input */ + private String displayName; + + /** The command, "get_input" */ + private String command; + + /** The input name we refer to back under the inputs section */ + private String inputName; + + /** + * Gets the display name. + * + * @return the displayName + */ + public String getDisplayName() { + return displayName; + } + /** + * Gets the command. + * + * @return the command + */ + public String getCommand() { + return command; + } + /** + * Gets the inputName. + * + * @return the inputName + */ + public String getInputName() { + return inputName; + } + /** + * Sets the display name value. + * + * @param i the new get_input value + */ + public void setDisplayName(String i) { + this.displayName = i; + } + /** + * Sets the command value. + * + * @param i the new command value + */ + public void setCommand(String i) { + this.command = i; + } + + /** + * Sets the input name value. + * + * @param i the new input name value + */ + public void setInputName(String i) { + this.inputName=i; + } + + public String toString () { + String result = "displayName=" + displayName + " command=" + command + " inputName" + inputName; + return result; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/ExceptionResponse.java b/vid-app-common/src/main/java/org/openecomp/vid/model/ExceptionResponse.java new file mode 100755 index 000000000..686971d76 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/ExceptionResponse.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +/** + * The Class ExceptionResponse. + */ +public class ExceptionResponse { + + /** The exception. */ + private String exception; + + /** The message. */ + private String message; + + /** + * Gets the exception. + * + * @return the exception + */ + public String getException() { + return exception; + } + + /** + * Sets the exception. + * + * @param exception the new exception + */ + public void setException(String exception) { + this.exception = exception; + } + + /** + * Gets the message. + * + * @return the message + */ + public String getMessage() { + return message; + } + + /** + * Sets the message. + * + * @param message the new message + */ + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/ModelConstants.java b/vid-app-common/src/main/java/org/openecomp/vid/model/ModelConstants.java new file mode 100755 index 000000000..f4e427076 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/ModelConstants.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; +/** + * The Class ModelConstants + */ +public class ModelConstants { + + /** The Constant GET_INPUT_TAG. */ + public final static String GET_INPUT_TAG = "get_input"; + + public static final String ASDC_MODEL_NAMESPACE = "asdc.model.namespace"; + public static final String ASDC_SVC_API_PATH = "sdc.svc.api.path"; + public static final String ASDC_RESOURCE_API_PATH = "sdc.resource.api.path"; + + public static final String DEFAULT_ASDC_MODEL_NAMESPACE = "org.onap."; + public static final String DEFAULT_ASDC_SVC_API_PATH = "sdc/v1/catalog/services"; + public static final String DEFAULT_ASDC_RESOURCE_API_PATH = "sdc/v1/catalog/resources"; + + public final static String VF_MODULE = "groups.VfModule"; + public final static String VNF = "resource.vf"; + public final static String NETWORK = "resource.vl"; + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/Network.java b/vid-app-common/src/main/java/org/openecomp/vid/model/Network.java new file mode 100755 index 000000000..5ab55881b --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/Network.java @@ -0,0 +1,62 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import org.openecomp.vid.asdc.beans.tosca.NodeTemplate; + +/** + * The Class Network. + */ +public class Network extends Node { + + /** The model customization name. */ + private String modelCustomizationName; + + /** + * Instantiates a new network. + */ + public Network() { + super(); + } + /** + * Gets the model customization name. + * + * @return the model customization name + */ + public String getModelCustomizationName() { + return modelCustomizationName; + } + /** + * Sets the model customization name. + * + * @param modelCustomizationName the new model customization name + */ + private void setModelCustomizationName(String modelCustomizationName) { + this.modelCustomizationName = modelCustomizationName; + } + + public void extractNetwork(String modelCustomizationName, NodeTemplate nodeTemplate) { + + super.extractNode(nodeTemplate); + setModelCustomizationName(modelCustomizationName); + + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/Node.java b/vid-app-common/src/main/java/org/openecomp/vid/model/Node.java new file mode 100755 index 000000000..1352653e1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/Node.java @@ -0,0 +1,301 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.openecomp.vid.asdc.beans.tosca.Input; +import org.openecomp.vid.asdc.beans.tosca.NodeTemplate; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +/** + * The Class Node. + */ +public class Node { + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(Node.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The uuid. */ + private String uuid; + + /** The invariant uuid. */ + private String invariantUuid; + + /** The description. */ + private String description; + + /** The name. */ + private String name; + + /** The version. */ + private String version; + + /** The model customization uuid. */ + private String customizationUuid; + + /** The inputs. */ + private Map inputs; + + /** The get_input or other constructs from node template properties. */ + private Map commands; + + /** The get_input or other constructs from node template properties. */ + private Map properties; + /** + * Instantiates a new node. + */ + public Node() { + this.commands = new HashMap(); + this.properties = new HashMap(); + } + + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + + /** + * Gets the invariant uuid. + * + * @return the invariant uuid + */ + public String getInvariantUuid() { + return invariantUuid; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Gets the customization uuid. + * + * @return the model customization uuid + */ + public String getCustomizationUuid() { + return customizationUuid; + } + /** + * Gets the inputs. + * + * @return the inputs + */ + public Map getInputs() { + return inputs; + } + /** + * Gets the commands. + * + * @return the commands + */ + public Map getCommands() { + return commands; + } + /** + * Gets the properties. + * + * @return the properties + */ + public Map getProperties() { + return properties; + } + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant uuid. + * + * @param invariantUuid the new invariant uuid + */ + public void setInvariantUuid(String invariantUuid) { + this.invariantUuid = invariantUuid; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + /** + * Sets the customization uuid. + * + * @param u the new customization uuid + */ + public void setCustomizationUuid(String u) { + this.customizationUuid = u; + } + + /** + * Sets the inputs. + * + * @param inputs the inputs + */ + public void setInputs(Map inputs) { + this.inputs = inputs; + } + /** + * Sets the commands. + * + * @param m the commands + */ + public void setCommands( Mapm ) { + commands = m; + } + /** + * Sets the properties. + * + * @param p the properties + */ + public void setProperties( Mapp) { + properties = p; + } + /** + * Extract node. + * + * @param modelCustomizationName the model customization name + * @param nodeTemplate the node template + * @return the node + */ + public void extractNode (NodeTemplate nodeTemplate) { + + String methodName = "extractNode"; + + setUuid(nodeTemplate.getMetadata().getUUID()); + setInvariantUuid(nodeTemplate.getMetadata().getInvariantUUID()); + setDescription(nodeTemplate.getMetadata().getDescription()); + setName(nodeTemplate.getMetadata().getName()); + setVersion(nodeTemplate.getMetadata().getVersion()); + // add customizationUUID + setCustomizationUuid(nodeTemplate.getMetadata().getCustomizationUUID()); + + try { + // nodeTemplate.getProperties() map of String->Object + for (Entry e : nodeTemplate.getProperties().entrySet()) { + + String k = e.getKey(); + + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " node template property: " + k ); + + if ( e.getValue() != null ) { + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " property: " + + k + "=" + e.getValue()); + //LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " V class name: " + + // e.getValue().getClass().getName()); + Class c = e.getValue().getClass(); + if ( c.getName().equalsIgnoreCase(java.lang.String.class.getName())) { + getProperties().put (k, (String)e.getValue()); + } + else { + Class[] interfaces = e.getValue().getClass().getInterfaces(); + + for(Class ifc: interfaces ) { + //LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " ifc name: " + + // ifc.getName()); + if ( ifc.getName().equalsIgnoreCase(java.util.Map.class.getName()) ) { + // only extract get_input for now + @SuppressWarnings("unchecked") + HashMap v = (HashMap)e.getValue(); + for (Entry entry : v.entrySet()) { + // only include get_input for now + if ( ModelConstants.GET_INPUT_TAG.equalsIgnoreCase ( entry.getKey() ) ) { + CommandProperty cp = new CommandProperty(); + cp.setCommand(entry.getKey()); + cp.setInputName(entry.getValue()); + cp.setDisplayName(k); + getCommands().put(k,cp); + } + } + } + } + + } + } + } + } + catch ( Exception e ) { + LOG.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodName + " Unable to parse node properties: e=" + + e.toString()); + } + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/Resource.java b/vid-app-common/src/main/java/org/openecomp/vid/model/Resource.java new file mode 100755 index 000000000..4dcc975b1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/Resource.java @@ -0,0 +1,28 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +/** + * The Class Resource. + */ +public class Resource { + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/Result.java b/vid-app-common/src/main/java/org/openecomp/vid/model/Result.java new file mode 100755 index 000000000..d8bf6eb64 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/Result.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +/** + * The Class Result. + */ +public class Result { + + /** The result. */ + private String result; + + /** + * Instantiates a new result. + * + * @param result the result + */ + public Result(String result) { + this.result = result; + } + + /** + * Gets the result. + * + * @return the result + */ + public String getResult() { + return result; + } + + /** + * Sets the result. + * + * @param result the new result + */ + public void setResult(String result) { + this.result = result; + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/Service.java b/vid-app-common/src/main/java/org/openecomp/vid/model/Service.java new file mode 100755 index 000000000..f3c6e4da4 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/Service.java @@ -0,0 +1,253 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; + +import org.openecomp.vid.asdc.beans.tosca.Input; + +/** + * The Class Service. + */ +public class Service { + + /** The uuid. */ + private String uuid; + + /** The invariant uuid. */ + private String invariantUuid; + + /** The name. */ + private String name; + + /** The version. */ + private String version; + + /** The tosca model URL. */ + private String toscaModelURL; + + /** The category. */ + private String category; + + /** The description. */ + private String description; + + /** The service ecomp naming flag */ + private String serviceEcompNaming; + + /** The inputs. */ + private Map inputs; + + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + + /** + * Gets the invariant uuid. + * + * @return the invariant uuid + */ + public String getInvariantUuid() { + return invariantUuid; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Gets the tosca model URL. + * + * @return the tosca model URL + */ + public String getToscaModelURL() { + return toscaModelURL; + } + + /** + * Gets the category. + * + * @return the category + */ + public String getCategory() { + return category; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the inputs. + * + * @return the inputs + */ + public Map getInputs() { + return inputs; + } + /** + * Get the serviceEcompNaming value + * + * @return serviceEcompNaming + */ + public String getServiceEcompNaming() { + return serviceEcompNaming; + } + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant uuid. + * + * @param invariantUuid the new invariant uuid + */ + public void setInvariantUuid(String invariantUuid) { + this.invariantUuid = invariantUuid; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * Sets the tosca model URL. + * + * @param toscaModelURL the new tosca model URL + */ + public void setToscaModelURL(String toscaModelURL) { + this.toscaModelURL = toscaModelURL; + } + + /** + * Sets the category. + * + * @param category the new category + */ + public void setCategory(String category) { + this.category = category; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the inputs. + * + * @param inputs the inputs + */ + public void setInputs(Map inputs) { + this.inputs = inputs; + } + /** + * Sets the service ecomp naming. + * + * @param serviceEcompNaming the new service ecomp naming + */ + public void setServiceEcompNaming(String serviceEcompNaming) { + this.serviceEcompNaming = serviceEcompNaming; + } + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final UUID uuid = UUID.fromString(getUuid()); + + return uuid.hashCode(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof Service)) return false; + + final Service service = (Service) o; + + return (service.getUuid().equals(getUuid())); + } + /*public static void extractVfModuleCustomizationUUID (Service s, String vnfCustomizationName, VfModule vfMod ) { + + //Look for vnfCustomizationName..vfModuleCustomizationName + String nameToFind = vnfCustomizationName + ".." + vfMod.getModelCustomizationName(); + for (Entry vfModuleComponent : s.getVfModules().entrySet()) { + VfModule xMod = vfModuleComponent.getValue(); + if ( (xMod.getModelCustomizationName() != null) && (xMod.getModelCustomizationName().equalsIgnoreCase(nameToFind)) ) { + vfMod.setCustomizationUuid( xMod.getCustomizationUuid()); + return; + } + } + }*/ +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/ServiceModel.java b/vid-app-common/src/main/java/org/openecomp/vid/model/ServiceModel.java new file mode 100755 index 000000000..140e9edf1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/ServiceModel.java @@ -0,0 +1,261 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.openecomp.vid.asdc.beans.tosca.Group; +import org.openecomp.vid.asdc.beans.tosca.ToscaModel; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.vid.controller.VidController; +import org.openecomp.vid.properties.VidProperties; +/** + * The Class ServiceModel. + */ +public class ServiceModel { + + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(ServiceModel.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + /** The service. */ + private Service service; + + /** The vnfs. */ + private Map vnfs; + + /** The networks. */ + private Map networks; + + /** + * The vf modules. The VNF also has vfmodules but the vfmodules at the service level may have additional info + * that is not present in the VNF, like the vf module customization String + */ + private Map vfModules; + /** + * The volume groups. The VNF also has volume groups but the volume groups will be populated at the service level + * for newer models + */ + private Map volumeGroups; + /** + * Instantiates a new service model. + */ + public ServiceModel() {} + + /** + * Gets the service. + * + * @return the service + */ + public Service getService() { + return service; + } + + /** + * Gets the vnfs. + * + * @return the vnfs + */ + public Map getVnfs() { + return vnfs; + } + + /** + * Gets the networks. + * + * @return the networks + */ + public Map getNetworks() { + return networks; + } + + /** + * Sets the service. + * + * @param service the new service + */ + public void setService(Service service) { + this.service = service; + } + + /** + * Sets the vnfs. + * + * @param vnfs the vnfs + */ + public void setVnfs(Map vnfs) { + this.vnfs = vnfs; + } + + /** + * Sets the networks. + * + * @param networks the networks + */ + public void setNetworks(Map networks) { + this.networks = networks; + } + /** + * Gets the vf modules. + * + * @return the vf modules + */ + public Map getVfModules() { + return vfModules; + } + /** + * Gets the volume groups. + * + * @return the volume groups + */ + public Map getVolumeGroups() { + return volumeGroups; + } + /** + * Sets the vf modules. + * + * @param vfModules the vf modules + */ + public void setVfModules(Map vfModules) { + this.vfModules = vfModules; + } + /** + * Sets the volume groups. + * + * @param volumeGroups the volume groups + */ + public void setVolumeGroups(Map volumeGroups) { + this.volumeGroups = volumeGroups; + } + /** + * Extract service. + * + * @param serviceToscaModel the service tosca model + * @param asdcServiceMetadata the asdc service metadata + * @return the service + */ + public static Service extractService(ToscaModel serviceToscaModel, org.openecomp.vid.asdc.beans.Service asdcServiceMetadata) { + + final Service service = new Service(); + + service.setCategory(serviceToscaModel.getMetadata().getCategory()); + service.setInvariantUuid(serviceToscaModel.getMetadata().getInvariantUUID()); + service.setName(serviceToscaModel.getMetadata().getName()); + service.setUuid(serviceToscaModel.getMetadata().getUUID()); + service.setDescription(serviceToscaModel.getMetadata().getDescription()); + service.setServiceEcompNaming(serviceToscaModel.getMetadata().getServiceEcompNaming()); + service.setInputs(serviceToscaModel.gettopology_template().getInputs()); + //FIXME: SDC is not sending the Version with the Tosca Model for 1610 - they should send it in 1702 + //THIS IS A TEMPORARY FIX, AT SOME POINT UNCOMMENT ME + //service.setVersion(serviceToscaModel.getMetadata().getVersion()); + service.setVersion(asdcServiceMetadata.getVersion()); + + return service; + } + public void extractGroups (ToscaModel serviceToscaModel) { + // Get the groups. The groups may duplicate the groups that are in the VNF model and have + // additional data like the VF module customization String> + + final Map vfModules = new HashMap (); + final Map volumeGroups = new HashMap (); + + String asdcModelNamespace = VidProperties.getAsdcModelNamespace(); + String vfModuleTag = asdcModelNamespace + ModelConstants.VF_MODULE; + + for (Entry component : serviceToscaModel.gettopology_template().getGroups().entrySet()) { + final Group group = component.getValue(); + final String type = group.getType(); + final String customizationName = component.getKey(); + + if (type.startsWith(vfModuleTag)) { + VfModule vfMod = VfModule.extractVfModule(customizationName, group); + vfModules.put(customizationName, vfMod); + if ( vfMod.isVolumeGroupAllowed() ) { + //volume groups have the same customization name as the vf module + volumeGroups.put(customizationName, VolumeGroup.extractVolumeGroup(customizationName,group)); + } + } + } + // add this point vfModules and volume groups are disconnected from VNF + this.setVfModules (vfModules); + this.setVolumeGroups (volumeGroups); + + } + /** + * Populate the vf modules and volume groups that we may have under the service level under each VNF. + */ + public void associateGroups() { + String methodName = "associateGroups()"; + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " start"); + // go through the vnfs, get the vnf normalized name and look for a vf module with a customization name that starts + // with vnf + ".." + String vnfCustomizationName = null; + String normalizedVnfCustomizationName = null; + String vfModuleCustomizationName = null; + VNF tmpVnf = null; + + if ( ( getVnfs() != null ) && (!(getVnfs().isEmpty())) ) { + for (Entry vnfComponent : getVnfs().entrySet()) { + vnfCustomizationName = vnfComponent.getValue().getModelCustomizationName(); + normalizedVnfCustomizationName = VNF.normalizeName(vnfCustomizationName); + + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + + " VNF customizationName=" + vnfCustomizationName + "normalized customization name=" + normalizedVnfCustomizationName); + + // now check to see if there is a vf module with customization name that starts with normalizedVnfCustomizationName + + if (( getVfModules() != null ) && (!(getVfModules().isEmpty()))) { + for (Entry vfModuleComponent : getVfModules().entrySet()) { + vfModuleCustomizationName = vfModuleComponent.getValue().getModelCustomizationName(); + + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + + " VF Module customizationName=" + vfModuleCustomizationName ); + if ( vfModuleCustomizationName.startsWith(normalizedVnfCustomizationName + ".." )) { + + // this vf module belongs to the VNF + tmpVnf = vnfComponent.getValue(); + (tmpVnf.getVfModules()).put(vfModuleComponent.getKey(), vfModuleComponent.getValue()); + + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + + " Associated VF Module customizationName=" + vfModuleComponent.getKey() + " with VNF customization name=" + vnfCustomizationName); + + // now find if this vf module has volume groups, if so, find the volume group with the same customization name and put it under the VNF + if ( vfModuleComponent.getValue().isVolumeGroupAllowed() ) { + if (( getVolumeGroups() != null ) && (!(getVolumeGroups().isEmpty()))) { + if (getVolumeGroups().containsKey((vfModuleCustomizationName))) { + (vnfComponent.getValue().getVolumeGroups()).put(vfModuleCustomizationName, (getVolumeGroups()).get(vfModuleCustomizationName)); + } + } + } + } + } + } + } + } + + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/VNF.java b/vid-app-common/src/main/java/org/openecomp/vid/model/VNF.java new file mode 100755 index 000000000..be37c947b --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/VNF.java @@ -0,0 +1,165 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.util.Map; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.regex.Pattern; + +import org.openecomp.vid.asdc.beans.tosca.NodeTemplate; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.vid.controller.VidController; + +import org.openecomp.vid.asdc.beans.tosca.Group; +import org.openecomp.vid.asdc.beans.tosca.Input; + +/** + * The Class VNF. + */ +public class VNF extends Node { + + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(VNF.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The pattern used to normalize VNF names */ + final static Pattern COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-]+"); + + /** The model customization name. */ + private String modelCustomizationName; + + /** The vf modules. */ + private Map vfModules = new HashMap(); + + /** The volume groups. */ + private Map volumeGroups = new HashMap(); + + /** + * Instantiates a new vnf. + */ + public VNF() { + super(); + } + + /** + * Gets the model customization name. + * + * @return the model customization name + */ + public String getModelCustomizationName() { + return modelCustomizationName; + } + + /** + * Gets the vf modules. + * + * @return the vf modules + */ + public Map getVfModules() { + return vfModules; + } + + /** + * Sets the vf modules. + * + * @param vfModules the vf modules + */ + public void setVfModules(Map vfModules) { + this.vfModules = vfModules; + } + + /** + * Gets the volume groups. + * + * @return the volume groups + */ + public Map getVolumeGroups() { + return volumeGroups; + } + + /** + * Sets the volume groups. + * + * @param volumeGroups the volume groups + */ + public void setVolumeGroups(Map volumeGroups) { + this.volumeGroups = volumeGroups; + } + + /** + * Extract vnf. + * + * @param modelCustomizationName the model customization name + * @param nodeTemplate the node template + * @return the vnf + */ + public void extractVnf(String modelCustomizationName, NodeTemplate nodeTemplate) { + + super.extractNode(nodeTemplate); + setModelCustomizationName(modelCustomizationName); + + } + + /** + * Sets the model customization name. + * + * @param modelCustomizationName the new model customization name + */ + private void setModelCustomizationName(String modelCustomizationName) { + this.modelCustomizationName = modelCustomizationName; + } + /** + * Normalize the VNF name + * @param originalName + * @return the normalized name + */ + public static String normalizeName (String originalName) { + + String normalizedName = originalName.toLowerCase(); + normalizedName = COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" "); + String[] splitArr = null; + + try { + splitArr = normalizedName.split(" "); + } + catch (Exception ex ) { + return (normalizedName); + } + StringBuffer sb = new StringBuffer(); + if ( splitArr != null ) { + for (String splitElement : splitArr) { + sb.append(splitElement); + } + return (sb.toString()); + } + else { + return (normalizedName); + } + + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/VfModule.java b/vid-app-common/src/main/java/org/openecomp/vid/model/VfModule.java new file mode 100755 index 000000000..4a031a6c6 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/VfModule.java @@ -0,0 +1,308 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import org.openecomp.vid.asdc.beans.tosca.Group; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; + +/** + * The Class VfModule. + */ +public class VfModule { + + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(VfModule.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The uuid. */ + private String uuid; + + /** The invariant uuid. */ + private String invariantUuid; + + /** The customization uuid. */ + private String customizationUuid; + + /** The description. */ + private String description; + + /** The name. */ + private String name; + + /** The version. */ + private String version; + + /** The volume group allowed. */ + private boolean volumeGroupAllowed; + + /** The get_input or other constructs for VF Module. */ + private Map commands; + + /** The model customization name. */ + private String modelCustomizationName; + + /** + * Instantiates a new vf module. + */ + public VfModule() { + commands = new HashMap(); + } + /** + * Gets the model customization name. + * + * @return the model customization name + */ + public String getModelCustomizationName() { + return modelCustomizationName; + } + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + + /** + * Gets the invariant uuid. + * + * @return the invariant uuid + */ + public String getInvariantUuid() { + return invariantUuid; + } + /** + * Gets the customization uuid. + * + * @return the invariant uuid + */ + public String getCustomizationUuid() { + return customizationUuid; + } + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + /** + * Gets the commands. + * + * @return the commands + */ + public Map getCommands() { + return commands; + } + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Checks if is volume group allowed. + * + * @return true, if is volume group allowed + */ + public boolean isVolumeGroupAllowed() { + return volumeGroupAllowed; + } + + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant uuid. + * + * @param invariantUuid the new invariant uuid + */ + public void setInvariantUuid(String invariantUuid) { + this.invariantUuid = invariantUuid; + } + /** + * Sets the customization uuid. + * + * @param customizationUuid the new customization uuid + */ + public void setCustomizationUuid(String customizationUuid) { + this.customizationUuid = customizationUuid; + } + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * Sets the volume group allowed. + * + * @param volumeGroupAllowed the new volume group allowed + */ + private void setVolumeGroupAllowed(boolean volumeGroupAllowed) { + this.volumeGroupAllowed = volumeGroupAllowed; + } + /** + * Sets the commands. + * + * @param m the commands + */ + public void setCommands( Mapm ) { + commands = m; + } + /** + * Sets the model customization name. + * + * @param modelCustomizationName the new model customization name + */ + private void setModelCustomizationName(String modelCustomizationName) { + this.modelCustomizationName = modelCustomizationName; + } + /** + * Extract vf module. + * + * @param group the group + * @return the vf module + */ + public static VfModule extractVfModule(String modelCustomizationName, Group group) { + + String methodName = "extractVfModule"; + + final VfModule vfModule = new VfModule(); + + try { + vfModule.setUuid(group.getMetadata().getVfModuleModelUUID()); + vfModule.setInvariantUuid(group.getMetadata().getVfModuleModelInvariantUUID()); + vfModule.setDescription(group.getMetadata().getDescription()); + vfModule.setName(group.getMetadata().getVfModuleModelName()); + vfModule.setVersion(group.getMetadata().getVfModuleModelVersion()); + vfModule.setCustomizationUuid(group.getMetadata().getVfModuleModelCustomizationUUID()); + vfModule.setModelCustomizationName (modelCustomizationName); + + if (group.getProperties().containsKey("volume_group")) { + if (group.getProperties().get("volume_group") != null) { + + Class c = group.getProperties().get("volume_group").getClass(); + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " class name=" + + c.getName()); + + if ( c.getName().equalsIgnoreCase(Boolean.class.getName()) ) { + Boolean b = (Boolean)group.getProperties().get("volume_group"); + vfModule.setVolumeGroupAllowed( b.booleanValue() ); + } + } + } else { + vfModule.setVolumeGroupAllowed(false); + } + } + catch ( Exception e ) { + LOG.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodName + " Unable to parse VF Module from group: e=" + + e.toString()); + } + /* Not extracting other types of properties for 1702 + try { + + for (Entry e : group.getProperties().entrySet()) { + + String k = e.getKey(); + if ( e.getValue() != null ) { + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " property: " + + k + "=" + e.getValue()); + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " V class name: " + + e.getValue().getClass().getName()); + Class[] interfaces = e.getValue().getClass().getInterfaces(); + + for(Class ifc: interfaces ){ + LOG.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " ifc name: " + + ifc.getName()); + } + + // only extract get_input for now + for (Entry entry : v.entrySet()) { + // only include get_input for now + if ( ModelConstants.GET_INPUT_TAG.equalsIgnoreCase ( entry.getKey() ) ) { + CommandProperty cp = new CommandProperty(); + cp.setDisplayName(entry.getValue()); + cp.setCommand(entry.getKey()); + cp.setInputName(k); + (vfModule.getCommands()).put(k,cp); + } + } + } + } + } + catch ( Exception e ) { + LOG.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodName + " Unable to parse VF Module properties: e=" + + e.toString()); + }*/ + return vfModule; + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/model/VolumeGroup.java b/vid-app-common/src/main/java/org/openecomp/vid/model/VolumeGroup.java new file mode 100755 index 000000000..ea8e151d6 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/model/VolumeGroup.java @@ -0,0 +1,196 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.model; + +import org.openecomp.vid.asdc.beans.tosca.Group; + +/** + * The Class VolumeGroup. + */ +public class VolumeGroup { + + /** The uuid. */ + private String uuid; + + /** The invariant uuid. */ + private String invariantUuid; + + /** The description. */ + private String description; + + /** The name. */ + private String name; + + /** The version. */ + private String version; + + /** The customization uuid. */ + private String customizationUuid; + + /** The customization uuid. */ + private String modelCustomizationName; + /** + * Instantiates a new volume group. + */ + public VolumeGroup() {} + + /** + * Gets the uuid. + * + * @return the uuid + */ + public String getUuid() { + return uuid; + } + /** + * Gets the customization uuid. + * + * @return the customization uuid + */ + public String getCustomizationUuid() { + return customizationUuid; + } + /** + * Gets the customization name. + * + * @return the customization name + */ + public String getModelCustomizationName() { + return modelCustomizationName; + } + /** + * Gets the invariant uuid. + * + * @return the invariant uuid + */ + public String getInvariantUuid() { + return invariantUuid; + } + + /** + * Gets the description. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the version. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * Sets the uuid. + * + * @param uuid the new uuid + */ + public void setUuid(String uuid) { + this.uuid = uuid; + } + + /** + * Sets the invariant uuid. + * + * @param invariantUuid the new invariant uuid + */ + public void setInvariantUuid(String invariantUuid) { + this.invariantUuid = invariantUuid; + } + + /** + * Sets the description. + * + * @param description the new description + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Sets the version. + * + * @param version the new version + */ + public void setVersion(String version) { + this.version = version; + } + /** + * Sets the customization uuid. + * + * @param u the new customization uuid + */ + private void setCustomizationUuid(String u) { + this.customizationUuid = u; + + } + /** + * Sets the customization name. + * + * @param u the new customization name + */ + private void setModelCustomizationName(String u) { + this.modelCustomizationName = u; + + } + /** + * Extract volume group. + * + * @param group the group + * @return the volume group + */ + public static VolumeGroup extractVolumeGroup(String modelCustomizationName, Group group) { + final VolumeGroup volumeGroup = new VolumeGroup(); + + volumeGroup.setUuid(group.getMetadata().getVfModuleModelUUID()); + volumeGroup.setInvariantUuid(group.getMetadata().getVfModuleModelInvariantUUID()); + volumeGroup.setDescription(group.getMetadata().getDescription()); + volumeGroup.setName(group.getMetadata().getVfModuleModelName()); + volumeGroup.setVersion(group.getMetadata().getVfModuleModelVersion()); + volumeGroup.setCustomizationUuid(group.getMetadata().getVfModuleModelCustomizationUUID()); + volumeGroup.setModelCustomizationName(modelCustomizationName); + return volumeGroup; + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoProperties.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoProperties.java new file mode 100755 index 000000000..272a2a2b8 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoProperties.java @@ -0,0 +1,100 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +import org.openecomp.portalsdk.core.util.SystemProperties; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; + +/** + * The Class MsoProperties. + */ +public class MsoProperties extends SystemProperties { + + /** The Constant MSO_SERVER_URL. */ + //VID Properties related to MSO + public static final String MSO_SERVER_URL = "mso.server.url"; + + /** The Constant MSO_DME2_SERVER_URL. */ + public static final String MSO_DME2_SERVER_URL = "mso.dme2.server.url"; + + /** The Constant MSO_DME2_CLIENT_TIMEOUT. */ + public static final String MSO_DME2_CLIENT_TIMEOUT = "mso.dme2.client.timeout"; + + /** The Constant MSO_DME2_CLIENT_READ_TIMEOUT. */ + public static final String MSO_DME2_CLIENT_READ_TIMEOUT = "mso.dme2.client.read.timeout"; + + /** The Constant MSO_SERVER_URL_DEFAULT. */ + public static final String MSO_SERVER_URL_DEFAULT= ""; + + /** The Constant MSO_POLLING_INTERVAL_MSECS. */ + // number of msecs to wait between polling requests + public static final String MSO_POLLING_INTERVAL_MSECS = "mso.polling.interval.msecs"; + + /** The Constant MSO_POLLING_INTERVAL_MSECS_DEFAULT. */ + public static final String MSO_POLLING_INTERVAL_MSECS_DEFAULT = "60000"; + + /** The Constant MSO_DME2_ENABLED. */ + public static final String MSO_DME2_ENABLED = "mso.dme2.enabled"; + + /** The Constant MSO_MAX_POLLS. */ + public static final String MSO_MAX_POLLS = "mso.max.polls"; + + /** The Constant MSO_MAX_POLLS_DEFAULT. */ + public static final String MSO_MAX_POLLS_DEFAULT = "10"; //10 + + /** The Constant MSO_USER_NAME. */ + public static final String MSO_USER_NAME = "mso.user.name"; //m03346 + + /** The Constant MSO_PASSWORD. */ + public static final String MSO_PASSWORD = "mso.password.x"; + + /** The Constant MSO_REST_API_SVC_INSTANCE. */ + public static final String MSO_REST_API_SVC_INSTANCE = "mso.restapi.svc.instance"; // /serviceInstances/v2 + + /** The Constant MSO_REST_API_VNF_INSTANCE. */ + public static final String MSO_REST_API_VNF_INSTANCE = "mso.restapi.vnf.instance"; // /serviceInstances/v2/{service_instance_id}/vnfs + + /** The Constant MSO_REST_API_NETWORK_INSTANCE. */ + public static final String MSO_REST_API_NETWORK_INSTANCE = "mso.restapi.network.instance"; // /serviceInstances/v2/{serviceInstanceId}/networks + + /** The Constant MSO_REST_API_GET_ORC_REQ. */ + public static final String MSO_REST_API_GET_ORC_REQ = "mso.restapi.get.orc.req"; + + /** The Constant MSO_REST_API_GET_ORC_REQS. */ + public static final String MSO_REST_API_GET_ORC_REQS = "mso.restapi.get.orc.reqs"; + + /** The Constant MSO_REST_API_VF_MODULE_INSTANCE. */ + public static final String MSO_REST_API_VF_MODULE_INSTANCE = "mso.restapi.vf.module.instance"; + + /** The Constant MSO_REST_API_VOLUME_GROUP_INSTANCE. */ + public static final String MSO_REST_API_VOLUME_GROUP_INSTANCE = "mso.restapi.volume.group.instance"; //serviceInstances/v2/{serviceInstanceId}/volumeGroups + + /** The logger. */ + public EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoProperties.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoResponseWrapper.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoResponseWrapper.java new file mode 100755 index 000000000..d5a4a87ef --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoResponseWrapper.java @@ -0,0 +1,107 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.ToStringBuilder; + +/** + * This wrapper encapsulates the MSO response in the format expected by the pages. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "status", + "entity" +}) + +public class MsoResponseWrapper { + + /** The status. */ + @JsonProperty("status") + private int status; + + /** The entity. */ + @JsonProperty("entity") + private String entity; + + /** + * Gets the entity. + * + * @return the entity + */ + @JsonProperty("entity") + public String getEntity() { + return entity; + } + + /** + * Gets the status. + * + * @return the status + */ + @JsonProperty("status") + public int getStatus() { + return status; + } + + /** + * Sets the status. + * + * @param v the new status + */ + @JsonProperty("status") + public void setStatus(int v) { + this.status = v; + } + + /** + * Sets the entity. + * + * @param v the new entity + */ + @JsonProperty("entity") + public void setEntity(String v) { + this.entity = v; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /** + * Gets the response. + * + * @return the response + */ + public String getResponse () { + + StringBuilder b = new StringBuilder ("{ \"status\": "); + b.append(getStatus()).append(", \"entity\": " ).append(this.getEntity()).append("}"); + return (b.toString()); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInt.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInt.java new file mode 100755 index 000000000..b9f2dbcc9 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInt.java @@ -0,0 +1,71 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * The Class MsoRestInt. + */ +public class MsoRestInt { + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestInterface.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The request date format. */ + public DateFormat requestDateFormat = new SimpleDateFormat("EEE, dd MMM YYYY HH:mm:ss z"); + + /** + * Instantiates a new mso rest int. + */ + public MsoRestInt() { + requestDateFormat.setTimeZone(java.util.TimeZone.getTimeZone("GMT")); + } + + /** + * Log request. + * + * @param r the r + */ + public void logRequest ( org.openecomp.vid.mso.rest.RequestDetails r ) { + String methodName = "logRequest"; + ObjectMapper mapper = new ObjectMapper(); + String r_json_str = ""; + if ( r != null ) { + r_json_str = r.toString(); + try { + r_json_str = mapper.writeValueAsString(r); + } + catch ( com.fasterxml.jackson.core.JsonProcessingException j ) { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Unable to parse request as json"); + } + } + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Request=(" + r_json_str + ")"); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterface.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterface.java new file mode 100755 index 000000000..31a762efe --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterface.java @@ -0,0 +1,290 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.Response; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; + +import org.apache.commons.codec.binary.Base64; +import org.eclipse.jetty.util.security.Password; +import org.openecomp.vid.client.HttpBasicClient; +import org.openecomp.vid.client.HttpsBasicClient; +import org.openecomp.vid.mso.rest.RequestDetails; + +/** + * The Class MsoRestInterface. + */ +public class MsoRestInterface extends MsoRestInt implements MsoRestInterfaceIfc { + + /** The logger. */ + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestInterface.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** The client. */ + private static Client client = null; + + /** The common headers. */ + private MultivaluedHashMap commonHeaders; + + /** + * Instantiates a new mso rest interface. + */ + public MsoRestInterface() { + super(); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#initRestClient() + */ + public void initRestClient() + { + final String methodname = "initRestClient()"; + + final String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME); + final String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD); + final String mso_url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL); + final String decrypted_password = Password.deobfuscate(password); + + String authString = username + ":" + decrypted_password; + + byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); + String authStringEnc = new String(authEncBytes); + + commonHeaders = new MultivaluedHashMap (); + commonHeaders.put("Authorization", Collections.singletonList((Object) ("Basic " + authStringEnc))); + + boolean use_ssl = true; + if ( (mso_url != null) && ( !(mso_url.isEmpty()) ) ) { + if ( mso_url.startsWith("https")) { + use_ssl = true; + } + else { + use_ssl = false; + } + } + if (client == null) { + + try { + if ( use_ssl ) { + //logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodname + " getting HttpsBasicClient with username=" + username + // + " password=" + password); + client = HttpsBasicClient.getClient(); + } + else { + //logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodname + " getting HttpsBasicClient with username=" + username + // + " password=" + password); + client = HttpBasicClient.getClient(); + } + } catch (Exception e) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodname + " Unable to get the SSL client"); + } + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Get(java.lang.Object, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject) + */ + @SuppressWarnings("unchecked") + public void Get (T t, String sourceId, String path, RestObject restObject ) throws Exception { + String methodName = "Get"; + + logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start"); + + String url=""; + restObject.set(t); + + url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path; + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " sending request to url= " + url); + + initRestClient(); + + final Response cres = client.target(url) + .request() + .accept("application/json") + .headers(commonHeaders) + .get(); + + int status = cres.getStatus(); + restObject.setStatusCode (status); + + if (status == 200) { + t = (T) cres.readEntity(t.getClass()); + restObject.set(t); + logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " REST api was successfull!"); + + } else { + throw new Exception(methodName + " with status="+ status + ", url= " + url ); + } + + logger.debug(EELFLoggerDelegate.debugLogger,methodName + " received status=" + status ); + + return; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Delete(java.lang.Object, org.openecomp.vid.mso.rest.RequestDetails, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject) + */ + @SuppressWarnings("unchecked") + public void Delete(T t, RequestDetails r, String sourceID, String path, RestObject restObject) { + + String methodName = "Delete"; + String url=""; + Response cres = null; + + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " start"); + logRequest (r); + + try { + initRestClient(); + + url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path; + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + " methodName sending request to: " + url); + + cres = client.target(url) + .request() + .accept("application/json") + .headers(commonHeaders) + //.entity(r) + .build("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON)).invoke(); + // .method("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON)); + //.delete(Entity.entity(r, MediaType.APPLICATION_JSON)); + + int status = cres.getStatus(); + restObject.setStatusCode (status); + + if (status == 404) { // resource not found + String msg = "Resource does not exist...: " + cres.getStatus(); + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg); + } else if (status == 200 || status == 204){ + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + "Resource " + url + " deleted"); + } else if (status == 202) { + String msg = "Delete in progress: " + status; + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg); + } + else { + String msg = "Deleting Resource failed: " + status; + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg); + } + + try { + t = (T) cres.readEntity(t.getClass()); + restObject.set(t); + } + catch ( Exception e ) { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " No response entity, this is probably ok, e=" + + e.getMessage()); + } + + } + catch (Exception e) + { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString()); + throw e; + + } + } + + /* (non-Javadoc) + * @see org.openecomp.vid.mso.MsoRestInterfaceIfc#Post(java.lang.Object, org.openecomp.vid.mso.rest.RequestDetails, java.lang.String, java.lang.String, org.openecomp.vid.mso.RestObject) + */ + @SuppressWarnings("unchecked") + public void Post(T t, RequestDetails r, String sourceID, String path, RestObject restObject) throws Exception { + + String methodName = "Post"; + String url=""; + + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " start"); + + logRequest (r); + try { + + initRestClient(); + + url = SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL) + path; + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " sending request to url= " + url); + // Change the content length + final Response cres = client.target(url) + .request() + .accept("application/json") + .headers(commonHeaders) + //.header("content-length", 201) + //.header("X-FromAppId", sourceID) + .post(Entity.entity(r, MediaType.APPLICATION_JSON)); + + try { + t = (T) cres.readEntity(t.getClass()); + restObject.set(t); + } + catch ( Exception e ) { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " No response entity, this is probably ok, e=" + + e.getMessage()); + } + + int status = cres.getStatus(); + restObject.setStatusCode (status); + + if ( status >= 200 && status <= 299 ) { + logger.info(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!"); + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " REST api POST was successful!"); + + } else { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with status="+status+", url="+url); + } + + } catch (Exception e) + { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString()); + throw e; + + } + } + + + /** + * Gets the single instance of MsoRestInterface. + * + * @param the generic type + * @param clazz the clazz + * @return single instance of MsoRestInterface + * @throws IllegalAccessException the illegal access exception + * @throws InstantiationException the instantiation exception + */ + public T getInstance(Class clazz) throws IllegalAccessException, InstantiationException + { + return clazz.newInstance(); + } + + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceFactory.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceFactory.java new file mode 100755 index 000000000..8bb3093c1 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceFactory.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +import org.openecomp.portalsdk.core.util.SystemProperties; + +/** + * A factory for creating MsoRestInterface objects. + */ +public class MsoRestInterfaceFactory { + + /** + * Gets the single instance of MsoRestInterfaceFactory. + * + * @return single instance of MsoRestInterfaceFactory + */ + public static MsoRestInterfaceIfc getInstance () { + MsoRestInterfaceIfc obj = null; + +// String mso_dme2_enabled = SystemProperties.getProperty(MsoProperties.MSO_DME2_ENABLED); +// if ( (mso_dme2_enabled != null) && (mso_dme2_enabled.equalsIgnoreCase("true") ) ) { +// obj = new MsoDme2RestInterface(); +// } +// else { + obj = new MsoRestInterface(); +// } + return ( obj ); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceIfc.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceIfc.java new file mode 100755 index 000000000..b0dc906be --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoRestInterfaceIfc.java @@ -0,0 +1,79 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +import org.openecomp.vid.mso.rest.RequestDetails; + +/** + * The Interface MsoRestInterfaceIfc. + */ +public interface MsoRestInterfaceIfc { + + /** + * Inits the rest client. + */ + public void initRestClient(); + + /** + * Gets the. + * + * @param the generic type + * @param t the t + * @param sourceId the source id + * @param path the path + * @param restObject the rest object + * @throws Exception the exception + */ + public void Get (T t, String sourceId, String path, RestObject restObject ) throws Exception; + + /** + * Delete. + * + * @param the generic type + * @param t the t + * @param r the r + * @param sourceID the source ID + * @param path the path + * @param restObject the rest object + * @throws Exception the exception + */ + public void Delete(T t, RequestDetails r, String sourceID, String path, RestObject restObject) throws Exception; + + /** + * Post. + * + * @param the generic type + * @param t the t + * @param r the r + * @param sourceID the source ID + * @param path the path + * @param restObject the rest object + * @throws Exception the exception + */ + public void Post(T t, RequestDetails r, String sourceID, String path, RestObject restObject) throws Exception; + + /** + * Log request. + * + * @param r the r + */ + public void logRequest ( RequestDetails r ); +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoUtil.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoUtil.java new file mode 100755 index 000000000..2c0148bb7 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/MsoUtil.java @@ -0,0 +1,125 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.glassfish.jersey.client.ClientResponse; + +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.vid.controller.MsoController; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * The Class MsoUtil. + */ +public class MsoUtil { + + /** The logger. */ + private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + + /** + * Wrap response. + * + * @param body the body + * @param statusCode the status code + * @return the mso response wrapper + */ + public static MsoResponseWrapper wrapResponse ( String body, int statusCode ) { + + MsoResponseWrapper w = new MsoResponseWrapper(); + w.setStatus (statusCode); + w.setEntity(body); + + return w; + } + + /** + * Wrap response. + * + * @param cres the cres + * @return the mso response wrapper + */ + public static MsoResponseWrapper wrapResponse (ClientResponse cres) { + String resp_str = ""; + if ( cres != null ) { + resp_str = cres.readEntity(String.class); + } + int statuscode = cres.getStatus(); + MsoResponseWrapper w = MsoUtil.wrapResponse ( resp_str, statuscode ); + return (w); + } + + /** + * Wrap response. + * + * @param rs the rs + * @return the mso response wrapper + */ + public static MsoResponseWrapper wrapResponse (RestObject rs) { + String resp_str = ""; + int status = 0; + if ( rs != null ) { + resp_str = rs.get(); + status = rs.getStatusCode(); + } + MsoResponseWrapper w = MsoUtil.wrapResponse ( resp_str, status ); + return (w); + } + + /** + * Convert pojo to string. + * + * @param the generic type + * @param t the t + * @return the string + * @throws JsonProcessingException the json processing exception + */ + public static String convertPojoToString ( T t ) throws com.fasterxml.jackson.core.JsonProcessingException { + + String methodName = "convertPojoToString"; + ObjectMapper mapper = new ObjectMapper(); + String r_json_str = ""; + if ( t != null ) { + try { + r_json_str = mapper.writeValueAsString(t); + } + catch ( com.fasterxml.jackson.core.JsonProcessingException j ) { + logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " Unable to parse object as json"); + } + } + return (r_json_str); + } + + /** + * The main method. + * + * @param args the arguments + */ + public static void main(String[] args) { + // TODO Auto-generated method stub + + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/RestObject.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/RestObject.java new file mode 100755 index 000000000..881409e1a --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/RestObject.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso; + +/** + * The Class RestObject. + * + * @param the generic type + */ +public class RestObject { + + /** + * Generic version of the RestObject class. + * + */ + // T stands for "Type" + private T t; + + /** The status code. */ + private int statusCode= 0; + + /** + * Sets the. + * + * @param t the t + */ + public void set(T t) { this.t = t; } + + /** + * Gets the. + * + * @return the t + */ + public T get() { return t; } + + /** + * Sets the status code. + * + * @param v the new status code + */ + public void setStatusCode(int v) { this.statusCode = v; } + + /** + * Gets the status code. + * + * @return the status code + */ + public int getStatusCode() { return this.statusCode; } +} + diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/AsyncRequestStatus.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/AsyncRequestStatus.java new file mode 100755 index 000000000..1395f9ae3 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/AsyncRequestStatus.java @@ -0,0 +1,123 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +//import java.util.HashMap; +//import java.util.Map; +//import javax.annotation.Generated; + +import org.openecomp.vid.domain.mso.InstanceIds; +import org.openecomp.vid.domain.mso.RequestStatus; +//import com.fasterxml.jackson.annotation.JsonAnyGetter; +//import com.fasterxml.jackson.annotation.JsonAnySetter; +//import com.fasterxml.jackson.annotation.JsonCreator; +//import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +//import com.fasterxml.jackson.annotation.JsonPropertyOrder; +//import com.fasterxml.jackson.annotation.JsonValue; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * request structure. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) + +public class AsyncRequestStatus extends org.openecomp.vid.domain.mso.AsyncRequestStatus { + + + /** The instance ids. */ + private InstanceIds instanceIds; + + /** The request status. */ + private RequestStatus requestStatus; + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#getInstanceIds() + */ + public InstanceIds getInstanceIds() { + return instanceIds; + } + + /** + * Sets the instance ids. + * + * @param instanceIds the new instance ids + */ + public void setInstanceIds(InstanceIds instanceIds) { + this.instanceIds = instanceIds; + } + + + /** + * (Required). + * + * @return The requestStatus + */ + @JsonProperty("requestStatus") + public RequestStatus getRequestStatus() { + return requestStatus; + } + + /** + * (Required). + * + * @param requestStatus The requestStatus + */ + @JsonProperty("requestStatus") + public void setRequestStatus(RequestStatus requestStatus) { + this.requestStatus = requestStatus; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#hashCode() + */ + @Override + public int hashCode() { + return new HashCodeBuilder().append(getCorrelator()).append(getFinishTime()).append(instanceIds).append(getRequestId()).append(getRequestScope()).append(getRequestStatus()).append(getRequestType()).append(getStartTime()).append(getAdditionalProperties()).toHashCode(); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof AsyncRequestStatus) == false) { + return false; + } + AsyncRequestStatus rhs = ((AsyncRequestStatus) other); + return new EqualsBuilder().append(getCorrelator(), rhs.getCorrelator()).append(getFinishTime(), rhs.getFinishTime()).append(instanceIds, rhs.instanceIds).append(getRequestId(), rhs.getRequestId()).append(getRequestScope(), rhs.getRequestScope()).append(getRequestStatus(), rhs.getRequestStatus()).append(getRequestType(), rhs.getRequestType()).append(getStartTime(), rhs.getStartTime()).append(getAdditionalProperties(), rhs.getAdditionalProperties()).isEquals(); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedInstance.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedInstance.java new file mode 100755 index 000000000..b68f7c13b --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedInstance.java @@ -0,0 +1,125 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * modelInfo and optional instanceId and instanceName for a model related to the modelInfo being operated on. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@Generated("org.jsonschema2pojo") +@JsonPropertyOrder({ + "instanceName", + "instanceId", + "modelInfo" +}) +public class RelatedInstance extends org.openecomp.vid.domain.mso.RelatedInstance{ + + + /** The model info. */ + @JsonProperty("modelInfo") + private org.openecomp.vid.domain.mso.ModelInfo modelInfo; + + /** The additional properties. */ + @JsonIgnore + private Map additionalProperties = new HashMap(); + + /** + * (Required). + * + * @return The modelInfo + */ + @JsonProperty("modelInfo") + public org.openecomp.vid.domain.mso.ModelInfo getModelInfo() { + return modelInfo; + } + + /** + * (Required). + * + * @param modelInfo The modelInfo + */ + @JsonProperty("modelInfo") + public void setModelInfo(org.openecomp.vid.domain.mso.ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedInstance#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedInstance#getAdditionalProperties() + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedInstance#setAdditionalProperty(java.lang.String, java.lang.Object) + */ + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedInstance#hashCode() + */ + @Override + public int hashCode() { + return new HashCodeBuilder().append(getInstanceName()).append(getInstanceId()).append(modelInfo).append(additionalProperties).toHashCode(); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedInstance#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof RelatedInstance) == false) { + return false; + } + RelatedInstance rhs = ((RelatedInstance) other); + return new EqualsBuilder().append(getInstanceName(), rhs.getInstanceName()).append(getInstanceId(), rhs.getInstanceId()).append(modelInfo, rhs.getModelInfo()).append(additionalProperties, rhs.additionalProperties).isEquals(); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedModel.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedModel.java new file mode 100755 index 000000000..dc67a9456 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RelatedModel.java @@ -0,0 +1,121 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * modelInfo and optional instance id for a model related to the modelInfo being operated on. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "instanceId", + "modelInfo" +}) +public class RelatedModel extends org.openecomp.vid.domain.mso.RelatedModel { + + /** (Required). */ + @JsonProperty("modelInfo") + private org.openecomp.vid.domain.mso.ModelInfo modelInfo; + + /** The additional properties. */ + @JsonIgnore + private Map additionalProperties = new HashMap(); + + /** + * (Required). + * + * @return The modelInfo + */ + @JsonProperty("modelInfo") + public org.openecomp.vid.domain.mso.ModelInfo getModelInfo() { + return modelInfo; + } + + /** + * (Required). + * + * @param modelInfo The modelInfo + */ + @JsonProperty("modelInfo") + public void setModelInfo(org.openecomp.vid.domain.mso.ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedModel#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedModel#getAdditionalProperties() + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedModel#setAdditionalProperty(java.lang.String, java.lang.Object) + */ + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedModel#hashCode() + */ + @Override + public int hashCode() { + return new HashCodeBuilder().append(getInstanceId()).append(modelInfo).append(additionalProperties).toHashCode(); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RelatedModel#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof RelatedModel) == false) { + return false; + } + RelatedModel rhs = ((RelatedModel) other); + return new EqualsBuilder().append(getInstanceId(), rhs.getInstanceId()).append(modelInfo, rhs.modelInfo).append(additionalProperties, rhs.additionalProperties).isEquals(); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/Request.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/Request.java new file mode 100755 index 000000000..c8f7b8ba7 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/Request.java @@ -0,0 +1,140 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +//import java.util.HashMap; +//import java.util.Map; +//import javax.annotation.Generated; + +import org.openecomp.vid.domain.mso.InstanceIds; +import org.openecomp.vid.domain.mso.RequestStatus; +//import com.fasterxml.jackson.annotation.JsonAnyGetter; +//import com.fasterxml.jackson.annotation.JsonAnySetter; +//import com.fasterxml.jackson.annotation.JsonCreator; +//import com.fasterxml.jackson.annotation.JsonIgnore; +//import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +//import com.fasterxml.jackson.annotation.JsonPropertyOrder; +//import com.fasterxml.jackson.annotation.JsonValue; +import org.apache.commons.lang.builder.EqualsBuilder; +//import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * request structure. + */ +public class Request extends org.openecomp.vid.domain.mso.Request { + + + /** The instance ids. */ + private InstanceIds instanceIds; + + /** The request details. */ + private RequestDetails requestDetails; + + /** The request status. */ + private RequestStatus requestStatus; + + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.Request#getInstanceIds() + */ + @JsonProperty("instanceIds") + public InstanceIds getInstanceIds() { + return instanceIds; + } + + /** + * Sets the instance ids. + * + * @param instanceIds The instanceIds + */ + @JsonProperty("instanceIds") + public void setInstanceIds(InstanceIds instanceIds) { + this.instanceIds = instanceIds; + } + + /** + * (Required). + * + * @return The requestDetails + */ + @JsonProperty("requestDetails") + public RequestDetails getRequestDetails() { + return requestDetails; + } + + /** + * (Required). + * + * @param requestDetails The requestDetails + */ + @JsonProperty("requestDetails") + public void setRequestDetails(RequestDetails requestDetails) { + this.requestDetails = requestDetails; + } + + + /** + * Gets the request status. + * + * @return The requestStatus + */ + @JsonProperty("requestStatus") + public RequestStatus getRequestStatus() { + return requestStatus; + } + + /** + * Sets the request status. + * + * @param requestStatus The requestStatus + */ + @JsonProperty("requestStatus") + public void setRequestStatus(RequestStatus requestStatus) { + this.requestStatus = requestStatus; + } + + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.Request#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.Request#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Request) == false) { + return false; + } + Request rhs = ((Request) other); + return new EqualsBuilder().append(getFinishTime(), rhs.getFinishTime()).append(getInstanceIds(), rhs.getInstanceIds()).append(getRequestDetails(), rhs.getRequestDetails()).append(getRequestId(), rhs.getRequestId()).append(getRequestScope(), rhs.getRequestScope()).append(getRequestStatus(), rhs.getRequestStatus()).append(getRequestType(), rhs.getRequestType()).append(getStartTime(), rhs.getStartTime()).append(getAdditionalProperties(), rhs.getAdditionalProperties()).isEquals(); + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestDetails.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestDetails.java new file mode 100755 index 000000000..6e7c5af32 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestDetails.java @@ -0,0 +1,233 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +import java.util.HashMap; +import java.util.Map; +import java.util.List; +//import javax.annotation.Generated; + +import org.openecomp.vid.domain.mso.CloudConfiguration; +import org.openecomp.vid.domain.mso.ModelInfo; +import org.openecomp.vid.domain.mso.RequestInfo; +import org.openecomp.vid.domain.mso.RequestParameters; +import org.openecomp.vid.domain.mso.SubscriberInfo; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * aggregates the context, configuraiton and detailed parameters associated with the request into a single structure. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "cloudConfiguration", + "modelInfo", + "relatedModelList", + "requestInfo", + "subscriberInfo", + "requestParameters" +}) +public class RequestDetails extends org.openecomp.vid.domain.mso.RequestDetails { + + /** The cloud configuration. */ + @JsonProperty("cloudConfiguration") + private CloudConfiguration cloudConfiguration; + + /** The model info. */ + @JsonProperty("modelInfo") + private ModelInfo modelInfo; + + /** The related model list. */ + @JsonProperty("relatedModelList") + private List relatedModelList; + + /** The request info. */ + @JsonProperty("requestInfo") + private RequestInfo requestInfo; + + /** The subscriber info. */ + @JsonProperty("subscriberInfo") + private SubscriberInfo subscriberInfo; + + /** The request parameters. */ + @JsonProperty("requestParameters") + private RequestParameters requestParameters; + + /** The additional properties. */ + @JsonIgnore + private Map additionalProperties = new HashMap(); + + /** + * Gets the cloud configuration. + * + * @return The cloudConfiguration + */ + @JsonProperty("cloudConfiguration") + public CloudConfiguration getCloudConfiguration() { + return cloudConfiguration; + } + + /** + * Sets the cloud configuration. + * + * @param cloudConfiguration The cloudConfiguration + */ + @JsonProperty("cloudConfiguration") + public void setCloudConfiguration(CloudConfiguration cloudConfiguration) { + this.cloudConfiguration = cloudConfiguration; + } + + /** + * Gets the model info. + * + * @return The modelInfo + */ + @JsonProperty("modelInfo") + public ModelInfo getModelInfo() { + return modelInfo; + } + + /** + * Sets the model info. + * + * @param modelInfo The modelInfo + */ + @JsonProperty("modelInfo") + public void setModelInfo(ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + /** + * Gets the related model list. + * + * @return The relatedModelList + */ + @JsonProperty("relatedModelList") + public List getRelatedModelList() { + return relatedModelList; + } + + /** + * Sets the related model list. + * + * @param relatedModelList The relatedModelList + */ + @JsonProperty("relatedModelList") + public void setRelatedModelList( List relatedModelList) { + this.relatedModelList = relatedModelList; + } + + /** + * Gets the request info. + * + * @return The requestInfo + */ + @JsonProperty("requestInfo") + public RequestInfo getRequestInfo() { + return requestInfo; + } + + /** + * Sets the request info. + * + * @param requestInfo The requestInfo + */ + @JsonProperty("requestInfo") + public void setRequestInfo(RequestInfo requestInfo) { + this.requestInfo = requestInfo; + } + + /** + * Gets the subscriber info. + * + * @return The subscriberInfo + */ + @JsonProperty("subscriberInfo") + public SubscriberInfo getSubscriberInfo() { + return subscriberInfo; + } + + /** + * Sets the subscriber info. + * + * @param subscriberInfo The subscriberInfo + */ + @JsonProperty("subscriberInfo") + public void setSubscriberInfo(SubscriberInfo subscriberInfo) { + this.subscriberInfo = subscriberInfo; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RequestDetails#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RequestDetails#getAdditionalProperties() + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RequestDetails#setAdditionalProperty(java.lang.String, java.lang.Object) + */ + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RequestDetails#hashCode() + */ + @Override + public int hashCode() { + return new HashCodeBuilder().append(cloudConfiguration).append(modelInfo).append(relatedModelList).append(requestInfo).append(getRequestParameters()).append(subscriberInfo).append(additionalProperties).toHashCode(); + } + + /* (non-Javadoc) + * @see org.openecomp.vid.domain.mso.RequestDetails#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof RequestDetails) == false) { + return false; + } + RequestDetails rhs = ((RequestDetails) other); + return new EqualsBuilder().append(cloudConfiguration, rhs.cloudConfiguration).append(modelInfo, rhs.modelInfo).append(relatedModelList, rhs.relatedModelList).append(requestInfo, rhs.requestInfo).append(getRequestParameters(), rhs.getRequestParameters()).append(subscriberInfo, rhs.subscriberInfo).append(additionalProperties, rhs.additionalProperties).isEquals(); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestList.java b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestList.java new file mode 100755 index 000000000..7c366ac82 --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/mso/rest/RequestList.java @@ -0,0 +1,137 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.mso.rest; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Generated; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +//import com.fasterxml.jackson.annotation.JsonInclude; +//import com.fasterxml.jackson.annotation.JsonProperty; +//import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import java.util.List; + +/** + * List of relatedModel structures that are related to a modelInfo being operated on. + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@Generated("org.jsonschema2pojo") +@JsonPropertyOrder({ + "finishTime", + "instanceIds", + "requestDetails", + "requestId", + "requestScope", + "requestStatus", + "requestType", + "startTime" +}) + +public class RequestList { + + /** The request list. */ + private List requestList; + + /** The additional properties. */ + @JsonIgnore + private Map additionalProperties = new HashMap(); + + /** + * (Required). + * + * @return The RelatedModel List + */ + public List getRequestList() { + return requestList; + } + + /** + * Sets the request list. + * + * @param l the new request list + */ + public void setRequestList(List l) { + this.requestList = l; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + /** + * Gets the additional properties. + * + * @return the additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + /** + * Sets the additional property. + * + * @param name the name + * @param value the value + */ + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + return new HashCodeBuilder().append(getRequestList()).append(additionalProperties).toHashCode(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof RequestList) == false) { + return false; + } + RequestList rhs = ((RequestList) other); + return new EqualsBuilder().append(getRequestList(), rhs.getRequestList()).append(additionalProperties, rhs.additionalProperties).isEquals(); + } + +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/properties/AsdcClientConfiguration.java b/vid-app-common/src/main/java/org/openecomp/vid/properties/AsdcClientConfiguration.java new file mode 100755 index 000000000..6d5f9522c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/properties/AsdcClientConfiguration.java @@ -0,0 +1,116 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; + +/** + * The Class AsdcClientConfiguration. + */ +@Configuration +@PropertySource(value="${container.classpath:}/WEB-INF/conf/asdc.properties") +public class AsdcClientConfiguration { + + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Value("${asdc.client.type}") + private AsdcClientType asdcClientType; + + /** The asdc client host. */ + @Value("${asdc.client.rest.host}") + private String asdcClientHost; + + /** The asdc client port. */ + @Value("${asdc.client.rest.port}") + private int asdcClientPort; + + /** The asdc client auth. */ + @Value("${asdc.client.rest.auth}") + public String asdcClientAuth; + + /** The asdc client protocol. */ + @Value("${asdc.client.rest.protocol}") + public String asdcClientProtocol; + + /** + * Gets the asdc client type. + * + * @return the asdc client type + */ + public AsdcClientType getAsdcClientType() { + return asdcClientType; + } + + /** + * Gets the asdc client host. + * + * @return the asdc client host + */ + public String getAsdcClientHost() { + return asdcClientHost; + } + + /** + * Gets the asdc client port. + * + * @return the asdc client port + */ + public int getAsdcClientPort() { + return asdcClientPort; + } + + /** + * Gets the asdc client auth. + * + * @return the asdc client auth + */ + public String getAsdcClientAuth() { + return asdcClientAuth; + } + + /** + * Gets the asdc client protocol. + * + * @return the asdc client protocol + */ + public String getAsdcClientProtocol() { + return asdcClientProtocol; + } + + /** + * The Enum AsdcClientType. + */ + public enum AsdcClientType { + + /** The in memory. */ + IN_MEMORY, + + /** The rest. */ + REST + } +} diff --git a/vid-app-common/src/main/java/org/openecomp/vid/properties/VidProperties.java b/vid-app-common/src/main/java/org/openecomp/vid/properties/VidProperties.java new file mode 100755 index 000000000..141b9b27c --- /dev/null +++ b/vid-app-common/src/main/java/org/openecomp/vid/properties/VidProperties.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * 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.vid.properties; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.openecomp.vid.model.ModelConstants; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; + +import org.openecomp.vid.controller.VidController; +/** + * The Class VidProperties. + */ +public class VidProperties extends SystemProperties { + + //VID General Properties + + /** The Constant VID_TRUSTSTORE_FILENAME. */ + public static final String VID_TRUSTSTORE_FILENAME = "vid.truststore.filename"; + + /** The Constant VID_TRUSTSTORE_PASSWD_X. */ + public static final String VID_TRUSTSTORE_PASSWD_X = "vid.truststore.passwd.x"; + + /** The Constant FILESEPARATOR. */ + public static final String FILESEPARATOR = (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator"); + + /** The Constant LOG. */ + private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(VidController.class); + + /** The Constant dateFormat. */ + final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS"); + /** + * Gets the asdc model namespace prefix property + * + * @return the property value or a default value + */ + public static String getAsdcModelNamespace() { + String methodName = "getAsdcModelNamespace "; + String asdcModelNamespace = ModelConstants.DEFAULT_ASDC_MODEL_NAMESPACE; + try { + asdcModelNamespace = SystemProperties.getProperty(ModelConstants.ASDC_MODEL_NAMESPACE); + if ( asdcModelNamespace == null || asdcModelNamespace.isEmpty()) { + asdcModelNamespace = ModelConstants.DEFAULT_ASDC_MODEL_NAMESPACE; + } + } + catch ( Exception e ) { + LOG.error (EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodName + "unable to find the value, using the default " + + ModelConstants.DEFAULT_ASDC_MODEL_NAMESPACE); + asdcModelNamespace = ModelConstants.DEFAULT_ASDC_MODEL_NAMESPACE; + } + return (asdcModelNamespace); + } + /** + * Gets the specified property value. If the property is not defined, returns a default value. + * + * @return the property value or a default value + */ + public static String getPropertyWithDefault ( String propName, String defaultValue ) { + String methodName = "getPropertyWithDefault "; + String propValue = defaultValue; + try { + propValue = SystemProperties.getProperty(propName); + if ( propValue == null || propValue.isEmpty()) { + propValue = defaultValue; + } + } + catch ( Exception e ) { + LOG.error (EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + methodName + "unable to find the value, using the default " + + defaultValue); + propValue = defaultValue; + } + return (propValue); + } +} -- cgit 1.2.3-korg