ddr-core 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +12 -0
- data/README.md +27 -0
- data/Rakefile +30 -0
- data/app/assets/config/ddr_core_manifest.js +0 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +11 -0
- data/app/controllers/users/sessions_controller.rb +15 -0
- data/app/models/concerns/ddr/captionable.rb +25 -0
- data/app/models/concerns/ddr/describable.rb +108 -0
- data/app/models/concerns/ddr/governable.rb +25 -0
- data/app/models/concerns/ddr/has_admin_metadata.rb +141 -0
- data/app/models/concerns/ddr/has_attachments.rb +10 -0
- data/app/models/concerns/ddr/has_children.rb +10 -0
- data/app/models/concerns/ddr/has_content.rb +132 -0
- data/app/models/concerns/ddr/has_extracted_text.rb +10 -0
- data/app/models/concerns/ddr/has_intermediate_file.rb +25 -0
- data/app/models/concerns/ddr/has_multires_image.rb +14 -0
- data/app/models/concerns/ddr/has_parent.rb +18 -0
- data/app/models/concerns/ddr/has_struct_metadata.rb +21 -0
- data/app/models/concerns/ddr/has_thumbnail.rb +33 -0
- data/app/models/concerns/ddr/solr_document_behavior.rb +429 -0
- data/app/models/concerns/ddr/streamable.rb +25 -0
- data/app/models/ddr/admin_set.rb +28 -0
- data/app/models/ddr/attachment.rb +14 -0
- data/app/models/ddr/collection.rb +28 -0
- data/app/models/ddr/component.rb +31 -0
- data/app/models/ddr/contact.rb +23 -0
- data/app/models/ddr/digest.rb +8 -0
- data/app/models/ddr/file.rb +40 -0
- data/app/models/ddr/item.rb +36 -0
- data/app/models/ddr/language.rb +31 -0
- data/app/models/ddr/media_type.rb +22 -0
- data/app/models/ddr/resource.rb +94 -0
- data/app/models/ddr/rights_statement.rb +25 -0
- data/app/models/ddr/target.rb +17 -0
- data/config/initializers/devise.rb +262 -0
- data/config/locales/ddr-core.en.yml +85 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20141104181418_create_users.rb +34 -0
- data/db/migrate/20141107124012_add_columns_to_user.rb +46 -0
- data/lib/ddr-core.rb +1 -0
- data/lib/ddr/auth.rb +80 -0
- data/lib/ddr/auth/ability.rb +18 -0
- data/lib/ddr/auth/ability_definitions.rb +26 -0
- data/lib/ddr/auth/ability_definitions/admin_set_ability_definitions.rb +9 -0
- data/lib/ddr/auth/ability_definitions/alias_ability_definitions.rb +23 -0
- data/lib/ddr/auth/ability_definitions/attachment_ability_definitions.rb +13 -0
- data/lib/ddr/auth/ability_definitions/collection_ability_definitions.rb +28 -0
- data/lib/ddr/auth/ability_definitions/component_ability_definitions.rb +13 -0
- data/lib/ddr/auth/ability_definitions/item_ability_definitions.rb +13 -0
- data/lib/ddr/auth/ability_definitions/lock_ability_definitions.rb +13 -0
- data/lib/ddr/auth/ability_definitions/publication_ability_definitions.rb +16 -0
- data/lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb +39 -0
- data/lib/ddr/auth/ability_definitions/superuser_ability_definitions.rb +9 -0
- data/lib/ddr/auth/ability_factory.rb +10 -0
- data/lib/ddr/auth/abstract_ability.rb +48 -0
- data/lib/ddr/auth/affiliation.rb +14 -0
- data/lib/ddr/auth/affiliation_groups.rb +20 -0
- data/lib/ddr/auth/anonymous_ability.rb +7 -0
- data/lib/ddr/auth/auth_context.rb +109 -0
- data/lib/ddr/auth/auth_context_factory.rb +13 -0
- data/lib/ddr/auth/detached_auth_context.rb +19 -0
- data/lib/ddr/auth/dynamic_groups.rb +13 -0
- data/lib/ddr/auth/effective_permissions.rb +12 -0
- data/lib/ddr/auth/effective_roles.rb +9 -0
- data/lib/ddr/auth/failure_app.rb +16 -0
- data/lib/ddr/auth/group.rb +40 -0
- data/lib/ddr/auth/grouper_gateway.rb +70 -0
- data/lib/ddr/auth/groups.rb +32 -0
- data/lib/ddr/auth/ldap_gateway.rb +74 -0
- data/lib/ddr/auth/permissions.rb +18 -0
- data/lib/ddr/auth/remote_groups.rb +14 -0
- data/lib/ddr/auth/role_based_access_controls_enforcement.rb +56 -0
- data/lib/ddr/auth/roles.rb +28 -0
- data/lib/ddr/auth/roles/role.rb +121 -0
- data/lib/ddr/auth/roles/role_type.rb +23 -0
- data/lib/ddr/auth/roles/role_types.rb +52 -0
- data/lib/ddr/auth/superuser_ability.rb +7 -0
- data/lib/ddr/auth/test_helpers.rb +22 -0
- data/lib/ddr/auth/user.rb +54 -0
- data/lib/ddr/auth/web_auth_context.rb +29 -0
- data/lib/ddr/core.rb +110 -0
- data/lib/ddr/core/engine.rb +8 -0
- data/lib/ddr/core/version.rb +5 -0
- data/lib/ddr/error.rb +16 -0
- data/lib/ddr/files.rb +13 -0
- data/lib/ddr/fits.rb +189 -0
- data/lib/ddr/index.rb +29 -0
- data/lib/ddr/index/abstract_query_result.rb +22 -0
- data/lib/ddr/index/connection.rb +38 -0
- data/lib/ddr/index/csv_query_result.rb +84 -0
- data/lib/ddr/index/document_builder.rb +9 -0
- data/lib/ddr/index/field.rb +35 -0
- data/lib/ddr/index/field_attribute.rb +22 -0
- data/lib/ddr/index/fields.rb +154 -0
- data/lib/ddr/index/filter.rb +139 -0
- data/lib/ddr/index/query.rb +82 -0
- data/lib/ddr/index/query_builder.rb +185 -0
- data/lib/ddr/index/query_clause.rb +112 -0
- data/lib/ddr/index/query_params.rb +40 -0
- data/lib/ddr/index/query_result.rb +102 -0
- data/lib/ddr/index/response.rb +30 -0
- data/lib/ddr/index/sort_order.rb +28 -0
- data/lib/ddr/index/unique_key_field.rb +12 -0
- data/lib/ddr/managers.rb +9 -0
- data/lib/ddr/managers/manager.rb +13 -0
- data/lib/ddr/managers/technical_metadata_manager.rb +141 -0
- data/lib/ddr/structure.rb +188 -0
- data/lib/ddr/structures/agent.rb +49 -0
- data/lib/ddr/structures/component_type_term.rb +29 -0
- data/lib/ddr/structures/div.rb +64 -0
- data/lib/ddr/structures/f_locat.rb +54 -0
- data/lib/ddr/structures/file.rb +52 -0
- data/lib/ddr/structures/file_grp.rb +35 -0
- data/lib/ddr/structures/file_sec.rb +22 -0
- data/lib/ddr/structures/fptr.rb +31 -0
- data/lib/ddr/structures/mets_hdr.rb +37 -0
- data/lib/ddr/structures/mptr.rb +49 -0
- data/lib/ddr/structures/struct_map.rb +40 -0
- data/lib/ddr/utils.rb +185 -0
- data/lib/ddr/vocab.rb +22 -0
- data/lib/ddr/vocab/asset.rb +51 -0
- data/lib/ddr/vocab/contact.rb +9 -0
- data/lib/ddr/vocab/display.rb +9 -0
- data/lib/ddr/vocab/duke_terms.rb +13 -0
- data/lib/ddr/vocab/rdf_vocabulary_parser.rb +43 -0
- data/lib/ddr/vocab/roles.rb +25 -0
- data/lib/ddr/vocab/sources/duketerms.rdf +870 -0
- data/lib/ddr/vocab/vocabulary.rb +37 -0
- data/lib/ddr/workflow.rb +8 -0
- data/lib/tasks/ddr/core_tasks.rake +4 -0
- metadata +428 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module Ddr
|
2
|
+
module HasIntermediateFile
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :intermediate_file, Ddr::File.optional
|
7
|
+
end
|
8
|
+
|
9
|
+
def intermediate_type
|
10
|
+
intermediate_file&.media_type
|
11
|
+
end
|
12
|
+
|
13
|
+
# This method is used in dul-hydra 'ComponentsController'
|
14
|
+
def intermediate_extension
|
15
|
+
if filename = intermediate_file&.original_filename
|
16
|
+
::File.extname(filename)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def intermediate_path
|
21
|
+
intermediate_file&.file&.disk_path
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ddr
|
2
|
+
module HasParent
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :parent_id, Valkyrie::Types::ID.optional
|
7
|
+
end
|
8
|
+
|
9
|
+
def parent
|
10
|
+
Ddr.query_service.find_by(id: parent_id) if parent_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def publishable?
|
14
|
+
parent&.published? || false
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ddr
|
2
|
+
module HasStructMetadata
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :struct_metadata, Ddr::File.optional
|
7
|
+
end
|
8
|
+
|
9
|
+
def structure
|
10
|
+
if has_struct_metadata?
|
11
|
+
file = Ddr.storage_adapter.find_by(id: struct_metadata.file_identifier)
|
12
|
+
Ddr::Structure.new(Nokogiri::XML(file))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
#def multires_image_file_paths
|
17
|
+
# ::SolrDocument.find(pid).multires_image_file_paths
|
18
|
+
#end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ddr
|
2
|
+
module HasThumbnail
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :thumbnail, Ddr::File.optional
|
7
|
+
end
|
8
|
+
|
9
|
+
def thumbnail_path
|
10
|
+
thumbnail&.file&.disk_path
|
11
|
+
end
|
12
|
+
|
13
|
+
# ******DDRevo******
|
14
|
+
# This method is used only in the '#copy_thumbnail_from' method defined below.
|
15
|
+
# ******DDRevo******
|
16
|
+
# def thumbnail_changed?
|
17
|
+
# thumbnail.content_changed?
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# ******DDRevo******
|
21
|
+
# This method is used in a dul-hydra rake task ('thumbnail:copy') and will be accounted for in the dul-hydra
|
22
|
+
# refactor.
|
23
|
+
# ******DDRevo******
|
24
|
+
# def copy_thumbnail_from(other)
|
25
|
+
# if other && other.has_thumbnail?
|
26
|
+
# self.thumbnail.content = other.thumbnail.content
|
27
|
+
# self.thumbnail.mimeType = other.thumbnail.mimeType if thumbnail_changed?
|
28
|
+
# end
|
29
|
+
# thumbnail_changed?
|
30
|
+
# end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,429 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'solrizer'
|
3
|
+
|
4
|
+
module Ddr
|
5
|
+
module SolrDocumentBehavior
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
alias_method :pid, :id
|
10
|
+
end
|
11
|
+
|
12
|
+
class NotFound < Error; end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def find(id)
|
16
|
+
query = Ddr::Index::Query.new { id id }
|
17
|
+
if doc = query.docs.first
|
18
|
+
return doc
|
19
|
+
end
|
20
|
+
raise NotFound, "SolrDocument not found for \"#{id}\"."
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_by_permanent_id(ark)
|
24
|
+
query = Ddr::Index::Query.new do
|
25
|
+
q *:*
|
26
|
+
where permanent_id: ark
|
27
|
+
end
|
28
|
+
if doc = query.docs.first
|
29
|
+
return doc
|
30
|
+
end
|
31
|
+
raise NotFound, "SolrDocument not found for permanent id \"#{ark}\"."
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def inspect
|
36
|
+
"#<#{self.class.name} id=#{id.inspect}>"
|
37
|
+
end
|
38
|
+
|
39
|
+
def method_missing(name, *args, &block)
|
40
|
+
if args.empty? && !block
|
41
|
+
begin
|
42
|
+
field = Ddr::Index::Fields.get(name)
|
43
|
+
rescue NameError
|
44
|
+
# pass
|
45
|
+
else
|
46
|
+
# Preserves the default behavior of the deprecated method
|
47
|
+
# Blacklight::Solr::Document#get, which this procedure
|
48
|
+
# effectively replaces.
|
49
|
+
val = self[field]
|
50
|
+
return val.is_a?(Array) ? val.join(", ") : val
|
51
|
+
end
|
52
|
+
end
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
def resource
|
57
|
+
@resource = Valkyrie::MetadataAdapter.find(:index_solr).query_service.find_by(id: id)
|
58
|
+
end
|
59
|
+
|
60
|
+
### DDRevo: Not sure if / where this is used
|
61
|
+
def to_partial_path
|
62
|
+
'document'
|
63
|
+
end
|
64
|
+
|
65
|
+
### DDRevo: This is probably no longer needed
|
66
|
+
def safe_id
|
67
|
+
id.sub(/:/, "-")
|
68
|
+
end
|
69
|
+
|
70
|
+
### DDRevo: No longer relevant
|
71
|
+
# def object_profile
|
72
|
+
# @object_profile ||= get_json(Ddr::Index::Fields::OBJECT_PROFILE)
|
73
|
+
# end
|
74
|
+
|
75
|
+
### DDRevo: No longer relevant
|
76
|
+
# def object_state
|
77
|
+
# object_profile["objState"]
|
78
|
+
# end
|
79
|
+
|
80
|
+
def object_create_date
|
81
|
+
parse_date(self[Ddr::Index::Fields::RESOURCE_CREATE_DATE])
|
82
|
+
end
|
83
|
+
|
84
|
+
def object_modified_date
|
85
|
+
parse_date(self[Ddr::Index::Fields::RESOURCE_MODIFIED_DATE])
|
86
|
+
end
|
87
|
+
|
88
|
+
def last_fixity_check_on
|
89
|
+
get_date(Ddr::Index::Fields::LAST_FIXITY_CHECK_ON)
|
90
|
+
end
|
91
|
+
|
92
|
+
def last_virus_check_on
|
93
|
+
get_date(Ddr::Index::Fields::LAST_VIRUS_CHECK_ON)
|
94
|
+
end
|
95
|
+
|
96
|
+
### DDRevo: No longer relevant
|
97
|
+
# def datastreams
|
98
|
+
# object_profile["datastreams"]
|
99
|
+
# end
|
100
|
+
|
101
|
+
### DDRevo: No longer relevant
|
102
|
+
# def has_datastream?(dsID)
|
103
|
+
# datastreams[dsID].present?
|
104
|
+
# end
|
105
|
+
|
106
|
+
def has_admin_policy?
|
107
|
+
admin_policy_id.present?
|
108
|
+
end
|
109
|
+
|
110
|
+
def admin_policy
|
111
|
+
if has_admin_policy?
|
112
|
+
self.class.find(admin_policy_id)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def has_children?
|
117
|
+
resource.children.present?
|
118
|
+
end
|
119
|
+
|
120
|
+
### DDRevo: No longer relevant
|
121
|
+
# def label
|
122
|
+
# object_profile["objLabel"]
|
123
|
+
# end
|
124
|
+
|
125
|
+
def title_display
|
126
|
+
title
|
127
|
+
end
|
128
|
+
|
129
|
+
def identifier
|
130
|
+
# We want the multivalued version here
|
131
|
+
self[Solrizer.solr_name(:identifier, :stored_searchable, type: :text)]
|
132
|
+
end
|
133
|
+
|
134
|
+
def source
|
135
|
+
self[Solrizer.solr_name(:source, :stored_searchable, type: :text)]
|
136
|
+
end
|
137
|
+
|
138
|
+
def has_thumbnail?
|
139
|
+
resource.has_thumbnail?
|
140
|
+
end
|
141
|
+
|
142
|
+
def has_content?
|
143
|
+
resource.has_content?
|
144
|
+
end
|
145
|
+
|
146
|
+
def has_intermediate_file?
|
147
|
+
resource.has_intermediate_file?
|
148
|
+
end
|
149
|
+
|
150
|
+
def has_extracted_text?
|
151
|
+
resource.has_extracted_text?
|
152
|
+
end
|
153
|
+
|
154
|
+
### DDRevo: Not relevant as coded. Not sure if comparable functionality is needed
|
155
|
+
# def content_ds
|
156
|
+
# datastreams[Ddr::Datastreams::CONTENT]
|
157
|
+
# end
|
158
|
+
|
159
|
+
def content_mime_type
|
160
|
+
resource.content_type
|
161
|
+
end
|
162
|
+
# For duck-typing with Ddr::HasContent
|
163
|
+
alias_method :content_type, :content_mime_type
|
164
|
+
|
165
|
+
def content_human_size
|
166
|
+
resource.content_human_size
|
167
|
+
end
|
168
|
+
|
169
|
+
### DDRevo: Not relevant as coded. Not sure if comparable functionality is needed
|
170
|
+
# def content_checksum
|
171
|
+
# content_ds["dsChecksum"] rescue nil
|
172
|
+
# end
|
173
|
+
|
174
|
+
def targets
|
175
|
+
@targets ||= query_service.find_inverse_references_by(resource: resource, property: 'for_collection_id')
|
176
|
+
end
|
177
|
+
|
178
|
+
def targets_count
|
179
|
+
@targets_count = targets.count
|
180
|
+
end
|
181
|
+
|
182
|
+
def has_target?
|
183
|
+
targets_count > 0
|
184
|
+
end
|
185
|
+
|
186
|
+
### DDRevo Still relevant?
|
187
|
+
# def association(name)
|
188
|
+
# get_pid(ActiveFedora::SolrService.solr_name(name, :symbol))
|
189
|
+
# end
|
190
|
+
|
191
|
+
def controller_name
|
192
|
+
resource_model.tableize
|
193
|
+
end
|
194
|
+
|
195
|
+
def rights_statement
|
196
|
+
@rights_statement ||= RightsStatement.call(self)
|
197
|
+
end
|
198
|
+
|
199
|
+
def roles
|
200
|
+
# @roles ||= Ddr::Auth::Roles::Role.from_json(access_role)
|
201
|
+
@roles ||= resource.roles
|
202
|
+
end
|
203
|
+
|
204
|
+
def resource_roles
|
205
|
+
resource.resource_roles
|
206
|
+
end
|
207
|
+
|
208
|
+
def inherited_roles
|
209
|
+
resource.inherited_roles
|
210
|
+
end
|
211
|
+
|
212
|
+
def structure
|
213
|
+
JSON.parse(fetch(Ddr::Index::Fields::STRUCTURE))
|
214
|
+
rescue
|
215
|
+
nil
|
216
|
+
end
|
217
|
+
|
218
|
+
def effective_permissions(agents)
|
219
|
+
Ddr::Auth::EffectivePermissions.call(self, agents)
|
220
|
+
end
|
221
|
+
|
222
|
+
def research_help
|
223
|
+
research_help_contact = self[Ddr::Index::Fields::RESEARCH_HELP_CONTACT] || inherited_research_help_contact
|
224
|
+
Ddr::Contact.call(research_help_contact) if research_help_contact
|
225
|
+
end
|
226
|
+
|
227
|
+
def parent_id
|
228
|
+
is_part_of || is_member_of_collection
|
229
|
+
end
|
230
|
+
|
231
|
+
def has_parent?
|
232
|
+
parent_id.present?
|
233
|
+
end
|
234
|
+
|
235
|
+
def parent
|
236
|
+
if has_parent?
|
237
|
+
self.class.find(parent_id)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def multires_image_file_paths
|
242
|
+
if structure
|
243
|
+
structure_docs.map { |doc| doc.multires_image_file_path }.compact
|
244
|
+
else
|
245
|
+
[]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
# DRY HasAdminMetadata
|
250
|
+
def finding_aid
|
251
|
+
if ead_id
|
252
|
+
FindingAid.new(ead_id)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def intermediate_type
|
257
|
+
if has_intermediate_file?
|
258
|
+
resource.intermediate_type
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
def intermediate_path
|
263
|
+
if has_intermediate_file?
|
264
|
+
resource.intermediate_path
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def intermediate_extension
|
269
|
+
if has_intermediate_file?
|
270
|
+
extensions = Ddr.preferred_file_extensions
|
271
|
+
if extensions.include? intermediate_type
|
272
|
+
extensions[intermediate_type]
|
273
|
+
else
|
274
|
+
intermediate_extension_default
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def captionable?
|
280
|
+
resource.captionable?
|
281
|
+
end
|
282
|
+
|
283
|
+
def caption_type
|
284
|
+
if captionable?
|
285
|
+
resource.caption_type
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
def caption_extension
|
290
|
+
if captionable?
|
291
|
+
extensions = Ddr.preferred_file_extensions
|
292
|
+
if extensions.include? caption_type
|
293
|
+
extensions[caption_type]
|
294
|
+
else
|
295
|
+
caption_extension_default
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
def caption_path
|
301
|
+
if captionable?
|
302
|
+
resource.caption_path
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def streamable?
|
307
|
+
resource.streamable?
|
308
|
+
end
|
309
|
+
|
310
|
+
def streamable_media_extension
|
311
|
+
if streamable?
|
312
|
+
extensions = Ddr.preferred_file_extensions
|
313
|
+
if extensions.include? streamable_media_type
|
314
|
+
extensions[streamable_media_type]
|
315
|
+
else
|
316
|
+
streamable_media_extension_default
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
def streamable_media_type
|
322
|
+
if streamable?
|
323
|
+
resource.streamable_media_type
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def streamable_media_path
|
328
|
+
if streamable?
|
329
|
+
resource.streamable_media_path
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def thumbnail_path
|
334
|
+
if has_thumbnail?
|
335
|
+
resource.thumbnail_path
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
# FIXME - Probably need a more general solution mapping object reader methods to index field names.
|
340
|
+
def rights
|
341
|
+
self["rights_tesim"]
|
342
|
+
end
|
343
|
+
|
344
|
+
def children
|
345
|
+
resource.children
|
346
|
+
end
|
347
|
+
|
348
|
+
private
|
349
|
+
|
350
|
+
def query_service
|
351
|
+
@query_service ||= Valkyrie::MetadataAdapter.find(:index_solr).query_service
|
352
|
+
end
|
353
|
+
|
354
|
+
# def targets_query
|
355
|
+
# "#{Ddr::Index::Fields::IS_EXTERNAL_TARGET_FOR}:#{internal_uri_for_query}"
|
356
|
+
# end
|
357
|
+
#
|
358
|
+
# def internal_uri_for_query
|
359
|
+
# ActiveFedora::SolrService.escape_uri_for_query(internal_uri)
|
360
|
+
# end
|
361
|
+
#
|
362
|
+
def get_date(field)
|
363
|
+
parse_date(self[field])
|
364
|
+
end
|
365
|
+
|
366
|
+
def get_json(field)
|
367
|
+
JSON.parse Array(self[field]).first
|
368
|
+
end
|
369
|
+
|
370
|
+
def parse_date(date)
|
371
|
+
Time.parse(date).localtime if date
|
372
|
+
end
|
373
|
+
|
374
|
+
# def get_pid(field)
|
375
|
+
# ActiveFedora::Base.pid_from_uri(self[field]) rescue nil
|
376
|
+
# end
|
377
|
+
#
|
378
|
+
def inherited_research_help_contact
|
379
|
+
if doc = admin_policy
|
380
|
+
doc.research_help_contact
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
def structure_docs
|
385
|
+
structure_repo_ids.map { |repo_id| self.class.find(repo_id) }.compact
|
386
|
+
end
|
387
|
+
|
388
|
+
# For simplicity, initial implementation returns repo ID's only from top-level
|
389
|
+
# (i.e., not nested) contents. This is done since we have not clarified what
|
390
|
+
# an _ordered_ list of repo ID's should look like if structure contains nested
|
391
|
+
# contents.
|
392
|
+
def structure_repo_ids
|
393
|
+
default_struct_map['contents'].map { |content| content['contents'].map { |content| content['repo_id'] } }.flatten
|
394
|
+
end
|
395
|
+
|
396
|
+
def default_struct_map
|
397
|
+
structure['default'] || structure.values.first
|
398
|
+
end
|
399
|
+
|
400
|
+
def intermediate_extension_default
|
401
|
+
# datastreams[Ddr::Datastreams::INTERMEDIATE_FILE].default_file_extension
|
402
|
+
resource.intermediate_file.default_file_extension
|
403
|
+
end
|
404
|
+
|
405
|
+
def caption_extension_default
|
406
|
+
# datastreams[Ddr::Datastreams::CAPTION].default_file_extension
|
407
|
+
resource.caption.default_file_extension
|
408
|
+
end
|
409
|
+
|
410
|
+
def streamable_media_extension_default
|
411
|
+
# datastreams[Ddr::Datastreams::STREAMABLE_MEDIA].default_file_extension
|
412
|
+
resource.streamable_media.default_file_extension
|
413
|
+
end
|
414
|
+
|
415
|
+
### DDRevo: Using resource.children rather than this query
|
416
|
+
# def children_query
|
417
|
+
# case self[Ddr::Index::Fields::RESOURCE_MODEL]
|
418
|
+
# when 'Ddr::Collection'
|
419
|
+
# Ddr::Index::Query.build(self) do |parent|
|
420
|
+
# is_member_of_collection parent.id
|
421
|
+
# end
|
422
|
+
# when 'Ddr::Item'
|
423
|
+
# Ddr::Index::Query.build(self) do |parent|
|
424
|
+
# is_part_of parent.id
|
425
|
+
# end
|
426
|
+
# end
|
427
|
+
# end
|
428
|
+
end
|
429
|
+
end
|