Commit 4c7082c3 authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Task #3547 - Complete getNodeFromResultSet method in NodeDAO

parent ee376f1f
Loading
Loading
Loading
Loading
+50 −4
Original line number Diff line number Diff line
@@ -4,11 +4,13 @@ import net.ivoa.xml.vospace.v2.Node;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.sql.DataSource;
import net.ivoa.xml.vospace.v2.ContainerNode;
import net.ivoa.xml.vospace.v2.DataNode;
import net.ivoa.xml.vospace.v2.Property;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -46,7 +48,7 @@ public class NodeDAO {

    public Optional<Node> listNode(String path) {

        String sql = "SELECT os.vos_path, n.node_id, type, async_trans, owner_id, group_read, group_write, is_public, content_length, created_on, last_modified from node n\n"
        String sql = "SELECT os.vos_path, n.node_id, type, async_trans, busy_state, owner_id, group_read, group_write, is_public, content_length, created_on, last_modified from node n\n"
                + "JOIN node_vos_path os ON n.node_id = os.node_id\n"
                + "WHERE n.path ~ (" + getFirstLevelChildrenSelector(path) + ")::lquery\n"
                + "OR os.vos_path = ? ORDER BY vos_path";
@@ -91,11 +93,55 @@ public class NodeDAO {
    private Node getNodeFromResultSet(ResultSet rs) throws SQLException {

        Node node = getTypedNode(rs.getString("type"));
        
        if(node instanceof DataNode)
        {
            ((DataNode) node).setBusy(rs.getBoolean("is_busy"));
        }                
                
        node.setUri(getUri(rs.getString("vos_path")));

        List<Property> properties = new ArrayList<>();
      
        addProperty(getPropertyURI("length"), rs.getString("content_length"),
                properties);
        
        addProperty(getPropertyURI("btime"), rs.getString("created_on"),
                properties);
        
        addProperty(getPropertyURI("mtime"), rs.getString("last_modified"),
                properties);
        
        addProperty(getPropertyURI("groupread"), rs.getString("group_read"),
                properties);
        
        addProperty(getPropertyURI("groupwrite"), rs.getString("group_write"),
                properties);
        
        addProperty(getPropertyURI("publicread"), rs.getString("is_public"),
                properties);
        
        addProperty("urn:async_trans", rs.getString("async_trans"),
                properties);

        node.setProperties(properties);        
        return node;
    }

    private String getPropertyURI(String propertyName) {
        return "ivo://ivoa.net/vospace/core#".concat(propertyName);
    }

    // If value is null does nothing
    private void addProperty(String uri, String value, List<Property> list) {
        if (value != null) {
            Property prop = new Property();
            prop.setUri(uri);
            prop.setValue(value);
            list.add(prop);
        }
    }

    private Node getTypedNode(String type) {
        Node node;
        switch (type) {