From 78ff2e26ed49ed22da8b0cb3a874179c2b9be5fb Mon Sep 17 00:00:00 2001
From: Sara Bertocco <sara.bertocco@inaf.it>
Date: Wed, 17 Feb 2021 15:05:16 +0100
Subject: [PATCH] Conflicting

---
 .../oats/vospace/persistence/NodeDAO.java     | 121 +++---------------
 .../oats/vospace/persistence/NodeDAOTest.java |   2 +-
 2 files changed, 22 insertions(+), 101 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 216f64c..defef61 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
@@ -1,5 +1,7 @@
 package it.inaf.oats.vospace.persistence;
 
+import it.inaf.oats.vospace.datamodel.NodeProperties;
+import it.inaf.oats.vospace.datamodel.NodeUtils;
 import java.sql.Array;
 import net.ivoa.xml.vospace.v2.Node;
 import java.sql.PreparedStatement;
@@ -40,7 +42,7 @@ public class NodeDAO {
 
         String nodeURI = myNode.getUri();
         String path = nodeURI.replaceAll("vos://[^/]+", "");
-        String parentPath = getParentPath(path);
+        String parentPath = NodeUtils.getParentPath(path);
 
         String sql = "SELECT path, relative_path from "
                 + "node n join node_vos_path p on n.node_id = p.node_id "
@@ -70,16 +72,16 @@ public class NodeDAO {
         jdbcTemplate.update(conn -> {
             PreparedStatement ps = conn.prepareStatement(sb.toString());
             int i = 0;
-            ps.setString(++i, getNodeName(myNode));
-            ps.setBoolean(++i, getIsBusy(myNode));
-            ps.setString(++i, getProperty(myNode, getPropertyURI("creator")));
-            ps.setString(++i, getProperty(myNode, getPropertyURI("creator")));
-            ps.setArray(++i, fromPropertyToArray(ps, getProperty(myNode, getPropertyURI("groupread"))));
-            ps.setArray(++i, fromPropertyToArray(ps, getProperty(myNode, getPropertyURI("groupwrite"))));
-            ps.setBoolean(++i, Boolean.valueOf(getProperty(myNode, getPropertyURI("publicread"))));
+            ps.setString(++i, NodeUtils.getNodeName(myNode));
+            ps.setBoolean(++i, NodeUtils.getIsBusy(myNode));
+            ps.setString(++i, NodeProperties.getPropertiesStringByURI(myNode, NodeProperties.getPropertyURI("creator")));
+            ps.setString(++i, NodeProperties.getPropertiesStringByURI(myNode, NodeProperties.getPropertyURI("creator")));
+            ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getPropertiesStringByURI(myNode, NodeProperties.getPropertyURI("groupread"))));
+            ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getPropertiesStringByURI(myNode, NodeProperties.getPropertyURI("groupwrite"))));
+            ps.setBoolean(++i, Boolean.valueOf(NodeProperties.getPropertiesStringByURI(myNode, NodeProperties.getPropertyURI("publicread"))));
             ps.setObject(++i, paths.get(0).path, Types.OTHER);
             ps.setObject(++i, paths.get(0).relativePath, Types.OTHER);
-            ps.setObject(++i, getDbNodeType(myNode), Types.OTHER);
+            ps.setObject(++i, NodeUtils.getDbNodeType(myNode), Types.OTHER);
             ps.setObject(++i, fromViewsToArray(ps, myNode, d -> d.getAccepts()), Types.OTHER);
             ps.setObject(++i, fromViewsToArray(ps, myNode, d -> d.getProvides()), Types.OTHER);
             return ps;
@@ -144,7 +146,7 @@ public class NodeDAO {
 
     private Node getNodeFromResultSet(ResultSet rs) throws SQLException {
 
-        Node node = getTypedNode(rs.getString("type"));
+        Node node = NodeUtils.getTypedNode(rs.getString("type"));
 
         if (node instanceof DataNode) {
 
@@ -159,25 +161,25 @@ public class NodeDAO {
 
         List<Property> properties = new ArrayList<>();
 
-        addProperty(getPropertyURI("length"), rs.getString("content_length"),
+        addProperty(NodeProperties.getPropertyURI("length"), rs.getString("content_length"),
                 properties);
 
-        addProperty(getPropertyURI("btime"), rs.getString("created_on"),
+        addProperty(NodeProperties.getPropertyURI("btime"), rs.getString("created_on"),
                 properties);
 
-        addProperty(getPropertyURI("creator"), rs.getString("creator_id"),
+        addProperty(NodeProperties.getPropertyURI("creator"), rs.getString("creator_id"),
                 properties);
 
-        addProperty(getPropertyURI("mtime"), rs.getString("last_modified"),
+        addProperty(NodeProperties.getPropertyURI("mtime"), rs.getString("last_modified"),
                 properties);
 
-        addProperty(getPropertyURI("groupread"), getGroupsString(rs, "group_read"),
+        addProperty(NodeProperties.getPropertyURI("groupread"), getGroupsString(rs, "group_read"),
                 properties);
 
-        addProperty(getPropertyURI("groupwrite"), getGroupsString(rs, "group_write"),
+        addProperty(NodeProperties.getPropertyURI("groupwrite"), getGroupsString(rs, "group_write"),
                 properties);
 
-        addProperty(getPropertyURI("publicread"), String.valueOf(rs.getBoolean("is_public")),
+        addProperty(NodeProperties.getPropertyURI("publicread"), String.valueOf(rs.getBoolean("is_public")),
                 properties);
 
         addProperty("urn:async_trans", String.valueOf(rs.getBoolean("async_trans")),
@@ -240,10 +242,6 @@ public class NodeDAO {
         return jdbcTemplate.queryForObject(sql, args, types, Integer.class);
     }
 
-    private String getPropertyURI(String propertyName) {
-        return "ivo://ivoa.net/vospace/core#".concat(propertyName);
-    }
-
     private String getGroupsString(ResultSet rs, String column) throws SQLException {
         Array array = rs.getArray(column);
         if (array == null) {
@@ -261,24 +259,7 @@ public class NodeDAO {
             list.add(prop);
         }
     }
-
-    private Node getTypedNode(String type) {
-        Node node;
-        switch (type) {
-            case "container":
-                node = new ContainerNode();
-                break;
-            case "data":
-                node = new DataNode();
-                break;
-            case "structured":
-                node = new StructuredDataNode();
-                break;
-            default:
-                throw new UnsupportedOperationException("Node type " + type + " not supported yet");
-        }
-        return node;
-    }
+    
 
     private String getUri(String path) {
         return "vos://" + authority + path;
@@ -288,58 +269,7 @@ public class NodeDAO {
         NodePaths paths = new NodePaths(rs.getString("path"), rs.getString("relative_path"));
         return paths;
     }
-
-    private String getNodeName(String path) {
-        String[] parsedPath = path.split("/");
-
-        return parsedPath[parsedPath.length - 1];
-    }
-
-    private String getNodeName(Node myNode) {
-        String uri = myNode.getUri();
-        return getNodeName(uri);
-    }
-
-    private boolean getIsBusy(Node myNode) {
-
-        if (myNode instanceof DataNode) {
-
-            DataNode dataNode = (DataNode) myNode;
-            return dataNode.isBusy();
-        }
-
-        return false;
-    }
-
-    // Copied from CreateNodeController: to be moved in a common utility class
-    private String getParentPath(String path) {
-        String[] parsedPath = path.split("[/]+");
-
-        if (parsedPath.length < 2 || !parsedPath[0].isEmpty()) {
-            throw new IllegalArgumentException();
-        }
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("/");
-
-        for (int i = 1; i < parsedPath.length - 1; i++) {
-            sb.append(parsedPath[i]);
-            if (i < parsedPath.length - 2) {
-                sb.append("/");
-            }
-        }
-
-        return sb.toString();
-    }
-
-    private String getProperty(Node node, String uri) {
-        for (Property property : node.getProperties()) {
-            if (uri.equals(property.getUri())) {
-                return property.getValue();
-            }
-        }
-        return null;
-    }
+    
 
     private Array fromPropertyToArray(PreparedStatement ps, String myProperty) throws SQLException {
         if (myProperty == null || myProperty.isBlank()) {
@@ -374,15 +304,6 @@ public class NodeDAO {
                 .collect(Collectors.toList());
     }
 
-    private String getDbNodeType(Node node) {
-        if (node instanceof ContainerNode) {
-            return "container";
-        } else if (node instanceof DataNode) {
-            return "data";
-        }
-        throw new UnsupportedOperationException("Unable to retrieve database node type for class " + node.getClass().getCanonicalName());
-    }
-
     private class NodePaths {
 
         private final String path;
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java
index 073e264..9275d5b 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java
@@ -56,7 +56,7 @@ public class NodeDAOTest {
         ContainerNode root = (ContainerNode) dao.listNode("/").get();
         assertEquals(2, root.getNodes().size());
         
-        assertEquals("true", NodeProperties.getNodePropertyAsListByURI(root, NodeProperties.PUBLIC_READ_URI).get(0));
+        assertEquals("true", NodeProperties.getNodePropertiesListByURI(root, NodeProperties.PUBLIC_READ_URI).get(0));
 
         assertEquals("group1 group2", getProperty(root.getNodes().get(0), "ivo://ivoa.net/vospace/core#groupread"));
     }
-- 
GitLab