Skip to content

Commit

Permalink
Upgrading the browse-everything Gem dependency to use the samvera rep…
Browse files Browse the repository at this point in the history
…ository and browse-everything-redux-react to use the samvera-labs repository; Providing namespaces for the BrowseEverything persistence models
  • Loading branch information
jrgriffiniii committed Mar 12, 2020
1 parent 7f4507c commit 2ef4f55
Show file tree
Hide file tree
Showing 23 changed files with 465 additions and 784 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ gem "rsolr", ">= 1.0"

gem "aasm"
gem "arabic-letter-connector"
gem "browse-everything", github: "jrgriffiniii/browse-everything", branch: "issues-319-jrgriffiniii-google-picker"
gem "browse-everything", github: "samvera/browse-everything", branch: "2.x-stable"
gem "capistrano", "~> 3.7.1"
gem "capistrano-passenger"
gem "capistrano-rails"
Expand Down
48 changes: 24 additions & 24 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,6 @@ GIT
devise-guests (0.6.0)
devise

GIT
remote: https://github.com/jrgriffiniii/browse-everything.git
revision: 158733133a5b80957cb09871f1904533b6d86177
branch: issues-319-jrgriffiniii-google-picker
specs:
browse-everything (2.0.0.pre.beta1)
activestorage
addressable (~> 2.5)
aws-sdk-s3
dropbox_api (>= 0.1.10)
fast_jsonapi
foreman
google-api-client (~> 0.23)
google_drive (~> 2.1)
googleauth (= 0.6.6)
jsonapi-resources
puma (>= 3.11)
rails (>= 5.1)
rswag (= 2.0.6)
ruby-box
signet (~> 0.8)
thor (~> 0.19)
typhoeus

GIT
remote: https://github.com/pulibrary/ruby_tika_app.git
revision: 5b633a91c99eb56c3d26740d24706a67d6ffe42d
Expand All @@ -51,6 +27,30 @@ GIT
hydra-derivatives
valkyrie

GIT
remote: https://github.com/samvera/browse-everything.git
revision: 36d42e42b10a460d82ac73970e1e2c76c1c994af
branch: 2.x-stable
specs:
browse-everything (2.0.0.pre.beta1)
activestorage
addressable (~> 2.5)
aws-sdk-s3
dropbox_api (>= 0.1.10)
fast_jsonapi
foreman
google-api-client (~> 0.23)
google_drive (~> 2.1)
googleauth (= 0.6.6)
jsonapi-resources
puma (>= 3.11)
rails (>= 5.1)
rswag (= 2.0.6)
ruby-box
signet (~> 0.8)
thor (~> 0.19)
typhoeus

GIT
remote: https://github.com/tpendragon/valkyrie-shrine.git
revision: f3df1d635809a35f02bc6a69e39d5efb9e1fc49e
Expand Down
6 changes: 6 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ Release notes template:
## Removed
-->
# 2020-03-11

## Added

* Upgraded the file and Google Drive upload interface for resources and the bulk ingest interface

# 2020-02-28

## Added
Expand Down
5 changes: 5 additions & 0 deletions app/controllers/base_resource_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,12 @@ def parent_resource_params
end

def browse_everything_params
return {} unless params.key?("browse_everything")
@browse_everything_params ||= params["browse_everything"]
end

def browse_everything_uploads
return [] unless browse_everything_params.key?("uploads")
@browse_everything_uploads ||= browse_everything_params["uploads"]
end

Expand All @@ -104,6 +106,9 @@ def new_pending_uploads
upload = uploads.first

upload.files.each do |upload_file|
# Filter for hidden files
next if upload_file.name =~ /^\./

new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_file_id: upload_file.id
Expand Down
257 changes: 119 additions & 138 deletions app/controllers/bulk_ingest_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,143 +24,8 @@ def show
@visibility = ControlledVocabulary.for(:visibility).all
end

def browse_everything_params
@browse_everything_params ||= params["browse_everything"]
end

def browse_everything_uploads
@browse_everything_uploads ||= browse_everything_params["uploads"]
end

def find_upload(upload_id)
# This needs to be changed to #find_one
uploads = BrowseEverything::Upload.find_by(uuid: upload_id)
uploads.first
end

# Construct the pending download objects
# @return [Array<PendingUpload>]
def new_pending_upload_files
@new_pending_upload_files = []

browse_everything_uploads.each do |upload_id|
upload = find_upload(upload_id)
upload.files.each do |upload_file|
new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_id: upload_id,
upload_file_id: upload_file.id
)
@new_pending_upload_files << new_pending_upload
end
end

@new_pending_upload_files
end

def new_uploads
@new_uploads ||= begin
browse_everything_uploads.map do |upload_id|
find_upload(upload_id)
end
end
end

def ingest_multi_volume_works(change_set_persister)
new_uploads.each do |upload|
file_tree = {}
upload.files.each do |upload_file|
new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_id: upload.id,
upload_file_id: upload_file.id
)

if new_pending_upload.in_container?
pending_uploads = file_tree[upload_file.container_id] || []
file_tree[upload_file.container_id] = pending_uploads + [new_pending_upload]
end
end

directory_tree = {}
parent_containers = []
upload.containers.each do |container|
# Are there files for this container?
if file_tree.key?(container.id)
# Create the volume work
children = file_tree[container.id]
volume_name = container.name
member_change_set = build_change_set(title: volume_name, pending_uploads: children, files: children)

persisted = change_set_persister.save(change_set: member_change_set)

parent_id = container.parent_id
if parent_id
members = directory_tree[parent_id] || []
directory_tree[parent_id] = members + [persisted]
end
else
parent_containers << container
end
end

parent_containers.each do |container|
# If not, create a parent work
members = directory_tree[container.id] || []
member_ids = members.map(&:id)
parent_name = container.name

parent_change_set = build_change_set(title: parent_name, member_ids: member_ids)
change_set_persister.save(change_set: parent_change_set)
end
end
end

def ingest_works(change_set_persister)
new_uploads.each do |upload|
file_tree = {}
upload.files.each do |upload_file|
new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_id: upload.id,
upload_file_id: upload_file.id
)

if new_pending_upload.in_container?
pending_uploads = file_tree[upload_file.container_id] || []
file_tree[upload_file.container_id] = pending_uploads + [new_pending_upload]
end
end

upload.containers.each do |container|
# Are there files for this container?
next unless file_tree.key?(container.id)
# Create the volume work
children = file_tree[container.id]
volume_name = container.name
member_change_set = build_change_set(title: volume_name, pending_uploads: children, files: children)

change_set_persister.save(change_set: member_change_set)
end
end
end

def first_upload
@first_upload ||= new_uploads.first
end

def selected_cloud_files?
!first_upload.provider.is_a?(BrowseEverything::Provider::FileSystem)
end

def root_selected_folder_path
paths = first_upload.containers.map { |container| container.id.gsub("file://", "") }
sorted_paths = paths.sort_by(&:length)
sorted_paths.first
end

def browse_everything_files
if browse_everything_uploads.empty? && first_upload.containers.empty?
if browse_everything_uploads.empty? || first_upload.containers.empty?
flash[:alert] = "Please select some files to ingest."
return redirect_to bulk_ingest_show_path
end
Expand All @@ -174,7 +39,7 @@ def browse_everything_files
end
end
else
IngestFolderJob.perform_later(directory: root_selected_folder_path, file_filter: nil, class_name: resource_class_name, **attributes)
IngestFolderJob.perform_later(directory: selected_folder_root_path, file_filter: nil, class_name: resource_class_name, **attributes)
end

redirect_to root_url, notice: "Batch Ingest of #{resource_class.human_readable_type.pluralize} started"
Expand All @@ -195,8 +60,124 @@ def source_metadata_id_from_path
base_path if valid_remote_identifier?(base_path)
end

def browse_everything_params
return {} unless params.key?("browse_everything")
@browse_everything_params ||= params["browse_everything"]
end

def browse_everything_uploads
return [] unless browse_everything_params.key?("uploads")
@browse_everything_uploads ||= browse_everything_params["uploads"]
end

def find_upload(upload_id)
uploads = BrowseEverything::Upload.find_by(uuid: upload_id)
uploads.first
end

def new_uploads
@new_uploads ||= begin
browse_everything_uploads.map do |upload_id|
find_upload(upload_id)
end
end
end

def ingest_multi_volume_works(change_set_persister)
new_uploads.each do |upload|
file_tree = {}
upload.files.each do |upload_file|
new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_id: upload.id,
upload_file_id: upload_file.id
)

if new_pending_upload.in_container?
pending_uploads = file_tree[upload_file.container_id] || []
file_tree[upload_file.container_id] = pending_uploads + [new_pending_upload]
end
end

directory_tree = {}
parent_containers = []
upload.containers.each do |container|
# Are there files for this container?
if file_tree.key?(container.id)
# Create the volume work
children = file_tree[container.id]
volume_name = container.name
member_change_set = build_change_set(title: volume_name, pending_uploads: children, files: children)

persisted = change_set_persister.save(change_set: member_change_set)

parent_id = container.parent_id
if parent_id
members = directory_tree[parent_id] || []
directory_tree[parent_id] = members + [persisted]
end
else
parent_containers << container
end
end

parent_containers.each do |container|
# If not, create a parent work
members = directory_tree[container.id] || []
member_ids = members.map(&:id)
parent_name = container.name

parent_change_set = build_change_set(title: parent_name, member_ids: member_ids)
change_set_persister.save(change_set: parent_change_set)
end
end
end

def ingest_works(change_set_persister)
new_uploads.each do |upload|
file_tree = {}
upload.files.each do |upload_file|
new_pending_upload = PendingUpload.new(
id: SecureRandom.uuid,
upload_id: upload.id,
upload_file_id: upload_file.id
)

if new_pending_upload.in_container?
pending_uploads = file_tree[upload_file.container_id] || []
file_tree[upload_file.container_id] = pending_uploads + [new_pending_upload]
end
end

upload.containers.each do |container|
# Are there files for this container?
next unless file_tree.key?(container.id)
# Create the volume work
children = file_tree[container.id]
volume_name = container.name
member_change_set = build_change_set(title: volume_name, pending_uploads: children, files: children)

change_set_persister.save(change_set: member_change_set)
end
end
end

def first_upload
@first_upload ||= new_uploads.first
end

def selected_cloud_files?
!first_upload.provider.is_a?(BrowseEverything::Provider::FileSystem)
end

def selected_folder_root_path
paths = first_upload.containers.map { |container| container.id.gsub("file://", "") }
sorted_paths = paths.sort_by(&:length)
sorted_paths.first
end

def base_path
File.basename(root_selected_folder_path)
File.basename(selected_folder_root_path)
end

# Determines whether or not the string encodes a bib. ID or a PULFA ID
Expand Down
Loading

0 comments on commit 2ef4f55

Please sign in to comment.