dor-services 5.2.0 → 5.3.0
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 +5 -13
- data/config/certs/robots-dor-dev.crt +29 -0
- data/config/certs/robots-dor-dev.key +27 -0
- data/config/config_defaults.yml +2 -0
- data/config/dev_console_env.rb +77 -0
- data/lib/dor-services.rb +31 -27
- data/lib/dor/config.rb +25 -19
- data/lib/dor/datastreams/administrative_metadata_ds.rb +19 -20
- data/lib/dor/datastreams/content_metadata_ds.rb +238 -177
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
- data/lib/dor/datastreams/default_object_rights_ds.rb +99 -16
- data/lib/dor/datastreams/desc_metadata_ds.rb +37 -34
- data/lib/dor/datastreams/embargo_metadata_ds.rb +16 -16
- data/lib/dor/datastreams/events_ds.rb +2 -2
- data/lib/dor/datastreams/geo_metadata_ds.rb +5 -10
- data/lib/dor/datastreams/identity_metadata_ds.rb +22 -22
- data/lib/dor/datastreams/rights_metadata_ds.rb +43 -32
- data/lib/dor/datastreams/role_metadata_ds.rb +5 -5
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +13 -14
- data/lib/dor/datastreams/version_metadata_ds.rb +22 -23
- data/lib/dor/datastreams/workflow_definition_ds.rb +15 -15
- data/lib/dor/datastreams/workflow_ds.rb +64 -70
- data/lib/dor/exceptions.rb +0 -1
- data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +4 -4
- data/lib/dor/migrations/processable/unify_workflows.rb +1 -1
- data/lib/dor/models/admin_policy_object.rb +4 -4
- data/lib/dor/models/assembleable.rb +2 -3
- data/lib/dor/models/collection.rb +1 -1
- data/lib/dor/models/contentable.rb +113 -108
- data/lib/dor/models/describable.rb +136 -95
- data/lib/dor/models/editable.rb +205 -119
- data/lib/dor/models/embargoable.rb +16 -16
- data/lib/dor/models/eventable.rb +2 -2
- data/lib/dor/models/geoable.rb +3 -3
- data/lib/dor/models/governable.rb +25 -26
- data/lib/dor/models/identifiable.rb +66 -55
- data/lib/dor/models/item.rb +0 -1
- data/lib/dor/models/itemizable.rb +7 -8
- data/lib/dor/models/preservable.rb +7 -8
- data/lib/dor/models/processable.rb +76 -73
- data/lib/dor/models/publishable.rb +25 -30
- data/lib/dor/models/releaseable.rb +118 -155
- data/lib/dor/models/rightsable.rb +2 -3
- data/lib/dor/models/set.rb +1 -1
- data/lib/dor/models/shelvable.rb +8 -10
- data/lib/dor/models/upgradable.rb +5 -6
- data/lib/dor/models/versionable.rb +3 -4
- data/lib/dor/models/workflow_object.rb +15 -16
- data/lib/dor/services/cleanup_reset_service.rb +15 -16
- data/lib/dor/services/cleanup_service.rb +2 -4
- data/lib/dor/services/digital_stacks_service.rb +10 -13
- data/lib/dor/services/merge_service.rb +8 -9
- data/lib/dor/services/metadata_handlers/catalog_handler.rb +1 -1
- data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +3 -3
- data/lib/dor/services/metadata_service.rb +19 -20
- data/lib/dor/services/registration_service.rb +80 -61
- data/lib/dor/services/reset_workspace_service.rb +6 -10
- data/lib/dor/services/sdr_ingest_service.rb +15 -16
- data/lib/dor/services/search_service.rb +18 -23
- data/lib/dor/services/suri_service.rb +6 -6
- data/lib/dor/services/technical_metadata_service.rb +27 -44
- data/lib/dor/utils/ng_tidy.rb +3 -3
- data/lib/dor/utils/sdr_client.rb +2 -3
- data/lib/dor/utils/solr_doc_helper.rb +1 -3
- data/lib/dor/version.rb +1 -1
- data/lib/dor/workflow/document.rb +43 -40
- data/lib/dor/workflow/graph.rb +26 -26
- data/lib/dor/workflow/process.rb +34 -35
- data/lib/tasks/rdoc.rake +5 -5
- metadata +129 -111
- data/lib/dor/models/presentable.rb +0 -146
@@ -1,146 +0,0 @@
|
|
1
|
-
require 'iiif/presentation'
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
module Presentable
|
5
|
-
|
6
|
-
DC_NS = {"dc"=>"http://purl.org/dc/elements/1.1/", "oai_dc"=>"http://www.openarchives.org/OAI/2.0/oai_dc/"}
|
7
|
-
|
8
|
-
def iiif_presentation_manifest_needed? pub_obj_doc
|
9
|
-
if pub_obj_doc.at_xpath('/publicObject/contentMetadata[contains(@type,"image") or contains(@type,"map")]/resource[@type="image"]')
|
10
|
-
return true
|
11
|
-
elsif pub_obj_doc.at_xpath('/publicObject/contentMetadata[@type="book"]/resource[@type="page"]')
|
12
|
-
return true
|
13
|
-
else
|
14
|
-
return false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
# Bypass this method if there are no image resources in contentMetadata
|
19
|
-
def build_iiif_manifest pub_obj_doc
|
20
|
-
id = self.pid.split(':').last
|
21
|
-
|
22
|
-
lbl_node = pub_obj_doc.at_xpath '//oai_dc:dc/dc:title', DC_NS
|
23
|
-
if lbl_node.nil?
|
24
|
-
lbl_node = pub_obj_doc.at_xpath('/publicObject/identityMetadata/objectLabel')
|
25
|
-
end
|
26
|
-
raise "Unable to build IIIF Presentation manifest: No identityMetadata/objectLabel or dc:title" if lbl_node.nil?
|
27
|
-
lbl = lbl_node.text
|
28
|
-
|
29
|
-
purl_base_uri = "https://#{Dor::Config.stacks.document_cache_host}/#{id}"
|
30
|
-
|
31
|
-
manifest_data = {
|
32
|
-
'@id' => "#{purl_base_uri}/iiif/manifest.json",
|
33
|
-
'label' => lbl,
|
34
|
-
'attribution' => 'Provided by the Stanford University Libraries',
|
35
|
-
'logo' => {
|
36
|
-
'@id' => "https://stacks.stanford.edu/image/iiif/wy534zh7137%2FSULAIR_rosette/full/400,/0/default.jpg",
|
37
|
-
'service' => {
|
38
|
-
'@context' => "http://iiif.io/api/image/2/context.json",
|
39
|
-
'@id' => "https://stacks.stanford.edu/image/iiif/wy534zh7137%2FSULAIR_rosette",
|
40
|
-
'profile' => "http://iiif.io/api/image/2/level1.json"
|
41
|
-
}
|
42
|
-
},
|
43
|
-
'seeAlso' => {
|
44
|
-
'@id' => "#{purl_base_uri}.mods",
|
45
|
-
'format' => 'application/mods+xml'
|
46
|
-
}
|
47
|
-
}
|
48
|
-
# Use the human copyright statement for attribution if present
|
49
|
-
if (cr = pub_obj_doc.at_xpath('/publicObject/rightsMetadata/copyright/human[@type="copyright"]'))
|
50
|
-
manifest_data['attribution'] = cr.text
|
51
|
-
end
|
52
|
-
|
53
|
-
manifest = IIIF::Presentation::Manifest.new manifest_data
|
54
|
-
|
55
|
-
# Set viewingHint to paged if this is a book
|
56
|
-
if pub_obj_doc.at_xpath('/publicObject/contentMetadata[@type="book"]')
|
57
|
-
manifest.viewingHint = "paged"
|
58
|
-
end
|
59
|
-
|
60
|
-
metadata = []
|
61
|
-
# make into method, pass in xpath and label
|
62
|
-
add_metadata 'Creator', '//oai_dc:dc/dc:creator', metadata, pub_obj_doc
|
63
|
-
add_metadata 'Contributor', '//oai_dc:dc/dc:contributor', metadata, pub_obj_doc
|
64
|
-
add_metadata 'Publisher', '//oai_dc:dc/dc:publisher', metadata, pub_obj_doc
|
65
|
-
add_metadata 'Date', '//oai_dc:dc/dc:date', metadata, pub_obj_doc
|
66
|
-
|
67
|
-
# Save off the first dc:description without displayLabel
|
68
|
-
if (desc = pub_obj_doc.at_xpath('//oai_dc:dc/dc:description[not(@displayLabel)]', DC_NS))
|
69
|
-
manifest.description = desc.text
|
70
|
-
end
|
71
|
-
|
72
|
-
manifest.metadata = metadata unless metadata.empty?
|
73
|
-
|
74
|
-
seq_data = {
|
75
|
-
'@id' => "#{purl_base_uri}/sequence-1",
|
76
|
-
'label' => 'Current order'
|
77
|
-
}
|
78
|
-
sequence = IIIF::Presentation::Sequence.new seq_data
|
79
|
-
|
80
|
-
# for each resource image, create a canvas
|
81
|
-
count = 0
|
82
|
-
pub_obj_doc.xpath('/publicObject/contentMetadata/resource[@type="image" or @type="page"]').each do |res_node|
|
83
|
-
count += 1
|
84
|
-
img_file_name = res_node.at_xpath('file/@id').text.split('.').first
|
85
|
-
height = res_node.at_xpath('file/imageData/@height').text.to_i
|
86
|
-
width = res_node.at_xpath('file/imageData/@width').text.to_i
|
87
|
-
stacks_uri = "#{Dor::Config.stacks.url}/image/iiif/#{id}%2F#{img_file_name}"
|
88
|
-
|
89
|
-
canv = IIIF::Presentation::Canvas.new
|
90
|
-
canv['@id'] = "#{purl_base_uri}/canvas/canvas-#{count}"
|
91
|
-
label_node = res_node.at_xpath('label')
|
92
|
-
if label_node
|
93
|
-
canv.label = label_node.text
|
94
|
-
else
|
95
|
-
canv.label = "image"
|
96
|
-
end
|
97
|
-
canv.height = height
|
98
|
-
canv.width = width
|
99
|
-
|
100
|
-
anno = IIIF::Presentation::Annotation.new
|
101
|
-
anno['@id'] = "#{purl_base_uri}/imageanno/anno-#{count}"
|
102
|
-
anno['on'] = canv['@id']
|
103
|
-
|
104
|
-
img_res = IIIF::Presentation::ImageResource.new
|
105
|
-
img_res['@id'] = "#{stacks_uri}/full/full/0/default.jpg"
|
106
|
-
img_res.format = 'image/jpeg'
|
107
|
-
img_res.height = height
|
108
|
-
img_res.width = width
|
109
|
-
|
110
|
-
svc = IIIF::Service.new ({
|
111
|
-
'@context' => 'http://iiif.io/api/image/2/context.json',
|
112
|
-
'@id' => stacks_uri,
|
113
|
-
'profile' => Dor::Config.stacks.iiif_profile
|
114
|
-
})
|
115
|
-
|
116
|
-
# Use the first image to create a thumbnail on the manifest
|
117
|
-
if count == 1
|
118
|
-
thumb = IIIF::Presentation::Resource.new
|
119
|
-
thumb['@id'] = "#{stacks_uri}/full/400,/0/default.jpg"
|
120
|
-
thumb.service = svc
|
121
|
-
manifest.thumbnail = thumb
|
122
|
-
end
|
123
|
-
|
124
|
-
img_res.service = svc
|
125
|
-
anno.resource = img_res
|
126
|
-
canv.images << anno
|
127
|
-
sequence.canvases << canv
|
128
|
-
end
|
129
|
-
|
130
|
-
manifest.sequences << sequence
|
131
|
-
manifest.to_json(:pretty => true)
|
132
|
-
end
|
133
|
-
|
134
|
-
def add_metadata label, xpath, metadata, pub_obj_doc
|
135
|
-
nodes = pub_obj_doc.xpath xpath, DC_NS
|
136
|
-
nodes.each do |node|
|
137
|
-
h = {
|
138
|
-
'label' => label,
|
139
|
-
'value' => node.text
|
140
|
-
}
|
141
|
-
metadata << h
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
146
|
-
end
|