dor-services 5.1.0 → 5.1.1

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 (41) hide show
  1. checksums.yaml +13 -5
  2. data/config/dev_console_env.rb +45 -32
  3. data/lib/dor-services.rb +52 -49
  4. data/lib/dor/datastreams/administrative_metadata_ds.rb +2 -2
  5. data/lib/dor/datastreams/content_metadata_ds.rb +114 -144
  6. data/lib/dor/datastreams/default_object_rights_ds.rb +10 -12
  7. data/lib/dor/datastreams/desc_metadata_ds.rb +4 -4
  8. data/lib/dor/datastreams/events_ds.rb +8 -8
  9. data/lib/dor/datastreams/identity_metadata_ds.rb +40 -23
  10. data/lib/dor/datastreams/rights_metadata_ds.rb +109 -0
  11. data/lib/dor/datastreams/role_metadata_ds.rb +4 -4
  12. data/lib/dor/datastreams/simple_dublin_core_ds.rb +6 -6
  13. data/lib/dor/datastreams/version_metadata_ds.rb +29 -10
  14. data/lib/dor/models/admin_policy_object.rb +3 -3
  15. data/lib/dor/models/describable.rb +5 -4
  16. data/lib/dor/models/editable.rb +29 -33
  17. data/lib/dor/models/embargoable.rb +1 -12
  18. data/lib/dor/models/governable.rb +4 -27
  19. data/lib/dor/models/identifiable.rb +60 -58
  20. data/lib/dor/models/item.rb +5 -9
  21. data/lib/dor/models/presentable.rb +15 -2
  22. data/lib/dor/models/processable.rb +34 -30
  23. data/lib/dor/models/publishable.rb +5 -14
  24. data/lib/dor/models/{releasable.rb → releaseable.rb} +59 -15
  25. data/lib/dor/models/rightsable.rb +25 -0
  26. data/lib/dor/models/versionable.rb +6 -3
  27. data/lib/dor/models/workflow_object.rb +4 -4
  28. data/lib/dor/services/cleanup_reset_service.rb +1 -2
  29. data/lib/dor/services/cleanup_service.rb +1 -1
  30. data/lib/dor/services/registration_service.rb +0 -3
  31. data/lib/dor/services/sdr_ingest_service.rb +1 -1
  32. data/lib/dor/services/search_service.rb +1 -1
  33. data/lib/dor/utils/sdr_client.rb +23 -0
  34. data/lib/dor/version.rb +1 -1
  35. data/lib/dor/workflow/document.rb +23 -22
  36. data/lib/tasks/rdoc.rake +4 -4
  37. metadata +113 -96
  38. data/config/environments/development.rb +0 -84
  39. data/config/environments/development.rb.old +0 -84
  40. data/config/environments/test.rb +0 -84
  41. data/lib/tasks/dor.rake +0 -39
@@ -10,7 +10,7 @@ module Dor
10
10
  has_many :things, :property => :is_governed_by, :inbound => :true, :class_name => "ActiveFedora::Base"
11
11
  has_object_type 'adminPolicy'
12
12
  has_metadata :name => "administrativeMetadata", :type => Dor::AdministrativeMetadataDS, :label => 'Administrative Metadata'
13
- has_metadata :name => "roleMetadata", :type => Dor::RoleMetadataDS, :label => 'Role Metadata'
14
- has_metadata :name => "defaultObjectRights", :type => Dor::DefaultObjectRightsDS, :label => 'Default Object Rights'
13
+ has_metadata :name => "roleMetadata", :type => Dor::RoleMetadataDS, :label => 'Role Metadata'
14
+ has_metadata :name => "defaultObjectRights", :type => Dor::DefaultObjectRightsDS, :label => 'Default Object Rights'
15
15
  end
16
- end
16
+ end
@@ -125,8 +125,8 @@ module Dor
125
125
  collection_title = Dor::Describable.get_collection_title(collection_obj)
126
126
  related_item_node=Nokogiri::XML::Node.new('relatedItem',doc)
127
127
  related_item_node['type']='host'
128
- title_info_node=Nokogiri::XML::Node.new('titleInfo',doc)
129
- title_node=Nokogiri::XML::Node.new('title',doc)
128
+ title_info_node = Nokogiri::XML::Node.new('titleInfo',doc)
129
+ title_node = Nokogiri::XML::Node.new('title',doc)
130
130
  title_node.content=collection_title
131
131
 
132
132
  id_node=Nokogiri::XML::Node.new('identifier',doc)
@@ -185,7 +185,7 @@ module Dor
185
185
  title=node.text
186
186
  end
187
187
  creator_title=creator+title
188
- add_solr_value(solr_doc, 'creator_title', creator_title , :string, [:sortable])
188
+ add_solr_value(solr_doc, 'creator_title', creator_title , :string, [:stored_sortable])
189
189
  rescue CrosswalkError => e
190
190
  ActiveFedora.logger.warn "Cannot index #{self.pid}.descMetadata: #{e.message}"
191
191
  end
@@ -197,7 +197,8 @@ module Dor
197
197
  solr_doc[solr_key].push *vals unless (vals.nil? || vals.empty?)
198
198
  # asterisk to avoid multi-dimensional array: push values, not the array
199
199
  end
200
- solr_doc['sw_pub_date_sort_ssi'] = mods.pub_date_sort
200
+ solr_doc['sw_pub_date_sort_ssi' ] = mods.pub_date_sort # e.g. '0800'
201
+ solr_doc['sw_pub_date_facet_ssi'] = mods.pub_date_facet # e.g. '9th century'
201
202
  end
202
203
  # some fields get explicit "(none)" placeholder values, mostly for faceting
203
204
  %w[sw_language_tesim sw_genre_tesim sw_format_tesim].each { |key| solr_doc[key] = ['(none)'] if solr_doc[key].empty? }
@@ -1,22 +1,25 @@
1
- module Dor
1
+ module Dor
2
+
3
+ ## This is basically used just by APOs. Arguably "editable" is the wrong name.
2
4
  module Editable
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  included do
6
8
  belongs_to :agreement_object, :property => :referencesAgreement, :class_name => "Dor::Item"
7
9
  end
8
-
10
+
9
11
  def to_solr(solr_doc=Hash.new, *args)
10
12
  super(solr_doc, *args)
11
- add_solr_value(solr_doc, "default_rights", default_rights, :string, [:facetable])
12
- add_solr_value(solr_doc, "agreement", agreement, :string, [:facetable]) if agreement_object
13
+ add_solr_value(solr_doc, "default_rights", default_rights, :string, [:symbol])
14
+ add_solr_value(solr_doc, "agreement", agreement, :string, [:symbol]) if agreement_object
13
15
  solr_doc
14
16
  end
17
+
15
18
  #Adds a person or group to a role in the APO role metadata datastream
16
19
  #
17
- #@param role [String] the role the group or person will be filed under, ex. dor-apo-manager
20
+ #@param role [String] the role the group or person will be filed under, ex. dor-apo-manager
18
21
  #@param entity [String] the name of the person or group, ex dlss:developers or sunetid:someone
19
- #@param type [Symbol] :workgroup for a group or :person for a person
22
+ #@param type [Symbol] :workgroup for a group or :person for a person
20
23
  def add_roleplayer role, entity, type=:workgroup
21
24
  xml=self.roleMetadata.ng_xml
22
25
  group = type == :workgroup ? 'group' : 'person'
@@ -41,8 +44,9 @@ module Dor
41
44
  end
42
45
  self.roleMetadata.content=xml.to_s
43
46
  end
47
+
44
48
  #remove all people groups and roles from the APO role metadata datastream
45
- def purge_roles
49
+ def purge_roles
46
50
  self.roleMetadata.ng_xml.search('/roleMetadata/role').each do |node|
47
51
  node.remove
48
52
  end
@@ -56,10 +60,10 @@ module Dor
56
60
  end
57
61
  #get all collections listed for this APO, used during registration
58
62
  #@return [Array] array of pids
59
- def default_collections
63
+ def default_collections
60
64
  return administrativeMetadata.term_values(:registration, :default_collection)
61
65
  end
62
- #Add a collection to the listing of collections for items governed by this apo.
66
+ #Add a collection to the listing of collections for items governed by this apo.
63
67
  #@param val [String] pid of the collection, ex. druid:ab123cd4567
64
68
  def add_default_collection val
65
69
  xml = self.administrativeMetadata.ng_xml
@@ -73,7 +77,7 @@ module Dor
73
77
  reg.add_child(node)
74
78
  self.administrativeMetadata.content=xml.to_s
75
79
  end
76
-
80
+
77
81
  def remove_default_collection val
78
82
  xml = self.administrativeMetadata.ng_xml
79
83
  xml.search('//administrativeMetadata/registration/collection[@id=\''+val+'\']').remove
@@ -91,7 +95,7 @@ module Dor
91
95
  end
92
96
  roles
93
97
  end
94
- def metadata_source
98
+ def metadata_source
95
99
  self.administrativeMetadata.metadata_source.first
96
100
  end
97
101
  def metadata_source=(val)
@@ -131,23 +135,18 @@ module Dor
131
135
  self.defaultObjectRights.add_child_node(self.defaultObjectRights.ng_xml.root, :creative_commons)
132
136
  end
133
137
  self.defaultObjectRights.update_values({[:creative_commons_human] => val})
134
-
135
138
  end
136
139
  #@return [String] A description of the rights defined in the default object rights datastream. Can be 'Stanford', 'World', 'Dark' or 'None'
137
140
  def default_rights
138
141
  xml=self.defaultObjectRights.ng_xml
139
142
  if xml.search('//rightsMetadata/access[@type=\'read\']/machine/group').length == 1
140
143
  'Stanford'
144
+ elsif xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length ==1
145
+ 'World'
146
+ elsif xml.search('//rightsMetadata/access[@type=\'discover\']/machine/none').length == 1
147
+ 'Dark'
141
148
  else
142
- if xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length ==1
143
- 'World'
144
- else
145
- if xml.search('//rightsMetadata/access[@type=\'discover\']/machine/none').length == 1
146
- 'Dark'
147
- else
148
- 'None'
149
- end
150
- end
149
+ 'None'
151
150
  end
152
151
  end
153
152
  #Set the rights in default object rights
@@ -157,36 +156,33 @@ module Dor
157
156
  rights_xml = self.defaultObjectRights.ng_xml
158
157
  rights_xml.search('//rightsMetadata/access[@type=\'discover\']/machine').each do |node|
159
158
  node.children.remove
160
- if rights=='dark'
161
- world_node=Nokogiri::XML::Node.new('none',rights_xml)
162
- node.add_child(world_node)
163
- else
164
- world_node=Nokogiri::XML::Node.new('world',rights_xml)
165
- node.add_child(world_node)
166
- end
159
+ world_node=Nokogiri::XML::Node.new((rights=='dark' ? 'none' : 'world'),rights_xml)
160
+ node.add_child(world_node)
167
161
  end
168
162
  rights_xml.search('//rightsMetadata/access[@type=\'read\']').each do |node|
169
163
  node.children.remove
170
164
  machine_node=Nokogiri::XML::Node.new('machine',rights_xml)
171
- if(rights=='world')
165
+ if rights == 'world'
172
166
  world_node=Nokogiri::XML::Node.new(rights,rights_xml)
173
167
  node.add_child(machine_node)
174
168
  machine_node.add_child(world_node)
175
- elsif rights=='stanford'
169
+ elsif rights == 'stanford'
176
170
  world_node=Nokogiri::XML::Node.new(rights,rights_xml)
177
171
  node.add_child(machine_node)
178
172
  group_node=Nokogiri::XML::Node.new('group',rights_xml)
179
173
  group_node.content="Stanford"
180
174
  node.add_child(machine_node)
181
175
  machine_node.add_child(group_node)
182
- elsif rights=='none' || rights == 'dark'
176
+ elsif rights == 'none' || rights == 'dark'
183
177
  none_node=Nokogiri::XML::Node.new('none',rights_xml)
184
178
  node.add_child(machine_node)
185
179
  machine_node.add_child(none_node)
180
+ else
181
+ raise ArgumentError, "Unrecognized rights value '#{rights}'"
186
182
  end
187
183
  end
188
184
  end
189
-
185
+
190
186
  def desc_metadata_format
191
187
  self.administrativeMetadata.metadata_format.first
192
188
  end
@@ -220,7 +216,7 @@ module Dor
220
216
  wfs
221
217
  else
222
218
  []
223
- end
219
+ end
224
220
  end
225
221
  #set a single default workflow
226
222
  #@param wf [String] the name of the workflow, ex. 'digitizationWF'
@@ -39,17 +39,6 @@ module Dor
39
39
  datastreams['events'].add_event("embargo", release_agent, "Embargo released")
40
40
  end
41
41
 
42
- def world_doc
43
- builder = Nokogiri::XML::Builder.new do |xml|
44
- xml.access(:type => 'read') {
45
- xml.machine {
46
- xml.world
47
- }
48
- }
49
- end
50
- return builder.doc
51
- end
52
-
53
42
  def release_20_pct_vis_embargo(release_agent="unknown")
54
43
  # Set status to released
55
44
  embargo_md = datastreams['embargoMetadata']
@@ -73,7 +62,7 @@ module Dor
73
62
 
74
63
  def update_embargo(new_date)
75
64
  if embargoMetadata.status != 'embargoed'
76
- raise ArgumentError, 'You cannot change the embargo date of an item thant isnt embargoed.'
65
+ raise ArgumentError, 'You cannot change the embargo date of an item that is not embargoed.'
77
66
  end
78
67
  if new_date.past?
79
68
  raise ArgumentError, 'You cannot set the embargo date to a past date.'
@@ -1,6 +1,7 @@
1
1
  module Dor
2
2
  module Governable
3
3
  extend ActiveSupport::Concern
4
+ include Rightsable
4
5
 
5
6
  included do
6
7
  belongs_to :admin_policy_object, :property => :is_governed_by, :class_name => "Dor::AdminPolicyObject"
@@ -26,36 +27,11 @@ module Dor
26
27
  end
27
28
 
28
29
  def reset_to_apo_default()
29
- rights_metadata_ds = self.rightsMetadata
30
- rights_metadata_ds.content = admin_policy_object.rightsMetadata.ng_xml
30
+ self.rightsMetadata.content = admin_policy_object.rightsMetadata.ng_xml
31
31
  end
32
32
 
33
- # slight misnomer: also sets discover rights!
34
33
  def set_read_rights(rights)
35
- raise(ArgumentError, "Argument '#{rights}' is not a recognized value") unless ['world','stanford','none','dark'].include? rights
36
- rights_xml = self.rightsMetadata.ng_xml
37
- if (rights_xml.search('//rightsMetadata/access[@type=\'read\']').length==0)
38
- raise('The rights metadata stream doesnt contain an entry for machine read permissions. Consider populating it from the APO before trying to change it.')
39
- end
40
- label = rights=='dark' ? 'none' : 'world'
41
- rights_xml.search('//rightsMetadata/access[@type=\'discover\']/machine').each do |node|
42
- node.children.remove
43
- node.add_child Nokogiri::XML::Node.new(label,rights_xml)
44
- end
45
- rights_xml.search('//rightsMetadata/access[@type=\'read\']').each do |node|
46
- node.children.remove
47
- machine_node = Nokogiri::XML::Node.new('machine',rights_xml)
48
- node.add_child(machine_node)
49
- if rights == 'world'
50
- machine_node.add_child Nokogiri::XML::Node.new(rights,rights_xml)
51
- elsif rights == 'stanford'
52
- group_node = Nokogiri::XML::Node.new('group',rights_xml)
53
- group_node.content = "Stanford"
54
- machine_node.add_child(group_node)
55
- else # we know it is none or dark by the argument filter (first line)
56
- machine_node.add_child Nokogiri::XML::Node.new('none',rights_xml)
57
- end
58
- end
34
+ self.rightsMetadata.set_read_rights(rights)
59
35
  end
60
36
 
61
37
  def add_collection(collection_or_druid)
@@ -87,6 +63,7 @@ module Dor
87
63
  end
88
64
  def rights
89
65
  return nil unless self.respond_to? :rightsMetadata
66
+ return nil if self.rightsMetadata.nil?
90
67
  xml = self.rightsMetadata.ng_xml
91
68
  return nil if xml.search('//rightsMetadata').length != 1 # ORLY?
92
69
  if xml.search('//rightsMetadata/access[@type=\'read\']/machine/group').length == 1
@@ -53,73 +53,31 @@ module Dor
53
53
  end
54
54
  end
55
55
 
56
- ## Module-level variables, shared between ALL mixin includers!
56
+ ## Module-level variables, shared between ALL mixin includers (and ALL *their* includers/extenders)!
57
+ ## used for caching found values
57
58
  @@collection_hash={}
58
59
  @@apo_hash={}
59
- @@hydrus_apo_hash={}
60
- @@hydrus_collection_hash={}
61
60
 
62
61
  def to_solr(solr_doc=Hash.new, *args)
63
62
  self.assert_content_model
64
63
  super(solr_doc, *args)
64
+
65
65
  solr_doc[Dor::INDEX_VERSION_FIELD] = Dor::VERSION
66
- solr_doc['indexed_at_dtsi' ] = Time.now.utc.xmlschema
67
- solr_doc['indexed_day_dtsi'] = Time.now.beginning_of_day.utc.xmlschema # technically unnecessary, but convenient
66
+ solr_doc['indexed_at_dtsi'] = Time.now.utc.xmlschema
68
67
  datastreams.values.each do |ds|
69
- add_solr_value(solr_doc,'ds_specs',ds.datastream_spec_string,:string,[:displayable]) unless ds.new?
68
+ add_solr_value(solr_doc, 'ds_specs', ds.datastream_spec_string, :string, [:symbol]) unless ds.new?
70
69
  end
71
- add_solr_value(solr_doc, 'title_sort', self.label, :string, [:sortable])
72
- title_attrs = [:searchable, :facetable, :displayable]
70
+
71
+ add_solr_value(solr_doc, 'title_sort', self.label, :string, [:stored_sortable])
72
+
73
73
  rels_doc = Nokogiri::XML(self.datastreams['RELS-EXT'].content)
74
- apos=rels_doc.search('//rdf:RDF/rdf:Description/hydra:isGovernedBy','hydra' => 'http://projecthydra.org/ns/relations#', 'fedora' => 'info:fedora/fedora-system:def/relations-external#', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' )
75
- apos.each do |apo_node|
76
- druid = apo_node['rdf:resource']
77
- next unless druid # TODO: a warning about the bad APO would be nice
78
- druid=druid.gsub('info:fedora/','')
79
- # check cache first
80
- if @@apo_hash.has_key?(druid) || @@hydrus_apo_hash.has_key?(druid)
81
- add_solr_value(solr_doc, "hydrus_apo_title", @@hydrus_apo_hash[druid], :string, title_attrs) if @@hydrus_apo_hash.has_key? druid
82
- add_solr_value(solr_doc, "apo_title", @@apo_hash[druid] , :string, title_attrs) if @@apo_hash.has_key? druid
83
- else
84
- begin
85
- apo_object=Dor.find(druid)
86
- if apo_object.tags.include? 'Project : Hydrus'
87
- add_solr_value(solr_doc, "hydrus_apo_title", apo_object.label, :string, title_attrs)
88
- @@hydrus_apo_hash[druid]=apo_object.label
89
- else
90
- add_solr_value(solr_doc, "apo_title", apo_object.label, :string, title_attrs)
91
- @@apo_hash[druid]=apo_object.label
92
- end
93
- rescue
94
- add_solr_value(solr_doc, "apo_title", druid, :string, title_attrs)
95
- end
96
- end
97
- end
98
- collections=rels_doc.search('//rdf:RDF/rdf:Description/fedora:isMemberOfCollection','fedora' => 'info:fedora/fedora-system:def/relations-external#', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' )
99
- collections.each do |collection_node|
100
- druid=collection_node['rdf:resource']
101
- next unless druid ## TODO: warning here would also be useful
102
- druid=druid.gsub('info:fedora/','')
103
- if @@collection_hash.has_key?(druid) || @@hydrus_collection_hash.has_key?(druid)
104
- add_solr_value(solr_doc, "hydrus_collection_title", @@hydrus_collection_hash[druid], :string, title_attrs) if @@hydrus_collection_hash.has_key? druid
105
- add_solr_value(solr_doc, "collection_title", @@collection_hash[druid], :string, title_attrs) if @@collection_hash.has_key? druid
106
- else
107
- begin
108
- collection_object=Dor.find(druid)
109
- if collection_object.tags.include? 'Project : Hydrus'
110
- add_solr_value(solr_doc, "hydrus_collection_title", collection_object.label, :string, title_attrs)
111
- @@hydrus_collection_hash[druid]=collection_object.label
112
- else
113
- add_solr_value(solr_doc, "collection_title", collection_object.label, :string, title_attrs)
114
- @@collection_hash[druid]=collection_object.label
115
- end
116
- rescue
117
- add_solr_value(solr_doc, "collection_title", druid, :string, title_attrs)
118
- end
119
- end
120
- end
74
+ apos = rels_doc.search('//rdf:RDF/rdf:Description/hydra:isGovernedBy', 'hydra' => 'http://projecthydra.org/ns/relations#', 'fedora' => 'info:fedora/fedora-system:def/relations-external#', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')
75
+ collections = rels_doc.search('//rdf:RDF/rdf:Description/fedora:isMemberOfCollection', 'fedora' => 'info:fedora/fedora-system:def/relations-external#', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')
76
+ solrize_related_obj_titles(solr_doc, apos, @@apo_hash, "apo_title")
77
+ solrize_related_obj_titles(solr_doc, collections, @@collection_hash, "collection_title")
78
+
121
79
  solr_doc["metadata_source_ssi"] = self.identity_metadata_source
122
- solr_doc
80
+ return solr_doc
123
81
  end
124
82
 
125
83
  #@return [String] calculated value for Solr index
@@ -202,7 +160,7 @@ module Dor
202
160
 
203
161
  #Ensure that an administrative tag meets the proper mininum format
204
162
  #
205
- #@params tag_str [String] the tag
163
+ #@param tag_str [String] the tag
206
164
  #
207
165
  #@return [Array] the tag split into an array via ':'
208
166
  def validate_tag_format(tag_str)
@@ -220,7 +178,7 @@ module Dor
220
178
 
221
179
  #Add an administrative tag to an item, you will need to seperately save the item to write it to fedora
222
180
  #
223
- #param tag [string] The tag you wish to add
181
+ #@param tag [string] The tag you wish to add
224
182
  def add_tag(tag)
225
183
  identity_metadata_ds = self.identityMetadata
226
184
  normalized_tag = validate_and_normalize_tag(tag, identity_metadata_ds.tags)
@@ -237,6 +195,18 @@ module Dor
237
195
  end
238
196
  return removed
239
197
  end
198
+
199
+ #Removes all displayTypes from an item in preparation of adding a new display type
200
+ #
201
+ #@return Boolean True if displayTypes were removed, False if no displayTypes were removed
202
+ def remove_displayTypes
203
+ removed = false
204
+ self.identityMetadata.ng_xml.search('//displayType').each do |node|
205
+ node.remove
206
+ removed = true
207
+ end
208
+ return removed
209
+ end
240
210
 
241
211
  def update_tag(old_tag, new_tag)
242
212
  updated = false
@@ -248,5 +218,37 @@ module Dor
248
218
  end
249
219
  return updated
250
220
  end
221
+
222
+ def get_related_obj_display_title(related_obj, default_title)
223
+ if related_obj
224
+ if related_obj.datastreams["DC"] && related_obj.datastreams["DC"].title
225
+ return related_obj.datastreams["DC"].title
226
+ else
227
+ return related_obj.label
228
+ end
229
+ end
230
+
231
+ return default_title
232
+ end
233
+
234
+
235
+ private
236
+ def solrize_related_obj_titles(solr_doc, relationships, title_hash, field_name)
237
+ title_type = :symbol # we'll get an _ssim because of the type
238
+ title_attrs = [:stored_searchable] # we'll also get a _tesim from this attr
239
+ relationships.each do |rel_node|
240
+ rel_druid = rel_node['rdf:resource']
241
+ next unless rel_druid # TODO: warning here would also be useful
242
+ rel_druid = rel_druid.gsub('info:fedora/', '')
243
+ if title_hash.has_key?(rel_druid)
244
+ add_solr_value(solr_doc, field_name, title_hash[rel_druid], title_type, title_attrs)
245
+ else
246
+ related_obj = Dor.find(rel_druid)
247
+ related_obj_title = get_related_obj_display_title(related_obj, rel_druid)
248
+ add_solr_value(solr_doc, field_name, related_obj_title, title_type, title_attrs)
249
+ title_hash[rel_druid] = related_obj_title
250
+ end
251
+ end
252
+ end
251
253
  end
252
254
  end
@@ -1,23 +1,19 @@
1
1
  module Dor
2
2
  module BasicItem
3
3
  extend ActiveSupport::Concern
4
-
5
- include Identifiable
4
+
6
5
  include Processable
7
- include Governable
8
- include Describable
9
- include Publishable
10
6
  include Shelvable
11
- include Embargoable
7
+ include Embargoable # implies Publishable implies Identifiable, Describable, Governable, Rightsable ...
12
8
  include Preservable
13
9
  include Assembleable
14
10
  include Versionable
15
11
  include Contentable
16
12
  include Geoable
17
- include Releasable
18
-
13
+ include Releaseable
14
+
19
15
  end
20
-
16
+
21
17
  class Abstract < ::ActiveFedora::Base
22
18
  include Identifiable
23
19
  end