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