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