class ADIWG::Mdtranslator::Writers::Iso19110::CI_Citation

Public Class Methods

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

Public Instance Methods

writeXML(hCitation) click to toggle source
# File lib/adiwg/mdtranslator/writers/iso19110/classes/class_citation.rb, line 28
def writeXML(hCitation)

   unless hCitation.empty?

      # 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)

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

         # citation - title (required)
         s = hCitation[:title]
         if s.nil?
            @NameSpace.issueWarning(1, 'gmd:title')
         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)
            end
         end
         if aDate.empty?
            @NameSpace.issueWarning(2,'gmd:date')
         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 []
         # do not process ISBN and ISSN as MD_identifier(s)
         # ... these are written separately in ISO 19115-x
         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
            if issn == '' && isbn == ''
               @xml.tag!('gmd:identifier') do
                  idClass.writeXML(hIdentifier)
               end
            end
         end
         if aIds.empty? && @hResponseObj[:writerShowTags]
            @xml.tag!('gmd:identifier')
         end

         # citation - cited responsible party [{CI_ResponsibleParty}]
         # contacts are grouped by role in the internal object
         # output a separate <gmd:contact> for each role:contact pairing
         aRParties = hCitation[:responsibleParties]
         aRParties.each do |hRParty|
            role = hRParty[:roleName]
            aParties = hRParty[:parties]
            aParties.each do |hParty|
               @xml.tag!('gmd:citedResponsibleParty') do
                  rPartyClass.writeXML(role, hParty)
               end
            end
         end
         if aRParties.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
   end

end