c8ea1652f7fa9a5fc34103d22ae83e8484db6e90
[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 the operation status of all the resources <br>
222          * 
223          * @param serviceId
224          *            the service Id
225          * @param operationId
226          *            the operation Id
227          * @param operationType
228          *            the operationType
229          * @param resourceTemplateUUIDs
230          *            the resources, the UUID is split by ":"
231          * @throws MsoRequestsDbException
232          * @since ONAP Amsterdam Release
233          */
234         @Override
235         @Transactional
236         public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
237                         String resourceTemplateUUIDs) throws MsoRequestsDbException {
238                 String[] resourceLst = resourceTemplateUUIDs.split(":");
239                 for (String resource : resourceLst) {
240                         if ("".equals(resource)) {
241                                 continue;
242                         }
243                         ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
244                         resourceStatus.setOperationId(operationId);
245                         resourceStatus.setServiceId(serviceId);
246                         resourceStatus.setResourceTemplateUUID(resource);
247                         resourceStatus.setOperType(operationType);
248                         resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
249                         resourceStatus.setStatusDescription("Waiting for start");
250                         resourceOperationStatusRepository.save(resourceStatus);
251
252                 }
253         }
254
255         /**
256          * get resource operation status <br>
257          * 
258          * @param serviceId
259          * @param operationId
260          * @param resourceTemplateUUID
261          * @return
262          * @throws MsoRequestsDbException
263          * @since ONAP Amsterdam Release
264          */
265         @Override
266         public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
267                         String resourceTemplateUUID) throws MsoRequestsDbException {
268
269                 return resourceOperationStatusRepository
270                                 .findById(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID)).
271                                 orElseThrow( () -> new MsoRequestsDbException("Operation not found:" + operationId));
272                                 
273         }
274
275         /**
276          * update resource operation status <br>
277          * 
278          * @param serviceId
279          * @param operationId
280          * @param resourceTemplateUUID
281          * @param operationType
282          * @param resourceInstanceID
283          * @param jobId
284          * @param status
285          * @param progress
286          * @param errorCode
287          * @param statusDescription
288          * @throws MsoRequestsDbException
289          * @since ONAP Amsterdam Release
290          */
291         @Override
292         public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
293                         String operationType, String resourceInstanceID, String jobId, String status, String progress,
294                         String errorCode, String statusDescription) throws MsoRequestsDbException {
295                 ResourceOperationStatus resStatus = new ResourceOperationStatus();
296                 resStatus.setServiceId(serviceId);
297                 resStatus.setOperationId(operationId);
298                 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
299                 resStatus.setOperType(operationType);
300                 resStatus.setResourceInstanceID(resourceInstanceID);
301                 resStatus.setJobId(jobId);
302                 resStatus.setStatus(status);
303                 resStatus.setProgress(progress);
304                 resStatus.setErrorCode(errorCode);
305                 resStatus.setStatusDescription(statusDescription);
306                 resourceOperationStatusRepository.save(resStatus);
307         }
308 }