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 15f8e8a2ac9372f0fe16e35e4e50246ce9ebc490..7a5414716379e5b438d74b47e6f1caf7bdefb6c0 100644 --- a/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java +++ b/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java @@ -46,7 +46,8 @@ public class FileDAO { + "content_type, content_encoding, content_length, content_md5, name, n.location_id,\n" + "accept_views, provide_views, l.location_type, n.path <> n.relative_path AS virtual_parent,\n" + "(SELECT user_name FROM users WHERE user_id = creator_id) AS username, n.job_id,\n" - + "base_path, get_os_path(n.node_id) AS os_path, ? AS vos_path, false AS is_directory\n" + + "base_path, get_os_path(n.node_id) AS os_path, ? AS vos_path, false AS is_directory,\n" + + "type = 'link' AS is_link\n" + "FROM node n\n" + "JOIN location l ON (n.location_id IS NOT NULL AND n.location_id = l.location_id) OR (n.location_id IS NULL AND l.location_id = ?)\n" + "LEFT JOIN storage s ON s.storage_id = l.storage_dest_id\n" @@ -175,6 +176,7 @@ public class FileDAO { + "(SELECT user_name FROM users WHERE user_id = n.creator_id) AS username,\n" + "base_path, get_os_path(n.node_id) AS os_path, get_vos_path(n.node_id) AS vos_path,\n" + "n.type = 'container' AS is_directory, n.name, n.location_id, n.job_id\n" + + "n.type = 'link' AS is_link\n" + "FROM node n\n" + "JOIN node p ON p.path @> n.path\n" + "LEFT JOIN location l ON l.location_id = n.location_id\n" @@ -206,7 +208,8 @@ public class FileDAO { + "n.accept_views, n.provide_views, l.location_type, n.path <> n.relative_path AS virtual_parent,\n" + "(SELECT user_name FROM users WHERE user_id = n.creator_id) AS username,\n" + "base_path, get_os_path(n.node_id) AS os_path, get_vos_path(n.node_id) AS vos_path,\n" - + "n.type = 'container' AS is_directory, n.name, n.location_id, n.job_id\n" + + "n.type = 'container' AS is_directory, n.name, n.location_id, n.job_id,\n" + + "n.type = 'link' AS is_link\n" + "FROM node n\n" + "JOIN node p ON p.path @> n.path\n" + "LEFT JOIN location l ON l.location_id = n.location_id\n" @@ -286,6 +289,7 @@ public class FileDAO { fi.setContentMd5(rs.getString("content_md5")); fi.setContentType(rs.getString("content_type")); fi.setDirectory(rs.getBoolean("is_directory")); + fi.setLink(rs.getBoolean("is_link")); fi.setJobId(rs.getString("job_id")); int locationId = rs.getInt("location_id"); if (!rs.wasNull()) { diff --git a/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java b/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java index eab700b09c7ac34dfcebecb11c7284893caae1a4..49f859ee60641f049d86dda2d212faf080c29664 100644 --- a/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java +++ b/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java @@ -16,6 +16,7 @@ public class FileInfo { private boolean isPublic; private boolean virtualParent; private boolean directory; + private boolean link; private List<String> groupRead; private List<String> groupWrite; private String ownerId; @@ -108,6 +109,14 @@ public class FileInfo { public void setDirectory(boolean directory) { this.directory = directory; } + + public boolean isLink() { + return link; + } + + public void setLink(boolean link) { + this.link = link; + } public boolean hasVirtualParent() { return virtualParent; diff --git a/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java b/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java index cc37b3ffac272216021783a18bc4b4d08c3c23e5..b18e684b1e4e7b80868912fb2e201c72e2cff3fb 100644 --- a/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java +++ b/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java @@ -107,7 +107,7 @@ public class FileCopyService { for (FileInfo destinationFileInfo : destinationFileInfos) { LOG.trace("Processing {} destination", destinationFileInfo.getVirtualPath()); // Cycle on files only - if (!destinationFileInfo.isDirectory()) { + if (!destinationFileInfo.isDirectory() && !destinationFileInfo.isLink()) { // Calculate source file vos path String correspondingSourceVosPath = this.getCorrespondingSourceVosPath(sourceRootVosPath,