diff options
author | Einat Vinouze <einat.vinouze@intl.att.com> | 2019-07-16 17:17:36 +0300 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2019-07-30 06:01:44 +0300 |
commit | e601bbdc43bae9a08e2e10c5139a6f76b47860d7 (patch) | |
tree | 1913f0b369ead3f2ea5557e5649d8281eca9871c /vid-app-common/src/main/java/org/onap/vid/controller | |
parent | 76c6ee4a697617ec4cdee2f3b48bc83136c858c5 (diff) |
Implant vid-app-common org.onap.vid.job (main and test)
Issue-ID: VID-378
Change-Id: I41b0bdc2c4e3635f3f3319b1cd63cefc61912dfc
Signed-off-by: Einat Vinouze <einat.vinouze@intl.att.com>
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/controller')
6 files changed, 174 insertions, 89 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/AaiController.java b/vid-app-common/src/main/java/org/onap/vid/controller/AaiController.java index 4a4f3d300..eee2acc51 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/AaiController.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/AaiController.java @@ -50,6 +50,7 @@ import org.onap.vid.aai.model.AaiGetPnfs.Pnf; import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse; import org.onap.vid.aai.util.AAIRestInterface; import org.onap.vid.model.VersionByInvariantIdsRequest; +import org.onap.vid.properties.Features; import org.onap.vid.roles.Role; import org.onap.vid.roles.RoleProvider; import org.onap.vid.roles.RoleValidator; @@ -68,6 +69,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.ModelAndView; +import org.togglz.core.manager.FeatureManager; @RestController @@ -80,17 +82,22 @@ public class AaiController extends RestrictedBaseController { private AAIRestInterface aaiRestInterface; private RoleProvider roleProvider; private SystemPropertiesWrapper systemPropertiesWrapper; + private FeatureManager featureManager; + @Autowired public AaiController(AaiService aaiService, AAIRestInterface aaiRestInterface, RoleProvider roleProvider, - SystemPropertiesWrapper systemPropertiesWrapper) { + SystemPropertiesWrapper systemPropertiesWrapper, + FeatureManager featureManager + ) { this.aaiService = aaiService; this.aaiRestInterface = aaiRestInterface; this.roleProvider = roleProvider; this.systemPropertiesWrapper = systemPropertiesWrapper; + this.featureManager = featureManager; } @RequestMapping(value = {"/subscriberSearch"}, method = RequestMethod.GET) @@ -261,13 +268,13 @@ public class AaiController extends RestrictedBaseController { } @RequestMapping(value = "/aai_sub_details/{subscriberId}", method = RequestMethod.GET) - public ResponseEntity<String> GetSubscriberDetails(HttpServletRequest request, - @PathVariable("subscriberId") String subscriberId) throws IOException { + public ResponseEntity<String> getSubscriberDetails(HttpServletRequest request, @PathVariable("subscriberId") String subscriberId, + @RequestParam(value="omitServiceInstances", required = false, defaultValue = "false") boolean omitServiceInstances) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); ResponseEntity responseEntity; List<Role> roles = roleProvider.getUserRoles(request); RoleValidator roleValidator = RoleValidator.by(roles); - AaiResponse subscriberData = aaiService.getSubscriberData(subscriberId, roleValidator); + AaiResponse subscriberData = aaiService.getSubscriberData(subscriberId, roleValidator, featureManager.isActive(Features.FLAG_1906_AAI_SUB_DETAILS_REDUCE_DEPTH) && omitServiceInstances); String httpMessage = subscriberData.getT() != null ? objectMapper.writeValueAsString(subscriberData.getT()) : subscriberData.getErrorMessage(); diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/AaiServiceInstanceStandardQueryController.java b/vid-app-common/src/main/java/org/onap/vid/controller/AaiServiceInstanceStandardQueryController.java index 8f56f7795..015f8dc96 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/AaiServiceInstanceStandardQueryController.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/AaiServiceInstanceStandardQueryController.java @@ -21,48 +21,54 @@ package org.onap.vid.controller; -import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.Network; -import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.ServiceInstance; -import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.Vlan; -import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.Vnf; -import org.onap.vid.aai.util.ServiceInstanceStandardQuery; +import static java.util.stream.Collectors.toList; + +import com.google.common.collect.ImmutableMap; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import org.apache.commons.text.StrSubstitutor; import org.onap.vid.asdc.AsdcCatalogException; import org.onap.vid.exceptions.GenericUncheckedException; import org.onap.vid.model.ServiceModel; import org.onap.vid.model.VidNotions; +import org.onap.vid.model.aaiTree.AAITreeNode; +import org.onap.vid.model.aaiTree.NodeType; import org.onap.vid.properties.Features; +import org.onap.vid.services.AAIServiceTree; import org.onap.vid.services.VidService; -import org.onap.vid.utils.Multival; +import org.onap.vid.utils.Tree; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.togglz.core.manager.FeatureManager; -import javax.servlet.http.HttpServletRequest; -import java.util.Collection; -import java.util.Collections; -import java.util.UUID; - -import static java.util.stream.Collectors.toList; - @RestController @RequestMapping(AaiServiceInstanceStandardQueryController.AAI_STANDARD_QUERY) public class AaiServiceInstanceStandardQueryController extends VidRestrictedBaseController { - public static final String AAI_STANDARD_QUERY = "aai/standardQuery"; + static final String AAI_STANDARD_QUERY = "aai/standardQuery"; + private static final String SERVICE_INSTANCE_URI_TEMPLATE = "" + + "business/customers/customer/${global-customer-id}" + + "/service-subscriptions/service-subscription/${service-type}" + + "/service-instances/service-instance/${service-instance-id}"; - private final ServiceInstanceStandardQuery serviceInstanceStandardQuery; private final FeatureManager featureManager; private final VidService sdcService; + private final AAIServiceTree aaiServiceTree; @Autowired - public AaiServiceInstanceStandardQueryController(FeatureManager featureManager, ServiceInstanceStandardQuery serviceInstanceStandardQuery, VidService sdcService) { + public AaiServiceInstanceStandardQueryController(FeatureManager featureManager, + VidService sdcService, AAIServiceTree aaiServiceTree) { this.featureManager = featureManager; - this.serviceInstanceStandardQuery = serviceInstanceStandardQuery; this.sdcService = sdcService; + this.aaiServiceTree = aaiServiceTree; } @RequestMapping(value = "vlansByNetworks", method = RequestMethod.GET) @@ -80,54 +86,50 @@ public class AaiServiceInstanceStandardQueryController extends VidRestrictedBase return new VlansByNetworksHierarchy(); } - final ServiceInstance serviceInstance = - serviceInstanceStandardQuery.fetchServiceInstance(globalCustomerId, serviceType, serviceInstanceId); + Tree<AAIServiceTree.AaiRelationship> pathsToSearch = new Tree<>(new AAIServiceTree.AaiRelationship(NodeType.SERVICE_INSTANCE)); + pathsToSearch.addPath(AAIServiceTree.toAaiRelationshipList(NodeType.GENERIC_VNF, NodeType.NETWORK, NodeType.VLAN_TAG)); + pathsToSearch.addPath(AAIServiceTree.toAaiRelationshipList(NodeType.NETWORK, NodeType.VLAN_TAG)); - Multival<ServiceInstance, Multival<Vnf, Multival<Network, Vlan>>> l3NetworksWithVlansForVnfForService = fetchVnfsForService(serviceInstance); - Multival<ServiceInstance, Multival<Network, Vlan>> l3NetworksWithVlansForService = fetchNetworksForService(serviceInstance); + AAITreeNode aaiTree = aaiServiceTree.buildAAITree(getServiceInstanceUri(globalCustomerId, serviceType, serviceInstanceId), + null, HttpMethod.GET, pathsToSearch, false).get(0); // translate to response's format return new VlansByNetworksHierarchy( - l3NetworksWithVlansForService.getValues().stream().map(this::translateNetworksFormat - ).collect(toList()), - - l3NetworksWithVlansForVnfForService.getValues().stream().map(vnfWithNetworks -> - new VnfVlansByNetworks(vnfWithNetworks.getKey().getVnfId(), - vnfWithNetworks.getValues().stream().map(this::translateNetworksFormat - ).collect(toList()) - ) - ).collect(toList()) + aaiTree.getChildren().stream() + .filter(child -> child.getType() == NodeType.NETWORK) + .map(this::translateNetworksFormat) + .collect(toList()), + + aaiTree.getChildren().stream() + .filter(child -> child.getType() == NodeType.GENERIC_VNF) + .map(vnf -> new VnfVlansByNetworks(vnf.getId(), + vnf.getChildren().stream() + .map(this::translateNetworksFormat) + .collect(toList()) + )) + .collect(toList()) ); } - private Multival<ServiceInstance, Multival<Vnf, Multival<Network, Vlan>>> fetchVnfsForService(ServiceInstance serviceInstance) { - final Multival<ServiceInstance, Vnf> vnfsForService = - serviceInstanceStandardQuery.fetchRelatedVnfs(serviceInstance); - - final Multival<ServiceInstance, Multival<Vnf, Network>> vnfsWithL3NetworksForService = - vnfsForService.mapEachVal(vnf -> serviceInstanceStandardQuery.fetchRelatedL3Networks("vnf", vnf)); - - return vnfsWithL3NetworksForService.mapEachVal(vnfMulti-> - vnfMulti.mapEachVal(serviceInstanceStandardQuery::fetchRelatedVlanTags) - ); + private String getServiceInstanceUri(String globalCustomerId, String serviceType, String serviceInstanceId) { + return new StrSubstitutor(ImmutableMap.of( + "global-customer-id", globalCustomerId, + "service-type", serviceType, + "service-instance-id", serviceInstanceId + )).replace(SERVICE_INSTANCE_URI_TEMPLATE); } - private Multival<ServiceInstance, Multival<Network, Vlan>> fetchNetworksForService(ServiceInstance serviceInstance) { - final Multival<ServiceInstance, Network> l3NetworksForService = - serviceInstanceStandardQuery.fetchRelatedL3Networks("service", serviceInstance); - - return l3NetworksForService.mapEachVal(serviceInstanceStandardQuery::fetchRelatedVlanTags); - } - - private NetworksToVlans translateNetworksFormat(Multival<Network, Vlan> networkWithVlan) { + private NetworksToVlans translateNetworksFormat(AAITreeNode networkWithVlan) { return new NetworksToVlans( - networkWithVlan.getKey().getNetworkId(), - networkWithVlan.getKey().getNetworkName(), - networkWithVlan.getKey().getNetworkType(), - networkWithVlan.getKey().getOrchestrationStatus(), - networkWithVlan.getValues().stream().map( - vlan -> new NetworksToVlans.Vlan(vlan.getVlanIdInner()) + networkWithVlan.getId(), + networkWithVlan.getName(), + Objects.toString(networkWithVlan.getAdditionalProperties().get("network-type"), null), + networkWithVlan.getOrchestrationStatus(), + networkWithVlan.getChildren().stream().map( + vlan -> new NetworksToVlans.Vlan( + Objects.toString(vlan.getAdditionalProperties().get("vlan-id-outer"), null) + ) ).collect(toList()) ); } @@ -138,8 +140,8 @@ public class AaiServiceInstanceStandardQueryController extends VidRestrictedBase throw new GenericUncheckedException("Internal error while fetching Service Model: " + sdcModelUuid); } VidNotions.ModelCategory serviceModelCategory = serviceModel.getService().getVidNotions().getModelCategory(); - return serviceModelCategory.equals(VidNotions.ModelCategory.IS_5G_PROVIDER_NETWORK_MODEL) || - serviceModelCategory.equals(VidNotions.ModelCategory.IS_5G_FABRIC_CONFIGURATION_MODEL); + return (serviceModelCategory == VidNotions.ModelCategory.IS_5G_PROVIDER_NETWORK_MODEL) || + (serviceModelCategory == VidNotions.ModelCategory.IS_5G_FABRIC_CONFIGURATION_MODEL); } protected static class VlansByNetworksHierarchy { @@ -182,10 +184,10 @@ public class AaiServiceInstanceStandardQueryController extends VidRestrictedBase } private static class Vlan { - public final String vlanIdInner; + public final String vlanIdOuter; - private Vlan(String vlanIdInner) { - this.vlanIdInner = vlanIdInner; + private Vlan(String vlanIdOuter) { + this.vlanIdOuter = vlanIdOuter; } } 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<List<String>> 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<UUID> uuids = asyncInstantiationBL.pushBulkJob(request, userId); + throwExceptionIfAccessDenied(request, httpServletRequest, userId); + List<UUID> uuids = asyncInstantiationBL.pushBulkJob(request, userId); + return new MsoResponseWrapper2(200, uuids); + } + + + + @RequestMapping(value = "retryJobWithChangedData/{jobId}", method = RequestMethod.POST) + public MsoResponseWrapper2<List<String>> retryJobWithChangedData(@RequestBody ServiceInstantiation request, @PathVariable(value="jobId") UUID jobId, HttpServletRequest httpServletRequest) { + + String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(httpServletRequest); + List<UUID> 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<JobAuditStatus> 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<JobAuditStatus> 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<List<UUID>> retryJobRequest(HttpServletRequest httpServletRequest, + @PathVariable(value="jobId") UUID jobId) { + + String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(httpServletRequest); + List<UUID> 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)); + } + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/MsoConfig.java b/vid-app-common/src/main/java/org/onap/vid/controller/MsoConfig.java index 8d5fbbdbb..20cf6f038 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/MsoConfig.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/MsoConfig.java @@ -56,8 +56,8 @@ public class MsoConfig { @Bean - public MsoBusinessLogic getMsoBusinessLogic(MsoInterface msoClient, FeatureManager featureManager){ - return new MsoBusinessLogicImpl(msoClient, featureManager); + public MsoBusinessLogic getMsoBusinessLogic(MsoInterface msoClient){ + return new MsoBusinessLogicImpl(msoClient); } @Bean diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/MsoController.java b/vid-app-common/src/main/java/org/onap/vid/controller/MsoController.java index db3a21910..fc718f0d2 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/MsoController.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/MsoController.java @@ -20,9 +20,9 @@ package org.onap.vid.controller; +import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; import static org.onap.vid.utils.Logging.getMethodName; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.LinkedHashMap; import java.util.List; @@ -31,10 +31,14 @@ import javax.servlet.http.HttpServletResponse; import org.onap.portalsdk.core.controller.RestrictedBaseController; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.vid.model.ExceptionResponse; +import org.onap.vid.model.RequestReferencesContainer; import org.onap.vid.model.SoftDeleteRequest; import org.onap.vid.mso.MsoBusinessLogic; import org.onap.vid.mso.MsoResponseWrapper; import org.onap.vid.mso.MsoResponseWrapper2; +import org.onap.vid.mso.RestMsoImplementation; +import org.onap.vid.mso.RestObject; +import org.onap.vid.mso.rest.MsoRestClientNew; import org.onap.vid.mso.rest.Request; import org.onap.vid.mso.rest.RequestDetails; import org.onap.vid.mso.rest.RequestDetailsWrapper; @@ -82,11 +86,13 @@ public class MsoController extends RestrictedBaseController { public static final String START_LOG = " start"; private final MsoBusinessLogic msoBusinessLogic; + private final RestMsoImplementation restMso; private final CloudOwnerService cloudOwnerService; @Autowired - public MsoController(MsoBusinessLogic msoBusinessLogic, CloudOwnerService cloudOwnerService) { + public MsoController(MsoBusinessLogic msoBusinessLogic, MsoRestClientNew msoClientInterface, CloudOwnerService cloudOwnerService) { this.msoBusinessLogic = msoBusinessLogic; + this.restMso = msoClientInterface; this.cloudOwnerService = cloudOwnerService; } @@ -678,30 +684,35 @@ public class MsoController extends RestrictedBaseController { @RequestMapping(value = "/mso_activate_fabric_configuration/{serviceInstanceId}", method = RequestMethod.POST) public MsoResponseWrapper2 activateFabricConfiguration( - @PathVariable("serviceInstanceId") String serviceInstanceId, - @RequestBody RequestDetails requestDetails) { + @PathVariable("serviceInstanceId") String serviceInstanceId , + @RequestBody RequestDetails requestDetails) { String methodName = "activateFabricConfiguration"; LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + START_LOG); - return msoBusinessLogic.activateFabricConfiguration(serviceInstanceId, requestDetails); + String path = msoBusinessLogic.getActivateFabricConfigurationPath(serviceInstanceId); + RestObject<RequestReferencesContainer> msoResponse = restMso.PostForObject(requestDetails, path, RequestReferencesContainer.class); + + return new MsoResponseWrapper2<>(msoResponse); } @RequestMapping(value = "/mso_vfmodule_soft_delete/{serviceInstanceId}/{vnfInstanceId}/{vfModuleInstanceId}", method = RequestMethod.POST) public MsoResponseWrapper2 deactivateAndCloudDelete( - @PathVariable("serviceInstanceId") String serviceInstanceId, - @PathVariable("vnfInstanceId") String vnfInstanceId, - @PathVariable("vfModuleInstanceId") String vfModuleInstanceId, - @RequestBody SoftDeleteRequest softDeleteRequest) { + @PathVariable("serviceInstanceId") String serviceInstanceId, + @PathVariable("vnfInstanceId") String vnfInstanceId, + @PathVariable("vfModuleInstanceId") String vfModuleInstanceId, + @RequestBody SoftDeleteRequest softDeleteRequest) { String methodName = "deactivateAndCloudDelete"; LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + START_LOG); + String path = msoBusinessLogic.getDeactivateAndCloudDeletePath(serviceInstanceId, vnfInstanceId, vfModuleInstanceId); RequestDetails requestDetails = msoBusinessLogic.buildRequestDetailsForSoftDelete(softDeleteRequest); cloudOwnerService.enrichRequestWithCloudOwner(requestDetails); - return msoBusinessLogic - .deactivateAndCloudDelete(serviceInstanceId, vnfInstanceId, vfModuleInstanceId, requestDetails); + RestObject<RequestReferencesContainer> msoResponse = restMso.PostForObject(new org.onap.vid.changeManagement.RequestDetailsWrapper<>(requestDetails), path, RequestReferencesContainer.class); + + return new MsoResponseWrapper2<>(msoResponse); } /** @@ -723,7 +734,7 @@ public class MsoController extends RestrictedBaseController { exceptionResponse.setException(e.getClass().toString().replaceFirst("^.*\\.", "")); exceptionResponse.setMessage(e.getMessage()); - response.getWriter().write(new ObjectMapper().writeValueAsString(exceptionResponse)); + response.getWriter().write(JACKSON_OBJECT_MAPPER.writeValueAsString(exceptionResponse)); response.flushBuffer(); } diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java b/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java index 8d55c62c6..6f4ce4ddb 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java @@ -21,6 +21,8 @@ package org.onap.vid.controller; +import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; + import static org.apache.commons.lang3.StringUtils.isEmpty; import com.fasterxml.jackson.core.JsonProcessingException; @@ -29,6 +31,7 @@ import io.joshworks.restclient.http.mapper.ObjectMapper; import java.io.File; import java.io.IOException; import javax.servlet.ServletContext; +import java.util.concurrent.Executors; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.aai.AaiClient; import org.onap.vid.aai.AaiClientInterface; @@ -54,6 +57,7 @@ import org.onap.vid.asdc.rest.SdcRestClient; import org.onap.vid.client.SyncRestClient; import org.onap.vid.client.SyncRestClientInterface; import org.onap.vid.properties.AsdcClientConfiguration; +import org.onap.vid.properties.VidProperties; import org.onap.vid.scheduler.SchedulerService; import org.onap.vid.scheduler.SchedulerServiceImpl; import org.onap.vid.services.AAIServiceTree; @@ -73,6 +77,12 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import javax.servlet.ServletContext; +import java.io.File; +import java.io.IOException; +import java.util.concurrent.ExecutorService; + @EnableSwagger2 @Configuration public class WebConfig { @@ -95,8 +105,8 @@ public class WebConfig { @Bean public AaiService getAaiService(AaiClientInterface aaiClient, AaiOverTLSClientInterface aaiOverTLSClient, - AaiResponseTranslator aaiResponseTranslator, AAITreeNodeBuilder aaiTreeNode, AAIServiceTree aaiServiceTree) { - return new AaiServiceImpl(aaiClient, aaiOverTLSClient, aaiResponseTranslator, aaiTreeNode, aaiServiceTree); + AaiResponseTranslator aaiResponseTranslator, AAITreeNodeBuilder aaiTreeNode, AAIServiceTree aaiServiceTree, ExecutorService executorService) { + return new AaiServiceImpl(aaiClient, aaiOverTLSClient, aaiResponseTranslator, aaiTreeNode, aaiServiceTree, executorService); } @Bean @@ -223,4 +233,10 @@ public class WebConfig { .paths(PathSelectors.any()) .build(); } + + @Bean + public ExecutorService executorService() { + int threadsCount = defaultIfNull(Integer.parseInt(SystemProperties.getProperty(VidProperties.VID_THREAD_COUNT)), 1); + return Executors.newFixedThreadPool(threadsCount); + } } |