From 5157ea1f139c2f14336fba6b6c9363eda0342544 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Tue, 19 Jan 2021 17:48:13 +0100
Subject: [PATCH] Fixed relative path issue in NodeDAO

---
 .../oats/vospace/persistence/NodeDAO.java     | 29 ++++++++++---------
 1 file changed, 15 insertions(+), 14 deletions(-)

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 11d8ad5..d8f1801 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;
         }
     }
 }
-- 
GitLab