Class: DcDocument

Inherits:
ActiveFedora::Base
  • Object
show all
Includes:
ActiveFedora::Associations, ActiveFedora::DatastreamCollections, ActiveFedora::FinderMethods::RepositoryMethods, Cul::Hydra::Models::Common
Defined in:
app/models/dc_document.rb

Class Method Summary collapse

Methods included from Cul::Hydra::Models::Common

#cmodel_pid, #datastreams_in_fedora, #get_representative_generic_resource, #get_singular_rel, #has_desc?, #initialize, #label=, #rdf_type, #rdf_types!, #route_as, #set_singular_rel, #set_size_labels, #thumbnail_info, #to_solr, #update_datastream_attributes

Class Method Details

.load_instance_from_solr(pid, solr_doc = nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/dc_document.rb', line 12

def self.load_instance_from_solr(pid,solr_doc=nil)
  if solr_doc.nil?
    result = find_by_solr(pid)
    raise "Object #{pid} not found in solr" if result.nil?
    solr_doc = result.hits.first
    #double check pid and id in record match
    raise "Object #{pid} not found in Solr" unless !result.nil? && !solr_doc.nil? && pid == solr_doc[SOLR_DOCUMENT_ID]
  else
    raise "Solr document record id and pid do not match" unless pid == solr_doc[SOLR_DOCUMENT_ID]
  end

  create_date = solr_doc[::ActiveFedora::SolrService.solr_name(:system_create, :date)].nil? ? solr_doc[::ActiveFedora::SolrService.solr_name(:system_create, :date).to_s] : solr_doc[::ActiveFedora::SolrService.solr_name(:system_create, :date)]
  modified_date = solr_doc[::ActiveFedora::SolrService.solr_name(:system_create, :date)].nil? ? solr_doc[::ActiveFedora::SolrService.solr_name(:system_modified, :date).to_s] : solr_doc[::ActiveFedora::SolrService.solr_name(:system_modified, :date)]
  obj = DcDocument.new({:pid=>solr_doc[SOLR_DOCUMENT_ID],:create_date=>create_date,:modified_date=>modified_date})
  obj.new_object = false
    #set by default to load any dependent relationship objects from solr as well
  obj.load_from_solr = true
    #need to call rels_ext once so it exists when iterating over datastreams
  obj.rels_ext
  obj.datastreams.each_value do |ds|
    if ds.respond_to?(:from_solr)
      ds.from_solr(solr_doc) if ds.kind_of?(::ActiveFedora::MetadataDatastream) || ds.kind_of?(::ActiveFedora::NokogiriDatastream) || ( ds.kind_of?(::ActiveFedora::RelsExtDatastream))
    end
  end
  obj
end