/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: RepositorioReferenciaBibliografica
 *
 * Esta classe representa um repositorio de referencias bibliograficas
 *
 * @author Centro de Informatica - UFPE
 * @version  0.1 -  25/10/2001
 * @since JDK 1.0
 */

package sac.bibliografia;

import java.util.List;
import sac.persistencia.OID;
import sac.persistencia.PersistenceException;

import sac.exception.NullArgumentException;
import sac.exception.NomeInvalidoException;

public interface RepositorioReferenciaBibliografica {
   /**
    * Metodo inserir
    *
    * Insere uma nova referencia bibliografica
    *
    * @param referencia - referencia bibliografica a ser cadastrada
    *                     <code>ReferenciaBibliografica</code>
    * @exception ReferenciaBibliograficaJaCadastradaException -
    *            Levantada quando tenta-se cadastrar uma referencia ja
    *            cadastrada.
    */
   public void inserir(ReferenciaBibliografica referencia)
        throws PersistenceException, ReferenciaBibliograficaJaCadastradaException,
            NullArgumentException, NomeInvalidoException;

   /**
    * Metodo alterar
    *
    * Altera uma referencia bibliografica
    *
    * @param referencia - referencia bibliografica a ser modificada
    *                                   <code>ReferenciaBibliografica</code>
    * @param newReferencia - referencia bibliografica com os novos
    *                           parametros <code>ReferenciaBibliografica</code>
    * @exception ReferenciaBibliograficaNaoCadastradaException -
    *            Levantada quando tenta-se alterar uma referencia bibliografica
    *            nao cadastrada cadastrado.
    *ReferenciaBibliograficaNaoCadastradaException, PersistenceException
    *@throws ReferenciaBibliograficaNaoCadastradaException
    *@throws PersistenceException
    */
   public void alterar(ReferenciaBibliografica referencia, ReferenciaBibliografica newReferencia) throws ReferenciaBibliograficaNaoCadastradaException, PersistenceException;

   /**
    * Metodo procurar
    *
    * Retorna uma lista de referencias bibliograficas cujo titulo coincide
    * com um dado texto
    *
    * @param tituloDaReferencia - O texto presente no titulo <code>String</code>
    * @return Lista de referenciass <code>List</code>
    * @throws PersistenceException
    * @throws NomeInvalidoException
    * @throws NullArgumentException
    * @throws ReferenciaBibliograficaNaoCadastradaException
    */
    public List procurar(FiltroBuscaReferencia filtro) throws PersistenceException, NomeInvalidoException, NullArgumentException, ReferenciaBibliograficaNaoCadastradaException;
   /** Metodo procurar
    *
    * Retorna uma referencia bibliografica com um dado ID
    *
    * @param id - o id da referencia <code>OID</code>
    * @return referencia procurada <code>ReferenciaBibliografica</code>
    * @throws ReferenciaBibliograficaNaoCadastradaException
    * @throws PersistenceException
    * @throws NullArgumentException
    * @throws NomeInvalidoException
    */
   public ReferenciaBibliografica procurar(OID id) throws ReferenciaBibliograficaNaoCadastradaException, PersistenceException, NullArgumentException, NomeInvalidoException;
}
