Module: Cul::Hydra::Models::LinkableResources

Includes:
Fedora::UrlHelperBehavior
Defined in:
app/models/concerns/cul/hydra/models/linkable_resources.rb

Instance Method Summary collapse

Methods included from Fedora::UrlHelperBehavior

#fedora_ds_url, #fedora_method_url, #fedora_object_url, #fedora_risearch_url, #fedora_url, #pid_for_url

Instance Method Details

#audio_resource(document) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/models/concerns/cul/hydra/models/linkable_resources.rb', line 84

def audio_resource(document)
  res = basic_resource(document)
  base_id = document["id"]
  base_filename = base_id.gsub(/\:/,"")
  if res[:mime_type] =~ /wav/
    ext = 'wav'
  elsif res[:mime_type] =~ /mpeg/
    ext = 'mp3'
  else
    ext = 'bin'
  end
  filename = base_filename + "." + ext
  dc_filename = base_filename + "_dc.xml"
  res[:uri] = base_id
  res[:block] = "CONTENT"
  res[:filename] = filename
  res[:dc_path] = fedora_content_path(:download_method=>"show_pretty", :uri=>base_id, :block=>"DC", :filename=>dc_filename)
  res[:mime_type] = document["dc_format_ssm"] ? document["dc_format_ssm"].first : "application/octect-stream"
  res[:content_models] = document["has_model_ssim"]
  res[:file_size] = document["extent_ssim"].first.to_i
  res[:size] = (document["extent_ssim"].first.to_i / 1024).to_s + " Kb"
  res
end

#basic_resource(document) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'app/models/concerns/cul/hydra/models/linkable_resources.rb', line 49

def basic_resource(document)
  res = {}
  res[:pid] = document["id"]
  res[:dsid] = "CONTENT"
  res[:mime_type] = document["dc_format_ssm"] ? document["dc_format_ssm"].first : "application/octect-stream"
  res[:content_models] = document["has_model_ssim"]
  res[:file_size] = document["extent_ssim"].first.to_i
  res[:size] = (document["extent_ssim"].first.to_i / 1024).to_s + " Kb"
  res
end

#http_clientObject



9
10
11
12
13
14
15
16
17
18
# File 'app/models/concerns/cul/hydra/models/linkable_resources.rb', line 9

def http_client
  unless @http_client
    @http_client ||= HTTPClient.new
    @http_client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
    uname = Cul::Hydra::Fedora.repository.config[:user]
    pwd = Cul::Hydra::Fedora.repository.config[:password]
    @http_client.set_auth(nil, uname, pwd)
  end
  @http_client
end

#image_resource(document) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/models/concerns/cul/hydra/models/linkable_resources.rb', line 60

def image_resource(document)
  res = basic_resource(document)
  if document["image_width_ssim"]
    res[:dimensions] = document["image_width_ssim"].first + " x " + document["image_length_ssim"].first
    res[:width] = document["image_width_ssim"].first
    res[:height] = document["image_length_ssim"].first
  else
    res[:dimensions] = "? x ?"
    res[:width] = "0"
    res[:height] = "0"
  end
  base_id = document["id"]
  base_filename = base_id.gsub(/\:/,"")
  img_filename = base_filename + "." + document["dc_format_ssm"].first.gsub(/^[^\/]+\//,"")
  res[:filename] = img_filename
  res[:block] = "CONTENT"
  res[:mime_type] = document["dc_format_ssm"] ? document["dc_format_ssm"].first : "application/octect-stream"
  res[:content_models] = document["has_model_ssim"]
  res[:file_size] = document["extent_ssim"].first.to_i
  res[:size] = (document["extent_ssim"].first.to_i / 1024).to_s + " Kb"
  res[:uri] = base_id
  res
end

#linkable_resourcesObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/models/concerns/cul/hydra/models/linkable_resources.rb', line 20

def linkable_resources
  r = self.parts(:response_format => :solr)
  return [] if r.blank?
  members = r.collect {|hit|
    SolrDocument.new(hit)
  }
  members.delete_if { |sd| (sd[:has_model_ssim] & ["info:fedora/ldpd:Resource"]).blank? }
  case self.route_as
  when "zoomingimage"
    results = members.collect {|doc| image_resource(doc)}
    base_id = self.pid
    url = fedora_ds_url(base_id, 'SOURCE') + '/content'
    head_req = http_client().head(url)
    file_size = head_req.header["Content-Length"].first.to_i
    results << {
      :dimensions => "Original",
      :mime_type => "image/jp2",
      :uri=>base_id, :block=>"SOURCE", :filename=>base_id + "_source.jp2",
      :content_models=>[]}
  when "audio"
    results = members.collect {|doc| audio_resource(doc)}
  when "image"
    results = members.collect {|doc| image_resource(doc)}
  else
    raise "Unknown format #{self.route_as}"
  end
  return results
end