Module: ADIWG::Mdtranslator::Writers::SbJson

Defined in:
lib/adiwg/mdtranslator/writers/sbJson/version.rb,
lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_id.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_tag.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_date.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_facet.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_hours.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_budget.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_rights.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_sbJson.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_contact.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_project.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_spatial.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_webLink.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_abstract.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_citation.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_parentId.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_codelists.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_identifier.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_provenance.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_publication.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_browseCategory.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_materialRequest.rb,
lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_geographicExtent.rb

Defined Under Namespace

Modules: Abstract, BrowseCategory, Budget, Citation, Codelists, Contact, Date, Facet, GeographicExtent, Hours, Id, Identifier, MaterialRequest, ParentId, Project, Provenance, Publication, Rights, Spatial, Tag, WebLink

Constant Summary collapse

VERSION =
'1.0.0'

Class Method Summary collapse

Class Method Details

.build(intObj, responseObj) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_sbJson.rb', line 34

def self.build(intObj, responseObj)

   metadataInfo = intObj[:metadata][:metadataInfo]
   resourceInfo = intObj[:metadata][:resourceInfo]
   distributorInfo = intObj[:metadata][:distributorInfo]
   hCitation = resourceInfo[:citation]

   @Namespace = ADIWG::Mdtranslator::Writers::SbJson

   Jbuilder.new do |json|

      resourceId = Id.build(intObj)
      json.id resourceId
      json.title hCitation[:title] unless hCitation.empty?
      json.alternateTitles hCitation[:alternateTitles] unless hCitation[:alternateTitles].empty?
      json.body Abstract.build(resourceInfo[:abstract])
      json.citation Citation.build(hCitation) unless hCitation.empty?

      # gather all identifiers
      # include the metadataIdentifier if it is NOT in the 'gov.sciencebase.catalog' namespace
      # otherwise it would be the resourceId above
      aIdentifiers = []
      unless metadataInfo[:metadataIdentifier].empty?
         unless metadataInfo[:metadataIdentifier][:namespace] == 'gov.sciencebase.catalog'
            aIdentifiers << metadataInfo[:metadataIdentifier]
         end
      end
      # do not duplicate the identifier which is the primary resource
      unless hCitation.empty?
         hCitation[:identifiers].each do |hIdentifier|
            unless hIdentifier[:identifier] == resourceId
               aIdentifiers << hIdentifier
            end
         end
      end
      # eliminate duplicate identifiers
      # duplicate must match on both ID and schema (namespace)
      aUniqIds = []
      aIdentifiers.each do |hIdentifier|
         foundDup = false
         aUniqIds.each do |hUniqId|
            if hIdentifier[:identifier] == hUniqId[:identifier]
               if hIdentifier[:namespace] == hUniqId[:namespace]
                  foundDup = true
               end
            end
         end
         unless foundDup
            aUniqIds << hIdentifier
         end
      end
      json.identifiers @Namespace.json_map(aUniqIds, Identifier) unless aIdentifiers.empty?

      json.purpose resourceInfo[:purpose]

      haveRights = false
      haveRights = true unless resourceInfo[:constraints].empty?
      distributorInfo.each do |hDistribution|
         unless hDistribution[:liabilityStatement].nil?
            haveRights = true
         end
      end
      if haveRights
         json.rights Rights.build(resourceInfo[:constraints], distributorInfo)
      end

      json.provenance Provenance.build
      json.materialRequestInstructions MaterialRequest.build(distributorInfo) unless distributorInfo.empty?
      json.parentId ParentId.build(metadataInfo[:parentMetadata]) unless metadataInfo[:parentMetadata].empty?
      aContactList = Contact.get_contact_list(intObj)
      json.contacts @Namespace.json_map(aContactList, Contact) unless aContactList.empty?
      json.webLinks WebLink.build(intObj[:metadata])
      json.browseCategories BrowseCategory.build(resourceInfo[:resourceTypes])
      json.tags Tag.build(intObj)
      json.dates Date.build(resourceInfo) unless resourceInfo.empty?
      json.spatial Spatial.build(resourceInfo[:extents]) unless resourceInfo[:extents].empty?
      json.facets Facet.build(intObj[:metadata])
      json.geographicExtents GeographicExtent.build(resourceInfo[:extents]) unless resourceInfo[:extents].empty?

   end

end

.get_contact_by_id(contactId) ⇒ Object

find contact in contact array and return the contact hash



47
48
49
50
51
52
53
54
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 47

def self.get_contact_by_id(contactId)
   @contacts.each do |hContact|
      if hContact[:contactId] == contactId
         return hContact
      end
   end
   {}
end

.get_contact_by_index(contactIndex) ⇒ Object

find contact in contact array and return the contact hash



39
40
41
42
43
44
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 39

def self.get_contact_by_index(contactIndex)
   if @contacts[contactIndex]
      return @contacts[contactIndex]
   end
   {}
end

.get_contact_index_by_id(contactId) ⇒ Object

find contact in contact array and return the contact index



57
58
59
60
61
62
63
64
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 57

def self.get_contact_index_by_id(contactId)
   @contacts.each_with_index do |hContact, index|
      if hContact[:contactId] == contactId
         return index
      end
   end
   {}
end

.json_map(collection = [], _class) ⇒ Object

ignore jBuilder object mapping when array is empty



67
68
69
70
71
72
73
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 67

def self.json_map(collection = [], _class)
   if collection.nil? || collection.empty?
      return nil
   else
      collection.map { |item| _class.build(item).attributes! }
   end
end

.nested_objs_by_element(obj, ele, excludeList = []) ⇒ Object

find all nested objects in ‘obj’ that contain the element ‘ele’



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 76

def self.nested_objs_by_element(obj, ele, excludeList = [])
   aCollected = []
   obj.each do |key, value|
      skipThisOne = false
      excludeList.each do |exclude|
         if key == exclude.to_sym
            skipThisOne = true
         end
      end
      next if skipThisOne
      if key == ele.to_sym
         aCollected << obj
      elsif obj.is_a?(Array)
         if key.respond_to?(:each)
            aReturn = nested_objs_by_element(key, ele, excludeList)
            aCollected = aCollected.concat(aReturn) unless aReturn.empty?
         end
      elsif obj[key].respond_to?(:each)
         aReturn = nested_objs_by_element(value, ele, excludeList)
         aCollected = aCollected.concat(aReturn) unless aReturn.empty?
      end
   end
   aCollected
end

.startWriter(intObj, responseObj) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb', line 17

def self.startWriter(intObj, responseObj)
   @contacts = intObj[:contacts]

   # set output flag for null properties
   Jbuilder.ignore_nil(!responseObj[:writerShowTags])

   # set the format of the output file based on the writer specified
   responseObj[:writerOutputFormat] = 'json'
   responseObj[:writerVersion] = ADIWG::Mdtranslator::Writers::SbJson::VERSION

   # write the sbJson metadata record
    = SbJson.build(intObj, responseObj)

   # set writer pass to true if no messages
   # false or warning state will be set by writer code
   responseObj[:writerPass] = true if responseObj[:writerMessages].empty?

   # encode the metadata target as JSON
   .target!
end