diff options
author | 2018-03-29 17:46:39 +0530 | |
---|---|---|
committer | 2018-04-30 13:51:11 +0000 | |
commit | 72d62fb1aaaaeaed462083e232f3571b3bde6b08 (patch) | |
tree | 0691b2378b76270b7b7dbd8e32aff2afe895042f /openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services | |
parent | db69b87869091b774d6d87f3b6a9155d34d26b12 (diff) |
Integrate VNF Repository in Beijing release
Migrate the code
Change-Id: Ifccacf83634af32b034fd9c413e68f894f06d2f7
Issue-ID: VNFSDK-155
Signed-off-by: Murali-P <murali.p@huawei.com>
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services')
-rw-r--r-- | openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VnfPackageRepositoryImpl.java | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VnfPackageRepositoryImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VnfPackageRepositoryImpl.java new file mode 100644 index 0000000000..439fd1475f --- /dev/null +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vnf-repository-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VnfPackageRepositoryImpl.java @@ -0,0 +1,223 @@ +/* + * Copyright 2017 Huawei Technologies Co., Ltd. + * + * 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. + */ + +package org.openecomp.sdcrests.vsp.rest.services; + +import static javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION; +import static org.openecomp.core.utilities.file.FileUtils.getFileExtension; +import static org.openecomp.core.utilities.file.FileUtils.getNetworkPackageName; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import javax.inject.Named; +import javax.ws.rs.core.Response; + +import org.apache.http.HttpStatus; +import org.openecomp.config.api.Configuration; +import org.openecomp.config.api.ConfigurationManager; +import org.openecomp.sdc.common.http.client.api.HttpRequest; +import org.openecomp.sdc.common.http.client.api.HttpResponse; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManager; +import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManagerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse; +import org.openecomp.sdc.versioning.VersioningManager; +import org.openecomp.sdc.versioning.VersioningManagerFactory; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdcrests.vendorsoftwareproducts.types.UploadFileResponseDto; +import org.openecomp.sdcrests.vsp.rest.VnfPackageRepository; +import org.openecomp.sdcrests.vsp.rest.mapping.MapUploadFileResponseToUploadFileResponseDto; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Service; + +/** + * The class implements the API interface with VNF Repository (VNFSDK) such as + * i) Get all the VNF Package Meta-data ii) Download the VNF Package iii) Import + * VNF package to SDC catalog (Download & validate) + * + * @version Amsterdam release (ONAP 1.0) + */ +@Named +@Service("vnfPackageRepository") +@Scope(value = "prototype") +public class VnfPackageRepositoryImpl implements VnfPackageRepository { + + private static final Logger LOGGER = LoggerFactory.getLogger(VnfPackageRepositoryImpl.class); + + private static boolean initFlag = false; + + // Default VNF Repository configuration + private static final String CONFIG_NAMESPACE = "vnfrepo"; + + // Default address for VNF repository docker + private static final String DEF_DOCKER_COMPOSE_ADDR = "127.0.0.1"; + + private static String ipAddress = DEF_DOCKER_COMPOSE_ADDR; + + // Default Download package URI and Get VNF package meta-data URI - + // configurable + private static String getVnfPkgUri = "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars"; + + private static String downldPkgUri = "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/%s/files"; + + // Default port for VNF Repository + private static String port = "8702"; + + @Override + public Response getVnfPackages(String vspId, String versionId, String user) throws Exception { + + LOGGER.debug("Get VNF Packages from Repository:{}", vspId); + + // Step 1: Create REST client and configuration and prepare URI + init(); + + // Step 2: Build URI based on the IP address and port allocated + HttpResponse<String> rsp = HttpRequest.get(getVnfPkgUri); + if(HttpStatus.SC_OK != rsp.getStatusCode()) { + LOGGER.error("Failed to query VNF package metadata:uri={}, Response={}", getVnfPkgUri, rsp); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + + // Step 3: Send the response to the client + LOGGER.debug("Response from VNF Repository: {}", rsp.getResponse()); + + return Response.ok(rsp.getResponse()).build(); + } + + @Override + public Response importVnfPackage(String vspId, String versionId, String csarId, String user) throws Exception { + + LOGGER.debug("Import VNF Packages from Repository:{}", csarId); + + // Step 1: Create REST client and configuration and prepare URI + init(); + + // Step 2: Build URI based on the IP address and port allocated + String uri = String.format(downldPkgUri, csarId); + HttpResponse<String> rsp = HttpRequest.get(uri); + if(HttpStatus.SC_OK != rsp.getStatusCode()) { + LOGGER.error("Failed to download package from VNF Repository:uri={}, Response={}", uri, rsp); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + LOGGER.debug("Response from VNF Repository for download package is success "); + + // Step 3: Import the file to SDC and validate and send the response + try (InputStream fileStream = new BufferedInputStream( + new ByteArrayInputStream(rsp.getResponse().getBytes(StandardCharsets.ISO_8859_1)))) { + + String filename = "temp_" + csarId + ".csar"; + OrchestrationTemplateCandidateManager candidateManager = + OrchestrationTemplateCandidateManagerFactory.getInstance().createInterface(); + UploadFileResponse uploadFileResponse = candidateManager.upload(vspId, getVersion(vspId, versionId), + fileStream, getFileExtension(filename), getNetworkPackageName(filename)); + + UploadFileResponseDto uploadFileResponseDto = new MapUploadFileResponseToUploadFileResponseDto() + .applyMapping(uploadFileResponse, UploadFileResponseDto.class); + + return Response.ok(uploadFileResponseDto).build(); + } catch(Exception e) { + // Exception while uploading file + + LOGGER.error("Exception while uploading VNF package received from VNF Repository:", e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + } + + @Override + public Response downloadVnfPackage(String vspId, String versionId, String csarId, String user) throws Exception { + + LOGGER.debug("Download VNF Packages from Repository:csarId={}", csarId); + + // Step 1: Create REST client and configuration and prepare URI + init(); + + // Step 2: Build URI based on the IP address and port allocated + String uri = String.format(downldPkgUri, csarId); + HttpResponse<String> rsp = HttpRequest.get(uri); + if(HttpStatus.SC_OK != rsp.getStatusCode()) { + LOGGER.error("Failed to download package from VNF Repository:uri={}, Response={}", uri, rsp); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + + // Step 3:Send response to the client + String filename = "temp_" + csarId + ".csar"; + Response.ResponseBuilder response = Response.ok(rsp.getResponse().getBytes(StandardCharsets.ISO_8859_1)); + response.header(CONTENT_DISPOSITION, "attachment; filename=" + filename); + + LOGGER.debug("Response from VNF Repository for download package is success "); + + return response.build(); + } + + private Version getVersion(String vspId, String versionId) { + // Get list of Versions from the rest call + VersioningManager versioningManager = VersioningManagerFactory.getInstance().createInterface(); + + // Find the corresponding version from versionId + return versioningManager.list(vspId).stream().filter(ver -> ver.getId() != versionId).findAny() + .orElse(new Version(versionId)); + } + + private static void setVnfRepoConfig() { + + try { + // Step 1: Fetch the on-boarding configuration + Configuration config = ConfigurationManager.lookup(); + + String vnfRepoHost = config.getAsString(CONFIG_NAMESPACE, "vnfRepoHost"); + if(null != vnfRepoHost) { + ipAddress = vnfRepoHost; + } + + String vnfRepoPort = config.getAsString(CONFIG_NAMESPACE, "vnfRepoPort"); + if(null != vnfRepoPort) { + port = vnfRepoPort; + } + + String getVnfUri = config.getAsString(CONFIG_NAMESPACE, "getVnfUri"); + if(null != getVnfUri) { + getVnfPkgUri = getVnfUri; + } + + String downloadVnfUri = config.getAsString(CONFIG_NAMESPACE, "downloadVnfUri"); + if(null != downloadVnfUri) { + downldPkgUri = downloadVnfUri; + } + + } catch(Exception e) { + LOGGER.error("Failed to load configuration, Exception caught, using default configuration", e); + } + + getVnfPkgUri = + new StringBuilder("http://").append(ipAddress).append(":").append(port).append(getVnfPkgUri).toString(); + + downldPkgUri = + new StringBuilder("http://").append(ipAddress).append(":").append(port).append(downldPkgUri).toString(); + } + + private static synchronized void init() throws Exception { + if(!initFlag) { + // Step 1: Initialize configuration + setVnfRepoConfig(); + + initFlag = true; + } + } +} |