6c4c5af6784528b8f134486923cd3d8a7b16e3cc
[aai/esr-server.git] / esr-mgr / src / main / java / org / onap / aai / esr / wrapper / VimManagerWrapper.java
1 /**
2  * Copyright 2017 ZTE Corporation.
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 package org.onap.aai.esr.wrapper;
17
18 import java.util.ArrayList;
19
20 import javax.ws.rs.core.Response;
21
22 import org.onap.aai.esr.entity.aai.CloudRegionDetail;
23 import org.onap.aai.esr.entity.aai.CloudRegionList;
24 import org.onap.aai.esr.entity.aai.EsrSystemInfo;
25 import org.onap.aai.esr.entity.rest.VimRegisterInfo;
26 import org.onap.aai.esr.entity.rest.VimRegisterResponse;
27 import org.onap.aai.esr.exception.ExceptionUtil;
28 import org.onap.aai.esr.exception.ExtsysException;
29 import org.onap.aai.esr.externalservice.aai.CloudRegionProxy;
30 import org.onap.aai.esr.externalservice.cloud.Tenant;
31 import org.onap.aai.esr.externalservice.cloud.VimManagerProxy;
32 import org.onap.aai.esr.util.ExtsysUtil;
33 import org.onap.aai.esr.util.VimManagerUtil;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 import com.google.gson.Gson;
38
39 public class VimManagerWrapper {
40
41   private static VimManagerWrapper vimManagerWrapper;
42   private static final Logger LOG = LoggerFactory.getLogger(VimManagerWrapper.class);
43   
44   private static VimManagerUtil vimManagerUtil = new VimManagerUtil();
45   
46   private static CloudRegionProxy cloudRegionProxy = new CloudRegionProxy();
47   
48   private static ExtsysUtil extsysUtil = new ExtsysUtil();
49
50   /**
51    * get VimManagerWrapper instance.
52    * 
53    * @return vim manager wrapper instance
54    */
55   public static VimManagerWrapper getInstance() {
56     if (vimManagerWrapper == null) {
57       vimManagerWrapper = new VimManagerWrapper();
58     }
59     return vimManagerWrapper;
60
61   }
62
63   public Response registerVim(VimRegisterInfo vimRegisterInfo) {
64     LOG.info(
65         "Start register VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
66     CloudRegionDetail cloudRegion = new CloudRegionDetail();
67     VimRegisterResponse result = new VimRegisterResponse();
68     cloudRegion = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
69     String cloudOwner = vimRegisterInfo.getCloudOwner();
70     String cloudRegionId = vimRegisterInfo.getCloudRegionId();
71     try {
72       cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegion);
73       result.setCloudOwner(cloudOwner);
74       result.setCloudRegionId(cloudRegionId);
75       Tenant tenant = new Tenant();
76       tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
77       try {
78         VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
79       } catch (ExtsysException e) {
80         LOG.error("Update VIM by Multi-cloud failed !", e);
81       }
82       return Response.ok(result).build();
83     } catch (ExtsysException error) {
84       LOG.error("Register VIM failed !", error);
85       throw ExceptionUtil.buildExceptionResponse(error.getMessage());
86     }
87   }
88
89   public Response updateVim(String cloudOwner, String cloudRegionId,VimRegisterInfo vimRegisterInfo) {
90     LOG.info("Start update VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
91     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
92     VimRegisterResponse result = new VimRegisterResponse();
93
94     cloudRegionDetail = getVimUpdateInfo(vimRegisterInfo);
95     try {
96         cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegionDetail);
97       result.setCloudOwner(cloudOwner);
98       result.setCloudRegionId(cloudRegionId);
99       return Response.ok(result).build();
100     } catch (ExtsysException e) {
101       LOG.error("Update VIM failed !", e);
102       throw ExceptionUtil.buildExceptionResponse(e.getMessage());
103     }
104   }
105
106   public Response queryVimListDetails() {
107     ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
108     CloudRegionList cloudRegionList = new CloudRegionList();
109     try {
110       String aaiVimList = cloudRegionProxy.qureyVimList();
111       cloudRegionList = new Gson().fromJson(aaiVimList, CloudRegionList.class);
112       vimRegisterInfos = getVimDetailList(cloudRegionList);
113       return Response.ok(vimRegisterInfos).build();
114     } catch (ExtsysException error) {
115       LOG.error("Query vim list details failed !", error);
116       return Response.ok(vimRegisterInfos).build();
117     }
118
119   }
120
121   public Response queryVimById(String cloudOwner, String cloudRegionId) {
122     VimRegisterInfo vim = new VimRegisterInfo();
123     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
124     try {
125       String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
126       LOG.info("Response from AAI by query VIM: " + cloudRegionstr);
127       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
128       vim = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
129       return Response.ok(vim).build();
130     } catch (ExtsysException e) {
131       LOG.error("Query vim details by ID failed !", e);
132       return Response.ok(vim).build();
133     }
134
135   }
136
137   private ArrayList<VimRegisterInfo> getVimDetailList(CloudRegionList cloudRegionList) {
138     ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
139     VimRegisterInfo vimRegisterInfo = new VimRegisterInfo();
140     int cloudRegionNum = cloudRegionList.getCloudRegion().size();
141     for (int i = 0; i < cloudRegionNum; i++) {
142       String cloudOwner = cloudRegionList.getCloudRegion().get(i).getCloudOwner();
143       String cloudRegionId = cloudRegionList.getCloudRegion().get(i).getCloudRegionId();
144       vimRegisterInfo = getVimDetail(cloudOwner, cloudRegionId);
145       vimRegisterInfos.add(vimRegisterInfo);
146     }
147     return vimRegisterInfos;
148   }
149
150   private VimRegisterInfo getVimDetail(String cloudOwner, String cloudRegionId) {
151     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
152     VimRegisterInfo registeredVimInfo = new VimRegisterInfo();
153     try {
154       String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
155       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
156       registeredVimInfo = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
157     } catch (ExtsysException error) {
158       LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
159           + cloudRegionId, error);
160     }
161     return registeredVimInfo;
162   }
163
164   private CloudRegionDetail getOriginalCloudRegion(String cloudOwner, String cloudRegionId) {
165     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
166     try {
167       String cloudRegionstr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
168       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
169       return cloudRegionDetail;
170     } catch (ExtsysException error) {
171       LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
172           + cloudRegionId, error);
173       return null;
174     }
175   }
176   
177   private CloudRegionDetail getVimUpdateInfo(VimRegisterInfo vimRegisterInfo) {
178     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
179     CloudRegionDetail originalCloudRegionDetail = new CloudRegionDetail();
180     EsrSystemInfo originalSystemInfo = new EsrSystemInfo();
181     String cloudOwner = vimRegisterInfo.getCloudOwner();
182     String cloudRegionId = vimRegisterInfo.getCloudRegionId();
183     originalCloudRegionDetail = getOriginalCloudRegion(cloudOwner, cloudRegionId);
184     String resourceVersion = originalCloudRegionDetail.getResourceVersion();
185     cloudRegionDetail = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
186     if(resourceVersion != null) {
187       cloudRegionDetail.setResourceVersion(resourceVersion);
188       originalSystemInfo = originalCloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0);
189       cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0).setEsrSystemInfoId(originalSystemInfo.getEsrSystemInfoId());
190       cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0).setResouceVersion(originalSystemInfo.getResouceVersion());
191     }
192     return cloudRegionDetail;
193   }
194
195   public Response delVim(String cloudOwner, String cloudRegionId) {
196     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
197     cloudRegionDetail = queryCloudRegionDetail(cloudOwner, cloudRegionId);
198     String resourceVersion = cloudRegionDetail.getResourceVersion();
199     try {
200       cloudRegionProxy.deleteVim(cloudOwner, cloudRegionId, resourceVersion);
201       return Response.noContent().build();
202     } catch (ExtsysException e) {
203       LOG.error("Delete cloud region from A&AI failed! cloud-owner = " + cloudOwner
204           + ", cloud-region-id = " + cloudRegionId + "resouce-version:" + resourceVersion, e);
205       throw ExceptionUtil.buildExceptionResponse(e.getMessage());
206     }
207   }
208
209   private CloudRegionDetail queryCloudRegionDetail (String cloudOwner, String cloudRegionId) {
210     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
211     try {
212       String cloudRegionStr = cloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
213       LOG.info("Response from AAI by query cloud region: " + cloudRegionStr);
214       cloudRegionDetail = new Gson().fromJson(cloudRegionStr, CloudRegionDetail.class);
215     } catch (ExtsysException e) {
216       LOG.error("Query EMS detail failed! cloud-owner = " + cloudOwner
217                 + ", cloud-region-id = " + cloudRegionId , e);
218       throw ExceptionUtil.buildExceptionResponse(e.getMessage());
219     }
220     return cloudRegionDetail;
221   }
222 }