/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: CadastroDroga
 *
 * Esta classe representa um  Cadastro de droga
 *
 * @author Centro de Informatica - UFPE
 * @version  0.1 -  25/10/2001
 * @since JDK 1.3
 */


package sac.droga;
//main
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;

import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import sac.persistencia.PoolConexoes;
//

//import java.util.List;

import sac.exception.NullArgumentException;

import sac.persistencia.PersistenceException;
import sac.persistencia.OID;

/**
 * Esta classe representa um  Cadastro de droga
 */
public class CadastroDroga {
    //Repositorio de droga
   private RepositorioDroga repositorioDroga;

/**
 * Construtor da classe
 * @param repositorio       Repositorio de Droga a ser utilizado <code>RepositorioDroga</code>
 */
    public CadastroDroga(RepositorioDroga repositorio) throws NullArgumentException {
        if(repositorio == null) {
            throw new NullArgumentException("repositorio == null");
        }
        this.repositorioDroga = repositorio;
    }


    /**
     * 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 {
      if(nome == null) {
        throw new NullArgumentException("nome == null");
      }
        return this.repositorioDroga.procurarPeloNome(nome);
    }

    /**
     * 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 {
      if(id == null) {
        throw new NullArgumentException("id == null");
      }
      return this.repositorioDroga.procurar(id);
    }

    /**
     * Retorna uma droga 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 {
      if(acoesTerapeuticas == null) {
        throw new NullArgumentException("acoesTerapeuticas == null");
      }
        return this.repositorioDroga.procurarPorAcoesTerapeuticas(acoesTerapeuticas);
    }

    /**
     * Retorna uma droga com determinadas acoes terapeuticas
     *
     * @param acoesTerapeuticas    Acoes Terapeuticas da droga <code>String</code>
     * @return Lista de drogas <code>List</code>
     * @throws PersistenceException
     * @throws NullArgumentException;
     */
    public List obtemDrogas() throws PersistenceException, NullArgumentException {
        return this.repositorioDroga.obtemDrogas();


    }


    /**
     * 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 {
      if(droga == null) {
        throw new NullArgumentException("droga == null");
      }
      this.repositorioDroga.inserir(droga);
    }

    /**
     * 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 {
      if(droga == null) {
        throw new NullArgumentException("droga == null");
      }
      if(newDroga == null) {
        throw new NullArgumentException("newDroga === null");
      }
        this.repositorioDroga.alterar(droga, newDroga);
    }

    /**
     *
     */
    public static void main(String[] args) throws Exception {
      System.out.println("Inicio");
      DBDroga db = new DBDroga();
      CadastroDroga cadastro = new CadastroDroga(db);

      Droga droga = new Droga();
      droga.setNome("ABC");
      droga.setAcoesTerapeuticas("acoes terapeuticas");
      droga.setContraIndicacoes("contra-indicacoes");
      droga.setDosagem("dosagem");
      droga.setIndicacoes("indicacoes");
      droga.setInteracoes("interacoes");
      droga.setPrecaucoes("precaucoes");
      droga.setPropriedades("propriedades");
      droga.setReacoesAdversas("reacoes adversas");

      cadastro.inserir(droga);
      System.out.println("inseriu droga1");
      System.out.println("----------------------------------------");

      Droga newdroga = new Droga();
      newdroga.setNome("DEF");
      newdroga.setAcoesTerapeuticas("acoes terapeuticas");
      newdroga.setContraIndicacoes("new contra-indicacoes");
      newdroga.setDosagem("new dosagem");
      newdroga.setIndicacoes("new indicacoes");
      newdroga.setInteracoes("new interacoes");
      newdroga.setPrecaucoes("new precaucoes");
      newdroga.setPropriedades("new propriedades");
      newdroga.setReacoesAdversas("new reacoes adversas");

      cadastro.inserir(newdroga);
      System.out.println("inseriu droga1");
      System.out.println("----------------------------------------");

      Droga droga3 = new Droga();
      droga3.setNome("GHI");
      droga3.setAcoesTerapeuticas("acoes terapeuticas");
      droga3.setContraIndicacoes("contra-indicacoes3");
      droga3.setDosagem("dosagem3");
      droga3.setIndicacoes("indicacoes3");
      droga3.setInteracoes("interacoes3");
      droga3.setPrecaucoes("precaucoes3");
      droga3.setPropriedades("propriedades3");
      droga3.setReacoesAdversas("reacoes adversas3");

      cadastro.inserir(droga3);
      System.out.println("Droga3 inserida");


      List lista = cadastro.obtemDrogas();
      Iterator iter = lista.iterator();
      System.out.println("Listando drogas: ");
      while(iter.hasNext()) {
        droga = (Droga) iter.next();
        System.out.println("oid: " + droga.getID().getLongValue());
        System.out.println("nome: " + droga.getNome());
        System.out.println("acoes: " + droga.getAcoesTerapeuticas());
        System.out.println("contraInd: " + droga.getContraIndicacoes());
        System.out.println("dosagem : "+ droga.getDosagem());
        System.out.println("indicacoes :"+ droga.getIndicacoes());
        System.out.println("interacoes: "+ droga.getInteracoes());
        System.out.println("precuacoes :"+droga.getPrecaucoes());
        System.out.println("propriedades: "+ droga.getPropriedades());
        System.out.println("recaoes Adv: "+ droga.getReacoesAdversas());
        System.out.println("----------------------------------------");
        System.out.println("++++");
      }
    }
}
