ddr-models 2.6.2 → 2.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/Gemfile +2 -3
- data/app/models/collection.rb +11 -3
- data/app/models/component.rb +54 -4
- data/app/models/item.rb +1 -2
- data/config/initializers/active_fedora_base.rb +8 -5
- data/config/initializers/rubydora_monkey_patch.rb +11 -0
- data/config/initializers/subscriptions.rb +16 -9
- data/config/locales/ddr-models.en.yml +3 -0
- data/ddr-models.gemspec +3 -2
- data/lib/ddr/actions/virus_check.rb +10 -16
- data/lib/ddr/auth.rb +0 -8
- data/lib/ddr/datastreams.rb +13 -2
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +9 -0
- data/lib/ddr/datastreams/content_datastream.rb +5 -0
- data/lib/ddr/datastreams/datastream_behavior.rb +60 -15
- data/lib/ddr/datastreams/delete_external_files.rb +29 -0
- data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +33 -33
- data/lib/ddr/datastreams/external_file_datastream.rb +69 -0
- data/lib/ddr/datastreams/fits_datastream.rb +15 -5
- data/lib/ddr/datastreams/intermediate_file_datastream.rb +5 -0
- data/lib/ddr/datastreams/metadata_datastream.rb +15 -17
- data/lib/ddr/datastreams/multires_image_datastream.rb +5 -0
- data/lib/ddr/derivatives.rb +1 -0
- data/lib/ddr/derivatives/ptif_generator.rb +5 -1
- data/lib/ddr/derivatives/update_derivatives.rb +23 -0
- data/lib/ddr/events/deletion_event.rb +5 -9
- data/lib/ddr/events/event.rb +7 -9
- data/lib/ddr/events/ingestion_event.rb +5 -9
- data/lib/ddr/events/update_event.rb +12 -5
- data/lib/ddr/index.rb +0 -1
- data/lib/ddr/index/csv_query_result.rb +10 -2
- data/lib/ddr/index/fields.rb +10 -9
- data/lib/ddr/index/filter.rb +1 -0
- data/lib/ddr/managers/derivatives_manager.rb +84 -98
- data/lib/ddr/managers/technical_metadata_manager.rb +20 -5
- data/lib/ddr/models.rb +24 -24
- data/lib/ddr/models/base.rb +98 -74
- data/lib/ddr/models/cache.rb +20 -0
- data/lib/ddr/models/engine.rb +4 -6
- data/lib/ddr/models/file_management.rb +57 -152
- data/lib/ddr/models/fixity_checkable.rb +0 -5
- data/lib/ddr/models/has_admin_metadata.rb +4 -2
- data/lib/ddr/models/has_children.rb +35 -1
- data/lib/ddr/models/has_content.rb +3 -33
- data/lib/ddr/models/has_intermediate_file.rb +18 -0
- data/lib/ddr/models/has_multires_image.rb +12 -15
- data/lib/ddr/models/has_struct_metadata.rb +2 -38
- data/lib/ddr/models/indexing.rb +160 -163
- data/lib/ddr/models/permanent_id.rb +26 -49
- data/lib/ddr/models/solr_document.rb +21 -19
- data/lib/ddr/models/structure.rb +168 -41
- data/lib/ddr/models/structures/agent.rb +49 -0
- data/lib/ddr/models/structures/div.rb +64 -0
- data/lib/ddr/models/structures/f_locat.rb +54 -0
- data/lib/ddr/models/structures/file.rb +52 -0
- data/lib/ddr/models/structures/file_grp.rb +35 -0
- data/lib/ddr/models/structures/file_sec.rb +22 -0
- data/lib/ddr/models/structures/fptr.rb +31 -0
- data/lib/ddr/models/structures/mets_hdr.rb +37 -0
- data/lib/ddr/models/structures/mptr.rb +49 -0
- data/lib/ddr/models/structures/struct_map.rb +40 -0
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/notifications.rb +10 -12
- data/lib/ddr/utils.rb +29 -16
- data/lib/ddr/vocab.rb +15 -17
- data/lib/ddr/vocab/asset.rb +29 -19
- data/lib/ddr/vocab/contact.rb +5 -7
- data/lib/ddr/vocab/display.rb +6 -8
- data/lib/ddr/vocab/duke_terms.rb +8 -10
- data/lib/ddr/vocab/rdf_vocabulary_parser.rb +37 -39
- data/lib/ddr/vocab/roles.rb +17 -19
- data/lib/ddr/vocab/vocabulary.rb +26 -26
- data/spec/datastreams/external_file_datastream_spec.rb +37 -0
- data/spec/derivatives/png_generator_spec.rb +21 -25
- data/spec/derivatives/ptif_generator_spec.rb +22 -26
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/db/schema.rb +23 -23
- data/spec/factories/structure_factories.rb +8 -2
- data/spec/fixtures/imageA.jpg +0 -0
- data/spec/fixtures/imageB.jpg +0 -0
- data/spec/index/csv_query_result_spec.rb +3 -3
- data/spec/index/fields_spec.rb +7 -6
- data/spec/managers/derivatives_manager_spec.rb +105 -112
- data/spec/managers/technical_metadata_manager_spec.rb +22 -18
- data/spec/models/active_fedora_base_spec.rb +0 -106
- data/spec/models/active_fedora_datastream_spec.rb +33 -2
- data/spec/models/attachment_spec.rb +0 -2
- data/spec/models/cache_spec.rb +32 -0
- data/spec/models/collection_spec.rb +43 -19
- data/spec/models/component_spec.rb +41 -51
- data/spec/models/descriptive_metadata_datastream_spec.rb +99 -87
- data/spec/models/events_spec.rb +50 -69
- data/spec/models/file_management_spec.rb +79 -187
- data/spec/models/has_children_spec.rb +54 -3
- data/spec/models/has_struct_metadata_spec.rb +32 -38
- data/spec/models/indexing_spec.rb +11 -6
- data/spec/models/item_spec.rb +21 -7
- data/spec/models/permanent_id_spec.rb +1 -5
- data/spec/models/solr_document_spec.rb +13 -41
- data/spec/models/structure_spec.rb +85 -16
- data/spec/models/structures/agent_spec.rb +30 -0
- data/spec/models/structures/div_spec.rb +26 -0
- data/spec/models/structures/f_locat_spec.rb +78 -0
- data/spec/models/structures/file_grp_spec.rb +23 -0
- data/spec/models/structures/file_sec_spec.rb +22 -0
- data/spec/models/structures/file_spec.rb +60 -0
- data/spec/models/structures/fptr_spec.rb +23 -0
- data/spec/models/structures/mets_hdr_spec.rb +26 -0
- data/spec/models/structures/mptr_spec.rb +25 -0
- data/spec/models/structures/struct_map_spec.rb +24 -0
- data/spec/models/target_spec.rb +0 -2
- data/spec/spec_helper.rb +4 -9
- data/spec/support/shared_examples_for_ddr_models.rb +96 -156
- data/spec/support/shared_examples_for_has_content.rb +56 -30
- data/spec/support/shared_examples_for_has_intermediate_spec.rb +28 -0
- data/spec/support/shared_examples_for_non_collection_models.rb +5 -0
- data/spec/support/structural_metadata_helper.rb +230 -59
- data/spec/utils_spec.rb +0 -2
- metadata +86 -44
- data/app/helpers/models_helper.rb +0 -10
- data/lib/ddr/auth/legacy/abstract_legacy_permissions.rb +0 -17
- data/lib/ddr/auth/legacy/legacy_authorization.rb +0 -44
- data/lib/ddr/auth/legacy/legacy_default_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_roles.rb +0 -25
- data/lib/ddr/index/legacy_license_fields.rb +0 -12
- data/lib/ddr/jobs.rb +0 -12
- data/lib/ddr/jobs/fits_file_characterization.rb +0 -13
- data/lib/ddr/jobs/fixity_check.rb +0 -13
- data/lib/ddr/jobs/job.rb +0 -36
- data/lib/ddr/jobs/queue.rb +0 -27
- data/lib/ddr/jobs/update_index.rb +0 -13
- data/lib/ddr/models/access_controllable.rb +0 -24
- data/lib/ddr/models/struct_div.rb +0 -63
- data/spec/auth/legacy_default_permissions_spec.rb +0 -37
- data/spec/auth/legacy_permissions_spec.rb +0 -37
- data/spec/helpers/models_helper_spec.rb +0 -11
- data/spec/jobs/fits_file_characterization_spec.rb +0 -16
- data/spec/jobs/fixity_check_spec.rb +0 -22
- data/spec/jobs/job_spec.rb +0 -40
- data/spec/jobs/update_index_spec.rb +0 -22
- data/spec/models/struct_div_spec.rb +0 -70
- data/spec/support/shared_examples_for_access_controllables.rb +0 -6
@@ -2,11 +2,6 @@ module Ddr
|
|
2
2
|
module Models
|
3
3
|
module FixityCheckable
|
4
4
|
|
5
|
-
def datastreams_to_validate
|
6
|
-
datastreams.select { |dsid, ds| ds.has_content? }
|
7
|
-
end
|
8
|
-
alias_method :attached_files_having_content, :datastreams_to_validate
|
9
|
-
|
10
5
|
def fixity_checks
|
11
6
|
Ddr::Events::FixityCheckEvent.for_object(self)
|
12
7
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "resque"
|
2
|
-
|
3
1
|
module Ddr::Models
|
4
2
|
module HasAdminMetadata
|
5
3
|
extend ActiveSupport::Concern
|
@@ -23,9 +21,13 @@ module Ddr::Models
|
|
23
21
|
:aspace_id,
|
24
22
|
:is_locked,
|
25
23
|
:doi,
|
24
|
+
:ingested_by,
|
25
|
+
:ingestion_date,
|
26
26
|
datastream: "adminMetadata",
|
27
27
|
multiple: false
|
28
28
|
|
29
|
+
has_attributes :rights_note, datastream: "adminMetadata", multiple: true
|
30
|
+
|
29
31
|
delegate :publish!, :unpublish!, :published?, :unpublished?,
|
30
32
|
to: :workflow
|
31
33
|
end
|
@@ -2,8 +2,42 @@ module Ddr
|
|
2
2
|
module Models
|
3
3
|
module HasChildren
|
4
4
|
|
5
|
+
DEFAULT_SORT = "#{Ddr::Index::Fields::LOCAL_ID} ASC, #{Ddr::Index::Fields::OBJECT_CREATE_DATE} ASC"
|
6
|
+
|
5
7
|
def first_child
|
6
|
-
ActiveFedora::
|
8
|
+
ActiveFedora::SolrService.lazy_reify_solr_results(sorted_children).first
|
9
|
+
end
|
10
|
+
|
11
|
+
def default_structure
|
12
|
+
if children.present?
|
13
|
+
build_default_structure
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def sorted_children
|
18
|
+
ActiveFedora::SolrService.query(association_query(:children), sort: DEFAULT_SORT, rows: 999999)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def build_default_structure
|
24
|
+
document = Ddr::Models::Structure.xml_template
|
25
|
+
structure = Ddr::Models::Structure.new(document)
|
26
|
+
metshdr = structure.add_metshdr
|
27
|
+
structure.add_agent(parent: metshdr, role: Ddr::Models::Structures::Agent::ROLE_CREATOR,
|
28
|
+
name: Ddr::Models::Structures::Agent::NAME_REPOSITORY_DEFAULT)
|
29
|
+
structmap = structure.add_structmap(type: Ddr::Models::Structure::TYPE_DEFAULT)
|
30
|
+
add_children(structure, structmap, sorted_children)
|
31
|
+
structure
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_children(structure, structmap, children)
|
35
|
+
count = 0
|
36
|
+
children.each do |child|
|
37
|
+
count += 1
|
38
|
+
div = structure.add_div(parent: structmap, order: count)
|
39
|
+
structure.add_mptr(parent: div, href: child[Ddr::Index::Fields::PERMANENT_ID])
|
40
|
+
end
|
7
41
|
end
|
8
42
|
|
9
43
|
end
|
@@ -3,22 +3,13 @@ module Ddr
|
|
3
3
|
module HasContent
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
MASTER_FILE_TYPES = [ "image/tiff" ]
|
7
|
-
|
8
|
-
def master_file?
|
9
|
-
if respond_to?(:file_use) && file_use.present?
|
10
|
-
file_use == Ddr::Models::HasStructMetadata::FILE_USE_MASTER
|
11
|
-
else
|
12
|
-
MASTER_FILE_TYPES.include?(content_type)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
6
|
included do
|
17
7
|
has_file_datastream \
|
18
8
|
name: Ddr::Datastreams::CONTENT,
|
9
|
+
type: Ddr::Datastreams::ContentDatastream,
|
19
10
|
versionable: true,
|
20
11
|
label: "Content file for this object",
|
21
|
-
control_group: "
|
12
|
+
control_group: "E"
|
22
13
|
|
23
14
|
has_file_datastream \
|
24
15
|
name: Ddr::Datastreams::EXTRACTED_TEXT,
|
@@ -30,7 +21,7 @@ module Ddr
|
|
30
21
|
has_metadata \
|
31
22
|
name: Ddr::Datastreams::FITS,
|
32
23
|
type: Ddr::Datastreams::FitsDatastream,
|
33
|
-
versionable:
|
24
|
+
versionable: false,
|
34
25
|
label: "FITS Output for content file",
|
35
26
|
control_group: "M"
|
36
27
|
|
@@ -38,18 +29,6 @@ module Ddr
|
|
38
29
|
|
39
30
|
include FileManagement
|
40
31
|
|
41
|
-
around_save :update_derivatives, if: :content_changed?
|
42
|
-
|
43
|
-
before_save if: :re_characterize? do
|
44
|
-
fits.delete
|
45
|
-
end
|
46
|
-
|
47
|
-
after_add_file do
|
48
|
-
if file_to_add.original_name && file_to_add.dsid == "content"
|
49
|
-
self.original_filename = file_to_add.original_name
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
32
|
delegate :validate_checksum!, to: :content
|
54
33
|
end
|
55
34
|
|
@@ -134,15 +113,6 @@ module Ddr
|
|
134
113
|
|
135
114
|
protected
|
136
115
|
|
137
|
-
def update_derivatives
|
138
|
-
yield
|
139
|
-
derivatives.update_derivatives(:later)
|
140
|
-
end
|
141
|
-
|
142
|
-
def re_characterize?
|
143
|
-
content_changed? && !fits.new?
|
144
|
-
end
|
145
|
-
|
146
116
|
def default_content_type
|
147
117
|
"application/octet-stream"
|
148
118
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Models
|
3
|
+
module HasIntermediateFile
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_file_datastream name: Ddr::Datastreams::INTERMEDIATE_FILE,
|
8
|
+
type: Ddr::Datastreams::IntermediateFileDatastream,
|
9
|
+
versionable: true,
|
10
|
+
label: "Intermediate file for this object",
|
11
|
+
control_group: "E"
|
12
|
+
|
13
|
+
include FileManagement
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,20 +1,17 @@
|
|
1
|
-
module Ddr
|
2
|
-
module
|
3
|
-
|
4
|
-
extend ActiveSupport::Concern
|
1
|
+
module Ddr::Models
|
2
|
+
module HasMultiresImage
|
3
|
+
extend ActiveSupport::Concern
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
def multires_image_file_path
|
15
|
-
URI.parse(datastreams[Ddr::Datastreams::MULTIRES_IMAGE].dsLocation).path if datastreams[Ddr::Datastreams::MULTIRES_IMAGE].dsLocation
|
16
|
-
end
|
5
|
+
included do
|
6
|
+
has_file_datastream name: Ddr::Datastreams::MULTIRES_IMAGE,
|
7
|
+
type: Ddr::Datastreams::MultiresImageDatastream,
|
8
|
+
label: "Multi-resolution image derivative for this object",
|
9
|
+
control_group: "E"
|
10
|
+
end
|
17
11
|
|
12
|
+
def multires_image_file_path
|
13
|
+
datastreams[Ddr::Datastreams::MULTIRES_IMAGE].file_path
|
18
14
|
end
|
15
|
+
|
19
16
|
end
|
20
17
|
end
|
@@ -17,44 +17,8 @@ module Ddr
|
|
17
17
|
@structure
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
|
22
|
-
children = find_children
|
23
|
-
children.each do |child|
|
24
|
-
add_to_struct_map(structure, child)
|
25
|
-
end
|
26
|
-
structure
|
27
|
-
end
|
28
|
-
|
29
|
-
def multires_image_file_paths(type='default')
|
30
|
-
::SolrDocument.find(pid).multires_image_file_paths(type)
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def find_children
|
36
|
-
query = association_query(:children)
|
37
|
-
sort = "#{Ddr::Index::Fields::LOCAL_ID} ASC, #{Ddr::Index::Fields::OBJECT_CREATE_DATE} ASC"
|
38
|
-
ActiveFedora::SolrService.query(query, sort: sort, rows: 999999)
|
39
|
-
end
|
40
|
-
|
41
|
-
def add_to_struct_map(stru, child)
|
42
|
-
div = create_div(stru)
|
43
|
-
create_fptr(stru, div, child['id'])
|
44
|
-
end
|
45
|
-
|
46
|
-
def create_div(stru)
|
47
|
-
div_count = stru.structMap_node('default').xpath('xmlns:div').size
|
48
|
-
div = Nokogiri::XML::Node.new('div', stru.as_xml_document)
|
49
|
-
div['ORDER'] = div_count + 1
|
50
|
-
stru.structMap_node('default').add_child(div)
|
51
|
-
div
|
52
|
-
end
|
53
|
-
|
54
|
-
def create_fptr(stru, div, pid)
|
55
|
-
fptr = Nokogiri::XML::Node.new('fptr', stru.as_xml_document)
|
56
|
-
fptr['CONTENTIDS'] = "info:fedora/#{pid}"
|
57
|
-
div.add_child(fptr)
|
20
|
+
def multires_image_file_paths
|
21
|
+
::SolrDocument.find(pid).multires_image_file_paths
|
58
22
|
end
|
59
23
|
|
60
24
|
end
|
data/lib/ddr/models/indexing.rb
CHANGED
@@ -1,186 +1,183 @@
|
|
1
1
|
require 'time'
|
2
2
|
|
3
|
-
module Ddr
|
4
|
-
module
|
5
|
-
module Indexing
|
3
|
+
module Ddr::Models
|
4
|
+
module Indexing
|
6
5
|
|
7
|
-
|
6
|
+
include Ddr::Index::Fields
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def self.const_missing(name)
|
9
|
+
Ddr::Index::Fields.const_missing(name)
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
def to_solr(solr_doc=Hash.new, opts={})
|
13
|
+
solr_doc = super(solr_doc, opts)
|
14
|
+
solr_doc.merge index_fields
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
if
|
88
|
-
last_virus_check = virus_checks.last
|
89
|
-
fields.merge!(last_virus_check.to_solr) if last_virus_check
|
90
|
-
end
|
91
|
-
if has_content?
|
92
|
-
fields[CONTENT_CREATE_DATE] = Ddr::Utils.solr_date(content.createDate)
|
93
|
-
fields[CONTENT_CONTROL_GROUP] = content.controlGroup
|
94
|
-
fields[CONTENT_SIZE] = content_size
|
95
|
-
fields[CONTENT_SIZE_HUMAN] = content_human_size
|
96
|
-
fields[MEDIA_TYPE] = content_type
|
97
|
-
fields[MEDIA_MAJOR_TYPE] = content_major_type
|
98
|
-
fields[MEDIA_SUB_TYPE] = content_sub_type
|
99
|
-
fields.merge! techmd.index_fields
|
100
|
-
end
|
101
|
-
if has_multires_image?
|
102
|
-
fields[MULTIRES_IMAGE_FILE_PATH] = multires_image_file_path
|
103
|
-
end
|
104
|
-
if has_struct_metadata?
|
105
|
-
fields[STRUCT_MAPS] = structure.struct_maps.to_json
|
106
|
-
end
|
107
|
-
if has_extracted_text?
|
108
|
-
fields[EXTRACTED_TEXT] = extractedText.content
|
109
|
-
end
|
110
|
-
if is_a? Component
|
111
|
-
fields[COLLECTION_URI] = collection_uri
|
112
|
-
end
|
113
|
-
if is_a? Collection
|
114
|
-
fields[DEFAULT_LICENSE_DESCRIPTION] = defaultRights.license.description.first
|
115
|
-
fields[DEFAULT_LICENSE_TITLE] = defaultRights.license.title.first
|
116
|
-
fields[DEFAULT_LICENSE_URL] = defaultRights.license.url.first
|
117
|
-
fields[ADMIN_SET_FACET] = admin_set_facet
|
118
|
-
fields[COLLECTION_FACET] = collection_facet
|
119
|
-
end
|
120
|
-
if is_a? Item
|
121
|
-
fields[ADMIN_SET_FACET] = admin_set_facet
|
122
|
-
fields[COLLECTION_FACET] = collection_facet
|
123
|
-
fields[ALL_TEXT] = all_text
|
124
|
-
end
|
125
|
-
fields
|
17
|
+
def index_fields
|
18
|
+
fields = {
|
19
|
+
ACCESS_ROLE => roles.to_json,
|
20
|
+
ADMIN_SET => admin_set,
|
21
|
+
ADMIN_SET_TITLE => admin_set_title,
|
22
|
+
ARRANGER_FACET => desc_metadata_values('arranger'),
|
23
|
+
ASPACE_ID => aspace_id,
|
24
|
+
ATTACHED_FILES_HAVING_CONTENT => attached_files_having_content.keys,
|
25
|
+
BOX_NUMBER_FACET => desc_metadata_values('box_number'),
|
26
|
+
CATEGORY_FACET => desc_metadata_values('category'),
|
27
|
+
COLLECTION_TITLE => collection_title,
|
28
|
+
COMPANY_FACET => desc_metadata_values('company'),
|
29
|
+
COMPOSER_FACET => desc_metadata_values('composer'),
|
30
|
+
CONTRIBUTOR_FACET => contributor,
|
31
|
+
CREATOR_FACET => creator,
|
32
|
+
DATE_FACET => date,
|
33
|
+
DATE_SORT => date_sort,
|
34
|
+
DC_IS_PART_OF => desc_metadata_values('isPartOf'),
|
35
|
+
DEPOSITOR => depositor,
|
36
|
+
DISPLAY_FORMAT => display_format,
|
37
|
+
DOI => adminMetadata.doi,
|
38
|
+
EAD_ID => ead_id,
|
39
|
+
ENGRAVER_FACET => desc_metadata_values('engraver'),
|
40
|
+
FOLDER_FACET => desc_metadata_values('folder'),
|
41
|
+
FORMAT_FACET => format,
|
42
|
+
GENRE_FACET => desc_metadata_values('genre'),
|
43
|
+
IDENTIFIER_ALL => all_identifiers,
|
44
|
+
ILLUSTRATED_FACET => desc_metadata_values('illustrated'),
|
45
|
+
ILLUSTRATOR_FACET => desc_metadata_values('illustrator'),
|
46
|
+
INGESTED_BY => ingested_by,
|
47
|
+
INGESTION_DATE => ingestion_date,
|
48
|
+
INSTRUMENTATION_FACET => desc_metadata_values('instrumentation'),
|
49
|
+
INTERNAL_URI => internal_uri,
|
50
|
+
INTERVIEWER_NAME_FACET => desc_metadata_values('interviewer_name'),
|
51
|
+
IS_FORMAT_OF => desc_metadata_values('isFormatOf'),
|
52
|
+
IS_LOCKED => is_locked,
|
53
|
+
LICENSE => license,
|
54
|
+
LITHOGRAPHER_FACET => desc_metadata_values('lithographer'),
|
55
|
+
LOCAL_ID => local_id,
|
56
|
+
LYRICIST_FACET => desc_metadata_values('lyricist'),
|
57
|
+
MEDIUM_FACET => desc_metadata_values('medium'),
|
58
|
+
PERFORMER_FACET => desc_metadata_values('performer'),
|
59
|
+
PERMANENT_ID => permanent_id,
|
60
|
+
PERMANENT_URL => permanent_url,
|
61
|
+
PLACEMENT_COMPANY_FACET => desc_metadata_values('placement_company'),
|
62
|
+
POLICY_ROLE => roles.in_policy_scope.agents,
|
63
|
+
PRODUCER_FACET => desc_metadata_values('producer'),
|
64
|
+
PRODUCT_FACET => desc_metadata_values('product'),
|
65
|
+
PUBLICATION_FACET => desc_metadata_values('publication'),
|
66
|
+
PUBLISHER_FACET => publisher,
|
67
|
+
RESEARCH_HELP_CONTACT => research_help_contact,
|
68
|
+
RESOURCE_ROLE => roles.in_resource_scope.agents,
|
69
|
+
RIGHTS_NOTE => rights_note,
|
70
|
+
ROLL_NUMBER_FACET => desc_metadata_values('roll_number'),
|
71
|
+
SERIES_FACET => desc_metadata_values('series'),
|
72
|
+
SETTING_FACET => desc_metadata_values('setting'),
|
73
|
+
SPATIAL_FACET => desc_metadata_values('spatial'),
|
74
|
+
SUBJECT_FACET => subject,
|
75
|
+
SUBSERIES_FACET => desc_metadata_values('subseries'),
|
76
|
+
TEMPORAL_FACET => desc_metadata_values('temporal'),
|
77
|
+
TITLE => title_display,
|
78
|
+
TONE_FACET => desc_metadata_values('tone'),
|
79
|
+
TYPE_FACET => type,
|
80
|
+
VOLUME_FACET => desc_metadata_values('volume'),
|
81
|
+
WORKFLOW_STATE => workflow_state,
|
82
|
+
YEAR_FACET => year_facet,
|
83
|
+
}
|
84
|
+
if respond_to? :fixity_checks
|
85
|
+
last_fixity_check = fixity_checks.last
|
86
|
+
fields.merge!(last_fixity_check.to_solr) if last_fixity_check
|
126
87
|
end
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
return identifier.first if identifier.present?
|
131
|
-
return original_filename if respond_to?(:original_filename) && original_filename.present?
|
132
|
-
"[#{pid}]"
|
88
|
+
if respond_to? :virus_checks
|
89
|
+
last_virus_check = virus_checks.last
|
90
|
+
fields.merge!(last_virus_check.to_solr) if last_virus_check
|
133
91
|
end
|
134
|
-
|
135
|
-
|
136
|
-
|
92
|
+
if has_content?
|
93
|
+
fields[CONTENT_CREATE_DATE] = Ddr::Utils.solr_date(content.createDate)
|
94
|
+
fields[CONTENT_CONTROL_GROUP] = content.controlGroup
|
95
|
+
fields[CONTENT_SIZE] = content_size
|
96
|
+
fields[CONTENT_SIZE_HUMAN] = content_human_size
|
97
|
+
fields[MEDIA_TYPE] = content_type
|
98
|
+
fields[MEDIA_MAJOR_TYPE] = content_major_type
|
99
|
+
fields[MEDIA_SUB_TYPE] = content_sub_type
|
100
|
+
fields.merge! techmd.index_fields
|
137
101
|
end
|
138
|
-
|
139
|
-
|
140
|
-
# XXX Can/should we use SolrDocument here?
|
141
|
-
# I.e., ::SolrDocument.find(admin_policy_id)
|
142
|
-
admin_policy
|
102
|
+
if has_multires_image?
|
103
|
+
fields[MULTIRES_IMAGE_FILE_PATH] = multires_image_file_path
|
143
104
|
end
|
144
|
-
|
145
|
-
|
146
|
-
if admin_set.present?
|
147
|
-
admin_set
|
148
|
-
elsif associated_collection.present?
|
149
|
-
associated_collection.admin_set
|
150
|
-
end
|
105
|
+
if has_struct_metadata?
|
106
|
+
fields[STRUCTURE] = structure.dereferenced_structure.to_json
|
151
107
|
end
|
152
|
-
|
153
|
-
|
154
|
-
code = if admin_set.present?
|
155
|
-
admin_set
|
156
|
-
elsif associated_collection.present?
|
157
|
-
associated_collection.admin_set
|
158
|
-
end
|
159
|
-
if as = AdminSet.find_by_code(code)
|
160
|
-
as.title
|
161
|
-
end
|
108
|
+
if has_extracted_text?
|
109
|
+
fields[EXTRACTED_TEXT] = extractedText.content
|
162
110
|
end
|
163
|
-
|
164
|
-
|
165
|
-
|
111
|
+
if is_a? Component
|
112
|
+
fields[COLLECTION_URI] = collection_uri
|
113
|
+
end
|
114
|
+
if is_a? Collection
|
115
|
+
fields[ADMIN_SET_FACET] = admin_set_facet
|
116
|
+
fields[COLLECTION_FACET] = collection_facet
|
166
117
|
end
|
118
|
+
if is_a? Item
|
119
|
+
fields[ADMIN_SET_FACET] = admin_set_facet
|
120
|
+
fields[COLLECTION_FACET] = collection_facet
|
121
|
+
fields[ALL_TEXT] = all_text
|
122
|
+
end
|
123
|
+
fields
|
124
|
+
end
|
167
125
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
126
|
+
def title_display
|
127
|
+
return title.first if title.present?
|
128
|
+
return identifier.first if identifier.present?
|
129
|
+
return original_filename if respond_to?(:original_filename) && original_filename.present?
|
130
|
+
"[#{pid}]"
|
131
|
+
end
|
132
|
+
|
133
|
+
def all_identifiers
|
134
|
+
identifier + [local_id, permanent_id, pid].compact
|
135
|
+
end
|
136
|
+
|
137
|
+
def associated_collection
|
138
|
+
# XXX Can/should we use SolrDocument here?
|
139
|
+
# I.e., ::SolrDocument.find(admin_policy_id)
|
140
|
+
admin_policy
|
141
|
+
end
|
142
|
+
|
143
|
+
def admin_set_facet
|
144
|
+
if admin_set.present?
|
145
|
+
admin_set
|
146
|
+
elsif associated_collection.present?
|
147
|
+
associated_collection.admin_set
|
174
148
|
end
|
149
|
+
end
|
175
150
|
|
176
|
-
|
177
|
-
|
151
|
+
def admin_set_title
|
152
|
+
code = if admin_set.present?
|
153
|
+
admin_set
|
154
|
+
elsif associated_collection.present?
|
155
|
+
associated_collection.admin_set
|
156
|
+
end
|
157
|
+
if as = AdminSet.find_by_code(code)
|
158
|
+
as.title
|
178
159
|
end
|
160
|
+
end
|
179
161
|
|
180
|
-
|
181
|
-
|
162
|
+
def collection_facet
|
163
|
+
associated_collection.internal_uri if associated_collection.present?
|
164
|
+
end
|
165
|
+
|
166
|
+
def collection_title
|
167
|
+
if instance_of?(Collection)
|
168
|
+
title_display
|
169
|
+
elsif associated_collection.present?
|
170
|
+
associated_collection.title_display
|
182
171
|
end
|
172
|
+
end
|
183
173
|
|
174
|
+
def date_sort
|
175
|
+
date.first
|
184
176
|
end
|
177
|
+
|
178
|
+
def year_facet
|
179
|
+
YearFacet.call(self)
|
180
|
+
end
|
181
|
+
|
185
182
|
end
|
186
183
|
end
|