2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020 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.etsi.sol003.adapter.packagemanagement.subscriptionmanagement;
23 import static org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.SubscriptionAuthentication.AuthTypeEnum.BASIC;
24 import static org.slf4j.LoggerFactory.getLogger;
26 import java.security.GeneralSecurityException;
27 import java.util.ArrayList;
28 import java.util.List;
30 import java.util.Objects;
31 import java.util.Optional;
32 import org.apache.commons.lang3.tuple.ImmutablePair;
33 import org.onap.so.adapters.etsi.sol003.adapter.common.VnfmAdapterUrlProvider;
34 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.EtsiCatalogServiceProvider;
35 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.BasicAuth;
36 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.NsdmSubscription;
37 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.PkgmSubscription;
38 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.InlineResponse201;
39 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.PkgmSubscriptionRequest;
40 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.SubscriptionsLinks;
41 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.model.VnfPackagesLinksSelf;
42 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.rest.exceptions.ConversionFailedException;
43 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.rest.exceptions.InternalServerErrorException;
44 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.rest.exceptions.SubscriptionNotFoundException;
45 import org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.subscriptionmanagement.cache.PackageManagementCacheServiceProvider;
46 import org.slf4j.Logger;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.core.convert.ConversionService;
49 import org.springframework.stereotype.Service;
52 * Manages package management subscriptions from the VNFMs
54 * @author Ronan Kenny (ronan.kenny@est.tech)
55 * @author Gareth Roper (gareth.roper@est.tech)
58 public class SubscriptionManager {
60 private static final Logger logger = getLogger(SubscriptionManager.class);
61 private final PackageManagementCacheServiceProvider packageManagementCacheServiceProvider;
62 private final ConversionService conversionService;
63 private final EtsiCatalogServiceProvider etsiCatalogServiceProvider;
64 private final VnfmAdapterUrlProvider vnfmAdapterUrlProvider;
67 public SubscriptionManager(final PackageManagementCacheServiceProvider packageManagementCacheServiceProvider,
68 final ConversionService conversionService, final EtsiCatalogServiceProvider etsiCatalogServiceProvider,
69 final VnfmAdapterUrlProvider vnfmAdapterUrlProvider) {
70 this.packageManagementCacheServiceProvider = packageManagementCacheServiceProvider;
71 this.conversionService = conversionService;
72 this.etsiCatalogServiceProvider = etsiCatalogServiceProvider;
73 this.vnfmAdapterUrlProvider = vnfmAdapterUrlProvider;
76 public Optional<InlineResponse201> createSubscription(final PkgmSubscriptionRequest pkgmSubscriptionRequest)
77 throws GeneralSecurityException {
79 final org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.PkgmSubscriptionRequest etsiCatalogManagerSubscriptionRequest =
80 buildEtsiCatalogManagerPkgmSubscriptionRequest(pkgmSubscriptionRequest);
82 final Optional<PkgmSubscription> optionalEtsiCatalogManagerSubscription =
83 etsiCatalogServiceProvider.postSubscription(etsiCatalogManagerSubscriptionRequest);
85 if (optionalEtsiCatalogManagerSubscription.isPresent()) {
86 final PkgmSubscription etsiCatalogManagerSubscription = optionalEtsiCatalogManagerSubscription.get();
87 logger.debug("postPkgmSubscriptionRequest Response SubscriptionId: {}",
88 Objects.requireNonNull(etsiCatalogManagerSubscription.getId()));
89 final String subscriptionId = etsiCatalogManagerSubscription.getId();
91 packageManagementCacheServiceProvider.addSubscription(subscriptionId, pkgmSubscriptionRequest);
93 final InlineResponse201 response = new InlineResponse201();
94 response.setId(subscriptionId);
95 response.setFilter(pkgmSubscriptionRequest.getFilter());
96 response.setCallbackUri(vnfmAdapterUrlProvider.getSubscriptionUriString(subscriptionId));
97 response.setLinks(new SubscriptionsLinks()
98 .self(new VnfPackagesLinksSelf().href(getSubscriptionUri(subscriptionId).toString())));
100 return Optional.of(response);
102 throw new InternalServerErrorException(
103 "Received empty response from POST to ETSI Catalog Manager Subscription Endpoint.");
106 public Optional<String> getSubscriptionId(final PkgmSubscriptionRequest pkgmSubscriptionRequest) {
107 return packageManagementCacheServiceProvider.getSubscriptionId(pkgmSubscriptionRequest);
110 public Optional<InlineResponse201> getSubscription(final String subscriptionId) {
112 logger.debug("Checking if subscrition with id: {} exists in ETSI Catalog Manager", subscriptionId);
113 final Optional<NsdmSubscription> etsiCatalogSubscriptionOption =
114 etsiCatalogServiceProvider.getSubscription(subscriptionId);
116 if (!etsiCatalogSubscriptionOption.isPresent()) {
117 logger.debug("Unable to find subscription in ETSI Catalog Manager using id: {}", subscriptionId);
118 if (packageManagementCacheServiceProvider.getSubscription(subscriptionId).isPresent()) {
119 logger.debug("will remove subcription with id: {} from local cache", subscriptionId);
120 packageManagementCacheServiceProvider.deleteSubscription(subscriptionId);
124 final Optional<PkgmSubscriptionRequest> optional =
125 packageManagementCacheServiceProvider.getSubscription(subscriptionId);
126 if (optional.isPresent()) {
127 final PkgmSubscriptionRequest subscription = optional.get();
128 return Optional.of(getInlineResponse2002(subscriptionId, subscription));
130 return Optional.empty();
133 public List<InlineResponse201> getSubscriptions() {
134 final Map<String, PkgmSubscriptionRequest> subscriptions =
135 packageManagementCacheServiceProvider.getSubscriptions();
136 final List<InlineResponse201> response = new ArrayList<>();
137 subscriptions.forEach((key, value) -> {
138 final Optional<InlineResponse201> optional = getSubscription(key);
139 if (optional.isPresent()) {
140 response.add(optional.get());
146 public boolean deleteSubscription(final String subscriptionId) {
147 if (packageManagementCacheServiceProvider.getSubscription(subscriptionId).isPresent()) {
149 if (etsiCatalogServiceProvider.deleteSubscription(subscriptionId)) {
150 return packageManagementCacheServiceProvider.deleteSubscription(subscriptionId);
152 } catch (final SubscriptionNotFoundException subscriptionNotFoundException) {
154 "Unable to find subscription in ETSI Catalog Manager using id: {} will delete it from local cache",
156 return packageManagementCacheServiceProvider.deleteSubscription(subscriptionId);
162 public URI getSubscriptionUri(final String subscriptionId) {
163 return vnfmAdapterUrlProvider.getSubscriptionUri(subscriptionId);
166 public Optional<PkgmSubscriptionRequest> getSubscriptionRequest(final String subscriptionId) {
167 return packageManagementCacheServiceProvider.getSubscription(subscriptionId);
170 private InlineResponse201 getInlineResponse2002(final String id, final PkgmSubscriptionRequest subscription) {
171 return new InlineResponse201().id(id).filter(subscription.getFilter())
172 .callbackUri(subscription.getCallbackUri());
175 private org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.PkgmSubscriptionRequest buildEtsiCatalogManagerPkgmSubscriptionRequest(
176 final PkgmSubscriptionRequest pkgmSubscriptionRequest) throws GeneralSecurityException {
178 final org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.PkgmSubscriptionRequest etsiCatalogManagerSubscriptionRequest;
180 etsiCatalogManagerSubscriptionRequest = conversionService.convert(pkgmSubscriptionRequest,
181 org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.PkgmSubscriptionRequest.class);
182 } catch (final org.springframework.core.convert.ConversionException conversionException) {
183 logger.error(conversionException.getMessage());
184 throw new ConversionFailedException(
185 "Could not convert Sol003 PkgmSubscriptionRequest to ETSI-Catalog Manager PkgmSubscriptionRequest");
186 } catch (final Exception exception) {
187 logger.error(exception.getMessage());
188 throw new InternalServerErrorException(
189 "Could not convert Sol003 PkgmSubscriptionRequest to ETSI-Catalog Manager PkgmSubscriptionRequest");
192 if (etsiCatalogManagerSubscriptionRequest != null) {
193 etsiCatalogManagerSubscriptionRequest
194 .setCallbackUri(vnfmAdapterUrlProvider.getEtsiSubscriptionNotificationBaseUrl());
196 final ImmutablePair<String, String> immutablePair = vnfmAdapterUrlProvider.getDecryptAuth();
197 if (!immutablePair.equals(ImmutablePair.nullPair())) {
198 etsiCatalogManagerSubscriptionRequest.setAuthentication(
199 new org.onap.so.adapters.etsi.sol003.adapter.packagemanagement.extclients.etsicatalog.model.SubscriptionAuthentication()
200 .addAuthTypeItem(BASIC).paramsBasic(new BasicAuth().userName(immutablePair.getLeft())
201 .password(immutablePair.getRight())));
203 return etsiCatalogManagerSubscriptionRequest;
205 throw new ConversionFailedException(
206 "Failed to convert Sol003 PkgmSubscriptionRequest to ETSI-Catalog Manager PkgmSubscriptionRequest");