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