class ADIWG::Mdtranslator::Writers::Iso19115_2::CI_Citation

Public Class Methods

new(xml, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb, line 36
def initialize(xml, hResponseObj)
   @xml = xml
   @hResponseObj = hResponseObj
   @NameSpace = ADIWG::Mdtranslator::Writers::Iso19115_2
end

Public Instance Methods

writeXML(hCitation, inContext = nil) click to toggle source
# File lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb, line 42
def writeXML(hCitation, inContext = nil)

   # classes used
   codelistClass = MD_Codelist.new(@xml, @hResponseObj)
   rPartyClass = CI_ResponsibleParty.new(@xml, @hResponseObj)
   dateClass = CI_Date.new(@xml, @hResponseObj)
   idClass = MD_Identifier.new(@xml, @hResponseObj)
   seriesClass = CI_Series.new(@xml, @hResponseObj)

   outContext = 'citation'
   outContext = inContext + ' citation' unless inContext.nil?

   @xml.tag!('gmd:CI_Citation') do

      # citation - title (required)
      s = hCitation[:title]
      if s.nil?
         @NameSpace.issueWarning(30, 'gmd:title', inContext)
      else
         @xml.tag!('gmd:title') do
            @xml.tag!('gco:CharacterString', s)
         end
      end

      # citation - alternate title []
      aTitles = hCitation[:alternateTitles]
      aTitles.each do |title|
         @xml.tag!('gmd:alternateTitle') do
            @xml.tag!('gco:CharacterString', title)
         end
      end
      if aTitles.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:alternateTitle')
      end

      # citation - date [] (required)
      aDate = hCitation[:dates]
      aDate.each do |hDate|
         @xml.tag!('gmd:date') do
            dateClass.writeXML(hDate, outContext)
         end
      end
      if aDate.empty?
         @NameSpace.issueWarning(31, 'gmd:date', outContext)
      end

      # citation - edition
      s = hCitation[:edition]
      unless s.nil?
         @xml.tag!('gmd:edition') do
            @xml.tag!('gco:CharacterString', s)
         end
      end
      if s.nil? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:edition')
      end

      # citation - resource identifier []
      # process ISBN and ISSN as MD_identifier(s)
      # ... then also write separately in ISBN or ISSN tag
      isbn = ''
      issn = ''
      aIds = hCitation[:identifiers]
      aIds.each do |hIdentifier|
         unless hIdentifier[:namespace].nil?
            if hIdentifier[:namespace].downcase == 'isbn'
               isbn = hIdentifier[:identifier]
            elsif hIdentifier[:namespace].downcase == 'issn'
               issn = hIdentifier[:identifier]
            end
         end
         @xml.tag!('gmd:identifier') do
            idClass.writeXML(hIdentifier, outContext)
         end
      end
      if aIds.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:identifier')
      end

      # citation - cited responsible party [{CI_ResponsibleParty}]
      # responsibilities are grouped by role in the internal object
      # to output in ISO ...
      # create a separate record for each role-contact pair
      # check for duplicates and eliminate
      aRoleParty = []
      aRParties = hCitation[:responsibleParties]
      aRParties.each do |hRParty|
         role = hRParty[:roleName]
         aParties = hRParty[:parties]
         aParties.each do |hParty|
            aRoleParty << {role: role, hParty: hParty}
         end
      end
      aRoleParty.uniq!
      aRoleParty.each do |hRoleParty|
         @xml.tag!('gmd:citedResponsibleParty') do
            rPartyClass.writeXML(hRoleParty[:role], hRoleParty[:hParty], outContext)
         end
      end
      if aRoleParty.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:citedResponsibleParty')
      end

      # citation - presentation forms [{CI_PresentationFormCode}]
      aPresForms = hCitation[:presentationForms]
      aPresForms.each do |presForm|
         @xml.tag!('gmd:presentationForm') do
            codelistClass.writeXML('gmd', 'iso_presentationForm', presForm)
         end
      end
      if aPresForms.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:presentationForm')
      end

      # citation - series {CI_Series}
      hSeries = hCitation[:series]
      unless hSeries.empty?
         @xml.tag!('gmd:series') do
            seriesClass.writeXML(hSeries)
         end
      end
      if hSeries.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:series')
      end

      # citation - other citation details
      aOther = hCitation[:otherDetails]
      unless aOther.empty?
         other = aOther[0]
         @xml.tag!('gmd:otherCitationDetails') do
            @xml.tag!('gco:CharacterString', other)
         end
      end
      if aOther.empty? && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:otherCitationDetails')
      end

      # citation - ISBN
      unless isbn == ''
         @xml.tag!('gmd:ISBN') do
            @xml.tag!('gco:CharacterString', isbn)
         end
      end
      if isbn == '' && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:ISBN')
      end

      # citation - ISSN
      unless issn == ''
         @xml.tag!('gmd:ISSN') do
            @xml.tag!('gco:CharacterString', issn)
         end
      end
      if issn == '' && @hResponseObj[:writerShowTags]
         @xml.tag!('gmd:ISSN')
      end

   end # CI_Citation tag

end