package org.gbif.checklistbank.index.service; import com.google.common.base.Strings; import com.google.common.collect.BiMap; import com.google.common.collect.EnumHashBiMap; import com.google.common.collect.ImmutableMap; import org.gbif.api.model.checklistbank.search.NameUsageSearchParameter; import org.gbif.api.model.checklistbank.search.NameUsageSearchRequest; import java.util.Map; import java.util.UUID; /** * */ public class SolrMapping { public static final BiMap<NameUsageSearchParameter, String> FACET_MAPPING = EnumHashBiMap.create(NameUsageSearchParameter.class); static { FACET_MAPPING.put(NameUsageSearchParameter.DATASET_KEY, "dataset_key"); FACET_MAPPING.put(NameUsageSearchParameter.CONSTITUENT_KEY, "constituent_key"); FACET_MAPPING.put(NameUsageSearchParameter.HIGHERTAXON_KEY, "higher_taxon_key"); FACET_MAPPING.put(NameUsageSearchParameter.ORIGIN, "origin_key"); FACET_MAPPING.put(NameUsageSearchParameter.STATUS, "taxonomic_status_key"); FACET_MAPPING.put(NameUsageSearchParameter.RANK, "rank_key"); FACET_MAPPING.put(NameUsageSearchParameter.THREAT, "threat_status_key"); FACET_MAPPING.put(NameUsageSearchParameter.IS_EXTINCT, "extinct"); FACET_MAPPING.put(NameUsageSearchParameter.NOMENCLATURAL_STATUS, "nomenclatural_status_key"); FACET_MAPPING.put(NameUsageSearchParameter.NAME_TYPE, "name_type"); FACET_MAPPING.put(NameUsageSearchParameter.HABITAT, "habitat_key"); FACET_MAPPING.put(NameUsageSearchParameter.ISSUE, "issues"); } public static final Map<NameUsageSearchRequest.QueryField, String> HIGHLIGHT_FIELDS = ImmutableMap.of( NameUsageSearchRequest.QueryField.DESCRIPTION, "description", NameUsageSearchRequest.QueryField.VERNACULAR, "vernacular_name" ); /** * Converts a solr string value into the proper java instance. */ public static String interpretSolrValue(NameUsageSearchParameter param, String value) { if (Strings.isNullOrEmpty(value)) return null; if (Enum.class.isAssignableFrom(param.type())) { Class<Enum<?>> vocab = (Class<Enum<?>>) param.type(); return vocab.getEnumConstants()[Integer.valueOf(value)].name(); } else if (UUID.class.isAssignableFrom(param.type())) { return UUID.fromString(value).toString(); } else if (Double.class.isAssignableFrom(param.type())) { return String.valueOf(Double.parseDouble(value)); } else if (Integer.class.isAssignableFrom(param.type())) { return String.valueOf(Integer.parseInt(value)); } else if (Boolean.class.isAssignableFrom(param.type())) { return String.valueOf(Boolean.parseBoolean(value)); } return value; } }