X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-dom-xsql%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fxsql%2Fjdbc%2FJDBCResultSet.java;h=6689908204e19e9aced43dccbb28d2dd5a8f2c07;hb=1e884647502a8d91f8a57bde8193c60b9bbcce0d;hp=e47bf870cc341eefc64b3ca0d827d5313ef9c927;hpb=d480609098769004b964043d7ee4c7458de19fbc;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/jdbc/JDBCResultSet.java b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/jdbc/JDBCResultSet.java index e47bf870cc..6689908204 100644 --- a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/jdbc/JDBCResultSet.java +++ b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/jdbc/JDBCResultSet.java @@ -41,16 +41,18 @@ import org.opendaylight.controller.md.sal.dom.xsql.XSQLODLUtils; public class JDBCResultSet implements Serializable, ResultSet, ResultSetMetaData { private static final long serialVersionUID = -7450200738431047057L; + private static final ClassLoader CLASS_LOADER = JDBCResultSet.class.getClassLoader(); + private static final Class[] PROXY_INTERFACES = new Class[] { ResultSet.class }; + private static int nextID = 0; private String sql = null; private List tablesInQuery = new ArrayList(); private Map tablesInQueryMap = new ConcurrentHashMap(); private List fieldsInQuery = new ArrayList(); - private transient LinkedList records = new LinkedList(); - private transient Map currentRecord = null; + private transient LinkedList> records = new LinkedList<>(); + private transient Map currentRecord = null; private boolean finished = false; private int id = 0; - private static Integer nextID = new Integer(0); public int numberOfTasks = 0; private Map>> criteria = new ConcurrentHashMap>>(); private Exception err = null; @@ -58,7 +60,7 @@ public class JDBCResultSet implements Serializable, ResultSet, private transient Map subQueries = new HashMap(); public ResultSet getProxy() { - return (ResultSet) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] {ResultSet.class }, new JDBCProxy(this)); + return (ResultSet) Proxy.newProxyInstance(CLASS_LOADER, PROXY_INTERFACES, new JDBCProxy(this)); } public void setSQL(String _sql) { @@ -66,16 +68,18 @@ public class JDBCResultSet implements Serializable, ResultSet, } public JDBCResultSet addSubQuery(String _sql,String logicalName) { - if(subQueries == null) + if (subQueries == null) { subQueries = new HashMap(); + } JDBCResultSet rs = new JDBCResultSet(_sql); this.subQueries.put(logicalName,rs); return rs; } public Map getSubQueries() { - if(this.subQueries==null) + if (this.subQueries==null) { this.subQueries = new HashMap<>(); + } return this.subQueries; } @@ -108,7 +112,7 @@ public class JDBCResultSet implements Serializable, ResultSet, } } - public int isObjectFitCriteria(Map objValues, String tableName) { + public int isObjectFitCriteria(Map objValues, String tableName) { Map> tblCriteria = criteria .get(tableName); if (tblCriteria == null) { @@ -197,18 +201,18 @@ public class JDBCResultSet implements Serializable, ResultSet, return this.records.size(); } - public void addRecord(Map r) { + public void addRecord(Map r) { synchronized (this) { if (records == null) { - records = new LinkedList(); + records = new LinkedList<>(); } records.add(r); this.notifyAll(); } } - public void addRecord(ArrayList hierarchy) { - Map rec = new HashMap(); + public void addRecord(ArrayList hierarchy) { + Map rec = new HashMap<>(); for (int i = hierarchy.size() - 1; i >= 0; i--) { Object element = hierarchy.get(i); for (XSQLColumn c : fieldsInQuery) { @@ -230,7 +234,7 @@ public class JDBCResultSet implements Serializable, ResultSet, public boolean next() { this.currentRecord = null; if (records == null) { - records = new LinkedList(); + records = new LinkedList<>(); } while (!finished || records.size() > 0) { synchronized (this) { @@ -260,12 +264,12 @@ public class JDBCResultSet implements Serializable, ResultSet, return false; } - public Map getCurrent() { + public Map getCurrent() { return this.currentRecord; } private void createRecord(Object data, XSQLBluePrintNode node) { - Map rec = new HashMap(); + Map rec = new HashMap<>(); for (XSQLColumn c : this.fieldsInQuery) { if (c.getTableName().equals(node.getBluePrintNodeName())) { try { @@ -285,20 +289,20 @@ public class JDBCResultSet implements Serializable, ResultSet, } public static class Record { - public Map data = new HashMap(); + public Map data = new HashMap<>(); public Object element = null; - public Map getRecord() { + public Map getRecord() { return this.data; } } - private Map collectColumnValues(Object node, XSQLBluePrintNode bpn) { - Map subChildren = XSQLODLUtils.getChildren(node); - Map result = new HashMap(); + private Map collectColumnValues(Object node, XSQLBluePrintNode bpn) { + Map subChildren = XSQLODLUtils.getChildren(node); + Map result = new HashMap<>(); for (Object stc : subChildren.values()) { if (stc.getClass().getName().endsWith("ImmutableAugmentationNode")) { - Map values = XSQLODLUtils.getChildren(stc); + Map values = XSQLODLUtils.getChildren(stc); for (Object key : values.keySet()) { Object val = values.get(key); if (val.getClass().getName().endsWith("ImmutableLeafNode")) { @@ -323,7 +327,7 @@ public class JDBCResultSet implements Serializable, ResultSet, } private void addToData(Record rec, XSQLBluePrintNode bpn, - XSQLBluePrint bluePrint, Map fullRecord) { + XSQLBluePrint bluePrint, Map fullRecord) { XSQLBluePrintNode eNodes[] = bluePrint .getBluePrintNodeByODLTableName(XSQLODLUtils .getNodeIdentiofier(rec.element)); @@ -381,13 +385,15 @@ public class JDBCResultSet implements Serializable, ResultSet, for (Object child : children) { String odlNodeName = XSQLODLUtils.getNodeIdentiofier(child); - if (odlNodeName == null) + if (odlNodeName == null) { continue; + } XSQLBluePrintNode eNodes[] = bluePrint .getBluePrintNodeByODLTableName(odlNodeName); - if (eNodes == null) + if (eNodes == null) { continue; + } boolean match = false; for (XSQLBluePrintNode enode : eNodes) { @@ -397,8 +403,9 @@ public class JDBCResultSet implements Serializable, ResultSet, } } - if (!match) + if (!match) { continue; + } if (child.getClass().getName().endsWith("ImmutableContainerNode")) { result.add(child); @@ -418,21 +425,21 @@ public class JDBCResultSet implements Serializable, ResultSet, return result; } - public List addRecords(Object element, XSQLBluePrintNode node, - boolean root, String tableName, XSQLBluePrint bluePrint) { - + public List addRecords(Object element, XSQLBluePrintNode node,boolean root, String tableName, XSQLBluePrint bluePrint) { List result = new LinkedList(); + //In case this is a sibling to the requested table, the elenment type + //won't be in the path of the leaf node + if(node==null){ + return result; + } String nodeID = XSQLODLUtils.getNodeIdentiofier(element); if (node.getODLTableName().equals(nodeID)) { - XSQLBluePrintNode bluePrintNode = bluePrint - .getBluePrintNodeByODLTableName(nodeID)[0]; + XSQLBluePrintNode bluePrintNode = bluePrint.getBluePrintNodeByODLTableName(nodeID)[0]; Record rec = new Record(); rec.element = element; - XSQLBluePrintNode bpn = this.tablesInQueryMap.get(bluePrintNode - .getBluePrintNodeName()); - if (this.criteria.containsKey(bluePrintNode.getBluePrintNodeName()) - || bpn != null) { - Map allKeyValues = collectColumnValues(element, bpn); + XSQLBluePrintNode bpn = this.tablesInQueryMap.get(bluePrintNode.getBluePrintNodeName()); + if (this.criteria.containsKey(bluePrintNode.getBluePrintNodeName()) || bpn != null) { + Map allKeyValues = collectColumnValues(element, bpn); if (!(isObjectFitCriteria(allKeyValues, bpn.getBluePrintNodeName()) == 1)) { return EMPTY_RESULT; @@ -448,8 +455,7 @@ public class JDBCResultSet implements Serializable, ResultSet, } XSQLBluePrintNode parent = node.getParent(); - List subRecords = addRecords(element, parent, false, tableName, - bluePrint); + List subRecords = addRecords(element, parent, false, tableName,bluePrint); for (Record subRec : subRecords) { List subO = getChildren(subRec.element, tableName, bluePrint); @@ -466,12 +472,13 @@ public class JDBCResultSet implements Serializable, ResultSet, for (XSQLBluePrintNode eNode : eNodes) { bpn = this.tablesInQueryMap.get(eNode .getBluePrintNodeName()); - if (bpn != null) + if (bpn != null) { break; + } } boolean isObjectInCriteria = true; if (bpn != null) { - Map allKeyValues = collectColumnValues(rec.element, bpn); + Map allKeyValues = collectColumnValues(rec.element, bpn); if ((isObjectFitCriteria(allKeyValues, bpn.getBluePrintNodeName()) == 1)) { addToData(rec, bpn, bluePrint, allKeyValues); @@ -482,8 +489,9 @@ public class JDBCResultSet implements Serializable, ResultSet, if (isObjectInCriteria) { if (root) { - if (!rec.data.isEmpty()) + if (!rec.data.isEmpty()) { addRecord(rec.data); + } } else { result.add(rec); }