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.
- checksums.yaml +4 -4
- data/.jsbeautifyrc +8 -0
- data/Rakefile +1 -3
- data/adiwg-mdtranslator.gemspec +2 -0
- data/bin/mdtranslator +2 -2
- data/lib/adiwg/mdtranslator.rb +2 -0
- data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +6 -3
- data/lib/adiwg/mdtranslator/internal/module_geoFormat.rb +183 -190
- data/lib/adiwg/mdtranslator/internal/module_lineString.rb +18 -0
- data/lib/adiwg/mdtranslator/internal/module_point.rb +18 -0
- data/lib/adiwg/mdtranslator/readers/mdJson/modules_v1/module_contacts.rb +3 -1
- data/lib/adiwg/mdtranslator/readers/mdJson/modules_v1/module_geographicElement.rb +18 -10
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_additionalDocumentation.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_boundingBox.rb +54 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_browseGraphic.rb +66 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_citation.rb +125 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_contacts.rb +144 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_dateTime.rb +31 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_distributionInfo.rb +64 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_extent.rb +61 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geoCoordSystem.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geoProperties.rb +91 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_geographicElement.rb +161 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_metadata.rb +70 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_metadataInfo.rb +131 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_onlineResource.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_resourceIdentifier.rb +73 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_resourceInfo.rb +437 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_responsibleParty.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/module_sbJson.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/modules_v0/version.rb +12 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/readme.md +12 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/sbJson_reader.rb +205 -0
- data/lib/adiwg/mdtranslator/readers/sbJson/sbJson_validator.rb +44 -0
- data/lib/adiwg/mdtranslator/version.rb +1 -2
- data/lib/adiwg/mdtranslator/writers/html/sections/html_browseGraphic.rb +2 -1
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +5 -5
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +1 -1
- data/lib/adiwg/mdtranslator/writers/mdJson/mdJson_writer.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/readme.md +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_additionalDoc.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_address.rb +22 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_associatedResource.rb +22 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_attribute.rb +27 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_base.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_citation.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_constraint.rb +28 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_contact.rb +31 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageInfo.rb +30 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_coverageItem.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dataQuality.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dateTime.rb +18 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_dictionary.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_distributionInfo.rb +31 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_domain.rb +25 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_entity.rb +37 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_extent.rb +26 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_format.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_geographicElement.rb +81 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_graphicOverview.rb +20 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_gridInfo.rb +27 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_imageInfo.rb +28 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_keyword.rb +20 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_locale.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_metadata.rb +30 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_metadataInfo.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_onlineResource.rb +21 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_phone.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_processStep.rb +25 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceIdentifier.rb +23 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceInfo.rb +69 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_resourceMaintenance.rb +23 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_responsibleParty.rb +18 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_spatialreference.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_taxon.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_taxonomy.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_temporalElement.rb +38 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_timePeriod.rb +20 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_transferOption.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_usage.rb +23 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/sections/mdJson_verticalElement.rb +20 -0
- data/lib/adiwg/mdtranslator/writers/mdJson/version.rb +13 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/readme.md +12 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/sbJson_writer.rb +126 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_base.rb +19 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_contact.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_identifier.rb +22 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/sections/sbJson_spatial.rb +49 -0
- data/lib/adiwg/mdtranslator/writers/sbJson/version.rb +13 -0
- data/test/readers/mdJson/v1/tc_reader_mdjson_translation.rb +83 -0
- data/test/readers/sbJson/v0/tc_reader_sbjson_translation.rb +79 -0
- data/test/readers/sbJson/v0/test.json +431 -0
- data/test/readers/sbJson/v0/test1.json +383 -0
- data/test/writers/mdJson/v1/tc_writer_mdJson.rb +60 -0
- data/test/writers/sbJson/v0/tc_writer_sbJson.rb +60 -0
- metadata +121 -7
- 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
|
-
|
86
|
-
|
89
|
+
boxElement = Marshal.load(Marshal.dump(hGeoElement))
|
90
|
+
boxElement[:elementGeometry] = BoundingBox.unpack(aBBox, responseObj)
|
91
|
+
boxElement[:elementType] = 'BBOX'
|
87
92
|
|
88
|
-
|
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
|