adiwg-mdtranslator 1.3.0 → 1.4.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.jsbeautifyrc +8 -0
  3. data/Rakefile +1 -3
  4. data/adiwg-mdtranslator.gemspec +2 -0
  5. data/bin/mdtranslator +2 -2
  6. data/lib/adiwg/mdtranslator.rb +2 -0
  7. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +6 -3
  8. data/lib/adiwg/mdtranslator/internal/module_geoFormat.rb +183 -190
  9. data/lib/adiwg/mdtranslator/internal/module_lineString.rb +18 -0
  10. data/lib/adiwg/mdtranslator/internal/module_point.rb +18 -0
  11. data/lib/adiwg/mdtranslator/readers/mdJson/modules_v1/module_contacts.rb +3 -1
  12. data/lib/adiwg/mdtranslator/readers/mdJson/modules_v1/module_geographicElement.rb +18 -10
  13. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_additionalDocumentation.rb +52 -0
  14. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_boundingBox.rb +54 -0
  15. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_browseGraphic.rb +66 -0
  16. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_citation.rb +125 -0
  17. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_contacts.rb +144 -0
  18. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_dateTime.rb +31 -0
  19. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_distributionInfo.rb +64 -0
  20. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_extent.rb +61 -0
  21. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geoCoordSystem.rb +50 -0
  22. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geoProperties.rb +91 -0
  23. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geographicElement.rb +161 -0
  24. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_metadata.rb +70 -0
  25. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_metadataInfo.rb +131 -0
  26. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_onlineResource.rb +71 -0
  27. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_resourceIdentifier.rb +73 -0
  28. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_resourceInfo.rb +437 -0
  29. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_responsibleParty.rb +53 -0
  30. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_sbJson.rb +52 -0
  31. data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/version.rb +12 -0
  32. data/lib/adiwg/mdtranslator/readers/sbJson/readme.md +12 -0
  33. data/lib/adiwg/mdtranslator/readers/sbJson/sbJson_reader.rb +205 -0
  34. data/lib/adiwg/mdtranslator/readers/sbJson/sbJson_validator.rb +44 -0
  35. data/lib/adiwg/mdtranslator/version.rb +1 -2
  36. data/lib/adiwg/mdtranslator/writers/html/sections/html_browseGraphic.rb +2 -1
  37. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +5 -5
  38. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +1 -1
  39. data/lib/adiwg/mdtranslator/writers/mdJson/mdJson_writer.rb +42 -0
  40. data/lib/adiwg/mdtranslator/writers/mdJson/readme.md +19 -0
  41. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_additionalDoc.rb +19 -0
  42. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_address.rb +22 -0
  43. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_associatedResource.rb +22 -0
  44. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_attribute.rb +27 -0
  45. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_base.rb +19 -0
  46. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_citation.rb +33 -0
  47. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_constraint.rb +28 -0
  48. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_contact.rb +31 -0
  49. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageInfo.rb +30 -0
  50. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageItem.rb +44 -0
  51. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dataQuality.rb +32 -0
  52. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dateTime.rb +18 -0
  53. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +33 -0
  54. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distributionInfo.rb +31 -0
  55. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_domain.rb +25 -0
  56. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_entity.rb +37 -0
  57. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_extent.rb +26 -0
  58. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb +19 -0
  59. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_geographicElement.rb +81 -0
  60. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_graphicOverview.rb +20 -0
  61. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_gridInfo.rb +27 -0
  62. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_imageInfo.rb +28 -0
  63. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_keyword.rb +20 -0
  64. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_locale.rb +19 -0
  65. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_metadata.rb +30 -0
  66. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_metadataInfo.rb +36 -0
  67. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_onlineResource.rb +21 -0
  68. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_phone.rb +19 -0
  69. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_processStep.rb +25 -0
  70. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceIdentifier.rb +23 -0
  71. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceInfo.rb +69 -0
  72. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceMaintenance.rb +23 -0
  73. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_responsibleParty.rb +18 -0
  74. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_spatialreference.rb +19 -0
  75. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_taxon.rb +19 -0
  76. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_taxonomy.rb +32 -0
  77. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_temporalElement.rb +38 -0
  78. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_timePeriod.rb +20 -0
  79. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_transferOption.rb +33 -0
  80. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_usage.rb +23 -0
  81. data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_verticalElement.rb +20 -0
  82. data/lib/adiwg/mdtranslator/writers/mdJson/version.rb +13 -0
  83. data/lib/adiwg/mdtranslator/writers/sbJson/readme.md +12 -0
  84. data/lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb +126 -0
  85. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_base.rb +19 -0
  86. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_contact.rb +42 -0
  87. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_identifier.rb +22 -0
  88. data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_spatial.rb +49 -0
  89. data/lib/adiwg/mdtranslator/writers/sbJson/version.rb +13 -0
  90. data/test/readers/mdJson/v1/tc_reader_mdjson_translation.rb +83 -0
  91. data/test/readers/sbJson/v0/tc_reader_sbjson_translation.rb +79 -0
  92. data/test/readers/sbJson/v0/test.json +431 -0
  93. data/test/readers/sbJson/v0/test1.json +383 -0
  94. data/test/writers/mdJson/v1/tc_writer_mdJson.rb +60 -0
  95. data/test/writers/sbJson/v0/tc_writer_sbJson.rb +60 -0
  96. metadata +121 -7
  97. data/test/readers/mdJson/v1/tc_translation_19115_2.rb +0 -67
@@ -0,0 +1,18 @@
1
+ # unpack line string
2
+ # line string is coded in GeoJSON
3
+ module ADIWG
4
+ module Mdtranslator
5
+ module LineString
6
+ def self.unpack(aCoords, geoType, _responseObj)
7
+ intMetadataClass = InternalMetadata.new
8
+ intLine = intMetadataClass.newGeometry
9
+
10
+ intLine[:geoType] = geoType
11
+ intLine[:geometry] = aCoords
12
+ intLine[:dimension] = AdiwgCoordinates.getDimension(aCoords)
13
+
14
+ intLine
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # unpack point
2
+ # point is coded in GeoJSON
3
+ module ADIWG
4
+ module Mdtranslator
5
+ module Point
6
+ def self.unpack(aCoords, geoType, _responseObj)
7
+ intMetadataClass = InternalMetadata.new
8
+ intPoint = intMetadataClass.newGeometry
9
+
10
+ intPoint[:geoType] = geoType
11
+ intPoint[:geometry] = aCoords
12
+ intPoint[:dimension] = AdiwgCoordinates.getDimension(aCoords)
13
+
14
+ intPoint
15
+ end
16
+ end
17
+ end
18
+ end
@@ -129,12 +129,14 @@ module ADIWG
129
129
  intCont = intMetadataClass.newContact
130
130
  intCont[:contactId] = 'ADIwgBio'
131
131
  intCont[:orgName] = 'National Biological Information Infrastructure (NBII)'
132
+ intCont[:internal] = true
132
133
  aDefContacts << intCont
133
134
 
134
135
  # contact to support doi (digital object identifier)
135
136
  intCont = intMetadataClass.newContact
136
137
  intCont[:contactId] = 'ADIwgDOI'
137
138
  intCont[:orgName] = 'International DOI Foundation (IDF)'
139
+ intCont[:internal] = true
138
140
 
139
141
  intOlRes = intMetadataClass.newOnlineResource
140
142
  intOlRes[:olResURI] = 'http://www.doi.org'
@@ -151,4 +153,4 @@ module ADIWG
151
153
  end
152
154
  end
153
155
  end
154
- end
156
+ end
@@ -21,8 +21,8 @@
21
21
  require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_geoCoordSystem')
22
22
  require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_geoProperties')
23
23
  require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_boundingBox')
24
- require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_point')
25
- require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_lineString')
24
+ #require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_point')
25
+ #require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_lineString')
26
26
  require ADIWG::Mdtranslator::Readers::MdJson.readerModule('module_polygon')
27
27
 
28
28
  module ADIWG
@@ -50,6 +50,8 @@ module ADIWG
50
50
  # find geographic element type
51
51
  if hGeoJsonElement.has_key?('type')
52
52
  elementType = hGeoJsonElement['type']
53
+ #store the original GeoJSON type
54
+ hGeoElement[:elementType] = elementType
53
55
  else
54
56
  # invalid geographic element
55
57
  return nil
@@ -72,20 +74,26 @@ module ADIWG
72
74
  # set geographic element properties
73
75
  if hGeoJsonElement.has_key?('properties')
74
76
  hGeoProps = hGeoJsonElement['properties']
75
- GeoProperties.unpack(hGeoProps, hGeoElement, responseObj)
77
+ GeoProperties.unpack(hGeoProps, hGeoElement, responseObj) unless hGeoProps.nil?
76
78
  end
77
79
 
78
80
  # process geographic element bounding box
81
+ # Only process Features with null geometry,
79
82
  # the bounding box must be represented as a separate geographic element for ISO
80
83
  # need to make a deep copy of current state of geographic element for bounding box
81
84
  if hGeoJsonElement.has_key?('bbox')
82
85
  if hGeoJsonElement['bbox'].length == 4
83
86
  aBBox = hGeoJsonElement['bbox']
87
+ if elementType == 'Feature' && hGeoJsonElement['geometry'].nil?
84
88
 
85
- boxElement = Marshal.load(Marshal.dump(hGeoElement))
86
- boxElement[:elementGeometry] = BoundingBox.unpack(aBBox, responseObj)
89
+ boxElement = Marshal.load(Marshal.dump(hGeoElement))
90
+ boxElement[:elementGeometry] = BoundingBox.unpack(aBBox, responseObj)
91
+ boxElement[:elementType] = 'BBOX'
87
92
 
88
- aIntGeoEle << boxElement
93
+ aIntGeoEle << boxElement
94
+ end
95
+ # add bbox to element hash
96
+ hGeoElement[:bbox] = BoundingBox.unpack(aBBox, responseObj)
89
97
  end
90
98
  end
91
99
 
@@ -107,9 +115,9 @@ module ADIWG
107
115
  unless aCoordinates.empty?
108
116
  case geometryType
109
117
  when 'Point', 'MultiPoint'
110
- hGeoElement[:elementGeometry] = Point.unpack(aCoordinates, geometryType, responseObj)
118
+ hGeoElement[:elementGeometry] = ADIWG::Mdtranslator::Point.unpack(aCoordinates, geometryType, responseObj)
111
119
  when 'LineString', 'MultiLineString'
112
- hGeoElement[:elementGeometry] = LineString.unpack(aCoordinates, geometryType, responseObj)
120
+ hGeoElement[:elementGeometry] = ADIWG::Mdtranslator::LineString.unpack(aCoordinates, geometryType, responseObj)
113
121
  when 'Polygon', 'MultiPolygon'
114
122
  hGeoElement[:elementGeometry] = Polygon.unpack(aCoordinates, geometryType, responseObj)
115
123
  else
@@ -139,12 +147,12 @@ module ADIWG
139
147
  # GeoJSON Geometries
140
148
  when 'Point', 'MultiPoint'
141
149
  aCoordinates = hGeoJsonElement['coordinates']
142
- hGeoElement[:elementGeometry] = Point.unpack(aCoordinates, elementType, responseObj)
150
+ hGeoElement[:elementGeometry] = ADIWG::Mdtranslator::Point.unpack(aCoordinates, elementType, responseObj)
143
151
  aIntGeoEle << hGeoElement
144
152
 
145
153
  when 'LineString', 'MultiLineString'
146
154
  aCoordinates = hGeoJsonElement['coordinates']
147
- hGeoElement[:elementGeometry] = LineString.unpack(aCoordinates, elementType, responseObj)
155
+ hGeoElement[:elementGeometry] = ADIWG::Mdtranslator::LineString.unpack(aCoordinates, elementType, responseObj)
148
156
  aIntGeoEle << hGeoElement
149
157
 
150
158
  when 'Polygon', 'MultiPolygon'
@@ -0,0 +1,52 @@
1
+ require ADIWG::Mdtranslator::Readers::SbJson.readerModule('module_citation')
2
+
3
+ module ADIWG
4
+ module Mdtranslator
5
+ module Readers
6
+ module SbJson
7
+
8
+ module AdditionalDocumentation
9
+
10
+ def self.unpack(hAddDoc, responseObj)
11
+
12
+ # return nil object if input is empty
13
+ intAddDoc = nil
14
+ return if hAddDoc.empty?
15
+
16
+ # instance classes needed in script
17
+ intMetadataClass = InternalMetadata.new
18
+ intAddDoc = intMetadataClass.newAdditionalDocumentation
19
+
20
+ # additional documentation - resource type
21
+ if hAddDoc.has_key?('resourceType')
22
+ s = hAddDoc['resourceType']
23
+ if s != ''
24
+ intAddDoc[:resourceType] = s
25
+ end
26
+ end
27
+
28
+ # additional documentation - resource citation
29
+ if hAddDoc.has_key?('citation')
30
+ hCitation = hAddDoc['citation']
31
+ unless hCitation.empty?
32
+ intAddDoc[:citation] = Citation.unpack(hCitation, responseObj)
33
+ else
34
+ responseObj[:readerExecutionMessages] << 'Additional documentation citation is empty'
35
+ responseObj[:readerExecutionPass] = false
36
+ return nil
37
+ end
38
+ else
39
+ responseObj[:readerExecutionMessages] << 'Additional documentation citation is missing'
40
+ responseObj[:readerExecutionPass] = false
41
+ return nil
42
+ end
43
+
44
+ return intAddDoc
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,54 @@
1
+ module ADIWG
2
+ module Mdtranslator
3
+ module Readers
4
+ module SbJson
5
+
6
+ module BoundingBox
7
+
8
+ def self.unpack(aBBox, responseObj)
9
+
10
+ # instance classes needed in script
11
+ intMetadataClass = InternalMetadata.new
12
+ intGeometry = intMetadataClass.newGeometry
13
+ intGeometry[:geoType] = 'BoundingBox'
14
+
15
+ # unpack GeoJSON bounding box elements
16
+ intBBox = intMetadataClass.newBoundingBox
17
+ west = aBBox[0]
18
+ south = aBBox[1]
19
+ east = aBBox[2]
20
+ north = aBBox[3]
21
+
22
+ # validate coordinates if easting +/-180 and northing +/-90
23
+ valid = false
24
+ if (180 >= west) && (west >= -180)
25
+ if (90 >= south) && (south >= -90)
26
+ if (180 >= east) && (east >= -180)
27
+ if (90 >= north) &&(north >= -90)
28
+ valid = true
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # build internal geo element if valid
35
+ if valid
36
+ intBBox[:westLong] = west
37
+ intBBox[:eastLong] = east
38
+ intBBox[:southLat] = south
39
+ intBBox[:northLat] = north
40
+ intGeometry[:geometry] = intBBox
41
+
42
+ return intGeometry
43
+ else
44
+ return nil
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,66 @@
1
+ module ADIWG
2
+ module Mdtranslator
3
+ module Readers
4
+ module SbJson
5
+
6
+ module BrowseGraphic
7
+
8
+ def self.unpack(hBgraphic, responseObj)
9
+
10
+ # return nil object if input is empty
11
+ intBGraphic = nil
12
+ return if hBgraphic.empty?
13
+
14
+ # instance classes needed in script
15
+ intMetadataClass = InternalMetadata.new
16
+ intBGraphic = intMetadataClass.newBrowseGraphic
17
+
18
+ # graphic - file name
19
+ if hBgraphic.has_key?('fileName')
20
+ s = hBgraphic['fileName']
21
+ if s != ''
22
+ intBGraphic[:bGName] = s
23
+ else
24
+ responseObj[:readerExecutionMessages] << 'Graphic overview name is empty'
25
+ responseObj[:readerExecutionPass] = false
26
+ return nil
27
+ end
28
+ else
29
+ responseObj[:readerExecutionMessages] << 'Graphic overview name is missing'
30
+ responseObj[:readerExecutionPass] = false
31
+ return nil
32
+ end
33
+
34
+ # graphic - file description
35
+ if hBgraphic.has_key?('fileDescription')
36
+ s = hBgraphic['fileDescription']
37
+ if s != ''
38
+ intBGraphic[:bGDescription] = s
39
+ end
40
+ end
41
+
42
+ # graphic - file type
43
+ if hBgraphic.has_key?('fileType')
44
+ s = hBgraphic['fileType']
45
+ if s != ''
46
+ intBGraphic[:bGType] = s
47
+ end
48
+ end
49
+
50
+ # graphic - web link
51
+ if hBgraphic.has_key?('fileUri')
52
+ s = hBgraphic['fileUri']
53
+ if s != ''
54
+ intBGraphic[:bGURI] = s
55
+ end
56
+ end
57
+
58
+ return intBGraphic
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,125 @@
1
+ require ADIWG::Mdtranslator::Readers::SbJson.readerModule('module_dateTime')
2
+ require ADIWG::Mdtranslator::Readers::SbJson.readerModule('module_responsibleParty')
3
+ require ADIWG::Mdtranslator::Readers::SbJson.readerModule('module_onlineResource')
4
+ require ADIWG::Mdtranslator::Readers::SbJson.readerModule('module_resourceIdentifier')
5
+
6
+ module ADIWG
7
+ module Mdtranslator
8
+ module Readers
9
+ module SbJson
10
+
11
+ module Citation
12
+
13
+ def self.unpack(hCitation, responseObj)
14
+
15
+ # return nil object if input is empty
16
+ intCitation = nil
17
+ return if hCitation.empty?
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ intCitation = intMetadataClass.newCitation
22
+
23
+ # citation - title
24
+ if hCitation.has_key?('title')
25
+ s = hCitation['title']
26
+ if s != ''
27
+ intCitation[:citTitle] = s
28
+ else
29
+ responseObj[:readerExecutionMessages] << 'Citation title is empty'
30
+ responseObj[:readerExecutionPass] = false
31
+ return nil
32
+ end
33
+ else
34
+ responseObj[:readerExecutionMessages] << 'Citation title is missing'
35
+ responseObj[:readerExecutionPass] = false
36
+ return nil
37
+ end
38
+
39
+ # citation - alternate title
40
+ if hCitation.has_key?('alternateTitle')
41
+ s = hCitation['alternateTitle']
42
+ if s != ''
43
+ intCitation[:citAltTitle] = s
44
+ end
45
+ end
46
+
47
+ # citation - date
48
+ if hCitation.has_key?('date')
49
+ aCitDates = hCitation['date']
50
+ unless aCitDates.empty?
51
+ aCitDates.each do |hCitDate|
52
+ if hCitDate.has_key?('date')
53
+ s = hCitDate['date']
54
+ if s != ''
55
+ intDateTime = DateTime.unpack(s, responseObj)
56
+ if hCitDate.has_key?('dateType')
57
+ s = hCitDate['dateType']
58
+ if s != ''
59
+ intDateTime[:dateType] = s
60
+ end
61
+ end
62
+ intCitation[:citDate] << intDateTime
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ # citation - edition
70
+ if hCitation.has_key?('edition')
71
+ s = hCitation['edition']
72
+ if s != ''
73
+ intCitation[:citEdition] = s
74
+ end
75
+ end
76
+
77
+ # citation - responsible party
78
+ if hCitation.has_key?('responsibleParty')
79
+ aRParty = hCitation['responsibleParty']
80
+ unless aRParty.empty?
81
+ aRParty.each do |hRParty|
82
+ intCitation[:citResponsibleParty] << ResponsibleParty.unpack(hRParty, responseObj)
83
+ end
84
+ end
85
+ end
86
+
87
+ # citation - presentation form
88
+ if hCitation.has_key?('presentationForm')
89
+ aPForms = hCitation['presentationForm']
90
+ unless aPForms.empty?
91
+ aPForms.each do |pForm|
92
+ intCitation[:citResourceForms] << pForm
93
+ end
94
+ end
95
+ end
96
+
97
+ # citation - resource identifiers
98
+ if hCitation.has_key?('identifier')
99
+ aResIds = hCitation['identifier']
100
+ aResIds.each do |hIdentifier|
101
+ unless hIdentifier.empty?
102
+ intCitation[:citResourceIds] << ResourceIdentifier.unpack(hIdentifier, responseObj)
103
+ end
104
+ end
105
+ end
106
+
107
+ # citation - online resources
108
+ if hCitation.has_key?('onlineResource')
109
+ aOlRes = hCitation['onlineResource']
110
+ aOlRes.each do |hOlRes|
111
+ unless hOlRes.empty?
112
+ intCitation[:citOlResources] << OnlineResource.unpack(hOlRes, responseObj)
113
+ end
114
+ end
115
+ end
116
+
117
+ return intCitation
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,144 @@
1
+ require 'uuidtools'
2
+
3
+ module ADIWG
4
+ module Mdtranslator
5
+ module Readers
6
+ module SbJson
7
+ module Contact
8
+ def self.unpack(hContact, responseObj)
9
+ # return nil object if input is empty
10
+ intCont = nil
11
+ return if hContact.empty?
12
+
13
+ # instance classes needed in script
14
+ intMetadataClass = InternalMetadata.new
15
+ intCont = intMetadataClass.newContact
16
+
17
+ # contact ID - required
18
+ # SB doesn't provide a contactId, so we create one
19
+ intCont[:contactId] = UUIDTools::UUID.random_create.to_s
20
+ hContact['contactId'] = intCont[:contactId]
21
+
22
+ # contact name
23
+ s = hContact['name']
24
+ if s != ''
25
+ if hContact['contactType'] == 'person'
26
+ intCont[:indName] = s
27
+ intCont[:orgName] = hContact['organization']['displayText']
28
+ else
29
+ intCont[:orgName] = s
30
+ end
31
+ end
32
+
33
+ # position name
34
+ if hContact.key?('jobTitle')
35
+ s = hContact['jobTitle']
36
+ intCont[:position] = s if s != ''
37
+ end
38
+
39
+ # SB Role, store the role for later lookup, not used
40
+ # internally
41
+ if hContact.key?('type')
42
+ s = hContact['type']
43
+ intCont[:sbType] = s if s != ''
44
+ end
45
+
46
+ # contact instructions
47
+ if hContact.key?('instructions')
48
+ s = hContact['instructions']
49
+ intCont[:contactInstructions] = s if s != ''
50
+ end
51
+
52
+ if hContact.key?('primaryLocation')
53
+ pl = hContact['primaryLocation']
54
+ # phones - all service types
55
+ if pl.key?('officePhone')
56
+ officePhone = intMetadataClass.newPhone
57
+
58
+ # phone - service
59
+ officePhone[:phoneServiceType] = 'voice'
60
+ officePhone[:phoneName] = 'officePhone'
61
+ officePhone[:phoneNumber] = pl['officePhone']
62
+ intCont[:phones] << officePhone
63
+ end
64
+ if pl.key?('faxPhone')
65
+ faxPhone = intMetadataClass.newPhone
66
+
67
+ # phone - service
68
+ faxPhone[:phoneServiceType] = 'fax'
69
+ faxPhone[:phoneName] = 'faxPhone'
70
+ faxPhone[:phoneNumber] = pl['faxPhone']
71
+ intCont[:phones] << faxPhone
72
+ end
73
+
74
+ # address
75
+ address = pl['mailAddress'] || pl['streetAddress']
76
+ unless address.nil?
77
+ intAdd = intMetadataClass.newAddress
78
+
79
+ # address - delivery point
80
+ if address.has_key?('line1')
81
+ intAdd[:deliveryPoints] << address['line1']
82
+ end
83
+
84
+ if address.has_key?('line2')
85
+ intAdd[:deliveryPoints] << address['line2']
86
+ end
87
+
88
+ intAdd[:city] = address['city']
89
+ intAdd[:adminArea] = address['state']
90
+ intAdd[:postalCode] = address['zip']
91
+ intAdd[:country] = address['country']
92
+
93
+ if hContact['email']
94
+ intAdd[:eMailList] << hContact['email']
95
+ end
96
+
97
+ intCont[:address] = intAdd
98
+ end
99
+ end
100
+
101
+ intCont
102
+ end
103
+
104
+ def self.setDefaultContacts
105
+ # add default contacts
106
+ intMetadataClass = InternalMetadata.new
107
+ aDefContacts = []
108
+
109
+ #contact for ScienceBase
110
+ intCont = intMetadataClass.newContact
111
+ intCont[:contactId] = 'SB'
112
+ intCont[:orgName] = 'ScienceBase'
113
+
114
+ intOlRes = intMetadataClass.newOnlineResource
115
+ intOlRes[:olResURI] = 'http://www.sciencebase.gov'
116
+ intOlRes[:olResName] = 'ScienceBase Homepage'
117
+ intCont[:onlineRes] << intOlRes
118
+
119
+ intAdd = intMetadataClass.newAddress
120
+ intAdd[:eMailList] << 'sciencebase@usgs.gov'
121
+ intCont[:address] = intAdd
122
+ intCont[:internal] = true
123
+
124
+ aDefContacts << intCont
125
+
126
+ # contact to support doi (digital object identifier)
127
+ intCont = intMetadataClass.newContact
128
+ intCont[:contactId] = 'ADIwgDOI'
129
+ intCont[:orgName] = 'International DOI Foundation (IDF)'
130
+
131
+ intOlRes = intMetadataClass.newOnlineResource
132
+ intOlRes[:olResURI] = 'http://www.doi.org'
133
+ intCont[:onlineRes] << intOlRes
134
+ intCont[:internal] = true
135
+
136
+ aDefContacts << intCont
137
+
138
+ aDefContacts
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end