From 979b646bec328670a9ef4c9f24ebd5a4e0ae3987 Mon Sep 17 00:00:00 2001 From: "Smokowski, Kevin (ks6305)" Date: Thu, 3 May 2018 18:38:16 +0000 Subject: SetNodeExecutor nulling feature enhancement Add special handling for clear a single array element or an entire array Change-Id: Ica73e2af32f4a566219e1487504753276bc98aa2 Issue-ID: CCSDK-265 Signed-off-by: Smokowski, Kevin (ks6305) --- .../sli/core/sli/provider/SetNodeExecutor.java | 11 +- .../sli/core/sli/provider/SetNodeExecutorTest.java | 161 ++++++++++++++------- .../src/test/resources/clearArrayValues.xml | 18 +++ .../src/test/resources/clearSingleArrayValues.xml | 18 +++ 4 files changed, 150 insertions(+), 58 deletions(-) create mode 100644 sli/provider/src/test/resources/clearArrayValues.xml create mode 100644 sli/provider/src/test/resources/clearSingleArrayValues.xml diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutor.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutor.java index cd478977..758f2039 100644 --- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutor.java +++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutor.java @@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory; public class SetNodeExecutor extends SvcLogicNodeExecutor { private static final Logger LOG = LoggerFactory.getLogger(SetNodeExecutor.class); + protected final String arrayPattern = "\\[\\d*\\]"; @Override public SvcLogicNode execute(SvcLogicService svc, SvcLogicNode node, SvcLogicContext ctx) @@ -131,8 +132,14 @@ public class SetNodeExecutor extends SvcLogicNodeExecutor { LinkedList parmsToRemove = new LinkedList(); String prefix = lhsVarName + "."; for (String curCtxVarname : ctx.getAttributeKeySet()) { - if (curCtxVarname.startsWith(prefix)) { - LOG.debug("Unsetting " + curCtxVarname); + String curCtxVarnameMatchingValue = curCtxVarname; + //Special handling for reseting array values, strips out brackets and any numbers between the brackets + //when testing if a context memory value starts with a prefix + if(!prefix.contains("[") && curCtxVarnameMatchingValue.contains("[")) { + curCtxVarnameMatchingValue = curCtxVarname.replaceAll(arrayPattern, ""); + } + if (curCtxVarnameMatchingValue.startsWith(prefix)) { + LOG.debug("Unsetting " + curCtxVarname + " because matching value " + curCtxVarnameMatchingValue + " starts with the prefix " + prefix); parmsToRemove.add(curCtxVarname); } } diff --git a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutorTest.java b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutorTest.java index 1333d070..c400bf5d 100644 --- a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutorTest.java +++ b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutorTest.java @@ -1,56 +1,105 @@ -package org.onap.ccsdk.sli.core.sli.provider; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import java.util.LinkedList; -import org.junit.Test; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; -import org.onap.ccsdk.sli.core.sli.SvcLogicNode; -import org.onap.ccsdk.sli.core.sli.SvcLogicParser; - -public class SetNodeExecutorTest { - @Test - public void clearProperties() throws Exception { - SetNodeExecutor sne = new SetNodeExecutor(); - SvcLogicContext ctx = new SvcLogicContext(); - - SvcLogicParser slp = new SvcLogicParser(); - LinkedList graph = slp.parse("src/test/resources/clearValues.xml"); - SvcLogicNode root = graph.getFirst().getRootNode(); - SvcLogicNode nodeOne = root.getOutcomeValue("1"); - SvcLogicNode nodeTwo = root.getOutcomeValue("2"); - - sne.execute(nodeOne, ctx); - sne.execute(nodeTwo, ctx); - - assertNull(ctx.getAttribute("si.field1")); - assertNull(ctx.getAttribute("si.field2")); - assertNull(ctx.getAttribute("si.field3")); - assertEquals("6", ctx.getAttribute("search1")); - assertEquals("KeepMe!", ctx.getAttribute("simonSays")); - } - - @Test - public void subtreeCopy() throws Exception { - SetNodeExecutor sne = new SetNodeExecutor(); - SvcLogicContext ctx = new SvcLogicContext(); - - SvcLogicParser slp = new SvcLogicParser(); - LinkedList graph = slp.parse("src/test/resources/copyValues.xml"); - SvcLogicNode root = graph.getFirst().getRootNode(); - SvcLogicNode nodeOne = root.getOutcomeValue("1"); - SvcLogicNode nodeTwo = root.getOutcomeValue("2"); - - sne.execute(nodeOne, ctx); - sne.execute(nodeTwo, ctx); - - assertEquals("1",ctx.getAttribute("si.field1")); - assertEquals("2",ctx.getAttribute("si.field2")); - assertEquals("3",ctx.getAttribute("si.field3")); - assertEquals("1",ctx.getAttribute("rootTwo.field1")); - assertEquals("2",ctx.getAttribute("rootTwo.field2")); - assertEquals("3",ctx.getAttribute("rootTwo.field3")); - } - -} +package org.onap.ccsdk.sli.core.sli.provider; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import java.util.LinkedList; +import org.junit.Test; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; +import org.onap.ccsdk.sli.core.sli.SvcLogicNode; +import org.onap.ccsdk.sli.core.sli.SvcLogicParser; + +public class SetNodeExecutorTest { + @Test + public void clearProperties() throws Exception { + SetNodeExecutor sne = new SetNodeExecutor(); + SvcLogicContext ctx = new SvcLogicContext(); + + SvcLogicParser slp = new SvcLogicParser(); + LinkedList graph = slp.parse("src/test/resources/clearValues.xml"); + SvcLogicNode root = graph.getFirst().getRootNode(); + SvcLogicNode nodeOne = root.getOutcomeValue("1"); + SvcLogicNode nodeTwo = root.getOutcomeValue("2"); + + sne.execute(nodeOne, ctx); + sne.execute(nodeTwo, ctx); + + assertNull(ctx.getAttribute("si.field1")); + assertNull(ctx.getAttribute("si.field2")); + assertNull(ctx.getAttribute("si.field3")); + assertEquals("6", ctx.getAttribute("search1")); + assertEquals("KeepMe!", ctx.getAttribute("simonSays")); + } + + @Test + public void clearMultipleArrayProperties() throws Exception { + SetNodeExecutor sne = new SetNodeExecutor(); + SvcLogicContext ctx = new SvcLogicContext(); + + SvcLogicParser slp = new SvcLogicParser(); + LinkedList graph = slp.parse("src/test/resources/clearArrayValues.xml"); + SvcLogicNode root = graph.getFirst().getRootNode(); + SvcLogicNode nodeOne = root.getOutcomeValue("1"); + SvcLogicNode nodeTwo = root.getOutcomeValue("2"); + + sne.execute(nodeOne, ctx); + sne.execute(nodeTwo, ctx); + + assertNull(ctx.getAttribute("si[0].field1")); + assertNull(ctx.getAttribute("si[1].field2")); + assertNull(ctx.getAttribute("si[2].field3")); + assertEquals("6", ctx.getAttribute("search1")); + assertEquals("KeepMe!", ctx.getAttribute("simonSays")); + } + + @Test + public void clearSingleArrayProperties() throws Exception { + SetNodeExecutor sne = new SetNodeExecutor(); + SvcLogicContext ctx = new SvcLogicContext(); + + SvcLogicParser slp = new SvcLogicParser(); + LinkedList graph = slp.parse("src/test/resources/clearSingleArrayValues.xml"); + SvcLogicNode root = graph.getFirst().getRootNode(); + SvcLogicNode nodeOne = root.getOutcomeValue("1"); + SvcLogicNode nodeTwo = root.getOutcomeValue("2"); + + sne.execute(nodeOne, ctx); + sne.execute(nodeTwo, ctx); + + assertNull(ctx.getAttribute("si[0].field1")); + assertEquals("2",ctx.getAttribute("si[1].field2")); + assertEquals("3", ctx.getAttribute("si[2].field3")); + assertEquals("6", ctx.getAttribute("search1")); + assertEquals("KeepMe!", ctx.getAttribute("simonSays")); + } + + @Test + public void arrayPattern() { + SetNodeExecutor sne = new SetNodeExecutor(); + String source = "one.two[0].three[0].four"; + assertEquals("one.two.three.four", source.replaceAll(sne.arrayPattern, "")); + } + + @Test + public void subtreeCopy() throws Exception { + SetNodeExecutor sne = new SetNodeExecutor(); + SvcLogicContext ctx = new SvcLogicContext(); + + SvcLogicParser slp = new SvcLogicParser(); + LinkedList graph = slp.parse("src/test/resources/copyValues.xml"); + SvcLogicNode root = graph.getFirst().getRootNode(); + SvcLogicNode nodeOne = root.getOutcomeValue("1"); + SvcLogicNode nodeTwo = root.getOutcomeValue("2"); + + sne.execute(nodeOne, ctx); + sne.execute(nodeTwo, ctx); + + assertEquals("1", ctx.getAttribute("si.field1")); + assertEquals("2", ctx.getAttribute("si.field2")); + assertEquals("3", ctx.getAttribute("si.field3")); + assertEquals("1", ctx.getAttribute("rootTwo.field1")); + assertEquals("2", ctx.getAttribute("rootTwo.field2")); + assertEquals("3", ctx.getAttribute("rootTwo.field3")); + } + +} diff --git a/sli/provider/src/test/resources/clearArrayValues.xml b/sli/provider/src/test/resources/clearArrayValues.xml new file mode 100644 index 00000000..629322d6 --- /dev/null +++ b/sli/provider/src/test/resources/clearArrayValues.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sli/provider/src/test/resources/clearSingleArrayValues.xml b/sli/provider/src/test/resources/clearSingleArrayValues.xml new file mode 100644 index 00000000..3e4e5d98 --- /dev/null +++ b/sli/provider/src/test/resources/clearSingleArrayValues.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit 1.2.3-korg