2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019 Nordix Foundation.
 
   4  * ================================================================================
 
   5  * Licensed under the Apache License, Version 2.0 (the "License");
 
   6  * you may not use this file except in compliance with the License.
 
   7  * You may obtain a copy of the License at
 
   9  *      http://www.apache.org/licenses/LICENSE-2.0
 
  11  * Unless required by applicable law or agreed to in writing, software
 
  12  * distributed under the License is distributed on an "AS IS" BASIS,
 
  13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  14  * See the License for the specific language governing permissions and
 
  15  * limitations under the License.
 
  17  * SPDX-License-Identifier: Apache-2.0
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.so.adapters.vnfmadapter.rest;
 
  23 import static org.onap.so.adapters.vnfmadapter.Constants.BASE_URL;
 
  24 import java.util.ArrayList;
 
  25 import java.util.List;
 
  26 import java.util.UUID;
 
  27 import javax.ws.rs.core.MediaType;
 
  28 import org.onap.so.adapters.vnfmadapter.extclients.aai.AaiHelper;
 
  29 import org.onap.so.adapters.vnfmadapter.extclients.aai.AaiServiceProvider;
 
  30 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.VnfmHelper;
 
  31 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantRequest;
 
  32 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsAddResources;
 
  33 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201;
 
  34 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201AddResources;
 
  35 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201VimConnections;
 
  36 import org.onap.vnfmadapter.v1.model.Tenant;
 
  37 import org.slf4j.Logger;
 
  38 import org.slf4j.LoggerFactory;
 
  39 import org.springframework.beans.factory.annotation.Autowired;
 
  40 import org.springframework.http.HttpStatus;
 
  41 import org.springframework.http.ResponseEntity;
 
  42 import org.springframework.stereotype.Controller;
 
  43 import org.springframework.web.bind.annotation.GetMapping;
 
  44 import org.springframework.web.bind.annotation.PathVariable;
 
  45 import org.springframework.web.bind.annotation.PostMapping;
 
  46 import org.springframework.web.bind.annotation.RequestBody;
 
  47 import org.springframework.web.bind.annotation.RequestMapping;
 
  50 @RequestMapping(value = BASE_URL, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
 
  51 public class Sol003GrantController {
 
  53     private static final Logger logger = LoggerFactory.getLogger(Sol003GrantController.class);
 
  54     public final AaiServiceProvider aaiServiceProvider;
 
  55     public final AaiHelper aaiHelper;
 
  56     public final VnfmHelper vnfmHelper;
 
  59     public Sol003GrantController(final AaiServiceProvider aaiServiceProvider, final AaiHelper aaiHelper,
 
  60             final VnfmHelper vnfmHelper) {
 
  61         this.aaiServiceProvider = aaiServiceProvider;
 
  62         this.aaiHelper = aaiHelper;
 
  63         this.vnfmHelper = vnfmHelper;
 
  66     @GetMapping(value = "/grants/{grantId}")
 
  67     public ResponseEntity<InlineResponse201> grantsGrantIdGet(@PathVariable("grantId") final String grantId) {
 
  68         logger.info("Get grant received from VNFM, grant id: " + grantId);
 
  69         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
  72     @PostMapping(value = "/grants")
 
  73     public ResponseEntity<InlineResponse201> grantsPost(@RequestBody final GrantRequest grantRequest) {
 
  74         logger.info("Grant request received from VNFM: " + grantRequest);
 
  76         final InlineResponse201 grantResponse = createGrantResponse(grantRequest);
 
  77         logger.info("Grant request returning to VNFM: " + grantResponse);
 
  78         return new ResponseEntity<>(grantResponse, HttpStatus.CREATED);
 
  81     private InlineResponse201 createGrantResponse(final GrantRequest grantRequest) {
 
  82         final InlineResponse201 grantResponse = new InlineResponse201();
 
  83         grantResponse.setId(UUID.randomUUID().toString());
 
  84         grantResponse.setVnfInstanceId(grantRequest.getVnfInstanceId());
 
  85         grantResponse.setVnfLcmOpOccId(grantRequest.getVnfLcmOpOccId());
 
  86         final String vnfSelfLink = grantRequest.getLinks().getVnfInstance().getHref();
 
  87         final Tenant tenant = aaiHelper
 
  88                 .getAssignedTenant(aaiServiceProvider.invokeQueryGenericVnf(vnfSelfLink).getGenericVnf().get(0));
 
  90         String vimConnectionId = "";
 
  91         final InlineResponse201VimConnections vimConnection = vnfmHelper.getVimConnections(tenant);
 
  92         grantResponse.addVimConnectionsItem(vimConnection);
 
  93         vimConnectionId = vimConnection.getId();
 
  95         if (grantRequest.getOperation().equals(GrantRequest.OperationEnum.INSTANTIATE)) {
 
  96             grantResponse.addResources(getResources(grantRequest.getAddResources(), vimConnectionId));
 
  97         } else if (grantRequest.getOperation().equals(GrantRequest.OperationEnum.TERMINATE)) {
 
  98             grantResponse.removeResources(getResources(grantRequest.getRemoveResources(), vimConnectionId));
 
 100         return grantResponse;
 
 103     private List<InlineResponse201AddResources> getResources(final List<GrantsAddResources> requestResources,
 
 104             final String vimId) {
 
 105         final List<InlineResponse201AddResources> resources = new ArrayList<>();
 
 106         for (final GrantsAddResources requestResource : requestResources) {
 
 107             final InlineResponse201AddResources responseResource = new InlineResponse201AddResources();
 
 108             responseResource.setResourceDefinitionId(requestResource.getId());
 
 109             responseResource.setVimConnectionId(vimId);
 
 110             resources.add(responseResource);