lib/ddr/models/has_struct_metadata.rb in ddr-models-2.11.0 vs lib/ddr/models/has_struct_metadata.rb in ddr-models-3.0.0.alpha.1
- old
+ new
@@ -2,21 +2,59 @@
module Models
module HasStructMetadata
extend ActiveSupport::Concern
included do
- has_file_datastream name: Ddr::Datastreams::STRUCT_METADATA,
- type: Ddr::Datastreams::StructuralMetadataDatastream
+ contains Ddr::Datastreams::STRUCT_METADATA, class_name: 'Ddr::Datastreams::StructuralMetadataDatastream'
end
def structure
- if datastreams[Ddr::Datastreams::STRUCT_METADATA].has_content?
- Ddr::Models::Structure.new(Nokogiri::XML(datastreams[Ddr::Datastreams::STRUCT_METADATA].content))
+ unless @structure
+ if datastreams[Ddr::Datastreams::STRUCT_METADATA].content
+ @structure = Ddr::Models::Structure.new(Nokogiri::XML(datastreams[Ddr::Datastreams::STRUCT_METADATA].content))
+ end
end
+ @structure
end
- def multires_image_file_paths
- ::SolrDocument.find(pid).multires_image_file_paths
+ def build_default_structure
+ structure = Ddr::Models::Structure.new(Ddr::Models::Structure.template)
+ children = find_children
+ children.each do |child|
+ add_to_struct_map(structure, child)
+ end
+ structure
+ end
+
+ def multires_image_file_paths(type='default')
+ ::SolrDocument.find(pid).multires_image_file_paths(type)
+ end
+
+ private
+
+ def find_children
+ query = association_query(:children)
+ sort = "#{Ddr::Index::Fields::LOCAL_ID} ASC, #{Ddr::Index::Fields::OBJECT_CREATE_DATE} ASC"
+ ActiveFedora::SolrService.query(query, sort: sort, rows: 999999)
+ end
+
+ def add_to_struct_map(stru, child)
+ div = create_div(stru)
+ create_fptr(stru, div, child['id'])
+ end
+
+ def create_div(stru)
+ div_count = stru.structMap_node('default').xpath('xmlns:div').size
+ div = Nokogiri::XML::Node.new('div', stru.as_xml_document)
+ div['ORDER'] = div_count + 1
+ stru.structMap_node('default').add_child(div)
+ div
+ end
+
+ def create_fptr(stru, div, pid)
+ fptr = Nokogiri::XML::Node.new('fptr', stru.as_xml_document)
+ fptr['CONTENTIDS'] = "info:fedora/#{pid}"
+ div.add_child(fptr)
end
end
end
end