Merge "Reorder modifiers"
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / openecomp / mso / client / adapter / requests / db / MsoRequestsDbAdapterClient.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.client.adapter.requests.db;\r
22 \r
23 import java.sql.Timestamp;\r
24 \r
25 import org.hibernate.HibernateException;\r
26 import org.hibernate.Query;\r
27 import org.hibernate.Session;\r
28 import org.openecomp.mso.client.adapter.requests.db.entities.MsoRequestsDbException;\r
29 import org.openecomp.mso.client.adapter.requests.db.entities.RequestStatusType;\r
30 import org.openecomp.mso.client.adapter.requests.db.entities.UpdateInfraRequest;\r
31 import org.openecomp.mso.db.AbstractSessionFactoryManager;\r
32 import org.openecomp.mso.logger.MessageEnum;\r
33 import org.openecomp.mso.logger.MsoLogger;\r
34 import org.openecomp.mso.requestsdb.InfraActiveRequests;\r
35 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;\r
36 import org.openecomp.mso.requestsdb.SiteStatus;\r
37 import org.openecomp.mso.utils.UUIDChecker;\r
38 \r
39 public class MsoRequestsDbAdapterClient implements MsoRequestsDbAdapter {\r
40 \r
41         protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();\r
42 \r
43         private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA);\r
44 \r
45         @Override\r
46         public void updateInfraRequest(UpdateInfraRequest request) throws MsoRequestsDbException {\r
47                 Session session = requestsDbSessionFactoryManager.getSessionFactory().openSession();\r
48                 int result = 0;\r
49                 long startTime = System.currentTimeMillis();\r
50                 if (request.getRequestId() != null && request.getLastModifiedBy() != null) {\r
51                         MsoLogger.setLogContext(request.getRequestId(), null);\r
52                         try {\r
53                                 session.beginTransaction();\r
54                                 StringBuilder queryString = new StringBuilder("update InfraActiveRequests set ");\r
55                                 String statusMessage = null;\r
56                                 String responseBody = null;\r
57                                 RequestStatusType requestStatus = null;\r
58                                 String progress = null;\r
59                                 String vnfOutputs = null;\r
60                                 String serviceInstanceId = null;\r
61                                 String networkId = null;\r
62                                 String vnfId = null;\r
63                                 String vfModuleId = null;\r
64                                 String volumeGroupId = null;\r
65                                 String serviceInstanceName = null;\r
66                                 String vfModuleName = null;\r
67                                 String configurationId = null;\r
68                                 String configurationName = null;\r
69                                 if (request.getStatusMessage() != null) {\r
70                                         queryString.append("statusMessage = :statusMessage, ");\r
71                                         statusMessage = request.getStatusMessage();\r
72                                 }\r
73                                 if (request.getResponseBody() != null) {\r
74                                         queryString.append("responseBody = :responseBody, ");\r
75                                         responseBody = request.getResponseBody();\r
76                                 }\r
77                                 if (request.getRequestStatus() != null) {\r
78                                         queryString.append("requestStatus = :requestStatus, ");\r
79                                         requestStatus = request.getRequestStatus();\r
80                                 }\r
81                                 if (request.getProgress() != null) {\r
82                                         queryString.append("progress = :progress, ");\r
83                                         progress = request.getProgress();\r
84                                 }\r
85                                 if (request.getVnfOutputs() != null) {\r
86                                         queryString.append("vnfOutputs = :vnfOutputs, ");\r
87                                         vnfOutputs = request.getVnfOutputs();\r
88                                 }\r
89                                 if (request.getServiceInstanceId() != null) {\r
90                                         queryString.append("serviceInstanceId = :serviceInstanceId, ");\r
91                                         serviceInstanceId = request.getServiceInstanceId();\r
92                                 }\r
93                                 if (request.getNetworkId() != null) {\r
94                                         queryString.append("networkId = :networkId, ");\r
95                                         networkId = request.getNetworkId();\r
96                                 }\r
97                                 if (request.getVnfId() != null) {\r
98                                         queryString.append("vnfId = :vnfId, ");\r
99                                         vnfId = request.getVnfId();\r
100                                 }\r
101                                 if (request.getVfModuleId() != null) {\r
102                                         queryString.append("vfModuleId = :vfModuleId, ");\r
103                                         vfModuleId = request.getVfModuleId();\r
104                                 }\r
105                                 if (request.getVolumeGroupId() != null) {\r
106                                         queryString.append("volumeGroupId = :volumeGroupId, ");\r
107                                         volumeGroupId = request.getVolumeGroupId();\r
108                                 }\r
109                                 if (request.getServiceInstanceName() != null) {\r
110                                         queryString.append("serviceInstanceName = :serviceInstanceName, ");\r
111                                         serviceInstanceName = request.getServiceInstanceName();\r
112                                 }\r
113                                 if (request.getVfModuleName() != null) {\r
114                                         queryString.append("vfModuleName = :vfModuleName, ");\r
115                                         vfModuleName = request.getVfModuleName();\r
116                                 }\r
117                                 if (request.getConfigurationId() != null) {\r
118                                         queryString.append("configurationId = :configurationId, ");\r
119                                         configurationId = request.getConfigurationId();\r
120                                 }\r
121                                 if (request.getConfigurationName() != null) {\r
122                                         queryString.append("configurationName = :configurationName, ");\r
123                                         configurationName = request.getConfigurationName();\r
124                                 }\r
125                                 if (request.getRequestStatus() == RequestStatusType.COMPLETE\r
126                                                 || request.getRequestStatus() == RequestStatusType.FAILED) {\r
127                                         queryString.append("endTime = :endTime, ");\r
128                                 } else {\r
129                                         queryString.append("modifyTime = :modifyTime, ");\r
130                                 }\r
131                                 queryString.append("lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId");\r
132 \r
133                                 LOGGER.debug("Executing update: " + queryString.toString());\r
134 \r
135                                 Query query = session.createQuery(queryString.toString());\r
136                                 query.setParameter("requestId", request.getRequestId());\r
137                                 if (statusMessage != null) {\r
138                                         query.setParameter("statusMessage", statusMessage);\r
139                                         LOGGER.debug("StatusMessage in updateInfraRequest is set to: " + statusMessage);\r
140                                 }\r
141                                 if (responseBody != null) {\r
142                                         query.setParameter("responseBody", responseBody);\r
143                                         LOGGER.debug("ResponseBody in updateInfraRequest is set to: " + responseBody);\r
144                                 }\r
145                                 if (requestStatus != null) {\r
146                                         query.setParameter("requestStatus", requestStatus.toString());\r
147                                         LOGGER.debug("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());\r
148                                 }\r
149 \r
150                                 if (progress != null) {\r
151                                         query.setParameter("progress", Long.parseLong(progress));\r
152                                         LOGGER.debug("Progress in updateInfraRequest is set to: " + progress);\r
153                                 }\r
154                                 if (vnfOutputs != null) {\r
155                                         query.setParameter("vnfOutputs", vnfOutputs);\r
156                                         LOGGER.debug("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);\r
157                                 }\r
158                                 if (serviceInstanceId != null) {\r
159                                         query.setParameter("serviceInstanceId", serviceInstanceId);\r
160                                         LOGGER.debug("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);\r
161                                 }\r
162                                 if (networkId != null) {\r
163                                         query.setParameter("networkId", networkId);\r
164                                         LOGGER.debug("NetworkId in updateInfraRequest is set to: " + networkId);\r
165                                 }\r
166                                 if (vnfId != null) {\r
167                                         query.setParameter("vnfId", vnfId);\r
168                                         LOGGER.debug("VnfId in updateInfraRequest is set to: " + vnfId);\r
169                                 }\r
170                                 if (vfModuleId != null) {\r
171                                         query.setParameter("vfModuleId", vfModuleId);\r
172                                         LOGGER.debug("vfModuleId in updateInfraRequest is set to: " + vfModuleId);\r
173                                 }\r
174                                 if (volumeGroupId != null) {\r
175                                         query.setParameter("volumeGroupId", volumeGroupId);\r
176                                         LOGGER.debug("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);\r
177                                 }\r
178                                 if (serviceInstanceName != null) {\r
179                                         query.setParameter("serviceInstanceName", serviceInstanceName);\r
180                                         LOGGER.debug("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);\r
181                                 }\r
182                                 if (configurationId != null) {\r
183                                         query.setParameter("configurationId", configurationId);\r
184                                         LOGGER.debug("configurationId in updateInfraRequest is set to: " + configurationId);\r
185                                 }\r
186                                 if (configurationName != null) {\r
187                                         query.setParameter("configurationName", configurationName);\r
188                                         LOGGER.debug("configurationName in updateInfraRequest is set to: " + configurationName);\r
189                                 }\r
190                                 if (vfModuleName != null) {\r
191                                         query.setParameter("vfModuleName", vfModuleName);\r
192                                         LOGGER.debug("vfModuleName in updateInfraRequest is set to: " + vfModuleName);\r
193                                 }\r
194                                 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());\r
195                                 if (request.getRequestStatus() == RequestStatusType.COMPLETE\r
196                                                 || request.getRequestStatus() == RequestStatusType.FAILED) {\r
197                                         query.setParameter("endTime", nowTimeStamp);\r
198                                         LOGGER.debug("EndTime in updateInfraRequest is set to: " + nowTimeStamp);\r
199                                 } else {\r
200                                         query.setParameter("modifyTime", nowTimeStamp);\r
201                                         LOGGER.debug("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);\r
202                                 }\r
203                                 query.setParameter("lastModifiedBy", request.getLastModifiedBy());\r
204                                 LOGGER.debug("LastModifiedBy in updateInfraRequest is set to: " + request.getLastModifiedBy());\r
205                                 result = query.executeUpdate();\r
206                                 checkIfExists(result, request.getRequestId(), startTime);\r
207                                 session.getTransaction().commit();\r
208                         } catch (HibernateException e) {\r
209                                 String error = "Unable to update MSO Requests DB: " + e.getMessage();\r
210                                 LOGGER.error(MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", request.getRequestId(), "",\r
211                                                 "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);\r
212                                 LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
213                                                 error);\r
214                                 throw new MsoRequestsDbException(error, e);\r
215                         } finally {\r
216                                 if (session != null && session.isOpen()) {\r
217                                         session.close();\r
218                                 }\r
219                         }\r
220                         LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");\r
221                 } else {\r
222                         LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.BadRequest,\r
223                                         "Required fields: requestId and lastModifiedBy");\r
224                 }\r
225         }\r
226 \r
227         private void checkIfExists(int result, String requestId, long startTime) throws MsoRequestsDbException {\r
228                 if (result == 0) {\r
229                         String error = "Request ID does not exist in MSO Requests DB: " + requestId;\r
230                         LOGGER.error(MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);\r
231                         throw new MsoRequestsDbException(error);\r
232                 }\r
233         }\r
234 \r
235         @Override\r
236         public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {\r
237                 long startTime = System.currentTimeMillis();\r
238                 MsoLogger.setLogContext(requestId, null);\r
239                 Session session = requestsDbSessionFactoryManager.getSessionFactory().openSession();\r
240 \r
241                 LOGGER.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);\r
242 \r
243                 InfraActiveRequests request = null;\r
244                 try {\r
245                         session.beginTransaction();\r
246                         Query query = session.createQuery(\r
247                                         "FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");\r
248                         query.setParameter("requestId", requestId);\r
249                         request = (InfraActiveRequests) query.uniqueResult();\r
250                 } catch (HibernateException e) {\r
251                         String error = "Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;\r
252                         LOGGER.error(MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "",\r
253                                         MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);\r
254                         LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);\r
255                         throw new MsoRequestsDbException(error, e);\r
256                 } finally {\r
257                         if (session != null && session.isOpen()) {\r
258                                 session.close();\r
259                         }\r
260                 }\r
261                 LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");\r
262                 return request;\r
263         }\r
264 \r
265         /**\r
266          * Get SiteStatus by SiteName.\r
267          *\r
268          * @param siteName\r
269          *            The unique name of the site\r
270          * @return Status of that site\r
271          */\r
272         public boolean getSiteStatus(String siteName) {\r
273                 UUIDChecker.generateUUID(LOGGER);\r
274                 Session session = requestsDbSessionFactoryManager.getSessionFactory().openSession();\r
275 \r
276                 long startTime = System.currentTimeMillis();\r
277                 SiteStatus siteStatus = null;\r
278                 LOGGER.debug("Request database - get Site Status with Site name:" + siteName);\r
279                 try {\r
280                         String hql = "FROM SiteStatus WHERE siteName = :site_name";\r
281                         Query query = session.createQuery(hql);\r
282                         query.setParameter("site_name", siteName);\r
283 \r
284                         siteStatus = (SiteStatus) query.uniqueResult();\r
285                 } finally {\r
286                         if (session != null && session.isOpen()) {\r
287                                 session.close();\r
288                         }\r
289                 }\r
290                 if (siteStatus == null) {\r
291                         // if not exist in DB, it means the site is not disabled, thus\r
292                         // return true\r
293                         LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");\r
294                         return true;\r
295                 } else {\r
296                         LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");\r
297                         return siteStatus.getStatus();\r
298                 }\r
299         }\r
300 }\r