aboutsummaryrefslogtreecommitdiffstats
path: root/sli/common/src
diff options
context:
space:
mode:
Diffstat (limited to 'sli/common/src')
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java27
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java132
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java25
-rw-r--r--sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java78
-rw-r--r--sli/common/src/test/resources/svclogic.properties12
5 files changed, 162 insertions, 112 deletions
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java
new file mode 100644
index 00000000..d30b2b62
--- /dev/null
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK
+ * ================================================================================
+ * Copyright (C) 2017 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.sli.core.sli;
+
+public interface CommonConstants {
+
+ public static final String SERVICE_LOGIC_STATUS = "SvcLogic.status";
+}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java
index eaf57428..23277439 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java
@@ -8,9 +8,9 @@
* 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.
@@ -38,39 +38,38 @@ import org.w3c.dom.Text;
public class SvcLogicContext {
- private static final Logger LOG = LoggerFactory
- .getLogger(SvcLogicContext.class);
-
+ private static final Logger LOG = LoggerFactory.getLogger(SvcLogicContext.class);
+
private HashMap<String, String> attributes;
-
+
private DOMDataBroker domDataBroker;
-
+
private String status = "success";
-
+
public SvcLogicContext()
{
- this.attributes = new HashMap<String,String> ();
-
+ this.attributes = new HashMap<> ();
+
}
-
+
public SvcLogicContext(Properties props)
{
- this.attributes = new HashMap<String, String> ();
-
- if (props.containsKey("SvcLogic.status"))
+ this.attributes = new HashMap<> ();
+
+ if (props.containsKey(CommonConstants.SERVICE_LOGIC_STATUS))
{
- this.status = props.getProperty("SvcLogic.status");
+ this.status = props.getProperty(CommonConstants.SERVICE_LOGIC_STATUS);
}
-
+
for (Object nameObj : props.keySet())
{
String propName = (String) nameObj;
attributes.put(propName, props.getProperty(propName));
}
}
-
-
-
+
+
+
public DOMDataBroker getDomDataBroker() {
return domDataBroker;
}
@@ -83,14 +82,14 @@ public class SvcLogicContext {
{
if (attributes.containsKey(name))
{
- return(attributes.get(name));
+ return attributes.get(name);
}
else
{
- return(null);
+ return null;
}
}
-
+
public void setAttribute(String name, String value)
{
if (value == null) {
@@ -101,10 +100,10 @@ public class SvcLogicContext {
attributes.put(name, value);
}
}
-
+
public Set<String> getAttributeKeySet()
{
- return(attributes.keySet());
+ return attributes.keySet();
}
public String getStatus() {
@@ -114,86 +113,88 @@ public class SvcLogicContext {
public void setStatus(String status) {
this.status = status;
}
-
+
public Properties toProperties()
{
Properties props = new Properties();
-
+
if (status != null)
{
- props.setProperty("SvcLogic.status", status);
+ props.setProperty(CommonConstants.SERVICE_LOGIC_STATUS, status);
}
-
- for (String attrName : attributes.keySet())
+
+ String attrName;
+ String attrVal;
+ for (Map.Entry<String, String> entry : attributes.entrySet())
{
- String attrVal = attributes.get(attrName);
+ attrName = entry.getKey();
+ attrVal = entry.getValue();
if (attrVal == null) {
- LOG.warn("attribute " + attrName
- + "null - setting to empty string");
+ LOG.warn("attribute {} value is null - setting to empty string", attrName);
props.setProperty(attrName, "");
} else {
- props.setProperty(attrName, attributes.get(attrName));
+ props.setProperty(attrName, attrVal);
}
}
-
- return(props);
+
+ return props;
}
-
+
public void mergeDocument(String pfx, Document doc) {
String prefix = "";
-
+
if (pfx != null) {
prefix = pfx;
}
-
+
Element root = doc.getDocumentElement();
-
+
mergeElement(prefix, root, null);
}
-
+
public void mergeElement(String pfx, Element element, Map<String, Integer> nodeMap) {
-
+
// In XML, cannot tell the difference between containers and lists.
// So, have to treat each element as both (ugly but necessary).
- // We do this by passing a nodeMap to be used to count instance of each tag,
- // which will be used to set _length and to set index
-
- LOG.trace("mergeElement("+pfx+","+element.getTagName()+","+nodeMap+")");
+ // We do this by passing a nodeMap to be used to count instance of each tag,
+ // which will be used to set _length and to set index
+
+ LOG.trace("mergeElement({},{},{})", pfx, element.getTagName(), nodeMap);
String curTagName = element.getTagName();
String prefix = curTagName;
-
+
if (pfx != null) {
prefix = pfx + "." + prefix;
}
-
+
int myIdx = 0;
-
+
if (nodeMap != null) {
if (nodeMap.containsKey(curTagName)) {
- myIdx = nodeMap.get(curTagName).intValue();
+ myIdx = nodeMap.get(curTagName);
}
- nodeMap.put(curTagName, new Integer(myIdx+1));
- this.setAttribute(prefix+"_length", ""+(myIdx+1));
+ nodeMap.put(curTagName, myIdx+1);
+ this.setAttribute(prefix+"_length", Integer.toString(myIdx+1));
}
-
+
NodeList children = element.getChildNodes();
-
+
int numChildren = children.getLength();
-
- Map<String, Integer> childMap = new HashMap<String, Integer>();
- Map<String, Integer> idxChildMap = new HashMap<String, Integer>();
-
+
+ Map<String, Integer> childMap = new HashMap<>();
+ Map<String, Integer> idxChildMap = new HashMap<>();
+
for (int i = 0 ; i < numChildren ; i++) {
Node curNode = children.item(i);
-
+
if (curNode instanceof Text) {
Text curText = (Text) curNode;
String curTextValue = curText.getTextContent();
- LOG.trace("Setting ctx variable "+prefix+" = "+curTextValue);
+ LOG.trace("Setting ctx variable {} = {}", prefix, curTextValue);
this.setAttribute(prefix, curText.getTextContent());
-
+
} else if (curNode instanceof Element) {
mergeElement(prefix, (Element) curNode, childMap);
@@ -204,9 +205,9 @@ public class SvcLogicContext {
}
}
}
-
+
}
-
+
public String resolve(String ctxVarName) {
if (ctxVarName.indexOf('[') == -1) {
@@ -215,16 +216,15 @@ public class SvcLogicContext {
}
// Resolve any array references
- StringBuffer sbuff = new StringBuffer();
+ StringBuilder sbuff = new StringBuilder();
String[] ctxVarParts = ctxVarName.split("\\[");
sbuff.append(ctxVarParts[0]);
for (int i = 1; i < ctxVarParts.length; i++) {
if (ctxVarParts[i].startsWith("$")) {
- int endBracketLoc = ctxVarParts[i].indexOf("]");
+ int endBracketLoc = ctxVarParts[i].indexOf(']');
if (endBracketLoc == -1) {
// Missing end bracket ... give up parsing
- LOG.warn("Variable reference " + ctxVarName
- + " seems to be missing a ']'");
+ LOG.warn("Variable reference {} seems to be missing a ']'", ctxVarName);
return (this.getAttribute(ctxVarName));
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java
index 5270143a..26d45ce9 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java
@@ -21,17 +21,6 @@
package org.onap.ccsdk.sli.core.sli;
-import java.io.File;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.LinkedList;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
@@ -41,6 +30,16 @@ import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.LinkedList;
+
/**
* @author dt5972
*
@@ -336,7 +335,7 @@ public class SvcLogicParser {
Schema schema = null;
String validateSchema = System.getProperty(SLI_VALIDATING_PARSER, "true");
- if (validateSchema != null || validateSchema.equalsIgnoreCase("true")) {
+ if ("true".equalsIgnoreCase(validateSchema)) {
xsdUrl = getClass().getResource(SVCLOGIC_XSD);
}
@@ -362,7 +361,7 @@ public class SvcLogicParser {
SAXParser saxParser = factory.newSAXParser();
if (saxParser.isValidating()) {
- LOGGER.info("Validating against schema " + xsdUrl.getPath());
+ LOGGER.info("Parser not configured to validate XML {}", (xsdUrl != null ? xsdUrl.getPath() : null));
}
graphs = new LinkedList<>();
diff --git a/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java b/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java
index 0e6000fb..07f40a2e 100644
--- a/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java
+++ b/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java
@@ -8,9 +8,9 @@
* 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.
@@ -20,7 +20,7 @@
*/
/**
- *
+ *
*/
package org.onap.ccsdk.sli.core.sli;
@@ -28,7 +28,10 @@ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
+import java.util.Properties;
+import ch.vorburger.mariadb4j.DB;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
import junit.framework.TestCase;
/**
@@ -40,22 +43,43 @@ public class ITCaseSvcLogicParser extends TestCase {
/**
* Test method for {@link org.onap.ccsdk.sli.core.sli.SvcLogicParser#parse(java.lang.String)}.
*/
-
-
+
+
public void testParse() {
-
+
try
{
+
+
URL propUrl = getClass().getResource("/svclogic.properties");
-
+
InputStream propStr = getClass().getResourceAsStream("/svclogic.properties");
-
- SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propStr);
-
+
+ Properties props = new Properties();
+
+ props.load(propStr);
+
+
+ // Start MariaDB4j database
+ DBConfigurationBuilder config = DBConfigurationBuilder.newBuilder();
+ config.setPort(0); // 0 => autom. detect free port
+ DB db = DB.newEmbeddedDB(config.build());
+ db.start();
+
+
+
+ // Override jdbc URL and database name
+ props.setProperty("org.onap.ccsdk.sli.jdbc.database", "test");
+ props.setProperty("org.onap.ccsdk.sli.jdbc.url", config.getURL("test"));
+
+
+
+ SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(props);
+
assertNotNull(store);
-
+
store.registerNodeType("switch");
store.registerNodeType("block");
store.registerNodeType("get-resource");
@@ -69,15 +93,15 @@ public class ITCaseSvcLogicParser extends TestCase {
store.registerNodeType("release");
store.registerNodeType("for");
store.registerNodeType("set");
-
-
+
+
InputStream testStr = getClass().getResourceAsStream("/parser-good.tests");
BufferedReader testsReader = new BufferedReader(new InputStreamReader(testStr));
String testCaseFile = null;
while ((testCaseFile = testsReader.readLine()) != null) {
-
+
testCaseFile = testCaseFile.trim();
-
+
if (testCaseFile.length() > 0)
{
if (!testCaseFile.startsWith("/"))
@@ -94,23 +118,23 @@ public class ITCaseSvcLogicParser extends TestCase {
SvcLogicParser.validate(testCaseUrl.getPath(), store);
} catch (Exception e) {
fail("Validation failure ["+e.getMessage()+"]");
-
+
}
-
-
-
+
+
+
}
}
-
+
testStr = getClass().getResourceAsStream("/parser-bad.tests");
testsReader = new BufferedReader(new InputStreamReader(testStr));
testCaseFile = null;
while ((testCaseFile = testsReader.readLine()) != null) {
-
+
testCaseFile = testCaseFile.trim();
-
+
if (testCaseFile.length() > 0)
{
if (!testCaseFile.startsWith("/"))
@@ -134,7 +158,7 @@ public class ITCaseSvcLogicParser extends TestCase {
if (valid) {
fail("Expected compiler error on "+testCaseFile+", but got success");
}
-
+
}
}
@@ -148,10 +172,10 @@ public class ITCaseSvcLogicParser extends TestCase {
e.printStackTrace();
fail("Caught exception processing test cases");
}
-
-
+
+
}
-
-
+
+
}
diff --git a/sli/common/src/test/resources/svclogic.properties b/sli/common/src/test/resources/svclogic.properties
index 25eb3bd4..33d7ae6e 100644
--- a/sli/common/src/test/resources/svclogic.properties
+++ b/sli/common/src/test/resources/svclogic.properties
@@ -8,9 +8,9 @@
# 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.
@@ -20,7 +20,7 @@
###
org.onap.ccsdk.sli.dbtype = jdbc
-org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://localhost:3306/sdnctl
-org.onap.ccsdk.sli.jdbc.database = sdnctl
-org.onap.ccsdk.sli.jdbc.user = sdnctl
-org.onap.ccsdk.sli.jdbc.password = gamma
+org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://localhost:3306/test
+org.onap.ccsdk.sli.jdbc.database = test
+org.onap.ccsdk.sli.jdbc.user = test
+org.onap.ccsdk.sli.jdbc.password = test123