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.
Files changed (71) hide show
  1. checksums.yaml +5 -13
  2. data/config/certs/robots-dor-dev.crt +29 -0
  3. data/config/certs/robots-dor-dev.key +27 -0
  4. data/config/config_defaults.yml +2 -0
  5. data/config/dev_console_env.rb +77 -0
  6. data/lib/dor-services.rb +31 -27
  7. data/lib/dor/config.rb +25 -19
  8. data/lib/dor/datastreams/administrative_metadata_ds.rb +19 -20
  9. data/lib/dor/datastreams/content_metadata_ds.rb +238 -177
  10. data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
  11. data/lib/dor/datastreams/default_object_rights_ds.rb +99 -16
  12. data/lib/dor/datastreams/desc_metadata_ds.rb +37 -34
  13. data/lib/dor/datastreams/embargo_metadata_ds.rb +16 -16
  14. data/lib/dor/datastreams/events_ds.rb +2 -2
  15. data/lib/dor/datastreams/geo_metadata_ds.rb +5 -10
  16. data/lib/dor/datastreams/identity_metadata_ds.rb +22 -22
  17. data/lib/dor/datastreams/rights_metadata_ds.rb +43 -32
  18. data/lib/dor/datastreams/role_metadata_ds.rb +5 -5
  19. data/lib/dor/datastreams/simple_dublin_core_ds.rb +13 -14
  20. data/lib/dor/datastreams/version_metadata_ds.rb +22 -23
  21. data/lib/dor/datastreams/workflow_definition_ds.rb +15 -15
  22. data/lib/dor/datastreams/workflow_ds.rb +64 -70
  23. data/lib/dor/exceptions.rb +0 -1
  24. data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +4 -4
  25. data/lib/dor/migrations/processable/unify_workflows.rb +1 -1
  26. data/lib/dor/models/admin_policy_object.rb +4 -4
  27. data/lib/dor/models/assembleable.rb +2 -3
  28. data/lib/dor/models/collection.rb +1 -1
  29. data/lib/dor/models/contentable.rb +113 -108
  30. data/lib/dor/models/describable.rb +136 -95
  31. data/lib/dor/models/editable.rb +205 -119
  32. data/lib/dor/models/embargoable.rb +16 -16
  33. data/lib/dor/models/eventable.rb +2 -2
  34. data/lib/dor/models/geoable.rb +3 -3
  35. data/lib/dor/models/governable.rb +25 -26
  36. data/lib/dor/models/identifiable.rb +66 -55
  37. data/lib/dor/models/item.rb +0 -1
  38. data/lib/dor/models/itemizable.rb +7 -8
  39. data/lib/dor/models/preservable.rb +7 -8
  40. data/lib/dor/models/processable.rb +76 -73
  41. data/lib/dor/models/publishable.rb +25 -30
  42. data/lib/dor/models/releaseable.rb +118 -155
  43. data/lib/dor/models/rightsable.rb +2 -3
  44. data/lib/dor/models/set.rb +1 -1
  45. data/lib/dor/models/shelvable.rb +8 -10
  46. data/lib/dor/models/upgradable.rb +5 -6
  47. data/lib/dor/models/versionable.rb +3 -4
  48. data/lib/dor/models/workflow_object.rb +15 -16
  49. data/lib/dor/services/cleanup_reset_service.rb +15 -16
  50. data/lib/dor/services/cleanup_service.rb +2 -4
  51. data/lib/dor/services/digital_stacks_service.rb +10 -13
  52. data/lib/dor/services/merge_service.rb +8 -9
  53. data/lib/dor/services/metadata_handlers/catalog_handler.rb +1 -1
  54. data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +3 -3
  55. data/lib/dor/services/metadata_service.rb +19 -20
  56. data/lib/dor/services/registration_service.rb +80 -61
  57. data/lib/dor/services/reset_workspace_service.rb +6 -10
  58. data/lib/dor/services/sdr_ingest_service.rb +15 -16
  59. data/lib/dor/services/search_service.rb +18 -23
  60. data/lib/dor/services/suri_service.rb +6 -6
  61. data/lib/dor/services/technical_metadata_service.rb +27 -44
  62. data/lib/dor/utils/ng_tidy.rb +3 -3
  63. data/lib/dor/utils/sdr_client.rb +2 -3
  64. data/lib/dor/utils/solr_doc_helper.rb +1 -3
  65. data/lib/dor/version.rb +1 -1
  66. data/lib/dor/workflow/document.rb +43 -40
  67. data/lib/dor/workflow/graph.rb +26 -26
  68. data/lib/dor/workflow/process.rb +34 -35
  69. data/lib/tasks/rdoc.rake +5 -5
  70. metadata +129 -111
  71. 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