From e601bbdc43bae9a08e2e10c5139a6f76b47860d7 Mon Sep 17 00:00:00 2001 From: Einat Vinouze Date: Tue, 16 Jul 2019 17:17:36 +0300 Subject: Implant vid-app-common org.onap.vid.job (main and test) Issue-ID: VID-378 Change-Id: I41b0bdc2c4e3635f3f3319b1cd63cefc61912dfc Signed-off-by: Einat Vinouze Signed-off-by: Ittay Stern --- .../controller/AsyncInstantiationController.java | 69 ++++++++++++++++++---- 1 file changed, 59 insertions(+), 10 deletions(-) (limited to 'vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java') diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java b/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java index 081e3c640..01b005c4b 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,25 +20,28 @@ package org.onap.vid.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.vid.exceptions.AccessDeniedException; import org.onap.vid.exceptions.OperationNotAllowedException; import org.onap.vid.model.ExceptionResponse; import org.onap.vid.model.JobAuditStatus; import org.onap.vid.model.ServiceInfo; import org.onap.vid.model.serviceInstantiation.ServiceInstantiation; import org.onap.vid.mso.MsoResponseWrapper2; +import org.onap.vid.properties.Features; +import org.onap.vid.roles.RoleProvider; import org.onap.vid.services.AsyncInstantiationBusinessLogic; import org.onap.vid.services.AuditService; import org.onap.vid.utils.SystemPropertiesWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.togglz.core.manager.FeatureManager; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.UUID; +import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; import static org.springframework.http.HttpStatus.METHOD_NOT_ALLOWED; @@ -51,14 +54,18 @@ public class AsyncInstantiationController extends VidRestrictedBaseController { protected final AsyncInstantiationBusinessLogic asyncInstantiationBL; private final SystemPropertiesWrapper systemPropertiesWrapper; - protected ObjectMapper objectMapper = new ObjectMapper(); + private final RoleProvider roleProvider; + + private final FeatureManager featureManager; @Autowired protected AuditService auditService; @Autowired - public AsyncInstantiationController(AsyncInstantiationBusinessLogic asyncInstantiationBL, SystemPropertiesWrapper systemPropertiesWrapper) { + public AsyncInstantiationController(AsyncInstantiationBusinessLogic asyncInstantiationBL, RoleProvider roleProvider, FeatureManager featureManager, SystemPropertiesWrapper systemPropertiesWrapper) { this.asyncInstantiationBL = asyncInstantiationBL; + this.roleProvider = roleProvider; + this.featureManager = featureManager; this.systemPropertiesWrapper = systemPropertiesWrapper; } @@ -82,14 +89,25 @@ public class AsyncInstantiationController extends VidRestrictedBaseController { public MsoResponseWrapper2> createBulkOfServices(@RequestBody ServiceInstantiation request, HttpServletRequest httpServletRequest) { //Push to DB according the model try { - LOGGER.debug(EELFLoggerDelegate.debugLogger, "incoming ServiceInstantiation request: "+ objectMapper.writeValueAsString(request)); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "incoming ServiceInstantiation request: "+ JACKSON_OBJECT_MAPPER.writeValueAsString(request)); } catch (Exception e) { LOGGER.error(EELFLoggerDelegate.errorLogger, "failed to log incoming ServiceInstantiation request ", e); } String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(httpServletRequest); - List uuids = asyncInstantiationBL.pushBulkJob(request, userId); + throwExceptionIfAccessDenied(request, httpServletRequest, userId); + List uuids = asyncInstantiationBL.pushBulkJob(request, userId); + return new MsoResponseWrapper2(200, uuids); + } + + + + @RequestMapping(value = "retryJobWithChangedData/{jobId}", method = RequestMethod.POST) + public MsoResponseWrapper2> retryJobWithChangedData(@RequestBody ServiceInstantiation request, @PathVariable(value="jobId") UUID jobId, HttpServletRequest httpServletRequest) { + + String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(httpServletRequest); + List uuids = asyncInstantiationBL.retryJob(request, jobId, userId); return new MsoResponseWrapper2(200, uuids); } @@ -105,7 +123,7 @@ public class AsyncInstantiationController extends VidRestrictedBaseController { @RequestMapping(value = "auditStatus/{jobId}", method = RequestMethod.GET) public List getJobAuditStatus(HttpServletRequest request, @PathVariable(value="jobId") UUID jobId, @RequestParam(value="source") JobAuditStatus.SourceStatus source){ - return asyncInstantiationBL.getAuditStatuses(jobId, source); + return auditService.getAuditStatuses(jobId, source); } @RequestMapping(value = "auditStatus/{jobId}/mso", method = RequestMethod.GET) @@ -114,7 +132,7 @@ public class AsyncInstantiationController extends VidRestrictedBaseController { @RequestParam(value="requestId", required = false) UUID requestId, @RequestParam(value="serviceInstanceId", required = false) UUID serviceInstanceId){ if (serviceInstanceId != null) { - return auditService.getAuditStatusFromMsoByServiceInstanceId(jobId, serviceInstanceId); + return auditService.getAuditStatusFromMsoByInstanceId(JobAuditStatus.ResourceTypeFilter.SERVICE, serviceInstanceId, jobId); } if (requestId != null){ return auditService.getAuditStatusFromMsoByRequestId(jobId, requestId); @@ -123,5 +141,36 @@ public class AsyncInstantiationController extends VidRestrictedBaseController { } + @RequestMapping(value = "auditStatus/{type}/{instanceId}/mso", method = RequestMethod.GET) + public List getAuditStatusFromMsoByInstanceId(HttpServletRequest request, + @PathVariable(value="type") JobAuditStatus.ResourceTypeFilter resourceTypeFilter, + @PathVariable(value="instanceId") UUID instanceId) { + return auditService.getAuditStatusFromMsoByInstanceId(resourceTypeFilter, instanceId, null); + } + + @RequestMapping(value = "/bulkForRetry/{jobId}", method = RequestMethod.GET) + public ServiceInstantiation getBulkForRetry(HttpServletRequest request, @PathVariable(value="jobId") UUID jobId) { + return asyncInstantiationBL.getBulkForRetry(jobId); + } + + @RequestMapping(value = "retry/{jobId}", method = RequestMethod.POST) + public MsoResponseWrapper2> retryJobRequest(HttpServletRequest httpServletRequest, + @PathVariable(value="jobId") UUID jobId) { + + String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(httpServletRequest); + List uuids = asyncInstantiationBL.retryJob(jobId, userId); + return new MsoResponseWrapper2(200, uuids); + } + + @RequestMapping(value = "/auditStatusForRetry/{trackById}", method = RequestMethod.GET) + public JobAuditStatus getResourceAuditStatus(HttpServletRequest request, @PathVariable(value="trackById") String trackById) { + return auditService.getResourceAuditStatus(trackById); + } + + private void throwExceptionIfAccessDenied(ServiceInstantiation request, HttpServletRequest httpServletRequest, String userId) { + if (featureManager.isActive(Features.FLAG_1906_INSTANTIATION_API_USER_VALIDATION) && !roleProvider.getUserRolesValidator(httpServletRequest).isServicePermitted(request.getGlobalSubscriberId(), request.getSubscriptionServiceType())) { + throw new AccessDeniedException(String.format("User %s is not allowed to make this request", userId)); + } + } } -- cgit 1.2.3-korg