Merge "Add progress for create workflow"
[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.WebMethod;
26 import javax.jws.WebService;
27
28 import org.hibernate.HibernateException;
29 import org.hibernate.Query;
30 import org.hibernate.Session;
31 import org.openecomp.mso.adapters.requestsdb.exceptions.MsoRequestsDbException;
32 import org.openecomp.mso.db.AbstractSessionFactoryManager;
33 import org.openecomp.mso.logger.MessageEnum;
34 import org.openecomp.mso.logger.MsoLogger;
35 import org.openecomp.mso.requestsdb.InfraActiveRequests;
36 import org.openecomp.mso.requestsdb.OperationStatus;
37 import org.openecomp.mso.requestsdb.RequestsDatabase;
38 import org.openecomp.mso.requestsdb.RequestsDbConstant;
39 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
40 import org.openecomp.mso.requestsdb.ResourceOperationStatus;
41 import org.openecomp.mso.requestsdb.SiteStatus;
42 import org.openecomp.mso.utils.UUIDChecker;
43
44 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.openecomp.mso.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.openecomp.mso/requestsdb")
45 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
46
47     protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
48     
49     private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
50
51     @Override
52     public void updateInfraRequest (String requestId,
53                                     String lastModifiedBy,
54                                     String statusMessage,
55                                     String responseBody,
56                                     RequestStatusType requestStatus,
57                                     String progress,
58                                     String vnfOutputs,
59                                     String serviceInstanceId,
60                                     String networkId,
61                                     String vnfId,
62                                     String vfModuleId,
63                                     String volumeGroupId,
64                                     String serviceInstanceName,
65                                     String vfModuleName) throws MsoRequestsDbException {
66         MsoLogger.setLogContext (requestId, null);
67         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
68         int result = 0;
69         long startTime = System.currentTimeMillis ();
70         try {
71                 session.beginTransaction ();
72             String queryString = "update InfraActiveRequests set ";
73             if (statusMessage != null) {
74                 queryString += "statusMessage = :statusMessage, ";
75             }
76             if (responseBody != null) {
77                 queryString += "responseBody = :responseBody, ";
78             }
79             if (requestStatus != null) {
80                 queryString += "requestStatus = :requestStatus, ";
81             }
82             if (progress != null) {
83                 queryString += "progress = :progress, ";
84             }
85             if (vnfOutputs != null) {
86                 queryString += "vnfOutputs = :vnfOutputs, ";
87             }
88             if (serviceInstanceId != null) {
89                 queryString += "serviceInstanceId = :serviceInstanceId, ";
90             }
91             if (networkId != null) {
92                 queryString += "networkId = :networkId, ";
93             }
94             if (vnfId != null) {
95                 queryString += "vnfId = :vnfId, ";
96             }
97             if (vfModuleId != null) {
98                 queryString += "vfModuleId = :vfModuleId, ";
99             }
100             if (volumeGroupId != null) {
101                 queryString += "volumeGroupId = :volumeGroupId, ";
102             }
103             if (serviceInstanceName != null) {
104                 queryString += "serviceInstanceName = :serviceInstanceName, ";
105             }
106             if (vfModuleName != null) {
107                 queryString += "vfModuleName = :vfModuleName, ";
108             }
109             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
110                 queryString += "endTime = :endTime, ";
111             } else {
112                 queryString += "modifyTime = :modifyTime, ";
113             }
114             queryString += "lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId";
115
116             logger.debug("Executing update: " + queryString);
117
118             Query query = session.createQuery (queryString);
119             query.setParameter ("requestId", requestId);
120             if (statusMessage != null) {
121                 query.setParameter ("statusMessage", statusMessage);
122                 logger.debug ("StatusMessage in updateInfraRequest is set to: " + statusMessage);
123             }
124             if (responseBody != null) {
125                 query.setParameter ("responseBody", responseBody);
126                 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
127             }
128             if (requestStatus != null) {
129                 query.setParameter ("requestStatus", requestStatus.toString ());
130                 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
131             }
132
133             if (progress != null) {
134                 query.setParameter ("progress", Long.parseLong (progress));
135                 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
136             }
137             if (vnfOutputs != null) {
138                 query.setParameter ("vnfOutputs", vnfOutputs);
139                 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
140             }
141             if (serviceInstanceId != null) {
142                 query.setParameter ("serviceInstanceId", serviceInstanceId);
143                 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
144             }
145             if (networkId != null) {
146                 query.setParameter ("networkId", networkId);
147                 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
148             }
149             if (vnfId != null) {
150                 query.setParameter ("vnfId", vnfId);
151                 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
152             }
153             if (vfModuleId != null) {
154                 query.setParameter ("vfModuleId", vfModuleId);
155                 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
156             }
157             if (volumeGroupId != null) {
158                 query.setParameter ("volumeGroupId", volumeGroupId);
159                 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
160             }
161             if (serviceInstanceName != null) {
162                 query.setParameter ("serviceInstanceName", serviceInstanceName);
163                 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
164             }
165             if (vfModuleName != null) {
166                 query.setParameter ("vfModuleName", vfModuleName);
167                 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
168             }
169             Timestamp nowTimeStamp = new Timestamp (System.currentTimeMillis ());
170             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
171                 query.setParameter ("endTime", nowTimeStamp);
172                 logger.debug ("EndTime in updateInfraRequest is set to: " + nowTimeStamp);
173             } else {
174                 query.setParameter ("modifyTime", nowTimeStamp);
175                 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
176             }
177             query.setParameter ("lastModifiedBy", lastModifiedBy);
178             logger.debug ("LastModifiedBy in updateInfraRequest is set to: " + lastModifiedBy);
179             result = query.executeUpdate ();
180             checkIfExists (result, requestId);
181             session.getTransaction ().commit ();
182         } catch (HibernateException e) {
183             String error = "Unable to update MSO Requests DB: " + e.getMessage ();
184             logger.error (MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
185             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
186             throw new MsoRequestsDbException (error, e);
187         } finally {
188             if (session != null && session.isOpen ()) {
189                 session.close ();
190             }
191         }
192         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
193     }
194
195
196     private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
197         if (result == 0) {
198             String error = "Request ID does not exist in MSO Requests DB: " + requestId;
199             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);
200             throw new MsoRequestsDbException (error);
201         }
202     }
203
204
205     @Override
206     public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
207         long startTime = System.currentTimeMillis ();
208         MsoLogger.setLogContext (requestId, null);
209         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
210
211         logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
212
213         InfraActiveRequests request = null;
214         try {
215             session.beginTransaction ();
216             Query query = session.createQuery ("FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
217             query.setParameter ("requestId", requestId);
218             request = (InfraActiveRequests) query.uniqueResult();
219         } catch (HibernateException e) {
220             String error = "Unable to retrieve MSO Infra Requests DB for Request ID "
221                            + requestId;
222             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
223             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
224             throw new MsoRequestsDbException (error, e);
225         } finally {
226             if (session != null && session.isOpen ()) {
227                 session.close ();
228             }
229         }
230         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
231         return request;
232     }
233
234
235     /**
236      * Get SiteStatus by SiteName.
237      *
238      * @param siteName The unique name of the site
239      * @return Status of that site
240      */
241     @Override
242     public boolean getSiteStatus (String siteName) {
243         UUIDChecker.generateUUID (logger);
244         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
245
246         long startTime = System.currentTimeMillis ();
247         SiteStatus siteStatus = null;
248         logger.debug ("Request database - get Site Status with Site name:" + siteName);
249         try {
250             String hql = "FROM SiteStatus WHERE siteName = :site_name";
251             Query query = session.createQuery (hql);
252             query.setParameter ("site_name", siteName);
253
254             siteStatus = (SiteStatus) query.uniqueResult ();
255         } finally {
256             if (session != null && session.isOpen ()) {
257                 session.close ();
258             }
259         }
260         if (siteStatus == null) {
261             // if not exist in DB, it means the site is not disabled, thus return true
262             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
263             return true;
264         } else {
265             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
266             return siteStatus.getStatus();
267         }
268     }
269     
270     /**
271      * update operation status
272      * <br>
273      * 
274      * @param serviceId
275      * @param operationId
276      * @param operationType
277      * @param userId
278      * @param result
279      * @param operationContent
280      * @param progress
281      * @param reason
282      * @throws MsoRequestsDbException
283      * @since   ONAP Amsterdam Release
284      */
285     @Override
286     public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
287             String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
288         OperationStatus operStatus = new OperationStatus();
289         operStatus.setServiceId(serviceId);
290         operStatus.setOperationId(operationId);
291         operStatus.setUserId(userId);
292         operStatus.setOperation(operationType);
293         operStatus.setReason(reason);
294         operStatus.setProgress(progress);
295         operStatus.setOperationContent(operationContent);
296         RequestsDatabase.getInstance().updateOperationStatus(operStatus);
297     }
298     
299     /**
300      * init the operation status of  all the resources 
301      * <br>
302      * 
303      * @param serviceId the service Id
304      * @param operationId the operation Id
305      * @param operationType the operationType
306      * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
307      * @throws MsoRequestsDbException
308      * @since   ONAP Amsterdam Release
309      */
310     @Override
311     public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
312             String resourceTemplateUUIDs) throws MsoRequestsDbException{
313         String[] resourceLst = resourceTemplateUUIDs.split(":");
314         for(String resource: resourceLst){
315             ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
316             resourceStatus.setOperationId(operationId);
317             resourceStatus.setServiceId(serviceId);
318             resourceStatus.setResourceTemplateUUID(resource);
319             resourceStatus.setOperType(operationType);
320             resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
321             resourceStatus.setStatusDescription("Waiting for start");
322             RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
323         }     
324     }
325
326 }