AT&T 1712 and 1802 release code
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / openecomp / mso / apihandlerinfra / tenantisolation / process / ActivateVnfOperationalEnvironment.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP - SO\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
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \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
19  */\r
20 \r
21 package org.openecomp.mso.apihandlerinfra.tenantisolation.process;\r
22 \r
23 import java.io.IOException;\r
24 import java.util.List;\r
25 \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
42 \r
43 import com.fasterxml.jackson.core.JsonParseException;\r
44 import com.fasterxml.jackson.databind.JsonMappingException;\r
45 \r
46 \r
47 public class ActivateVnfOperationalEnvironment extends OperationalEnvironmentProcess {\r
48 \r
49         private static final String SERVICE_NAME = "ActivateVnfOperationalEnvironment"; \r
50         private AsdcClientHelper asdcClientHelper = null;\r
51         \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
57         \r
58         private String operationalEnvironmentId = "";\r
59         private int DEFAULT_ACTIVATE_RETRY_COUNT = 3;\r
60         private boolean successIndicator = false;\r
61         \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
67         \r
68         /**\r
69          * The class constructor with loadProperties()  \r
70          * @param CloudOrchestrationRequest - object   \r
71          * @param requestId - string      \r
72          */             \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
79         }\r
80         \r
81         @Override\r
82         protected String getServiceName() {\r
83                 return ActivateVnfOperationalEnvironment.SERVICE_NAME;\r
84         }       \r
85         \r
86         /**\r
87          * The Point-Of-Entry from APIH with VID request to send activate request\r
88          * @return void - nothing \r
89          */             \r
90         @Override\r
91         public void execute() {\r
92         \r
93                 methodName = "execute() method. ";\r
94                 classMethodMessage = className + " " + methodName;\r
95                 msoLogger.debug("Begin of " + classMethodMessage);              \r
96 \r
97                 activateDistributionDb = getOperationalEnvDistributionStatusDb();               \r
98                 activateServiceModelDb = getOperationalEnvServiceModelStatusDb();\r
99 \r
100                 try {\r
101 \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
112                         \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
119                         } else {\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
123                         }\r
124                         msoLogger.debug("End of getting AAIOperationalEnvironment Object.");                                    \r
125 \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
129                         \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
133                         \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
138 \r
139                 }       \r
140                 \r
141         }       \r
142         \r
143         \r
144         /**\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
151          */             \r
152         public void processActivateASDCRequest(String requestId, String operationalEnvironmentId, \r
153                                                                             List<ServiceModelList> serviceModelVersionIdList, String workloadContext) throws TenantIsolationException, AsdcClientCallFailed {\r
154                 \r
155                 int retryCount = 0;\r
156                 String retryCountString = properties.getProperty("mso.tenant.isolation.retry.count", null);\r
157                 try {\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
163                 }                       \r
164 \r
165                 msoLogger.debug(" ** serviceModelVersionIdList: " + serviceModelVersionIdList.size());\r
166                 \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
174                         \r
175                         JSONObject jsonResponse = null;\r
176                         String distributionId = "";\r
177                         try {\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
183                                         \r
184                                         // should insert 1 row\r
185                                         activateDistributionDb.insertOperationalEnvDistributionStatus(distributionId, operationalEnvironmentId, serviceModelVersionId, "SENT", requestId);\r
186                                         \r
187                                 } else {                                        \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
193                                         \r
194                                 } \r
195 \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
200                         }\r
201                         \r
202                 }\r
203                         \r
204         }\r
205 \r
206         /**\r
207          * Get AAIOperationalEnvironment object\r
208          * @param  String operationalEnvironmentId\r
209          * @return object AAIOperationalEnvironment\r
210          */\r
211         public AAIOperationalEnvironment getAAIOperationalEnvironment(String operationalEnvironmentId) {\r
212                 \r
213                 AAIOperationalEnvironment operationalEnv = null;\r
214                 getAaiHelper();         \r
215                 \r
216                 try {\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
231                 }\r
232                 \r
233                 return operationalEnv;\r
234                 \r
235         }\r
236         \r
237         \r
238         /**\r
239          * Overall Success indicator \r
240          * @return true or false\r
241          */     \r
242         public boolean isSuccess() {\r
243                 return successIndicator;\r
244         }\r
245         \r
246         /**\r
247          * Set to new OperationalEnvDistributionStatusDb \r
248          * @return void\r
249          */     \r
250         public void setOperationalEnvDistributionStatusDb (OperationalEnvDistributionStatusDb activateDistributionDb) {\r
251                 this.activateDistributionDb = activateDistributionDb;\r
252         }\r
253         \r
254         /**\r
255          * Set to new OperationalEnvServiceModelStatusDb \r
256          * @return void\r
257          */     \r
258         public void setOperationalEnvServiceModelStatusDb (OperationalEnvServiceModelStatusDb activateServiceModelDb) {\r
259                 this.activateServiceModelDb = activateServiceModelDb;\r
260         }\r
261         \r
262         /**\r
263          * Set to new AsdcClientHelper \r
264          * @return void\r
265          */     \r
266         public void setAsdcClientHelper (AsdcClientHelper asdcClientHelper) {\r
267                 this.asdcClientHelper = asdcClientHelper;\r
268         }       \r
269 \r
270         /**\r
271          * get OperationalEnvDistributionStatusDb instance \r
272          */     \r
273         public OperationalEnvDistributionStatusDb getOperationalEnvDistributionStatusDb() {\r
274                 if(this.activateDistributionDb == null) {\r
275                         this.activateDistributionDb = OperationalEnvDistributionStatusDb.getInstance();\r
276                 }\r
277                 return this.activateDistributionDb;\r
278         }       \r
279         \r
280         /**\r
281          * get OperationalEnvServiceModelStatusDb instance \r
282          */     \r
283         public OperationalEnvServiceModelStatusDb getOperationalEnvServiceModelStatusDb() {\r
284                 if(this.activateServiceModelDb == null) {\r
285                         this.activateServiceModelDb = OperationalEnvServiceModelStatusDb.getInstance();\r
286                 }\r
287                 return this.activateServiceModelDb;\r
288         }               \r
289         \r
290 }\r