Update get operation status part
[vfc/nfvo/driver/vnfm/svnfm.git] / nokia / vnfmdriver / vfcadaptorservice / vfcadaptor / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / adaptor / TerminateVnfContinueRunnable.java
index ba7663d..0e6493c 100644 (file)
 
 package org.onap.vfc.nfvo.driver.vnfm.svnfm.adaptor;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.http.client.ClientProtocolException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfRequest;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfResponse;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum.LifecycleOperation;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.repository.VnfmJobExecutionRepository;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfRequest;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfResponse;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmNotifyLCMEventsRequest;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AddResource;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AffectedVnfc;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.ResourceDefinition;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
-
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class TerminateVnfContinueRunnable implements Runnable {
-       private static final Logger logger = LogManager.getLogger("TerminateVnfContinueRunnable");
+       private static final Logger logger = LoggerFactory.getLogger(TerminateVnfContinueRunnable.class);
 
        private CbamMgmrInf cbamMgmr;
        private NslcmMgmrInf nslcmMgmr;
@@ -48,11 +48,12 @@ public class TerminateVnfContinueRunnable implements Runnable {
        private TerminateVnfRequest driverRequest;
        private String vnfInstanceId;
        private String jobId;
-       private VnfmJobExecutionRepository jobDbManager;
+       private String vnfmId;
+       private VnfmJobExecutionRepository jobDbMgmr;
        
        private Driver2CbamRequestConverter requestConverter;
        
-       public TerminateVnfContinueRunnable(TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
+       public TerminateVnfContinueRunnable(String vnfmId, TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
                        NslcmMgmrInf nslcmMgmr, CbamMgmrInf cbamMgmr, Driver2CbamRequestConverter requestConverter, VnfmJobExecutionRepository dbManager)
        {
                this.driverRequest = driverRequest;
@@ -61,36 +62,93 @@ public class TerminateVnfContinueRunnable implements Runnable {
                this.cbamMgmr = cbamMgmr;
                this.requestConverter = requestConverter;
                this.jobId = jobId;
-               this.jobDbManager = dbManager;
+               this.jobDbMgmr = dbManager;
+               this.vnfmId = vnfmId;
        }
        
-       public void run() {
+       private void handleGrant(){
                try {
                        NslcmGrantVnfRequest grantRequest = buildNslcmGrantVnfRequest();
-                       NslcmGrantVnfResponse grantResponse = nslcmMgmr.grantVnf(grantRequest);
-                       handleNslcmGrantResponse(grantResponse);
-                       
-                       CBAMTerminateVnfRequest cbamRequest = requestConverter.terminateReqConvert(driverRequest);
-                       CBAMTerminateVnfResponse cbamResponse = cbamMgmr.terminateVnf(cbamRequest, vnfInstanceId);
-                       
+                       nslcmMgmr.grantVnf(grantRequest);
+               } catch (Exception e) {
+                       logger.error("TerminateVnfContinueRunnable --> handleGrant error.", e);
+               }
+       }
+       
+       public void run() {
+               handleGrant();
+               handleTerminate();
+               handleDelete();
+       }
+       
+       private void handleDelete() {
+               try {
+                       boolean vnfAllowDelete = false;
+                       int i = 0;
+                       while(!vnfAllowDelete) {
+                               CBAMQueryVnfResponse queryResponse = cbamMgmr.queryVnf(vnfInstanceId);
+                               if(CommonEnum.InstantiationState.NOT_INSTANTIATED == queryResponse.getInstantiationState())
+                               {
+                                       vnfAllowDelete = true;
+                                       break;
+                               }
+                               i++;
+                               logger.info(i + ": The vnf's current status is " + queryResponse.getInstantiationState().name() + " is not ready for deleting, please wait ... ");
+                               Thread.sleep(30000);
+                       }
+                       prepareDelete(jobId);
                        cbamMgmr.deleteVnf(vnfInstanceId);
-                       
-                       NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest(cbamResponse);
-                       nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfInstanceId);
-                       
-               } catch (ClientProtocolException e) {
-                       logger.error("TerminateVnfContinueRunnable run error ClientProtocolException", e);
-               } catch (IOException e) {
-                       logger.error("TerminateVnfContinueRunnable run error IOException", e);
+               } catch (Exception e) {
+                       logger.error("TerminateVnfContinueRunnable --> handleDelete error.", e);
+               }
+       }
+       
+       private void prepareDelete(String jobId) {
+               OperateTaskProgress.stopTerminateTimerTask();
+               
+               VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
+               jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
+               jobDbMgmr.save(jobInfo);
+               
+               try {
+                       NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest();
+                       nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
+               } catch (Exception e) {
+                       logger.error("TerminateVnfContinueRunnable --> handleNotify error.", e);
+               }
+       }
+
+       private CBAMTerminateVnfResponse handleTerminate() {
+               CBAMTerminateVnfResponse cbamResponse = null;
+               try {
+                       CBAMTerminateVnfRequest  modifyReq = requestConverter.terminateReqConvert(driverRequest);
+                       cbamResponse = cbamMgmr.terminateVnf(modifyReq, vnfInstanceId);
+                       handleCbamTerminateResponse(cbamResponse, jobId);
+               } catch (Exception e) {
+                       logger.error("TerminateVnfContinueRunnable --> handleTerminate error.", e);
                }
                
+               return cbamResponse;
+       }
+
+       private void handleCbamTerminateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
+               VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
+               
+               jobInfo.setVnfmExecutionId(cbamResponse.getId());
+               if(CommonEnum.OperationStatus.FAILED == cbamResponse.getStatus()) {
+                       jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
+               }
+               else {
+                       jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
+               }
+               jobDbMgmr.save(jobInfo);
        }
        
        private NslcmGrantVnfRequest buildNslcmGrantVnfRequest() {
                NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
                
                request.setVnfInstanceId(vnfInstanceId);
-               request.setLifecycleOperation(LifecycleOperation.Instantiate);
+               request.setLifecycleOperation(LifecycleOperation.Terminal);
                request.setJobId(jobId);
                
                ResourceDefinition resource = getFreeVnfResource();
@@ -102,35 +160,46 @@ public class TerminateVnfContinueRunnable implements Runnable {
        }
        
        private ResourceDefinition getFreeVnfResource() {
-               // TODO Auto-generated method stub
-               return null;
+               ResourceDefinition def = new ResourceDefinition();
+               def.setVnfInstanceId(vnfInstanceId);
+               def.setVimId("001");
+               List<AddResource> resources = new ArrayList<>();
+               AddResource res = new AddResource();
+               res.setVdu("1");
+               res.setType("vdu");
+               res.setResourceDefinitionId(2);
+               resources.add(res);
+               def.setAddResource(resources);
+               return def;
        }
 
-       private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest(CBAMTerminateVnfResponse cbamResponse) {
+       private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest() {
                NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
-               if(CommonEnum.OperationStatus.STARTED == cbamResponse.getStatus())
-               {
-                       request.setStatus(CommonEnum.status.start);
-               }
-               else
-               {
-                       request.setStatus(CommonEnum.status.result);
-                       
-                       //TODO the following are for the result
-//                     request.setAffectedVnfc(affectedVnfc);
-//                     request.setAffectedVI(affectedVI);
-//                     request.setAffectedVirtualStorage(affectedVirtualStorage);
-               }
+               request.setStatus(CommonEnum.status.result);
                
+               List<AffectedVnfc> vnfcs = modifyResourceTypeAsRemove(OperateTaskProgress.getAffectedVnfc());
+               
+               request.setAffectedVnfc(vnfcs);
                request.setVnfInstanceId(vnfInstanceId);
                request.setOperation(CommonConstants.NSLCM_OPERATION_TERMINATE);
                request.setJobId(jobId);
                return request;
        }
 
+       private List<AffectedVnfc> modifyResourceTypeAsRemove(List<AffectedVnfc> affectedVnfc) {
+               List<AffectedVnfc> vnfcs = affectedVnfc;
+               if(vnfcs != null && !vnfcs.isEmpty()) {
+                       for(AffectedVnfc vnfc : vnfcs)
+                       {
+                               vnfc.setChangeType(CommonEnum.AffectchangeType.removed);
+                       }
+               }
+               
+               return vnfcs;
+       }
+
        private void handleNslcmGrantResponse(NslcmGrantVnfResponse grantResponse) {
                // TODO Auto-generated method stub
                
        }
-
 }