Fix catalog query csar url
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / adapter / impl / AdapterResourceManager.java
1 /*
2  * Copyright 2016-2017 Huawei Technologies Co., Ltd.
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
17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl;
18
19 import java.io.BufferedInputStream;
20 import java.io.File;
21 import java.io.FileInputStream;
22 import java.io.FileNotFoundException;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import org.apache.commons.httpclient.HttpMethod;
29 import org.apache.commons.httpclient.HttpStatus;
30 import org.apache.commons.net.ftp.FTPClient;
31 import org.apache.commons.net.ftp.FTPReply;
32 import org.apache.commons.net.ftp.FTPSClient;
33 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.DownloadCsarManager;
34 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmException;
35 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
36 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.RestfulResponse;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.SystemEnvVariablesFactory;
38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.servicetoken.VNFRestfulUtil;
39 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.inf.IResourceManager;
40 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
41 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.UrlConstant;
42 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.connect.ConnectMgrVnfm;
43 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.connect.HttpRequests;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 import net.sf.json.JSONArray;
48 import net.sf.json.JSONException;
49 import net.sf.json.JSONObject;
50
51 /**
52  * Resource Manager adapter class.
53  * .</br>
54  *
55  * @author
56  * @version VFC 1.0 Sep 13, 2016
57  */
58 public class AdapterResourceManager implements IResourceManager {
59
60     private static final Logger LOG = LoggerFactory.getLogger(AdapterResourceManager.class);
61
62     private static final String VNFD_FILE_PATH = "vnfd_file_path";
63
64     @Override
65     public JSONObject uploadVNFPackage(JSONObject vnfpkg, Map<String, String> paramsMap) {
66         JSONObject resultObj = new JSONObject();
67         String vnfDescriptorId = paramsMap.get("vnfDescriptorId");
68         try {
69             // if upper layer do not provide vnfpackage info,then get the
70             // vnfpackage info from JSON file.
71             if(vnfpkg == null || vnfpkg.isEmpty()) {
72                 String vnfPkgInfo = readVfnPkgInfoFromJson();
73                 JSONObject vnfpkgJson = JSONObject.fromObject(vnfPkgInfo);
74                 vnfpkg = vnfpkgJson.getJSONObject(vnfDescriptorId);
75             }
76         } catch(IOException e) {
77             LOG.error("function=uploadVNFPackage", e);
78         }
79
80         // check if parameters are null.
81         if(paramsMap == null || paramsMap.isEmpty()) {
82             resultObj.put(Constant.REASON, "csarid and vnfmid are null.");
83             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
84             return resultObj;
85         }
86
87         String csarid = paramsMap.get("csarid");
88         String vnfmid = paramsMap.get("vnfmid");
89         String vnfdid = "";
90
91         if(null == csarid || "".equals(csarid)) {
92             resultObj.put(Constant.REASON, "csarid is null.");
93             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
94             return resultObj;
95         }
96         if(null == vnfmid || "".equals(vnfmid)) {
97             resultObj.put(Constant.REASON, "vnfmid is null.");
98             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
99             return resultObj;
100         }
101
102         // obtain CSAR package info
103         JSONObject csarobj = getVnfmCsarInfo(csarid);
104         String downloadUri = "";
105         if(Integer.valueOf(csarobj.get(Constant.RETCODE).toString()) == Constant.HTTP_OK) {
106             LOG.info("get CSAR info successful.", csarobj.get(Constant.RETCODE));
107             downloadUri = csarobj.getJSONObject("packageInfo").getString("downloadUrl");
108         } else {
109             LOG.error("get CSAR info fail.", csarobj.get(Constant.RETCODE));
110             resultObj.put(Constant.REASON, csarobj.get(Constant.REASON).toString());
111             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
112             return resultObj;
113         }
114         JSONObject csarTempObj = vnfpkg.getJSONObject("template");
115         String csarfilepath = csarTempObj.getString("csar_file_path");
116         String csarfilename = csarTempObj.getString("csar_file_name");
117
118         // download csar package and save in location.
119         JSONObject downloadObject = downloadCsar(downloadUri, csarfilepath + csarfilename);
120
121         if(Integer.valueOf(downloadObject.get(Constant.RETCODE).toString()) != Constant.REST_SUCCESS) {
122             LOG.error("download CSAR fail." + downloadObject.get(Constant.RETCODE));
123             resultObj.put(Constant.REASON, downloadObject.get(Constant.REASON).toString());
124             resultObj.put(Constant.RETCODE, downloadObject.get(Constant.RETCODE).toString());
125             return resultObj;
126         }
127         LOG.info("download CSAR successful." + downloadObject.get(Constant.RETCODE));
128
129         // unzip csar package to location.
130         JSONObject unzipObject = unzipCSAR(csarfilepath + csarfilename, csarfilepath);
131
132         if(Integer.valueOf(unzipObject.get(Constant.RETCODE).toString()) != Constant.REST_SUCCESS) {
133             LOG.error("unzip CSAR fail.", unzipObject.get(Constant.RETCODE));
134             resultObj.put(Constant.REASON, unzipObject.get(Constant.REASON).toString());
135             resultObj.put(Constant.RETCODE, unzipObject.get(Constant.RETCODE).toString());
136             return resultObj;
137         }
138         LOG.info("unzip CSAR successful.", unzipObject.get(Constant.RETCODE));
139
140         // upload vnfd to ftps server
141         JSONObject uploadResJson = uploadCsar(csarTempObj, csarfilepath);
142         LOG.info("upload Csar result: {}.", uploadResJson);
143
144         Map<String, String> vnfmMap = new HashMap<>();
145         vnfmMap.put("url", String.format(UrlConstant.REST_VNFMINFO_GET, vnfmid));
146         vnfmMap.put("methodType", Constant.GET);
147
148         // get VNFM connection info
149         // getVnfmConnInfo(vnfmMap)
150         JSONObject vnfmObject = VnfmUtil.getVnfmById(vnfmid);
151         LOG.info("get Vnfm Connection Info successful.");
152
153         String vnfmUrl = vnfmObject.getString("url");
154         String userName = vnfmObject.getString(Constant.USERNAME);
155         String password = vnfmObject.getString(Constant.PASSWORD);
156
157         // build VNFM connection and get token
158         ConnectMgrVnfm mgrVcmm = new ConnectMgrVnfm();
159
160         JSONObject connObject = new JSONObject();
161         connObject.put("url", vnfmUrl);
162         connObject.put(Constant.USERNAME, userName);
163         connObject.put(Constant.PASSWORD, password);
164         if(Constant.HTTP_OK != mgrVcmm.connect(vnfmObject, Constant.CERTIFICATE)) {
165             LOG.error("get Access Session fail.");
166             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
167             resultObj.put(Constant.REASON, "connect fail.");
168             return resultObj;
169         }
170         LOG.info("get Access Session successful.");
171         String connToken = mgrVcmm.getAccessSession();
172
173         // get vim_id
174         JSONObject cloudObject = getAllCloud(vnfmUrl, connToken);
175         String vimId = "";
176
177         if(!cloudObject.isEmpty() && cloudObject.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
178             LOG.info("get all cloud successful.", cloudObject.get(Constant.RETCODE));
179             vimId = cloudObject.getString("vim_id");
180         } else {
181             LOG.error("get all cloud fail.", cloudObject.get(Constant.RETCODE));
182             return cloudObject;
183         }
184
185         // upload VNF package
186         csarTempObj.put("vim_id", vimId);
187         vnfpkg.put("template", csarTempObj);
188         LOG.info("vnfpkg: " + vnfpkg);
189
190         JSONObject uploadPkgObject = upload(vnfpkg, vnfmUrl, connToken);
191         LOG.info("uploadPkgObject:" + uploadPkgObject);
192         if(!uploadPkgObject.isEmpty() && uploadPkgObject.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
193             LOG.info("upload vnf package info successful.", uploadPkgObject.get(Constant.RETCODE));
194             vnfdid = uploadPkgObject.getString("id");
195         }
196
197         if(vnfdid == null || "".equals(vnfdid.trim())) {
198             JSONObject vnfdConf = readVnfdIdInfoFromJson();
199             LOG.info("vnfdConf=" + vnfdConf);
200             if(vnfdConf.containsKey(vnfDescriptorId)) {
201                 vnfdid = vnfdConf.getString(vnfDescriptorId);
202             }
203         }
204         LOG.info("set vnfdId=" + vnfdid);
205
206         // get vnfd version
207         String vnfdVersion = "";
208
209         JSONObject vnfdVerObject =
210                 getVnfdVersion(vnfmUrl, String.format(UrlConstant.URL_VNFDINFO_GET, vnfdid), connToken);
211         LOG.info("vnfdVerObject:" + vnfdVerObject);
212         if(!vnfdVerObject.isEmpty() && vnfdVerObject.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
213             LOG.info("get vnfd version successful.", vnfdVerObject.get(Constant.RETCODE));
214             JSONArray verArr = vnfdVerObject.getJSONArray("templates");
215             JSONObject verTmpObj = verArr.getJSONObject(0);
216
217             vnfdVersion = verTmpObj.getString("vnfdVersion");
218         } else {
219             LOG.error("get vnfd version fail.", vnfdVerObject.get(Constant.RETCODE));
220             return vnfdVerObject;
221         }
222
223         // get vnfd plan info
224         String planName = "";
225         String planId = "";
226
227         JSONObject vnfdPlanInfo = getVNFDPlanInfo(vnfmUrl, vnfdid, connToken);
228         LOG.info("vnfdPlanInfo:" + vnfdPlanInfo);
229         JSONObject inputsObj = new JSONObject();
230         if(!vnfdPlanInfo.isEmpty() && vnfdPlanInfo.get(Constant.RETCODE).equals(HttpStatus.SC_OK)) {
231             LOG.info("get vnfd plan info successful.", vnfdPlanInfo.get(Constant.RETCODE));
232             JSONObject planTmpObj = vnfdPlanInfo.getJSONObject("template");
233             String templateName = planTmpObj.getString("template_name").trim();
234             JSONArray topoTmpObj = planTmpObj.getJSONArray("topology_template");
235
236             JSONObject planObj = topoTmpObj.getJSONObject(0);
237             if("VNFD_vUGW".equals(templateName)) {
238                 for(int i = 0; i < topoTmpObj.size(); i++) {
239                     String name = topoTmpObj.getJSONObject(i).getString("plan_name").trim();
240                     if("Normal_E9K".equals(name)) {
241                         planObj = topoTmpObj.getJSONObject(i);
242                     }
243                 }
244             }
245
246             planName = planObj.getString("plan_name");
247             planId = planObj.getString("plan_id");
248             if(planObj.containsKey("inputs")) {
249                 JSONArray inputs = planObj.getJSONArray("inputs");
250                 for(int i = 0; i < inputs.size(); i++) {
251                     JSONObject obj = inputs.getJSONObject(i);
252                     obj.put("value", obj.getString("default"));
253                 }
254                 inputsObj.put("inputs", inputs);
255                 inputsObj.put("External_network", new JSONArray());
256             }
257         } else {
258             LOG.error("get vnfd plan info fail.", vnfdPlanInfo.get(Constant.RETCODE));
259             return vnfdPlanInfo;
260         }
261
262         // return values
263         resultObj.put(Constant.RETCODE, Constant.HTTP_OK);
264         resultObj.put("vnfdId", vnfdid);
265         resultObj.put("vnfdVersion", vnfdVersion);
266         resultObj.put("planName", planName);
267         resultObj.put("planId", planId);
268         resultObj.put("parameters", inputsObj);
269         LOG.info("resultObj:" + resultObj.toString());
270
271         return resultObj;
272     }
273
274     private JSONObject uploadCsar(JSONObject vnfpkg, String csarfilepath) {
275         LOG.info("vnfpkg: " + vnfpkg + "csarfilepath:" + csarfilepath);
276         JSONObject resJson = new JSONObject();
277
278         boolean flag = false;
279         FTPSClient ftpClient = new FTPSClient();
280         try {
281             ftpClient.connect(vnfpkg.getString("ftp_server_ip"), 21);
282             ftpClient.login(vnfpkg.getString("ftp_username"), vnfpkg.getString("ftp_password"));
283             int replyCode = ftpClient.getReplyCode();
284             LOG.info("replyCode: " + replyCode);
285             if(!FTPReply.isPositiveCompletion(replyCode)) {
286                 resJson.put("message", "Connect ftps server failed!");
287                 return resJson;
288             }
289
290             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
291             ftpClient.enterLocalPassiveMode();
292             ftpClient.makeDirectory(vnfpkg.getString(VNFD_FILE_PATH));
293             LOG.info("makeDirectory: " + ftpClient.makeDirectory(vnfpkg.getString(VNFD_FILE_PATH)));
294             ftpClient.changeWorkingDirectory(vnfpkg.getString(VNFD_FILE_PATH));
295             LOG.info("changeWorkingDirectory: " + ftpClient.changeWorkingDirectory(vnfpkg.getString(VNFD_FILE_PATH)));
296             String vnfdPath = csarfilepath + "Artifacts/Deployment/OTHER/";
297             LOG.info("vnfd_file_name: " + vnfdPath + vnfpkg.getString("vnfd_file_name"));
298             InputStream inputStream = new FileInputStream(new File(vnfdPath + vnfpkg.getString("vnfd_file_name")));
299             flag = ftpClient.storeFile(vnfpkg.getString("vnfd_file_name"), inputStream);
300             if(flag) {
301                 resJson.put("message", "upload Csar success!");
302             }
303             inputStream.close();
304             ftpClient.logout();
305         } catch(Exception e) {
306             LOG.error("Exception: " + e);
307         } finally {
308             if(ftpClient.isConnected()) {
309                 try {
310                     ftpClient.disconnect();
311                 } catch(IOException e) {
312                     LOG.error("IOException: " + e);
313                 }
314             }
315         }
316         return resJson;
317     }
318
319     private JSONObject sendRequest(Map<String, String> paramsMap) {
320         JSONObject resultObj = new JSONObject();
321         RestfulResponse rsp = VNFRestfulUtil.getRemoteResponse(paramsMap, "");
322         if(null == rsp) {
323             LOG.error("function=sendRequest,  RestfulResponse is null");
324             resultObj.put(Constant.REASON, "RestfulResponse is null.");
325             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
326             return resultObj;
327         }
328         String resultCreate = rsp.getResponseContent();
329
330         if(rsp.getStatus() == Constant.HTTP_OK) {
331             LOG.warn("function=sendRequest, msg= status={}, result={}.", rsp.getStatus(), resultCreate);
332             resultObj = JSONObject.fromObject(resultCreate);
333             resultObj.put(Constant.RETCODE, Constant.HTTP_OK);
334             return resultObj;
335         } else {
336             LOG.error("function=sendRequest, msg=ESR return fail,status={}, result={}.", rsp.getStatus(), resultCreate);
337             resultObj.put(Constant.REASON, "ESR return fail.");
338         }
339         resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
340         return resultObj;
341     }
342
343     @Override
344     public JSONObject getVnfmCsarInfo(String csarid) {
345         JSONObject resultObj = new JSONObject();
346
347         if(null == csarid || "".equals(csarid)) {
348             resultObj.put(Constant.REASON, "csarid is null.");
349             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
350             return resultObj;
351         }
352
353         Map<String, String> paramsMap = new HashMap<String, String>();
354
355         paramsMap.put("url", String.format(UrlConstant.REST_CSARINFO_GET, csarid));
356         paramsMap.put("methodType", Constant.GET);
357
358         return this.sendRequest(paramsMap);
359     }
360
361     @Override
362     public JSONObject downloadCsar(String url, String filePath) {
363         JSONObject resultObj = new JSONObject();
364
365         if(url == null || "".equals(url)) {
366             resultObj.put(Constant.REASON, "url is null.");
367             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
368             return resultObj;
369         }
370         if(filePath == null || "".equals(filePath)) {
371             resultObj.put(Constant.REASON, "downloadUrl filePath is null.");
372             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
373             return resultObj;
374         }
375
376         String status = DownloadCsarManager.download(url, filePath);
377
378         if(Constant.DOWNLOADCSAR_SUCCESS.equals(status)) {
379             resultObj.put(Constant.REASON, "download csar file successfully.");
380             resultObj.put(Constant.RETCODE, Constant.REST_SUCCESS);
381         } else {
382             resultObj.put(Constant.REASON, "download csar file failed.");
383             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
384         }
385         return resultObj;
386     }
387
388     @Override
389     public JSONObject getAllCloud(String url, String conntoken) {
390         JSONObject resultObj = new JSONObject();
391         JSONArray resArray = new JSONArray();
392
393         if(url == null || url.equals("")) {
394             url = "http://" + Constant.LOCAL_HOST + ":31943";
395         }
396
397         // get vim_id
398         HttpMethod httpMethodCloud = null;
399         try {
400             httpMethodCloud =
401                     new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(url.trim(), UrlConstant.URL_ALLCLOUD_NEW_GET)
402                             .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).setParams("").get().execute();
403
404             int statusCode = httpMethodCloud.getStatusCode();
405
406             String result = httpMethodCloud.getResponseBodyAsString();
407             LOG.info(result);
408             if(statusCode == HttpStatus.SC_OK) {
409                 JSONObject vimInfo = JSONObject.fromObject(result);
410                 resArray = vimInfo.getJSONArray("vim_info");
411                 resultObj = resArray.getJSONObject(0);
412                 resultObj.put(Constant.RETCODE, statusCode);
413             } else {
414                 LOG.error("uploadVNFPackage get allcloud failed, code:" + statusCode + " re:" + result);
415                 resultObj.put(Constant.RETCODE, statusCode);
416                 resultObj.put(Constant.REASON, "get allcloud failed. code:" + statusCode + " re:" + result);
417                 return resultObj;
418             }
419         } catch(JSONException e) {
420             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud JSONException e={}.", e);
421             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
422             resultObj.put(Constant.REASON, "get allcloud failed and JSONException." + e.getMessage());
423             return resultObj;
424         } catch(VnfmException e) {
425             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud VnfmException e={}.", e);
426             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
427             resultObj.put(Constant.REASON, "get allcloud failed and VnfmException." + e.getMessage());
428             return resultObj;
429         } catch(IOException e) {
430             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get allcloud IOException e={}.", e);
431             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
432             resultObj.put(Constant.REASON, "get allcloud failed and IOException." + e.getMessage());
433             return resultObj;
434         }
435         return resultObj;
436     }
437
438     /**
439      * Upload vnfpackage<br>
440      *
441      * @param vnfpackage
442      * @param vnfmurl
443      * @param conntoken
444      * @return
445      * @since VFC 1.0
446      */
447     public JSONObject upload(JSONObject vnfpackage, String vnfmurl, String conntoken) {
448         JSONObject resultObj = new JSONObject();
449         HttpMethod httpMethodVnf = null;
450
451         try {
452             httpMethodVnf = new HttpRequests.Builder(Constant.CERTIFICATE)
453                     .setUrl(vnfmurl.trim(), UrlConstant.URL_VNFPACKAGE_POST).setParams(vnfpackage.toString())
454                     .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).post().execute();
455
456             int statusCodeUp = httpMethodVnf.getStatusCode();
457
458             String resultUp = httpMethodVnf.getResponseBodyAsString();
459
460             if(statusCodeUp == HttpStatus.SC_CREATED || statusCodeUp == HttpStatus.SC_OK) {
461                 LOG.info("uploadVNFPackage upload VNF package successful, code:" + statusCodeUp + " re:" + resultUp);
462                 resultObj = JSONObject.fromObject(resultUp);
463                 resultObj.put(Constant.RETCODE, statusCodeUp);
464             } else {
465                 LOG.error("uploadVNFPackage upload VNF package failed, code:" + statusCodeUp + " re:" + resultUp);
466                 resultObj.put(Constant.RETCODE, statusCodeUp);
467                 resultObj.put("data", "upload VNF package failed, code:" + statusCodeUp + " re:" + resultUp);
468                 return resultObj;
469             }
470         } catch(JSONException e) {
471             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package JSONException e={}.", e);
472             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
473             resultObj.put(Constant.REASON, "upload VNF package failed and JSONException." + e.getMessage());
474             return resultObj;
475         } catch(VnfmException e) {
476             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package VnfmException e={}.", e);
477             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
478             resultObj.put(Constant.REASON, "upload VNF package failed and VnfmException." + e.getMessage());
479             return resultObj;
480         } catch(IOException e) {
481             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage upload VNF package IOException e={}.", e);
482             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
483             resultObj.put(Constant.REASON, "upload VNF package failed and IOException." + e.getMessage());
484             return resultObj;
485         }
486         return resultObj;
487     }
488
489     /**
490      * Find vnfd version.<br>
491      *
492      * @param prefixUrl
493      * @param serviceUrl
494      * @return
495      * @since VFC 1.0
496      */
497     public JSONObject getVnfdVersion(String prefixUrl, String serviceUrl, String conntoken) {
498         JSONObject resultObj = new JSONObject();
499         HttpMethod httpMethodVnfd = null;
500         try {
501             httpMethodVnfd = new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(prefixUrl.trim(), serviceUrl)
502                     .setParams("").addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).get().execute();
503
504             int statusCodeVnfd = httpMethodVnfd.getStatusCode();
505
506             String resultVnfd = httpMethodVnfd.getResponseBodyAsString();
507             LOG.info("getVnfdVersion result:" + resultVnfd);
508             if(statusCodeVnfd == HttpStatus.SC_OK) {
509                 resultObj = JSONObject.fromObject(resultVnfd);
510                 resultObj.put(Constant.RETCODE, statusCodeVnfd);
511             } else {
512                 LOG.error("uploadVNFPackage vnfd version failed, code:" + statusCodeVnfd + " re:" + resultVnfd);
513                 resultObj.put(Constant.RETCODE, statusCodeVnfd);
514                 resultObj.put("data", "get vnfd version failed, code:" + statusCodeVnfd + " re:" + resultVnfd);
515                 return resultObj;
516             }
517         } catch(JSONException e) {
518             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version JSONException e={}.", e);
519             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
520             resultObj.put(Constant.REASON, "get vnfd version failed and JSONException." + e.getMessage());
521             return resultObj;
522         } catch(VnfmException e) {
523             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version VnfmException e={}.", e);
524             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
525             resultObj.put(Constant.REASON, "get vnfd version failed and VnfmException." + e.getMessage());
526             return resultObj;
527         } catch(IOException e) {
528             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get vnfd version IOException e={}.", e);
529             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
530             resultObj.put(Constant.REASON, "get vnfd version failed and IOException." + e.getMessage());
531             return resultObj;
532         }
533         return resultObj;
534     }
535
536     /**
537      * Find VNFM connection information.<br>
538      *
539      * @param paramsMap
540      * @return
541      * @since VFC 1.0
542      */
543     public JSONObject getVnfmConnInfo(Map<String, String> paramsMap) {
544         return this.sendRequest(paramsMap);
545     }
546
547     @Override
548     public JSONObject getVNFDPlanInfo(String url, String vnfdid, String conntoken) {
549         JSONObject resultObj = new JSONObject();
550
551         HttpMethod httpMethodPlan = null;
552         try {
553             httpMethodPlan = new HttpRequests.Builder(Constant.CERTIFICATE)
554                     .setUrl(url.trim(), String.format(UrlConstant.URL_VNFDPLANINFO_GET, vnfdid)).setParams("")
555                     .addHeader(Constant.HEADER_AUTH_TOKEN, conntoken).get().execute();
556
557             int statusCode = httpMethodPlan.getStatusCode();
558
559             String result = httpMethodPlan.getResponseBodyAsString();
560             LOG.info("getVNFDPlanInfo result=" + result);
561             if(statusCode == HttpStatus.SC_OK) {
562                 resultObj = JSONObject.fromObject(result);
563                 resultObj.put(Constant.RETCODE, statusCode);
564             } else {
565                 LOG.error("uploadVNFPackage get VNFDPlanInfo failed, code:" + statusCode + " re:" + result);
566                 resultObj.put(Constant.RETCODE, statusCode);
567                 resultObj.put(Constant.REASON, "get VNFDPlanInfo failed. code:" + statusCode + " re:" + result);
568                 return resultObj;
569             }
570         } catch(JSONException e) {
571             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo JSONException e={}.", e);
572             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
573             resultObj.put(Constant.REASON, "get VNFDPlanInfo failed and JSONException." + e.getMessage());
574             return resultObj;
575         } catch(VnfmException e) {
576             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo VnfmException e={}.", e);
577             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
578             resultObj.put(Constant.REASON, "get VNFDPlanInfo failed and VnfmException." + e.getMessage());
579             return resultObj;
580         } catch(IOException e) {
581             LOG.error("function=uploadVNFPackage, msg=uploadVNFPackage get VNFDPlanInfo IOException e={}.", e);
582             resultObj.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
583             resultObj.put(Constant.REASON, "get VNFDPlanInfo failed and IOException." + e.getMessage());
584             return resultObj;
585         }
586         return resultObj;
587     }
588
589     /**
590      * Get VNF package information.<br>
591      *
592      * @return
593      * @throws IOException
594      * @since VFC 1.0
595      */
596     public static String readVfnPkgInfoFromJson() throws IOException {
597         InputStream ins = null;
598         BufferedInputStream bins = null;
599         String fileContent = "";
600
601         String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot()
602                 + System.getProperty(Constant.FILE_SEPARATOR) + "etc" + System.getProperty(Constant.FILE_SEPARATOR)
603                 + "vnfpkginfo" + System.getProperty(Constant.FILE_SEPARATOR) + Constant.VNFPKGINFO;
604
605         try {
606             ins = new FileInputStream(fileName);
607             bins = new BufferedInputStream(ins);
608
609             byte[] contentByte = new byte[ins.available()];
610             int num = bins.read(contentByte);
611
612             if(num > 0) {
613                 fileContent = new String(contentByte);
614             }
615         } catch(FileNotFoundException e) {
616             LOG.error(fileName + "is not found!", e);
617         } finally {
618             if(ins != null) {
619                 ins.close();
620             }
621             if(bins != null) {
622                 bins.close();
623             }
624         }
625
626         return fileContent;
627     }
628
629     private static JSONObject readVnfdIdInfoFromJson() {
630         JSONObject jsonObject = new JSONObject();
631         InputStream ins = null;
632         BufferedInputStream bins = null;
633         String fileContent = "";
634
635         String fileName = SystemEnvVariablesFactory.getInstance().getAppRoot()
636                 + System.getProperty(Constant.FILE_SEPARATOR) + "etc" + System.getProperty(Constant.FILE_SEPARATOR)
637                 + "vnfpkginfo" + System.getProperty(Constant.FILE_SEPARATOR) + "vnfd_ids.json";
638
639         try {
640             ins = new FileInputStream(fileName);
641             bins = new BufferedInputStream(ins);
642
643             byte[] contentByte = new byte[ins.available()];
644             int num = bins.read(contentByte);
645
646             if(num > 0) {
647                 fileContent = new String(contentByte);
648             }
649             if(fileContent != null) {
650                 jsonObject = JSONObject.fromObject(fileContent).getJSONObject("vnfdIds");
651             }
652             ins.close();
653             bins.close();
654         } catch(Exception e) {
655             LOG.error(fileName + " read error!", e);
656         } finally {
657
658         }
659
660         return jsonObject;
661     }
662
663     /*
664      * unzip CSAR packge
665      * @param fileName filePath
666      * @return
667      */
668     public JSONObject unzipCSAR(String fileName, String filePath) {
669         LOG.info("fileName: " + fileName + ", filePath: " + filePath);
670         JSONObject resultObj = new JSONObject();
671
672         if(fileName == null || "".equals(fileName)) {
673             resultObj.put(Constant.REASON, "fileName is null.");
674             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
675             return resultObj;
676         }
677         if(filePath == null || "".equals(filePath)) {
678             resultObj.put(Constant.REASON, "unzipCSAR filePath is null.");
679             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
680             return resultObj;
681         }
682
683         int status = DownloadCsarManager.unzipCSAR(fileName, filePath);
684
685         if(Constant.UNZIP_SUCCESS == status) {
686             resultObj.put(Constant.REASON, "unzip csar file successfully.");
687             resultObj.put(Constant.RETCODE, Constant.REST_SUCCESS);
688         } else {
689             resultObj.put(Constant.REASON, "unzip csar file failed.");
690             resultObj.put(Constant.RETCODE, Constant.REST_FAIL);
691         }
692         return resultObj;
693     }
694
695 }