class ActiveFedora::Datastream

This class represents a Fedora datastream

def self.from_xml(tmpl, node)

Parameters:
  • node (Nokogiri::XML::Node) -- the "foxml:datastream" node from a FOXML file
  • tmpl (ActiveFedora::Datastream) -- the Datastream object that you are building
def self.from_xml(tmpl, node)
  tmpl.instance_variable_set(:@dirty, false)
  tmpl.controlGroup= node['CONTROL_GROUP']
  tmpl
end

def add_ds_location

def add_ds_location
  if self.controlGroup == 'E'
  end
end

def add_mime_type

def add_mime_type
  self.mimeType = 'text/xml' unless self.mimeType
end

def create

def create
  run_callbacks :create do
    repository.add_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
    reset_profile_attributes
    self
  end
end

def dirty?

Test whether this datastream been modified since it was last saved
def dirty?
  dirty || changed?
end

def initialize(digital_object, dsid, options={})

def initialize(digital_object, dsid, options={})
  ## When you use the versions feature of rubydora (0.5.x), you need to have a 3 argument constructor
  self.fields={}
  self.dirty = false
  super
end

def inspect

def inspect
  "#<#{self.class}:#{self.hash} @pid=\"#{digital_object ? pid : nil}\" @dsid=\"#{dsid}\" @controlGroup=\"#{controlGroup}\" @dirty=\"#{dirty}\" @mimeType=\"#{mimeType}\" >"
end

def new_object?

def new_object?
  new?
end

def profile_from_hash(profile_hash)

def profile_from_hash(profile_hash)
  profile_hash.each_pair do |key,value|
    profile[key] = value.to_s
  end
end

def save

def save
  run_callbacks :save do
    return create if new?
    repository.modify_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
    reset_profile_attributes
    #Datastream.new(digital_object, dsid)
    self
  end
end

def serialize!

serializes any changed data into the content field
def serialize!
end

def size

def size
  self.profile['dsSize']
end

def solrize_profile # :nodoc:

:nodoc:
def solrize_profile # :nodoc:
  profile_hash = {}
  profile.each_pair do |property,value|
    if property =~ /Date/
      value = Time.parse(value) unless value.is_a?(Time)
      value = value.xmlschema
    end
    profile_hash[property] = value
  end
  profile_hash
end

def to_param

invalid characters in a dsid.
urlescape escape dots, which are apparently
compatibility method for rails' url generators. This method will
def to_param
  dsid.gsub(/\./, '%2e')
end

def validate_content_present

def validate_content_present
  case controlGroup
  when 'X','M'
    @content.present?
  when 'E','R'
    dsLocation.present?
  else
    raise "Invalid control group: #{controlGroup.inspect}"
  end      
end