diff options
8 files changed, 234 insertions, 57 deletions
diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 1f0781b63..32d1ef737 100755 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -146,6 +146,11 @@ <artifactId>utils-installer</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.onap.ccsdk.sli.core</groupId> + <artifactId>sli-recording</artifactId> + <version>${project.version}</version> + </dependency> </dependencies> </dependencyManagement> diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java new file mode 100644 index 000000000..d33312784 --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java @@ -0,0 +1,52 @@ +package org.onap.ccsdk.sli.core.sli.provider.base;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;
+import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
+import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
+
+public class HashMapResolver implements SvcLogicResolver {
+ Map<String, SvcLogicResource> svcLogicResourceMap = new HashMap<String, SvcLogicResource>();
+ Map<String, SvcLogicJavaPlugin> svcLogicJavaPluginMap = new HashMap<String, SvcLogicJavaPlugin>();
+ Map<String, SvcLogicAdaptor> adaptorMap = new HashMap<String, SvcLogicAdaptor>();
+ Map<String, SvcLogicRecorder> recorderMap = new HashMap<String, SvcLogicRecorder>();
+
+ @Override
+ public SvcLogicResource getSvcLogicResource(String resourceName) {
+ return svcLogicResourceMap.get(resourceName);
+ }
+
+ @Override
+ public SvcLogicRecorder getSvcLogicRecorder(String recorderName) {
+ return recorderMap.get(recorderName);
+ }
+
+ @Override
+ public SvcLogicJavaPlugin getSvcLogicJavaPlugin(String pluginName) {
+ return svcLogicJavaPluginMap.get(pluginName);
+ }
+
+ @Override
+ public SvcLogicAdaptor getSvcLogicAdaptor(String adaptorName) {
+ return adaptorMap.get(adaptorName);
+ }
+
+ public void addSvcLogicAdaptor(String adaptorName, SvcLogicAdaptor adaptor) {
+ adaptorMap.put(adaptorName, adaptor);
+ }
+
+ public void addSvcLogicRecorder(String recorderName, SvcLogicRecorder recorder) {
+ recorderMap.put(recorderName, recorder);
+ }
+
+ public void addSvcLogicSvcLogicJavaPlugin(String pluginName, SvcLogicJavaPlugin plugin) {
+ svcLogicJavaPluginMap.put(pluginName, plugin);
+ }
+
+ public void addSvcLogicResource(String resourceName, SvcLogicResource resource) {
+ svcLogicResourceMap.put(resourceName, resource);
+ }
+
+}
diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java new file mode 100644 index 000000000..ddf464fe7 --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java @@ -0,0 +1,66 @@ +package org.onap.ccsdk.sli.core.sli.provider.base; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; +import org.onap.ccsdk.sli.core.sli.SvcLogicStore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InMemorySvcLogicStore implements SvcLogicStore { + private static final Logger logger = LoggerFactory.getLogger(InMemorySvcLogicStore.class); + public Map<String, SvcLogicGraph> graphStore; + + public InMemorySvcLogicStore() { + graphStore = new HashMap<String, SvcLogicGraph>(); + } + + @Override + public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + return graphStore.containsKey(storeId); + } + + @Override + public SvcLogicGraph fetch(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + return graphStore.get(storeId); + } + + @Override + public void store(SvcLogicGraph graph) throws SvcLogicException { + if (graph != null) { + String storeId = new String(graph.getModule() + ":" + graph.getRpc()); + graphStore.put(storeId, graph); + logger.info(graph.toString() + " stored in InMemorySvcLogicStore."); + } + } + + @Override + public void init(Properties props) throws SvcLogicException { + // noop + } + + @Override + public void delete(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + if (graphStore.containsKey(storeId)) { + graphStore.remove(storeId); + } + } + + @Override + public void activate(SvcLogicGraph graph) throws SvcLogicException { + // noop + } + + @Override + public void activate(String module, String rpc, String version, String mode) throws SvcLogicException { + // noop + } + +} diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java index 361ca708a..80d992f28 100644 --- a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java @@ -26,14 +26,13 @@ package org.onap.ccsdk.sli.core.sli.provider.base; import java.util.HashMap; import java.util.Map; import java.util.Properties; - import org.onap.ccsdk.sli.core.sli.ExitNodeException; -import org.onap.ccsdk.sli.core.sli.MetricLogger; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; import org.onap.ccsdk.sli.core.sli.SvcLogicNode; import org.onap.ccsdk.sli.core.sli.SvcLogicStore; +import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -72,8 +71,9 @@ public class SvcLogicServiceImplBase implements SvcLogicServiceBase { protected SvcLogicStore store; protected static final String CURRENT_GRAPH="currentGraph"; - public SvcLogicServiceImplBase(SvcLogicStore store) { + public SvcLogicServiceImplBase(SvcLogicStore store, SvcLogicResolver resolver) { this.store = store; + this.resolver = resolver; } protected void registerExecutors() { @@ -140,25 +140,25 @@ public class SvcLogicServiceImplBase implements SvcLogicServiceBase { } @Override - public Properties execute(String module, String rpc, String version, String mode, Properties props) - throws SvcLogicException { - LOG.info("Fetching service logic from data store"); - SvcLogicGraph graph = store.fetch(module, rpc, version, mode); - - if (graph == null) { - Properties retProps = new Properties(); - retProps.setProperty("error-code", "401"); - retProps.setProperty("error-message", - "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); - return (retProps); - } + public Properties execute(String module, String rpc, String version, String mode, Properties props) + throws SvcLogicException { + SvcLogicGraph graph = store.fetch(module, rpc, version, mode); + + if (graph == null) { + Properties retProps = new Properties(); + retProps.setProperty("error-code", "401"); + retProps.setProperty("error-message", + "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); + return (retProps); + } - SvcLogicContext ctx = new SvcLogicContext(props); - ctx.setAttribute(CURRENT_GRAPH, graph.toString()); - ctx.setAttribute("X-ECOMP-RequestID", MDC.get("X-ECOMP-RequestID")); - execute(graph, ctx); - return (ctx.toProperties()); - } + SvcLogicContext ctx = new SvcLogicContext(props); + ctx.setAttribute(CURRENT_GRAPH, graph.toString()); + // To support legacy code we should not stop populating X-ECOMP-RequestID + ctx.setAttribute("X-ECOMP-RequestID", MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); + execute(graph, ctx); + return (ctx.toProperties()); + } @Override public SvcLogicStore getStore() throws SvcLogicException { diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java index 474136d5b..9a929387f 100644 --- a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java @@ -21,9 +21,7 @@ package org.onap.ccsdk.sli.core.sli.provider.base; -import java.util.Map.Entry; import java.util.Properties; - import org.onap.ccsdk.sli.core.sli.DuplicateValueException; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; @@ -31,10 +29,6 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicExpression; import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; import org.onap.ccsdk.sli.core.sli.SvcLogicNode; -import org.onap.ccsdk.sli.core.sli.provider.base.ExecuteNodeExecutor; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; - import junit.framework.TestCase; public class ExecuteNodeExecutorTest extends TestCase { @@ -63,7 +57,8 @@ public class ExecuteNodeExecutorTest extends TestCase { }; - execute.execute(new SvcLogicServiceImplBase(null), new SvcLogicNode(0, "", "", new SvcLogicGraph()), new SvcLogicContext()); + execute.execute(new SvcLogicServiceImplBase(null, null), new SvcLogicNode(0, "", "", new SvcLogicGraph()), + new SvcLogicContext()); } } diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java new file mode 100644 index 000000000..5a2140696 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java @@ -0,0 +1,51 @@ +package org.onap.ccsdk.sli.core.sli.provider.base;
+
+import static org.junit.Assert.assertNotNull;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;
+import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
+import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
+
+public class HashMapResolverTest {
+ @Mock
+ SvcLogicResource myResource;
+
+ @Mock
+ SvcLogicRecorder myRecorder;
+
+ @Mock
+ SvcLogicJavaPlugin myJavaPlugin;
+
+ @Mock
+ SvcLogicAdaptor myAdaptor;
+
+ @Rule
+ public MockitoRule mockitoRule = MockitoJUnit.rule();
+
+ @Test
+ public void simpleTest() throws Exception {
+
+ HashMapResolver resolver = new HashMapResolver();
+ String resourceKey = "simple.resource";
+ String recorderKey = "simple.record";
+ String pluginKey = "simple.plugin";
+ String adaptorKey = "simple.adaptor";
+
+ resolver.addSvcLogicAdaptor(adaptorKey, myAdaptor);
+ resolver.addSvcLogicRecorder(recorderKey, myRecorder);
+ resolver.addSvcLogicResource(resourceKey, myResource);
+ resolver.addSvcLogicSvcLogicJavaPlugin(pluginKey, myJavaPlugin);
+
+ assertNotNull(resolver.getSvcLogicAdaptor(adaptorKey));
+ assertNotNull(resolver.getSvcLogicJavaPlugin(pluginKey));
+ assertNotNull(resolver.getSvcLogicRecorder(recorderKey));
+ assertNotNull(resolver.getSvcLogicResource(resourceKey));
+
+
+ }
+}
diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java new file mode 100644 index 000000000..5f8757aa2 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java @@ -0,0 +1,35 @@ +package org.onap.ccsdk.sli.core.sli.provider.base;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import java.util.Properties;
+import org.junit.Test;
+import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;
+
+public class InMemorySvcLogicStoreTest {
+ @Test
+ public void simpleTest() throws Exception {
+ InMemorySvcLogicStore store = new InMemorySvcLogicStore();
+ store.init(new Properties());
+ SvcLogicGraph graph = new SvcLogicGraph();
+ String module = "TEST";
+ String rpc = "NOTIFICATION";
+ String mode = "sync";
+ String version = "1";
+
+ graph.setModule(module);
+ graph.setRpc(rpc);
+ graph.setMode(mode);
+ graph.setVersion(version);
+
+ store.store(graph);
+ assertTrue(store.hasGraph(module, rpc, version, mode));
+ assertNotNull(store.fetch(module, rpc, version, mode));
+ store.activate(graph);
+ store.activate(module, rpc, version, mode);
+
+ store.delete(module, rpc, version, mode);
+ assertNull(store.fetch(module, rpc, version, mode));
+ }
+}
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java index 49d0a382c..92c2aa49a 100755 --- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java +++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java @@ -26,20 +26,16 @@ package org.onap.ccsdk.sli.core.sli.provider; import java.util.Properties; import org.onap.ccsdk.sli.core.dblib.DbLibService; import org.onap.ccsdk.sli.core.sli.ConfigurationException; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicDblibStore; import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; 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.SvcLogicPropertiesProvider; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; -import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.slf4j.MDC; public class SvcLogicServiceImpl extends SvcLogicServiceImplBase implements SvcLogicService { @@ -47,42 +43,19 @@ public class SvcLogicServiceImpl extends SvcLogicServiceImplBase implements SvcL public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, SvcLogicResolver resolver) throws SvcLogicException { - super(null); - this.resolver = resolver; + super(null, resolver); properties = resourceProvider.getProperties(); this.store = getStore(); } public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, DbLibService dbSvc, SvcLogicResolver resolver) throws SvcLogicException { - super(null); - this.resolver = resolver; + super(null, resolver); properties = resourceProvider.getProperties(); this.store = new SvcLogicDblibStore(dbSvc); } @Override - public Properties execute(String module, String rpc, String version, String mode, Properties props) - throws SvcLogicException { - SvcLogicGraph graph = store.fetch(module, rpc, version, mode); - - if (graph == null) { - Properties retProps = new Properties(); - retProps.setProperty("error-code", "401"); - retProps.setProperty("error-message", - "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); - return (retProps); - } - - SvcLogicContext ctx = new SvcLogicContext(props); - ctx.setAttribute(CURRENT_GRAPH, graph.toString()); - // To support legacy code we should not stop populating X-ECOMP-RequestID - ctx.setAttribute("X-ECOMP-RequestID", MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); - execute(graph, ctx); - return (ctx.toProperties()); - } - - @Override @Deprecated // DomDataBroker is not being used, this should be removed eventually public Properties execute(String module, String rpc, String version, String mode, Properties props, |