aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/ActivationEntry.java41
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CheckSumHelper.java45
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/MetricLogger.java8
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicCrawler.java90
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java101
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicGraph.java16
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicJdbcStore.java1280
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicLoader.java168
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java516
-rw-r--r--sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicStore.java5
-rw-r--r--sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java25
-rw-r--r--sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java33
-rw-r--r--sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java31
13 files changed, 1170 insertions, 1189 deletions
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/ActivationEntry.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/ActivationEntry.java
new file mode 100644
index 00000000..a1c0eafe
--- /dev/null
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/ActivationEntry.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * 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 class ActivationEntry {
+ String module;
+ String rpc;
+ String version;
+ String mode;
+
+ public ActivationEntry(String module, String rpc, String version, String mode) {
+ this.module = module;
+ this.rpc = rpc;
+ this.version = version;
+ this.mode = mode;
+ }
+
+ @Override
+ public String toString() {
+ return "ActivationEntry [module=" + module + ", rpc=" + rpc + ", version=" + version + ", mode=" + mode + "]";
+ }
+}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CheckSumHelper.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CheckSumHelper.java
new file mode 100644
index 00000000..d6ad0742
--- /dev/null
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CheckSumHelper.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * 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;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import javax.xml.bind.DatatypeConverter;
+
+public class CheckSumHelper {
+
+ public static String md5SumFromFile(String pathToFile) throws NoSuchAlgorithmException, IOException {
+ byte[] b = Files.readAllBytes(Paths.get(pathToFile));
+ return md5SumFromByteArray(b);
+ }
+
+ private static String md5SumFromByteArray(byte[] input) throws NoSuchAlgorithmException {
+ byte[] hash = MessageDigest.getInstance("MD5").digest(input);
+ String hexString = DatatypeConverter.printHexBinary(hash);
+ return hexString.toLowerCase();
+ }
+
+}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/MetricLogger.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/MetricLogger.java
index 0f6ae673..79989b51 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/MetricLogger.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/MetricLogger.java
@@ -295,7 +295,13 @@ public class MetricLogger {
setResponseCode(responseCode);
setResponseDescription(responseDescription);
- METRIC.info(lastMsg);
+ METRIC.info(formatString(lastMsg));
}
+
+ protected String formatString(String str) {
+ str = str.replaceAll("\\R",""); // this will strip all new line characters
+ str = str.replaceAll("\\|","%7C"); //log records should not contain a pipe, encode the pipe character
+ return str;
+ }
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicCrawler.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicCrawler.java
new file mode 100644
index 00000000..5ee138a3
--- /dev/null
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicCrawler.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * 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;
+
+import static java.nio.file.FileVisitResult.CONTINUE;
+
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SvcLogicCrawler extends SimpleFileVisitor<Path> {
+
+ private List<Path> xmlGraphPathList;
+ private List<Path> activationFilePathList;
+
+ public SvcLogicCrawler() {
+ xmlGraphPathList = new ArrayList<Path>();
+ activationFilePathList = new ArrayList<Path>();
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
+ if (attr.isRegularFile()) {
+ String fileName = file.getFileName().toString();
+ if (!file.toString().contains(".git") && !fileName.equals("pom.xml") && !fileName.equals("assemble_zip.xml") && !fileName.equals("assemble_zip_less_config.xml") && !fileName.equals("descriptor.xml")) {
+ if (fileName.endsWith(".xml")) {
+ xmlGraphPathList.add(file);
+ }
+ else if (fileName.endsWith(".versions")) {
+ activationFilePathList.add(file);
+ }
+ }
+ }
+ return CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
+ return CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFileFailed(Path file, IOException exc) {
+ System.err.println("Couldn't visitFile");
+ System.err.println(exc.getMessage());
+ return CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+ String[] skipDirectories = {".git"};
+ for (String str : skipDirectories) {
+ if (dir.endsWith(str)) {
+ return FileVisitResult.SKIP_SUBTREE;
+ }
+ }
+ return CONTINUE;
+ }
+
+ public List<Path> getGraphPaths() {
+ return this.xmlGraphPathList;
+ }
+
+ public List<Path> getActivationPaths() {
+ return this.activationFilePathList;
+ }
+}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
index ab5773c0..74fa1dd6 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
@@ -326,80 +326,6 @@ public class SvcLogicDblibStore implements SvcLogicStore {
}
}
- @Override
- public void registerNodeType(String nodeType) throws SvcLogicException {
-
- String registerNodeSql = "INSERT INTO NODE_TYPES (nodetype) VALUES(?)";
-
- if (isValidNodeType(nodeType)) {
- return;
- }
-
- DbLibService dbSvc = getDbLibService();
- ArrayList<String> args = new ArrayList<>();
-
- args.add(nodeType);
-
- try {
- dbSvc.writeData(registerNodeSql, args, null);
- } catch (Exception e) {
- throw new SvcLogicException("Could not add node type to database", e);
- }
-
- }
-
- @Override
- public void unregisterNodeType(String nodeType) throws SvcLogicException {
-
- if (!isValidNodeType(nodeType)) {
- return;
- }
-
- String unregisterNodeSql = "DELETE FROM NODE_TYPES WHERE nodetype = ?";
-
- DbLibService dbSvc = getDbLibService();
- ArrayList<String> args = new ArrayList<>();
-
- args.add(nodeType);
-
- try {
- dbSvc.writeData(unregisterNodeSql, args, null);
- } catch (Exception e) {
- throw new SvcLogicException(
- "Could not delete node type from database", e);
- }
-
- }
-
- @Override
- public boolean isValidNodeType(String nodeType) throws SvcLogicException {
-
- String validateNodeSql = "SELECT count(*) FROM NODE_TYPES WHERE nodetype = ?";
-
- DbLibService dbSvc = getDbLibService();
-
- ArrayList<String> args = new ArrayList<>();
-
- args.add(nodeType);
-
- boolean isValid = false;
-
- try (CachedRowSet results = dbSvc.getData(validateNodeSql, args, null)) {
-
- if (results != null && results.next()) {
- int cnt = results.getInt(1);
-
- if (cnt > 0) {
- isValid = true;
- }
- }
- } catch (Exception e) {
- throw new SvcLogicException("Cannot select node type from database", e);
- }
-
- return isValid;
- }
-
private DbLibService getDbLibService() {
// Get DbLibService interface object.
@@ -490,4 +416,31 @@ public class SvcLogicDblibStore implements SvcLogicStore {
INSTANCE = dbresource;
}
}
+
+ @Override
+ public void activate(String module, String rpc, String version, String mode) throws SvcLogicException {
+ DbLibService dbSvc = getDbLibService();
+
+ String deactivateSql = "UPDATE SVC_LOGIC SET active = 'N' WHERE module = ? AND rpc = ? AND mode = ?";
+
+ String activateSql = "UPDATE SVC_LOGIC SET active = 'Y' WHERE module = ? AND rpc = ? AND mode = ? AND version = ?";
+
+ ArrayList<String> args = new ArrayList<String>();
+
+ args.add(module);
+ args.add(rpc);
+ args.add(mode);
+
+ try {
+
+ dbSvc.writeData(deactivateSql, args, null);
+
+ args.add(version);
+ dbSvc.writeData(activateSql, args, null);
+
+ } catch (Exception e) {
+ throw new SvcLogicException("Could not activate graph", e);
+ }
+ }
+
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicGraph.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicGraph.java
index 35486eba..cbac1544 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicGraph.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicGraph.java
@@ -37,7 +37,9 @@ public class SvcLogicGraph implements Serializable {
private String rpc = null;
private String mode = null;
private String version = null;
-
+
+ private String md5sum = null;
+
private Map<String, Serializable> attributes;
private Map<String, SvcLogicNode> namedNodes;
private SvcLogicNode rootNode;
@@ -48,6 +50,16 @@ public class SvcLogicGraph implements Serializable {
namedNodes = new HashMap<String, SvcLogicNode>();
rootNode = null;
}
+
+ public String getMd5sum() {
+ return md5sum;
+ }
+
+
+ public void setMd5sum(String md5sum) {
+ this.md5sum = md5sum;
+ }
+
public String getModule() {
@@ -178,7 +190,7 @@ public class SvcLogicGraph implements Serializable {
@Override
public String toString() {
- return "SvcLogicGraph [module=" + module + ", rpc=" + rpc + ", mode=" + mode + ", version=" + version + "]";
+ return "SvcLogicGraph [module=" + module + ", rpc=" + rpc + ", mode=" + mode + ", version=" + version + ", md5sum=" + md5sum + "]";
}
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicJdbcStore.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicJdbcStore.java
index 1e4b71cd..e2fbdf72 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicJdbcStore.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicJdbcStore.java
@@ -35,109 +35,90 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SvcLogicJdbcStore implements SvcLogicStore {
- private static final Logger LOG = LoggerFactory.getLogger(SvcLogicJdbcStore.class);
-
- private String dbUrl = null;
- private String dbName = null;
- private String dbUser = null;
- private String dbPasswd = null;
- private String dbDriver = null;
-
- private Connection dbConn;
- private PreparedStatement hasActiveGraphStmt = null;
- private PreparedStatement hasVersionGraphStmt = null;
- private PreparedStatement fetchActiveGraphStmt = null;
- private PreparedStatement fetchVersionGraphStmt = null;
- private PreparedStatement storeGraphStmt = null;
- private PreparedStatement deleteGraphStmt = null;
-
- private PreparedStatement deactivateStmt = null;
- private PreparedStatement activateStmt = null;
-
- private PreparedStatement registerNodeStmt = null;
- private PreparedStatement unregisterNodeStmt = null;
- private PreparedStatement validateNodeStmt = null;
-
- private void getConnection() throws ConfigurationException
- {
-
- Properties jdbcProps = new Properties();
-
- jdbcProps.setProperty("user", dbUser);
- jdbcProps.setProperty("password", dbPasswd);
-
- try {
- Driver dvr = new org.mariadb.jdbc.Driver();
- if (dvr.acceptsURL(dbUrl))
- {
- LOG.debug("Driver com.mysql.jdbc.Driver accepts {}", dbUrl);
- }
- else
- {
- LOG.warn("Driver com.mysql.jdbc.Driver does not accept {}", dbUrl);
- }
- } catch (SQLException e1) {
- LOG.error("Caught exception trying to load com.mysql.jdbc.Driver", e1);
- }
-
- try
- {
- this.dbConn = DriverManager.getConnection(dbUrl, jdbcProps);
- }
- catch (Exception e)
- {
- throw new ConfigurationException("failed to get database connection ["+dbUrl+"]", e);
- }
-
- }
-
- private void createTable() throws ConfigurationException
- {
-
- DatabaseMetaData dbm;
-
- try {
- dbm = dbConn.getMetaData();
- } catch (SQLException e) {
-
- throw new ConfigurationException("could not get databse metadata", e);
- }
-
- // See if table SVC_LOGIC exists. If not, create it.
+ private static final Logger LOG = LoggerFactory.getLogger(SvcLogicJdbcStore.class);
+
+ private String dbUrl = null;
+ private String dbName = null;
+ private String dbUser = null;
+ private String dbPasswd = null;
+ private String dbDriver = null;
+
+ private Connection dbConn;
+ private PreparedStatement hasActiveGraphStmt = null;
+ private PreparedStatement hasVersionGraphStmt = null;
+ private PreparedStatement fetchActiveGraphStmt = null;
+ private PreparedStatement fetchVersionGraphStmt = null;
+ private PreparedStatement storeGraphStmt = null;
+ private PreparedStatement deleteGraphStmt = null;
+
+ private PreparedStatement deactivateStmt = null;
+ private PreparedStatement activateStmt = null;
+
+ private PreparedStatement registerNodeStmt = null;
+ private PreparedStatement unregisterNodeStmt = null;
+ private PreparedStatement validateNodeStmt = null;
+
+ private void getConnection() throws ConfigurationException {
+
+ Properties jdbcProps = new Properties();
+
+ jdbcProps.setProperty("user", dbUser);
+ jdbcProps.setProperty("password", dbPasswd);
+
+ try {
+ Driver dvr = new org.mariadb.jdbc.Driver();
+ if (dvr.acceptsURL(dbUrl)) {
+ LOG.debug("Driver com.mysql.jdbc.Driver accepts {}", dbUrl);
+ } else {
+ LOG.warn("Driver com.mysql.jdbc.Driver does not accept {}", dbUrl);
+ }
+ } catch (SQLException e1) {
+ LOG.error("Caught exception trying to load com.mysql.jdbc.Driver", e1);
+ }
+
+ try {
+ this.dbConn = DriverManager.getConnection(dbUrl, jdbcProps);
+ } catch (Exception e) {
+ throw new ConfigurationException("failed to get database connection [" + dbUrl + "]", e);
+ }
+
+ }
+
+ private void createTable() throws ConfigurationException {
+
+ DatabaseMetaData dbm;
+
+ try {
+ dbm = dbConn.getMetaData();
+ } catch (SQLException e) {
+
+ throw new ConfigurationException("could not get databse metadata", e);
+ }
+
+ // See if table SVC_LOGIC exists. If not, create it.
Statement stmt = null;
- try
- {
+ try {
- ResultSet tables = dbm.getTables(null, null, "SVC_LOGIC", null);
- if (tables.next()) {
+ ResultSet tables = dbm.getTables(null, null, "SVC_LOGIC", null);
+ if (tables.next()) {
LOG.debug("SVC_LOGIC table already exists");
- }
- else {
- String crTableCmd = "CREATE TABLE "+dbName+".SVC_LOGIC ("
- + "module varchar(80) NOT NULL,"
- + "rpc varchar(80) NOT NULL,"
- + "version varchar(40) NOT NULL,"
- + "mode varchar(5) NOT NULL,"
- + "active varchar(1) NOT NULL,"
- + "graph BLOB,"
- + "CONSTRAINT P_SVC_LOGIC PRIMARY KEY(module, rpc, version, mode))";
+ } else {
+ String crTableCmd = "CREATE TABLE " + dbName + ".SVC_LOGIC (" + "module varchar(80) NOT NULL,"
+ + "rpc varchar(80) NOT NULL," + "version varchar(40) NOT NULL," + "mode varchar(5) NOT NULL,"
+ + "active varchar(1) NOT NULL," + "graph BLOB,"
+ + "CONSTRAINT P_SVC_LOGIC PRIMARY KEY(module, rpc, version, mode))";
stmt = dbConn.createStatement();
stmt.executeUpdate(crTableCmd);
- }
- }
- catch (Exception e)
- {
- throw new ConfigurationException("could not create SVC_LOGIC table", e);
- }
- finally
- {
+ }
+ } catch (Exception e) {
+ throw new ConfigurationException("could not create SVC_LOGIC table", e);
+ } finally {
if (stmt != null) {
try {
stmt.close();
@@ -147,31 +128,24 @@ public class SvcLogicJdbcStore implements SvcLogicStore {
}
}
- // See if NODE_TYPES table exists and, if not, create it
+ // See if NODE_TYPES table exists and, if not, create it
stmt = null;
- try
- {
+ try {
- ResultSet tables = dbm.getTables(null, null, "NODE_TYPES", null);
- if (tables.next()) {
+ ResultSet tables = dbm.getTables(null, null, "NODE_TYPES", null);
+ if (tables.next()) {
LOG.debug("NODE_TYPES table already exists");
- }
- else {
- String crTableCmd = "CREATE TABLE "+dbName+".NODE_TYPES ("
- + "nodetype varchar(80) NOT NULL,"
- + "CONSTRAINT P_NODE_TYPES PRIMARY KEY(nodetype))";
+ } else {
+ String crTableCmd = "CREATE TABLE " + dbName + ".NODE_TYPES (" + "nodetype varchar(80) NOT NULL,"
+ + "CONSTRAINT P_NODE_TYPES PRIMARY KEY(nodetype))";
stmt = dbConn.createStatement();
stmt.executeUpdate(crTableCmd);
- }
- }
- catch (Exception e)
- {
- throw new ConfigurationException("could not create SVC_LOGIC table", e);
- }
- finally
- {
+ }
+ } catch (Exception e) {
+ throw new ConfigurationException("could not create SVC_LOGIC table", e);
+ } finally {
if (stmt != null) {
try {
stmt.close();
@@ -180,652 +154,444 @@ public class SvcLogicJdbcStore implements SvcLogicStore {
}
}
}
- }
-
- private void prepStatements() throws ConfigurationException
- {
-
- // Prepare statements
- String hasVersionGraphSql = CommonConstants.JDBC_SELECT_COUNT + dbName + CommonConstants.SVCLOGIC_TABLE
- + CommonConstants.JDBC_GRAPH_QUERY;
-
- try
- {
- hasVersionGraphStmt = dbConn.prepareStatement(hasVersionGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + hasVersionGraphSql, e);
-
- }
-
- String hasActiveGraphSql = CommonConstants.JDBC_SELECT_COUNT + dbName + CommonConstants.SVCLOGIC_TABLE
- + CommonConstants.JDBC_ACTIVE_GRAPH_QUERY;
-
- try
- {
- hasActiveGraphStmt = dbConn.prepareStatement(hasActiveGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + hasVersionGraphSql, e);
-
- }
-
- String fetchVersionGraphSql = CommonConstants.JDBC_SELECT_GRAPGH + dbName+CommonConstants.SVCLOGIC_TABLE
- + CommonConstants.JDBC_GRAPH_QUERY;
-
- try
- {
- fetchVersionGraphStmt = dbConn.prepareStatement(fetchVersionGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + fetchVersionGraphSql, e);
-
- }
-
- String fetchActiveGraphSql = CommonConstants.JDBC_SELECT_GRAPGH + dbName + CommonConstants.SVCLOGIC_TABLE
- + CommonConstants.JDBC_ACTIVE_GRAPH_QUERY;
-
- try
- {
- fetchActiveGraphStmt = dbConn.prepareStatement(fetchActiveGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + fetchVersionGraphSql, e);
-
- }
-
- String storeGraphSql = CommonConstants.JDBC_INSERT+dbName
- + ".SVC_LOGIC (module, rpc, version, mode, active, graph) VALUES(?, ?, ?, ?, ?, ?)";
-
- try
- {
- storeGraphStmt = dbConn.prepareStatement(storeGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + storeGraphSql, e);
- }
-
- String deleteGraphSql = CommonConstants.JDBC_DELETE+dbName
- + ".SVC_LOGIC WHERE module = ? AND rpc = ? AND version = ? AND mode = ?";
-
- try
- {
- deleteGraphStmt = dbConn.prepareStatement(deleteGraphSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + deleteGraphSql, e);
- }
-
- String deactivateSql = CommonConstants.JDBC_UPDATE + dbName
- +".SVC_LOGIC SET active = 'N' WHERE module = ? AND rpc = ? AND mode = ?";
-
- try
- {
- deactivateStmt = dbConn.prepareStatement(deactivateSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + deactivateSql, e);
- }
-
- String activateSql = CommonConstants.JDBC_UPDATE + dbName
- +".SVC_LOGIC SET active = 'Y' WHERE module = ? AND rpc = ? AND version = ? AND mode = ?";
-
- try
- {
- activateStmt = dbConn.prepareStatement(activateSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + activateSql, e);
- }
-
- String registerNodeSql = CommonConstants.JDBC_INSERT + dbName + ".NODE_TYPES (nodetype) VALUES(?)";
- try
- {
- registerNodeStmt = dbConn.prepareStatement(registerNodeSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + registerNodeSql, e);
- }
-
- String unregisterNodeSql = CommonConstants.JDBC_DELETE + dbName + ".NODE_TYPES WHERE nodetype = ?";
- try
- {
- unregisterNodeStmt = dbConn.prepareStatement(unregisterNodeSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + unregisterNodeSql, e);
- }
-
- String validateNodeSql = CommonConstants.JDBC_SELECT_COUNT + dbName + ".NODE_TYPES WHERE nodetype = ?";
- try
- {
- validateNodeStmt = dbConn.prepareStatement(validateNodeSql);
- }
- catch (Exception e)
- {
- throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + validateNodeSql, e);
- }
- }
-
- private void initDbResources() throws ConfigurationException
- {
- if ((dbDriver != null) && (dbDriver.length() > 0))
- {
-
- try
- {
- Class.forName(dbDriver);
- }
- catch (Exception e)
- {
- throw new ConfigurationException("could not load driver class "+dbDriver, e);
- }
- }
- getConnection();
- createTable();
- prepStatements();
- }
-
-
- @Override
- public void init(Properties props) throws ConfigurationException {
-
-
- dbUrl = props.getProperty("org.onap.ccsdk.sli.jdbc.url");
- if ((dbUrl == null) || (dbUrl.length() == 0))
- {
- throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.url unset");
- }
-
- dbName = props.getProperty("org.onap.ccsdk.sli.jdbc.database");
- if ((dbName == null) || (dbName.length() == 0))
- {
- throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.database unset");
- }
-
- dbUser = props.getProperty("org.onap.ccsdk.sli.jdbc.user");
- if ((dbUser == null) || (dbUser.length() == 0))
- {
- throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.user unset");
- }
-
-
- dbPasswd = props.getProperty("org.onap.ccsdk.sli.jdbc.password");
- if ((dbPasswd == null) || (dbPasswd.length() == 0))
- {
- throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.password unset");
- }
-
- dbDriver = props.getProperty("org.onap.ccsdk.sli.jdbc.driver");
-
-
- initDbResources();
-
- }
-
- private boolean isDbConnValid()
- {
-
- boolean isValid = false;
-
- try
- {
- if (dbConn != null)
- {
- isValid = dbConn.isValid(1);
- }
- }
- catch (SQLException e)
- {
- LOG.error("Not a valid db connection: ", e);
- }
-
- return isValid;
- }
-
- @Override
- public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException {
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- boolean retval = false;
- ResultSet results = null;
-
- PreparedStatement hasGraphStmt;
- if (version == null)
- {
- hasGraphStmt = hasActiveGraphStmt;
- }
- else
- {
- hasGraphStmt = hasVersionGraphStmt;
- }
-
- try
- {
- hasGraphStmt.setString(1, module);
- hasGraphStmt.setString(2, rpc);
- hasGraphStmt.setString(3, mode);
-
-
- if (version != null)
- {
- hasGraphStmt.setString(4, version);
- }
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- results = hasGraphStmt.executeQuery();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
-
- if (results.next())
- {
- int cnt = results.getInt(1);
-
- if (cnt > 0)
- {
- retval = true;
- }
-
- }
- }
- catch (Exception e)
- {
- throw new ConfigurationException("SQL query failed", e);
- }
- finally
- {
- if (results != null)
- {
- try
- {
- results.close();
- }
- catch (SQLException x)
- {
- LOG.error(CommonConstants.RESULTSET_CLOSE_ERR, x);
- }
- }
-
- }
-
- return retval;
-
- }
-
- @Override
- public SvcLogicGraph fetch(String module, String rpc, String version, String mode) throws SvcLogicException {
-
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- SvcLogicGraph retval = null;
- ResultSet results = null;
-
- PreparedStatement fetchGraphStmt;
- if (version == null)
- {
- fetchGraphStmt = fetchActiveGraphStmt;
- }
- else
- {
- fetchGraphStmt = fetchVersionGraphStmt;
- }
- try
- {
- fetchGraphStmt.setString(1, module);
- fetchGraphStmt.setString(2, rpc);
- fetchGraphStmt.setString(3, mode);
-
-
- if (version != null)
- {
- fetchGraphStmt.setString(4, version);
- }
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- results = fetchGraphStmt.executeQuery();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
-
- if (results.next())
- {
- Blob graphBlob = results.getBlob("graph");
-
- ObjectInputStream gStream = new ObjectInputStream(graphBlob.getBinaryStream());
-
- Object graphObj = gStream.readObject();
- gStream.close();
-
- if (graphObj instanceof SvcLogicGraph)
- {
- retval = (SvcLogicGraph) graphObj;
- }
- else
- {
- throw new ConfigurationException("invalid type for graph ("+graphObj.getClass().getName());
-
- }
- }
-
- }
- catch (Exception e)
- {
- throw new ConfigurationException("SQL query failed", e);
- }
- finally
- {
- if (results != null)
- {
- try
- {
- results.close();
- }
- catch (SQLException x)
- {
- LOG.error(CommonConstants.RESULTSET_CLOSE_ERR, x);
- }
- }
-
- }
-
- return retval;
- }
-
- public void store(SvcLogicGraph graph) throws SvcLogicException {
-
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- if (graph == null)
- {
- throw new SvcLogicException("graph cannot be null");
- }
-
- byte[] graphBytes;
-
- try (ByteArrayOutputStream byteStr = new ByteArrayOutputStream();
- ObjectOutputStream goutStr = new ObjectOutputStream(byteStr))
- {
-
- goutStr.writeObject(graph);
-
- graphBytes = byteStr.toByteArray();
-
- }
- catch (Exception e)
- {
- throw new SvcLogicException("could not serialize graph", e);
- }
-
- // If object already stored in database, delete it
- if (hasGraph(graph.getModule(), graph.getRpc(), graph.getVersion(), graph.getMode()))
- {
- delete(graph.getModule(), graph.getRpc(), graph.getVersion(), graph.getMode());
- }
-
- try
- {
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- storeGraphStmt.setString(1, graph.getModule());
- storeGraphStmt.setString(2, graph.getRpc());
- storeGraphStmt.setString(3, graph.getVersion());
- storeGraphStmt.setString(4, graph.getMode());
- storeGraphStmt.setString(5, "N");
- storeGraphStmt.setBlob(6, new ByteArrayInputStream(graphBytes));
-
- storeGraphStmt.executeUpdate();
- dbConn.commit();
-
- dbConn.setAutoCommit(oldAutoCommit);
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Could not write object to database", e);
- }
- }
-
- @Override
- public void delete(String module, String rpc, String version, String mode) throws SvcLogicException
- {
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- try
- {
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- deleteGraphStmt.setString(1, module);
- deleteGraphStmt.setString(2, rpc);
- deleteGraphStmt.setString(3, version);
- deleteGraphStmt.setString(4, mode);
-
-
- deleteGraphStmt.executeUpdate();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Could not delete object from database", e);
- }
- }
-
- @Override
- public void activate(SvcLogicGraph graph) throws SvcLogicException
- {
- try
- {
- boolean oldAutoCommit = dbConn.getAutoCommit();
-
- dbConn.setAutoCommit(false);
-
- // Deactivate any current active version
- deactivateStmt.setString(1, graph.getModule());
- deactivateStmt.setString(2, graph.getRpc());
- deactivateStmt.setString(3, graph.getMode());
- deactivateStmt.executeUpdate();
-
- // Activate this version
- activateStmt.setString(1, graph.getModule());
- activateStmt.setString(2, graph.getRpc());
- activateStmt.setString(3, graph.getVersion());
- activateStmt.setString(4, graph.getMode());
- activateStmt.executeUpdate();
-
- dbConn.commit();
-
- dbConn.setAutoCommit(oldAutoCommit);
-
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Could not activate graph", e);
- }
- }
-
- @Override
- public void registerNodeType(String nodeType) throws SvcLogicException {
-
- if (isValidNodeType(nodeType))
- {
- return;
- }
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- try
- {
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- registerNodeStmt.setString(1, nodeType);
- registerNodeStmt.executeUpdate();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Could not add node type to database", e);
- }
-
- }
-
- @Override
- public void unregisterNodeType(String nodeType) throws SvcLogicException {
-
- if (!isValidNodeType(nodeType))
- {
- return;
- }
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- try
- {
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- unregisterNodeStmt.setString(1, nodeType);
- unregisterNodeStmt.executeUpdate();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Could not delete node type from database", e);
- }
-
- }
-
- @Override
- public boolean isValidNodeType(String nodeType) throws SvcLogicException {
-
- boolean isValid = false;
-
- if (!isDbConnValid())
- {
-
- // Try reinitializing
- initDbResources();
-
- if (!isDbConnValid())
- {
- throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
- }
- }
-
- ResultSet results = null;
- try
- {
- validateNodeStmt.setString(1, nodeType);
-
- boolean oldAutoCommit = dbConn.getAutoCommit();
- dbConn.setAutoCommit(false);
- results = validateNodeStmt.executeQuery();
- dbConn.commit();
- dbConn.setAutoCommit(oldAutoCommit);
-
- if (results.next())
- {
- int cnt = results.getInt(1);
-
- if (cnt > 0)
- {
- isValid = true;
- }
- }
-
- }
- catch (Exception e)
- {
- throw new SvcLogicException("Cannot select node type from database", e);
- }
- finally
- {
- if (results != null)
- {
- try
- {
- results.close();
- }
- catch (SQLException x)
- {
- LOG.error(CommonConstants.RESULTSET_CLOSE_ERR, x);
- }
- }
-
- }
-
- return(isValid);
- }
+ }
+
+ private void prepStatements() throws ConfigurationException {
+
+ // Prepare statements
+ String hasVersionGraphSql = CommonConstants.JDBC_SELECT_COUNT + dbName + CommonConstants.SVCLOGIC_TABLE
+ + CommonConstants.JDBC_GRAPH_QUERY;
+
+ try {
+ hasVersionGraphStmt = dbConn.prepareStatement(hasVersionGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + hasVersionGraphSql, e);
+
+ }
+
+ String hasActiveGraphSql = CommonConstants.JDBC_SELECT_COUNT + dbName + CommonConstants.SVCLOGIC_TABLE
+ + CommonConstants.JDBC_ACTIVE_GRAPH_QUERY;
+
+ try {
+ hasActiveGraphStmt = dbConn.prepareStatement(hasActiveGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + hasVersionGraphSql, e);
+
+ }
+
+ String fetchVersionGraphSql = CommonConstants.JDBC_SELECT_GRAPGH + dbName + CommonConstants.SVCLOGIC_TABLE
+ + CommonConstants.JDBC_GRAPH_QUERY;
+
+ try {
+ fetchVersionGraphStmt = dbConn.prepareStatement(fetchVersionGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + fetchVersionGraphSql, e);
+
+ }
+
+ String fetchActiveGraphSql = CommonConstants.JDBC_SELECT_GRAPGH + dbName + CommonConstants.SVCLOGIC_TABLE
+ + CommonConstants.JDBC_ACTIVE_GRAPH_QUERY;
+
+ try {
+ fetchActiveGraphStmt = dbConn.prepareStatement(fetchActiveGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + fetchVersionGraphSql, e);
+
+ }
+
+ String storeGraphSql = CommonConstants.JDBC_INSERT + dbName
+ + ".SVC_LOGIC (module, rpc, version, mode, active, graph) VALUES(?, ?, ?, ?, ?, ?)";
+
+ try {
+ storeGraphStmt = dbConn.prepareStatement(storeGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + storeGraphSql, e);
+ }
+
+ String deleteGraphSql = CommonConstants.JDBC_DELETE + dbName
+ + ".SVC_LOGIC WHERE module = ? AND rpc = ? AND version = ? AND mode = ?";
+
+ try {
+ deleteGraphStmt = dbConn.prepareStatement(deleteGraphSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + deleteGraphSql, e);
+ }
+
+ String deactivateSql = CommonConstants.JDBC_UPDATE + dbName
+ + ".SVC_LOGIC SET active = 'N' WHERE module = ? AND rpc = ? AND mode = ?";
+
+ try {
+ deactivateStmt = dbConn.prepareStatement(deactivateSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + deactivateSql, e);
+ }
+
+ String activateSql = CommonConstants.JDBC_UPDATE + dbName
+ + ".SVC_LOGIC SET active = 'Y' WHERE module = ? AND rpc = ? AND version = ? AND mode = ?";
+
+ try {
+ activateStmt = dbConn.prepareStatement(activateSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + activateSql, e);
+ }
+
+ String registerNodeSql = CommonConstants.JDBC_INSERT + dbName + ".NODE_TYPES (nodetype) VALUES(?)";
+ try {
+ registerNodeStmt = dbConn.prepareStatement(registerNodeSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + registerNodeSql, e);
+ }
+
+ String unregisterNodeSql = CommonConstants.JDBC_DELETE + dbName + ".NODE_TYPES WHERE nodetype = ?";
+ try {
+ unregisterNodeStmt = dbConn.prepareStatement(unregisterNodeSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + unregisterNodeSql, e);
+ }
+
+ String validateNodeSql = CommonConstants.JDBC_SELECT_COUNT + dbName + ".NODE_TYPES WHERE nodetype = ?";
+ try {
+ validateNodeStmt = dbConn.prepareStatement(validateNodeSql);
+ } catch (Exception e) {
+ throw new ConfigurationException(CommonConstants.JDBC_STATEMENT_ERR + validateNodeSql, e);
+ }
+ }
+
+ private void initDbResources() throws ConfigurationException {
+ if ((dbDriver != null) && (dbDriver.length() > 0)) {
+
+ try {
+ Class.forName(dbDriver);
+ } catch (Exception e) {
+ throw new ConfigurationException("could not load driver class " + dbDriver, e);
+ }
+ }
+ getConnection();
+ createTable();
+ prepStatements();
+ }
+
+
+ @Override
+ public void init(Properties props) throws ConfigurationException {
+
+
+ dbUrl = props.getProperty("org.onap.ccsdk.sli.jdbc.url");
+ if ((dbUrl == null) || (dbUrl.length() == 0)) {
+ throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.url unset");
+ }
+
+ dbName = props.getProperty("org.onap.ccsdk.sli.jdbc.database");
+ if ((dbName == null) || (dbName.length() == 0)) {
+ throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.database unset");
+ }
+
+ dbUser = props.getProperty("org.onap.ccsdk.sli.jdbc.user");
+ if ((dbUser == null) || (dbUser.length() == 0)) {
+ throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.user unset");
+ }
+
+
+ dbPasswd = props.getProperty("org.onap.ccsdk.sli.jdbc.password");
+ if ((dbPasswd == null) || (dbPasswd.length() == 0)) {
+ throw new ConfigurationException("property org.onap.ccsdk.sli.jdbc.password unset");
+ }
+
+ dbDriver = props.getProperty("org.onap.ccsdk.sli.jdbc.driver");
+
+
+ initDbResources();
+
+ }
+
+ private boolean isDbConnValid() {
+
+ boolean isValid = false;
+
+ try {
+ if (dbConn != null) {
+ isValid = dbConn.isValid(1);
+ }
+ } catch (SQLException e) {
+ LOG.error("Not a valid db connection: ", e);
+ }
+
+ return isValid;
+ }
+
+ @Override
+ public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException {
+
+ if (!isDbConnValid()) {
+
+ // Try reinitializing
+ initDbResources();
+
+ if (!isDbConnValid()) {
+ throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
+ }
+ }
+
+ boolean retval = false;
+ ResultSet results = null;
+
+ PreparedStatement hasGraphStmt;
+ if (version == null) {
+ hasGraphStmt = hasActiveGraphStmt;
+ } else {
+ hasGraphStmt = hasVersionGraphStmt;
+ }
+
+ try {
+ hasGraphStmt.setString(1, module);
+ hasGraphStmt.setString(2, rpc);
+ hasGraphStmt.setString(3, mode);
+
+
+ if (version != null) {
+ hasGraphStmt.setString(4, version);
+ }
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+ dbConn.setAutoCommit(false);
+ results = hasGraphStmt.executeQuery();
+ dbConn.commit();
+ dbConn.setAutoCommit(oldAutoCommit);
+
+ if (results.next()) {
+ int cnt = results.getInt(1);
+
+ if (cnt > 0) {
+ retval = true;
+ }
+
+ }
+ } catch (Exception e) {
+ throw new ConfigurationException("SQL query failed", e);
+ } finally {
+ if (results != null) {
+ try {
+ results.close();
+ } catch (SQLException x) {
+ LOG.error(CommonConstants.RESULTSET_CLOSE_ERR, x);
+ }
+ }
+
+ }
+
+ return retval;
+
+ }
+
+ @Override
+ public SvcLogicGraph fetch(String module, String rpc, String version, String mode) throws SvcLogicException {
+
+
+ if (!isDbConnValid()) {
+
+ // Try reinitializing
+ initDbResources();
+
+ if (!isDbConnValid()) {
+ throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
+ }
+ }
+
+ SvcLogicGraph retval = null;
+ ResultSet results = null;
+
+ PreparedStatement fetchGraphStmt;
+ if (version == null) {
+ fetchGraphStmt = fetchActiveGraphStmt;
+ } else {
+ fetchGraphStmt = fetchVersionGraphStmt;
+ }
+ try {
+ fetchGraphStmt.setString(1, module);
+ fetchGraphStmt.setString(2, rpc);
+ fetchGraphStmt.setString(3, mode);
+
+
+ if (version != null) {
+ fetchGraphStmt.setString(4, version);
+ }
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+ dbConn.setAutoCommit(false);
+ results = fetchGraphStmt.executeQuery();
+ dbConn.commit();
+ dbConn.setAutoCommit(oldAutoCommit);
+
+ if (results.next()) {
+ Blob graphBlob = results.getBlob("graph");
+
+ ObjectInputStream gStream = new ObjectInputStream(graphBlob.getBinaryStream());
+
+ Object graphObj = gStream.readObject();
+ gStream.close();
+
+ if (graphObj instanceof SvcLogicGraph) {
+ retval = (SvcLogicGraph) graphObj;
+ } else {
+ throw new ConfigurationException("invalid type for graph (" + graphObj.getClass().getName());
+
+ }
+ }
+
+ } catch (Exception e) {
+ throw new ConfigurationException("SQL query failed", e);
+ } finally {
+ if (results != null) {
+ try {
+ results.close();
+ } catch (SQLException x) {
+ LOG.error(CommonConstants.RESULTSET_CLOSE_ERR, x);
+ }
+ }
+
+ }
+
+ return retval;
+ }
+
+ public void store(SvcLogicGraph graph) throws SvcLogicException {
+
+
+ if (!isDbConnValid()) {
+
+ // Try reinitializing
+ initDbResources();
+
+ if (!isDbConnValid()) {
+ throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
+ }
+ }
+
+ if (graph == null) {
+ throw new SvcLogicException("graph cannot be null");
+ }
+
+ byte[] graphBytes;
+
+ try (ByteArrayOutputStream byteStr = new ByteArrayOutputStream();
+ ObjectOutputStream goutStr = new ObjectOutputStream(byteStr)) {
+
+ goutStr.writeObject(graph);
+
+ graphBytes = byteStr.toByteArray();
+
+ } catch (Exception e) {
+ throw new SvcLogicException("could not serialize graph", e);
+ }
+
+ // If object already stored in database, delete it
+ if (hasGraph(graph.getModule(), graph.getRpc(), graph.getVersion(), graph.getMode())) {
+ delete(graph.getModule(), graph.getRpc(), graph.getVersion(), graph.getMode());
+ }
+
+ try {
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+ dbConn.setAutoCommit(false);
+ storeGraphStmt.setString(1, graph.getModule());
+ storeGraphStmt.setString(2, graph.getRpc());
+ storeGraphStmt.setString(3, graph.getVersion());
+ storeGraphStmt.setString(4, graph.getMode());
+ storeGraphStmt.setString(5, "N");
+ storeGraphStmt.setBlob(6, new ByteArrayInputStream(graphBytes));
+
+ storeGraphStmt.executeUpdate();
+ dbConn.commit();
+
+ dbConn.setAutoCommit(oldAutoCommit);
+ } catch (Exception e) {
+ throw new SvcLogicException("Could not write object to database", e);
+ }
+ }
+
+ @Override
+ public void delete(String module, String rpc, String version, String mode) throws SvcLogicException {
+ if (!isDbConnValid()) {
+
+ // Try reinitializing
+ initDbResources();
+
+ if (!isDbConnValid()) {
+ throw new ConfigurationException(CommonConstants.JDBC_CONN_ERR);
+ }
+ }
+
+ try {
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+ dbConn.setAutoCommit(false);
+ deleteGraphStmt.setString(1, module);
+ deleteGraphStmt.setString(2, rpc);
+ deleteGraphStmt.setString(3, version);
+ deleteGraphStmt.setString(4, mode);
+
+
+ deleteGraphStmt.executeUpdate();
+ dbConn.commit();
+ dbConn.setAutoCommit(oldAutoCommit);
+ } catch (Exception e) {
+ throw new SvcLogicException("Could not delete object from database", e);
+ }
+ }
+
+ @Override
+ public void activate(SvcLogicGraph graph) throws SvcLogicException {
+ try {
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+
+ dbConn.setAutoCommit(false);
+
+ // Deactivate any current active version
+ deactivateStmt.setString(1, graph.getModule());
+ deactivateStmt.setString(2, graph.getRpc());
+ deactivateStmt.setString(3, graph.getMode());
+ deactivateStmt.executeUpdate();
+
+ // Activate this version
+ activateStmt.setString(1, graph.getModule());
+ activateStmt.setString(2, graph.getRpc());
+ activateStmt.setString(3, graph.getVersion());
+ activateStmt.setString(4, graph.getMode());
+ activateStmt.executeUpdate();
+
+ dbConn.commit();
+
+ dbConn.setAutoCommit(oldAutoCommit);
+
+ } catch (Exception e) {
+ throw new SvcLogicException("Could not activate graph", e);
+ }
+ }
+
+ @Override
+ public void activate(String module, String rpc, String version, String mode) throws SvcLogicException {
+ try {
+ boolean oldAutoCommit = dbConn.getAutoCommit();
+
+ dbConn.setAutoCommit(false);
+
+ // Deactivate any current active version
+ deactivateStmt.setString(1, module);
+ deactivateStmt.setString(2, rpc);
+ deactivateStmt.setString(3, mode);
+ deactivateStmt.executeUpdate();
+
+ // Activate this version
+ activateStmt.setString(1, module);
+ activateStmt.setString(2, rpc);
+ activateStmt.setString(3, version);
+ activateStmt.setString(4, mode);
+ activateStmt.executeUpdate();
+
+ dbConn.commit();
+
+ dbConn.setAutoCommit(oldAutoCommit);
+
+ } catch (Exception e) {
+ throw new SvcLogicException("Could not activate graph", e);
+ }
+ }
+
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicLoader.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicLoader.java
new file mode 100644
index 00000000..bc8c1bdf
--- /dev/null
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicLoader.java
@@ -0,0 +1,168 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * 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;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SvcLogicLoader {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SvcLogicLoader.class);
+ SvcLogicStore store;
+ String directoryRoot;
+ String propFile;
+
+ public SvcLogicLoader(String directoryRoot, String propFile) {
+ store = SvcLogicParser.getStore(propFile);
+ this.directoryRoot = directoryRoot;
+ this.propFile = propFile;
+ }
+
+ public void loadAndActivate() throws IOException {
+ SvcLogicCrawler slc = new SvcLogicCrawler();
+ Files.walkFileTree(Paths.get(this.directoryRoot), slc);
+
+ loadGraphs(slc.getGraphPaths(), directoryRoot);
+
+ List<ActivationEntry> activationEntries = processActivationFiles(slc.getActivationPaths());
+ activateGraphs(activationEntries);
+ }
+
+ private List<ActivationEntry> processActivationFiles(List<Path> activationPaths) {
+ List<ActivationEntry> activationEntries = new ArrayList<ActivationEntry>();
+ for (Path activationFile : activationPaths) {
+ activationEntries.addAll(getActivationEntries(activationFile));
+ }
+ return activationEntries;
+
+ }
+
+ private void activateGraphs(List<ActivationEntry> activationEntries) {
+ for (ActivationEntry entry : activationEntries) {
+ try {
+ if (store.hasGraph(entry.module, entry.rpc, entry.version, entry.mode)) {
+ store.activate(entry.module, entry.rpc, entry.version, entry.mode);
+ } else {
+ LOGGER.error("hasGraph returned false for " + entry.toString());
+ }
+ } catch (SvcLogicException e) {
+ LOGGER.error("Failed to call hasGraph for " + entry.toString(), e);
+ }
+ }
+ }
+
+ protected List<ActivationEntry> getActivationEntries(Path activationFilePath) {
+ List<ActivationEntry> activationEntries = new ArrayList<>();
+ int lineNumber = 1;
+ try (BufferedReader br = Files.newBufferedReader(activationFilePath, StandardCharsets.US_ASCII)) {
+ String fileRead = br.readLine();
+ while (fileRead != null) {
+ String[] fields = fileRead.split("\\s");
+ if (fields.length == 4) {
+ activationEntries.add(parseActivationEntry(fields));
+ } else {
+ LOGGER.error("Activation entry [" + fileRead + "] is declared at line number " + lineNumber + " in the file " + activationFilePath + " and is invalid.");
+ }
+ fileRead = br.readLine();
+ lineNumber++;
+ }
+ return activationEntries;
+ } catch (IOException ioe) {
+ LOGGER.error("Couldn't read the activation file at " + activationFilePath, ioe);
+ return null;
+ }
+ }
+
+ protected void loadGraphs(List<Path> graphPaths, String directoryRoot) {
+ for (Path graphPath : graphPaths) {
+ try {
+ saveGraph(graphPath.toString());
+ } catch (Exception e) {
+ LOGGER.error("Couldn't load graph at " + graphPath, e);
+ }
+ }
+ }
+
+ private void saveGraph(String xmlFile) throws SvcLogicException {
+ File f = new File(xmlFile);
+ if (!f.canRead()) {
+ throw new ConfigurationException("Cannot read xml file (" + xmlFile + ")");
+ }
+
+ SvcLogicParser parser = new SvcLogicParser();
+ LinkedList<SvcLogicGraph> graphs = null;
+
+ try {
+ graphs = parser.parse(xmlFile);
+ } catch (Exception e) {
+ throw new SvcLogicException(e.getMessage(), e);
+ }
+
+ if (graphs == null) {
+ throw new SvcLogicException("Could not parse " + xmlFile);
+ }
+
+ for (Iterator<SvcLogicGraph> iter = graphs.iterator(); iter.hasNext();) {
+
+ SvcLogicGraph graph = iter.next();
+
+ try {
+ LOGGER.info("Saving " + graph.toString() + " to database");
+ store.store(graph);
+ } catch (Exception e) {
+ throw new SvcLogicException(e.getMessage(), e);
+ }
+
+ }
+ }
+
+ protected ActivationEntry parseActivationEntry(String[] fileInput) {
+ return new ActivationEntry(fileInput[0], fileInput[1], fileInput[2], fileInput[3]);
+ }
+
+ protected String getValue(String raw, String attributeName) {
+ raw = raw.substring(attributeName.length() + 1);
+ if (raw.contains(">")) {
+ raw = raw.substring(0, raw.lastIndexOf('>'));
+ }
+ if (raw.endsWith("'")) {
+ raw = raw.substring(0, raw.lastIndexOf('\''));
+ }
+ if (raw.endsWith("\"")) {
+ raw = raw.substring(0, raw.lastIndexOf('"'));
+ }
+ return raw;
+ }
+
+
+}
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 a33ba476..ee260433 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,32 +21,29 @@
package org.onap.ccsdk.sli.core.sli;
+import java.io.File;
+import java.io.IOException;
+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;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
-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
*
*/
public class SvcLogicParser {
- private SvcLogicStore store = null;
static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
@@ -64,282 +61,247 @@ public class SvcLogicParser {
private static final String SVCLOGIC_XSD = "/svclogic.xsd";
private class SvcLogicHandler extends DefaultHandler {
- private Locator locator = null;
- private String module = null;
- private String version = null;
- private LinkedList<SvcLogicGraph> graphs = null;
- private SvcLogicGraph curGraph = null;
- private SvcLogicNode curNode = null;
- private LinkedList<SvcLogicNode> nodeStack = null;
- private int curNodeId = 0;
- private String outcomeValue = null;
- private LinkedList<String> outcomeStack = null;
- private SvcLogicStore svcLogicStore = null;
-
- public SvcLogicHandler(LinkedList<SvcLogicGraph> graphs, SvcLogicStore store) {
- this.graphs = graphs;
- this.curNode = null;
- this.nodeStack = new LinkedList<>();
- this.outcomeStack = new LinkedList<>();
- this.curNodeId = 1;
- this.outcomeValue = null;
- this.svcLogicStore = store;
+ private Locator locator = null;
+ private String module = null;
+ private String version = null;
+ private LinkedList<SvcLogicGraph> graphs = null;
+ private SvcLogicGraph curGraph = null;
+ private SvcLogicNode curNode = null;
+ private LinkedList<SvcLogicNode> nodeStack = null;
+ private int curNodeId = 0;
+ private String outcomeValue = null;
+ private LinkedList<String> outcomeStack = null;
+
+ public SvcLogicHandler(LinkedList<SvcLogicGraph> graphs) {
+ this.graphs = graphs;
+ this.curNode = null;
+ this.nodeStack = new LinkedList<>();
+ this.outcomeStack = new LinkedList<>();
+ this.curNodeId = 1;
+ this.outcomeValue = null;
+ }
- }
+ @Override
+ public void setDocumentLocator(Locator locator) {
+ this.locator = locator;
+ }
- @Override
- public void setDocumentLocator(Locator locator) {
- this.locator = locator;
- }
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes)
+ throws SAXException {
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+ // Handle service-logic (graph) tag
+ if ("service-logic".equalsIgnoreCase(qName)) {
- // Handle service-logic (graph) tag
- if ("service-logic".equalsIgnoreCase(qName)) {
+ module = attributes.getValue("module");
+ if (module == null || module.length() == 0) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Missing 'module' attribute from service-logic tag");
+ }
- module = attributes.getValue("module");
- if (module == null || module.length() == 0) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Missing 'module' attribute from service-logic tag");
- }
+ version = attributes.getValue("version");
+ if (version == null || version.length() == 0) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Missing 'version' attribute from service-logic tag");
+ }
- version = attributes.getValue("version");
- if (version == null || version.length() == 0) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Missing 'version' attribute from service-logic tag");
+ return;
}
- return;
- }
+ if ("method".equalsIgnoreCase(qName)) {
- if ("method".equalsIgnoreCase(qName)) {
+ if (curGraph != null) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Cannot nest module tags");
+ }
- if (curGraph != null) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Cannot nest module tags");
- }
+ curGraph = new SvcLogicGraph();
+ curGraph.setModule(module);
+ curGraph.setVersion(version);
+ this.curNodeId = 1;
- curGraph = new SvcLogicGraph();
- curGraph.setModule(module);
- curGraph.setVersion(version);
- this.curNodeId = 1;
+ String attrValue = attributes.getValue("rpc");
+ if (attrValue == null || attrValue.length() == 0) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Missing 'rpc' attribute for method tag");
+ }
+ curGraph.setRpc(attrValue);
- String attrValue = attributes.getValue("rpc");
- if (attrValue == null || attrValue.length() == 0) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Missing 'rpc' attribute for method tag");
- }
- curGraph.setRpc(attrValue);
+ attrValue = attributes.getValue("mode");
+ if (attrValue == null || attrValue.length() == 0) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Missing 'mode' attribute for method tag");
+ }
+ curGraph.setMode(attrValue);
- attrValue = attributes.getValue("mode");
- if (attrValue == null || attrValue.length() == 0) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Missing 'mode' attribute for method tag");
+ return;
}
- curGraph.setMode(attrValue);
- return;
- }
+ // Handle outcome (edge) tag
+ if ("outcome".equalsIgnoreCase(qName)) {
+ String refValue = attributes.getValue("ref");
+
+ if (refValue != null) {
+ SvcLogicNode refNode = curGraph.getNamedNode(refValue);
+
+ if (refNode != null) {
+ try {
+ curNode.addOutcome(attributes.getValue("value"), refNode);
+ } catch (SvcLogicException e) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber()
+ + " " + "Cannot add outcome", e);
+ }
+ } else {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "ref to unknown node " + refValue);
+ }
+ return;
+ }
+
+ if (outcomeValue != null) {
+ outcomeStack.push(outcomeValue);
+ }
+ outcomeValue = attributes.getValue("value");
- // Handle outcome (edge) tag
- if ("outcome".equalsIgnoreCase(qName)) {
- String refValue = attributes.getValue("ref");
+ return;
+ }
- if (refValue != null) {
- SvcLogicNode refNode = curGraph.getNamedNode(refValue);
+ // Handle parameter tag
+ if ("parameter".equalsIgnoreCase(qName)) {
+ String parmName = attributes.getValue("name");
+ String parmValue = attributes.getValue("value");
- if (refNode != null) {
+ if (parmName != null && parmName.length() > 0 && parmValue != null) {
try {
- curNode.addOutcome(attributes.getValue("value"), refNode);
- } catch (SvcLogicException e) {
+
+ curNode.mapParameter(parmName, parmValue);
+ } catch (Exception e) {
throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Cannot add outcome", e);
+ + " cannot set parameter " + parmName + " to " + parmValue + " [" + e.getMessage()
+ + "]");
}
- } else {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "ref to unknown node " + refValue);
}
- return;
- }
- if (outcomeValue != null) {
- outcomeStack.push(outcomeValue);
+ return;
}
- outcomeValue = attributes.getValue("value");
- return;
- }
+ // Handle node tags
+ String nodeName = attributes.getValue("name");
+ SvcLogicNode thisNode;
- // Handle parameter tag
- if ("parameter".equalsIgnoreCase(qName)) {
- String parmName = attributes.getValue("name");
- String parmValue = attributes.getValue("value");
- if (parmName != null && parmName.length() > 0 && parmValue != null) {
- try {
+ try {
+ if (nodeName != null && nodeName.length() > 0) {
+ thisNode = new SvcLogicNode(curNodeId++, qName, nodeName, curGraph);
+ } else {
+ thisNode = new SvcLogicNode(curNodeId++, qName, curGraph);
+ }
- curNode.mapParameter(parmName, parmValue);
- } catch (Exception e) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + " cannot set parameter " + parmName + " to " + parmValue + " [" + e.getMessage() + "]");
+ if (curGraph.getRootNode() == null) {
+ curGraph.setRootNode(thisNode);
}
- }
+ } catch (SvcLogicException e) {
+ throw new SAXException(
+ "line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " " + e.getMessage());
- return;
- }
+ }
- // Handle node tags
- String nodeName = attributes.getValue("name");
- SvcLogicNode thisNode;
+ int numAttributes = attributes.getLength();
- try {
- if (!svcLogicStore.isValidNodeType(qName)) {
- throw new SAXNotRecognizedException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber()
- + " " + "Unknown tag " + qName);
- }
- } catch (Exception e) {
- throw new SAXNotRecognizedException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber()
- + " " + "Cannot validate node type " + qName);
- }
+ for (int i = 0; i < numAttributes; i++) {
+ String attrName = attributes.getQName(i);
+ if (!"name".equalsIgnoreCase(attrName)) {
+ try {
- try {
- if (nodeName != null && nodeName.length() > 0) {
- thisNode = new SvcLogicNode(curNodeId++, qName, nodeName, curGraph);
- } else {
- thisNode = new SvcLogicNode(curNodeId++, qName, curGraph);
+ String attrValueStr = attributes.getValue(i);
+ SvcLogicExpression attrValue;
+ if (attrValueStr.trim().startsWith("`")) {
+ int lastParen = attrValueStr.lastIndexOf('`');
+ String evalExpr = attrValueStr.trim().substring(1, lastParen);
+ attrValue = SvcLogicExpressionFactory.parse(evalExpr);
+
+ } else {
+ if (Character.isDigit(attrValueStr.charAt(0))) {
+ attrValue = new SvcLogicAtom("NUMBER", attrValueStr);
+ } else {
+ attrValue = new SvcLogicAtom("STRING", attrValueStr);
+ }
+ }
+ thisNode.setAttribute(attrName, attrValue);
+ } catch (Exception e) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
+ + "Cannot set attribute " + attrName, e);
+ }
+ }
}
- if (curGraph.getRootNode() == null) {
- curGraph.setRootNode(thisNode);
+ if (curNode != null) {
+ try {
+ if ("block".equalsIgnoreCase(curNode.getNodeType()) || "for".equalsIgnoreCase(curNode.getNodeType())
+ || "while".equalsIgnoreCase(curNode.getNodeType())) {
+ curNode.addOutcome(Integer.toString(curNode.getNumOutcomes() + 1), thisNode);
+ } else {
+ if (outcomeValue == null) {
+ throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber()
+ + " " + curNode.getNodeType() + " node expects outcome, instead found "
+ + thisNode.getNodeType());
+ }
+ curNode.addOutcome(outcomeValue, thisNode);
+ }
+ } catch (SvcLogicException e) {
+ throw new SAXException(
+ "line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " " + e.getMessage());
+ }
+ nodeStack.push(curNode);
}
- } catch (SvcLogicException e) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + e.getMessage());
+ curNode = thisNode;
}
- int numAttributes = attributes.getLength();
-
- for (int i = 0; i < numAttributes; i++) {
- String attrName = attributes.getQName(i);
- if (!"name".equalsIgnoreCase(attrName)) {
- try {
-
- String attrValueStr = attributes.getValue(i);
- SvcLogicExpression attrValue;
- if (attrValueStr.trim().startsWith("`")) {
- int lastParen = attrValueStr.lastIndexOf('`');
- String evalExpr = attrValueStr.trim().substring(1, lastParen);
- attrValue = SvcLogicExpressionFactory.parse(evalExpr);
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
- } else {
- if (Character.isDigit(attrValueStr.charAt(0))) {
- attrValue = new SvcLogicAtom("NUMBER", attrValueStr);
- } else {
- attrValue = new SvcLogicAtom("STRING", attrValueStr);
- }
+ // Handle close of service-logic tag
+ if ("service-logic".equalsIgnoreCase(qName)) {
+ // Nothing more to do
+ return;
}
- thisNode.setAttribute(attrName, attrValue);
- } catch (Exception e) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + "Cannot set attribute " + attrName, e);
+
+ // Handle close of method tag
+ if ("method".equalsIgnoreCase(qName)) {
+ graphs.add(curGraph);
+ curGraph = null;
+ return;
}
- }
- }
- if (curNode != null) {
- try {
- if ("block".equalsIgnoreCase(curNode.getNodeType()) || "for".equalsIgnoreCase(curNode.getNodeType())
- || "while".equalsIgnoreCase(curNode.getNodeType())) {
- curNode.addOutcome(Integer.toString(curNode.getNumOutcomes() + 1), thisNode);
+ // Handle close of outcome tag
+ if ("outcome".equalsIgnoreCase(qName)) {
+ // Finished this outcome - pop the outcome stack
+ if (outcomeStack.isEmpty()) {
+ outcomeValue = null;
} else {
- if (outcomeValue == null) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + curNode.getNodeType() + " node expects outcome, instead found " + thisNode.getNodeType());
- }
- curNode.addOutcome(outcomeValue, thisNode);
+ outcomeValue = outcomeStack.pop();
}
- } catch (SvcLogicException e) {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + e.getMessage());
+ return;
}
- nodeStack.push(curNode);
- }
- curNode = thisNode;
-
- }
-
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- // Handle close of service-logic tag
- if ("service-logic".equalsIgnoreCase(qName)) {
- // Nothing more to do
- return;
- }
-
- // Handle close of method tag
- if ("method".equalsIgnoreCase(qName)) {
- graphs.add(curGraph);
- curGraph = null;
- return;
- }
+ // Handle close of parameter tag - do nothing
+ if ("parameter".equalsIgnoreCase(qName)) {
+ return;
+ }
- // Handle close of outcome tag
- if ("outcome".equalsIgnoreCase(qName)) {
- // Finished this outcome - pop the outcome stack
- if (outcomeStack.isEmpty()) {
- outcomeValue = null;
+ // Handle close of a node tag
+ if (nodeStack.isEmpty()) {
+ curNode = null;
} else {
- outcomeValue = outcomeStack.pop();
+ curNode = nodeStack.pop();
}
- return;
- }
-
- // Handle close of parameter tag - do nothing
- if ("parameter".equalsIgnoreCase(qName)) {
- return;
- }
-
- // Handle close of a node tag
- if (nodeStack.isEmpty()) {
- curNode = null;
- } else {
- curNode = nodeStack.pop();
- }
- }
-
- @Override
- public void error(SAXParseException arg0) throws SAXException {
- throw new SAXException("line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " "
- + arg0.getMessage());
- }
-
- }
-
- public SvcLogicParser(SvcLogicStore store) {
- this.store = store;
- }
-
- public SvcLogicParser(String propFile) {
-
- try {
- this.store = SvcLogicStoreFactory.getSvcLogicStore(propFile);
- } catch (Exception e) {
- LOGGER.error(SVC_LOGIC_STORE_ERROR, e);
-
}
- }
-
- public SvcLogicParser(InputStream propStr) {
-
- try {
- this.store = SvcLogicStoreFactory.getSvcLogicStore(propStr);
- } catch (Exception e) {
- LOGGER.error(SVC_LOGIC_STORE_ERROR, e);
-
+ @Override
+ public void error(SAXParseException arg0) throws SAXException {
+ throw new SAXException(
+ "line " + locator.getLineNumber() + ":" + locator.getColumnNumber() + " " + arg0.getMessage());
}
}
@@ -382,7 +344,15 @@ public class SvcLogicParser {
graphs = new LinkedList<>();
- saxParser.parse(fileName, new SvcLogicHandler(graphs, store));
+ saxParser.parse(fileName, new SvcLogicHandler(graphs));
+
+ try {
+ for (SvcLogicGraph graph : graphs) {
+ graph.setMd5sum(CheckSumHelper.md5SumFromFile(fileName));
+ }
+ } catch (Exception exc) {
+ LOGGER.error("Couldn't set md5sum on graphs", exc);
+ }
} catch (Exception e) {
LOGGER.error("Parsing failed ", e);
@@ -422,18 +392,18 @@ public class SvcLogicParser {
String propfile = null;
switch (argv.length) {
- case 6:
- version = argv[4];
- propfile = argv[5];
- case 5:
- if (propfile == null) {
- propfile = argv[4];
- }
- SvcLogicStore store = SvcLogicParser.getStore(propfile);
- SvcLogicParser.print(argv[1], argv[2], argv[3], version, store);
- break;
- default:
- SvcLogicParser.usage();
+ case 6:
+ version = argv[4];
+ propfile = argv[5];
+ case 5:
+ if (propfile == null) {
+ propfile = argv[4];
+ }
+ SvcLogicStore store = SvcLogicParser.getStore(propfile);
+ SvcLogicParser.print(argv[1], argv[2], argv[3], version, store);
+ break;
+ default:
+ SvcLogicParser.usage();
}
} else if ("get-source".equalsIgnoreCase(argv[0])) {
@@ -445,32 +415,43 @@ public class SvcLogicParser {
}
} else if ("activate".equalsIgnoreCase(argv[0])) {
if (argv.length == 6) {
- SvcLogicStore store = SvcLogicParser.getStore(argv[5]);
- SvcLogicParser.activate(argv[1], argv[2], argv[3], argv[4], store);
+ SvcLogicStore store = SvcLogicParser.getStore(argv[5]);
+ SvcLogicParser.activate(argv[1], argv[2], argv[3], argv[4], store);
} else {
- SvcLogicParser.usage();
+ SvcLogicParser.usage();
}
} else if ("validate".equalsIgnoreCase(argv[0])) {
if (argv.length == 3) {
- String xmlfile = argv[1];
- String propfile = argv[2];
+ String xmlfile = argv[1];
+ String propfile = argv[2];
- System.setProperty(SLI_VALIDATING_PARSER, "true");
- SvcLogicStore store = SvcLogicParser.getStore(propfile);
- try {
- SvcLogicParser.validate(xmlfile, store);
- } catch (Exception e) {
- LOGGER.error("Validate failed", e);
+ System.setProperty(SLI_VALIDATING_PARSER, "true");
+ SvcLogicStore store = SvcLogicParser.getStore(propfile);
+ try {
+ SvcLogicParser.validate(xmlfile, store);
+ } catch (Exception e) {
+ LOGGER.error("Validate failed", e);
+ }
+ } else {
+ SvcLogicParser.usage();
}
+ } else if ("install".equalsIgnoreCase(argv[0])) {
+ if (argv.length == 3) {
+ SvcLogicLoader loader = new SvcLogicLoader(argv[1], argv[2]);
+ try {
+ loader.loadAndActivate();
+ } catch (IOException e) {
+ LOGGER.error(e.getMessage(), e);
+ }
} else {
- SvcLogicParser.usage();
+ SvcLogicParser.usage();
}
}
System.exit(0);
}
- private static SvcLogicStore getStore(String propfile) {
+ protected static SvcLogicStore getStore(String propfile) {
SvcLogicStore store = null;
@@ -491,7 +472,7 @@ public class SvcLogicParser {
throw new ConfigurationException("Cannot read xml file (" + xmlfile + ")");
}
- SvcLogicParser parser = new SvcLogicParser(store);
+ SvcLogicParser parser = new SvcLogicParser();
LinkedList<SvcLogicGraph> graphs;
try {
LOGGER.info("Loading {}", xmlfile);
@@ -511,8 +492,8 @@ public class SvcLogicParser {
String version = graph.getVersion();
String mode = graph.getMode();
try {
- LOGGER.info("Saving SvcLogicGraph to database (module:{},rpc:{},mode:{},version:{})", module, rpc,
- mode, version);
+ LOGGER.info("Saving SvcLogicGraph to database (module:{},rpc:{},mode:{},version:{})", module, rpc, mode,
+ version);
store.store(graph);
} catch (Exception e) {
throw new SvcLogicException(e.getMessage(), e);
@@ -528,7 +509,7 @@ public class SvcLogicParser {
throw new ConfigurationException("Cannot read xml file (" + xmlfile + ")");
}
- SvcLogicParser parser = new SvcLogicParser(store);
+ SvcLogicParser parser = new SvcLogicParser();
LinkedList<SvcLogicGraph> graphs;
try {
LOGGER.info("Validating {}", xmlfile);
@@ -607,6 +588,9 @@ public class SvcLogicParser {
System.err.println(" OR SvcLogicParser print <module> <rpc> <mode> [<version>] <prop-file>");
System.err.println(" OR SvcLogicParser get-source <module> <rpc> <mode> <version> <prop-file>");
System.err.println(" OR SvcLogicParser activate <module> <rpc> <version> <mode>");
+ System.err.println(" OR SvcLogicParser validate <file path to graph> <prop-file>");
+ System.err.println(" OR SvcLogicParser install <service-logic directory path> <prop-file>");
+
System.exit(1);
}
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicStore.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicStore.java
index 3a3f9288..2eda67f1 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicStore.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicStore.java
@@ -26,12 +26,11 @@ import java.util.Properties;
public interface SvcLogicStore {
public void init(Properties props) throws SvcLogicException;
- public void registerNodeType(String nodeType) throws SvcLogicException;
- public void unregisterNodeType(String nodeType) throws SvcLogicException;
- public boolean isValidNodeType(String nodeType) throws SvcLogicException;
public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException;
public SvcLogicGraph fetch(String module, String rpc, String version, String mode) throws SvcLogicException;
public void store(SvcLogicGraph graph) throws SvcLogicException;
public void delete(String module, String rpc, String version, String mode) throws SvcLogicException;
public void activate(SvcLogicGraph graph) throws SvcLogicException;
+ public void activate(String module, String rpc, String version, String mode) throws SvcLogicException;
+
}
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 0912ee9f..368d9f95 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
@@ -79,31 +79,6 @@ public class ITCaseSvcLogicParser {
props.setProperty("org.onap.ccsdk.sli.jdbc.database", "test");
props.setProperty("org.onap.ccsdk.sli.jdbc.url", config.getURL("test"));
-
- store = SvcLogicStoreFactory.getSvcLogicStore(props);
-
- assertNotNull(store);
-
- store.registerNodeType("switch");
- store.registerNodeType("block");
- store.registerNodeType("get-resource");
- store.registerNodeType("reserve");
- store.registerNodeType("is-available");
- store.registerNodeType("exists");
- store.registerNodeType("configure");
- store.registerNodeType("return");
- store.registerNodeType("record");
- store.registerNodeType("allocate");
- store.registerNodeType("release");
- store.registerNodeType("for");
- store.registerNodeType("set");
- store.registerNodeType("call");
- store.registerNodeType("delete");
- store.registerNodeType("execute");
- store.registerNodeType("notify");
- store.registerNodeType("save");
- store.registerNodeType("update");
- store.registerNodeType("break");
}
@AfterClass
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java
index 7c1fa8e4..cbde44d6 100644
--- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java
+++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java
@@ -134,7 +134,6 @@ public class SvcLogicActivator implements BundleActivator {
// Initialize SvcLogicStore
try {
SvcLogicStore store = getStore();
- registerNodeTypes(store);
} catch (ConfigurationException e) {
LOG.warn("Could not initialize SvcLogicScore", e);
}
@@ -148,13 +147,6 @@ public class SvcLogicActivator implements BundleActivator {
if (registrations != null) {
for (ServiceRegistration reg : registrations) {
ServiceReference regRef = reg.getReference();
- /* Don't bother to remove node types from table
- String nodeType = (String) regRef.getProperty("nodeType");
- if (nodeType != null) {
- LOG.info("SLI - unregistering node type " + nodeType);
- store.unregisterNodeType(nodeType);
- }
- */
reg.unregister();
}
synchronized (SvcLogicActivator.class) {
@@ -185,30 +177,5 @@ public class SvcLogicActivator implements BundleActivator {
return(store);
}
- private static void registerNodeTypes(SvcLogicStore store) throws SvcLogicException {
- if (store == null) {
- return;
- }
- // Advertise built-in node executors
- LOG.info("SLI : Registering built-in node executors");
- Hashtable propTable = new Hashtable();
-
- for (String nodeType : BUILTIN_NODES.keySet()) {
- LOG.info("SLI - registering node type {}", nodeType);
- propTable.clear();
- propTable.put("nodeType", nodeType);
-
- ServiceRegistration reg = bundleCtx.registerService(SvcLogicNodeExecutor.class.getName(),
- BUILTIN_NODES.get(nodeType), propTable);
- registrations.add(reg);
-
- store.registerNodeType(nodeType);
-
- LOG.info("SLI - registering node executor");
-
- ((SvcLogicServiceImpl)svcLogicServiceImpl).registerExecutor(nodeType, BUILTIN_NODES.get(nodeType));
-
- }
- }
}
diff --git a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
index 0a0e28c4..724e946d 100644
--- a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
+++ b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
@@ -99,20 +99,7 @@ public class ITCaseSvcLogicGraphExecutor {
assertNotNull(store);
- store.registerNodeType("switch");
- store.registerNodeType("block");
- store.registerNodeType("get-resource");
- store.registerNodeType("reserve");
- store.registerNodeType("is-available");
- store.registerNodeType("exists");
- store.registerNodeType("configure");
- store.registerNodeType("return");
- store.registerNodeType("record");
- store.registerNodeType("allocate");
- store.registerNodeType("release");
- store.registerNodeType("for");
- store.registerNodeType("set");
- SvcLogicParser parser = new SvcLogicParser(store);
+ SvcLogicParser parser = new SvcLogicParser();
// Loop through executor tests
@@ -165,20 +152,8 @@ public class ITCaseSvcLogicGraphExecutor {
assertNotNull(store);
- store.registerNodeType("switch");
- store.registerNodeType("block");
- store.registerNodeType("get-resource");
- store.registerNodeType("reserve");
- store.registerNodeType("is-available");
- store.registerNodeType("exists");
- store.registerNodeType("configure");
- store.registerNodeType("return");
- store.registerNodeType("record");
- store.registerNodeType("allocate");
- store.registerNodeType("release");
- store.registerNodeType("for");
- store.registerNodeType("set");
- SvcLogicParser parser = new SvcLogicParser(store);
+
+ SvcLogicParser parser = new SvcLogicParser();
// Loop through executor tests