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