Modify the interface version
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / process / VnfMgr.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.process;
18
19 import java.util.Map;
20 import java.util.concurrent.ConcurrentHashMap;
21
22 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
23 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 import net.sf.json.JSONException;
32 import net.sf.json.JSONObject;
33
34 /**
35  * Provide function for instantiate or terminate VNF
36  * <br/>
37  *
38  * @author
39  * @version NFVO 0.5 Aug 24, 2016
40  */
41 public class VnfMgr {
42
43     private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
44
45     private VnfmDao vnfmDao;
46
47     public void setVnfmDao(VnfmDao vnfmDao) {
48         this.vnfmDao = vnfmDao;
49     }
50
51     /**
52      * Scale vnf
53      * 
54      * @param vnfObject
55      *            {
56      *            "vnfInstanceId":"5",
57      *            "type":"SCALE_OUT",
58      *            "aspectId":"101",
59      *            "numberOfSteps":"1",
60      *            "additionalParam":{}
61      *            }
62      * @param vnfmId
63      * @param vnfInstanceId
64      * @return
65      */
66     public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
67         JSONObject restJson = new JSONObject();
68         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
69         try {
70
71             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
72                 return restJson;
73             }
74
75             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
76             LOG.info("vnfm info:" + vnfmObjcet);
77             if(vnfmObjcet.isNullObject()) {
78                 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
79                 return restJson;
80             }
81             restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
82         } catch(JSONException e) {
83             LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
84         }
85
86         return restJson;
87     }
88
89     /**
90      * Provide function for instantiate VNF
91      * <br/>
92      *
93      * @param vnfObject
94      * @param vnfmId
95      * @return
96      * @since NFVO 0.5
97      */
98     public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
99         JSONObject restJson = new JSONObject();
100         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
101         try {
102
103             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
104                 return restJson;
105             }
106
107             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
108
109             if(vnfmObjcet.isNullObject()) {
110                 return restJson;
111             }
112
113             Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
114             conMap.put("csarid", vnfObject.getString("vnfPackageId"));
115             conMap.put("vnfmid", vnfmId);
116             conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
117
118             JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
119
120             if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
121                 return restJson;
122             }
123
124             JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
125             restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
126             saveVnfInfo(restJson, resObjcet);
127         } catch(JSONException e) {
128             LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
129         }
130
131         return restJson;
132     }
133
134     /**
135      * Provide function for terminate VNF
136      * <br/>
137      *
138      * @param vnfId
139      * @param vnfmId
140      * @param vnfObject
141      * @return
142      * @since NFVO 0.5
143      */
144     public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
145         LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
146         JSONObject restJson = new JSONObject();
147         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
148         try {
149             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
150             if(vnfmObjcet.isNullObject()) {
151                 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
152                 return restJson;
153             }
154
155             restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
156         } catch(JSONException e) {
157             LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
158         }
159         return restJson;
160     }
161
162     /**
163      * Provide function for get VNF
164      * <br/>
165      *
166      * @param vnfId
167      * @param vnfmId
168      * @return
169      * @since NFVO 0.5
170      */
171     public JSONObject getVnf(String vnfId, String vnfmId) {
172         LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
173         JSONObject restJson = new JSONObject();
174         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
175         try {
176             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
177             if(vnfmObjcet.isNullObject()) {
178                 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
179                 return restJson;
180             }
181
182             restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
183
184             return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson);
185
186         } catch(JSONException e) {
187             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
188             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
189         }
190         return restJson;
191     }
192
193     private JSONObject getVnfBody(JSONObject restJson) {
194         try {
195             JSONObject vnfInfoJson = new JSONObject();
196             JSONObject basicInfoJson = new JSONObject();
197
198             JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
199
200             basicInfoJson.put("vnfInstanceId", retJson.getString("id"));
201             basicInfoJson.put("vnfInstanceName", retJson.getString("vapp_name"));
202             basicInfoJson.put("vnfInstanceDescription", "vFW");
203
204             Vnfm vnfm = vnfmDao.getVnfmById(retJson.getString("id"));
205             basicInfoJson.put("vnfdId", vnfm == null ? "" : vnfm.getVnfdId());
206             basicInfoJson.put("vnfdPackageId", vnfm == null ? "" : vnfm.getVnfPackageId());
207             basicInfoJson.put("version", vnfm == null ? "" : vnfm.getVersion());
208             basicInfoJson.put("vnfProvider", "hw");
209             basicInfoJson.put("vnfType", retJson.get("vapp_type"));
210             basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
211
212             vnfInfoJson.put("vnfInfo", basicInfoJson);
213             vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
214             return vnfInfoJson;
215         } catch(JSONException e) {
216             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
217             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
218             return restJson;
219         } catch(IndexOutOfBoundsException e) {
220             LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
221             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
222             return restJson;
223         }
224     }
225
226     @SuppressWarnings("unchecked")
227     private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
228         JSONObject restJson = new JSONObject();
229         JSONObject vappIfno = new JSONObject();
230         restJson.put("vnfd_id", resObject.getString("vnfdId"));
231         restJson.put("plan_id", resObject.getOrDefault("planId", ""));
232         restJson.put("plan_name", resObject.getOrDefault("planName", ""));
233         restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
234         restJson.put("project_id", vnfmId);
235         restJson.put("parameters", resObject.getJSONObject("parameters"));
236         restJson.put("nfvo_id", "");
237         restJson.put("location", "");
238         restJson.put("vnfm_id", vnfmId);
239         vappIfno.put("vapp_info", restJson);
240         return vappIfno;
241     }
242
243     /**
244      * Provide function for get job
245      * <br/>
246      *
247      * @param jobId
248      * @param vnfmId
249      * @return
250      * @since NFVO 0.5
251      */
252     public JSONObject getJob(String jobId, String vnfmId) {
253         LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
254         JSONObject restJson = new JSONObject();
255         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
256         try {
257             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
258             if(vnfmObjcet.isNullObject()) {
259                 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
260                 return restJson;
261             }
262
263             restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
264
265         } catch(JSONException e) {
266             LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
267             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
268         }
269         return restJson;
270     }
271
272     /**
273      * Provide function for save vnfInfo
274      * <br/>
275      *
276      * @param vnfObject
277      * @param resObject
278      * @since NFVO 0.5
279      */
280     public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
281         LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
282         if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
283             Vnfm info = new Vnfm();
284             info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
285             info.setVersion(resObject.getString("vnfdVersion"));
286             info.setVnfdId(resObject.getString("vnfdId"));
287             info.setVnfPackageId("");
288             try {
289                 vnfmDao.insertVnfm(info);
290             } catch(Exception e) {
291                 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
292             }
293         }
294     }
295
296     /**
297      * <br>
298      * 
299      * @param jsonObject
300      * @param vnfInstanceId
301      * @param vnfmId
302      * @return
303      * @since VFC 1.0
304      */
305     public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
306         JSONObject restJson = new JSONObject();
307         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
308
309         if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
310             return restJson;
311         }
312
313         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
314         LOG.info("vnfm info:" + vnfmObjcet);
315         if(vnfmObjcet.isNullObject()) {
316             LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
317             return restJson;
318         }
319         restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);
320         return restJson;
321     }
322 }