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;
19 import java.util.List;
20 import javax.ws.rs.core.Response;
21 import org.onap.aai.esr.entity.aai.CloudRegionDetail;
22 import org.onap.aai.esr.entity.aai.CloudRegionList;
23 import org.onap.aai.esr.entity.aai.EsrSystemInfo;
24 import org.onap.aai.esr.entity.rest.VimRegisterInfo;
25 import org.onap.aai.esr.entity.rest.VimRegisterResponse;
26 import org.onap.aai.esr.exception.ExceptionUtil;
27 import org.onap.aai.esr.exception.ExtsysException;
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;
35 import com.google.gson.Gson;
37 public class VimManagerWrapper {
39 private static VimManagerWrapper vimManagerWrapper;
40 private static final Logger LOG = LoggerFactory.getLogger(VimManagerWrapper.class);
42 private static VimManagerUtil vimManagerUtil = new VimManagerUtil();
44 private static CloudRegionProxy cloudRegionProxy = new CloudRegionProxy();
46 private static ExtsysUtil extsysUtil = new ExtsysUtil();
49 * get VimManagerWrapper instance.
51 * @return vim manager wrapper instance
53 public static VimManagerWrapper getInstance() {
54 if (vimManagerWrapper == null) {
55 vimManagerWrapper = new VimManagerWrapper();
57 return vimManagerWrapper;
61 public Response registerVim(VimRegisterInfo vimRegisterInfo) {
62 LOG.info("Start register VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
63 VimRegisterResponse result = new VimRegisterResponse();
64 CloudRegionDetail cloudRegion = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
65 String cloudOwner = vimRegisterInfo.getCloudOwner();
66 String cloudRegionId = vimRegisterInfo.getCloudRegionId();
68 cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegion);
69 result.setCloudOwner(cloudOwner);
70 result.setCloudRegionId(cloudRegionId);
71 Tenant tenant = new Tenant();
72 tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
74 VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
75 } catch (ExtsysException e) {
76 LOG.error("Update VIM by Multi-cloud failed !", e);
78 return Response.ok(result).build();
79 } catch (ExtsysException error) {
80 LOG.error("Register VIM failed !", error);
81 throw ExceptionUtil.buildExceptionResponse(error.getMessage());
85 public Response updateVim(String cloudOwner, String cloudRegionId, VimRegisterInfo vimRegisterInfo) {
86 LOG.info("Start update VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
87 VimRegisterResponse result = new VimRegisterResponse();
89 CloudRegionDetail cloudRegionDetail = getVimUpdateInfo(vimRegisterInfo);
91 cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegionDetail);
92 result.setCloudOwner(cloudOwner);
93 result.setCloudRegionId(cloudRegionId);
94 return Response.ok(result).build();
95 } catch (ExtsysException e) {
96 LOG.error("Update VIM failed !", e);
97 throw ExceptionUtil.buildExceptionResponse(e.getMessage());
101 public Response queryVimListDetails() {
102 List<VimRegisterInfo> vimRegisterInfos = new ArrayList<>();
103 CloudRegionList cloudRegionList = new CloudRegionList();
105 String aaiVimList = cloudRegionProxy.qureyVimList();
106 cloudRegionList = new Gson().fromJson(aaiVimList, CloudRegionList.class);
107 vimRegisterInfos = getVimDetailList(cloudRegionList);
108 return Response.ok(vimRegisterInfos).build();
109 } catch (ExtsysException error) {
110 LOG.error("Query vim list details failed !", error);
111 return Response.ok(vimRegisterInfos).build();
116 public Response queryVimById(String cloudOwner, String cloudRegionId) {
117 VimRegisterInfo vim = new VimRegisterInfo();
118 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
120 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
121 LOG.info("Response from AAI by query VIM: " + cloudRegionstr);
122 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
123 vim = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
124 return Response.ok(vim).build();
125 } catch (ExtsysException e) {
126 LOG.error("Query vim details by ID failed !", e);
127 return Response.ok(vim).build();
132 private List<VimRegisterInfo> getVimDetailList(CloudRegionList cloudRegionList) {
133 List<VimRegisterInfo> vimRegisterInfos = new ArrayList<>();
134 int cloudRegionNum = cloudRegionList.getCloudRegion().size();
135 for (int i = 0; i < cloudRegionNum; i++) {
136 String cloudOwner = cloudRegionList.getCloudRegion().get(i).getCloudOwner();
137 String cloudRegionId = cloudRegionList.getCloudRegion().get(i).getCloudRegionId();
138 VimRegisterInfo vimRegisterInfo = getVimDetail(cloudOwner, cloudRegionId);
139 vimRegisterInfos.add(vimRegisterInfo);
141 return vimRegisterInfos;
144 private VimRegisterInfo getVimDetail(String cloudOwner, String cloudRegionId) {
145 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
146 VimRegisterInfo registeredVimInfo = new VimRegisterInfo();
148 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
149 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
150 registeredVimInfo = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
151 } catch (ExtsysException error) {
152 LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = " + cloudRegionId,
155 return registeredVimInfo;
158 private CloudRegionDetail getOriginalCloudRegion(String cloudOwner, String cloudRegionId) {
159 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
161 String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
162 cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
163 return cloudRegionDetail;
164 } catch (ExtsysException error) {
165 LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = " + cloudRegionId,
171 private CloudRegionDetail getVimUpdateInfo(VimRegisterInfo vimRegisterInfo) {
172 String cloudOwner = vimRegisterInfo.getCloudOwner();
173 String cloudRegionId = vimRegisterInfo.getCloudRegionId();
174 CloudRegionDetail originalCloudRegionDetail = getOriginalCloudRegion(cloudOwner, cloudRegionId);
175 String resourceVersion = originalCloudRegionDetail.getResourceVersion();
176 CloudRegionDetail cloudRegionDetail = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
177 if (resourceVersion != null) {
178 cloudRegionDetail.setResourceVersion(resourceVersion);
179 EsrSystemInfo originalSystemInfo = originalCloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0);
180 cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
181 .setEsrSystemInfoId(originalSystemInfo.getEsrSystemInfoId());
182 cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
183 .setResouceVersion(originalSystemInfo.getResouceVersion());
185 return cloudRegionDetail;
188 public Response delVim(String cloudOwner, String cloudRegionId) {
189 CloudRegionDetail cloudRegionDetail = queryCloudRegionDetail(cloudOwner, cloudRegionId);
190 String resourceVersion = cloudRegionDetail.getResourceVersion();
192 cloudRegionProxy.deleteVim(cloudOwner, cloudRegionId, resourceVersion);
193 return Response.noContent().build();
194 } catch (ExtsysException e) {
195 LOG.error("Delete cloud region from A&AI failed! cloud-owner = " + cloudOwner + ", cloud-region-id = "
196 + cloudRegionId + "resouce-version:" + resourceVersion, e);
197 throw ExceptionUtil.buildExceptionResponse(e.getMessage());
201 private CloudRegionDetail queryCloudRegionDetail(String cloudOwner, String cloudRegionId) {
202 CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
204 String cloudRegionStr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
205 LOG.info("Response from AAI by query cloud region: " + cloudRegionStr);
206 cloudRegionDetail = new Gson().fromJson(cloudRegionStr, CloudRegionDetail.class);
207 } catch (ExtsysException e) {
208 LOG.error("Query EMS detail failed! cloud-owner = " + cloudOwner + ", cloud-region-id = " + cloudRegionId,
210 throw ExceptionUtil.buildExceptionResponse(e.getMessage());
212 return cloudRegionDetail;