/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.util.ArrayList;

/**
 *Clase que representa los objetivos que el sistema debe cumplir
 */
public class Objetivo extends Rastreable{

    /**
     * Nombre del objetivo
     */
    private String nombre;
    /**
     * Descripcion del objetivo.
     */
    private String descripcion;
    /**
     * importancia del objetivo.
     */
    private String importancia;
    /**
     * Urgencia del objetivo
     */
    private String urgencia;
    /**
     * estado de desarrollo del objetivo
     */
    private String estado_desarrollo;
    /**
     * estabilidad del objetivo
     */
    private String estabilidad;
    /**
     * Este parámetro estático, lleva la cuenta del número de objetivo
     * que se han creado, para poder reconocerlos unívocamente.
     */
    
    static int n_instancia=0;
    /**
     * identificado unico del objetivo
     */
    private int numero_id;
    /**
     * Listado de subobjetivos del objetivo
     */
    private ArrayList<Objetivo> Subobjetivo = new ArrayList();

    /**
     * Constructor de Objetivo, que guarda el inicializa el identificador
     */
    public Objetivo(){
        n_instancia++;
        numero_id=n_instancia;
    }

    /**
     * @return the importancia
     */
    public String getImportancia() {
        return importancia;
    }

    /**
     * @param importancia the importancia to set
     */
    public void setImportancia(String importancia) {
        this.importancia = importancia;
    }

    /**
     * @return the urgencia
     */
    public String getUrgencia() {
        return urgencia;
    }

    /**
     * @param urgencia the urgencia to set
     */
    public void setUrgencia(String urgencia) {
        this.urgencia = urgencia;
    }

    /**
     * @return the estado_desarrollo
     */
    public String getEstado_desarrollo() {
        return estado_desarrollo;
    }

    /**
     * @param estado_desarrollo the estado_desarrollo to set
     */
    public void setEstado_desarrollo(String estado_desarrollo) {
        this.estado_desarrollo = estado_desarrollo;
    }

    /**
     * @return the estabilidad
     */
    public String getEstabilidad() {
        return estabilidad;
    }

    /**
     * @param estabilidad the estabilidad to set
     */
    public void setEstabilidad(String estabilidad) {
        this.estabilidad = estabilidad;
    }

    /**
     * @return the numero_id
     */
    public int getNumero_id() {
        return numero_id;
    }
    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    @Override
    public String toString() {
        return "[OBJ]-"+numero_id+" "+nombre;
    }

    /**
     * @return the Subobjetivo
     */
    public ArrayList<Objetivo> getSubobjetivo() {
        return Subobjetivo;
    }

    /**
     * @param Subobjetivo the Subobjetivo to set
     */
    public void setSubobjetivo(ArrayList<Objetivo> Subobjetivo) {
        this.Subobjetivo = Subobjetivo;
    }
    /**
     * Método que crea y guarda un subobjetivo del objetivo
     * @param Nombre
     * @param Concepto
     * @param Importancia
     * @param Urgencia
     * @param EstadoDesarrollo
     * @param Estabilidad
     * @return subobjetivo
     */
    public Objetivo newObj( String Nombre, String Concepto, String Importancia, String Urgencia, String EstadoDesarrollo, String Estabilidad ) {
        Objetivo auxObj = new Objetivo();

        auxObj.setNombre(Nombre);
        auxObj.setDescripcion(Concepto);
        auxObj.setImportancia(Importancia);
        auxObj.setUrgencia(Urgencia);
        auxObj.setEstado_desarrollo(EstadoDesarrollo);
        auxObj.setEstabilidad(Estabilidad);

        this.getSubobjetivo().add(auxObj);
        return auxObj;
    }
    /**
     * Método que busca y devuelve el subobjetivo cuyo identificador se pasa por parámetro
     * @param ident del subobjetivo
     * @return subobjetivo
     */
    public Objetivo BuscarOBJ (String ident) {
      int id = Integer.parseInt(ident);  
      boolean encontrado=false;
      int i=0;
      Objetivo obj = null;
      while((!encontrado)&&(i<Subobjetivo.size())) {
          if(Subobjetivo.get(i).getNumero_id()==id) {
               encontrado=true;
               obj=Subobjetivo.get(i);
          } 
          i++;
         }
      return obj;
    }

    
}
