f8a2c986da28a659b692f3816bafd13f26a32f56
[so.git] /
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.openecomp.mso.requestsdb.SiteStatus;
28 import org.openecomp.mso.utils.UUIDChecker;
29 import org.hibernate.HibernateException;
30 import org.hibernate.Query;
31 import org.hibernate.Session;
32
33 import org.openecomp.mso.adapters.requestsdb.exceptions.MsoRequestsDbException;
34 import org.openecomp.mso.logger.MessageEnum;
35 import org.openecomp.mso.logger.MsoLogger;
36 import org.openecomp.mso.db.AbstractSessionFactoryManager;
37 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
38 import org.openecomp.mso.requestsdb.InfraActiveRequests;
39
40 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.openecomp.mso.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.openecomp.mso/requestsdb")
41 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
42
43     protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
44     
45     private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
46
47     @Override
48     public void updateInfraRequest (String requestId,
49                                     String lastModifiedBy,
50                                     String statusMessage,
51                                     String responseBody,
52                                     RequestStatusType requestStatus,
53                                     String progress,
54                                     String vnfOutputs,
55                                     String serviceInstanceId,
56                                     String networkId,
57                                     String vnfId,
58                                     String vfModuleId,
59                                     String volumeGroupId,
60                                     String serviceInstanceName,
61                                     String vfModuleName) throws MsoRequestsDbException {
62         MsoLogger.setLogContext (requestId, null);
63         Session session = requestsDbSessionFactoryManager.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 (vfModuleName != null) {
103                 queryString += "vfModuleName = :vfModuleName, ";
104             }
105             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
106                 queryString += "endTime = :endTime, ";
107             } else {
108                 queryString += "modifyTime = :modifyTime, ";
109             }
110             queryString += "lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId";
111
112             logger.debug("Executing update: " + queryString);
113
114             Query query = session.createQuery (queryString);
115             query.setParameter ("requestId", requestId);
116             if (statusMessage != null) {
117                 query.setParameter ("statusMessage", statusMessage);
118                 logger.debug ("StatusMessage in updateInfraRequest is set to: " + statusMessage);
119             }
120             if (responseBody != null) {
121                 query.setParameter ("responseBody", responseBody);
122                 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
123             }
124             if (requestStatus != null) {
125                 query.setParameter ("requestStatus", requestStatus.toString ());
126                 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
127             }
128
129             if (progress != null) {
130                 query.setParameter ("progress", Long.parseLong (progress));
131                 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
132             }
133             if (vnfOutputs != null) {
134                 query.setParameter ("vnfOutputs", vnfOutputs);
135                 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
136             }
137             if (serviceInstanceId != null) {
138                 query.setParameter ("serviceInstanceId", serviceInstanceId);
139                 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
140             }
141             if (networkId != null) {
142                 query.setParameter ("networkId", networkId);
143                 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
144             }
145             if (vnfId != null) {
146                 query.setParameter ("vnfId", vnfId);
147                 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
148             }
149             if (vfModuleId != null) {
150                 query.setParameter ("vfModuleId", vfModuleId);
151                 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
152             }
153             if (volumeGroupId != null) {
154                 query.setParameter ("volumeGroupId", volumeGroupId);
155                 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
156             }
157             if (serviceInstanceName != null) {
158                 query.setParameter ("serviceInstanceName", serviceInstanceName);
159                 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
160             }
161             if (vfModuleName != null) {
162                 query.setParameter ("vfModuleName", vfModuleName);
163                 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
164             }
165             Timestamp nowTimeStamp = new Timestamp (System.currentTimeMillis ());
166             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
167                 query.setParameter ("endTime", nowTimeStamp);
168                 logger.debug ("EndTime in updateInfraRequest is set to: " + nowTimeStamp);
169             } else {
170                 query.setParameter ("modifyTime", nowTimeStamp);
171                 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
172             }
173             query.setParameter ("lastModifiedBy", lastModifiedBy);
174             logger.debug ("LastModifiedBy in updateInfraRequest is set to: " + lastModifiedBy);
175             result = query.executeUpdate ();
176             checkIfExists (result, requestId);
177             session.getTransaction ().commit ();
178         } catch (HibernateException e) {
179             String error = "Unable to update MSO Requests DB: " + e.getMessage ();
180             logger.error (MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
181             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
182             throw new MsoRequestsDbException (error, e);
183         } finally {
184             if (session != null && session.isOpen ()) {
185                 session.close ();
186             }
187         }
188         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
189     }
190
191
192     private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
193         if (result == 0) {
194             String error = "Request ID does not exist in MSO Requests DB: " + requestId;
195             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);
196             throw new MsoRequestsDbException (error);
197         }
198     }
199
200
201     @Override
202     public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
203         long startTime = System.currentTimeMillis ();
204         MsoLogger.setLogContext (requestId, null);
205         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
206
207         logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
208
209         InfraActiveRequests request = null;
210         try {
211             session.beginTransaction ();
212             Query query = session.createQuery ("FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
213             query.setParameter ("requestId", requestId);
214             request = (InfraActiveRequests) query.uniqueResult();
215         } catch (HibernateException e) {
216             String error = "Unable to retrieve MSO Infra Requests DB for Request ID "
217                            + requestId;
218             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
219             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
220             throw new MsoRequestsDbException (error, e);
221         } finally {
222             if (session != null && session.isOpen ()) {
223                 session.close ();
224             }
225         }
226         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
227         return request;
228     }
229
230
231     /**
232      * Get SiteStatus by SiteName.
233      *
234      * @param siteName The unique name of the site
235      * @return Status of that site
236      */
237     @Override
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 }