Class: GenericResource

Inherits:
ActiveFedora::Base
  • Object
show all
Extended by:
ActiveModel::Callbacks
Includes:
ActiveFedora::DatastreamCollections, ActiveFedora::Finders, ActiveFedora::RelsInt, Cul::Scv::Fedora::UrlHelperBehavior, Cul::Scv::Hydra::Models::Common, Cul::Scv::Hydra::Models::ImageResource, Hydra::ModelMethods
Defined in:
app/models/generic_resource.rb

Constant Summary collapse

IMAGE_EXT =
{"image/bmp" => 'bmp', "image/gif" => 'gif', "image/jpeg" => 'jpg', "image/png" => 'png', "image/tiff" => 'tif', "image/x-windows-bmp" => 'bmp'}
WIDTH =
RDF::URI(ActiveFedora::Predicates.find_graph_predicate(:image_width))
LENGTH =
RDF::URI(ActiveFedora::Predicates.find_graph_predicate(:image_length))

Constants included from Cul::Scv::Hydra::Models::ImageResource

Cul::Scv::Hydra::Models::ImageResource::DJATOKA_BASE_URL, Cul::Scv::Hydra::Models::ImageResource::DJATOKA_THUMBNAIL_PARMS, Cul::Scv::Hydra::Models::ImageResource::EXTENT_PREDICATE, Cul::Scv::Hydra::Models::ImageResource::FORMAT_OF_PREDICATE, Cul::Scv::Hydra::Models::ImageResource::FORMAT_URI, Cul::Scv::Hydra::Models::ImageResource::LENGTH_PREDICATE, Cul::Scv::Hydra::Models::ImageResource::WIDTH_PREDICATE

Instance Method Summary collapse

Methods included from Cul::Scv::Fedora::UrlHelperBehavior

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

Methods included from Cul::Scv::Hydra::Models::ImageResource

#length, #long, #width

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

#cmodel_pid, #create, #datastreams_in_fedora, #has_desc?, #initialize, #rdf_type, #update_datastream_attributes

Instance Method Details

#assert_content_modelObject



25
26
27
28
# File 'app/models/generic_resource.rb', line 25

def assert_content_model
  super
  add_relationship(:rdf_type, Cul::Scv::Hydra::ActiveFedora::RESOURCE_TYPE.to_s)
end

#index_type_labelObject



34
35
36
# File 'app/models/generic_resource.rb', line 34

def index_type_label
  "FILE RESOURCE"
end

#linkable_resourcesObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'app/models/generic_resource.rb', line 86

def linkable_resources
  # let's start with the known DSIDs from lindquist, then work our way back to parsing the solrized relsint
  results = []
  if (rels = rels_int.instance_variable_get :@solr_hash)
    # this was loaded from solr
    rels.each do |dsuri, props|
      if dsuri =~ /\/content$/ or not props[FORMAT_OF_PREDICATE].blank?
        dsid =  dsuri.split('/')[-1]
        res = datastream_as_resource(dsid, props)
        results << res
      end
    end
  else
    content_uri = RDF::URI("info:fedora/#{self.pid}/content")
    dsuris = [content_uri]
    results = []
    # read the graph
    datastreams.each do |k, v|
      rels = rels_int.relationships(v, :format_of, content_uri)
      dsuris << rels[0].subject unless rels.blank?
    end

    dsuris.each do |dsuri|
      dsid = dsuri.to_s.split('/')[-1]
      width_rel = rels_int.relationships(dsuri, :exif_image_width)[0]
      length_rel = rels_int.relationships(dsuri, :exif_image_length)[0]
      extent_rel = rels_int.relationships(dsuri, :extent)[0]
      props = {EXTENT_PREDICATE => [], WIDTH_PREDICATE => [], LENGTH_PREDICATE => []}
      props[EXTENT_PREDICATE] << extent_rel.object.to_s unless extent_rel.blank?
      props[WIDTH_PREDICATE] << width_rel.object.to_s unless width_rel.blank?
      props[LENGTH_PREDICATE] << length_rel.object.to_s unless length_rel.blank?
      results << datastream_as_resource(dsid, props)
    end
  end
  results
end

#route_asObject



30
31
32
# File 'app/models/generic_resource.rb', line 30

def route_as
  self.zooming? ? "zoomingimage" : "resource"
end

#thumbnail_infoObject



46
47
48
49
50
51
52
53
54
# File 'app/models/generic_resource.rb', line 46

def thumbnail_info
  thumb = relsint.relationships(datastreams['content'],:foaf_thumb).first
  if thumb
    t_dsid = thumb.object.to_s.split('/')[-1]
    return {:url=>"#{ActiveFedora.fedora_config[:url]}/objects/#{pid}/datastreams/#{t_dsid}/content",:mime=>datastreams[t_dsid].mimeType}
  else
    return {:url=>image_url("cul_scv_hydra/crystal/file.png"),:mime=>'image/png'}
  end
end

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



38
39
40
41
42
43
44
# File 'app/models/generic_resource.rb', line 38

def to_solr(solr_doc = Hash.new, opts={})
  super
  unless solr_doc["extent_ssi"] || self.datastreams["content"].nil?
    solr_doc["extent_ssi"] = [self.datastreams["content"].size]
  end
  solr_doc
end

#zooming?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'app/models/generic_resource.rb', line 123

def zooming?
  !rels_int.relationships(datastreams['content'], :foaf_zooming).first.blank?
end