Fix the bug about nullpointer when update VIM
[aai/esr-server.git] / esr-mgr / src / main / java / org / onap / aai / esr / wrapper / VimManagerWrapper.java
index bc7e872..fe44536 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 ZTE Corporation.
+ * Copyright 2017-2018 ZTE Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +20,11 @@ import java.util.List;
 import javax.ws.rs.core.Response;
 import org.onap.aai.esr.entity.aai.CloudRegionDetail;
 import org.onap.aai.esr.entity.aai.CloudRegionList;
+import org.onap.aai.esr.entity.aai.Complex;
+import org.onap.aai.esr.entity.aai.ComplexList;
 import org.onap.aai.esr.entity.aai.EsrSystemInfo;
+import org.onap.aai.esr.entity.aai.Relationship;
+import org.onap.aai.esr.entity.aai.RelationshipData;
 import org.onap.aai.esr.entity.rest.VimRegisterInfo;
 import org.onap.aai.esr.entity.rest.VimRegisterResponse;
 import org.onap.aai.esr.exception.ExceptionUtil;
@@ -42,6 +46,8 @@ public class VimManagerWrapper {
     private static VimManagerUtil vimManagerUtil = new VimManagerUtil();
 
     private static CloudRegionProxy cloudRegionProxy = new CloudRegionProxy();
+    
+    private static VimManagerProxy vimManagerProxy = new VimManagerProxy();
 
     private static ExtsysUtil extsysUtil = new ExtsysUtil();
 
@@ -52,13 +58,14 @@ public class VimManagerWrapper {
      */
     public static VimManagerWrapper getInstance() {
         if (vimManagerWrapper == null) {
-            vimManagerWrapper = new VimManagerWrapper(cloudRegionProxy);
+            vimManagerWrapper = new VimManagerWrapper(cloudRegionProxy, vimManagerProxy);
         }
         return vimManagerWrapper;
     }
     
-    public VimManagerWrapper(CloudRegionProxy cloudRegionProxy) {
+    public VimManagerWrapper(CloudRegionProxy cloudRegionProxy, VimManagerProxy vimManagerProxy) {
         VimManagerWrapper.cloudRegionProxy = cloudRegionProxy;
+        VimManagerWrapper.vimManagerProxy = vimManagerProxy;
     }
 
     public Response registerVim(VimRegisterInfo vimRegisterInfo) {
@@ -67,17 +74,15 @@ public class VimManagerWrapper {
         CloudRegionDetail cloudRegion = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
         String cloudOwner = vimRegisterInfo.getCloudOwner();
         String cloudRegionId = vimRegisterInfo.getCloudRegionId();
+        String physicalLocationId = vimRegisterInfo.getPhysicalLocationId();
+        String complexName = getComplexName(physicalLocationId);
+        cloudRegion.setComplexName(complexName);
         try {
             cloudRegionProxy.registerVim(cloudOwner, cloudRegionId, cloudRegion);
             result.setCloudOwner(cloudOwner);
             result.setCloudRegionId(cloudRegionId);
-            Tenant tenant = new Tenant();
-            tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
-            try {
-                VimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
-            } catch (ExtsysException e) {
-                LOG.error("Update VIM by Multi-cloud failed !", e);
-            }
+            createRelationship(cloudOwner, cloudRegionId, physicalLocationId);
+            updateVimWithMultiCloud(cloudRegion, cloudOwner, cloudRegionId);
             return Response.ok(result).build();
         } catch (ExtsysException error) {
             LOG.error("Register VIM failed !", error);
@@ -85,6 +90,34 @@ public class VimManagerWrapper {
         }
     }
 
+    private void updateVimWithMultiCloud(CloudRegionDetail cloudRegion, String cloudOwner, String cloudRegionId) {
+        Tenant tenant = new Tenant();
+        tenant.setDefaultTenant(cloudRegion.getEsrSystemInfoList().getEsrSystemInfo().get(0).getDefaultTenant());
+        try {
+            vimManagerProxy.updateVim(cloudOwner, cloudRegionId, tenant);
+        } catch (ExtsysException e) {
+            LOG.error("Update VIM by Multi-cloud failed !", e);
+        }
+    }
+    
+    private void createRelationship(String cloudOwner, String cloudRegionId, String physicalLocationId) {
+        Relationship relationship = new Relationship();
+        RelationshipData relationshipData = new RelationshipData();
+        List<RelationshipData> relationshipDatas = new ArrayList<>();
+        String relatedLink = "/aai/v11/cloud-infrastructure/complexes/complex/" + physicalLocationId;
+        relationship.setRelatedTo("complex");
+        relationship.setRelatedLink(relatedLink);
+        relationshipData.setRelationshipKey("complex.physical-location-id");
+        relationshipData.setRelationshipValue(physicalLocationId);
+        relationshipDatas.add(relationshipData);
+        relationship.setRelationshipData(relationshipDatas);
+        try {
+            cloudRegionProxy.createCloudRegionRelationShip(cloudOwner, cloudRegionId, relationship);
+        } catch (ExtsysException e) {
+            LOG.error("Create relationship between cloudRegion and complex failed !", e);
+        }
+    }
+
     public Response updateVim(String cloudOwner, String cloudRegionId, VimRegisterInfo vimRegisterInfo) {
         LOG.info("Start update VIM, input VIM info is: " + extsysUtil.objectToString(vimRegisterInfo));
         VimRegisterResponse result = new VimRegisterResponse();
@@ -174,16 +207,20 @@ public class VimManagerWrapper {
     private CloudRegionDetail getVimUpdateInfo(VimRegisterInfo vimRegisterInfo) {
         String cloudOwner = vimRegisterInfo.getCloudOwner();
         String cloudRegionId = vimRegisterInfo.getCloudRegionId();
+        String resourceVersion = null;
+        CloudRegionDetail cloudRegionDetail = new CloudRegionDetail();
         CloudRegionDetail originalCloudRegionDetail = getOriginalCloudRegion(cloudOwner, cloudRegionId);
-        String resourceVersion = originalCloudRegionDetail.getResourceVersion();
-        CloudRegionDetail cloudRegionDetail = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
-        if (resourceVersion != null) {
-            cloudRegionDetail.setResourceVersion(resourceVersion);
-            EsrSystemInfo originalSystemInfo = originalCloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0);
-            cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
-                    .setEsrSystemInfoId(originalSystemInfo.getEsrSystemInfoId());
-            cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
-                    .setResouceVersion(originalSystemInfo.getResouceVersion());
+        if (originalCloudRegionDetail != null) {
+            resourceVersion = originalCloudRegionDetail.getResourceVersion();
+            cloudRegionDetail = vimManagerUtil.vimRegisterInfo2CloudRegion(vimRegisterInfo);
+            if (resourceVersion != null) {
+                cloudRegionDetail.setResourceVersion(resourceVersion);
+                EsrSystemInfo originalSystemInfo = originalCloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0);
+                cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
+                .setEsrSystemInfoId(originalSystemInfo.getEsrSystemInfoId());
+                cloudRegionDetail.getEsrSystemInfoList().getEsrSystemInfo().get(0)
+                .setResouceVersion(originalSystemInfo.getResouceVersion());
+            }
         }
         return cloudRegionDetail;
     }
@@ -214,4 +251,33 @@ public class VimManagerWrapper {
         }
         return cloudRegionDetail;
     }
+    
+    private String getComplexName(String physicalLocationId) {
+        Complex complex = new Complex();
+        try {
+            String complexStr = cloudRegionProxy.queryComplex(physicalLocationId);
+            LOG.info("The complexes query result is: " + complexStr);
+            complex = new Gson().fromJson(complexStr, Complex.class);
+            return complex.getComplexName();
+        } catch (ExtsysException e) {
+            LOG.error("Query complex by physical location Id failed !", e);
+            return null;
+        }
+    }
+
+    public Response queryComplexes() {
+        ComplexList complexList = new ComplexList();
+        List<String> physicalLocationIdList = new ArrayList<>();
+        try {
+            String complexesString = cloudRegionProxy.qureyComplexes();
+            LOG.info("The complexes query result is: " + complexesString);
+            complexList = new Gson().fromJson(complexesString, ComplexList.class);
+            for (int i=0; i<complexList.getComplex().size(); i++) {
+                physicalLocationIdList.add(complexList.getComplex().get(i).getPhysicalLocationId());
+            }
+        } catch (ExtsysException e) {
+            LOG.error("Query complexes failed !", e);
+        }
+        return Response.ok(physicalLocationIdList).build();
+    }
 }