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