62e7e2e43caa63f182385210bd56194484b0c6d0
[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                 }
206
207                 operStatus.setUserId(userId);
208                 operStatus.setOperation(operationType);
209                 operStatus.setReason(reason);
210                 operStatus.setProgress(progress);
211                 operStatus.setResult(result);
212                 operStatus.setOperationContent(operationContent);
213                 operStatus.setResult(result);
214                 operationStatusRepository.save(operStatus);
215         }
216
217         /**
218          * Init operation status <br>
219          *
220          * @param serviceId
221          * @param operationId
222          * @param operationType
223          * @param userId
224          * @param result
225          * @param operationContent
226          * @param progress
227          * @param reason
228          * @throws MsoRequestsDbException
229          * @since ONAP Casablanca Release
230          */
231         @Override
232         @Transactional
233         public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
234                                                                                          String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
235                 OperationStatus operStatus = new OperationStatus();
236
237                 operStatus.setOperationId(operationId);
238                 operStatus.setServiceId(serviceId);
239                 operStatus.setUserId(userId);
240                 operStatus.setOperation(operationType);
241                 operStatus.setReason(reason);
242                 operStatus.setProgress(progress);
243                 operStatus.setResult(result);
244                 operStatus.setOperationContent(operationContent);
245                 operStatus.setResult(result);
246                 operationStatusRepository.save(operStatus);
247         }
248
249         /**
250          * init the operation status of all the resources <br>
251          * 
252          * @param serviceId
253          *            the service Id
254          * @param operationId
255          *            the operation Id
256          * @param operationType
257          *            the operationType
258          * @param resourceTemplateUUIDs
259          *            the resources, the UUID is split by ":"
260          * @throws MsoRequestsDbException
261          * @since ONAP Amsterdam Release
262          */
263         @Override
264         @Transactional
265         public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
266                         String resourceTemplateUUIDs) throws MsoRequestsDbException {
267                 String[] resourceLst = resourceTemplateUUIDs.split(":");
268                 for (String resource : resourceLst) {
269                         if ("".equals(resource)) {
270                                 continue;
271                         }
272                         ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
273                         resourceStatus.setOperationId(operationId);
274                         resourceStatus.setServiceId(serviceId);
275                         resourceStatus.setResourceTemplateUUID(resource);
276                         resourceStatus.setOperType(operationType);
277                         resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
278                         resourceStatus.setStatusDescription("Waiting for start");
279                         resourceOperationStatusRepository.save(resourceStatus);
280
281                 }
282         }
283
284         /**
285          * get resource operation status <br>
286          * 
287          * @param serviceId
288          * @param operationId
289          * @param resourceTemplateUUID
290          * @return
291          * @throws MsoRequestsDbException
292          * @since ONAP Amsterdam Release
293          */
294         @Override
295         public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
296                         String resourceTemplateUUID) throws MsoRequestsDbException {
297
298                 return resourceOperationStatusRepository
299                                 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
300         }
301
302         /**
303          * update resource operation status <br>
304          * 
305          * @param serviceId
306          * @param operationId
307          * @param resourceTemplateUUID
308          * @param operationType
309          * @param resourceInstanceID
310          * @param jobId
311          * @param status
312          * @param progress
313          * @param errorCode
314          * @param statusDescription
315          * @throws MsoRequestsDbException
316          * @since ONAP Amsterdam Release
317          */
318         @Override
319         public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
320                         String operationType, String resourceInstanceID, String jobId, String status, String progress,
321                         String errorCode, String statusDescription) throws MsoRequestsDbException {
322                 ResourceOperationStatus resStatus = new ResourceOperationStatus();
323                 resStatus.setServiceId(serviceId);
324                 resStatus.setOperationId(operationId);
325                 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
326                 resStatus.setOperType(operationType);
327                 resStatus.setResourceInstanceID(resourceInstanceID);
328                 resStatus.setJobId(jobId);
329                 resStatus.setStatus(status);
330                 resStatus.setProgress(progress);
331                 resStatus.setErrorCode(errorCode);
332                 resStatus.setStatusDescription(statusDescription);
333                 resourceOperationStatusRepository.save(resStatus);
334         }
335 }