2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.apihandlerinfra.tenantisolation;
23 import java.sql.Timestamp;
24 import java.util.HashMap;
25 import java.util.List;
27 import java.util.Map.Entry;
29 import javax.ws.rs.core.MultivaluedMap;
31 import org.apache.commons.lang3.StringUtils;
32 import org.onap.so.apihandlerinfra.Constants;
33 import org.onap.so.apihandlerinfra.Status;
34 import org.onap.so.apihandlerinfra.tenantisolationbeans.Action;
35 import org.onap.so.apihandlerinfra.tenantisolationbeans.Manifest;
36 import org.onap.so.apihandlerinfra.tenantisolationbeans.OperationalEnvironment;
37 import org.onap.so.apihandlerinfra.tenantisolationbeans.RelatedInstance;
38 import org.onap.so.apihandlerinfra.tenantisolationbeans.RelatedInstanceList;
39 import org.onap.so.apihandlerinfra.tenantisolationbeans.RequestDetails;
40 import org.onap.so.apihandlerinfra.tenantisolationbeans.RequestInfo;
41 import org.onap.so.apihandlerinfra.tenantisolationbeans.RequestParameters;
42 import org.onap.so.apihandlerinfra.tenantisolationbeans.ResourceType;
43 import org.onap.so.apihandlerinfra.tenantisolationbeans.ServiceModelList;
44 import org.onap.so.apihandlerinfra.vnfbeans.RequestStatusType;
45 import org.onap.so.db.request.beans.InfraActiveRequests;
46 import org.onap.so.db.request.client.RequestsDbClient;
47 import org.onap.so.exceptions.ValidationException;
48 import org.onap.so.logger.MessageEnum;
49 import org.onap.so.logger.MsoLogger;
51 import org.onap.so.utils.UUIDChecker;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.context.annotation.Scope;
54 import org.springframework.stereotype.Component;
56 import com.fasterxml.jackson.core.JsonProcessingException;
57 import com.fasterxml.jackson.databind.ObjectMapper;
61 public class TenantIsolationRequest {
63 private String requestId;
64 private String requestJSON;
65 private RequestInfo requestInfo;
67 private String errorMessage;
68 private String responseBody;
69 private RequestStatusType status;
70 private String operationalEnvironmentId;
71 private long progress = Constants.PROGRESS_REQUEST_RECEIVED;
72 private String requestScope;
73 private CloudOrchestrationRequest cor;
76 private RequestsDbClient requestsDbClient;
78 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH, TenantIsolationRequest.class);
81 TenantIsolationRequest (String requestId) {
82 this.requestId = requestId;
83 MsoLogger.setLogContext (requestId, null);
86 TenantIsolationRequest () {
87 MsoLogger.setLogContext (requestId, null);
90 void parse(CloudOrchestrationRequest request, HashMap<String,String> instanceIdMap, Action action) throws ValidationException {
92 this.requestInfo = request.getRequestDetails().getRequestInfo();
95 ObjectMapper mapper = new ObjectMapper();
96 requestJSON = mapper.writeValueAsString(request.getRequestDetails());
98 } catch(JsonProcessingException e){
99 throw new ValidationException ("Parse ServiceInstanceRequest to JSON string", true);
103 if(instanceIdMap != null) {
104 envId = instanceIdMap.get("operationalEnvironmentId");
105 if(envId != null && !UUIDChecker.isValidUUID (envId)){
106 throw new ValidationException ("operationalEnvironmentId", true);
108 cor.setOperationalEnvironmentId(envId);
111 this.operationalEnvironmentId = envId;
113 RequestDetails requestDetails = request.getRequestDetails();
114 RequestParameters requestParameters = requestDetails.getRequestParameters();
116 requestInfoValidation(action, requestInfo);
118 requestParamsValidation(action, requestParameters);
120 relatedInstanceValidation(action, requestDetails, requestParameters);
124 private void relatedInstanceValidation(Action action, RequestDetails requestDetails, RequestParameters requestParameters) throws ValidationException {
125 RelatedInstanceList[] instanceList = requestDetails.getRelatedInstanceList();
127 if (requestParameters == null) {
128 throw new ValidationException("requestParameters", true);
130 if((Action.activate.equals(action) || Action.deactivate.equals(action)) && OperationalEnvironment.ECOMP.equals(requestParameters.getOperationalEnvironmentType())) {
131 throw new ValidationException("operationalEnvironmentType in requestParameters", true);
134 if(!Action.deactivate.equals(action) && OperationalEnvironment.VNF.equals(requestParameters.getOperationalEnvironmentType())) {
135 if(instanceList != null && instanceList.length > 0) {
136 for(RelatedInstanceList relatedInstanceList : instanceList){
137 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
139 if(relatedInstance.getResourceType() == null) {
140 throw new ValidationException("ResourceType in relatedInstance", true);
143 if(!empty(relatedInstance.getInstanceName()) && !relatedInstance.getInstanceName().matches(Constants.VALID_INSTANCE_NAME_FORMAT)) {
144 throw new ValidationException ("instanceName format", true);
147 if (empty (relatedInstance.getInstanceId ())) {
148 throw new ValidationException ("instanceId in relatedInstance", true);
151 if (!UUIDChecker.isValidUUID (relatedInstance.getInstanceId ())) {
152 throw new ValidationException ("instanceId format in relatedInstance", true);
156 throw new ValidationException ("relatedInstanceList", true);
161 private void requestParamsValidation(Action action, RequestParameters requestParameters) throws ValidationException {
163 if(requestParameters != null) {
164 if(!Action.deactivate.equals(action) && requestParameters.getOperationalEnvironmentType() == null) {
165 throw new ValidationException ("OperationalEnvironmentType", true);
168 if (Action.create.equals(action) && empty(requestParameters.getTenantContext())) {
169 throw new ValidationException ("Tenant Context", true);
171 if (!Action.deactivate.equals(action) && empty(requestParameters.getWorkloadContext())) {
172 throw new ValidationException ("Workload Context", true);
175 Manifest manifest = requestParameters.getManifest();
177 if(Action.activate.equals(action)) {
178 if(manifest == null) {
179 throw new ValidationException ("Manifest on Activate", true);
181 List<ServiceModelList> serviceModelList = manifest.getServiceModelList();
183 if(serviceModelList.isEmpty()) {
184 throw new ValidationException (" empty ServiceModelList", true);
187 for(ServiceModelList list : serviceModelList) {
188 if(empty(list.getServiceModelVersionId())) {
189 throw new ValidationException ("ServiceModelVersionId", true);
192 if (!UUIDChecker.isValidUUID (list.getServiceModelVersionId())) {
193 throw new ValidationException ("ServiceModelVersionId format", true);
196 if(list.getRecoveryAction() == null) {
197 throw new ValidationException ("RecoveryAction", true);
202 } else if(!Action.deactivate.equals(action)) {
203 throw new ValidationException("request Parameters", true);
207 private void requestInfoValidation(Action action, RequestInfo requestInfo) throws ValidationException {
209 if(Action.create.equals(action) && empty(requestInfo.getInstanceName())) {
210 throw new ValidationException ("instanceName", true);
213 if(!empty(requestInfo.getInstanceName()) && !requestInfo.getInstanceName().matches(Constants.VALID_INSTANCE_NAME_FORMAT)) {
214 throw new ValidationException ("instanceName format", true);
217 if (empty(requestInfo.getSource())) {
218 throw new ValidationException ("source", true);
221 if(empty(requestInfo.getRequestorId())) {
222 throw new ValidationException ("requestorId", true);
225 ResourceType resourceType = requestInfo.getResourceType();
226 if(resourceType == null) {
227 throw new ValidationException ("resourceType", true);
230 this.requestScope = resourceType.name();
233 void parseOrchestration (CloudOrchestrationRequest cor) throws ValidationException {
238 ObjectMapper mapper = new ObjectMapper();
239 requestJSON = mapper.writeValueAsString(cor.getRequestDetails());
241 } catch(JsonProcessingException e){
242 throw new ValidationException ("Parse CloudOrchestrationRequest to JSON string", e);
245 if(cor.getRequestDetails() == null){
246 throw new ValidationException("requestDetails", true);
248 this.requestInfo = cor.getRequestDetails().getRequestInfo();
250 if (this.requestInfo == null) {
251 throw new ValidationException ("requestInfo", true);
254 if (empty (requestInfo.getSource ())) {
255 throw new ValidationException ("source", true);
257 if (empty (requestInfo.getRequestorId ())) {
258 throw new ValidationException ("requestorId", true);
262 public void createRequestRecord (Status status, Action action){
264 InfraActiveRequests aq = new InfraActiveRequests ();
265 aq.setRequestId (requestId);
267 aq.setRequestAction(action.name());
268 aq.setAction(action.name());
270 Timestamp startTimeStamp = new Timestamp (System.currentTimeMillis());
272 aq.setStartTime (startTimeStamp);
274 if (requestInfo != null) {
276 if(requestInfo.getSource() != null){
277 aq.setSource(requestInfo.getSource());
279 if(requestInfo.getRequestorId() != null) {
280 aq.setRequestorId(requestInfo.getRequestorId());
282 if(requestInfo.getResourceType() != null) {
283 aq.setRequestScope(requestInfo.getResourceType().name());
287 if(ResourceType.operationalEnvironment.name().equalsIgnoreCase(requestScope) && requestInfo != null) {
288 aq.setOperationalEnvId(operationalEnvironmentId);
289 aq.setOperationalEnvName(requestInfo.getInstanceName());
292 aq.setRequestBody (this.requestJSON);
294 aq.setRequestStatus (status.toString ());
295 aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER);
297 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
298 aq.setStatusMessage (this.errorMessage);
299 aq.setResponseBody (this.responseBody);
300 aq.setProgress(Long.valueOf(100));
302 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
303 aq.setEndTime (endTimeStamp);
304 } else if(status == Status.IN_PROGRESS) {
305 aq.setProgress(Constants.PROGRESS_REQUEST_IN_PROGRESS);
307 requestsDbClient.save(aq);
311 public Map<String, String> getOrchestrationFilters (MultivaluedMap<String, String> queryParams) throws ValidationException {
312 String queryParam = null;
313 Map<String, String> orchestrationFilterParams = new HashMap<>();
315 for (Entry<String,List<String>> entry : queryParams.entrySet()) {
316 queryParam = entry.getKey();
318 for(String value : entry.getValue()) {
319 if(StringUtils.isBlank(value)) {
320 throw (new Exception(queryParam + " value"));
322 orchestrationFilterParams.put(queryParam, value);
325 throw new ValidationException (e.getMessage(), true);
329 return orchestrationFilterParams;
332 private static boolean empty(String s) {
333 return (s == null || s.trim().isEmpty());
336 public String getRequestId () {
340 public void setRequestId(String requestId) {
341 this.requestId = requestId;
344 public void updateFinalStatus() {
346 InfraActiveRequests request = new InfraActiveRequests(requestId);
347 request.setRequestStatus(status.toString());
348 request.setStatusMessage(this.errorMessage);
349 request.setProgress(this.progress);
350 request.setResponseBody(this.responseBody);
351 request.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
352 requestsDbClient.save(request);
353 } catch (Exception e) {
354 msoLogger.error(MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "Exception when updating record in DB");
355 msoLogger.debug ("Exception: ", e);
359 public void setStatus (RequestStatusType status) {
360 this.status = status;
364 this.progress = Constants.PROGRESS_REQUEST_COMPLETED;
367 this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS;
380 public String getOperationalEnvironmentId() {
381 return operationalEnvironmentId;
384 public void setOperationalEnvironmentId(String operationalEnvironmentId) {
385 this.operationalEnvironmentId = operationalEnvironmentId;