adiwg-mdtranslator 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +24 -0
  6. data/README.md +31 -0
  7. data/Rakefile +13 -0
  8. data/adiwg-mdtranslator.gemspec +31 -0
  9. data/bin/mdtranslator +164 -0
  10. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
  11. data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
  12. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
  13. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
  14. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
  15. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
  16. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
  17. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
  18. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
  19. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
  20. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
  21. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
  22. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
  23. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
  24. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
  25. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
  26. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
  27. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
  28. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
  29. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
  30. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
  31. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
  32. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
  33. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
  34. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
  35. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
  36. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
  37. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
  38. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
  39. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
  40. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
  41. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
  42. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
  43. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
  44. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
  45. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
  46. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
  47. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
  48. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
  49. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
  50. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
  51. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
  52. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
  53. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
  54. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
  55. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
  56. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
  57. data/lib/adiwg/mdtranslator/validator.rb +43 -0
  58. data/lib/adiwg/mdtranslator/version.rb +7 -0
  59. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
  60. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
  61. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
  62. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
  63. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
  64. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
  65. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
  66. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
  67. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
  68. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
  69. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
  70. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
  71. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
  72. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
  73. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
  74. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
  75. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
  76. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
  77. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
  78. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
  79. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
  80. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
  81. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
  82. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
  83. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
  84. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
  85. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
  86. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
  87. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
  88. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
  89. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
  90. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
  91. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
  92. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
  93. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
  94. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
  95. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
  96. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
  97. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
  98. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
  99. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
  100. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
  101. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
  102. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
  103. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
  104. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
  105. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
  106. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
  107. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
  108. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
  109. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
  110. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
  111. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
  112. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
  113. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
  114. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
  115. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
  116. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
  117. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
  118. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
  119. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
  120. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
  121. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
  122. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
  123. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
  124. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
  125. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
  126. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
  127. data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
  128. data/lib/adiwg/mdtranslator.rb +97 -0
  129. data/lib/adiwg-mdtranslator.rb +1 -0
  130. data/mdtranslator.rb +178 -0
  131. data/test/adiwgJson_full_test_example.json +1717 -0
  132. data/test/adiwgJson_template.json +977 -0
  133. data/test/dev.rb +32 -0
  134. data/test/tc_translation.rb +31 -0
  135. metadata +317 -0
@@ -0,0 +1,49 @@
1
+ # unpack descriptive keyword
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-09-18 original script
6
+ # Stan Smith 2013-11-27 modified to process single keyword collection
7
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
8
+ # Stan Smith 2014-08-21 removed thesaurus link; replaced by onlineResource to citation
9
+ # Stan Smith 2014-08-21 removed extra level of encapsulation "citation" under "thesaurus"
10
+
11
+ require ADIWG::Mdtranslator.reader_module('module_citation', $response[:readerVersionUsed])
12
+
13
+ module Adiwg_DescriptiveKeyword
14
+
15
+ def self.unpack(hDesKeyword)
16
+
17
+ # instance classes needed in script
18
+ intMetadataClass = InternalMetadata.new
19
+ intKeyword = intMetadataClass.newKeyword
20
+
21
+ # descriptive keyword - keyword array
22
+ if hDesKeyword.has_key?('keyword')
23
+ aKeywords = hDesKeyword['keyword']
24
+ aKeywords.each do |keyword|
25
+ intKeyword[:keyword] << keyword
26
+ end
27
+ end
28
+
29
+ # descriptive keyword - keyType
30
+ if hDesKeyword.has_key?('keywordType')
31
+ s = hDesKeyword['keywordType']
32
+ if s != ''
33
+ intKeyword[:keywordType] = s
34
+ end
35
+ end
36
+
37
+ # descriptive keyword - thesaurus
38
+ if hDesKeyword.has_key?('thesaurus')
39
+ hCitation = hDesKeyword['thesaurus']
40
+ unless hCitation.empty?
41
+ intKeyword[:keyTheCitation] = Adiwg_Citation.unpack(hCitation)
42
+ end
43
+
44
+ end
45
+
46
+ return intKeyword
47
+ end
48
+
49
+ end
@@ -0,0 +1,150 @@
1
+ # unpack distribution info
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-09-23 original script
6
+ # Stan Smith 2013-11-27 changed to receive single distributor rather than array
7
+ # Stan Smith 2013-12-18 changed to unpack contact using responsible party
8
+ # Stan Smith 2014-05-02 changed to support responsible party as hash, not array
9
+ # Stan Smith 2014-07-08 resolve require statements using Mdtranslator.reader_module
10
+
11
+ require ADIWG::Mdtranslator.reader_module('module_onlineResource', $response[:readerVersionUsed])
12
+ require ADIWG::Mdtranslator.reader_module('module_dateTime', $response[:readerVersionUsed])
13
+ require ADIWG::Mdtranslator.reader_module('module_responsibleParty', $response[:readerVersionUsed])
14
+
15
+ module Adiwg_DistributionInfo
16
+
17
+ def self.unpack(hDistributor)
18
+
19
+ # instance classes needed in script
20
+ intMetadataClass = InternalMetadata.new
21
+ intDistributor = intMetadataClass.newDistributor
22
+
23
+ # distributor - distribution contact
24
+ if hDistributor.has_key?('distributorContact')
25
+ hContact = hDistributor['distributorContact']
26
+ unless hContact.empty?
27
+ intDistributor[:distContact] = Adiwg_ResponsibleParty.unpack(hContact)
28
+ end
29
+ end
30
+
31
+ # distributor - distribution order process
32
+ if hDistributor.has_key?('distributionOrderProcess')
33
+ aDistOrder = hDistributor['distributionOrderProcess']
34
+ unless aDistOrder.empty?
35
+ aDistOrder.each do |distOrderProcess|
36
+
37
+ intDistOrder = intMetadataClass.newDistOrder
38
+
39
+ if distOrderProcess.has_key?('fees')
40
+ s = distOrderProcess['fees']
41
+ if s != ''
42
+ intDistOrder[:fees] = s
43
+ end
44
+ end
45
+
46
+ if distOrderProcess.has_key?('plannedAvailabilityDateTime')
47
+ s = distOrderProcess['plannedAvailabilityDateTime']
48
+ if s != ''
49
+ intDistOrder[:plannedDateTime] = Adiwg_DateTime.unpack(s)
50
+ end
51
+ end
52
+
53
+ if distOrderProcess.has_key?('orderingInstructions')
54
+ s = distOrderProcess['orderingInstructions']
55
+ if s != ''
56
+ intDistOrder[:orderInstructions] = s
57
+ end
58
+ end
59
+
60
+ if distOrderProcess.has_key?('turnaround')
61
+ s = distOrderProcess['turnaround']
62
+ if s != ''
63
+ intDistOrder[:turnaround] = s
64
+ end
65
+ end
66
+
67
+ intDistributor[:distOrderProc] << intDistOrder
68
+
69
+ end
70
+ end
71
+ end
72
+
73
+ # distributor - distribution format
74
+ if hDistributor.has_key?('distributorFormat')
75
+ aDistFormat = hDistributor['distributorFormat']
76
+ unless aDistFormat.empty?
77
+
78
+ aDistFormat.each do |distFormat|
79
+ intResFormat = intMetadataClass.newResourceFormat
80
+
81
+ if distFormat.has_key?('formatName')
82
+ s = distFormat['formatName']
83
+ if s != ''
84
+ intResFormat[:formatName] = s
85
+ end
86
+ end
87
+
88
+ if distFormat.has_key?('version')
89
+ s = distFormat['version']
90
+ if s != ''
91
+ intResFormat[:formatVersion] = s
92
+ end
93
+ end
94
+
95
+ intDistributor[:distFormat] << intResFormat
96
+ end
97
+ end
98
+ end
99
+
100
+ # distributor - distribution transfer options
101
+ if hDistributor.has_key?('distributorTransferOptions')
102
+ aDistTransOpt = hDistributor['distributorTransferOptions']
103
+ unless aDistTransOpt.empty?
104
+
105
+ aDistTransOpt.each do |distTransOpt|
106
+ intTransOpt = intMetadataClass.newDigitalTransOption
107
+
108
+ if distTransOpt.has_key?('online')
109
+ aOnlineOption = distTransOpt['online']
110
+ aOnlineOption.each do |hOlOption|
111
+ intTransOpt[:online] << Adiwg_OnlineResource.unpack(hOlOption)
112
+ end
113
+ end
114
+
115
+ if distTransOpt.has_key?('offline')
116
+ intOfflineOpt = intMetadataClass.newMedium
117
+ distOfflineOpt = distTransOpt['offline']
118
+ if distOfflineOpt.has_key?('name')
119
+ s = distOfflineOpt['name']
120
+ if s != ''
121
+ intOfflineOpt[:mediumName] = s
122
+ end
123
+ end
124
+
125
+ if distOfflineOpt.has_key?('mediumFormat')
126
+ s = distOfflineOpt['mediumFormat']
127
+ if s != ''
128
+ intOfflineOpt[:mediumFormat] = s
129
+ end
130
+ end
131
+
132
+ if distOfflineOpt.has_key?('mediumNote')
133
+ s = distOfflineOpt['mediumNote']
134
+ if s != ''
135
+ intOfflineOpt[:mediumNote] = s
136
+ end
137
+ end
138
+
139
+ intTransOpt[:offline] = intOfflineOpt
140
+ end
141
+
142
+ intDistributor[:distTransOption] << intTransOpt
143
+ end
144
+ end
145
+ end
146
+
147
+ return intDistributor
148
+ end
149
+
150
+ end
@@ -0,0 +1,62 @@
1
+ # unpack extent
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-04 original script
6
+ # Stan Smith 2013-11-14 add temporal elements
7
+ # Stan Smith 2013-11-14 add vertical elements
8
+ # Stan Smith 2013-11-27 modified to process a single extent
9
+ # Stan Smith 2013-12-05 modified to for new temporalElement schema
10
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
11
+
12
+ require ADIWG::Mdtranslator.reader_module('module_geographicElement', $response[:readerVersionUsed])
13
+ require ADIWG::Mdtranslator.reader_module('module_temporalElement', $response[:readerVersionUsed])
14
+ require ADIWG::Mdtranslator.reader_module('module_verticalElement', $response[:readerVersionUsed])
15
+
16
+ module Adiwg_Extent
17
+
18
+ def self.unpack(hExtent)
19
+
20
+ # instance classes needed in script
21
+ intMetadataClass = InternalMetadata.new
22
+ intExtent = intMetadataClass.newExtent
23
+
24
+ # extent - description
25
+ if hExtent.has_key?('description')
26
+ s = hExtent['description']
27
+ if s != ''
28
+ intExtent[:extDesc] = s
29
+ end
30
+ end
31
+
32
+ # extent - geographic elements
33
+ if hExtent.has_key?('geographicElement')
34
+ aGeoElements = hExtent['geographicElement']
35
+ unless aGeoElements.empty?
36
+ intExtent[:extGeoElements] = Adiwg_GeographicElement.unpack(aGeoElements)
37
+ end
38
+ end
39
+
40
+ # extent - temporal elements
41
+ if hExtent.has_key?('temporalElement')
42
+ hTempElement = hExtent['temporalElement']
43
+ unless hTempElement.empty?
44
+ intExtent[:extTempElements] = Adiwg_TemporalElement.unpack(hTempElement)
45
+ end
46
+ end
47
+
48
+ # extent - vertical elements
49
+ if hExtent.has_key?('verticalElement')
50
+ aVertElements = hExtent['verticalElement']
51
+ unless aVertElements.empty?
52
+ aVertElements.each do |hVertElement|
53
+ intExtent[:extVertElements] << Adiwg_VerticalElement.unpack(hVertElement)
54
+ end
55
+ end
56
+ end
57
+
58
+ return intExtent
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,46 @@
1
+ # unpack GeoJSON properties
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2014-04-30 original script
6
+
7
+ module Adiwg_GeoCoordSystem
8
+
9
+ def self.unpack(hGeoCrs, intElement)
10
+
11
+ intMetadataClass = InternalMetadata.new
12
+ intSRS = intMetadataClass.newSRS
13
+
14
+ # get coordinate reference system
15
+ # null crs will default to CRS84 in writer
16
+ if hGeoCrs.has_key?('properties')
17
+ hCRSProp = hGeoCrs['properties']
18
+
19
+ if hCRSProp.has_key?('name')
20
+ s = hCRSProp['name']
21
+ if s != ''
22
+ intSRS[:srsName] = s
23
+ end
24
+ end
25
+
26
+ if hCRSProp.has_key?('href')
27
+ s = hCRSProp['href']
28
+ if s != ''
29
+ intSRS[:srsHref] = s
30
+ end
31
+ end
32
+
33
+ if hCRSProp.has_key?('type')
34
+ s = hCRSProp['type']
35
+ if s != ''
36
+ intSRS[:srsType] = s
37
+ end
38
+ end
39
+
40
+ intElement[:elementSrs] = intSRS
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,89 @@
1
+ # unpack GeoJSON properties
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2014-04-29 original script
6
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
7
+ # Stan Smith 2014-08-18 changed assignedId to identifier schema 0.6.0
8
+
9
+ require ADIWG::Mdtranslator.reader_module('module_temporalElement', $response[:readerVersionUsed])
10
+ require ADIWG::Mdtranslator.reader_module('module_verticalElement', $response[:readerVersionUsed])
11
+ require ADIWG::Mdtranslator.reader_module('module_resourceIdentifier', $response[:readerVersionUsed])
12
+
13
+ module Adiwg_GeoProperties
14
+
15
+ def self.unpack(hGeoProps, intElement)
16
+
17
+ # set element extent - (default true)
18
+ intElement[:elementIncludeData] = true
19
+ if hGeoProps.has_key?('includesData')
20
+ if !hGeoProps['includesData']
21
+ intElement[:elementIncludeData] = false
22
+ end
23
+ end
24
+
25
+ # set element feature name
26
+ if hGeoProps.has_key?('featureName')
27
+ s = hGeoProps['featureName']
28
+ if s != ''
29
+ intElement[:elementName] = s
30
+ end
31
+ end
32
+
33
+ # set element description
34
+ if hGeoProps.has_key?('description')
35
+ s = hGeoProps['description']
36
+ if s != ''
37
+ intElement[:elementDescription] = s
38
+ end
39
+ end
40
+
41
+ # set temporal information
42
+ if hGeoProps.has_key?('temporalElement')
43
+ hTempEle = hGeoProps['temporalElement']
44
+ unless hTempEle.empty?
45
+ intElement[:temporalElements] = Adiwg_TemporalElement.unpack(hTempEle)
46
+ end
47
+ end
48
+
49
+ # set vertical information
50
+ if hGeoProps.has_key?('verticalElement')
51
+ aVertEle = hGeoProps['verticalElement']
52
+ unless aVertEle.empty?
53
+ aVertEle.each do |hVertEle|
54
+ intElement[:verticalElements] << Adiwg_VerticalElement.unpack(hVertEle)
55
+ end
56
+ end
57
+ end
58
+
59
+ # set other assigned IDs
60
+ if hGeoProps.has_key?('identifier')
61
+ aResIds = hGeoProps['identifier']
62
+ unless aResIds.empty?
63
+ aResIds.each do |hIdentifier|
64
+ intElement[:elementIdentifiers] << Adiwg_ResourceIdentifier.unpack(hIdentifier)
65
+ end
66
+ end
67
+ end
68
+
69
+ # set feature scope
70
+ if hGeoProps.has_key?('featureScope')
71
+ s = hGeoProps['featureScope']
72
+ if s != ''
73
+ intElement[:elementScope] = s
74
+ end
75
+ end
76
+
77
+ # set feature acquisition methodology
78
+ if hGeoProps.has_key?('featureAcquisitionMethod')
79
+ s = hGeoProps['featureAcquisitionMethod']
80
+ if s != ''
81
+ intElement[:elementAcquisition] = s
82
+ end
83
+ end
84
+
85
+ return intElement
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,168 @@
1
+ # unpack geographic element
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+ # determine element type
4
+
5
+ # History:
6
+ # Stan Smith 2013-11-04 original script
7
+ # Stan Smith 2013-11-13 added line string
8
+ # Stan Smith 2013-11-13 added multi line string
9
+ # Stan Smith 2013-11-18 added polygon
10
+ # Stan Smith 2014-04-30 complete redesign for json schema 0.3.0
11
+ # Stan Smith 2014-05-22 added multi polygon
12
+ # Stan Smith 2014-05-23 cleaned up hash copy problem by using Marshal
13
+ # Stan Smith 2014-05-23 added direct geometry support for Point, Line, Polygon
14
+ # Stan Smith 2014-05-23 added direct geometry support for MultiPoint, MultiLine, MultiPolygon
15
+ # Stan Smith 2014-05-23 added direct support for geometryCollection
16
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
17
+
18
+ require ADIWG::Mdtranslator.reader_module('module_geoCoordSystem', $response[:readerVersionUsed])
19
+ require ADIWG::Mdtranslator.reader_module('module_geoProperties', $response[:readerVersionUsed])
20
+ require ADIWG::Mdtranslator.reader_module('module_boundingBox', $response[:readerVersionUsed])
21
+ require ADIWG::Mdtranslator.reader_module('module_point', $response[:readerVersionUsed])
22
+ require ADIWG::Mdtranslator.reader_module('module_lineString', $response[:readerVersionUsed])
23
+ require ADIWG::Mdtranslator.reader_module('module_polygon', $response[:readerVersionUsed])
24
+
25
+ module Adiwg_GeographicElement
26
+
27
+ def self.unpack(aGeoElements)
28
+
29
+ # only one geometry is allowed per geographic element.
30
+ # ... in GeoJSON each geometry is allowed a bounding box;
31
+ # ... This code splits bounding boxes to separate elements
32
+
33
+ # instance classes needed in script
34
+ aIntGeoEle = Array.new
35
+
36
+ aGeoElements.each do |hGeoJsonElement|
37
+
38
+ # instance classes needed in script
39
+ intMetadataClass = InternalMetadata.new
40
+ hGeoElement = intMetadataClass.newGeoElement
41
+
42
+ # find geographic element type
43
+ if hGeoJsonElement.has_key?('type')
44
+ elementType = hGeoJsonElement['type']
45
+ else
46
+ # invalid geographic element
47
+ return nil
48
+ end
49
+
50
+ # set geographic element id
51
+ if hGeoJsonElement.has_key?('id')
52
+ s = hGeoJsonElement['id']
53
+ if s != ''
54
+ hGeoElement[:elementId] = s
55
+ end
56
+ end
57
+
58
+ # set geographic element coordinate reference system - CRS
59
+ if hGeoJsonElement.has_key?('crs')
60
+ hGeoCrs = hGeoJsonElement['crs']
61
+ Adiwg_GeoCoordSystem.unpack(hGeoCrs, hGeoElement)
62
+ end
63
+
64
+ # set geographic element properties
65
+ if hGeoJsonElement.has_key?('properties')
66
+ hGeoProps = hGeoJsonElement['properties']
67
+ Adiwg_GeoProperties.unpack(hGeoProps, hGeoElement)
68
+ end
69
+
70
+ # process geographic element bounding box
71
+ # the bounding box must be represented as a separate geographic element for ISO
72
+ # need to make a deep copy of current state of geographic element for bounding box
73
+ if hGeoJsonElement.has_key?('bbox')
74
+ if hGeoJsonElement['bbox'].length == 4
75
+ aBBox = hGeoJsonElement['bbox']
76
+
77
+ boxElement = Marshal.load(Marshal.dump(hGeoElement))
78
+ boxElement[:elementGeometry] = Adiwg_BoundingBox.unpack(aBBox)
79
+
80
+ aIntGeoEle << boxElement
81
+ end
82
+ end
83
+
84
+ # unpack geographic element
85
+ case elementType
86
+
87
+ # GeoJSON Features
88
+ when 'Feature'
89
+ if hGeoJsonElement.has_key?('geometry')
90
+ hGeometry = hGeoJsonElement['geometry']
91
+
92
+ # geoJSON requires geometry to be 'null' when geometry is bounding box only
93
+ # JSON null converts in parsing to ruby nil
94
+ unless hGeometry.nil?
95
+ unless hGeometry.empty?
96
+ if hGeometry.has_key?('type')
97
+ geometryType = hGeometry['type']
98
+ aCoordinates = hGeometry['coordinates']
99
+ unless aCoordinates.empty?
100
+ case geometryType
101
+ when 'Point', 'MultiPoint'
102
+ hGeoElement[:elementGeometry] = Adiwg_Point.unpack(aCoordinates, geometryType)
103
+ when 'LineString', 'MultiLineString'
104
+ hGeoElement[:elementGeometry] = Adiwg_LineString.unpack(aCoordinates, geometryType)
105
+ when 'Polygon', 'MultiPolygon'
106
+ hGeoElement[:elementGeometry] = Adiwg_Polygon.unpack(aCoordinates, geometryType)
107
+ else
108
+ # log - the GeoJSON geometry type is not supported
109
+ end
110
+ aIntGeoEle << hGeoElement
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ end
117
+
118
+ # GeoJSON Feature Collection
119
+ when 'FeatureCollection'
120
+ if hGeoJsonElement.has_key?('features')
121
+ aFeatures = hGeoJsonElement['features']
122
+ unless aFeatures.empty?
123
+ intGeometry = intMetadataClass.newGeometry
124
+ intGeometry[:geoType] = 'MultiGeometry'
125
+ intGeometry[:geometry] = Adiwg_GeographicElement.unpack(aFeatures)
126
+ hGeoElement[:elementGeometry] = intGeometry
127
+ aIntGeoEle << hGeoElement
128
+ end
129
+ end
130
+
131
+ # GeoJSON Geometries
132
+ when 'Point', 'MultiPoint'
133
+ aCoordinates = hGeoJsonElement['coordinates']
134
+ hGeoElement[:elementGeometry] = Adiwg_Point.unpack(aCoordinates, elementType)
135
+ aIntGeoEle << hGeoElement
136
+
137
+ when 'LineString', 'MultiLineString'
138
+ aCoordinates = hGeoJsonElement['coordinates']
139
+ hGeoElement[:elementGeometry] = Adiwg_LineString.unpack(aCoordinates, elementType)
140
+ aIntGeoEle << hGeoElement
141
+
142
+ when 'Polygon', 'MultiPolygon'
143
+ aCoordinates = hGeoJsonElement['coordinates']
144
+ hGeoElement[:elementGeometry] = Adiwg_Polygon.unpack(aCoordinates, elementType)
145
+ aIntGeoEle << hGeoElement
146
+
147
+ # GeoJSON Geometry Collection
148
+ when 'GeometryCollection'
149
+ if hGeoJsonElement.has_key?('geometries')
150
+ aGeometries = hGeoJsonElement['geometries']
151
+ unless aGeometries.empty?
152
+ intGeometry = intMetadataClass.newGeometry
153
+ intGeometry[:geoType] = 'MultiGeometry'
154
+ intGeometry[:geometry] = Adiwg_GeographicElement.unpack(aGeometries)
155
+ hGeoElement[:elementGeometry] = intGeometry
156
+ aIntGeoEle << hGeoElement
157
+ end
158
+ end
159
+
160
+ end
161
+
162
+ end
163
+
164
+ return aIntGeoEle
165
+
166
+ end
167
+
168
+ end
@@ -0,0 +1,45 @@
1
+ # unpack legal constraint
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-14 original script
6
+ # Stan Smith 2013-11-27 modified to process a single legal constraint
7
+ # Stan Smith 2014-04-28 modified attribute names to match json schema 0.3.0
8
+
9
+ module Adiwg_LegalConstraints
10
+
11
+ def self.unpack(hLegalCon)
12
+
13
+ # instance classes needed in script
14
+ intMetadataClass = InternalMetadata.new
15
+ hIntCon = intMetadataClass.newLegalConstraint
16
+
17
+ # legal constraint - access code
18
+ if hLegalCon.has_key?('accessConstraint')
19
+ aAccCodes = hLegalCon['accessConstraint']
20
+ unless aAccCodes.empty?
21
+ hIntCon[:accessCodes] = aAccCodes
22
+ end
23
+ end
24
+
25
+ # legal constraint - use code
26
+ if hLegalCon.has_key?('useConstraint')
27
+ aUseCodes = hLegalCon['useConstraint']
28
+ unless aUseCodes.empty?
29
+ hIntCon[:useCodes] = aUseCodes
30
+ end
31
+ end
32
+
33
+ # legal constraint - other constraints
34
+ if hLegalCon.has_key?('otherConstraint')
35
+ aOtherCons = hLegalCon['otherConstraint']
36
+ unless aOtherCons.empty?
37
+ hIntCon[:otherCons] = aOtherCons
38
+ end
39
+ end
40
+
41
+ return hIntCon
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,25 @@
1
+ # unpack line string
2
+ # line string is coded in GeoJSON
3
+ # Reader - ADIwg JSON V1 to internal data structure
4
+
5
+ # History:
6
+ # Stan Smith 2013-11-13 original script
7
+ # Stan Smith 2014-04-30 reorganized for json schema 0.3.0
8
+ # Stan Smith 2014-07-07 resolve require statements using Mdtranslator.reader_module
9
+
10
+ require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
11
+
12
+ module Adiwg_LineString
13
+
14
+ def self.unpack(aCoords, geoType)
15
+ intMetadataClass = InternalMetadata.new
16
+ intLine = intMetadataClass.newGeometry
17
+
18
+ intLine[:geoType] = geoType
19
+ intLine[:geometry] = aCoords
20
+ intLine[:dimension] = Adiwg_Coordinates.getDimension(aCoords)
21
+
22
+ return intLine
23
+ end
24
+
25
+ end
@@ -0,0 +1,50 @@
1
+ # unpack lineage
2
+ # Reader - ADIwg JSON V1 to internal data structure
3
+
4
+ # History:
5
+ # Stan Smith 2013-11-26 original script
6
+ # Stan Smith 2014-07-03 resolve require statements using Mdtranslator.reader_module
7
+
8
+ require ADIWG::Mdtranslator.reader_module('module_processStep', $response[:readerVersionUsed])
9
+ require ADIWG::Mdtranslator.reader_module('module_source', $response[:readerVersionUsed])
10
+
11
+ module Adiwg_Lineage
12
+
13
+ def self.unpack(hLineage)
14
+
15
+ # instance classes needed in script
16
+ intMetadataClass = InternalMetadata.new
17
+ intDataLine = intMetadataClass.newLineage
18
+
19
+ # lineage - statement
20
+ if hLineage.has_key?('statement')
21
+ s = hLineage['statement']
22
+ if s != ''
23
+ intDataLine[:statement] = s
24
+ end
25
+ end
26
+
27
+ # lineage - process steps
28
+ if hLineage.has_key?('processStep')
29
+ aProcSteps = hLineage['processStep']
30
+ unless aProcSteps.empty?
31
+ aProcSteps.each do |hProcStep|
32
+ intDataLine[:processSteps] << Adiwg_ProcessStep.unpack(hProcStep)
33
+ end
34
+ end
35
+ end
36
+
37
+ # lineage - data sources
38
+ if hLineage.has_key?('source')
39
+ aSources = hLineage['source']
40
+ unless aSources.empty?
41
+ aSources.each do |hSource|
42
+ intDataLine[:dataSources] << Adiwg_Source.unpack(hSource)
43
+ end
44
+ end
45
+ end
46
+
47
+ return intDataLine
48
+ end
49
+
50
+ end