/*
 * Universidade Federal de Pernambuco
 * Centro de Informática
 *
 * SAC - Sociedade beneficente de Amparo aos portadores de AIDS e do Cancer
 *
 * Tipo: ReferenciaBibliografica
 *
 * ReferenciaBibliografica é uma classe que encapsula as informacoes sobre
 * uma Referencia Bibliografica tais como:
 * <ul>
 * <li> tipo - indica o tipo da referencia
 * <li> origem - a fonte da referencia
 * <li> localRef - o local onde a referencia pode ser encontrada
 * <li> titulo - o titulo da referencia
 * <li> autores - a lista de autores dessa referencia
 * <li> dataPublicacao - a data de publicacao dessa referencia
 * </ul>
 * <p>
 *
 *
 * @author Centro de Informatica - UFPE
 * @version  0.1 -  25/10/2001
 * @since JDK 1.0
 */

package sac.bibliografia;

import sac.persistencia.OID;
import sac.exception.NullArgumentException;

import java.util.Date;
import java.util.List;

public class ReferenciaBibliografica {
   /* indica o tipo da referencia */
   private int tipo;
   /* fonte da referencia */
   private String origem;
   /* o local onde a referencia pode ser encontrada */
   private String localArmazenamento;
   /* o titulo da referencia */
   private String titulo;
   /* a lista de autores dessa referencia */
   private String autores;
   /* a data de publicacao dessa referencia */
   private Date dataPublicacao;
   /* A Identificacao do objeto */
   private OID theOID;
   /* a descricao da referencia */
   private String trecho;

   /* constante para indicar que a referencia é um livro */
   public static final int LIVRO=1;
   /* constante para indicar que a referencia é um artigo */
   public static final int ARTIGO=2;

   /* Construtor Vazio */
   public ReferenciaBibliografica() {
   }

   /**
    * Metodo getId
    *
    * Retorna o ID da ReferenciaBibliogradica
    *
    * @return theOID - o ID da ReferenciaBibliogradica
    */
   public OID getID() {
      return theOID;
   }

   /**
    * Metodo setID
    *
    * Utilizado para atribuir uma nova identificacao para esse objeto
    *
    * @param OID newID - a nova identificacao do objeto
    * @exception NullArgumentException - Levantada quando o id
    *            passado for <code>null</code>.
    * @see sac.persistence.OID
    */
//   public void setID(OID newID) throws NullArgumentException {
   public void setID(OID newID) {
//      if (newID == null) {
//         throw new NullArgumentException();
//      }
      theOID = newID;
   }

   /**
    * Metodo getTitulo
    *
    * Retorna o Titulo da ReferenciaBibliografica
    *
    * @return titulo - o titulo da ReferenciaBibliografica
    */
   public String getTitulo() {
      return titulo;
   }

   /**
    * Metodo getLocalArmazenamento
    *
    * Retorna o local onde a referencia pode ser encontrada
    *
    * @return localRef - o local onde a referencia pode ser encontrada
    */
   public String getLocalArmazenamento() {
      return localArmazenamento;
   }

   /**
    * Metodo getOrigem
    *
    * Retorna a fonte da referencia
    *
    * @return origem - a fonte da referencia
    */
   public String getOrigem() {
      return origem;
   }

   /**
    * Metodo getDescricao
    *
    * Retorna a descricao da referencia
    *
    * @return descricao - a descricao da referencia
    */
   public String getTrecho() {
      return trecho;
   }


   /**
    * Metodo getDataPublicacao
    *
    * Retorna a data de publicacao dessa referencia
    *
    * @return dataPublicacao - a data de publicacao dessa referencia
    */
   public Date getDataPublicacao() {
      return dataPublicacao;
   }

   /**
    * Metodo getAutores
    *
    * Retorna a lista de autores dessa referencia
    *
    * @return autores - a lista de autores dessa referencia
    */
   public String getAutores() {
      return autores;
   }

   /**
    * Metodo getTipo
    *
    * Retorna o tipo da referencia
    *
    * @return tipo - o tipo da referencia
    */
   public int getTipo() {
      return tipo;
   }

   /**
    * Metodo setAutores
    *
    * Utilizado para atribuir uma nova lista de autores para esse objeto
    *
    * @param List autores - a nova lista de autores do objeto
    * @exception NullArgumentException - Levantada quando a lista
    *            passada for <code>null</code>.
    */
   public void setAutores(String autores) throws NullArgumentException {
      if (autores == null) {
         throw new NullArgumentException();
      }
      this.autores = autores;
   }

   /**
    * Metodo setTitulo
    *
    * Utilizado para atribuir um novo titulo esse objeto
    *
    * @param String titulo - o novo titulo
    * @exception NullArgumentException - Levantada quando o titulo
    *            passado for <code>null</code>.
    */
   public void setTitulo(String titulo) throws NullArgumentException {
      if (titulo == null) {
         throw new NullArgumentException();
      }
      this.titulo = titulo;
   }

   /**
    * Metodo setDataPublicacao
    *
    * Utilizado para atribuir uma nova data de publicacao
    *
    * @param Date dataPublicacao - a nova data
    * @exception NullArgumentException - Levantada quando a dataPublicacao
    *            passada for <code>null</code>.
    */
   public void setDataPublicacao(Date dataPublicacao) throws NullArgumentException {
      if (dataPublicacao == null) {
         throw new NullArgumentException();
      }
      this.dataPublicacao = dataPublicacao;
   }

   /**
    * Metodo setLocalArmazenamento
    *
    * Utilizado para atribuir um novo local de armazenamento
    *
    * @param String localArmazenamento - o novo local
    * @exception NullArgumentException - Levantada quando o localArmazenamento
    *            passada for <code>null</code>.
    */
   public void setLocalArmazenamento(String localArmazenamento) throws NullArgumentException {
      if (localArmazenamento == null) {
         throw new NullArgumentException();
      }
      this.localArmazenamento = localArmazenamento;
   }

   /**
    * Metodo setOrigem
    *
    * Utilizado para atribuir uma nova origem
    *
    * @param String origem - a nova origem
    * @exception NullArgumentException - Levantada quando a origem
    *            passada for <code>null</code>.
    */
   public void setOrigem(String origem) throws NullArgumentException {
      if (origem == null) {
         throw new NullArgumentException();
      }
      this.origem = origem;
   }

   /**
    * Metodo setTipo
    *
    * Utilizado para atribuir um novo tipo
    *
    * @param int tipo - o novo tipo
    * @exception NullArgumentException - Levantada quando o tipo
    *            passado for 0.
    */
   public void setTipo(int tipo) throws NullArgumentException {
      if (tipo == 0) {
         throw new NullArgumentException();
      }
      this.tipo = tipo;
   }

   /**
    * Metodo setDescricao
    *
    * Utilizado para atribuir uma nova descricao
    *
    * @param String descricao - a nova descricao
    * @exception NullArgumentException - Levantada quando a descricao
    *            passada for <code>null</code>.
    */
   public void setTrecho(String trecho) throws NullArgumentException {
      if (trecho == null) {
        trecho="";
      }
      this.trecho = trecho;
   }

    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append("OID:");
        buf.append(theOID);
        buf.append('\n');
        buf.append("Titulo:");
        buf.append(titulo);
        buf.append('\n');
        buf.append("Trecho:");
        buf.append(trecho);
        buf.append('\n');
        buf.append("Origem:");
        buf.append(origem);
        buf.append('\n');
        buf.append("Armazenamento:");
        buf.append(localArmazenamento);
        buf.append('\n');
        buf.append("Data:");
        buf.append(dataPublicacao);
        buf.append('\n');
        buf.append("Tipo:");
        buf.append(tipo);
        buf.append("Autores:");
        buf.append(autores);
        return buf.toString();
    }
}
