Class: Stanford::StorageServices
- Inherits:
-
Moab::StorageServices
- Object
- Moab::StorageServices
- Stanford::StorageServices
- Defined in:
- lib/stanford/storage_services.rb
Overview
An interface class to support access to SDR storage via a RESTful server
Constant Summary collapse
- @@repository =
Note:
After some discussion, consensus was that this is a thread safe use of a
class variable, as 1) it’s never mutated after the class is initialized, and 2) the value of the StorageRepository instance is determined from configuration that rarely changes and is loaded once at app start time (at least in Stanford’s consumers; see Moab::Config.configure calls in preservation_robots, preservation_catalog, and technical-metadata-service). Sidekiq requires thread safe code, so please preserve thread safety for multiple concurrent callers of this service if refactoring, so Sidekiq remains an option for ActiveJob backend for moab-versioning consumers.
Stanford::StorageRepository.new
Class Method Summary collapse
-
.cm_remediate(object_id, version_id = nil) ⇒ String
Returns a remediated copy of the contentMetadata with fixity data filled in.
-
.cm_version_additions(new_content_metadata, object_id, version_id = nil) ⇒ FileInventory
The versionAddtions report showing which files are new or modified in the content metadata.
-
.compare_cm_to_version(new_content_metadata, object_id, subset, base_version = nil) ⇒ FileInventoryDifference
The report of differences between the content metadata and the specified version.
-
.repository ⇒ StorageRepository
An instance of the interface to SDR storage.
Methods inherited from Moab::StorageServices
current_version, deposit_branch, deposit_trunk, find_storage_object, object_path, object_size, object_version_path, retrieve_file, retrieve_file_group, retrieve_file_signature, retrieve_file_using_signature, storage_object, storage_roots, version_differences
Class Method Details
.cm_remediate(object_id, version_id = nil) ⇒ String
Returns a remediated copy of the contentMetadata with fixity data filled in
71 72 73 74 75 |
# File 'lib/stanford/storage_services.rb', line 71 def self.cm_remediate(object_id, version_id = nil) cm = retrieve_file('metadata', 'contentMetadata.xml', object_id, version_id) group = retrieve_file_group('content', object_id, version_id) Stanford::ContentInventory.new.(cm, group) end |
.cm_version_additions(new_content_metadata, object_id, version_id = nil) ⇒ FileInventory
Returns The versionAddtions report showing which files are new or modified in the content metadata.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/stanford/storage_services.rb', line 53 def self.cm_version_additions(, object_id, version_id = nil) new_inventory = Stanford::ContentInventory.new.inventory_from_cm(, object_id, 'preserve') begin # ObjectNotFoundException is raised if the object does not exist in storage version_id ||= current_version(object_id) storage_object_version = repository.storage_object(object_id).find_object_version(version_id) signature_catalog = storage_object_version.signature_catalog rescue Moab::ObjectNotFoundException storage_object = Moab::StorageObject.new(object_id, 'dummy') base_version = Moab::StorageObjectVersion.new(storage_object, 0) signature_catalog = base_version.signature_catalog end signature_catalog.version_additions(new_inventory) end |
.compare_cm_to_version(new_content_metadata, object_id, subset, base_version = nil) ⇒ FileInventoryDifference
Returns The report of differences between the content metadata and the specified version.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/stanford/storage_services.rb', line 29 def self.compare_cm_to_version(, object_id, subset, base_version = nil) new_inventory = Stanford::ContentInventory.new.inventory_from_cm(, object_id, subset) begin # ObjectNotFoundException is raised if the object does not exist in storage base_version ||= current_version(object_id) # FileNotFoundException is raised if object exists but has no contentMetadata file base_cm_pathname = retrieve_file('metadata', 'contentMetadata.xml', object_id, base_version) base_inventory = Stanford::ContentInventory.new.inventory_from_cm(base_cm_pathname.read, object_id, subset, base_version) rescue Moab::ObjectNotFoundException, Moab::FileNotFoundException # Create a skeletal FileInventory object, containing no file entries storage_object = Moab::StorageObject.new(object_id, 'dummy') base_version = Moab::StorageObjectVersion.new(storage_object, 0) base_inventory = base_version.file_inventory('version') end diff = Moab::FileInventoryDifference.new.compare(base_inventory, new_inventory) = diff.group_difference('metadata') diff.group_differences.delete() if diff end |
.repository ⇒ StorageRepository
Returns an instance of the interface to SDR storage.
18 19 20 |
# File 'lib/stanford/storage_services.rb', line 18 def self.repository @@repository end |