2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2018 Nokia. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 package org.onap.vid.services;
23 import com.google.common.cache.CacheBuilder;
24 import com.google.common.cache.CacheLoader;
25 import com.google.common.cache.LoadingCache;
26 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
27 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
28 import org.onap.vid.asdc.AsdcCatalogException;
29 import org.onap.vid.asdc.AsdcClient;
30 import org.onap.vid.asdc.beans.Service;
31 import org.onap.vid.asdc.parser.ToscaParser;
32 import org.onap.vid.asdc.parser.ToscaParserImpl;
33 import org.onap.vid.asdc.parser.ToscaParserImpl2;
34 import org.onap.vid.exceptions.GenericUncheckedException;
35 import org.onap.vid.model.ServiceModel;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.togglz.core.manager.FeatureManager;
39 import java.nio.file.Path;
40 import java.util.UUID;
41 import java.util.concurrent.ExecutionException;
42 import java.util.concurrent.TimeUnit;
44 import static org.onap.vid.properties.Features.FLAG_SERVICE_MODEL_CACHE;
47 * The Class VidController.
50 public class VidServiceImpl implements VidService {
54 private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(VidServiceImpl.class);
56 protected final AsdcClient asdcClient;
57 private final FeatureManager featureManager;
60 private ToscaParserImpl2 toscaParser;
61 private final LoadingCache<String, ServiceModel> serviceModelCache;
64 private class NullServiceModelException extends Exception {
65 NullServiceModelException(String modelUuid) {
66 super("Could not create service model for UUID " + modelUuid);
70 public VidServiceImpl(AsdcClient asdcClient, FeatureManager featureManager) {
71 this.asdcClient = asdcClient;
72 this.featureManager = featureManager;
74 this.serviceModelCache = CacheBuilder.newBuilder()
76 .expireAfterAccess(7, TimeUnit.DAYS)
77 .build(new CacheLoader<String, ServiceModel>() {
79 public ServiceModel load(String modelUuid) throws AsdcCatalogException, NullServiceModelException {
80 ServiceModel serviceModel = getServiceFromSdc(modelUuid);
81 if (serviceModel != null) {
84 throw new NullServiceModelException(modelUuid);
93 * @see org.onap.vid.controller.VidService#getService(java.lang.String)
96 public ServiceModel getService(String uuid) throws AsdcCatalogException {
97 if (featureManager.isActive(FLAG_SERVICE_MODEL_CACHE)) {
98 return getServiceFromCache(uuid);
100 return getServiceFromSdc(uuid);
104 private ServiceModel getServiceFromCache(String uuid) throws AsdcCatalogException {
106 return serviceModelCache.get(uuid);
107 } catch (ExecutionException e) {
108 if (e.getCause() instanceof AsdcCatalogException) {
109 throw (AsdcCatalogException) e.getCause();
110 } else if (e.getCause() instanceof NullServiceModelException) {
113 throw new GenericUncheckedException(e);
118 private ServiceModel getServiceFromSdc(String uuid) throws AsdcCatalogException {
119 final Path serviceCsar = asdcClient.getServiceToscaModel(UUID.fromString(uuid));
120 ToscaParser tosca = new ToscaParserImpl();
121 serviceCsar.toFile().getAbsolutePath();
122 ServiceModel serviceModel = null;
124 final Service asdcServiceMetadata = asdcClient.getService(UUID.fromString(uuid));
125 return getServiceModel(uuid, serviceCsar, tosca, asdcServiceMetadata);
126 } catch (Exception e) {
127 LOG.error("Failed to download and process service from SDC", e);
132 private ServiceModel getServiceModel(String uuid, Path serviceCsar, ToscaParser tosca, Service asdcServiceMetadata) throws AsdcCatalogException {
134 return toscaParser.makeServiceModel(serviceCsar, asdcServiceMetadata);
135 } catch (SdcToscaParserException e) {
136 return tosca.makeServiceModel(uuid, serviceCsar, asdcServiceMetadata);
141 public void invalidateServiceCache(){
142 serviceModelCache.invalidateAll();