From f3430368211a5eb435a56a70006831255dcdba2e Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Tue, 9 Jun 2020 12:42:46 -0400 Subject: Export SvcLogicFactory as service Expose SvcLogicFactory bean as a service so it can be reused in other microservices. Change-Id: I55a6e08ad2a4fa81a91151a3b437514fab70c96a Issue-ID: CCSDK-2096 Signed-off-by: Dan Timoney --- services/pom.xml | 121 +++++++++++++++++ .../onap/ccsdk/apps/services/SvcLogicFactory.java | 151 +++++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 services/pom.xml create mode 100644 services/src/main/java/org/onap/ccsdk/apps/services/SvcLogicFactory.java (limited to 'services') diff --git a/services/pom.xml b/services/pom.xml new file mode 100644 index 00000000..d7e60f83 --- /dev/null +++ b/services/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + + org.onap.ccsdk.parent + spring-boot-starter-parent + 2.0.0-SNAPSHOT + + + + org.onap.ccsdk.apps + services + 1.0.0-SNAPSHOT + jar + + ccsdk-apps :: services :: ${project.artifactId} + + + 1.5.0 + 2.1.13 + ${project.version} + ${maven.build.timestamp} + yyyyMMdd'T'HHmmss'Z' + + + + + io.swagger + swagger-annotations + + + org.springframework.boot + spring-boot-starter-log4j2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-data-jpa + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + org.onap.ccsdk.sli.core + dblib-provider + ${ccsdk.sli.core.version} + + + org.onap.ccsdk.sli.core + sli-common + ${ccsdk.sli.core.version} + + + org.onap.ccsdk.sli.core + sli-provider-base + ${ccsdk.sli.core.version} + + + com.google.code.gson + gson + + + org.apache.derby + derby + test + + + org.mariadb.jdbc + mariadb-java-client + + + junit + junit + test + + + org.onap.logging-analytics + logging-filter-spring + 1.6.6 + + + javax.ws.rs + javax.ws.rs-api + + + org.onap.ccsdk.sli.core + sliPluginUtils-provider + ${ccsdk.sli.core.version} + + + org.onap.ccsdk.sli.plugins + restapi-call-node-provider + ${ccsdk.sli.plugins.version} + + + org.onap.ccsdk.sli.plugins + properties-node-provider + ${ccsdk.sli.plugins.version} + + + + org.glassfish.jersey.inject + jersey-hk2 + + + + diff --git a/services/src/main/java/org/onap/ccsdk/apps/services/SvcLogicFactory.java b/services/src/main/java/org/onap/ccsdk/apps/services/SvcLogicFactory.java new file mode 100644 index 00000000..8711e7ed --- /dev/null +++ b/services/src/main/java/org/onap/ccsdk/apps/services/SvcLogicFactory.java @@ -0,0 +1,151 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - CCSDK + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.services; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.List; +import java.util.Properties; +import org.onap.ccsdk.sli.core.sli.ConfigurationException; +import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; +import org.onap.ccsdk.sli.core.sli.SvcLogicLoader; +import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; +import org.onap.ccsdk.sli.core.sli.SvcLogicStore; +import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory; +import org.onap.ccsdk.sli.core.sli.provider.base.HashMapResolver; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; +import org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder; +import org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils; +import org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils; +import org.onap.ccsdk.sli.plugins.prop.PropertiesNode; +import org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Service; + +@Configuration +@Service +public class SvcLogicFactory { + private static final Logger log = LoggerFactory.getLogger(SvcLogicFactory.class); + + @Autowired + List recorders; + + @Autowired + List plugins; + + @Bean + public SvcLogicStore getStore() throws Exception { + SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProvider() { + + @Override + public Properties getProperties() { + Properties props = new Properties(); + + + String propPath = System.getProperty("serviceLogicProperties", ""); + + if ("".equals(propPath)) { + propPath = System.getenv("SVCLOGIC_PROPERTIES"); + } + + + if ((propPath == null) || propPath.length() == 0) { + propPath = "src/main/resources/svclogic.properties"; + } + System.out.println(propPath); + try (FileInputStream fileInputStream = new FileInputStream(propPath)) { + props = new Properties(); + props.load(fileInputStream); + } catch (final IOException e) { + log.error("Failed to load properties for file: {}", propPath, + new ConfigurationException("Failed to load properties for file: " + propPath, e)); + } + return props; + } + }; + SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties()); + return store; + } + + @Bean + public SvcLogicLoader createLoader() throws Exception { + String serviceLogicDirectory = System.getProperty("serviceLogicDirectory"); + if (serviceLogicDirectory == null) { + serviceLogicDirectory = "src/main/resources"; + } + + System.out.println("serviceLogicDirectory is " + serviceLogicDirectory); + SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, getStore()); + + try { + loader.loadAndActivate(); + } catch (IOException e) { + log.error("Cannot load directed graphs", e); + } + return loader; + } + + @Bean + public SvcLogicServiceBase createService() throws Exception { + HashMapResolver resolver = new HashMapResolver(); + for (SvcLogicRecorder recorder : recorders) { + resolver.addSvcLogicRecorder(recorder.getClass().getName(), recorder); + + } + for (SvcLogicJavaPlugin plugin : plugins) { + resolver.addSvcLogicSvcLogicJavaPlugin(plugin.getClass().getName(), plugin); + + } + return new SvcLogicServiceImplBase(getStore(), resolver); + } + + @Bean + public Slf4jRecorder slf4jRecorderNode() { + return new Slf4jRecorder(); + } + + @Bean + public SliPluginUtils sliPluginUtil() { + return new SliPluginUtils(); + } + + @Bean + public SliStringUtils sliStringUtils() { + return new SliStringUtils(); + } + + @Bean + public RestapiCallNode restapiCallNode() { + return new RestapiCallNode(); + } + + @Bean + public PropertiesNode propertiesNode() { + return new PropertiesNode(); + } + +} -- cgit