class SearchSolrTools::Translators::NsidcJsonToSolr

Translates NSIDC JSON format to Solr JSON add format

Constants

PARAMETER_PARTS

Public Instance Methods

convert_spatial_coverages(nsidc_geom) click to toggle source

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize

# File lib/search_solr_tools/translators/nsidc_json.rb, line 65
def convert_spatial_coverages(nsidc_geom)
  geometries = []
  nsidc_geom.each do |entry|
    geometries << RGeo::GeoJSON.decode(entry['geom4326'])
  end
  geometries
end
generate_data_citation_creators(data_citation) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 219
def generate_data_citation_creators(data_citation)
  data_citation.nil? ? [] : data_citation['creators']
end
generate_part_array(json, limit_values = nil) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 223
def generate_part_array(json, limit_values = nil)
  parts = []
  json = json.select { |k, _v| limit_values.include?(k) } unless limit_values.nil? || limit_values.empty?

  json.each do |_k, v|
    parts << v unless v.to_s.empty?
  end

  parts
end
translate(json_doc) click to toggle source

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize

# File lib/search_solr_tools/translators/nsidc_json.rb, line 18
def translate(json_doc)
  copy_keys = %w[title summary keywords brokered]
  temporal_coverage_values = Helpers::TranslateTemporalCoverage.translate_coverages json_doc['temporalCoverages']
  spatial_coverages = convert_spatial_coverages(json_doc['spatialCoverages'])

  solr_add_hash = json_doc.select { |k, _v| copy_keys.include?(k) }
  solr_add_hash.merge!(
    'authoritative_id'          => json_doc['authoritativeId'],
    'dataset_version'           => json_doc['majorVersion']['version'],
    'data_centers'              => Helpers::SolrFormat::DATA_CENTER_NAMES[:NSIDC][:long_name],
    'facet_data_center'         => "#{Helpers::SolrFormat::DATA_CENTER_NAMES[:NSIDC][:long_name]} | #{Helpers::SolrFormat::DATA_CENTER_NAMES[:NSIDC][:short_name]}",
    'cumulus'                   => json_doc['cumulus'],
    'authors'                   => translate_personnel_and_creators_to_authors(json_doc['personnel'], generate_data_citation_creators(json_doc['dataCitation'])),
    'topics'                    => translate_iso_topic_categories(json_doc['isoTopicCategories']),
    'parameters'                => translate_parameters(json_doc['parameters']),
    'full_parameters'           => translate_json_string(json_doc['parameters'], PARAMETER_PARTS),
    'facet_parameter'           => translate_parameters_to_facet_parameters(json_doc['parameters']),
    'platforms'                 => translate_json_string(json_doc['platforms']),
    'sensors'                   => translate_json_string(json_doc['instruments']),
    'facet_sensor'              => translate_sensor_to_facet_sensor(json_doc['instruments']),
    'published_date'            => (Helpers::SolrFormat.date_str json_doc['releaseDate']),
    'spatial_coverages'         => Helpers::TranslateSpatialCoverage.geojson_to_spatial_display_str(spatial_coverages),
    'spatial'                   => Helpers::TranslateSpatialCoverage.geojson_to_spatial_index_str(spatial_coverages),
    'spatial_area'              => Helpers::TranslateSpatialCoverage.geojson_to_spatial_area(spatial_coverages),
    'facet_spatial_scope'       => Helpers::TranslateSpatialCoverage.geojson_to_spatial_scope_facet(spatial_coverages),
    'temporal_coverages'        => temporal_coverage_values['temporal_coverages'],
    'temporal_duration'         => temporal_coverage_values['temporal_duration'],
    'temporal'                  => temporal_coverage_values['temporal'],
    'facet_temporal_duration'   => temporal_coverage_values['facet_temporal_duration'],
    'last_revision_date'        => (Helpers::SolrFormat.date_str json_doc['lastRevisionDate']),
    'dataset_url'               => json_doc['datasetUrl'],
    'distribution_formats'      => json_doc['distributionFormats'],
    'facet_format'              => json_doc['distributionFormats'].empty? ? [Helpers::SolrFormat::NOT_SPECIFIED] : translate_format_to_facet_format(json_doc['distributionFormats']),
    'source'                    => %w[NSIDC ADE],
    'popularity'                => json_doc['popularity'],
    'data_access_urls'          => translate_data_access_urls(json_doc['dataAccessLinks']),
    'facet_sponsored_program'   => translate_short_long_names_to_facet_value(json_doc['internalDataCenters']),
    'facet_temporal_resolution' => translate_temporal_resolution_facet_values(json_doc['parameters']),
    'facet_spatial_resolution'  => translate_spatial_resolution_facet_values(json_doc['parameters']),
    'sponsored_programs'        => translate_internal_datacenters(json_doc['internalDataCenters']),
    'facet_storage_location'    => translate_storage_location(json_doc),
    'facet_spatial_coverage'    => Helpers::TranslateSpatialCoverage.geojson_to_global_facet(spatial_coverages)
  )
end
translate_data_access_urls(json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 111
def translate_data_access_urls(json)
  values = []
  return values if json.nil?

  json.each do |json_entry|
    link_display = json_entry['displayText'].nil? ? '' : json_entry['displayText']
    link_type = json_entry['type'].nil? ? '' : json_entry['type']
    link_uri = json_entry['uri'].nil? ? '' : json_entry['uri']
    link_desc = json_entry['description'].nil? ? '' : json_entry['description']

    values << "#{link_display} | #{link_type} | #{link_uri} | #{link_desc}"
  end
  values
end
translate_format_to_facet_format(format_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 188
def translate_format_to_facet_format(format_json)
  return [] if format_json.nil?

  facet_format = []

  format_json.each do |format|
    facet_format << Helpers::SolrFormat.facet_binning('format', format)
  end
  facet_format
end
translate_internal_datacenters(json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 126
def translate_internal_datacenters(json)
  values = []
  return values if json.nil?

  json.each do |json_entry|
    short_name = json_entry['shortName'].nil? ? '' : json_entry['shortName']
    values << short_name
  end
  values
end
translate_iso_topic_categories(iso_topic_categories_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 107
def translate_iso_topic_categories(iso_topic_categories_json)
  iso_topic_categories_json&.map { |t| t['name'] }
end
translate_json_string(json, limit_values = nil) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 199
def translate_json_string(json, limit_values = nil)
  json_strings = []

  json.each do |item|
    json_string = generate_part_array(item, limit_values).join(' > ')
    json_strings << json_string unless json_string.empty?
  end

  json_strings.uniq
end
translate_parameters(parameters_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 169
def translate_parameters(parameters_json)
  parameters = []
  parameters_json.each do |param_json|
    parameters.concat(generate_part_array(param_json, PARAMETER_PARTS))
  end
  parameters
end
translate_parameters_to_facet_parameters(parameters_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 177
def translate_parameters_to_facet_parameters(parameters_json)
  parameters_strings = translate_json_string(parameters_json, PARAMETER_PARTS)
  return [] if parameters_strings.nil?

  facet_params = []
  parameters_strings.each do |str|
    facet_params << Helpers::SolrFormat.parameter_binning(str)
  end
  facet_params
end
translate_personnel_and_creators_to_authors(personnel_json, creator_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 150
def translate_personnel_and_creators_to_authors(personnel_json, creator_json)
  author_set = (personnel_json.to_a | creator_json.to_a)

  authors = author_set.map do |author|
    first  = author['firstName'].to_s
    middle = author['middleName'].to_s
    last   = author['lastName'].to_s

    full = [first, middle, last].reject(&:empty?)
    full.join(' ').strip
  end

  authors.reject! do |author|
    author.empty? || author == 'NSIDC User Services'
  end

  authors.uniq
end
translate_sensor_to_facet_sensor(json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 73
def translate_sensor_to_facet_sensor(json)
  facet_values = []
  return facet_values if json.nil?

  json.each do |json_entry|
    long_name = json_entry['shortName'].eql?(json_entry['longName']) ? '' : json_entry['longName']
    sensor_bin = Helpers::SolrFormat.facet_binning('sensor', json_entry['shortName'].to_s)
    facet_values << if sensor_bin.eql? json_entry['shortName']
                      "#{long_name} | #{json_entry['shortName']}"
                    else
                      " | #{sensor_bin}"
                    end
  end
  facet_values
end
translate_short_long_names_to_facet_value(json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 137
def translate_short_long_names_to_facet_value(json)
  facet_values = []
  return facet_values if json.nil?

  json.each do |json_entry|
    long_name = json_entry['longName'].nil? ? '' : json_entry['longName']
    short_name = json_entry['shortName'].nil? ? '' : json_entry['shortName']

    facet_values << "#{long_name} | #{short_name}"
  end
  facet_values
end
translate_spatial_resolution_facet_values(parameters_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 98
def translate_spatial_resolution_facet_values(parameters_json)
  spatial_resolutions = []
  parameters_json.each do |param_json|
    binned_res = Helpers::SolrFormat.resolution_value(param_json['spatialYResolution'], :find_index_for_single_spatial_resolution_value, Helpers::SolrFormat::SPATIAL_RESOLUTION_FACET_VALUES)
    spatial_resolutions << binned_res unless binned_res.to_s.empty?
  end
  spatial_resolutions.flatten.uniq
end
translate_storage_location(json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 210
def translate_storage_location(json)
  facet_storage = []

  # Add the Earthdata Cloud feature
  facet_storage << 'In Earthdata Cloud' if json['cumulus']

  facet_storage
end
translate_temporal_resolution_facet_values(parameters_json) click to toggle source
# File lib/search_solr_tools/translators/nsidc_json.rb, line 89
def translate_temporal_resolution_facet_values(parameters_json)
  temporal_resolutions = []
  parameters_json.each do |param_json|
    binned_temporal_res = Helpers::SolrFormat.resolution_value(param_json['temporalResolution'], :find_index_for_single_temporal_resolution_value, Helpers::SolrFormat::TEMPORAL_RESOLUTION_FACET_VALUES)
    temporal_resolutions << binned_temporal_res unless binned_temporal_res.to_s.empty?
  end
  temporal_resolutions.flatten.uniq
end