/**
* 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.submit.lookup;
import gr.ekt.bte.core.Record;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpException;
import org.dspace.core.Context;
import org.jdom.JDOMException;
import org.xml.sax.SAXException;
/**
* @author Andrea Bollini
* @author Kostas Stamatis
* @author Luigi Andrea Pascarelli
* @author Panagiotis Koutsourakis
*/
public class CrossRefOnlineDataLoader extends NetworkSubmissionLookupDataLoader
{
protected CrossRefService crossrefService = new CrossRefService();
protected boolean searchProvider = true;
protected String apiKey = null;
protected int maxResults = 10;
public void setSearchProvider(boolean searchProvider)
{
this.searchProvider = searchProvider;
}
public void setCrossrefService(CrossRefService crossrefService)
{
this.crossrefService = crossrefService;
}
@Override
public List<String> getSupportedIdentifiers()
{
return Arrays.asList(new String[] { DOI });
}
@Override
public List<Record> getByIdentifier(Context context,
Map<String, Set<String>> keys) throws HttpException, IOException
{
if (keys != null && keys.containsKey(DOI))
{
Set<String> dois = keys.get(DOI);
List<Record> items = null;
List<Record> results = new ArrayList<Record>();
if (getApiKey() == null){
throw new RuntimeException("No CrossRef API key is specified!");
}
try
{
items = crossrefService.search(context, dois, getApiKey());
}
catch (JDOMException e)
{
throw new RuntimeException(e.getMessage(), e);
}
catch (ParserConfigurationException e)
{
throw new RuntimeException(e.getMessage(), e);
}
catch (SAXException e)
{
throw new RuntimeException(e.getMessage(), e);
}
for (Record record : items)
{
results.add(convertFields(record));
}
return results;
}
return null;
}
@Override
public List<Record> search(Context context, String title, String author,
int year) throws HttpException, IOException
{
if (getApiKey() == null){
throw new RuntimeException("No CrossRef API key is specified!");
}
List<Record> items = crossrefService.search(context, title, author,
year, getMaxResults(), getApiKey());
return items;
}
@Override
public boolean isSearchProvider()
{
return searchProvider;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
}