2 * Copyright 2017 ZTE Corporation.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.onap.aai.esr.wrapper;
18 import java.util.ArrayList;
20 import javax.inject.Inject;
21 import javax.ws.rs.core.Response;
23 import org.onap.aai.esr.entity.aai.CloudRegionDetail;
24 import org.onap.aai.esr.entity.aai.CloudRegionList;
25 import org.onap.aai.esr.entity.aai.EsrSystemInfo;
26 import org.onap.aai.esr.entity.rest.VimRegisterInfo;
27 import org.onap.aai.esr.entity.rest.VimRegisterResponse;
28 import org.onap.aai.esr.externalservice.aai.CloudRegionProxy;
29 import org.onap.aai.esr.externalservice.cloud.Tenant;
30 import org.onap.aai.esr.externalservice.cloud.VimManagerProxy;
31 import org.onap.aai.esr.util.ExtsysUtil;
32 import org.onap.aai.esr.util.VimManagerUtil;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
36 import com.google.gson.Gson;
39 public class VimManagerWrapper {
41 private static VimManagerWrapper vimManagerWrapper;
42 private static final Logger LOG = LoggerFactory.getLogger(VimManagerWrapper.class);
45 private VimManagerUtil vimManagerUtil;
48 private CloudRegionProxy cloudRegionProxy;
51 private ExtsysUtil extsysUtil;
54 * get VimManagerWrapper instance.
56 * @return vim manager wrapper instance
58 public static VimManagerWrapper getInstance() {
59 if (vimManagerWrapper == null) {
60 vimManagerWrapper = new VimManagerWrapper();
62 return vimManagerWrapper;
66 public Response registerVim(VimRegisterInfo vimRegisterInfo) {
68 "Start register VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
69 CloudRegionDetail cloudRegion = new CloudRegionDetail();
70 VimRegisterResponse result = new VimRegisterResponse();
71 cloudRegion = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
72 String cloudOwner = vimRegisterInfo.getCloudOwner();
73 String cloudRegionId = vimRegisterInfo.getCloudRegionId();
75 cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegion);
76 result.setCloudOwner(cloudOwner);
77 result.setCloudRegionId(cloudRegionId);
78 Tenant tenant = new Tenant();
79 tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
81 VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
82 } catch (Exception e) {
84 LOG.error("Update VIM by Multi-cloud failed !" + e.getMessage());
86 return Response.ok(result).build();
87 } catch (Exception error) {
88 error.printStackTrace();
89 LOG.error("Register VIM failed !" + error.getMessage());
90 return Response.serverError().build();
94 public Response updateVim(String cloudOwner, String cloudRegionId,VimRegisterInfo vimRegisterInfo) {
95 LOG.info("Start update VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
96 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
97 VimRegisterResponse result = new VimRegisterResponse();
99 cloudRegionDetail = getVimUpdateInfo(vimRegisterInfo);
101 cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegionDetail);
102 result.setCloudOwner(cloudOwner);
103 result.setCloudRegionId(cloudRegionId);
104 return Response.ok(result).build();
105 } catch (Exception e) {
107 LOG.error("Update VIM failed !" + e.getMessage());
108 return Response.serverError().build();
112 public Response queryVimListDetails() {
113 ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
114 CloudRegionList cloudRegionList = new CloudRegionList();
116 String aaiVimList = cloudRegionProxy.qureyVimList();
117 cloudRegionList = new Gson().fromJson(aaiVimList, CloudRegionList.class);
118 vimRegisterInfos = getVimDetailList(cloudRegionList);
119 return Response.ok(vimRegisterInfos).build();
120 } catch (Exception error) {
121 error.printStackTrace();
122 LOG.error("Query vim list details failed !" + error.getMessage());
123 return Response.ok(vimRegisterInfos).build();
128 public Response queryVimById(String cloudOwner, String cloudRegionId) {
129 VimRegisterInfo vim = new VimRegisterInfo();
130 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
132 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
133 LOG.info("Response from AAI by query VIM: " + cloudRegionstr);
134 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
135 vim = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
136 return Response.ok(vim).build();
137 } catch (Exception e) {
139 return Response.ok(vim).build();
144 private ArrayList<VimRegisterInfo> getVimDetailList(CloudRegionList cloudRegionList) {
145 ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
146 VimRegisterInfo vimRegisterInfo = new VimRegisterInfo();
147 int cloudRegionNum = cloudRegionList.getCloudRegion().size();
148 for (int i = 0; i < cloudRegionNum; i++) {
149 String cloudOwner = cloudRegionList.getCloudRegion().get(i).getCloudOwner();
150 String cloudRegionId = cloudRegionList.getCloudRegion().get(i).getCloudRegionId();
151 vimRegisterInfo = getVimDetail(cloudOwner, cloudRegionId);
152 vimRegisterInfos.add(vimRegisterInfo);
154 return vimRegisterInfos;
157 private VimRegisterInfo getVimDetail(String cloudOwner, String cloudRegionId) {
158 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
159 VimRegisterInfo registeredVimInfo = new VimRegisterInfo();
161 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
162 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
163 registeredVimInfo = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
164 } catch (Exception error) {
165 error.printStackTrace();
166 LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
167 + cloudRegionId + error.getMessage());
169 return registeredVimInfo;
172 private CloudRegionDetail getOriginalCloudRegion(String cloudOwner, String cloudRegionId) {
173 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
175 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
176 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
177 return cloudRegionDetail;
178 } catch (Exception error) {
179 error.printStackTrace();
180 LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
181 + cloudRegionId + error.getMessage());
186 private CloudRegionDetail getVimUpdateInfo(VimRegisterInfo vimRegisterInfo) {
187 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
188 CloudRegionDetail originalCloudRegionDetail = new CloudRegionDetail();
189 EsrSystemInfo originalSystemInfo = new EsrSystemInfo();
190 String cloudOwner = vimRegisterInfo.getCloudOwner();
191 String cloudRegionId = vimRegisterInfo.getCloudRegionId();
192 originalCloudRegionDetail = getOriginalCloudRegion(cloudOwner, cloudRegionId);
193 String resourceVersion = originalCloudRegionDetail.getResourceVersion();
194 cloudRegionDetail = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
195 if(resourceVersion != null) {
196 cloudRegionDetail.setResourceVersion(resourceVersion);
197 originalSystemInfo = originalCloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0);
198 cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0).setEsrSystemInfoId(originalSystemInfo.getEsrSystemInfoId());
199 cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0).setResouceVersion(originalSystemInfo.getResouceVersion());
201 return cloudRegionDetail;
204 public Response delVim(String cloudOwner, String cloudRegionId) {
205 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
206 cloudRegionDetail = queryCloudRegionDetail(cloudOwner, cloudRegionId);
207 String resourceVersion = cloudRegionDetail.getResourceVersion();
208 if (resourceVersion != null) {
210 cloudRegionProxy.deleteVim(cloudOwner, cloudRegionId, resourceVersion);
211 return Response.noContent().build();
212 } catch (Exception e) {
215 "Delete cloud region from A&AI failed! cloud-owner = " + cloudOwner
216 + ", cloud-region-id = " + cloudRegionId + "resouce-version:" + resourceVersion,
218 return Response.serverError().build();
221 LOG.error("resouce-version is null ! Can not delete resouce from A&AI. ");
222 return Response.serverError().build();
226 private CloudRegionDetail queryCloudRegionDetail (String cloudOwner, String cloudRegionId) {
227 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
229 String cloudRegionStr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
230 LOG.info("Response from AAI by query cloud region: " + cloudRegionStr);
231 cloudRegionDetail = new Gson().fromJson(cloudRegionStr, CloudRegionDetail.class);
232 } catch (Exception e) {
234 LOG.error("Query EMS detail failed! cloud-owner = " + cloudOwner
235 + ", cloud-region-id = " + cloudRegionId , e.getMessage());
237 return cloudRegionDetail;