module ADIWG::Mdtranslator::Readers::Fgdc::OfflineOption

Public Class Methods

unpack(xOffline, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_offlineOption.rb, line 18
def self.unpack(xOffline, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new
   hOffline = intMetadataClass.newMedium
   aDensity = []
   aOfflines = []

   # distribution 6.4.2.2.2.1 (offmedia) - offline media (required)
   # -> distribution.distributor.offlineOption.mediumSpecification.title
   title = xOffline.xpath('./offmedia').text
   unless title.empty?
      hSpecification = intMetadataClass.newCitation
      hSpecification[:title] = title
      hOffline[:mediumSpecification] = hSpecification
   end
   if title.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: offline transfer media type is missing'
   end

   # distribution 6.4.2.2.2.2 (reccap) - recording capacity
   xCapacity = xOffline.xpath('./reccap')
   unless xCapacity.empty?

      # distribution 6.4.2.2.2.2.1 (recden) - recording density [] (required)
      # -> distribution.distributor.offlineOption.density
      axDensity = xCapacity.xpath('./recden')
      unless axDensity.empty?
         axDensity.each do |xDensity|
            density = xDensity.text
            unless density.empty?
               aDensity << density.to_i
            end
         end
      end
      if axDensity.empty?
         hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: offline transfer recording density is missing'
      end

      # distribution 6.4.2.2.2.2.2 (recdenu) - recording density units (required)
      # -> distribution.distributor.offlineOption.units
      units = xCapacity.xpath('./recdenu').text
      unless units.empty?
         hOffline[:units] = units
      end
      if units.empty?
         hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: offline transfer recording density units are missing'
      end

   end

   # distribution 6.4.2.2.2.3 (recfmt) - recording format [] (required)
   # -> distribution.distributor.offlineOption.mediumFormat
   axFormat = xOffline.xpath('./recfmt')
   unless axFormat.empty?
      axFormat.each do |xFormat|
         format = xFormat.text
         unless format.empty?
            hOffline[:mediumFormat] << format
         end
      end
   end
   if axFormat.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: offline transfer recording format is missing'
   end

   # distribution 6.4.2.2.2.4 (compat) - compatibility information
   # -> distribution.distributor.offlineOption.note
   note = xOffline.xpath('./compat').text
   unless note.empty?
      hOffline[:note] = note
   end

   # create an offline object for each density
   if aDensity.empty?
      aOfflines << hOffline
   else
      aDensity.each do |density|
         hClone = hOffline.clone
         hClone[:density] = density
         aOfflines << hClone
      end
   end

   return aOfflines

end