diff --git a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java index 11d8ad5b2fdb7bdd8c8c873f94d3e38c4fbdcc00..d8f18014b8ec5bd3a6f58a699151671b6a9fa3ef 100644 --- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java @@ -41,30 +41,30 @@ public class NodeDAO { String path = nodeURI.replaceAll("vos://[^/]+", ""); String parentPath = getParentPath(path); - String sql = "SELECT path from " + String sql = "SELECT path, relative_path from " + "node n join node_vos_path p on n.node_id = p.node_id " + "where p.vos_path = ?"; - List<String> ltreeParentPaths = jdbcTemplate.query(conn -> { + List<NodePaths> paths = jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, parentPath); return ps; }, (row, index) -> { - return row.getString("path"); + return getPathsFromResultSet(row); }); - if (ltreeParentPaths.isEmpty()) { + if (paths.isEmpty()) { throw new IllegalStateException("Unable to find parent node during node creation"); } - if (ltreeParentPaths.size() > 1) { + if (paths.size() > 1) { throw new IllegalStateException("Multiple ltree parent paths found for " + parentPath); } StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO node"); sb.append(" (name, busy_state, owner_id, creator_id, group_read, group_write,"); - sb.append(" is_public, parent_path, type)"); - sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ? )"); + sb.append(" is_public, parent_path, parent_relative_path, type)"); + sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"); jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sb.toString()); @@ -75,8 +75,9 @@ public class NodeDAO { ps.setArray(5, fromPropertyToArray(ps, getProperty(myNode, getPropertyURI("groupread")))); ps.setArray(6, fromPropertyToArray(ps, getProperty(myNode, getPropertyURI("groupwrite")))); ps.setBoolean(7, Boolean.valueOf(getProperty(myNode, getPropertyURI("publicread")))); - ps.setObject(8, ltreeParentPaths.get(0), Types.OTHER); - ps.setObject(9, getDbNodeType(myNode), Types.OTHER); + ps.setObject(8, paths.get(0).path, Types.OTHER); + ps.setObject(9, paths.get(0).relativePath, Types.OTHER); + ps.setObject(10, getDbNodeType(myNode), Types.OTHER); return ps; }); @@ -283,18 +284,18 @@ public class NodeDAO { private class NodePaths { - private String path; - private String parentPath; + private final String path; + private final String relativePath; - public NodePaths(String myPath, String myParentPath) { + public NodePaths(String myPath, String myRelativePath) { this.path = myPath; - this.parentPath = myParentPath; + this.relativePath = myRelativePath; } @Override public String toString() { - return parentPath + " " + path; + return relativePath + " " + path; } } }