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