cdm_migrator 3.2.1 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/MIT-LICENSE +20 -20
- data/README.md +41 -41
- data/Rakefile +38 -38
- data/app/assets/config/cdm_migrator_manifest.js +2 -2
- data/app/assets/javascripts/cdm_migrator/application.js +13 -13
- data/app/assets/stylesheets/cdm_migrator/application.css +15 -15
- data/app/assets/stylesheets/cdm_migrator/csv_checker.css +36 -36
- data/app/controllers/cdm_migrator/application_controller.rb +10 -10
- data/app/controllers/cdm_migrator/cdm_controller.rb +216 -213
- data/app/controllers/cdm_migrator/csv_controller.rb +428 -408
- data/app/helpers/cdm_migrator/application_helper.rb +4 -4
- data/app/jobs/cdm_migrator/application_job.rb +4 -4
- data/app/jobs/cdm_migrator/batch_create_files_job.rb +32 -20
- data/app/jobs/cdm_migrator/batch_create_files_with_ordered_members_job.rb +45 -0
- data/app/jobs/cdm_migrator/batch_create_works_job.rb +20 -14
- data/app/jobs/cdm_migrator/cdm_ingest_files_job.rb +35 -35
- data/app/jobs/cdm_migrator/create_work_job.rb +36 -25
- data/app/jobs/cdm_migrator/restart_upload_from_middle_job.rb +36 -0
- data/app/jobs/cdm_migrator/update_object_job.rb +10 -10
- data/app/mailers/cdm_migrator/application_mailer.rb +6 -6
- data/app/models/cdm_migrator/application_record.rb +5 -5
- data/app/models/cdm_migrator/batch_ingest.rb +33 -33
- data/app/models/cdm_migrator/ingest_work.rb +7 -16
- data/app/views/cdm_migrator/cdm/collection.html.erb +11 -11
- data/app/views/cdm_migrator/cdm/mappings.html.erb +54 -53
- data/app/views/cdm_migrator/csv/_batches_list.html.erb +4 -4
- data/app/views/cdm_migrator/csv/_default_group.html.erb +17 -17
- data/app/views/cdm_migrator/csv/_error_list.html.erb +20 -20
- data/app/views/cdm_migrator/csv/_list_batches.html.erb +21 -21
- data/app/views/cdm_migrator/csv/_tabs.html.erb +8 -8
- data/app/views/cdm_migrator/csv/csv_checker.html.erb +45 -45
- data/app/views/cdm_migrator/csv/edit.html.erb +17 -18
- data/app/views/cdm_migrator/csv/index.html.erb +19 -19
- data/app/views/cdm_migrator/csv/upload.html.erb +18 -18
- data/app/views/layouts/cdm_migrator/application.html.erb +14 -14
- data/config/routes.rb +19 -19
- data/db/migrate/20191211193859_create_batch_ingests.rb +19 -19
- data/db/migrate/20191212192315_create_ingest_works.rb +18 -18
- data/lib/cdm_migrator/engine.rb +29 -29
- data/lib/cdm_migrator/version.rb +3 -3
- data/lib/cdm_migrator.rb +5 -5
- data/lib/generators/cdm_migrator/install/install_generator.rb +79 -79
- data/lib/generators/cdm_migrator/install/templates/config/cdm_migrator.yml +53 -50
- data/lib/generators/cdm_migrator/install/templates/presenters/hyku/menu_presenter.rb +47 -47
- data/lib/generators/cdm_migrator/install/templates/presenters/hyrax/menu_presenter.rb +66 -66
- data/lib/generators/cdm_migrator/install/templates/sidebar/_tasks.html.erb +55 -55
- data/lib/tasks/cdm_migrator_tasks.rake +4 -4
- metadata +7 -5
@@ -1,4 +1,4 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
module ApplicationHelper
|
3
|
-
end
|
4
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
module ApplicationHelper
|
3
|
+
end
|
4
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class ApplicationJob < ActiveJob::Base
|
3
|
-
end
|
4
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class ApplicationJob < ActiveJob::Base
|
3
|
+
end
|
4
|
+
end
|
@@ -1,21 +1,33 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class BatchCreateFilesJob < ActiveJob::Base
|
3
|
-
queue_as Hyrax.config.ingest_queue_name
|
4
|
-
|
5
|
-
def perform work, ingest_work, user
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
1
|
+
module CdmMigrator
|
2
|
+
class BatchCreateFilesJob < ActiveJob::Base
|
3
|
+
queue_as Hyrax.config.ingest_queue_name
|
4
|
+
|
5
|
+
def perform work, ingest_work, user
|
6
|
+
unless work.ordered_members.to_a.empty?
|
7
|
+
# This only executes if the job failed before adding any file sets and is now retrying
|
8
|
+
ordered_members = work.ordered_members.to_a
|
9
|
+
# If the last file set's file was never ingested, do that now
|
10
|
+
last_file_set = ordered_members.last
|
11
|
+
if last_file_set.present? and last_file_set.files.none?
|
12
|
+
CdmMigrator::CdmIngestFilesJob.perform_later(last_file_set, last_file_set.import_url, user)
|
13
|
+
end
|
14
|
+
files = ingest_work.files[ordered_members.length..-1]
|
15
|
+
else
|
16
|
+
files = ingest_work.files
|
17
|
+
end
|
18
|
+
files.each do |file|
|
19
|
+
url = file[:url]
|
20
|
+
last_file = ingest_work.files.last==file
|
21
|
+
::FileSet.new(import_url: url, label: file[:title]) do |fs|
|
22
|
+
fs.save
|
23
|
+
actor = Hyrax::Actors::FileSetActor.new(fs, user)
|
24
|
+
actor.create_metadata
|
25
|
+
actor.attach_file_to_work(work)
|
26
|
+
fs.attributes = file[:metadata]
|
27
|
+
fs.save!
|
28
|
+
CdmIngestFilesJob.perform_later(fs, url, user, ingest_work, last_file)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
21
33
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module CdmMigrator
|
2
|
+
class BatchCreateFilesWithOrderedMembersJob < ActiveJob::Base
|
3
|
+
queue_as Hyrax.config.ingest_queue_name
|
4
|
+
|
5
|
+
# From documentation at https://tinyurl.com/nh4c5e9j:
|
6
|
+
# When adding member {FileSetBehavior}s to a {WorkBehavior}, {Hyrax} saves
|
7
|
+
# and reloads the work for each new member FileSet. This can significantly
|
8
|
+
# slow down ingest for Works with many member FileSets. The saving and
|
9
|
+
# reloading happens in {FileSetActor#attach_to_work}.
|
10
|
+
# See the url for more details.
|
11
|
+
|
12
|
+
# With this job, the member association is saved once
|
13
|
+
# at the very end instead, which can speed up the upload process. This job takes
|
14
|
+
# advantage of the same strategy as Hyrax::Actors::FileSetOrderedMembersActor
|
15
|
+
# but you don't need the OrderedMembersActor constant initialized.
|
16
|
+
|
17
|
+
# This rescue is a safeguard against creating lots of orphan file sets if there
|
18
|
+
# are recurring errors (see https://tinyurl.com/nh4c5e9j). Instead, CdmMigrator
|
19
|
+
# will fall back to creating file sets one-by-one if this job fails once.
|
20
|
+
rescue_from(StandardError) do |exception|
|
21
|
+
Rails.logger.error "BatchCreateFilesWithOrderedMembersJob error: #{exception.to_s}"
|
22
|
+
RestartUploadFromMiddleJob.perform_later(arguments[0], arguments[1], arguments[2])
|
23
|
+
end
|
24
|
+
|
25
|
+
def perform work, ingest_work, user
|
26
|
+
ordered_members = []
|
27
|
+
ingest_work.files.each do |file|
|
28
|
+
url = file[:url]
|
29
|
+
last_file = ingest_work.files.last==file
|
30
|
+
::FileSet.new(import_url: url, label: file[:title]) do |fs|
|
31
|
+
fs.attributes = file[:metadata]
|
32
|
+
fs.save!
|
33
|
+
ordered_members << fs
|
34
|
+
end
|
35
|
+
end
|
36
|
+
actor = Hyrax::Actors::OrderedMembersActor.new(ordered_members, user)
|
37
|
+
actor.attach_ordered_members_to_work(work)
|
38
|
+
work.representative = work.ordered_members.to_a.first
|
39
|
+
work.thumbnail_id = work.ordered_member_ids.first
|
40
|
+
work.save!
|
41
|
+
work.file_sets.each { |fs| CdmIngestFilesJob.perform_later(fs, fs.import_url, user, ingest_work) }
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -1,14 +1,20 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class BatchCreateWorksJob < ActiveJob::Base
|
3
|
-
queue_as Hyrax.config.ingest_queue_name
|
4
|
-
|
5
|
-
def perform(ingest, user)
|
6
|
-
ingest.data.each do |w|
|
7
|
-
ingest_work = IngestWork.new(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
1
|
+
module CdmMigrator
|
2
|
+
class BatchCreateWorksJob < ActiveJob::Base
|
3
|
+
queue_as Hyrax.config.ingest_queue_name
|
4
|
+
|
5
|
+
def perform(ingest, user)
|
6
|
+
ingest.data.each do |w|
|
7
|
+
ingest_work = IngestWork.new({
|
8
|
+
work_type: w[:type],
|
9
|
+
data: w[:metadata],
|
10
|
+
files: w[:files],
|
11
|
+
batch_ingest_id: ingest.id
|
12
|
+
})
|
13
|
+
ingest_work.save!
|
14
|
+
# puts ingest_work.inspect
|
15
|
+
CreateWorkJob.perform_later ingest_work, user, ingest.admin_set_id, ingest.collection_id
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class CdmIngestFilesJob < ActiveJob::Base
|
3
|
-
queue_as Hyrax.config.ingest_queue_name
|
4
|
-
|
5
|
-
def perform(fs, url, user, ingest_work = nil, last_file = false)
|
6
|
-
if url.include?("http") && File.extname(url).include?("pdf")
|
7
|
-
download = open(url)
|
8
|
-
dir = Rails.root.join('public', 'uploads', 'csv_pdfs')
|
9
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
10
|
-
filename = download.base_uri.to_s.split('/').last
|
11
|
-
url = dir.join(filename)
|
12
|
-
if fs.title.empty?
|
13
|
-
fs.title << filename.split('.').first
|
14
|
-
fs.save
|
15
|
-
end
|
16
|
-
IO.copy_stream(download, url)
|
17
|
-
url = "file://"+url.to_s
|
18
|
-
end
|
19
|
-
uri = URI.parse(url.gsub(' ','%20').gsub(/[\[\]@#\$\*{}]/, ""))
|
20
|
-
if uri.scheme == 'file'
|
21
|
-
IngestLocalFileJob.perform_now(fs, url.gsub('file://',''), user)
|
22
|
-
else
|
23
|
-
URI.parse(url.gsub(' ','%20'))
|
24
|
-
ImportUrlJob.perform_now(fs, log(user))
|
25
|
-
end
|
26
|
-
ingest_work.update_attribute('complete', true) if last_file
|
27
|
-
end
|
28
|
-
|
29
|
-
def log(user)
|
30
|
-
Hyrax::Operation.create!(user: user,
|
31
|
-
operation_type: "Attach Remote File")
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class CdmIngestFilesJob < ActiveJob::Base
|
3
|
+
queue_as Hyrax.config.ingest_queue_name
|
4
|
+
|
5
|
+
def perform(fs, url, user, ingest_work = nil, last_file = false)
|
6
|
+
if url.include?("http") && File.extname(url).include?("pdf")
|
7
|
+
download = open(url)
|
8
|
+
dir = Rails.root.join('public', 'uploads', 'csv_pdfs')
|
9
|
+
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
10
|
+
filename = download.base_uri.to_s.split('/').last
|
11
|
+
url = dir.join(filename)
|
12
|
+
if fs.title.empty?
|
13
|
+
fs.title << filename.split('.').first
|
14
|
+
fs.save
|
15
|
+
end
|
16
|
+
IO.copy_stream(download, url)
|
17
|
+
url = "file://"+url.to_s
|
18
|
+
end
|
19
|
+
uri = URI.parse(url.gsub(' ','%20').gsub(/[\[\]@#\$\*{}]/, ""))
|
20
|
+
if uri.scheme == 'file'
|
21
|
+
IngestLocalFileJob.perform_now(fs, url.gsub('file://',''), user)
|
22
|
+
else
|
23
|
+
URI.parse(url.gsub(' ','%20'))
|
24
|
+
ImportUrlJob.perform_now(fs, log(user))
|
25
|
+
end
|
26
|
+
ingest_work.update_attribute('complete', true) if last_file
|
27
|
+
end
|
28
|
+
|
29
|
+
def log(user)
|
30
|
+
Hyrax::Operation.create!(user: user,
|
31
|
+
operation_type: "Attach Remote File")
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -1,26 +1,37 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class CreateWorkJob < ActiveJob::Base
|
3
|
-
queue_as Hyrax.config.ingest_queue_name
|
4
|
-
|
5
|
-
def perform(ingest_work, user, admin_set_id, collection_id)
|
6
|
-
admin_set = ::AdminSet.find(admin_set_id) rescue nil
|
7
|
-
collection = ::Collection.find(collection_id) rescue nil
|
8
|
-
work = Object.const_get(ingest_work.work_type).new
|
9
|
-
#status_after, embargo_date, lease_date = nil, nil, nil
|
10
|
-
work.apply_depositor_metadata(user)
|
11
|
-
work.attributes = ingest_work.data
|
12
|
-
if ingest_work.data.has_key? 'downloadable'
|
13
|
-
# Convert string to boolean
|
14
|
-
work.downloadable = ActiveModel::Type::Boolean.new.cast(ingest_work.data['downloadable'])
|
15
|
-
elsif work.attributes.include? 'downloadable' # Set work to downloadable by default
|
16
|
-
work.downloadable = true
|
17
|
-
end
|
18
|
-
work.member_of_collections = [collection] if collection
|
19
|
-
work.admin_set = admin_set if admin_set
|
20
|
-
work.date_uploaded = DateTime.now
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
1
|
+
module CdmMigrator
|
2
|
+
class CreateWorkJob < ActiveJob::Base
|
3
|
+
queue_as Hyrax.config.ingest_queue_name
|
4
|
+
|
5
|
+
def perform(ingest_work, user, admin_set_id, collection_id)
|
6
|
+
admin_set = ::AdminSet.find(admin_set_id) rescue nil
|
7
|
+
collection = ::Collection.find(collection_id) rescue nil
|
8
|
+
work = Object.const_get(ingest_work.work_type).new
|
9
|
+
#status_after, embargo_date, lease_date = nil, nil, nil
|
10
|
+
work.apply_depositor_metadata(user)
|
11
|
+
work.attributes = ingest_work.data
|
12
|
+
if ingest_work.data.has_key? 'downloadable'
|
13
|
+
# Convert string to boolean
|
14
|
+
work.downloadable = ActiveModel::Type::Boolean.new.cast(ingest_work.data['downloadable'])
|
15
|
+
elsif work.attributes.include? 'downloadable' # Set work to downloadable by default
|
16
|
+
work.downloadable = true
|
17
|
+
end
|
18
|
+
work.member_of_collections = [collection] if collection
|
19
|
+
work.admin_set = admin_set if admin_set
|
20
|
+
work.date_uploaded = DateTime.now
|
21
|
+
begin
|
22
|
+
work.save!
|
23
|
+
# Weird error where descriptions with whitespace chars \n or \r don't save the 1st time
|
24
|
+
# but do on the second
|
25
|
+
rescue Ldp::BadRequest
|
26
|
+
old_descr = work.description.clone.to_a
|
27
|
+
work.description = work.description.map { |w| w.gsub("\n","").gsub("\r","") }
|
28
|
+
work.save!
|
29
|
+
work.description = old_descr
|
30
|
+
work.save!
|
31
|
+
end
|
32
|
+
# To use the BatchCreateFilesWithOrderedMembersJob instead, replace the following line
|
33
|
+
# with BatchCreateFilesWithOrderedMembersJob.perform_later(work, ingest_work, user)
|
34
|
+
BatchCreateFilesJob.perform_later(work, ingest_work, user)
|
35
|
+
end
|
36
|
+
end
|
26
37
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module CdmMigrator
|
2
|
+
class RestartUploadFromMiddleJob < ActiveJob::Base
|
3
|
+
|
4
|
+
# For restarting failed CdmMigrator::BatchCreateFilesJobs
|
5
|
+
# from the middle instead of from the beginning (default
|
6
|
+
# behaviour in Sidekiq). This prevents duplicating file
|
7
|
+
# sets within a work.
|
8
|
+
#
|
9
|
+
retry_on Net::OpenTimeout, attempts: 20
|
10
|
+
retry_on Errno::ECONNRESET, attempts: 20
|
11
|
+
|
12
|
+
def perform(work, ingest_work, user)
|
13
|
+
ordered_members = work.ordered_members.to_a
|
14
|
+
last_file_set = ordered_members.last
|
15
|
+
# If the last file set's file was never ingested, do that now
|
16
|
+
if last_file_set.present? and last_file_set.files.none?
|
17
|
+
CdmMigrator::CdmIngestFilesJob.perform_later(last_file_set, last_file_set.import_url, user)
|
18
|
+
end
|
19
|
+
files = ingest_work.files[ordered_members.length..-1]
|
20
|
+
files.each do |file|
|
21
|
+
url = file[:url]
|
22
|
+
last_file = ingest_work.files.last==file
|
23
|
+
::FileSet.new(import_url: url, label: file[:title]) do |fs|
|
24
|
+
fs.save
|
25
|
+
actor = Hyrax::Actors::FileSetActor.new(fs, user)
|
26
|
+
actor.create_metadata
|
27
|
+
actor.attach_file_to_work(work)
|
28
|
+
fs.attributes = file[:metadata]
|
29
|
+
fs.save!
|
30
|
+
CdmMigrator::CdmIngestFilesJob.perform_later(fs, url, user, ingest_work, last_file)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class UpdateObjectJob < ActiveJob::Base
|
3
|
-
|
4
|
-
|
5
|
-
def perform(attributes)
|
6
|
-
obj = ActiveFedora::Base.find
|
7
|
-
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class UpdateObjectJob < ActiveJob::Base
|
3
|
+
|
4
|
+
|
5
|
+
def perform(attributes)
|
6
|
+
obj = ActiveFedora::Base.find
|
7
|
+
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class ApplicationMailer < ActionMailer::Base
|
3
|
-
default from: 'from@example.com'
|
4
|
-
layout 'mailer'
|
5
|
-
end
|
6
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class ApplicationMailer < ActionMailer::Base
|
3
|
+
default from: 'from@example.com'
|
4
|
+
layout 'mailer'
|
5
|
+
end
|
6
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class ApplicationRecord < ActiveRecord::Base
|
3
|
-
self.abstract_class = true
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class ApplicationRecord < ActiveRecord::Base
|
3
|
+
self.abstract_class = true
|
4
|
+
end
|
5
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class BatchIngest < ActiveRecord::Base
|
3
|
-
serialize :data
|
4
|
-
|
5
|
-
def name
|
6
|
-
csv.split('/').last.gsub(/[0-9]{10}/,"")
|
7
|
-
end
|
8
|
-
|
9
|
-
def progress
|
10
|
-
return "Complete" if complete?
|
11
|
-
completed = IngestWork.where(batch_ingest_id: id, complete: true ).length
|
12
|
-
if completed==data.length
|
13
|
-
complete=true
|
14
|
-
save
|
15
|
-
"Complete"
|
16
|
-
else
|
17
|
-
"#{completed.to_s}/#{size}"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def username
|
22
|
-
@username ||= User.find(user_id).name
|
23
|
-
end
|
24
|
-
|
25
|
-
def complete?
|
26
|
-
complete
|
27
|
-
end
|
28
|
-
|
29
|
-
def message?
|
30
|
-
not(message.nil?||message.empty?)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class BatchIngest < ActiveRecord::Base
|
3
|
+
serialize :data
|
4
|
+
|
5
|
+
def name
|
6
|
+
csv.split('/').last.gsub(/[0-9]{10}/,"")
|
7
|
+
end
|
8
|
+
|
9
|
+
def progress
|
10
|
+
return "Complete" if complete?
|
11
|
+
completed = IngestWork.where(batch_ingest_id: id, complete: true ).length
|
12
|
+
if completed==data.length
|
13
|
+
complete=true
|
14
|
+
save
|
15
|
+
"Complete"
|
16
|
+
else
|
17
|
+
"#{completed.to_s}/#{size}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def username
|
22
|
+
@username ||= User.find(user_id).name
|
23
|
+
end
|
24
|
+
|
25
|
+
def complete?
|
26
|
+
complete
|
27
|
+
end
|
28
|
+
|
29
|
+
def message?
|
30
|
+
not(message.nil?||message.empty?)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,16 +1,7 @@
|
|
1
|
-
module CdmMigrator
|
2
|
-
class IngestWork <
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
files: work[:files],
|
9
|
-
batch_ingest_id: ingest_id
|
10
|
-
})
|
11
|
-
end
|
12
|
-
|
13
|
-
serialize :data
|
14
|
-
serialize :files
|
15
|
-
end
|
16
|
-
end
|
1
|
+
module CdmMigrator
|
2
|
+
class IngestWork < ApplicationRecord
|
3
|
+
|
4
|
+
serialize :data
|
5
|
+
serialize :files
|
6
|
+
end
|
7
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
2
|
-
|
3
|
-
<h5>ContentDM API address: <%= @cdm_url %></h5>
|
4
|
-
<%= form_tag cdm_mappings_path, method: "post", multipart: true do %>
|
5
|
-
<table>
|
6
|
-
<tr><td>Collection: </td><td><%= select_tag 'collection', options_for_select(@collections) %></td></tr>
|
7
|
-
<tr><td>Work: </td><td><%= select_tag 'work', options_for_select(@available_concerns) %></td></tr>
|
8
|
-
<tr><td>Use Local File Storage: </td><td><%= check_box_tag 'file_system', 'true', false %></td></tr>
|
9
|
-
<tr><td>Template to Apply: </td><td><%= file_field_tag 'template' %> (.yml file)</td></tr>
|
10
|
-
</table>
|
11
|
-
<%= submit_tag 'choose mappings' %>
|
1
|
+
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
2
|
+
|
3
|
+
<h5>ContentDM API address: <%= @cdm_url %></h5>
|
4
|
+
<%= form_tag cdm_mappings_path, method: "post", multipart: true do %>
|
5
|
+
<table>
|
6
|
+
<tr><td>Collection: </td><td><%= select_tag 'collection', options_for_select(@collections) %></td></tr>
|
7
|
+
<tr><td>Work: </td><td><%= select_tag 'work', options_for_select(@available_concerns) %></td></tr>
|
8
|
+
<tr><td>Use Local File Storage: </td><td><%= check_box_tag 'file_system', 'true', false %></td></tr>
|
9
|
+
<tr><td>Template to Apply: </td><td><%= file_field_tag 'template' %> (.yml file)</td></tr>
|
10
|
+
</table>
|
11
|
+
<%= submit_tag 'choose mappings' %>
|
12
12
|
<% end %>
|
@@ -1,53 +1,54 @@
|
|
1
|
-
<style type="text/css" media="screen">
|
2
|
-
|
3
|
-
table{
|
4
|
-
border-collapse:collapse;
|
5
|
-
border:1px solid black;
|
6
|
-
}
|
7
|
-
|
8
|
-
table td{
|
9
|
-
border:1px solid black;
|
10
|
-
}
|
11
|
-
</style>
|
12
|
-
|
13
|
-
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
14
|
-
|
15
|
-
<%= form_tag cdm_generate_path.gsub("generate","generate.csv") do %>
|
16
|
-
<%= hidden_field_tag "collection", params[:collection] %>
|
17
|
-
<%= hidden_field_tag "file_system", params[:file_system] %>
|
18
|
-
<table>
|
19
|
-
<% @cdm_terms.each_with_index do |t,i| %>
|
20
|
-
<tr>
|
21
|
-
<td>
|
22
|
-
<%= label_tag t.first %>
|
23
|
-
<%= hidden_field_tag "mappings[#{i}][cdm]", t.last %>
|
24
|
-
</td>
|
25
|
-
<td>
|
26
|
-
<h3>Choose one</h3>
|
27
|
-
<%= label_tag 'applies to boths compound objects and children:' %><%= select_tag "mappings[#{i}][hydra]", options_for_select(@terms, @yaml.nil? ? "" : @yaml[t.last]['hydra']), include_blank: true %><br>
|
28
|
-
<%= label_tag 'applies only to compound objects: ' %><%= select_tag "mappings[#{i}][hydrac]", options_for_select(@work_only, @yaml.nil? ? "" : @yaml[t.last]['hydrac']), include_blank: true %>
|
29
|
-
</td>
|
30
|
-
</tr>
|
31
|
-
<% end %>
|
32
|
-
</table>
|
33
|
-
<%= select_tag "mappings_url", options_for_select(@dirs.sort { |x,y| x[0].downcase <=> y[0].downcase }) if @cdm_dirs %>
|
34
|
-
<%= hidden_field_tag "work", params[:work] %>
|
35
|
-
<%= submit_tag 'generate csv'%>
|
36
|
-
<% end %>
|
37
|
-
|
38
|
-
<%= button_tag "Download Template", { "onclick" => "template()" } %>
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
document.
|
44
|
-
document.
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
1
|
+
<style type="text/css" media="screen">
|
2
|
+
|
3
|
+
table{
|
4
|
+
border-collapse:collapse;
|
5
|
+
border:1px solid black;
|
6
|
+
}
|
7
|
+
|
8
|
+
table td{
|
9
|
+
border:1px solid black;
|
10
|
+
}
|
11
|
+
</style>
|
12
|
+
|
13
|
+
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
14
|
+
|
15
|
+
<%= form_tag cdm_generate_path.gsub("generate","generate.csv") do %>
|
16
|
+
<%= hidden_field_tag "collection", params[:collection] %>
|
17
|
+
<%= hidden_field_tag "file_system", params[:file_system] %>
|
18
|
+
<table>
|
19
|
+
<% @cdm_terms.each_with_index do |t,i| %>
|
20
|
+
<tr>
|
21
|
+
<td>
|
22
|
+
<%= label_tag t.first %>
|
23
|
+
<%= hidden_field_tag "mappings[#{i}][cdm]", t.last %>
|
24
|
+
</td>
|
25
|
+
<td>
|
26
|
+
<h3>Choose one</h3>
|
27
|
+
<%= label_tag 'applies to boths compound objects and children:' %><%= select_tag "mappings[#{i}][hydra]", options_for_select(@terms, @yaml.nil? ? "" : @yaml[t.last]['hydra']), include_blank: true %><br>
|
28
|
+
<%= label_tag 'applies only to compound objects: ' %><%= select_tag "mappings[#{i}][hydrac]", options_for_select(@work_only, @yaml.nil? ? "" : @yaml[t.last]['hydrac']), include_blank: true %>
|
29
|
+
</td>
|
30
|
+
</tr>
|
31
|
+
<% end %>
|
32
|
+
</table>
|
33
|
+
<%= select_tag "mappings_url", options_for_select(@dirs.sort { |x,y| x[0].downcase <=> y[0].downcase }) if @cdm_dirs %>
|
34
|
+
<%= hidden_field_tag "work", params[:work] %>
|
35
|
+
<%= submit_tag 'generate csv'%>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
<%= button_tag "Download Template", { "onclick" => "template()" } %>
|
39
|
+
<%= link_to "Map Another Collection", cdm_start_path, class: 'btn btn-primary' %>
|
40
|
+
|
41
|
+
<script type="text/javascript">
|
42
|
+
function template() {
|
43
|
+
document.getElementsByTagName("form")[0].action = "<%= cdm_template_path.gsub("template","template.yml") %>";
|
44
|
+
document.getElementsByName("commit")[0].click();
|
45
|
+
document.getElementsByTagName("form")[0].action = "<%= cdm_generate_path.gsub("generate","generate.csv") %>";
|
46
|
+
}
|
47
|
+
|
48
|
+
inputs = document.getElementsByTagName('option');
|
49
|
+
for (var i = 0; i < inputs.length; i++) {
|
50
|
+
if (inputs[i].hasAttribute('selected')) {
|
51
|
+
inputs[i].selected = true;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
</script>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% # container for all batches in index view -%>
|
2
|
-
<div class="table-responsive" id="batches">
|
3
|
-
<%= render 'default_group', batches: @batches %>
|
4
|
-
</div>
|
1
|
+
<% # container for all batches in index view -%>
|
2
|
+
<div class="table-responsive" id="batches">
|
3
|
+
<%= render 'default_group', batches: @batches %>
|
4
|
+
</div>
|
@@ -1,17 +1,17 @@
|
|
1
|
-
<table class="table table-striped works-list">
|
2
|
-
<thead>
|
3
|
-
<tr>
|
4
|
-
<th><%= "Name" %></th>
|
5
|
-
<th><%= "Uploaded" %></th>
|
6
|
-
<th><%= "User" %></th>
|
7
|
-
<th><%= "Progress" %></th>
|
8
|
-
<th><%= "Message" %></th>
|
9
|
-
<th><%= "Actions" %></th>
|
10
|
-
</tr>
|
11
|
-
</thead>
|
12
|
-
<tbody>
|
13
|
-
<% batches.each do |batch| %>
|
14
|
-
<%= render 'list_batches', batch: batch %>
|
15
|
-
<% end %>
|
16
|
-
</tbody>
|
17
|
-
</table>
|
1
|
+
<table class="table table-striped works-list">
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<th><%= "Name" %></th>
|
5
|
+
<th><%= "Uploaded" %></th>
|
6
|
+
<th><%= "User" %></th>
|
7
|
+
<th><%= "Progress" %></th>
|
8
|
+
<th><%= "Message" %></th>
|
9
|
+
<th><%= "Actions" %></th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% batches.each do |batch| %>
|
14
|
+
<%= render 'list_batches', batch: batch %>
|
15
|
+
<% end %>
|
16
|
+
</tbody>
|
17
|
+
</table>
|