X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/da2803a65e696bf85883e82a0bda6ef81dda5429..84decc8949fc51ec2eaf906fc2c4cbbb3df807dd:/apps/workbench/app/models/collection.rb diff --git a/apps/workbench/app/models/collection.rb b/apps/workbench/app/models/collection.rb index e22a5f72f4..2346a27859 100644 --- a/apps/workbench/app/models/collection.rb +++ b/apps/workbench/app/models/collection.rb @@ -1,4 +1,17 @@ class Collection < ArvadosBase + include ApplicationHelper + + MD5_EMPTY = 'd41d8cd98f00b204e9800998ecf8427e' + + # Return true if the given string is the locator of a zero-length blob + def self.is_empty_blob_locator? locator + !!locator.to_s.match("^#{MD5_EMPTY}(\\+.*)?\$") + end + + def content_summary + human_readable_bytes_html(total_bytes) + " " + super + end + def total_bytes if files tot = 0 @@ -9,6 +22,27 @@ class Collection < ArvadosBase end end + def files_tree + tree = files.group_by { |file_spec| File.split(file_spec.first) } + # Fill in entries for empty directories. + tree.keys.map { |basedir, _| File.split(basedir) }.each do |splitdir| + until tree.include?(splitdir) + tree[splitdir] = [] + splitdir = File.split(splitdir.first) + end + end + dir_to_tree = lambda do |dirname| + # First list subdirectories, with their files inside. + subnodes = tree.keys.select { |bd, td| (bd == dirname) and (td != '.') } + .sort.flat_map do |parts| + [parts + [nil]] + dir_to_tree.call(File.join(parts)) + end + # Then extend that list with files in this directory. + subnodes + tree[File.split(dirname)] + end + dir_to_tree.call('.') + end + def attribute_editable?(attr) false end @@ -18,29 +52,11 @@ class Collection < ArvadosBase end def provenance - $arvados_api_client.api "collections/#{self.uuid}/", "provenance" + arvados_api_client.api "collections/#{self.uuid}/", "provenance" end def used_by - $arvados_api_client.api "collections/#{self.uuid}/", "used_by" - end - - # def selection_label - # name = '' - # i = 0 - # if self.files.length > 3 - # m = 3 - # else - # m = self.files.length - # end - # while i < m - # name += "#{self.files[i][1]}" - # i += 1 - # name += ", " if i < m - # end - # if i < self.files.length - # name += "&ellip;" - # end - # name - # end + arvados_api_client.api "collections/#{self.uuid}/", "used_by" + end + end