

package sac.doenca;

import sac.persistencia.OID;
import sac.persistencia.OIDFactory;
//import sac.cid.CID;
import java.util.List;
import sac.exception.NullArgumentException;


//So para o metodo print:
import sac.droga.Droga;
import java.util.Iterator;

public class Doenca
{
   //A Identificacao unica da doenca
   private OID oid;
   //Codigo Internacional da Doenca
   private String cid;
   //Nome da doenca
   private String nome;
   //Historico de ??? das doencas
   private String historico;
   //Sintomas da doenca
   private String sintomas;
   //Indica o nivel de Hereditariedade da doenca
   private String hereditariedade;
   //Um List das drogas relacionadas a doenca
   private List drogasRelacionadas;

   /**
    * Construtor <code>UsuarioCommum</code>
    *
    * @param _cid <code>CID</code> que identifica o Codigo Internacional de Doencas relacionado
    * @param _nome <code>String</code> que identifica o nome da doenca
    * @param _historico <code>String</code> que identifica o historico da doenca
    * @param _sintomas <code>String</code> que identifica os sintomas da doenca
    * @param _hereditariedade <code>String</code> que identifica o nivel de hereditariedade da doenca
    * @param _drogasRelacionadas <code>List</code> que identifica as drogas relacionadas com a doenca
    */
   public Doenca(OID _oid, String _nome) {
      this.oid = _oid;
      this.nome = _nome;
   }

   public Doenca() {
   }

   public Doenca(String _nome){
      this.nome = _nome;
   }

  public void print(){
    if (nome!=null) System.out.println("Nome: "+this.nome);
    else System.out.println("Nome: null");
    if (cid!=null) System.out.println("Cid: "+this.cid);
    else System.out.println("Cid: null");
    if (oid!=null) System.out.println("OID: "+this.oid.getLongValue());
    else System.out.println("OID: null");
    if (hereditariedade!=null) System.out.println("Hereditariedade: "+this.hereditariedade);
    else System.out.println("Hereditariedade: null");
    if (sintomas!=null) System.out.println("Sintomas: "+this.sintomas);
    else System.out.println("Sintomas: null");
    if (drogasRelacionadas != null){
      System.out.println("Drogas Relacionadas: "+drogasRelacionadas.size());
      Iterator iter = drogasRelacionadas.iterator();
      int i = 1;
      while (iter.hasNext()) {
        Object item = iter.next();
        if(item instanceof OID){
          OID oidDroga = (OID) item;
          System.out.println("====>>> drogasRelacionadas eh uma lista de OIDs!!!");
          System.out.println(" Droga["+i+"] = "+oidDroga.getLongValue());
        }else if(item instanceof Droga){
          Droga drogaRel = (Droga) item;
          System.out.println("====>>> drogasRelacionadas eh uma lista de Drogas!!!");
          System.out.println(" Droga["+i+"] = "+drogaRel.getNome());
        }
        i++;
      }
    }
    System.out.println("===================================");
   }

   /**
    * Metodo que retorna o Object ID  da doenca
    *
    * @return Object ID da doenca <code>OID</code>
    */
   public OID getId()
   {
      return oid;
   }

   /**
    * Metodo que retorna o CID da doenca
    *
    * @return CID da doenca <code>CID</code>
    */
   public String getCID()
   {
      return cid;
   }

   /**
    * Metodo que retorna o nome da doenca
    *
    * @return nome da doenca <code>String</code>
    */
   public String getNome()
   {
      return nome;
   }

   /**
    * Metodo que retorna o historico da doenca
    *
    * @return historico da doenca <code>String</code>
    */
   public String getHistorico()
   {
      return historico;
   }

   /**
    * Metodo que retorna os sintomas da doenca
    *
    * @return sintomas da doenca <code>String</code>
    */
   public String getSintomas()
   {
      return sintomas;
   }

   /**
    * Metodo que retorna o nivel de hereditariedade da doenca
    *
    * @return nivel de hereditariedade da doenca <code>String</code>
    */
   public String getHereditariedade()
   {
      return hereditariedade;
   }

   /**
    * Metodo que retorna as drogas relacionadas com a doenca
    *
    * @return drogas relacionadas com a doenca <code>String</code>
    */
   public List getDrogasRelacionadas()
   {
      return drogasRelacionadas;
   }

   /**
    * Metodo que altera o object ID da doenca
    *
    * @param newID novo object ID da doenca <code>OID</code>
    * @exception NullArgumentException
    */
   public void setOID(OID newOid) throws NullArgumentException
   {
      if(newOid != null){
         this.oid = newOid;
      }
      else{
         throw new NullArgumentException("OID = nulo");
      }
   }

   public void setId(OID newOid) throws NullArgumentException
   {
      if(newOid != null){
         this.oid = newOid;
      }
      else{
         throw new NullArgumentException("OID = nulo");
      }
   }

   /**
    * Metodo que altera o CID da doenca
    *
    * @param newCID novo CID da doenca <code>CID</code>
    * @exception NullArgumentException
    */
   public void setCID(String newCID) throws NullArgumentException
   {
      if(newCID != null){
         this.cid = newCID;
      }
      else{
         throw new NullArgumentException("CID = nulo");
      }
   }

   /**
    * Metodo que altera o Nome da doenca
    *
    * @param newNome novo Nome da doenca <code>String</code>
    * @exception NullArgumentException
    */
   public void setNome(String newNome) throws NullArgumentException
   {
     if(!newNome.equals("") || newNome != null){
       this.nome = newNome;
     }
     else{
       throw new NullArgumentException("newNome = nulo || vazio");
     }
   }

   /**
    * Metodo que altera o Historico da doenca
    *
    * @param newHistorico novo Historico da doenca <code>String</code>
    * @exception NullArgumentException
    */
   public void setHistorico(String newHistorico) throws NullArgumentException
   {
      if(newHistorico != null){
        this.historico = newHistorico;
      }
      else{
         throw new NullArgumentException("newHistorico = nulo");
      }
   }

   /**
    * Metodo que altera os Sintomas da doenca
    *
    * @param newSintomas novos Sintomas da doenca <code>String</code>
    * @exception NullArgumentException
    */
   public void setSintomas(String newSintomas) throws NullArgumentException
   {
      if(newSintomas != null){
        this.sintomas = newSintomas;
      }
      else{
         throw new NullArgumentException("newSintomas = nulo");
      }
   }

   /**
    * Metodo que altera a Hereditariedade da doenca
    *
    * @param newHereditariedade nova Hereditariedade da doenca <code>String</code>
    * @exception NullArgumentException
    */
   public void setHereditariedade(String newHereditariedade) throws NullArgumentException
   {
      if(newHereditariedade != null){
        this.hereditariedade = newHereditariedade;
      }
      else{
         throw new NullArgumentException("newHereditariedade = nulo");
      }
   }

   /**
    * Metodo que altera as Drogas Relacionadas com a doenca
    *
    * @param newDrogasRelacionadas novas Drogas Relacionadas com a doenca <code>String</code>
    * @exception NullArgumentException
    */
   public void setDrogasRelacionadas(List newDrogasRelacionadas) throws NullArgumentException
   {
      if(newDrogasRelacionadas != null){
        this.drogasRelacionadas = newDrogasRelacionadas;
      }
      else{
         throw new NullArgumentException("newDrogasRelacionadas = nulo");
      }
   }

   /**
    * Metodo retorna um booleano comparando dois objetos 'doenca'
    *
    * @param _doenca Doenca a ser comparada <code>Doenca</code>
    * @exception NullArgumentException
    */
   public boolean equals(Doenca _doenca) throws NullArgumentException{
      boolean retorno = false;
      if(_doenca != null){
        retorno = this.cid.equals(_doenca.getCID()) &&
                  this.nome.equals(_doenca.getNome()) &&
//como compara as listas           this.drogasRelacionadas.equals(_doenca.getDrogasRelacionadas()) &&
                  this.hereditariedade.equals(_doenca.getHereditariedade()) &&
                  this.oid.equals(_doenca.getId());
     }
      else{
         throw new NullArgumentException("Objeto 'doenca' nulo");
      }
      return retorno;
   }
}
