if (lhsPrefix.endsWith(".")) {
lhsPrefix = lhsPrefix.substring(0, lhsPrefix.length() - 1);
}
- int lhsPfxLength = lhsPrefix.length();
+
HashMap<String, String> parmsToAdd = new HashMap<String, String>();
for (String sourceVarName : ctx.getAttributeKeySet()) {
-
if (sourceVarName.startsWith(rhsRoot)) {
-
String targetVar = lhsPrefix + "." + sourceVarName.substring(rhsRoot.length());
-
- LOG.debug("Copying " + sourceVarName + " value to " + targetVar);
-
+ LOG.debug("Copying {} value to {}", sourceVarName, targetVar);
parmsToAdd.put(targetVar, ctx.getAttribute(sourceVarName));
}
}
// If RHS is empty, unset attributes in LHS
LinkedList<String> parmsToRemove = new LinkedList<String>();
String prefix = lhsVarName + ".";
+ String arrayPrefix = lhsVarName + "[";
//Clear length value in case an array exists with this prefix
String lengthParamName = lhsVarName + "_length";
- parmsToRemove.add(lengthParamName);
- LOG.debug("Unsetting " + lengthParamName + " because prefix " + prefix + " is being cleared.");
+ LOG.debug("Unsetting {} because prefix {} is being cleared.", lengthParamName, prefix);
for (String curCtxVarname : ctx.getAttributeKeySet()) {
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, "");
+ curCtxVarnameMatchingValue = curCtxVarname.replaceAll(arrayPattern, "") + ".";
}
if (curCtxVarnameMatchingValue.startsWith(prefix)) {
- LOG.debug("Unsetting " + curCtxVarname + " because matching value " + curCtxVarnameMatchingValue + " starts with the prefix " + prefix);
+ LOG.debug("Unsetting {} because matching value {} starts with the prefix {}", curCtxVarname, curCtxVarnameMatchingValue, prefix);
+ parmsToRemove.add(curCtxVarname);
+ }else if (curCtxVarnameMatchingValue.startsWith(lengthParamName)) {
+ LOG.debug("Unsetting {} because matching value {} starts with the lengthParamName {}", curCtxVarname, curCtxVarnameMatchingValue, lengthParamName);
+ parmsToRemove.add(curCtxVarname);
+ }else if (curCtxVarnameMatchingValue.startsWith(arrayPrefix)) {
+ LOG.debug("Unsetting {} because matching value {} starts with the arrayPrefix {}", curCtxVarname, curCtxVarnameMatchingValue, arrayPrefix);
parmsToRemove.add(curCtxVarname);
}
}
String ctxValue = ctx.getAttribute(lhsVarName);
if ((ctxValue != null) && (ctxValue.length() > 0)) {
setValue = false;
- LOG.debug("Attribute " + lhsVarName
- + " already set and only-if-unset is true, so not overriding");
+ LOG.debug("Attribute {} already set and only-if-unset is true, so not overriding", lhsVarName);
}
}
if (setValue) {
String curValue = SvcLogicExpressionResolver.evaluate(curEnt.getValue(), node, ctx);
if (LOG.isDebugEnabled()) {
- LOG.trace("Parameter value " + curEnt.getValue().asParsedExpr() + " resolves to " + curValue);
- LOG.debug("Setting context attribute " + lhsVarName + " to " + curValue);
+ LOG.trace("Parameter value {} resolves to {}", curEnt.getValue().asParsedExpr(), curValue);
+ LOG.debug("Setting context attribute {} to {}", lhsVarName, curValue);
}
ctx.setAttribute(lhsVarName, curValue);
}
assertNull(ctx.getAttribute("si.field1"));
assertNull(ctx.getAttribute("si.field2"));
assertNull(ctx.getAttribute("si.field3"));
+ assertNull(ctx.getAttribute("si.subarray[0]"));
+ assertNull(ctx.getAttribute("si.subarray[1]"));
+ assertNull(ctx.getAttribute("si.subarray[2]"));
+ assertNull(ctx.getAttribute("si.subarray_length"));
assertEquals("6", ctx.getAttribute("search1"));
assertEquals("KeepMe!", ctx.getAttribute("simonSays"));
}
SvcLogicContext ctx = new SvcLogicContext();
SvcLogicParser slp = new SvcLogicParser();
- LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearArrayValues.xml");
+ LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearMultipleArrayValues.xml");
SvcLogicNode root = graph.getFirst().getRootNode();
SvcLogicNode nodeOne = root.getOutcomeValue("1");
SvcLogicNode nodeTwo = root.getOutcomeValue("2");
assertEquals("6", ctx.getAttribute("search1"));
assertEquals("KeepMe!", ctx.getAttribute("simonSays"));
}
-
+
@Test
public void clearSingleArrayProperties() throws Exception {
SetNodeExecutor sne = new SetNodeExecutor();
sne.execute(nodeTwo, ctx);
assertNull(ctx.getAttribute("si[0].field1"));
+ assertNull(ctx.getAttribute("si[0].subarray[0]"));
+ assertNull(ctx.getAttribute("si[0].subarray[1]"));
+ assertNull(ctx.getAttribute("si[0].subarray[2]"));
+ assertNull(ctx.getAttribute("si[0].subarray_length"));
+
+ // TODO: This is just setting up elements as null but note reducing the size of Array.
+ assertEquals("3",ctx.getAttribute("si_length"));
+
+ 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 clearSingleSubArrayProperties() throws Exception {
+ SetNodeExecutor sne = new SetNodeExecutor();
+ SvcLogicContext ctx = new SvcLogicContext();
+
+ SvcLogicParser slp = new SvcLogicParser();
+ LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearSingleSubArrayValues.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("tmp.si[0].field1"));
+ assertEquals("2",ctx.getAttribute("tmp.si[1].field2"));
+ assertEquals("3", ctx.getAttribute("tmp.si[2].field3"));
+ assertEquals("3", ctx.getAttribute("tmp.si_length"));
+
+ assertEquals("a",ctx.getAttribute("tmp.si[0].subarray[0]"));
+
+ // TODO: This is setting up element as Empty instead null
+ //assertNull(ctx.getAttribute("tmp.si[0].subarray[1]"));
+ assertEquals("", ctx.getAttribute("tmp.si[0].subarray[1]"));
+
+ assertEquals("c", ctx.getAttribute("tmp.si[0].subarray[2]"));
+ assertEquals("3", ctx.getAttribute("tmp.si[0].subarray_length"));
+
+ assertEquals("x",ctx.getAttribute("tmp.si[1].subarray[0]"));
+ assertEquals("y",ctx.getAttribute("tmp.si[1].subarray[1]"));
+ assertEquals("z", ctx.getAttribute("tmp.si[1].subarray[2]"));
+ assertEquals("3", ctx.getAttribute("tmp.si[1].subarray_length"));
+
+ assertEquals("6", ctx.getAttribute("search1"));
+ assertEquals("KeepMe!", ctx.getAttribute("simonSays"));
+ }
+
+ @Test
+ public void clearSubArrayProperties() throws Exception {
+ SetNodeExecutor sne = new SetNodeExecutor();
+ SvcLogicContext ctx = new SvcLogicContext();
+
+ SvcLogicParser slp = new SvcLogicParser();
+ LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearSubArrayValues.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[0].field1"));
assertEquals("2",ctx.getAttribute("si[1].field2"));
assertEquals("3", ctx.getAttribute("si[2].field3"));
+ assertEquals("3", ctx.getAttribute("si_length"));
+ assertNull(ctx.getAttribute("si[0].subarray[0]"));
+ assertNull(ctx.getAttribute("si[0].subarray[1]"));
+ assertNull(ctx.getAttribute("si[0].subarray[2]"));
+ assertNull(ctx.getAttribute("si[0].subarray_length"));
+
assertEquals("6", ctx.getAttribute("search1"));
assertEquals("KeepMe!", ctx.getAttribute("simonSays"));
}
assertEquals("3", ctx.getAttribute("rootTwo.field3"));
}
+ @Test
+ public void clearNestedSubArrayProperties() throws Exception {
+ SetNodeExecutor sne = new SetNodeExecutor();
+ SvcLogicContext ctx = new SvcLogicContext();
+
+ SvcLogicParser slp = new SvcLogicParser();
+ LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/clearNestedSubArrayValues.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("tmp.si[0].field1"));
+ assertEquals("2",ctx.getAttribute("tmp.si[1].field2"));
+ assertEquals("3", ctx.getAttribute("tmp.si[2].field3"));
+ assertEquals("3", ctx.getAttribute("tmp.si_length"));
+
+ assertNull(ctx.getAttribute("tmp.si[0].subarray[0]"));
+ assertNull(ctx.getAttribute("tmp.si[0].subarray[1]"));
+ assertNull(ctx.getAttribute("tmp.si[0].subarray[2]"));
+ assertNull(ctx.getAttribute("tmp.si[0].subarray_length"));
+
+ assertEquals("x", ctx.getAttribute("tmp.si[1].subarray[0]"));
+ assertEquals("y",ctx.getAttribute("tmp.si[1].subarray[1]"));
+ assertEquals("z", ctx.getAttribute("tmp.si[1].subarray[2]"));
+ assertEquals("3", ctx.getAttribute("tmp.si[1].subarray_length"));
+
+ assertEquals("6", ctx.getAttribute("search1"));
+ assertEquals("KeepMe!", ctx.getAttribute("simonSays"));
+ }
+
}
--- /dev/null
+<service-logic
+ xmlns='http://www.onap.org/sdnc/svclogic'
+ 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'>
+ <method rpc='test-dg' mode='sync'>
+ <block>
+ <set>
+ <parameter name='tmp.si[0].field1' value='1' />
+ <parameter name='tmp.si[1].field2' value='2' />
+ <parameter name='tmp.si[2].field3' value='3' />
+ <parameter name='tmp.si_length' value='3' />
+ <parameter name='tmp.si[0].subarray[0]' value='a' />
+ <parameter name='tmp.si[0].subarray[1]' value='b' />
+ <parameter name='tmp.si[0].subarray[2]' value='c' />
+ <parameter name='tmp.si[0].subarray_length' value='3' />
+ <parameter name='tmp.si[1].subarray[0]' value='x' />
+ <parameter name='tmp.si[1].subarray[1]' value='y' />
+ <parameter name='tmp.si[1].subarray[2]' value='z' />
+ <parameter name='tmp.si[1].subarray_length' value='3' />
+ <parameter name='search1' value='6' />
+ <parameter name='simonSays' value='KeepMe!' />
+ </set>
+ <set>
+ <parameter name='tmp.si[0].subarray.' value='' />
+ </set>
+ </block>
+ </method>
+</service-logic>
\ No newline at end of file
<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='si_length' value='3' />\r
+ <parameter name='si[0].subarray[0]' value='a' /> \r
+ <parameter name='si[0].subarray[1]' value='b' /> \r
+ <parameter name='si[0].subarray[2]' value='c' /> \r
+ <parameter name='si[0].subarray_length' value='3' />\r
<parameter name='search1' value='6' />\r
<parameter name='simonSays' value='KeepMe!' />\r
</set>\r
--- /dev/null
+<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='tmp.si[0].field1' value='1' /> \r
+ <parameter name='tmp.si[1].field2' value='2' /> \r
+ <parameter name='tmp.si[2].field3' value='3' /> \r
+ <parameter name='tmp.si_length' value='3' /> \r
+ <parameter name='tmp.si[0].subarray[0]' value='a' /> \r
+ <parameter name='tmp.si[0].subarray[1]' value='b' /> \r
+ <parameter name='tmp.si[0].subarray[2]' value='c' /> \r
+ <parameter name='tmp.si[0].subarray_length' value='3' /> \r
+ <parameter name='tmp.si[1].subarray[0]' value='x' /> \r
+ <parameter name='tmp.si[1].subarray[1]' value='y' /> \r
+ <parameter name='tmp.si[1].subarray[2]' value='z' /> \r
+ <parameter name='tmp.si[1].subarray_length' value='3' /> \r
+ <parameter name='search1' value='6' /> \r
+ <parameter name='simonSays' value='KeepMe!' /> \r
+ </set>\r
+ <set>\r
+ <parameter name='tmp.si[0].subarray[1]' value='' />\r
+ </set>\r
+ </block>\r
+ </method>\r
+</service-logic>
\ No newline at end of file
--- /dev/null
+<service-logic
+ xmlns='http://www.onap.org/sdnc/svclogic'
+ 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'>
+ <method rpc='test-dg' mode='sync'>
+ <block>
+ <set>
+ <parameter name='si[0].field1' value='1' />
+ <parameter name='si[1].field2' value='2' />
+ <parameter name='si[2].field3' value='3' />
+ <parameter name='si_length' value='3' />
+ <parameter name='si[0].subarray[0]' value='a' />
+ <parameter name='si[0].subarray[1]' value='b' />
+ <parameter name='si[0].subarray[2]' value='c' />
+ <parameter name='si[0].subarray_length' value='3' />
+ <parameter name='search1' value='6' />
+ <parameter name='simonSays' value='KeepMe!' />
+ </set>
+ <set>
+ <parameter name='si[0].subarray.' value='' />
+ <!-- <parameter name='si.subarray.' value='' /> -->
+ </set>
+ </block>
+ </method>
+</service-logic>
\ No newline at end of file
<parameter name='si.field1' value='1' />\r
<parameter name='si.field2' value='2' />\r
<parameter name='si.field3' value='3' />\r
+ <parameter name='si.subarray[0]' value='a' />\r
+ <parameter name='si.subarray[1]' value='b' />\r
+ <parameter name='si.subarray[2]' value='c' />\r
+ <parameter name='si.subarray_length' value='3' />\r
<parameter name='search1' value='6' />\r
<parameter name='simonSays' value='KeepMe!' />\r
</set>\r