diff options
Diffstat (limited to 'so-etsi-sol003-adapter-lcm/so-etsi-sol003-adapter-lcm-service/src/main/java/org/onap/so/adapters/etsisol003adapter/lcm/rest/Sol003GrantController.java')
-rw-r--r-- | so-etsi-sol003-adapter-lcm/so-etsi-sol003-adapter-lcm-service/src/main/java/org/onap/so/adapters/etsisol003adapter/lcm/rest/Sol003GrantController.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/so-etsi-sol003-adapter-lcm/so-etsi-sol003-adapter-lcm-service/src/main/java/org/onap/so/adapters/etsisol003adapter/lcm/rest/Sol003GrantController.java b/so-etsi-sol003-adapter-lcm/so-etsi-sol003-adapter-lcm-service/src/main/java/org/onap/so/adapters/etsisol003adapter/lcm/rest/Sol003GrantController.java new file mode 100644 index 0000000..8a17b68 --- /dev/null +++ b/so-etsi-sol003-adapter-lcm/so-etsi-sol003-adapter-lcm-service/src/main/java/org/onap/so/adapters/etsisol003adapter/lcm/rest/Sol003GrantController.java @@ -0,0 +1,114 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.etsisol003adapter.lcm.rest; + +import static org.onap.so.adapters.etsi.sol003.adapter.common.CommonConstants.BASE_URL; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import javax.ws.rs.core.MediaType; +import org.onap.so.adapters.etsisol003adapter.lcm.extclients.aai.AaiHelper; +import org.onap.so.adapters.etsisol003adapter.lcm.extclients.aai.AaiServiceProvider; +import org.onap.so.adapters.etsisol003adapter.lcm.extclients.vnfm.VnfmHelper; +import org.onap.so.adapters.etsisol003adapter.lcm.grant.model.GrantRequest; +import org.onap.so.adapters.etsisol003adapter.lcm.grant.model.GrantsAddResources; +import org.onap.so.adapters.etsisol003adapter.lcm.grant.model.InlineResponse201; +import org.onap.so.adapters.etsisol003adapter.lcm.grant.model.InlineResponse201AddResources; +import org.onap.so.adapters.etsisol003adapter.lcm.grant.model.InlineResponse201VimConnections; +import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.Tenant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping(value = BASE_URL, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) +public class Sol003GrantController { + + private static final Logger logger = LoggerFactory.getLogger(Sol003GrantController.class); + public final AaiServiceProvider aaiServiceProvider; + public final AaiHelper aaiHelper; + public final VnfmHelper vnfmHelper; + + @Autowired + public Sol003GrantController(final AaiServiceProvider aaiServiceProvider, final AaiHelper aaiHelper, + final VnfmHelper vnfmHelper) { + this.aaiServiceProvider = aaiServiceProvider; + this.aaiHelper = aaiHelper; + this.vnfmHelper = vnfmHelper; + } + + @GetMapping(value = "/grants/{grantId}") + public ResponseEntity<InlineResponse201> grantsGrantIdGet(@PathVariable("grantId") final String grantId) { + logger.info("Get grant received from VNFM, grant id: " + grantId); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + } + + @PostMapping(value = "/grants") + public ResponseEntity<InlineResponse201> grantsPost(@RequestBody final GrantRequest grantRequest) { + logger.info("Grant request received from VNFM: " + grantRequest); + + final InlineResponse201 grantResponse = createGrantResponse(grantRequest); + logger.info("Grant request returning to VNFM: " + grantResponse); + return new ResponseEntity<>(grantResponse, HttpStatus.CREATED); + } + + private InlineResponse201 createGrantResponse(final GrantRequest grantRequest) { + final InlineResponse201 grantResponse = new InlineResponse201(); + grantResponse.setId(UUID.randomUUID().toString()); + grantResponse.setVnfInstanceId(grantRequest.getVnfInstanceId()); + grantResponse.setVnfLcmOpOccId(grantRequest.getVnfLcmOpOccId()); + final String vnfSelfLink = grantRequest.getLinks().getVnfInstance().getHref(); + final Tenant tenant = aaiHelper + .getAssignedTenant(aaiServiceProvider.invokeQueryGenericVnf(vnfSelfLink).getGenericVnf().get(0)); + + String vimConnectionId = ""; + final InlineResponse201VimConnections vimConnection = vnfmHelper.getVimConnections(tenant); + grantResponse.addVimConnectionsItem(vimConnection); + vimConnectionId = vimConnection.getId(); + + if (grantRequest.getOperation().equals(GrantRequest.OperationEnum.INSTANTIATE)) { + grantResponse.addResources(getResources(grantRequest.getAddResources(), vimConnectionId)); + } else if (grantRequest.getOperation().equals(GrantRequest.OperationEnum.TERMINATE)) { + grantResponse.removeResources(getResources(grantRequest.getRemoveResources(), vimConnectionId)); + } + return grantResponse; + } + + private List<InlineResponse201AddResources> getResources(final List<GrantsAddResources> requestResources, + final String vimId) { + final List<InlineResponse201AddResources> resources = new ArrayList<>(); + for (final GrantsAddResources requestResource : requestResources) { + final InlineResponse201AddResources responseResource = new InlineResponse201AddResources(); + responseResource.setResourceDefinitionId(requestResource.getId()); + responseResource.setVimConnectionId(vimId); + resources.add(responseResource); + } + return resources; + } +} |