Commit 7eeb9e8f authored by Sara Bertocco's avatar Sara Bertocco
Browse files

Conflicting

parent 5d6584be
Loading
Loading
Loading
Loading
+21 −100
Original line number Diff line number Diff line
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) {
@@ -262,23 +260,6 @@ public class NodeDAO {
        }
    }
    
    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;
@@ -289,57 +270,6 @@ public class NodeDAO {
        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;
+1 −1
Original line number Diff line number Diff line
@@ -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"));
    }