Change the static method in VIM.
[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.inject.Inject;
21 import javax.ws.rs.core.Response;
22
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;
35
36 import com.google.gson.Gson;
37
38
39 public class VimManagerWrapper {
40
41   private static VimManagerWrapper vimManagerWrapper;
42   private static final Logger LOG = LoggerFactory.getLogger(VimManagerWrapper.class);
43   
44   @Inject
45   private VimManagerUtil vimManagerUtil;
46   
47   @Inject
48   private CloudRegionProxy cloudRegionProxy;
49   
50   @Inject
51   private ExtsysUtil extsysUtil;
52
53   /**
54    * get VimManagerWrapper instance.
55    * 
56    * @return vim manager wrapper instance
57    */
58   public static VimManagerWrapper getInstance() {
59     if (vimManagerWrapper == null) {
60       vimManagerWrapper = new VimManagerWrapper();
61     }
62     return vimManagerWrapper;
63
64   }
65
66   public Response registerVim(VimRegisterInfo vimRegisterInfo) {
67     LOG.info(
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();
74     try {
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());
80       try {
81         VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
82       } catch (Exception e) {
83         e.printStackTrace();
84         LOG.error("Update VIM by Multi-cloud failed !" + e.getMessage());
85       }
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();
91     }
92   }
93
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();
98
99     cloudRegionDetail = getVimUpdateInfo(vimRegisterInfo);
100     try {
101         cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegionDetail);
102       result.setCloudOwner(cloudOwner);
103       result.setCloudRegionId(cloudRegionId);
104       return Response.ok(result).build();
105     } catch (Exception e) {
106       e.printStackTrace();
107       LOG.error("Update VIM failed !" + e.getMessage());
108       return Response.serverError().build();
109     }
110   }
111
112   public Response queryVimListDetails() {
113     ArrayList<VimRegisterInfo> vimRegisterInfos = new ArrayList<VimRegisterInfo>();
114     CloudRegionList cloudRegionList = new CloudRegionList();
115     try {
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();
124     }
125
126   }
127
128   public Response queryVimById(String cloudOwner, String cloudRegionId) {
129     VimRegisterInfo vim = new VimRegisterInfo();
130     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
131     try {
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) {
138       e.printStackTrace();
139       return Response.ok(vim).build();
140     }
141
142   }
143
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);
153     }
154     return vimRegisterInfos;
155   }
156
157   private VimRegisterInfo getVimDetail(String cloudOwner, String cloudRegionId) {
158     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
159     VimRegisterInfo registeredVimInfo = new VimRegisterInfo();
160     try {
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());
168     }
169     return registeredVimInfo;
170   }
171
172   private CloudRegionDetail getOriginalCloudRegion(String cloudOwner, String cloudRegionId) {
173     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
174     try {
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());
182       return null;
183     }
184   }
185   
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());
200     }
201     return cloudRegionDetail;
202   }
203
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) {
209       try {
210         cloudRegionProxy.deleteVim(cloudOwner, cloudRegionId, resourceVersion);
211         return Response.noContent().build();
212       } catch (Exception e) {
213         e.printStackTrace();
214         LOG.error(
215             "Delete cloud region from A&AI failed! cloud-owner = " + cloudOwner
216                 + ", cloud-region-id = " + cloudRegionId + "resouce-version:" + resourceVersion,
217             e.getMessage());
218         return Response.serverError().build();
219       }
220     } else {
221       LOG.error("resouce-version is null ! Can not delete resouce from A&AI. ");
222       return Response.serverError().build();
223     }
224   }
225   
226   private CloudRegionDetail queryCloudRegionDetail (String cloudOwner, String cloudRegionId) {
227     CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
228     try {
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) {
233       e.printStackTrace();
234       LOG.error("Query EMS detail failed! cloud-owner = " + cloudOwner
235                 + ", cloud-region-id = " + cloudRegionId , e.getMessage());
236     }
237     return cloudRegionDetail;
238   }
239 }