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