diff --git a/src/main/java/it/inaf/ia2/transfer/controller/FileInfo.java b/src/main/java/it/inaf/ia2/transfer/controller/FileInfo.java index bee3c6485c4cb59d41c0555492499095d287e984..0e079e540809bee154d5555a714e3e1c7a37aa6b 100644 --- a/src/main/java/it/inaf/ia2/transfer/controller/FileInfo.java +++ b/src/main/java/it/inaf/ia2/transfer/controller/FileInfo.java @@ -8,6 +8,7 @@ public class FileInfo { private String osPath; private String virtualPath; private boolean isPublic; + private boolean virtualParent; private List groupRead; private List groupWrite; private String ownerId; @@ -47,6 +48,14 @@ public class FileInfo { this.isPublic = isPublic; } + public boolean hasVirtualParent() { + return virtualParent; + } + + public void setVirtualParent(boolean virtualParent) { + this.virtualParent = virtualParent; + } + public List getGroupRead() { return groupRead; } diff --git a/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java b/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java index 888bedbacdbbf62cea4b612951441148191ceb5c..3cfb5215aa4fe6b832a11be97da4d78cbcd57fa5 100644 --- a/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java +++ b/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java @@ -32,7 +32,7 @@ public class FileDAO { public Optional getFileInfo(String virtualPath) { String sql = "SELECT n.node_id, is_public, group_read, group_write, owner_id, async_trans,\n" - + "accept_views, provide_views, l.location_type,\n" + + "accept_views, provide_views, l.location_type, n.path <> n.relative_path AS virtual_parent,\n" + "(SELECT user_name FROM users WHERE rap_id = owner_id) AS username,\n" + "base_path, os_path\n" + "FROM node_path p\n" @@ -57,6 +57,7 @@ public class FileDAO { fi.setAsyncTrans(rs.getBoolean("async_trans")); fi.setAcceptViews(toList(rs.getArray("accept_views"))); fi.setProvideViews(toList(rs.getArray("provide_views"))); + fi.setVirtualParent(rs.getBoolean("virtual_parent")); fi.setVirtualPath(virtualPath); fillOsPath(fi, rs); @@ -93,7 +94,7 @@ public class FileDAO { if (asyncLocation) { String username = rs.getString("username"); completeOsPath = completeOsPath.resolve(username).resolve("retrieve"); - } else { + } else if (fi.hasVirtualParent()) { completeOsPath = completeOsPath.resolve(fi.getOwnerId()); }