class ADIWG::Mdtranslator::Writers::Fgdc::Distribution
Public Class Methods
new(xml, hResponseObj)
click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb, line 21 def initialize(xml, hResponseObj) @xml = xml @hResponseObj = hResponseObj @NameSpace = ADIWG::Mdtranslator::Writers::Fgdc end
Public Instance Methods
writeXML(hDistribution)
click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_distribution.rb, line 27 def writeXML(hDistribution) # classes used intMetadataClass = InternalMetadata.new contactClass = Contact.new(@xml, @hResponseObj) orderClass = OrderProcess.new(@xml, @hResponseObj) timePeriodClass = TimePeriod.new(@xml, @hResponseObj) # in FGDC each distribution can have only one distributor # the passed in mdJson hDistribution may contain multiple distributors # therefore, create a separate FGDC distribution record for each distributor # and repeat the distribution information hDistribution[:distributor].each do |hDistributor| outContext = nil @xml.tag!('distinfo') do # distribution 6.1 (distrib) - distributor {contact} (required) # <- distribution.distributor.contact{}.responsibility.roleName = 'distributor' haveContact = false unless hDistributor.empty? unless hDistributor[:contact].empty? contactId = hDistributor[:contact][:parties][0][:contactId] hContact = ADIWG::Mdtranslator::Writers::Fgdc.get_contact(contactId) unless hContact.empty? @xml.tag!('distrib') do contactClass.writeXML(hContact) end outContext = 'distributor ' + hContact[:name] haveContact = true end end end unless haveContact @NameSpace.issueWarning(110,nil) end # distribution 6.2 (resdesc) - resource description # <- distribution.description unless hDistribution[:description].nil? @xml.tag!('resdesc', hDistribution[:description]) end if hDistribution[:description].nil? @xml.tag!('resdesc') end # distribution 6.3 (distliab) - liability (required) # <- distribution.liabilityStatement unless hDistribution[:liabilityStatement].nil? @xml.tag!('distliab', hDistribution[:liabilityStatement]) end if hDistribution[:liabilityStatement].nil? @NameSpace.issueWarning(111,'distliab') end # distribution 6.4 (stdorder) - standard order [] {standardOrder} # <- distribution.distributor.orderProcess # in FGDC transferOptions are children of orderProcess # pass the entire distribution object haveOrder = false unless hDistributor.empty? unless hDistributor[:orderProcess].empty? @xml.tag!('stdorder') do orderClass.writeXML(hDistributor, outContext) end haveOrder = true end end if !haveOrder && @hResponseObj[:writerShowTags] @xml.tag!('custom') end # distribution 6.5 (custom) - custom order process # <- where transferOptions[] is empty # <- distribution.distributor.orderProcess[0].orderingInstructions haveCustom = false unless hDistributor.empty? if hDistributor[:transferOptions].empty? unless hDistributor[:orderProcess].empty? unless hDistributor[:orderProcess][0].empty? unless hDistributor[:orderProcess][0][:orderingInstructions].nil? @xml.tag!('custom', hDistributor[:orderProcess][0][:orderingInstructions]) end end haveCustom = true end end end if !haveCustom && @hResponseObj[:writerShowTags] @xml.tag!('custom') end # distribution 6.6 (techpreq) - technical prerequisites # -> distribution.distributor[all].transferOption[all].distributionFormat[all].technicalPrerequisite # collect these and string unique together techPre = '' aTechPre = [] unless hDistributor.empty? hDistributor[:transferOptions].each do |hTransOpt| hTransOpt[:distributionFormats].each do |hFormat| unless hFormat[:technicalPrerequisite].nil? aTechPre << hFormat[:technicalPrerequisite] end end end end aTechPre = aTechPre.uniq aTechPre.each do |prereq| techPre += prereq + '; ' end techPre.chomp!('; ') unless techPre == '' @xml.tag!('techpreq', techPre) end if techPre == '' @xml.tag!('techpreq') end # distribution 6.7 (availabl) - available timePeriod {timePeriod} # <- distribution.distributor[0].orderProcess[0].plannedAvailability # for FGDC only the first orderProcess can be accepted haveTime = false unless hDistributor.empty? unless hDistributor[:orderProcess].empty? unless hDistributor[:orderProcess][0][:plannedAvailability].empty? hAvailDate = hDistributor[:orderProcess][0][:plannedAvailability] hTimePeriod = intMetadataClass.newTimePeriod hTimePeriod[:startDateTime] = hAvailDate @xml.tag!('availabl') do timePeriodClass.writeXML(hTimePeriod, nil) end haveTime = true end end end if !haveTime && @hResponseObj[:writerShowTags] @xml.tag!('availabl') end end end end