module ADIWG::Mdtranslator::Readers::Fgdc::Distribution

Public Class Methods

unpack(xDistribution, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_distribution.rb, line 21
def self.unpack(xDistribution, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new
   hDistribution = intMetadataClass.newDistribution
   hDistributor = intMetadataClass.newDistributor

   # distribution 6.1 (distrib) - distributor {contact} (required)
   # -> distribution.distributor.contact.responsibility(distributor)
   xContact = xDistribution.xpath('./distrib')
   unless xContact.empty?
      hResponsibility = Contact.unpack(xContact, hResponseObj)
      unless hResponsibility.nil?
         hResponsibility[:roleName] = 'distributor'
         hDistributor[:contact] = hResponsibility
      end
   end
   if xContact.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: distribution distributor is missing'
   end

   # distribution 6.2 (resdesc) - resource description
   # -> distribution.description
   description = xDistribution.xpath('./resdesc').text
   unless description.empty?
      hDistribution[:description] = description
   end

   # distribution 6.3 (distliab) - distribution liability (required)
   # -> distribution.liabilityStatement
   liability = xDistribution.xpath('./distliab').text
   unless liability.empty?
      hDistribution[:liabilityStatement] = liability
   end
   if liability.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: distribution liability is missing'
   end

   # distribution 6.6 (techpreq) - technical prerequisites
   # -> distribution.distributor[all].transferOption[all].distributionFormat[all].technicalPrerequisite
   # pass it down the line
   techPre = xDistribution.xpath('./techpreq').text

   # distribution 6.4 (stdorder) - standard order process []
   axOrders = xDistribution.xpath('./stdorder')
   unless axOrders.empty?
      axOrders.each do |xOrder|
         OrderProcess.unpack(xOrder, hDistributor, techPre, hResponseObj)
      end
   end

   # distribution 6.5 (custom) - custom order process
   # -> distribution.distributor.orderProcess.orderingInstructions
   custom = xDistribution.xpath('./custom').text
   unless custom.empty?
      hOrder = intMetadataClass.newOrderProcess
      hOrder[:orderingInstructions] = custom
      hDistributor[:orderProcess] << hOrder
   end

   # distribution 6.7 (availabl) - available time period {time period}
   # -> distribution.distributor.orderProcess.plannedAvailability
   xTimePeriod = xDistribution.xpath('./availabl')
   unless xTimePeriod.empty?
      hTimePeriod = TimePeriod.unpack(xTimePeriod, hResponseObj)
      unless hTimePeriod.nil?
         if hTimePeriod[:startDateTime].empty?
            hDateTime = hTimePeriod[:endDateTime]
         else
            hDateTime = hTimePeriod[:startDateTime]
         end
         hDistributor[:orderProcess].each do |hOrder|
            hOrder[:plannedAvailability] = hDateTime
         end
      end
   end

   hDistribution[:distributor] << hDistributor

   return hDistribution

end