Loading src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +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; Loading Loading @@ -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 " Loading Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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")), Loading Loading @@ -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) { Loading @@ -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; Loading @@ -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()) { Loading Loading @@ -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; Loading src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -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")); } Loading Loading
src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +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; Loading Loading @@ -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 " Loading Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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")), Loading Loading @@ -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) { Loading @@ -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; Loading @@ -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()) { Loading Loading @@ -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; Loading
src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -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")); } Loading