/**
* 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.service.components;
import org.dspace.content.Item;
import org.dspace.importer.external.exception.MetadataSourceException;
import org.dspace.importer.external.datamodel.Query;
import org.dspace.importer.external.datamodel.ImportRecord;
import java.util.Collection;
/** Common interface for all import implementations.
* @author Roeland Dillen (roeland at atmire dot com)
*/
public interface MetadataSource {
/**
* Gets the number of records matching a query
* @param query the query in string format
* @return the number of records matching the query
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public int getNbRecords(String query) throws MetadataSourceException;
/**
* Gets the number of records matching a query
* @param query the query object
* @return the number of records matching the query
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public int getNbRecords(Query query) throws MetadataSourceException;
/**
* Gets a set of records matching a query. Supports pagination
* @param query the query. The query will generally be posted 'as is' to the source
* @param start offset
* @param count page size
* @return a collection of fully transformed id's
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public Collection<ImportRecord> getRecords(String query, int start, int count)throws MetadataSourceException;
/** Find records based on a object query.
*
* @param query a query object to base the search on.
* @return a set of records. Fully transformed.
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public Collection<ImportRecord> getRecords(Query query)throws MetadataSourceException;
/** Get a single record from the source.
* The first match will be returned
* @param id identifier for the record
* @return a matching record
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public ImportRecord getRecord(String id)throws MetadataSourceException;
/** Get a single record from the source.
* The first match will be returned
* @param query a query matching a single record
* @return a matching record
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public ImportRecord getRecord(Query query)throws MetadataSourceException;
/**
* The string that identifies this import implementation. Preferable a URI
* @return the identifying uri
*/
public String getImportSource();
/** Finds records based on an item
* Delegates to one or more MetadataSource implementations based on the uri. Results will be aggregated.
* @param item an item to base the search on
* @return a collection of import records. Only the identifier of the found records may be put in the record.
* @throws MetadataSourceException if the underlying methods throw any exception.
*/
public Collection<ImportRecord> findMatchingRecords(Item item) throws MetadataSourceException;
/** Finds records based on query object.
* Delegates to one or more MetadataSource implementations based on the uri. Results will be aggregated.
* @param query a query object to base the search on.
* @return a collection of import records. Only the identifier of the found records may be put in the record.
* @throws MetadataSourceException passed through.
*/
public Collection<ImportRecord> findMatchingRecords(Query query) throws MetadataSourceException;
}