class ADIWG::Mdtranslator::Writers::Fgdc::Quality

Public Class Methods

new(xml, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_quality.rb, line 17
def initialize(xml, hResponseObj)
   @xml = xml
   @hResponseObj = hResponseObj
   @NameSpace = ADIWG::Mdtranslator::Writers::Fgdc
end

Public Instance Methods

writeXML(intObj) click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_quality.rb, line 23
def writeXML(intObj)

   # classes used
   lineageClass = Lineage.new(@xml, @hResponseObj)

   hDataQuality = intObj.dig(:metadata, :dataQuality, 0)

   if hDataQuality && hDataQuality[:report]
      # data quality 2.1 (attracc) - attribute accuracy (not implemented)
      attribute_completeness_report = hDataQuality[:report].find do |report|
         report[:type] == 'DQ_NonQuantitativeAttributeCompleteness' &&
         !report.dig(:descriptiveResult, 0, :statement).nil?
      end

      if attribute_completeness_report
         @xml.tag!('attracc') do
            @xml.tag!('attraccr', attribute_completeness_report[:descriptiveResult][0][:statement])
         end
      elsif @hResponseObj[:writerShowTags]
         @xml.tag!('attracc', 'Not Reported')
      end

      # data quality 2.2 (logic) - logical consistency (not implemented) (required)
      logic_report = hDataQuality[:report].find do |report|
         report[:type] == 'DQ_ConceptualConsistency' &&
         !report.dig(:qualityMeasure, :description).nil?
      end

      if logic = logic_report&.dig(:qualityMeasure, :decription)
         @xml.tag!('logic', logic)
      else
         @xml.tag!('logic', 'Not Reported')
      end

      # data quality 2.3 (complete) - completion report (not implemented) (required)
      completeness_report = hDataQuality[:report].find do |report|
         report[:type] == 'DQ_CompletenessOmission' &&
         !report.dig(:descriptiveResult, 0, :statement).nil?
      end

      if complete = completeness_report&.dig(:descriptiveResult, 0, :statement)
         @xml.tag!('complete', complete)
      else
         @xml.tag!('complete', 'Not Reported')
      end

      # data quality 2.4 (position) - positional accuracy (not implemented)


      horizontal_positional_accuracy_report = hDataQuality[:report].find do |report|
         report[:type] == 'DQ_AbsoluteExternalPositionalAccuracy' &&
         report.dig(:qualityMeasure, :name) == 'Horizontal Positional Accuracy Report'
      end

      horizpar = horizontal_positional_accuracy_report&.dig(:evaluationMethod, :methodDescription)


      vertical_positional_accuracy_report = hDataQuality[:report].find do |report|
         report[:type] == 'DQ_AbsoluteExternalPositionalAccuracy' &&
         report.dig(:qualityMeasure, :name) == 'Vertical Positional Accuracy Report'
      end

      vertaccr = vertical_positional_accuracy_report&.dig(:evaluationMethod, :methodDescription)

      if horizpar || vertaccr
         @xml.tag!('posacc') do
            if horizpar
               @xml.tag!('horizpa') do
                  @xml.tag!('horizpar', horizpar)
               end
            end

            if vertaccr
               @xml.tag!('vertacc') do
                  @xml.tag!('vertaccr', vertaccr)
               end
            end
         end
      elsif @hResponseObj[:writerShowTags]
         @xml.tag!('position', 'Not Reported')
      end
   end

   # data quality 2.5 (lineage) - lineage (required)
   unless intObj[:metadata][:lineageInfo].empty?
      @xml.tag!('lineage') do
         lineageClass.writeXML(intObj[:metadata][:lineageInfo])
      end
   end
   if intObj[:metadata][:lineageInfo].empty?
      @NameSpace.issueWarning(350, nil, 'data quality section')
   end

   # data quality 2.6 (cloud) - cloud cover (not implemented)
   if @hResponseObj[:writerShowTags]
      @xml.tag!('cloud', 'Not Reported')
   end

end