Merge "Reorder modifiers"
[so.git] / adapters / mso-requests-db-adapter / src / main / java / org / openecomp / mso / adapters / requestsdb / MsoRequestsDbAdapterImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.mso.adapters.requestsdb;
22
23 import java.sql.Timestamp;
24
25 import javax.jws.WebService;
26
27 import org.hibernate.HibernateException;
28 import org.hibernate.Query;
29 import org.hibernate.Session;
30 import org.openecomp.mso.adapters.requestsdb.exceptions.MsoRequestsDbException;
31 import org.openecomp.mso.db.AbstractSessionFactoryManager;
32 import org.openecomp.mso.logger.MessageEnum;
33 import org.openecomp.mso.logger.MsoLogger;
34 import org.openecomp.mso.requestsdb.InfraActiveRequests;
35 import org.openecomp.mso.requestsdb.OperationStatus;
36 import org.openecomp.mso.requestsdb.RequestsDatabase;
37 import org.openecomp.mso.requestsdb.RequestsDbConstant;
38 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
39 import org.openecomp.mso.requestsdb.ResourceOperationStatus;
40 import org.openecomp.mso.requestsdb.SiteStatus;
41 import org.openecomp.mso.utils.UUIDChecker;
42
43 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.openecomp.mso.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.openecomp.mso/requestsdb")
44 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
45
46     protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
47     
48     private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
49
50     @Override
51     public void updateInfraRequest (String requestId,
52                                     String lastModifiedBy,
53                                     String statusMessage,
54                                     String responseBody,
55                                     RequestStatusType requestStatus,
56                                     String progress,
57                                     String vnfOutputs,
58                                     String serviceInstanceId,
59                                     String networkId,
60                                     String vnfId,
61                                     String vfModuleId,
62                                     String volumeGroupId,
63                                     String serviceInstanceName,
64                                     String configurationId,
65                                     String configurationName,
66                                     String vfModuleName) throws MsoRequestsDbException {
67         MsoLogger.setLogContext (requestId, null);
68         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
69         int result = 0;
70         long startTime = System.currentTimeMillis ();
71         try {
72                 session.beginTransaction ();
73             StringBuilder queryString = new StringBuilder("update InfraActiveRequests set ");
74             if (statusMessage != null) {
75                 queryString.append("statusMessage = :statusMessage, ");
76             }
77             if (responseBody != null) {
78                 queryString.append("responseBody = :responseBody, ");
79             }
80             if (requestStatus != null) {
81                 queryString.append("requestStatus = :requestStatus, ");
82             }
83             if (progress != null) {
84                 queryString.append("progress = :progress, ");
85             }
86             if (vnfOutputs != null) {
87                 queryString.append("vnfOutputs = :vnfOutputs, ");
88             }
89             if (serviceInstanceId != null) {
90                 queryString.append("serviceInstanceId = :serviceInstanceId, ");
91             }
92             if (networkId != null) {
93                 queryString.append("networkId = :networkId, ");
94             }
95             if (vnfId != null) {
96                 queryString.append("vnfId = :vnfId, ");
97             }
98             if (vfModuleId != null) {
99                 queryString.append("vfModuleId = :vfModuleId, ");
100             }
101             if (volumeGroupId != null) {
102                 queryString.append("volumeGroupId = :volumeGroupId, ");
103             }
104             if (serviceInstanceName != null) {
105                 queryString.append("serviceInstanceName = :serviceInstanceName, ");
106             }
107             if (vfModuleName != null) {
108                 queryString.append("vfModuleName = :vfModuleName, ");
109             }
110             if (configurationId != null) {
111                 queryString.append("configurationId = :configurationId, ");
112             }
113             if (configurationName != null) {
114                 queryString.append("configurationName = :configurationName, ");
115             }
116             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
117                 queryString.append("endTime = :endTime, ");
118             } else {
119                 queryString.append("modifyTime = :modifyTime, ");
120             }
121             queryString.append("lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId");
122
123             logger.debug("Executing update: " + queryString.toString());
124
125             Query query = session.createQuery (queryString.toString());
126             query.setParameter ("requestId", requestId);
127             if (statusMessage != null) {
128                 query.setParameter ("statusMessage", statusMessage);
129                 logger.debug ("StatusMessage in updateInfraRequest is set to: " + statusMessage);
130             }
131             if (responseBody != null) {
132                 query.setParameter ("responseBody", responseBody);
133                 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
134             }
135             if (requestStatus != null) {
136                 query.setParameter ("requestStatus", requestStatus.toString ());
137                 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
138             }
139
140             if (progress != null) {
141                 query.setParameter ("progress", Long.parseLong (progress));
142                 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
143             }
144             if (vnfOutputs != null) {
145                 query.setParameter ("vnfOutputs", vnfOutputs);
146                 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
147             }
148             if (serviceInstanceId != null) {
149                 query.setParameter ("serviceInstanceId", serviceInstanceId);
150                 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
151             }
152             if (networkId != null) {
153                 query.setParameter ("networkId", networkId);
154                 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
155             }
156             if (vnfId != null) {
157                 query.setParameter ("vnfId", vnfId);
158                 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
159             }
160             if (vfModuleId != null) {
161                 query.setParameter ("vfModuleId", vfModuleId);
162                 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
163             }
164             if (volumeGroupId != null) {
165                 query.setParameter ("volumeGroupId", volumeGroupId);
166                 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
167             }
168             if (serviceInstanceName != null) {
169                 query.setParameter ("serviceInstanceName", serviceInstanceName);
170                 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
171             }
172             if (vfModuleName != null) {
173                 query.setParameter ("vfModuleName", vfModuleName);
174                 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
175             }
176             if (configurationId != null) {
177                 query.setParameter ("configurationId", configurationId);
178                 logger.debug ("configurationId in updateInfraRequest is set to: " + configurationId);
179             }
180             if (configurationName != null) {
181                 query.setParameter ("configurationName", configurationName);
182                 logger.debug ("configurationName in updateInfraRequest is set to: " + configurationName);
183             }
184             if (vfModuleName != null) {
185                 query.setParameter ("vfModuleName", vfModuleName);
186                 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
187             }
188             Timestamp nowTimeStamp = new Timestamp (System.currentTimeMillis ());
189             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
190                 query.setParameter ("endTime", nowTimeStamp);
191                 logger.debug ("EndTime in updateInfraRequest is set to: " + nowTimeStamp);
192             } else {
193                 query.setParameter ("modifyTime", nowTimeStamp);
194                 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
195             }
196             query.setParameter ("lastModifiedBy", lastModifiedBy);
197             logger.debug ("LastModifiedBy in updateInfraRequest is set to: " + lastModifiedBy);
198             result = query.executeUpdate ();
199             checkIfExists (result, requestId);
200             session.getTransaction ().commit ();
201         } catch (HibernateException e) {
202             String error = "Unable to update MSO Requests DB: " + e.getMessage ();
203             logger.error (MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
204             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
205             throw new MsoRequestsDbException (error, e);
206         } finally {
207             if (session != null && session.isOpen ()) {
208                 session.close ();
209             }
210         }
211         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
212     }
213
214
215     private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
216         if (result == 0) {
217             String error = "Request ID does not exist in MSO Requests DB: " + requestId;
218             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);
219             throw new MsoRequestsDbException (error);
220         }
221     }
222
223
224     @Override
225     public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
226         long startTime = System.currentTimeMillis ();
227         MsoLogger.setLogContext (requestId, null);
228         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
229
230         logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
231
232         InfraActiveRequests request = null;
233         try {
234             session.beginTransaction ();
235             Query query = session.createQuery ("FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
236             query.setParameter ("requestId", requestId);
237             request = (InfraActiveRequests) query.uniqueResult();
238         } catch (HibernateException e) {
239             String error = "Unable to retrieve MSO Infra Requests DB for Request ID "
240                            + requestId;
241             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
242             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
243             throw new MsoRequestsDbException (error, e);
244         } finally {
245             if (session != null && session.isOpen ()) {
246                 session.close ();
247             }
248         }
249         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
250         return request;
251     }
252
253
254     /**
255      * Get SiteStatus by SiteName.
256      *
257      * @param siteName The unique name of the site
258      * @return Status of that site
259      */
260     @Override
261     public boolean getSiteStatus (String siteName) {
262         UUIDChecker.generateUUID (logger);
263         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
264
265         long startTime = System.currentTimeMillis ();
266         SiteStatus siteStatus = null;
267         logger.debug ("Request database - get Site Status with Site name:" + siteName);
268         try {
269             String hql = "FROM SiteStatus WHERE siteName = :site_name";
270             Query query = session.createQuery (hql);
271             query.setParameter ("site_name", siteName);
272
273             siteStatus = (SiteStatus) query.uniqueResult ();
274         } finally {
275             if (session != null && session.isOpen ()) {
276                 session.close ();
277             }
278         }
279         if (siteStatus == null) {
280             // if not exist in DB, it means the site is not disabled, thus return true
281             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
282             return true;
283         } else {
284             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
285             return siteStatus.getStatus();
286         }
287     }
288     
289     /**
290      * update operation status
291      * <br>
292      * 
293      * @param serviceId
294      * @param operationId
295      * @param operationType
296      * @param userId
297      * @param result
298      * @param operationContent
299      * @param progress
300      * @param reason
301      * @throws MsoRequestsDbException
302      * @since   ONAP Amsterdam Release
303      */
304     @Override
305     public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
306             String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
307         OperationStatus operStatus = new OperationStatus();
308         operStatus.setServiceId(serviceId);
309         operStatus.setOperationId(operationId);
310         operStatus.setUserId(userId);
311         operStatus.setOperation(operationType);
312         operStatus.setReason(reason);
313         operStatus.setProgress(progress);
314         operStatus.setResult(result);
315         operStatus.setOperationContent(operationContent);
316         RequestsDatabase.getInstance().updateOperationStatus(operStatus);
317     }
318     
319     /**
320      * init the operation status of  all the resources 
321      * <br>
322      * 
323      * @param serviceId the service Id
324      * @param operationId the operation Id
325      * @param operationType the operationType
326      * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
327      * @throws MsoRequestsDbException
328      * @since   ONAP Amsterdam Release
329      */
330     @Override
331     public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
332             String resourceTemplateUUIDs) throws MsoRequestsDbException{
333         String[] resourceLst = resourceTemplateUUIDs.split(":");
334         for(String resource: resourceLst){
335             if("".equals(resource)){
336                 continue;
337             }
338             ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
339             resourceStatus.setOperationId(operationId);
340             resourceStatus.setServiceId(serviceId);
341             resourceStatus.setResourceTemplateUUID(resource);
342             resourceStatus.setOperType(operationType);
343             resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
344             resourceStatus.setStatusDescription("Waiting for start");
345             RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
346         }     
347     }
348     
349     /**
350      * get resource operation status
351      * <br>
352      * 
353      * @param serviceId
354      * @param operationId
355      * @param resourceTemplateUUID
356      * @return
357      * @throws MsoRequestsDbException
358      * @since   ONAP Amsterdam Release
359      */
360     @Override
361     public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
362             throws MsoRequestsDbException {
363         return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
364     }
365     
366     /**
367      * update resource operation status
368      * <br>
369      * 
370      * @param serviceId
371      * @param operationId
372      * @param resourceTemplateUUID
373      * @param operationType
374      * @param resourceInstanceID
375      * @param jobId
376      * @param status
377      * @param progress
378      * @param errorCode
379      * @param statusDescription
380      * @throws MsoRequestsDbException
381      * @since   ONAP Amsterdam Release
382      */
383     @Override
384     public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
385             String operationType, String resourceInstanceID, String jobId, String status, String progress,
386             String errorCode, String statusDescription) throws MsoRequestsDbException {
387          ResourceOperationStatus resStatus = new ResourceOperationStatus();
388          resStatus.setServiceId(serviceId);
389          resStatus.setOperationId(operationId);
390          resStatus.setResourceTemplateUUID(resourceTemplateUUID);
391          resStatus.setOperType(operationType);
392          resStatus.setResourceInstanceID(resourceInstanceID);
393          resStatus.setJobId(jobId);
394          resStatus.setStatus(status);
395          resStatus.setProgress(progress);
396          resStatus.setErrorCode(errorCode);
397          resStatus.setStatusDescription(statusDescription);
398          RequestsDatabase.getInstance().updateResOperStatus(resStatus);
399     }
400 }