/**
* 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 org.apache.http.HttpException;
import org.dspace.core.Context;
/**
* Load metadata from CiNii RDF API
* @author Keiji Suzuki
*/
public class CiNiiOnlineDataLoader extends NetworkSubmissionLookupDataLoader
{
protected CiNiiService ciniiService = new CiNiiService();
protected boolean searchProvider = true;
/** Application id to use CiNii */
protected String appId = null;
/** max result number to return */
protected int maxResults = 10;
public void setCiNiiService(CiNiiService ciniiService)
{
this.ciniiService = ciniiService;
}
@Override
public List<String> getSupportedIdentifiers()
{
return Arrays.asList(new String[] { CINII });
}
public void setSearchProvider(boolean searchProvider)
{
this.searchProvider = searchProvider;
}
@Override
public boolean isSearchProvider()
{
return searchProvider;
}
@Override
public List<Record> getByIdentifier(Context context,
Map<String, Set<String>> keys) throws HttpException, IOException
{
if (appId == null)
{
throw new RuntimeException("No CiNii Application ID is specified!");
}
List<Record> results = new ArrayList<Record>();
if (keys != null)
{
Set<String> ciniiids = keys.get(CINII);
if (ciniiids != null && ciniiids.size() > 0)
{
for (String ciniiid : ciniiids)
{
Record record = ciniiService.getByCiNiiID(ciniiid, getAppId());
if (record != null)
{
results.add(convertFields(record));
}
}
}
}
return results;
}
@Override
public List<Record> search(Context context, String title, String author, int year)
throws HttpException, IOException
{
if (appId == null)
{
throw new RuntimeException("No CiNii Application ID is specified!");
}
return ciniiService.searchByTerm(title, author, year,
getMaxResults(), getAppId());
}
public String getAppId()
{
return appId;
}
public void setAppId(String appId)
{
this.appId = appId;
}
public int getMaxResults()
{
return maxResults;
}
public void setMaxResults(int maxResults)
{
this.maxResults = maxResults;
}
}