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

Public Class Methods

add_associated_resource(hResource) click to toggle source

add new associated resource

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 210
def self.add_associated_resource(hResource)
   @intObj[:metadata][:associatedResources] << hResource
end
add_contact(name, isOrg) click to toggle source

add new contact to contacts array

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 153
def self.add_contact(name, isOrg)
   contactId = find_contact_by_name(name)
   if contactId.nil?
      intMetadataClass = InternalMetadata.new
      hContact = intMetadataClass.newContact
      contactId = UUIDTools::UUID.random_create.to_s
      hContact[:contactId] = contactId
      hContact[:name] = name
      hContact[:isOrganization] = isOrg
      @contacts << hContact
   end
   return contactId
end
find_contact_by_id(contactId) click to toggle source

find the array pointer and type for a contact

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 124
def self.find_contact_by_id(contactId)
   contactIndex = nil
   contactType = nil
   unless @contacts.empty?
      @contacts.each_with_index do |contact, i|
         if contact[:contactId] == contactId
            if contact[:isOrganization]
               contactType = 'organization'
            else
               contactType = 'individual'
            end
            contactIndex = i
         end
      end
   end
   return contactIndex, contactType
end
find_contact_by_name(contactName) click to toggle source

find contact id for a name

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 143
def self.find_contact_by_name(contactName)
   @contacts.each do |contact|
      if contact[:name] == contactName
         return contact[:contactId]
      end
   end
   return nil
end
get_contact_by_id(contactId) click to toggle source

return contact by id

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 168
def self.get_contact_by_id(contactId)
   index = find_contact_by_id(contactId)[0]
   unless index.nil?
      return @contacts[index]
   end
   return nil
end
get_intObj() click to toggle source

get internal object

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 195
def self.get_intObj
   return @intObj
end
get_metadata_time_convention() click to toggle source

get metadata time convention

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 200
def self.get_metadata_time_convention
   return @xDoc.xpath('./metadata/metainfo/mettc').text
end
set_contact(hContact) click to toggle source

add or replace the contact

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 177
def self.set_contact(hContact)
   index = find_contact_by_id(hContact[:contactId])[0]
   if index.nil?
      @contacts << hContact
      index = @contacts.length - 1
   else
      @contacts[index] = hContact
   end
   return index
end
set_intObj(intObj) click to toggle source

set an internal object for tests

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 189
def self.set_intObj(intObj)
   @intObj = intObj
   @contacts = @intObj[:contacts]
end
set_xDoc(xDoc) click to toggle source

set @xDoc for minitests

# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 205
def self.set_xDoc(xDoc)
   @xDoc = xDoc
end
unpack(xDoc, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_fgdc.rb, line 27
def self.unpack(xDoc, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new

   intObj = intMetadataClass.newBase
   @intObj = intObj
   @contacts = intObj[:contacts]
   @xDoc = xDoc

   # build basic mdTranslator internal object
   hMetadata = intMetadataClass.newMetadata
   hResourceInfo = intMetadataClass.newResourceInfo
   hMetadata[:resourceInfo] = hResourceInfo
   intObj[:metadata] = hMetadata

   xMetadata = xDoc.xpath('./metadata')

   # schema
   hSchema = intMetadataClass.newSchema
   hSchema[:name] = 'fgdc'
   hSchema[:version] = ADIWG::Mdtranslator::Readers::Fgdc::VERSION
   @intObj[:schema] = hSchema

   # metadata (idinfo 1) - identification information (required)
   title = ''
   xIdInfo = xMetadata.xpath('./idinfo')
   unless xIdInfo.empty?
      Identification.unpack(xIdInfo, intObj, hResponseObj)
      xCitation = xIdInfo.xpath('./citation')
      unless xCitation.empty?
         xCiteInfo = xCitation.xpath('./citeinfo')
         unless xCiteInfo.empty?
            title = xCiteInfo.xpath('./title').text
         end
      end

   end
   if xIdInfo.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: identification information section (idinfo) missing'
   end

   # metadata (dataqual 2) - data quality
   xDataQual = xMetadata.xpath('./dataqual')
   unless xDataQual.empty?
      Quality.unpack(xDataQual, hMetadata, hResponseObj)
   end

   # metadata (spdoinfo 3) - spatial data organization
   xSpatialOrg = xMetadata.xpath('./spdoinfo')
   unless xSpatialOrg.empty?
      SpatialOrganization.unpack(xSpatialOrg, hResourceInfo, hResponseObj)
   end

   # metadata (spref 4) - spatial reference
   xSpatialRef = xMetadata.xpath('./spref')
   unless xSpatialRef.empty?
      SpatialReference.unpack(xSpatialRef, hResourceInfo, hResponseObj)
   end

   # metadata (eainfo 5) - entity and attribute
   xEntity = xMetadata.xpath('./eainfo')
   unless xEntity.empty?
      hDictionary = EntityAttribute.unpack(xEntity, title, hResponseObj)
      unless hDictionary.nil?
         @intObj[:dataDictionaries] << hDictionary
      end
   end

   # metadata (distinfo 6) - distribution information []
   axDistribution = xMetadata.xpath('./distinfo')
   unless axDistribution.empty?
      axDistribution.each do |xDistribution|
         hDistribution = Distribution.unpack(xDistribution, hResponseObj)
         unless hDistribution.nil?
            hMetadata[:distributorInfo] << hDistribution
         end
      end
   end

   # metadata (metainfo 7) - metadata reference (required)
   xMetaInfo = xMetadata.xpath('./metainfo')
   unless xMetaInfo.empty?
      hMetadataInfo = MetadataInformation.unpack(xMetaInfo, hResponseObj)
      unless hMetadataInfo.nil?
         hMetadata[:metadataInfo] = hMetadataInfo
      end
   end
   if xMetaInfo.empty?
      hResponseObj[:readerExecutionMessages] << 'WARNING: FGDC reader: metadata information section (metainfo) missing'
   end

   return intObj

end