Fix component startup
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / onap / vfc / VfcPackageProvider.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc;
17
18 import com.google.common.io.ByteStreams;
19 import com.google.gson.JsonElement;
20 import com.google.gson.JsonParser;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.net.URL;
24 import org.apache.http.HttpEntity;
25 import org.apache.http.HttpHeaders;
26 import org.apache.http.client.methods.CloseableHttpResponse;
27 import org.apache.http.client.methods.HttpGet;
28 import org.apache.http.impl.client.CloseableHttpClient;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.IpMappingProvider;
31 import org.onap.vfccatalog.api.VnfpackageApi;
32 import org.onap.vfccatalog.model.VnfPkgDetailInfo;
33 import org.slf4j.Logger;
34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.stereotype.Component;
36
37 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure;
38 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions;
39 import static org.slf4j.LoggerFactory.getLogger;
40 import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE;
41
42 /**
43  * Retrieves a package from VF-C
44  */
45 @Component
46 public class VfcPackageProvider implements IPackageProvider {
47     private static Logger logger = getLogger(VfcPackageProvider.class);
48     private final VfcRestApiProvider restApiProvider;
49     private final IpMappingProvider ipMappingProvider;
50
51     @Autowired
52     VfcPackageProvider(VfcRestApiProvider restApiProvider, IpMappingProvider ipMappingProvider) {
53         this.restApiProvider = restApiProvider;
54         this.ipMappingProvider = ipMappingProvider;
55     }
56
57     @Override
58     public String getCbamVnfdId(String csarId) {
59         VnfPkgDetailInfo vnfPackageDetails;
60         try {
61             VnfpackageApi onapCatalogApi = restApiProvider.getVfcCatalogApi();
62             vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId).blockingFirst();
63         } catch (Exception e) {
64             throw buildFatalFailure(logger, "Unable to query VNF package with " + csarId, e);
65         }
66         JsonElement vnfdModel = new JsonParser().parse(vnfPackageDetails.getPackageInfo().getVnfdModel());
67         return vnfdModel.getAsJsonObject().get("metadata").getAsJsonObject().get("resourceVendorModelNumber").getAsString();
68     }
69
70     @Override
71     public byte[] getPackage(String csarId) {
72         String downloadUrl;
73         try {
74             VnfpackageApi onapCatalogApi = restApiProvider.getVfcCatalogApi();
75             VnfPkgDetailInfo vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId).blockingFirst();
76             String urlFromVfc = vnfPackageDetails.getPackageInfo().getDownloadUrl();
77             String host = new URL(urlFromVfc).getHost();
78             downloadUrl = urlFromVfc.replaceFirst("://" + host, "://" + ipMappingProvider.mapPrivateIpToPublicIp(host));
79         } catch (Exception e) {
80             throw buildFatalFailure(logger, "Unable to query VNF package with " + csarId, e);
81         }
82         try {
83             return downloadCbamVnfPackage(downloadUrl);
84         } catch (Exception e) {
85             throw buildFatalFailure(logger, "Unable to download package from " + downloadUrl, e);
86         }
87     }
88
89     private byte[] downloadCbamVnfPackage(String downloadUri) throws IOException {
90         CloseableHttpClient client = systemFunctions().getHttpClient();
91         HttpGet httpget = new HttpGet(downloadUri);
92         httpget.setHeader(HttpHeaders.ACCEPT, APPLICATION_OCTET_STREAM_VALUE);
93         CloseableHttpResponse response = client.execute(httpget);
94         HttpEntity entity = response.getEntity();
95         InputStream is = entity.getContent();
96         byte[] bytes = ByteStreams.toByteArray(is);
97         client.close();
98         return bytes;
99     }
100 }