2  * ============LICENSE_START=======================================================
\r 
   4  * ================================================================================
\r 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r 
   6  * ================================================================================
\r 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
\r 
   8  * you may not use this file except in compliance with the License.
\r 
   9  * You may obtain a copy of the License at
\r 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
\r 
  13  * Unless required by applicable law or agreed to in writing, software
\r 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
\r 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r 
  16  * See the License for the specific language governing permissions and
\r 
  17  * limitations under the License.
\r 
  18  * ============LICENSE_END=========================================================
\r 
  21 package org.openecomp.mso.apihandlerinfra.tenantisolation.process;
\r 
  23 import java.io.IOException;
\r 
  24 import java.util.List;
\r 
  26 import org.json.JSONObject;
\r 
  27 import org.openecomp.mso.apihandlerinfra.MsoPropertiesUtils;
\r 
  28 import org.openecomp.mso.apihandlerinfra.tenantisolation.CloudOrchestrationRequest;
\r 
  29 import org.openecomp.mso.apihandlerinfra.tenantisolation.exceptions.AsdcClientCallFailed;
\r 
  30 import org.openecomp.mso.apihandlerinfra.tenantisolation.exceptions.TenantIsolationException;
\r 
  31 import org.openecomp.mso.apihandlerinfra.tenantisolation.helpers.AsdcClientHelper;
\r 
  32 import org.openecomp.mso.apihandlerinfra.tenantisolationbeans.ServiceModelList;
\r 
  33 import org.openecomp.mso.client.aai.entities.AAIResultWrapper;
\r 
  34 import org.openecomp.mso.client.aai.objects.AAIOperationalEnvironment;
\r 
  35 import org.openecomp.mso.logger.MsoLogger;
\r 
  36 import org.openecomp.mso.properties.MsoJavaProperties;
\r 
  37 import org.openecomp.mso.requestsdb.OperationalEnvDistributionStatus;
\r 
  38 import org.openecomp.mso.requestsdb.OperationalEnvDistributionStatusDb;
\r 
  39 import org.openecomp.mso.requestsdb.OperationalEnvServiceModelStatus;
\r 
  40 import org.openecomp.mso.requestsdb.OperationalEnvServiceModelStatusDb;
\r 
  41 import org.openecomp.mso.requestsdb.RequestsDBHelper;
\r 
  43 import com.fasterxml.jackson.core.JsonParseException;
\r 
  44 import com.fasterxml.jackson.databind.JsonMappingException;
\r 
  47 public class ActivateVnfOperationalEnvironment extends OperationalEnvironmentProcess {
\r 
  49         private static final String SERVICE_NAME = "ActivateVnfOperationalEnvironment"; 
\r 
  50         private AsdcClientHelper asdcClientHelper = null;
\r 
  52         private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH);
\r 
  53         private String className = this.getClass().getSimpleName();
\r 
  54         private String methodName = "";
\r 
  55         private String classMethodMessage = "";
\r 
  56         private String errorMessage = "";
\r 
  58         private String operationalEnvironmentId = "";
\r 
  59         private int DEFAULT_ACTIVATE_RETRY_COUNT = 3;
\r 
  60         private boolean successIndicator = false;
\r 
  62         MsoJavaProperties properties; 
\r 
  63         OperationalEnvDistributionStatusDb activateDistributionDb = null;
\r 
  64         OperationalEnvDistributionStatus queryDistributionDbResponse = null;
\r 
  65         OperationalEnvServiceModelStatusDb activateServiceModelDb = null; 
\r 
  66         OperationalEnvServiceModelStatus queryServiceModelResponse = null;
\r 
  69          * The class constructor with loadProperties()  
\r 
  70          * @param CloudOrchestrationRequest - object   
\r 
  71          * @param requestId - string      
\r 
  73         public ActivateVnfOperationalEnvironment(CloudOrchestrationRequest request, String requestId) {
\r 
  74                 super(request, requestId);
\r 
  75                 MsoLogger.setServiceName (getRequestId());
\r 
  76         MsoLogger.setLogContext(getRequestId(), getRequest().getOperationalEnvironmentId());            
\r 
  77                 this.properties = MsoPropertiesUtils.loadMsoProperties();
\r 
  78                 asdcClientHelper = new AsdcClientHelper(properties);
\r 
  82         protected String getServiceName() {
\r 
  83                 return ActivateVnfOperationalEnvironment.SERVICE_NAME;
\r 
  87          * The Point-Of-Entry from APIH with VID request to send activate request
\r 
  88          * @return void - nothing 
\r 
  91         public void execute() {
\r 
  93                 methodName = "execute() method. ";
\r 
  94                 classMethodMessage = className + " " + methodName;
\r 
  95                 msoLogger.debug("Begin of " + classMethodMessage);              
\r 
  97                 activateDistributionDb = getOperationalEnvDistributionStatusDb();               
\r 
  98                 activateServiceModelDb = getOperationalEnvServiceModelStatusDb();
\r 
 102                         msoLogger.debug("Start of extracting variables from Input.");
\r 
 103                         msoLogger.debug("  requestId: " + requestId);
\r 
 104                         msoLogger.debug("  cloudOrchestrationRequest: " + request.toString());
\r 
 105                         String operationalEnvironmentId = request.getOperationalEnvironmentId();
\r 
 106                         this.operationalEnvironmentId = operationalEnvironmentId;
\r 
 107                         msoLogger.debug("  operationalEnvironmentId: " + this.operationalEnvironmentId);                        
\r 
 108                         String vidWorkloadContext = request.getRequestDetails().getRequestParameters().getWorkloadContext();
\r 
 109                         List<ServiceModelList> serviceModelVersionIdList = request.getRequestDetails().getRequestParameters().getManifest().getServiceModelList();
\r 
 110                         msoLogger.debug("  serviceModelVersionIdList size(): " + serviceModelVersionIdList.size());                     
\r 
 111                     msoLogger.debug("End of extracting variables from Input.");
\r 
 113                         msoLogger.debug("Start of getting AAIOperationalEnvironment Object.");
\r 
 114                         AAIOperationalEnvironment operationalEnv = getAAIOperationalEnvironment(operationalEnvironmentId);
\r 
 115                         String workloadContext = operationalEnv.getWorkloadContext();
\r 
 116                         msoLogger.debug("  aai workloadContext: " + workloadContext);
\r 
 117                         if (vidWorkloadContext.equals(workloadContext)) {
\r 
 118                                 msoLogger.debug("  vid workloadContext matched with aai record, continue!");
\r 
 120                                 errorMessage = " The vid workloadContext did not match from aai record. " + " vid workloadContext:" + vidWorkloadContext + " aai workloadContext:" + workloadContext;
\r 
 121                                 msoLogger.debug(errorMessage);
\r 
 122                                 throw new TenantIsolationException(errorMessage);
\r 
 124                         msoLogger.debug("End of getting AAIOperationalEnvironment Object.");                                    
\r 
 126                         msoLogger.debug("Start of sending activation request to ASDC.");
\r 
 127                         processActivateASDCRequest(requestId, operationalEnvironmentId, serviceModelVersionIdList, workloadContext);
\r 
 128                         msoLogger.debug("End of sending activation request to ASDC.");
\r 
 130                         msoLogger.debug("** OVERALL status of flow: Processed ALL " + serviceModelVersionIdList.size() + " activation requests are SUCCESSFUL!");
\r 
 131                         successIndicator = true;
\r 
 132                         msoLogger.debug("End of " + classMethodMessage);                        
\r 
 134                 } catch (Exception ex) {
\r 
 135                         errorMessage = "** OVERALL status of flow: " + methodName + ex.getMessage();
\r 
 136                         msoLogger.debug(errorMessage);
\r 
 137                         getRequestDb().updateInfraFailureCompletion(errorMessage, requestId, operationalEnvironmentId);
\r 
 145          * The Method to send the Activation Requests to ASDC
\r 
 146          * @param requestId - string
\r 
 147          * @param operationalEnvironmentId - string   
\r 
 148          * @param List<ServiceModelList> serviceModelVersionIdList - list
\r 
 149          * @param workloadContext - string        
\r 
 150          * @return void - nothing 
\r 
 152         public void processActivateASDCRequest(String requestId, String operationalEnvironmentId, 
\r 
 153                                                                             List<ServiceModelList> serviceModelVersionIdList, String workloadContext) throws TenantIsolationException, AsdcClientCallFailed {
\r 
 155                 int retryCount = 0;
\r 
 156                 String retryCountString = properties.getProperty("mso.tenant.isolation.retry.count", null);
\r 
 158                         retryCount = Integer.parseInt(retryCountString);
\r 
 159                         msoLogger.debug(" ** Used Properties File retryCount: " + retryCount);                          
\r 
 160                 } catch (NumberFormatException e) {
\r 
 161                         retryCount = DEFAULT_ACTIVATE_RETRY_COUNT;
\r 
 162                         msoLogger.debug(" ** Used Default retryCount: " + retryCount + " Exception: " + e.getMessage());                        
\r 
 165                 msoLogger.debug(" ** serviceModelVersionIdList: " + serviceModelVersionIdList.size());
\r 
 167                 // loop through the serviceModelVersionId, and send request ASDC
\r 
 168                 for(ServiceModelList serviceModelList : serviceModelVersionIdList){
\r 
 169                         String serviceModelVersionId = serviceModelList.getServiceModelVersionId();
\r 
 170                         String recoveryAction = serviceModelList.getRecoveryAction().toString().toUpperCase();
\r 
 171                         msoLogger.debug(" ** serviceModelVersionId: " + serviceModelVersionId + "; recoveryAction: " + recoveryAction);
\r 
 172                         // should insert 1 row
\r 
 173                         activateServiceModelDb.insertOperationalEnvServiceModelStatus(requestId, operationalEnvironmentId, serviceModelVersionId, "SENT", recoveryAction, retryCount, workloadContext);  
\r 
 175                         JSONObject jsonResponse = null;
\r 
 176                         String distributionId = "";
\r 
 178                                 jsonResponse = asdcClientHelper.postActivateOperationalEnvironment(serviceModelVersionId, operationalEnvironmentId, workloadContext);
\r 
 179                                 msoLogger.debug("  JSONObject jsonResponse:" + jsonResponse.toString());        
\r 
 180                                 String statusCode = jsonResponse.get("statusCode").toString();
\r 
 181                                 if (statusCode.equals("202")) {
\r 
 182                                         distributionId = jsonResponse.get("distributionId").toString();
\r 
 184                                         // should insert 1 row
\r 
 185                                         activateDistributionDb.insertOperationalEnvDistributionStatus(distributionId, operationalEnvironmentId, serviceModelVersionId, "SENT", requestId);
\r 
 188                                         errorMessage = " Failure calling ASDC: statusCode: " + statusCode + 
\r 
 189                                                                                      "; messageId: " + jsonResponse.get("messageId") +
\r 
 190                                                                                      "; message: " + jsonResponse.get("message"); 
\r 
 191                                         msoLogger.debug(errorMessage);
\r 
 192                                         throw new AsdcClientCallFailed(errorMessage);
\r 
 196                         } catch (Exception ex) {
\r 
 197                                 errorMessage = " Encountered Exception in " + methodName + " Exception: " + ex.getMessage();
\r 
 198                                 msoLogger.debug(errorMessage);
\r 
 199                                 throw new TenantIsolationException(errorMessage);                               
\r 
 207          * Get AAIOperationalEnvironment object
\r 
 208          * @param  String operationalEnvironmentId
\r 
 209          * @return object AAIOperationalEnvironment
\r 
 211         public AAIOperationalEnvironment getAAIOperationalEnvironment(String operationalEnvironmentId) {
\r 
 213                 AAIOperationalEnvironment operationalEnv = null;
\r 
 217                         AAIResultWrapper aaiResult = aaiHelper.getAaiOperationalEnvironment(operationalEnvironmentId);
\r 
 218                         operationalEnv = aaiResult.asBean(AAIOperationalEnvironment.class).get();
\r 
 219                 } catch (JsonParseException e) {
\r 
 220                         msoLogger.debug(" **** JsonParseException: " + e.getMessage());
\r 
 221                         e.printStackTrace();
\r 
 222                 } catch (JsonMappingException e) {
\r 
 223                         msoLogger.debug(" **** JsonMappingException: " + e.getMessage());
\r 
 224                         e.printStackTrace();
\r 
 225                 } catch (IOException e) {
\r 
 226                         msoLogger.debug(" **** IOException: " + e.getMessage());
\r 
 227                         e.printStackTrace();
\r 
 228                 } catch (Exception e) {
\r 
 229                         msoLogger.debug(" **** Exception: " + e.getMessage());
\r 
 230                         e.printStackTrace();
\r 
 233                 return operationalEnv;
\r 
 239          * Overall Success indicator 
\r 
 240          * @return true or false
\r 
 242         public boolean isSuccess() {
\r 
 243                 return successIndicator;
\r 
 247          * Set to new OperationalEnvDistributionStatusDb 
\r 
 250         public void setOperationalEnvDistributionStatusDb (OperationalEnvDistributionStatusDb activateDistributionDb) {
\r 
 251                 this.activateDistributionDb = activateDistributionDb;
\r 
 255          * Set to new OperationalEnvServiceModelStatusDb 
\r 
 258         public void setOperationalEnvServiceModelStatusDb (OperationalEnvServiceModelStatusDb activateServiceModelDb) {
\r 
 259                 this.activateServiceModelDb = activateServiceModelDb;
\r 
 263          * Set to new AsdcClientHelper 
\r 
 266         public void setAsdcClientHelper (AsdcClientHelper asdcClientHelper) {
\r 
 267                 this.asdcClientHelper = asdcClientHelper;
\r 
 271          * get OperationalEnvDistributionStatusDb instance 
\r 
 273         public OperationalEnvDistributionStatusDb getOperationalEnvDistributionStatusDb() {
\r 
 274                 if(this.activateDistributionDb == null) {
\r 
 275                         this.activateDistributionDb = OperationalEnvDistributionStatusDb.getInstance();
\r 
 277                 return this.activateDistributionDb;
\r 
 281          * get OperationalEnvServiceModelStatusDb instance 
\r 
 283         public OperationalEnvServiceModelStatusDb getOperationalEnvServiceModelStatusDb() {
\r 
 284                 if(this.activateServiceModelDb == null) {
\r 
 285                         this.activateServiceModelDb = OperationalEnvServiceModelStatusDb.getInstance();
\r 
 287                 return this.activateServiceModelDb;
\r