Skip to content
Snippets Groups Projects
Commit f329a67f authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Added target property for LinkNodes in NodeDAO

parent 88a18190
Branches
Tags
No related merge requests found
......@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
import javax.sql.DataSource;
import net.ivoa.xml.vospace.v2.ContainerNode;
import net.ivoa.xml.vospace.v2.DataNode;
import net.ivoa.xml.vospace.v2.LinkNode;
import net.ivoa.xml.vospace.v2.Property;
import net.ivoa.xml.vospace.v2.View;
import org.slf4j.Logger;
......@@ -69,8 +70,8 @@ public class NodeDAO {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO node");
sb.append(" (name, job_id, creator_id, group_read, group_write,");
sb.append(" is_public, parent_path, parent_relative_path, type, accept_views, provide_views)");
sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
sb.append(" is_public, parent_path, parent_relative_path, type, accept_views, provide_views, target)");
sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
jdbcTemplate.update(conn -> {
PreparedStatement ps = conn.prepareStatement(sb.toString());
......@@ -90,6 +91,11 @@ public class NodeDAO {
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);
if(myNode instanceof LinkNode) {
ps.setString(++i, ((LinkNode) myNode).getTarget());
} else {
ps.setNull(++i, Types.VARCHAR);
}
return ps;
});
}
......@@ -98,7 +104,7 @@ public class NodeDAO {
String sql = "SELECT (CASE WHEN c.path = n.path THEN ? ELSE (? || ? || c.name) END) AS vos_path, c.node_id, c.name,\n"
+ "c.type, c.async_trans, c.sticky, c.job_id IS NOT NULL AS busy_state, c.creator_id, c.group_read, c.group_write,\n"
+ "c.is_public, c.content_length, c.created_on, c.last_modified, c.accept_views, c.provide_views, c.quota, c.content_md5\n"
+ "c.is_public, c.content_length, c.created_on, c.last_modified, c.accept_views, c.provide_views, c.quota, c.content_md5, c.target\n"
+ "FROM node n\n"
+ "JOIN node c ON c.path ~ (n.path::varchar || ? || '*{1}')::lquery OR c.path = n.path\n"
+ "WHERE n.node_id = id_from_vos_path(?)\n"
......@@ -198,6 +204,9 @@ public class NodeDAO {
dataNode.setBusy(rs.getBoolean("busy_state"));
dataNode.setAccepts(getViews(rs.getArray("accept_views")));
dataNode.setProvides(getViews(rs.getArray("provide_views")));
} else if (node instanceof LinkNode) {
LinkNode linkNode = (LinkNode) node;
linkNode.setTarget(rs.getString("target"));
}
node.setUri(getUri(rs.getString("vos_path")));
......@@ -332,7 +341,7 @@ public class NodeDAO {
String destName = NodeUtils.getNodeName(destVosPath);
String parentInsert = "INSERT INTO node (node_id, parent_path, parent_relative_path, name, type, location_id, creator_id, group_write, group_read, is_public,\n"
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols)\n";
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target)\n";
String ctePathPrefix = "SELECT CASE WHEN path::varchar = '' THEN '' ELSE (path::varchar || '.') END AS prefix\n"
+ "FROM node WHERE node_id = id_from_vos_path(?)";
......@@ -341,14 +350,14 @@ public class NodeDAO {
+ "((SELECT prefix FROM path_prefix) || currval('node_node_id_seq'))::ltree AS new_path,\n"
+ "path, relative_path, parent_path, parent_relative_path, ? AS name,\n"
+ "type, location_id, creator_id, group_write, group_read, is_public,\n"
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols\n"
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target\n"
+ "FROM node WHERE node_id = id_from_vos_path(?)\n"
+ "UNION ALL\n"
+ "SELECT nextval('node_node_id_seq') AS new_node_id,\n"
+ "(p.new_path::varchar || '.' || currval('node_node_id_seq'))::ltree,\n"
+ "n.path, n.relative_path, n.parent_path, n.parent_relative_path, n.name,\n"
+ "n.type, n.location_id, n.creator_id, n.group_write, n.group_read, n.is_public,\n"
+ "n.job_id, n.tstamp_wrapper_dir, n.format, n.async_trans, n.sticky, n.accept_views, n.provide_views, n.protocols\n"
+ "n.job_id, n.tstamp_wrapper_dir, n.format, n.async_trans, n.sticky, n.accept_views, n.provide_views, n.protocols, n.target\n"
+ "FROM node n\n"
+ "JOIN copied_nodes p ON p.path = n.parent_path";
......@@ -359,7 +368,7 @@ public class NodeDAO {
+ "new_node_id, new_parent_path,\n"
+ "CASE WHEN nlevel(new_parent_path) = rel_offset THEN ''::ltree ELSE subpath(new_parent_path, rel_offset) END new_parent_relative_path,\n"
+ "name, type, location_id, creator_id, group_write, group_read, is_public,\n"
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols\n"
+ "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target\n"
+ "FROM copied_nodes_paths\n";
String sql = parentInsert
......@@ -491,7 +500,7 @@ public class NodeDAO {
+ "async_trans, job_id, creator_id, group_read, "
+ "group_write, is_public, quota, content_type, content_encoding, "
+ "content_length, content_md5, created_on, last_modified, "
+ "accept_views, provide_views, protocols, sticky)\n";
+ "accept_views, provide_views, protocols, target, sticky)\n";
String deleteSql = "DELETE \n"
+ "FROM node n\n"
......@@ -503,7 +512,7 @@ public class NodeDAO {
+ "n.async_trans, n.job_id, n.creator_id, n.group_read, "
+ "n.group_write, n.is_public, n.quota, n.content_type, n.content_encoding, "
+ "n.content_length, n.content_md5, n.created_on, n.last_modified, "
+ "n.accept_views, n.provide_views, n.protocols, n.sticky\n";
+ "n.accept_views, n.provide_views, n.protocols, n.target, n.sticky\n";
String withSql = "WITH del AS (" + deleteSql + ")";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment