Class: GenericAggregator

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

Direct Known Subclasses

BagAggregator, Collection, Concept, ContentAggregator

Instance Method Summary collapse

Methods included from Cul::Hydra::Models::Aggregator

#add_member, #has_struct_metadata?, #member_ids, #members, #remove_member, #representative_image, #representative_image=, #solr_members, #thumbnail_info

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!, #set_singular_rel, #thumbnail_info, #update_datastream_attributes

Instance Method Details

#index_type_labelObject



15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/models/generic_aggregator.rb', line 15

def index_type_label
  riquery = Cul::Hydra::Models::MEMBER_ITQL.gsub(/%PID%/, self.pid)
  begin
    docs = Cul::Hydra::Fedora.repository.find_by_itql riquery, limit: 2, format: 'count/json'
    docs = JSON.parse(docs)['results']
    size = docs.first && docs.first['count'] && docs.first['count'].to_i
  rescue Exception=>e
    Rails.logger.warn("#{self.class.name} failed to find children with TQL: #{e.message}")
  end
  size ||= self.parts(response_format: :solr, limit: 2).size
  type_label_for(size)
end

#proxiesObject



51
52
53
# File 'app/models/generic_aggregator.rb', line 51

def proxies
  datastreams['structMetadata'] ? datastreams['structMetadata'].proxies : []
end

#route_asObject



11
12
13
# File 'app/models/generic_aggregator.rb', line 11

def route_as
  "multipartitem"
end

#set_size_labels(solr_doc = {}) ⇒ Object

set the index type label and any RI-based fields overridde



40
41
42
43
44
# File 'app/models/generic_aggregator.rb', line 40

def set_size_labels(solr_doc={})
  count = Cul::Hydra::RisearchMembers.get_direct_member_count(pid)
  solr_doc["index_type_label_ssi"] = [type_label_for(count)]
  solr_doc["cul_number_of_members_isi"] = count
end

#to_solr(solr_doc = Hash.new, opts = {}) ⇒ Object



46
47
48
49
# File 'app/models/generic_aggregator.rb', line 46

def to_solr(solr_doc = Hash.new, opts={})
  solr_doc = super(solr_doc, opts)
  solr_doc
end

#type_label_for(size = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'app/models/generic_aggregator.rb', line 28

def type_label_for(size=nil)
  if size == 0
    return "EMPTY"
  elsif size == 1
    return "SINGLE PART"
  else
    return "MULTIPART"
  end
end

#update_indexObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/generic_aggregator.rb', line 54

def update_index
  super
  if has_struct_metadata?()
    conn = ActiveFedora::SolrService.instance.conn
    # delete by query proxyIn_ssi: internal_uri
    
    if RSolr.respond_to?(:solr_escape)
      # Use newer escape method, assuming the app including the cul_hydra engine is using a newer version of RSolr
      conn.delete_by_query("proxyIn_ssi:#{RSolr.solr_escape(internal_uri())}")
    else
      # Older escape method can throw deprecation warnings
      conn.delete_by_query("proxyIn_ssi:#{RSolr.escape(internal_uri())}")
    end

    # reindex proxies
    proxy_docs = proxies().collect {|p| p.to_solr}
    conn.add(proxy_docs, params: {softCommit: true})
    conn.commit
  end
end