/**
* 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.transform;
import org.dspace.content.Item;
import org.dspace.content.MetadataValue;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService;
import org.dspace.importer.external.exception.MetadataSourceException;
import org.dspace.importer.external.datamodel.Query;
import org.dspace.importer.external.metadatamapping.transform.GenerateQueryService;
import java.util.List;
/**
* This class is an implementation of {@link GenerateQueryService}
* Represents a service that generates the pubmed query which is used to retrieve the records.
* This is based on a given item.
*
* @author Jonas - (jonas at atmire dot com)
*/
public class GeneratePubmedQueryService implements GenerateQueryService {
/**
* Create a Query object based on a given item.
* If the item has at least 1 value for dc.identifier.doi, the first one will be used.
* If no DOI is found, the title will be used.
* When no DOI or title is found, an null object is returned instead.
* @param item the Item to create a Query from
*/
@Override
public Query generateQueryForItem(Item item) throws MetadataSourceException {
Query query = new Query();
// Retrieve an instance of the ItemService to access business calls on an item.
ItemService itemService = ContentServiceFactory.getInstance().getItemService();
List<MetadataValue> doi = itemService.getMetadata(item, "dc", "identifier", "doi", Item.ANY);
if(doi.size()>0){
query.addParameter("term", doi.get(0).getValue());
query.addParameter("field","ELocationID");
return query;
}
List<MetadataValue> title = itemService.getMetadata(item, "dc", "title", null, Item.ANY);
if(title.size()>0) {
query.addParameter("term", title.get(0).getValue());
query.addParameter("field","title");
return query;
}
return null;
}
}