/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: RepositorioDoenca
 *
 * Esta classe representa uma interface para um repositório de doenças
 *
 * @author Centro de Informatica - UFPE
 * @version  0.1 -  25/10/2001
 * @since JDK 1.3
 */

package sac.doenca;

import sac.persistencia.OID;
import sac.persistencia.PersistenceException;
import sac.exception.NomeInvalidoException;
import sac.exception.NullArgumentException;
import java.util.List;
import sac.cid.CID;
import sac.medicamento.Medicamento;

public interface RepositorioDoenca
{

   /**
    * Retorna uma doenca dado o OID
    *
    * @param id   OID da doenca  <code>OID</code>
    * @return Doenca  <code>Doenca</code>
    */
   public Doenca procurar(OID id) throws DoencaNaoCadastradaException, PersistenceException;

   /**
    * Retorna todas as doencas do banco
    *
    * @return List  <code>List</code>
    */
  public List getTodasDoencas() throws PersistenceException;

   /**
    * Retorna uma doenca dado o nome exato
    *
    * @param nome   Nome da doenca <code>String</code>
    * @return Lista de Doencas  <code>List</code>
    */
    public Doenca procurarPeloNome(String nome) throws PersistenceException,
        DoencaNaoCadastradaException;

   /**
    * Retorna mais de uma doenca dado um nome parecido
    *
    * @param nome   Nome da doenca <code>String</code>
    * @return Lista de Doencas  <code>List</code>
    */
    public List procurarPeloNomeParecido(String nome, int start, int size) throws PersistenceException;
   /**
    * Retorna mais de uma doenca dado o CID
    *
    * @param cid   CID da doenca <code>CID</code>
    * @return Lista de Doencas  <code>List</code>
    */
    public Doenca procurarPeloCID(String cid) throws PersistenceException,
        DoencaNaoCadastradaException;

   /**
    * Retorna mais de uma doenca dado a categoria do CID
    *
    * @param categoriaCID   Categoria do CID <code>String</code>
    * @return Lista de Doencas  <code>List</code>
    */
   public List procurarPelaCategoriaCID(String categoriaCID);

   /**
    * Retorna mais de uma doenca dado a subcategoria do CID
    *
    * @param subcategoriaCID   Subcategoria do CID <code>String</code>
    * @return Lista de Doencas  <code>List</code>
    */
   public List procurarPelaSubcategoriaCID(String subcategoriaCID);

   /**
    * Insere uma Doenca
    *
    * @param doenca   A doenca a ser inserida <code>Doenca</code>
    * @exception DoencaJaCadastradaException
    */
   public OID inserir(Doenca doenca) throws DoencaJaCadastradaException,
    PersistenceException;

   /**
    * Remove uma Doenca
    *
    * @param doenca   A doenca a ser removida <code>Doenca</code>
    * @exception DoencaJaCadastradaException
    */
   public void remover(Doenca doenca) throws
    PersistenceException, DoencaNaoCadastradaException;

   /**
    * Altera uma Doenca ja cadastrada
    *
    * @param doenca   A doenca a ser alterada <code>Doenca</code>
    * @exception DoencaNaoCadastradaException
    */
   public void alterar(Doenca doenca, Doenca newDoenca)
    throws DoencaNaoCadastradaException, PersistenceException;
}
