Update VIM after register finishied.
[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.externalservice.aai.CloudRegionProxy;
28 import org.onap.aai.esr.externalservice.cloud.Tenant;
29 import org.onap.aai.esr.externalservice.cloud.VimManagerProxy;
30 import org.onap.aai.esr.util.ExtsysUtil;
31 import org.onap.aai.esr.util.VimManagerUtil;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 import com.google.gson.Gson;
36
37
38 public class VimManagerWrapper {
39
40   private static VimManagerWrapper vimManagerWrapper;
41   private static final Logger LOG = LoggerFactory.getLogger(VimManagerWrapper.class);
42   private static VimManagerUtil vimManagerUtil = new VimManagerUtil();
43
44   /**
45    * get VimManagerWrapper instance.
46    * 
47    * @return vim manager wrapper instance
48    */
49   public static VimManagerWrapper getInstance() {
50     if (vimManagerWrapper == null) {
51       vimManagerWrapper = new VimManagerWrapper();
52     }
53     return vimManagerWrapper;
54
55   }
56
57   public Response registerVim(VimRegisterInfo vimRegisterInfo) {
58     LOG.info(
59         "Start register VIM, input VIM info is: " + ExtsysUtil.objectToString(vimRegisterInfo));
60     CloudRegionDetail cloudRegion = new CloudRegionDetail();
61     VimRegisterResponse result = new VimRegisterResponse();
62     cloudRegion = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
63     String cloudOwner = vimRegisterInfo.getCloudOwner();
64     String cloudRegionId = vimRegisterInfo.getCloudRegionId();
65     try {
66       CloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegion);
67       result.setCloudOwner(cloudOwner);
68       result.setCloudRegionId(cloudRegionId);
69       Tenant tenant = new Tenant();
70       tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
71       try {
72         VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
73       } catch (Exception e) {
74         e.printStackTrace();
75         LOG.error("Update VIM by Multi-cloud failed !" + e.getMessage());
76       }
77       return Response.ok(result).build();
78     } catch (Exception error) {
79       error.printStackTrace();
80       LOG.error("Register VIM failed !" + error.getMessage());
81       return Response.serverError().build();
82     }
83   }
84
85   public Response updateVim(String cloudOwner, String cloudRegionId,VimRegisterInfo vimRegisterInfo) {
86     LOG.info("Start update VIM, input VIM info is: " + ExtsysUtil.objectToString(vimRegisterInfo));
87     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
88     VimRegisterResponse result = new VimRegisterResponse();
89
90     cloudRegionDetail = getVimUpdateInfo(vimRegisterInfo);
91     try {
92       CloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegionDetail);
93       result.setCloudOwner(cloudOwner);
94       result.setCloudRegionId(cloudRegionId);
95       return Response.ok(result).build();
96     } catch (Exception e) {
97       e.printStackTrace();
98       LOG.error("Update VIM failed !" + e.getMessage());
99       return Response.serverError().build();
100     }
101   }
102
103   public Response queryVimListDetails() {
104     ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
105     CloudRegionList cloudRegionList = new CloudRegionList();
106     try {
107       String aaiVimList = CloudRegionProxy.qureyVimList();
108       cloudRegionList = new Gson().fromJson(aaiVimList, CloudRegionList.class);
109       vimRegisterInfos = getVimDetailList(cloudRegionList);
110       return Response.ok(vimRegisterInfos).build();
111     } catch (Exception error) {
112       error.printStackTrace();
113       LOG.error("Query vim list details failed !" + error.getMessage());
114       return Response.ok(vimRegisterInfos).build();
115     }
116
117   }
118
119   public Response queryVimById(String cloudOwner, String cloudRegionId) {
120     VimRegisterInfo vim = new VimRegisterInfo();
121     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
122     try {
123       String cloudRegionstr = CloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
124       LOG.info("Response from AAI by query VIM: " + cloudRegionstr);
125       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
126       vim = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
127       return Response.ok(vim).build();
128     } catch (Exception e) {
129       e.printStackTrace();
130       return Response.ok(vim).build();
131     }
132
133   }
134
135   private ArrayList<VimRegisterInfo> getVimDetailList(CloudRegionList cloudRegionList) {
136     ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
137     VimRegisterInfo vimRegisterInfo = new VimRegisterInfo();
138     int cloudRegionNum = cloudRegionList.getCloudRegion().size();
139     for (int i = 0; i < cloudRegionNum; i++) {
140       String cloudOwner = cloudRegionList.getCloudRegion().get(i).getCloudOwner();
141       String cloudRegionId = cloudRegionList.getCloudRegion().get(i).getCloudRegionId();
142       vimRegisterInfo = getVimDetail(cloudOwner, cloudRegionId);
143       vimRegisterInfos.add(vimRegisterInfo);
144     }
145     return vimRegisterInfos;
146   }
147
148   private VimRegisterInfo getVimDetail(String cloudOwner, String cloudRegionId) {
149     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
150     VimRegisterInfo registeredVimInfo = new VimRegisterInfo();
151     try {
152       String cloudRegionstr = CloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
153       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
154       registeredVimInfo = vimManagerUtil.cloudRegion2VimRegisterInfo(cloudRegionDetail);
155     } catch (Exception error) {
156       error.printStackTrace();
157       LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
158           + cloudRegionId + error.getMessage());
159     }
160     return registeredVimInfo;
161   }
162
163   private CloudRegionDetail getOriginalCloudRegion(String cloudOwner, String cloudRegionId) {
164     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
165     try {
166       String cloudRegionstr = CloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
167       cloudRegionDetail = new Gson().fromJson(cloudRegionstr, CloudRegionDetail.class);
168       return cloudRegionDetail;
169     } catch (Exception error) {
170       error.printStackTrace();
171       LOG.error("query VIM detail failed ! cloud-owner = " + cloudOwner + ", cloud-region-id = "
172           + cloudRegionId + error.getMessage());
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     if (resourceVersion != null) {
200       try {
201         CloudRegionProxy.deleteVim(cloudOwner, cloudRegionId, resourceVersion);
202         return Response.noContent().build();
203       } catch (Exception e) {
204         e.printStackTrace();
205         LOG.error(
206             "Delete cloud region from A&AI failed! cloud-owner = " + cloudOwner
207                 + ", cloud-region-id = " + cloudRegionId + "resouce-version:" + resourceVersion,
208             e.getMessage());
209         return Response.serverError().build();
210       }
211     } else {
212       LOG.error("resouce-version is null ! Can not delete resouce from A&AI. ");
213       return Response.serverError().build();
214     }
215   }
216   
217   private CloudRegionDetail queryCloudRegionDetail (String cloudOwner, String cloudRegionId) {
218     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
219     try {
220       String cloudRegionStr = CloudRegionProxy.queryVimDetail(cloudOwner, cloudRegionId);
221       LOG.info("Response from AAI by query cloud region: " + cloudRegionStr);
222       cloudRegionDetail = new Gson().fromJson(cloudRegionStr, CloudRegionDetail.class);
223     } catch (Exception e) {
224       e.printStackTrace();
225       LOG.error("Query EMS detail failed! cloud-owner = " + cloudOwner
226                 + ", cloud-region-id = " + cloudRegionId , e.getMessage());
227     }
228     return cloudRegionDetail;
229   }
230 }