762c76fc773c93b6df6e897a3fc0811ddd3351c2
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (C) 2018 IBM.
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.adapters.requestsdb;
24
25 import java.sql.Timestamp;
26 import javax.jws.WebService;
27 import javax.transaction.Transactional;
28 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
29 import org.onap.so.db.request.beans.InfraActiveRequests;
30 import org.onap.so.db.request.beans.OperationStatus;
31 import org.onap.so.db.request.beans.ResourceOperationStatus;
32 import org.onap.so.db.request.beans.ResourceOperationStatusId;
33 import org.onap.so.db.request.beans.SiteStatus;
34 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
35 import org.onap.so.db.request.data.repository.OperationStatusRepository;
36 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
37 import org.onap.so.db.request.data.repository.SiteStatusRepository;
38 import org.onap.so.logger.MsoLogger;
39 import org.onap.so.requestsdb.RequestsDbConstant;
40 import org.onap.so.utils.UUIDChecker;
41 import org.springframework.beans.factory.annotation.Autowired;
42 import org.springframework.context.annotation.Primary;
43 import org.springframework.stereotype.Component;
44
45 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
46 @Component
47 @Primary
48 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter { 
49
50         private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
51         
52         @Autowired
53         private InfraActiveRequestsRepository infraActive;
54
55         @Autowired
56         private SiteStatusRepository siteRepo;
57
58         @Autowired
59         private OperationStatusRepository operationStatusRepository;
60
61         @Autowired
62         private ResourceOperationStatusRepository resourceOperationStatusRepository;
63
64         @Transactional
65         @Override
66         public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
67                         RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
68                         String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
69                         String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
70                 try {
71                         InfraActiveRequests request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
72                         if (request == null) {
73                                 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
74                                 throw new MsoRequestsDbException(error);
75                         }
76                         if (statusMessage != null) {
77                                 request.setStatusMessage(statusMessage);
78                         }
79                         if (responseBody != null) {
80                                 request.setResponseBody(responseBody);
81                         }
82                         if (requestStatus != null) {
83                                 request.setRequestStatus(requestStatus.toString());
84                         }
85                         if (progress != null) {
86                                 setProgress(progress, request);
87                         }
88                         if (vnfOutputs != null) {
89                                 request.setVnfOutputs(vnfOutputs);
90                         }
91                         if (serviceInstanceId != null) {
92                                 request.setServiceInstanceId(serviceInstanceId);
93                         }
94                         if (networkId != null) {
95                                 request.setNetworkId(networkId);
96                         }
97                         if (vnfId != null) {
98                                 request.setVnfId(vnfId);
99                         }
100                         if (vfModuleId != null) {
101                                 request.setVfModuleId(vfModuleId);
102                         }
103                         if (volumeGroupId != null) {
104                                 request.setVolumeGroupId(volumeGroupId);
105                         }
106                         if (serviceInstanceName != null) {
107                                 request.setServiceInstanceName(serviceInstanceName);
108                         }
109                         if (vfModuleName != null) {
110                                 request.setVfModuleName(vfModuleName);
111                         }
112                         if (configurationId != null) {
113                                 request.setConfigurationId(configurationId);
114                         }
115                         if (configurationName != null) {
116                                 request.setConfigurationName(configurationName);
117                         }
118                         if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
119                                 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
120                                 request.setEndTime(nowTimeStamp);
121                         }
122                         request.setLastModifiedBy(lastModifiedBy);
123                         infraActive.save(request);
124                 } catch (Exception e) {
125                         String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
126                         logger.error(error, e);
127                         throw new MsoRequestsDbException(error, MsoLogger.ErrorCode.BusinessProcesssError, e);
128                 }
129         }
130
131         private void setProgress(String progress, InfraActiveRequests request) {
132                 try {
133                         request.setProgress(Long.parseLong(progress));
134                 } catch (NumberFormatException e) {
135                         logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
136                 }
137         }
138
139         @Override
140         @Transactional
141         public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {            
142                 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
143                 InfraActiveRequests request = null;
144                 try {
145                         request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
146                         if (request == null) {
147                                 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
148                                 throw new MsoRequestsDbException(error);
149                         }
150                 } catch (Exception e) {
151                         String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
152                         logger.error(error,e);
153                         throw new MsoRequestsDbException(error,MsoLogger.ErrorCode.BusinessProcesssError , e);
154                 }
155                 return request;
156         }
157
158         /**
159          * Get SiteStatus by SiteName.
160          *
161          * @param siteName
162          *            The unique name of the site
163          * @return Status of that site
164          */
165         @Override
166         @Transactional
167         public boolean getSiteStatus(String siteName) {
168                 UUIDChecker.generateUUID(logger);
169                 SiteStatus siteStatus;
170                 logger.debug("Request database - get Site Status with Site name:" + siteName);
171                 siteStatus = siteRepo.findOneBySiteName(siteName);
172                 if (siteStatus == null) {
173                         // if not exist in DB, it means the site is not disabled, thus
174                         // return true
175                         return true;
176                 } else {                        
177                         return siteStatus.getStatus();
178                 }
179         }
180
181         /**
182          * update operation status <br>
183          * 
184          * @param serviceId
185          * @param operationId
186          * @param operationType
187          * @param userId
188          * @param result
189          * @param operationContent
190          * @param progress
191          * @param reason
192          * @throws MsoRequestsDbException
193          * @since ONAP Amsterdam Release
194          */
195         @Override
196         @Transactional
197         public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
198                         String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
199                 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
200                 if (operStatus == null) {
201                         String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
202                                         + operationId;
203                         logger.error(error);
204 //                      throw new MsoRequestsDbException(error,MsoLogger.ErrorCode.BusinessProcesssError);
205                         operStatus = new OperationStatus();
206                         operStatus.setOperationId(operationId);
207                         operStatus.setServiceId(serviceId);
208                 }
209
210                 operStatus.setUserId(userId);
211                 operStatus.setOperation(operationType);
212                 operStatus.setReason(reason);
213                 operStatus.setProgress(progress);
214                 operStatus.setResult(result);
215                 operStatus.setOperationContent(operationContent);
216                 operStatus.setResult(result);
217                 operationStatusRepository.save(operStatus);
218         }
219
220         /**
221          * Init operation status <br>
222          *
223          * @param serviceId
224          * @param operationId
225          * @param operationType
226          * @param userId
227          * @param result
228          * @param operationContent
229          * @param progress
230          * @param reason
231          * @throws MsoRequestsDbException
232          * @since ONAP Casablanca Release
233          */
234         @Override
235         @Transactional
236         public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
237                                                                                          String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
238                 OperationStatus operStatus = new OperationStatus();
239
240                 operStatus.setOperationId(operationId);
241                 operStatus.setServiceId(serviceId);
242                 operStatus.setUserId(userId);
243                 operStatus.setOperation(operationType);
244                 operStatus.setReason(reason);
245                 operStatus.setProgress(progress);
246                 operStatus.setResult(result);
247                 operStatus.setOperationContent(operationContent);
248                 operStatus.setResult(result);
249                 operationStatusRepository.save(operStatus);
250         }
251
252         /**
253          * init the operation status of all the resources <br>
254          * 
255          * @param serviceId
256          *            the service Id
257          * @param operationId
258          *            the operation Id
259          * @param operationType
260          *            the operationType
261          * @param resourceTemplateUUIDs
262          *            the resources, the UUID is split by ":"
263          * @throws MsoRequestsDbException
264          * @since ONAP Amsterdam Release
265          */
266         @Override
267         @Transactional
268         public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
269                         String resourceTemplateUUIDs) throws MsoRequestsDbException {
270                 String[] resourceLst = resourceTemplateUUIDs.split(":");
271                 for (String resource : resourceLst) {
272                         if ("".equals(resource)) {
273                                 continue;
274                         }
275                         ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
276                         resourceStatus.setOperationId(operationId);
277                         resourceStatus.setServiceId(serviceId);
278                         resourceStatus.setResourceTemplateUUID(resource);
279                         resourceStatus.setOperType(operationType);
280                         resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
281                         resourceStatus.setStatusDescription("Waiting for start");
282                         resourceOperationStatusRepository.save(resourceStatus);
283
284                 }
285         }
286
287         /**
288          * get resource operation status <br>
289          * 
290          * @param serviceId
291          * @param operationId
292          * @param resourceTemplateUUID
293          * @return
294          * @throws MsoRequestsDbException
295          * @since ONAP Amsterdam Release
296          */
297         @Override
298         public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
299                         String resourceTemplateUUID) throws MsoRequestsDbException {
300
301                 return resourceOperationStatusRepository
302                                 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
303         }
304
305         /**
306          * update resource operation status <br>
307          * 
308          * @param serviceId
309          * @param operationId
310          * @param resourceTemplateUUID
311          * @param operationType
312          * @param resourceInstanceID
313          * @param jobId
314          * @param status
315          * @param progress
316          * @param errorCode
317          * @param statusDescription
318          * @throws MsoRequestsDbException
319          * @since ONAP Amsterdam Release
320          */
321         @Override
322         public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
323                         String operationType, String resourceInstanceID, String jobId, String status, String progress,
324                         String errorCode, String statusDescription) throws MsoRequestsDbException {
325                 ResourceOperationStatus resStatus = new ResourceOperationStatus();
326                 resStatus.setServiceId(serviceId);
327                 resStatus.setOperationId(operationId);
328                 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
329                 resStatus.setOperType(operationType);
330                 resStatus.setResourceInstanceID(resourceInstanceID);
331                 resStatus.setJobId(jobId);
332                 resStatus.setStatus(status);
333                 resStatus.setProgress(progress);
334                 resStatus.setErrorCode(errorCode);
335                 resStatus.setStatusDescription(statusDescription);
336                 resourceOperationStatusRepository.save(resStatus);
337         }
338 }