Skip to content
Snippets Groups Projects
Commit 43e471e6 authored by Anusha Ranganathan's avatar Anusha Ranganathan
Browse files

Save ARK in metadata, remove identifier from form, DRY code

parent 375882c2
No related branches found
Tags v0.3.3
2 merge requests!115Tombstone not available for dataset,!114Save ARK in metadata, remove identifier from form, DRY code
Pipeline #6123 failed
......@@ -146,6 +146,13 @@ ORCID_SANDBOX=true
# If Authorization is restricted, only existing users with an Orcid are allowed access
ORCID_RESTRICT_AUTHORIZATION=true
# DOI
REGISTER_DOI=true
DOI_URL=https://api.test.datacite.org/
DOI_USERNAME=
DOI_PASSWORD=
DOI_PREFIX=
# ARK
REGISTER_ARK=true
ARK_ENDPOINT=
......@@ -155,13 +162,6 @@ ARK_NAMESPACE=
# ARK name assigning authority number
ARK_NAAN=
# DOI
USE_DOI_REGISTRATION=true
DOI_URL=https://api.test.datacite.org/
DOI_USERNAME=
DOI_PASSWORD=
DOI_PREFIX=
# Download
DOWNLOAD_SIZE_LIMIT=100000000
DOWNLOAD_PATH=tmp/downloads
......
......@@ -159,7 +159,7 @@ ARK_NAMESPACE=
ARK_NAAN=
# DOI
USE_DOI_REGISTRATION=false
REGISTER_DOI=false
DOI_URL=
DOI_USERNAME=
DOI_PASSWORD=
......
......@@ -28,7 +28,6 @@ module Hyrax
:approval_number,
:extra_information,
:modality,
:complex_identifier,
:complex_date,
:subject,
:publisher,
......@@ -153,17 +152,6 @@ module Hyrax
]
end
def self.permitted_identifier_params
[:id,
:_destroy,
{
identifier: [],
scheme: [],
label: []
}
]
end
def self.permitted_person_params
[:id,
:_destroy,
......@@ -186,7 +174,6 @@ module Hyrax
{
title: [],
url: [],
complex_identifier_attributes: permitted_identifier_params,
relationship: []
}
]
......@@ -219,7 +206,6 @@ module Hyrax
permitted << :experiment_title
permitted << :experiment_description
permitted << { complex_date_attributes: permitted_date_params }
permitted << { complex_identifier_attributes: permitted_identifier_params }
permitted << { complex_person_attributes: permitted_person_params }
permitted << { complex_relation_attributes: permitted_relation_params }
permitted << { complex_funding_reference_attributes: permitted_fundref_params }
......
......@@ -37,7 +37,6 @@ module Hyrax
# :technical_information,
:based_near,
:complex_funding_reference,
:complex_identifier,
:publisher,
:doi,
]
......@@ -73,8 +72,7 @@ module Hyrax
def references_tab_terms
[
# Related Items, ID
:complex_relation,
:complex_identifier,
:complex_relation
]
end
......@@ -96,17 +94,6 @@ module Hyrax
]
end
def self.permitted_identifier_params
[:id,
:_destroy,
{
identifier: [],
scheme: [],
label: []
}
]
end
def self.permitted_person_params
[:id,
:_destroy,
......@@ -129,7 +116,6 @@ module Hyrax
{
title: [],
url: [],
complex_identifier_attributes: permitted_identifier_params,
relationship: []
}
]
......@@ -152,7 +138,6 @@ module Hyrax
permitted = super
permitted << :doi
permitted << { complex_date_attributes: permitted_date_params }
permitted << { complex_identifier_attributes: permitted_identifier_params }
permitted << { complex_person_attributes: permitted_person_params }
permitted << { complex_relation_attributes: permitted_relation_params }
permitted << { complex_funding_reference_attributes: permitted_fundref_params }
......
module ExternalServices
extend ActiveSupport::Concern
included do
def register_ark
return true if ENV.fetch('REGISTER_ARK', 'true') == 'false'
ark = ArkService.new
ark.authenticate
creators = self.complex_person.map{|person| "#{person.first_name.first},#{person.last_name.first}" }.compact
metadata = {
'creator': creators.join(';'),
'title': self.title.first,
'date_created': self.create_date
}
url = "#{ENV['APPLICATION_URL']}/concern/crc_datasets/#{self.id}"
resp = ark.create_ark(self.id, url, metadata)
if resp and resp[0]
# Save ark to metadata
complex_identifier = ComplexIdentifier.new(RDF::Node.new, ActiveTriples::Resource.new)
complex_identifier.identifier = resp[2]
complex_identifier.scheme = 'ARK'
self.update(complex_identifier: [complex_identifier])
self.save
end
end
def total_file_size
s3 = S3StorageService.new
s3.init_client
bucket_name = s3.sanitise_name(self.id)
return 0 unless s3.bucket_exists?(bucket_name)
_list_of_objects, size = s3.list_all_objects(bucket_name)
size
end
def save_work_meta_json_file_to_s3
s3 = S3StorageService.new
s3.init_client
bucket_name = s3.sanitise_name(id)
s3.create_bucket(bucket_name) unless s3.bucket_exists?(bucket_name)
s3.add_content(bucket_name, 'metadata.json', to_json)
end
end
end
\ No newline at end of file
......@@ -5,6 +5,7 @@
class CrcDataset < ActiveFedora::Base
include ::Hyrax::WorkBehavior
include ::Hyrax::TombstoneBehavior
include ExternalServices
self.indexer = CrcDatasetIndexer
# Change this to restrict which works can be added as a child.
# self.valid_child_concerns = []
......@@ -12,7 +13,7 @@ class CrcDataset < ActiveFedora::Base
after_save :save_work_meta_json_file_to_s3
after_create :set_default_source_and_tombstone_status
after_create :update_ark
after_create :register_ark
# ------ properties from core metadata ------
# property date_modified - not displayed (filled in by the system)
......@@ -149,42 +150,10 @@ class CrcDataset < ActiveFedora::Base
private
def save_work_meta_json_file_to_s3
s3 = S3StorageService.new
s3.init_client
bucket_name = s3.sanitise_name(id)
s3.create_bucket(bucket_name) unless s3.bucket_exists?(bucket_name)
s3.add_content(bucket_name, 'metadata.json', to_json)
end
def set_default_source_and_tombstone_status
self.source = source.present? ? source : [SecureRandom.uuid]
self.is_tombstoned = false
self.save
end
def update_ark
ark = ArkService.new
ark.authenticate
creators = self.complex_person.map{|person| "#{person.first_name.first},#{person.last_name.first}" }.compact
metadata = {
'creator': creators.join(';'),
'title': self.title.first,
'date_created': self.create_date
}
url = "#{ENV['APPLICATION_URL']}/concern/crc_datasets/#{self.id}"
ark.create_ark(self.id, url, metadata)
end
def total_file_size
s3 = S3StorageService.new
s3.init_client
bucket_name = s3.sanitise_name(self.id)
return 0 unless s3.bucket_exists?(bucket_name)
_list_of_objects, size = s3.list_all_objects(bucket_name)
size
end
end
......@@ -4,13 +4,16 @@ require "./lib/vocabularies/rdms"
class Dataset < ActiveFedora::Base
include ::Hyrax::WorkBehavior
include ::Hyrax::TombstoneBehavior
include ExternalServices
self.indexer = DatasetIndexer
# Change this to restrict which works can be added as a child.
# self.valid_child_concerns = []
validates :title, presence: { message: 'Your dataset must have a title.' }
after_save :save_work_meta_json_file_to_s3
after_create :set_default_tombstone_status
after_create :update_ark
after_create :register_ark
# ------ properties from core metadata ------
# property date_modified - not displayed (filled in by the system)
# property date_uploaded - not displayed (filled in by the system)
......@@ -113,15 +116,6 @@ class Dataset < ActiveFedora::Base
accepts_nested_attributes_for :complex_relation, reject_if: :relation_blank, allow_destroy: true
accepts_nested_attributes_for :updated_subresources, allow_destroy: true
def total_file_size
s3 = S3StorageService.new
s3.init_client
bucket_name = s3.sanitise_name(self.id)
return 0 unless s3.bucket_exists?(bucket_name)
_list_of_objects, size = s3.list_all_objects(bucket_name)
size
end
private
def set_default_tombstone_status
......@@ -129,18 +123,4 @@ class Dataset < ActiveFedora::Base
self.save
end
def update_ark
ark = ArkService.new
ark.authenticate
creators = self.complex_person.map{|person| "#{person.last_name.first},#{person.first_name.first}" }.compact
metadata = {
creator: creators.join(';'),
title: self.title.first,
date_created: self.create_date
}
url = "#{ENV['APPLICATION_URL']}/concern/datasets/#{self.id}"
ark.create_ark(self.id, url, metadata)
end
end
......@@ -13,7 +13,7 @@ class NestedIdentifierAttributeRenderer < NestedAttributeRenderer
end
unless v.dig('identifier').blank?
val = v['identifier'][0]
val = link_to(v['identifier'][0], v['identifier'][0])
end
html += get_row(scheme, val)
......
......@@ -191,7 +191,7 @@ class ArkService
# request.body = data
request.set_form_data(data)
success, _response_body, _response = _do_request(request)
return success, _response_body
return success, _response_body, uri.to_s
end
def _prepare_metadata(where, work_url, metadata)
......
......@@ -11,18 +11,15 @@ module Hyrax
# Genrate DOI for dataset
module RegisterDoi
def self.call(target:, **)
return true unless ENV['USE_DOI_REGISTRATION']
return true if ENV.fetch('REGISTER_DOI', 'true') == 'false'
@dataset = target
collection = @dataset.parent_collections.first
collection_type = collection&.collection_type&.title
url = URI(ENV['DOI_URL'])
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
creators = @dataset.complex_person.select { |person| person.role == ['creator'] }
creators_hash = creators.map do |person|
creators_hash = @dataset.complex_person.map do |person|
{ name: "#{person.last_name.first},#{person.first_name.first}" }
end.compact
......@@ -38,7 +35,7 @@ module Hyrax
"doi": "#{ENV['DOI_PREFIX']}/#{@dataset.id}",
"creators": creators_hash,
"titles": [{ title: @dataset.title&.first }],
"publisher": collection_type == 'CRC 1280' ? 'SFB1280' : 'Ruhr-University Bochum',
"publisher": @dataset.publisher&.first || 'Ruhr-University Bochum',
"publicationYear": Date.today.year,
"types": {
"resourceTypeGeneral": @dataset.resource_type&.first
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment