AT&T 1712 and 1802 release code
[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             String queryString = "update InfraActiveRequests set ";
74             if (statusMessage != null) {
75                 queryString += "statusMessage = :statusMessage, ";
76             }
77             if (responseBody != null) {
78                 queryString += "responseBody = :responseBody, ";
79             }
80             if (requestStatus != null) {
81                 queryString += "requestStatus = :requestStatus, ";
82             }
83             if (progress != null) {
84                 queryString += "progress = :progress, ";
85             }
86             if (vnfOutputs != null) {
87                 queryString += "vnfOutputs = :vnfOutputs, ";
88             }
89             if (serviceInstanceId != null) {
90                 queryString += "serviceInstanceId = :serviceInstanceId, ";
91             }
92             if (networkId != null) {
93                 queryString += "networkId = :networkId, ";
94             }
95             if (vnfId != null) {
96                 queryString += "vnfId = :vnfId, ";
97             }
98             if (vfModuleId != null) {
99                 queryString += "vfModuleId = :vfModuleId, ";
100             }
101             if (volumeGroupId != null) {
102                 queryString += "volumeGroupId = :volumeGroupId, ";
103             }
104             if (serviceInstanceName != null) {
105                 queryString += "serviceInstanceName = :serviceInstanceName, ";
106             }
107             if (vfModuleName != null) {
108                 queryString += "vfModuleName = :vfModuleName, ";
109             }
110             if (configurationId != null) {
111                 queryString += "configurationId = :configurationId, ";
112             }
113             if (configurationName != null) {
114                 queryString += "configurationName = :configurationName, ";
115             }
116             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
117                 queryString += "endTime = :endTime, ";
118             } else {
119                 queryString += "modifyTime = :modifyTime, ";
120             }
121             queryString += "lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId";
122
123             logger.debug("Executing update: " + queryString);
124
125             Query query = session.createQuery (queryString);
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.setOperationContent(operationContent);
315         RequestsDatabase.getInstance().updateOperationStatus(operStatus);
316     }
317     
318     /**
319      * init the operation status of  all the resources 
320      * <br>
321      * 
322      * @param serviceId the service Id
323      * @param operationId the operation Id
324      * @param operationType the operationType
325      * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
326      * @throws MsoRequestsDbException
327      * @since   ONAP Amsterdam Release
328      */
329     @Override
330     public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
331             String resourceTemplateUUIDs) throws MsoRequestsDbException{
332         String[] resourceLst = resourceTemplateUUIDs.split(":");
333         for(String resource: resourceLst){
334             if("".equals(resource)){
335                 continue;
336             }
337             ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
338             resourceStatus.setOperationId(operationId);
339             resourceStatus.setServiceId(serviceId);
340             resourceStatus.setResourceTemplateUUID(resource);
341             resourceStatus.setOperType(operationType);
342             resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
343             resourceStatus.setStatusDescription("Waiting for start");
344             RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
345         }     
346     }
347     
348     /**
349      * get resource operation status
350      * <br>
351      * 
352      * @param serviceId
353      * @param operationId
354      * @param resourceTemplateUUID
355      * @return
356      * @throws MsoRequestsDbException
357      * @since   ONAP Amsterdam Release
358      */
359     @Override
360     public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
361             throws MsoRequestsDbException {
362         return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
363     }
364     
365     /**
366      * update resource operation status
367      * <br>
368      * 
369      * @param serviceId
370      * @param operationId
371      * @param resourceTemplateUUID
372      * @param operationType
373      * @param resourceInstanceID
374      * @param jobId
375      * @param status
376      * @param progress
377      * @param errorCode
378      * @param statusDescription
379      * @throws MsoRequestsDbException
380      * @since   ONAP Amsterdam Release
381      */
382     @Override
383     public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
384             String operationType, String resourceInstanceID, String jobId, String status, String progress,
385             String errorCode, String statusDescription) throws MsoRequestsDbException {
386          ResourceOperationStatus resStatus = new ResourceOperationStatus();
387          resStatus.setServiceId(serviceId);
388          resStatus.setOperationId(operationId);
389          resStatus.setResourceTemplateUUID(resourceTemplateUUID);
390          resStatus.setOperType(operationType);
391          resStatus.setResourceInstanceID(resourceInstanceID);
392          resStatus.setJobId(jobId);
393          resStatus.setStatus(status);
394          resStatus.setProgress(progress);
395          resStatus.setErrorCode(errorCode);
396          resStatus.setStatusDescription(statusDescription);
397          RequestsDatabase.getInstance().updateResOperStatus(resStatus);
398     }
399 }