Sha256: 9e58ae7013c5eff6c0de7f3cb3136670d087912b7dc2ab25557e3e225ee4a175

Contents?: true

Size: 1.99 KB

Versions: 17

Compression:

Stored size: 1.99 KB

Contents

require "active-fedora"
require "active_fedora_finders"
class GenericAggregator < ::ActiveFedora::Base
  include ::ActiveFedora::FinderMethods::RepositoryMethods
  include ::ActiveFedora::DatastreamCollections
  include Hydra::ModelMethods
  include Cul::Hydra::Models::Common
  include Cul::Hydra::Models::Aggregator

  has_many :parts, :property => :cul_member_of, :class_name=>'ActiveFedora::Base'

  def route_as
    "multipartitem"
  end

  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

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

  # set the index type label and any RI-based fields
  # overridde
  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

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

  def proxies
    datastreams['structMetadata'] ? datastreams['structMetadata'].proxies : []
  end
  def update_index
    super
    if has_struct_metadata?()
      conn = ActiveFedora::SolrService.instance.conn
      # delete by query proxyIn_ssi: internal_uri
      conn.delete_by_query("proxyIn_ssi:#{RSolr.escape(internal_uri())}")

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

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
cul_hydra-1.3.5 app/models/generic_aggregator.rb
cul_hydra-1.3.4 app/models/generic_aggregator.rb
cul_hydra-1.3.3 app/models/generic_aggregator.rb
cul_hydra-1.3.2 app/models/generic_aggregator.rb
cul_hydra-1.3.1 app/models/generic_aggregator.rb
cul_hydra-1.3.0 app/models/generic_aggregator.rb
cul_hydra-1.2.1 app/models/generic_aggregator.rb
cul_hydra-1.2.0 app/models/generic_aggregator.rb
cul_hydra-1.1.0 app/models/generic_aggregator.rb
cul_hydra-1.0.7 app/models/generic_aggregator.rb
cul_hydra-1.0.6 app/models/generic_aggregator.rb
cul_hydra-1.0.5 app/models/generic_aggregator.rb
cul_hydra-1.0.4 app/models/generic_aggregator.rb
cul_hydra-1.0.3 app/models/generic_aggregator.rb
cul_hydra-1.0.2 app/models/generic_aggregator.rb
cul_hydra-1.0.1 app/models/generic_aggregator.rb
cul_hydra-1.0.0 app/models/generic_aggregator.rb