/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: CadastroReferenciaBibliografica
 *
 * Esta classe representa um Cadastro 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.exception.NullArgumentException;
import sac.exception.NomeInvalidoException;
import sac.persistencia.PersistenceException;



/**
 * Esta classe representa um Cadastro de Referencias Bibliograficas
 */
public class CadastroReferenciaBibliografica {
   /* o repositorio que contem as referencias */
   private RepositorioReferenciaBibliografica repositorio;

   /**
    * Construtor
    *
    * @param RepositorioReferenciaBibliografica repositorio -
    *        o repositorio que contem as referencias
    * @exception NullArgumentException - Levantada quando a origem
    *            passada for <code>null</code>.
    */
   public CadastroReferenciaBibliografica(RepositorioReferenciaBibliografica repositorio)
          throws NullArgumentException {
      if (repositorio == null) {
         throw new NullArgumentException();
      }
      this.repositorio = repositorio;
   }

   /**
    * 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 {
      repositorio.inserir(referencia);
   }

   /**
    * 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.
    */
   public void alterar(ReferenciaBibliografica referencia, ReferenciaBibliografica newReferencia)
                throws ReferenciaBibliograficaNaoCadastradaException, PersistenceException {
        repositorio.alterar(referencia, newReferencia);
   }

   /**
    * Metodo procurar
    *
    * Retorna uma lista de referencias bibliograficas de um dado titulo
    *
    * @param tituloDaReferencia - O titulo desejado <code>Autor</code>
    * @return Lista de referencias <code>List</code>
    */
   public List procurar(FiltroBuscaReferencia filtro) throws PersistenceException, NomeInvalidoException, NullArgumentException, ReferenciaBibliograficaNaoCadastradaException {
       return repositorio.procurar(filtro);
   }

   /**
    * Metodo procurar
    *
    * Retorna uma Referencias bibliograficas de um dado OID
    *
    * @param IdDaReferencia - O OID desejado <code>Autor</code>
    * @return Referencia <code>Referencia</code>
    */
   public ReferenciaBibliografica procurar(OID id) throws PersistenceException, NomeInvalidoException, NullArgumentException, ReferenciaBibliograficaNaoCadastradaException {
       return repositorio.procurar(id);
   }
}
