/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.importer.external.pubmed.metadatamapping.contributor; import org.apache.log4j.Logger; import org.dspace.importer.external.metadatamapping.MetadataFieldConfig; import org.dspace.importer.external.metadatamapping.MetadataFieldMapping; import org.dspace.importer.external.metadatamapping.MetadatumDTO; import org.dspace.importer.external.metadatamapping.contributor.MetadataContributor; import java.util.*; /** * Pubmed specific implementation of {@link MetadataContributor} * Responsible for generating a set of Language metadata from the retrieved document. * * @author Philip Vissenaekens (philip at atmire dot com) */ public class PubmedLanguageMetadatumContributor<T> implements MetadataContributor<T> { Logger log = Logger.getLogger(PubmedDateMetadatumContributor.class); private MetadataFieldMapping<T,MetadataContributor<T>> metadataFieldMapping; private HashMap<String,String> iso3toIso2; private MetadataFieldConfig field; private MetadataContributor language; /** * Initialize PubmedLanguageMetadatumContributor and create the iso3toiso2 mapping used in the transforming of language codes */ public PubmedLanguageMetadatumContributor() { iso3toIso2 = new HashMap<>(); // Populate the languageMap with the mapping between iso3 and iso2 language codes for (Locale locale : Locale.getAvailableLocales()) { iso3toIso2.put(locale.getISO3Language(),locale.getLanguage()); } } /** * Initialize the PubmedLanguageMetadatumContributor class using a {@link org.dspace.importer.external.metadatamapping.MetadataFieldConfig} and a language -{@link org.dspace.importer.external.metadatamapping.contributor.MetadataContributor} * * @param field {@link org.dspace.importer.external.metadatamapping.MetadataFieldConfig} used in mapping * @param language the language. */ public PubmedLanguageMetadatumContributor(MetadataFieldConfig field, MetadataContributor language) { this(); this.field = field; this.language = language; } /** * Set the metadatafieldMapping used in the transforming of a record to actual metadata * * @param metadataFieldMapping the new mapping. */ @Override public void setMetadataFieldMapping(MetadataFieldMapping<T, MetadataContributor<T>> metadataFieldMapping) { this.metadataFieldMapping = metadataFieldMapping; language.setMetadataFieldMapping(metadataFieldMapping); } /** * * * @param t A class to retrieve metadata from. * @return a collection of import records. Only the identifier of the found records may be put in the record. */ @Override public Collection<MetadatumDTO> contributeMetadata(T t) { List<MetadatumDTO> values = new LinkedList<MetadatumDTO>(); try { LinkedList<MetadatumDTO> languageList = (LinkedList<MetadatumDTO>) language.contributeMetadata(t); for (MetadatumDTO metadatum : languageList) { // Add the iso2 language code corresponding to the retrieved iso3 code to the metadata values.add(metadataFieldMapping.toDCValue(field, iso3toIso2.get(metadatum.getValue().toLowerCase()))); } } catch (Exception e) { log.error("Error", e); } return values; } /** * Return the MetadataContributor used while retrieving MetadatumDTO * * @return MetadataContributor */ public MetadataContributor getLanguage() { return language; } /** * Setting the MetadataContributor * * @param language MetadataContributor used while retrieving MetadatumDTO */ public void setLanguage(MetadataContributor language) { this.language = language; } /** * Return the MetadataFieldConfig used while retrieving MetadatumDTO * * @return MetadataFieldConfig */ public MetadataFieldConfig getField() { return field; } /** * Setting the MetadataFieldConfig * * @param field MetadataFieldConfig used while retrieving MetadatumDTO */ public void setField(MetadataFieldConfig field) { this.field = field; } }