SetNodeExecutor nulling feature enhancement
authorSmokowski, Kevin (ks6305) <ks6305@att.com>
Thu, 3 May 2018 18:38:16 +0000 (18:38 +0000)
committerKevin Smokowski <ks6305@att.com>
Thu, 3 May 2018 18:46:52 +0000 (18:46 +0000)
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) <ks6305@att.com>
sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutor.java
sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/SetNodeExecutorTest.java
sli/provider/src/test/resources/clearArrayValues.xml [new file with mode: 0644]
sli/provider/src/test/resources/clearSingleArrayValues.xml [new file with mode: 0644]

index cd47897..758f203 100644 (file)
@@ -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<String> parmsToRemove = new LinkedList<String>();
                         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);
                             }
                         }
index 1333d07..c400bf5 100644 (file)
-package org.onap.ccsdk.sli.core.sli.provider;\r
-\r
-import static org.junit.Assert.assertEquals;\r
-import static org.junit.Assert.assertNull;\r
-import java.util.LinkedList;\r
-import org.junit.Test;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicContext;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicNode;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicParser;\r
-\r
-public class SetNodeExecutorTest {\r
-    @Test\r
-    public void clearProperties() throws Exception {\r
-        SetNodeExecutor sne = new SetNodeExecutor();\r
-        SvcLogicContext ctx = new SvcLogicContext();\r
-\r
-        SvcLogicParser slp = new SvcLogicParser();\r
-        LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearValues.xml");\r
-        SvcLogicNode root = graph.getFirst().getRootNode();\r
-        SvcLogicNode nodeOne = root.getOutcomeValue("1");\r
-        SvcLogicNode nodeTwo = root.getOutcomeValue("2");\r
-\r
-        sne.execute(nodeOne, ctx);\r
-        sne.execute(nodeTwo, ctx);\r
-\r
-        assertNull(ctx.getAttribute("si.field1"));\r
-        assertNull(ctx.getAttribute("si.field2"));\r
-        assertNull(ctx.getAttribute("si.field3"));\r
-        assertEquals("6", ctx.getAttribute("search1"));\r
-        assertEquals("KeepMe!", ctx.getAttribute("simonSays"));\r
-    }\r
-\r
-    @Test\r
-    public void subtreeCopy() throws Exception {\r
-        SetNodeExecutor sne = new SetNodeExecutor();\r
-        SvcLogicContext ctx = new SvcLogicContext();\r
-\r
-        SvcLogicParser slp = new SvcLogicParser();\r
-        LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/copyValues.xml");\r
-        SvcLogicNode root = graph.getFirst().getRootNode();\r
-        SvcLogicNode nodeOne = root.getOutcomeValue("1");\r
-        SvcLogicNode nodeTwo = root.getOutcomeValue("2");\r
-\r
-        sne.execute(nodeOne, ctx);\r
-        sne.execute(nodeTwo, ctx);\r
-   \r
-        assertEquals("1",ctx.getAttribute("si.field1"));\r
-        assertEquals("2",ctx.getAttribute("si.field2"));\r
-        assertEquals("3",ctx.getAttribute("si.field3"));\r
-        assertEquals("1",ctx.getAttribute("rootTwo.field1"));\r
-        assertEquals("2",ctx.getAttribute("rootTwo.field2"));\r
-        assertEquals("3",ctx.getAttribute("rootTwo.field3"));\r
-    }\r
-\r
-}\r
+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<SvcLogicGraph> 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<SvcLogicGraph> 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<SvcLogicGraph> 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<SvcLogicGraph> 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 (file)
index 0000000..629322d
--- /dev/null
@@ -0,0 +1,18 @@
+<service-logic\r
+    xmlns='http://www.onap.org/sdnc/svclogic'\r
+    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='TEST-DG' version='1.0.0'>\r
+    <method rpc='test-dg' mode='sync'>\r
+        <block>\r
+            <set>\r
+                <parameter name='si[0].field1' value='1' />\r
+                <parameter name='si[1].field2' value='2' />\r
+                <parameter name='si[2].field3' value='3' />\r
+                <parameter name='search1' value='6' />\r
+                <parameter name='simonSays' value='KeepMe!' />\r
+            </set>\r
+            <set>\r
+                <parameter name='si.' value='' />\r
+            </set>\r
+        </block>\r
+    </method>\r
+</service-logic>
\ 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 (file)
index 0000000..3e4e5d9
--- /dev/null
@@ -0,0 +1,18 @@
+<service-logic\r
+    xmlns='http://www.onap.org/sdnc/svclogic'\r
+    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='TEST-DG' version='1.0.0'>\r
+    <method rpc='test-dg' mode='sync'>\r
+        <block>\r
+            <set>\r
+                <parameter name='si[0].field1' value='1' />\r
+                <parameter name='si[1].field2' value='2' />\r
+                <parameter name='si[2].field3' value='3' />\r
+                <parameter name='search1' value='6' />\r
+                <parameter name='simonSays' value='KeepMe!' />\r
+            </set>\r
+            <set>\r
+                <parameter name='si[0].' value='' />\r
+            </set>\r
+        </block>\r
+    </method>\r
+</service-logic>
\ No newline at end of file