bda58221ef472b9000907fad6533626284282b1a
[vfc/nfvo/resmanagement.git] /
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.resmanagement.service.dao.impl.aai;
18
19 import java.util.ArrayList;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.apache.commons.lang.StringUtils;
24 import org.onap.vfc.nfvo.resmanagement.common.util.RestfulUtil;
25 import org.onap.vfc.nfvo.resmanagement.common.util.request.RequestUtil;
26 import org.onap.vfc.nfvo.resmanagement.common.util.restclient.RestfulParametes;
27 import org.onap.vfc.nfvo.resmanagement.common.util.restclient.RestfulResponse;
28 import org.onap.vfc.nfvo.resmanagement.service.dao.inf.VnfDao;
29 import org.onap.vfc.nfvo.resmanagement.service.entity.VnfEntity;
30
31 import net.sf.json.JSONArray;
32 import net.sf.json.JSONObject;
33
34 public class VnfAaiDaoImpl implements VnfDao {
35
36     private static int VNF_AAI_DAO_SUCCESS = 1;
37
38     private static int VNF_AAI_DAO_FAIL = -1;
39
40     @Override
41     public List<VnfEntity> getVnfs(Map<String, Object> condition) {
42         ArrayList<VnfEntity> vnfList = new ArrayList<>();
43
44         if (condition.containsKey("id")) {
45             VnfEntity vnf = getVnf((String)condition.get("id"));
46             if(vnf != null) {
47                 vnfList.add(vnf);
48             }
49         } else {
50             RestfulParametes restfulParametes = new RestfulParametes();
51             restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
52
53             RestfulResponse response = RestfulUtil.getRestfulResponse(
54                     "https://192.168.17.24:8443/aai/v11/network/generic-vnfs", restfulParametes, "get");
55
56             if(response.isSuccess()) {
57                 JSONObject jsonObject = JSONObject.fromObject(response.getResponseContent());
58                 JSONArray jsonArray = jsonObject.getJSONArray("generic-vnf");
59
60                 for(int i = 0; i < jsonArray.size(); i++) {
61                     JSONObject genericVnf = jsonArray.getJSONObject(i);
62                     VnfEntity entityFromAai = VnfEntity.toEntityFromAai(genericVnf);
63                     vnfList.add(updateVnfInfo(entityFromAai, genericVnf));
64                 }
65             }
66         }
67         return vnfList;
68     }
69
70     private VnfEntity updateVnfInfo(VnfEntity vnfEntity, JSONObject jsonObject) {
71         updateVnfInfo(vnfEntity, jsonObject);
72         updateNsInfo(vnfEntity, jsonObject);
73         return vnfEntity;
74     }
75
76     private VnfEntity updateVnfmInfo(VnfEntity vnfEntity, JSONObject jsonObject) {
77         if(!jsonObject.has("relationship-list")) {
78             return vnfEntity;
79         }
80
81         JSONArray relList = (JSONArray)((JSONObject)jsonObject.get("relationship-list")).get("relationship");
82         for(int i = 0; i < relList.size(); i++) {
83             JSONObject obj = relList.getJSONObject(i);
84             if("esr-vnfm".equals(obj.getString("related-to"))) {
85                 String relatedLink = obj.getString("related-link");
86
87                 RestfulParametes restfulParametes = new RestfulParametes();
88                 restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
89                 RestfulResponse restfulResponse = RestfulUtil
90                         .getRestfulResponse("https://192.168.17.24:8443" + relatedLink, restfulParametes, "get");
91
92                 if(restfulResponse.isSuccess()) {
93                     VnfEntity.updateEntityWithVnfmInfo(vnfEntity,
94                             JSONObject.fromObject(restfulResponse.getResponseContent()));
95                     break;
96                 }
97             }
98         }
99         return vnfEntity;
100     }
101
102     private VnfEntity updateNsInfo(VnfEntity vnfEntity, JSONObject jsonObject) {
103         if(!jsonObject.has("relationship-list")) {
104             return vnfEntity;
105         }
106
107         JSONArray relList = (JSONArray)((JSONObject)jsonObject.get("relationship-list")).get("relationship");
108         for(int i = 0; i < relList.size(); i++) {
109             JSONObject obj = relList.getJSONObject(i);
110             if("service-instance".equals(obj.getString("related-to"))) {
111                 String relatedLink = obj.getString("related-link");
112
113                 RestfulParametes restfulParametes = new RestfulParametes();
114                 restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
115                 RestfulResponse restfulResponse = RestfulUtil
116                         .getRestfulResponse("https://192.168.17.24:8443" + relatedLink, restfulParametes, "get");
117
118                 if(restfulResponse.isSuccess()) {
119                     VnfEntity.updateEntityWithNsInfo(vnfEntity,
120                             JSONObject.fromObject(restfulResponse.getResponseContent()));
121                     break;
122                 }
123             }
124         }
125         return vnfEntity;
126     }
127
128     @Override
129     public VnfEntity getVnf(String id) {
130         VnfEntity vnfEntity = null;
131         RestfulParametes restfulParametes = new RestfulParametes();
132         restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
133
134         RestfulResponse response = RestfulUtil.getRestfulResponse(
135                 "https://192.168.17.24:8443/aai/v11/network/generic-vnfs/generic-vnf/" + id, restfulParametes, "get");
136
137         if(response.isSuccess()) {
138             JSONObject jsonObject = JSONObject.fromObject(response.getResponseContent());
139             vnfEntity = VnfEntity.toEntityFromAai(jsonObject);
140             updateVnfInfo(vnfEntity, jsonObject);
141         }
142         return vnfEntity;
143     }
144
145     private int checkVnfmEntity(VnfEntity vnfEntity) {
146         RestfulParametes restfulParametes = new RestfulParametes();
147
148         restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
149         // restfulParametes.setRawData(vnfEntity.toEsrVnfmStringForAai());
150         RestfulResponse response = RestfulUtil.getRestfulResponse(
151                 "https://192.168.17.24:8443/aai/v11/external-system/esr-vnfm-list/esr-vnfm/" + vnfEntity.getVnfmId(),
152                 restfulParametes, "get");
153         return response == null || !response.isSuccess() ? VNF_AAI_DAO_FAIL : VNF_AAI_DAO_SUCCESS;
154     }
155
156     private int checkServiceInstanceEntity(VnfEntity vnfEntity) {
157         RestfulParametes restfulParametes = new RestfulParametes();
158
159         restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
160         RestfulResponse response = RestfulUtil.getRestfulResponse(
161                 "https://192.168.17.24:8443/aai/v11/business/customers/customer/vfc/service-subscriptions/service-subscription"
162                 + "/vfc-service/service-instances/service-instance/" + vnfEntity.getNsId(), restfulParametes, "get");
163         return response == null || !response.isSuccess() ? VNF_AAI_DAO_FAIL : VNF_AAI_DAO_SUCCESS;
164     }
165
166
167     private int addVnfToAAI(VnfEntity vnfEntity) {
168         RestfulParametes restfulParametes = new RestfulParametes();
169
170         restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
171         restfulParametes.setRawData(vnfEntity.toStringForAai());
172
173         RestfulResponse response = RestfulUtil.getRestfulResponse(
174                 "https://192.168.17.24:8443/aai/v11/network/generic-vnfs/generic-vnf/" + vnfEntity.getId(),
175                 restfulParametes, "put");
176         return response == null || !response.isSuccess() ? VNF_AAI_DAO_FAIL : VNF_AAI_DAO_SUCCESS;
177     }
178
179     @Override
180     public int addVnf(VnfEntity vnfEntity) {
181
182         if(checkVnfmEntity(vnfEntity) == VNF_AAI_DAO_SUCCESS) {
183             if(checkServiceInstanceEntity(vnfEntity) == VNF_AAI_DAO_SUCCESS){
184                 if(addVnfToAAI(vnfEntity) == VNF_AAI_DAO_SUCCESS) {
185                     return VNF_AAI_DAO_SUCCESS;
186                 }
187
188             }
189         }
190
191         return VNF_AAI_DAO_FAIL;
192     }
193
194     private int deteletVnfm(VnfEntity vnfEntity) {
195         if(!StringUtils.isEmpty(vnfEntity.getVnfmResourceVersion())) {
196             RestfulParametes restfulParametes = new RestfulParametes();
197             restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
198             restfulParametes.put("resource-version", vnfEntity.getVnfmResourceVersion());
199
200             RestfulResponse response = RestfulUtil
201                     .getRestfulResponse("https://192.168.17.24:8443/aai/v11/external-system/esr-vnfm-list/esr-vnfm/"
202                             + vnfEntity.getVnfmId(), restfulParametes, "delete");
203             return response == null || !response.isSuccess() ? VNF_AAI_DAO_FAIL : VNF_AAI_DAO_SUCCESS;
204         }
205         return VNF_AAI_DAO_FAIL;
206     }
207
208     @Override
209     public int deleteVnfById(String id) {
210         VnfEntity vnfEntity = getVnf(id);
211
212         if(vnfEntity != null) {
213             RestfulParametes restfulParametes = new RestfulParametes();
214             restfulParametes.setHeaderMap(RequestUtil.getAAIHeaderMap());
215             restfulParametes.put("resource-version", vnfEntity.getVnfResourceVersion());
216             RestfulResponse response = RestfulUtil
217                     .getRestfulResponse("https://192.168.17.24:8443/aai/v11/network/generic-vnfs/generic-vnf/"
218                             + vnfEntity.getVnfInstanceId(), restfulParametes, "delete");
219
220             if(response.isSuccess()) {
221                 deteletVnfm(vnfEntity);
222                 return VNF_AAI_DAO_SUCCESS;
223             }
224         }
225         return VNF_AAI_DAO_FAIL;
226     }
227 }