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