module ADIWG::Mdtranslator::Readers::SbJson::SbJson

Public Class Methods

unpack(hSbJson, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/sbJson/modules/module_sbJson.rb, line 40
def self.unpack(hSbJson, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new

   intObj = intMetadataClass.newBase

   # build basic mdTranslator internal object
   hMetadata = intMetadataClass.newMetadata
   hMetadataInfo = intMetadataClass.newMetadataInfo
   hResourceInfo = intMetadataClass.newResourceInfo
   hCitation = intMetadataClass.newCitation
   hSchema = intMetadataClass.newSchema
   @contacts = intObj[:contacts]

   # schema
   hSchema[:name] = 'sbJson'
   hSchema[:version] = ADIWG::Mdtranslator::Readers::SbJson::VERSION

   # titles / alternateTitles
   Title.unpack(hSbJson, hCitation, hResponseObj)

   # id
   hReturn = Id.unpack(hSbJson, hResponseObj)
   hMetadataInfo[:metadataIdentifier] = hReturn unless hReturn.nil?

   # body / summary
   Body.unpack(hSbJson, hResourceInfo, hResponseObj)

   # citation
   Citation.unpack(hSbJson, hCitation, hResponseObj)

   # identifier
   Identifier.unpack(hSbJson, hCitation, hResponseObj)

   # purpose
   Purpose.unpack(hSbJson, hResourceInfo, hResponseObj)

   # rights
   hReturn = Rights.unpack(hSbJson, hResponseObj)
   hResourceInfo[:constraints] << hReturn unless hReturn.nil?

   # provenance
   Provenance.unpack(hSbJson, hCitation, hResponseObj)

   # materialRequestInstructions
   aReturn = MaterialRequest.unpack(hSbJson, hResponseObj)
   unless aReturn.nil?
      hContact = aReturn[0]
      myIndex = intObj[:contacts].length
      intObj[:contacts] << hContact
      aReturn[1][:distributor][0][:contact][:parties][0][:contactIndex] = myIndex
      hMetadata[:distributorInfo] << aReturn[1]
   end

   # parent ID
   hReturn = ParentId.unpack(hSbJson, hResponseObj)
   hMetadataInfo[:parentMetadata] = hReturn unless hReturn.nil?

   # contacts
   Contact.unpack(hSbJson, intObj[:contacts], hCitation, hResponseObj)

   # web links
   aReturn = WebLinkDocument.unpack(hSbJson, hResponseObj)
   hMetadata[:additionalDocuments].concat(aReturn) unless aReturn.nil?
   aReturn = WebLinkGraphic.unpack(hSbJson, hResponseObj)
   hResourceInfo[:graphicOverviews].concat(aReturn) unless aReturn.nil?

   # browse categories
   BrowseCategory.unpack(hSbJson, hResourceInfo[:resourceTypes], hResponseObj)

   # tags
   Tag.unpack(hSbJson, hResourceInfo, hResponseObj)

   # dates
   Date.unpack(hSbJson, hCitation, hResponseObj)

   # Spatial
   Spatial.unpack(hSbJson, hResourceInfo, hResponseObj)

   # facets
   if hSbJson.has_key?('facets')
      hSbJson['facets'].each do |hFacet|
         if hFacet.has_key?('className')

            # budget facet
            if hFacet['className'] == 'gov.sciencebase.catalog.item.facet.BudgetFacet'
               Budget.unpack(hFacet, hMetadata, hResponseObj)
            end

            # project facet
            if hFacet['className'] == 'gov.sciencebase.catalog.item.facet.ProjectFacet'
               Project.unpack(hFacet, hResourceInfo, hResponseObj)
            end

            # citation facet
            if hFacet['className'] == 'gov.sciencebase.catalog.item.facet.CitationFacet'
               Publication.unpack(hFacet, hResourceInfo, hCitation, hResponseObj)
            end

         end
      end
   end

   # extents
   if hSbJson.has_key?('extents')
      hSbJson['extents'].each do |extentId|
         hReturn = Extent.unpack(extentId, hResponseObj)
         hResourceInfo[:extents] << hReturn unless hReturn.empty?
      end
   end

   # related items
   if hSbJson.has_key?('relatedItems')
      RelatedItem.unpack(hSbJson, hMetadata, hResponseObj)
   end

   hResourceInfo[:citation] = hCitation
   hMetadata[:metadataInfo] = hMetadataInfo
   hMetadata[:resourceInfo] = hResourceInfo
   intObj[:schema] = hSchema
   intObj[:metadata] = hMetadata

   return intObj

end