/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: RepositorioDroga
 *
 * Esta classe representa um repositorio de droga
 *
 * @author Centro de Informatica - UFPE
 * @version  0.1 -  25/10/2001
 * @since JDK 1.3
 */


package sac.droga;

import sac.persistencia.OID;
import sac.persistencia.PersistenceException;
import sac.exception.NullArgumentException;

import java.util.List;

public interface RepositorioDroga {

    /**
     * Retorna uma droga com determinado nome
     *
     * @param nome    nome da droga <code>String</code>
     * @return droga procurada <code>Droga</code>
     * @throws PersistenceException
     * @throws DrogaNaoCadastradaException
     * @throws NullArgumentException;
     */
     public List procurarPeloNome(String nome)
        throws PersistenceException, DrogaNaoCadastradaException,
            NullArgumentException;

    /**
     * Retorna uma droga com determinado ID
     *
     * @param id    id da droga <code>OID</code>
     * @return droga procurada <code>Droga</code>
     * @throws PersistenceException
     * @throws DrogaNaoCadastradaException
     * @throws NullArgumentException;
     */
    public Droga procurar(OID id)
        throws PersistenceException, DrogaNaoCadastradaException,
            NullArgumentException;

    /**
     * Retorna uma lista de drogas com determinadas acoes terapeuticas
     *
     * @param acoesTerapeuticas    Acoes Terapeuticas da droga <code>String</code>
     * @return Lista de drogas <code>List</code>
     * @throws PersistenceException
     * @throws DrogaNaoCadastradaException
     * @throws NullArgumentException;
     */
    public List procurarPorAcoesTerapeuticas(String acoesTerapeuticas)
        throws PersistenceException, DrogaNaoCadastradaException,
            NullArgumentException;

    /**
     * Retorna uma lista de drogas
     *
     * @return Lista de drogas <code>List</code>
     * @throws PersistenceException
     * @throws NullArgumentException;
     */
    public List obtemDrogas() throws PersistenceException, NullArgumentException;

        /**
     * Insere uma nova droga
     *
     * @param droga      Droga a ser cadastrada <code>Droga</code>
     * @exception DrogaJaCadastradaException - Levantada quando tenta-se
     *            cadastrar uma droga ja cadastrada.
     * @throws PersistenceException
     * @throws DrogaNaoCadastradaException
     * @throws NullArgumentException;
     */
    public void inserir(Droga droga)
        throws DrogaJaCadastradaException, PersistenceException,
          NullArgumentException, DrogaJaCadastradaException;

    /**
     * Altera uma droga ja cadastrada
     *
     * @param droga   Droga a ser alterada <code>Droga</code>
     * @param newDroga   Droga com novos os parametros <code>Droga</code>
     * @exception DrogaNaoCadastradaException - Levantada quando tenta-se
     *            acessar uma droga nao cadastrada.
     * @throws PersistenceException
     * @throws DrogaNaoCadastradaException
     * @throws NullArgumentException;
     */
    public void alterar(Droga droga, Droga newDroga)
        throws PersistenceException, DrogaNaoCadastradaException, NullArgumentException;
}
