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

package modelo;

import java.util.ArrayList;
import java.util.Observable;

/**
 * Clase Objetivos, clase que crea objetivos
 * @author MW3 Software
 */
public class Objetivos extends Observable{

    /**
     * Nombre del Objetivo
     */
    private String nombre;
    /**
     * Autores que lo crean
     */
    private String autores;
    /**
     * Fuentes de informacion
     */
    private String fuentes;
    /**
     *  Descripcion de los objetivos
     */
    private String descripcion;
    /**
     *  Comentarios de los objetivos
     */
    private String comentarios;
    /**
     *  Importacia de los objetivos
     */
    private String importancia;
    /**
     *  Urgencia de los objetivos
     */
    private String urgencia;
    /**
     * estado de desarrollo de los objetivos
     */
    private String estadoDes;
    /**
     * estabilidad de los objetivos
     */
    private String estabilidad;
    /**
     * Lista de elementos Rastreables 
     */
    private ArrayList<String> destinoRastreable = new ArrayList();
    /**
     *  Lista de Subojetivos que pertenecen al objetivo
     */
    private ArrayList<Objetivos> mSubObjetivos = new ArrayList();


    /**
     * Metodo que devuelve la Lista de elementos Rastreables
     * @return devuelve la Lista de elementos rastreables del Objetivo
     */
    public ArrayList<String> getDestinoRastreable() {
        return destinoRastreable;
    }

    /**
     * Metodo que almacena la lista de elementos rastreables
     * @param destinoRastreable Nuevo valor de DestinoRastreable del objetivos
     */
    public void setDestinoRastreable(ArrayList<String> destinoRastreable) {
        this.destinoRastreable = destinoRastreable;
        this.setChanged();
        this.notifyObservers();
    }
    /**
     * Metodo que devuelve el nombre
     * @return devuelve el nombre del Objetivo
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Metodo que almacena el nombre
     * @param nombre Nuevo valor de nombre del objetivos
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve los autores
     * @return devuelve los autores del Objetivo
     */
    public String getAutores() {
        return autores;
    }

    /**
     * Metodo que almacena los autores
     * @param autores Nuevo valor de autores del objetivos
     */
    public void setAutores(String autores) {
        this.autores = autores;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve las fuentes
     * @return devuelve las fuentes del Objetivo
     */
    public String getFuentes() {
        return fuentes;
    }

    /**
     * Metodo que almacena las fuentes
     * @param fuentes Nuevo valor de fuentes del objetivos
     */
    public void setFuentes(String fuentes) {
        this.fuentes = fuentes;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve la descripcion
     * @return devuelve la descripcion del Objetivo
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Metodo que almacena la descripcion
     * @param descripcion Nuevo valor de descripcion del objetivos
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve el comentario
     * @return devuelve el comentario del Objetivo
     */
    public String getComentarios() {
        return comentarios;
    }

    /**
     * Metodo que almacena el comentario
     * @param comentarios Nuevo valor de comentarios del objetivos
     */
    public void setComentarios(String comentarios) {
        this.comentarios = comentarios;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve la importancia
     * @return devuelve la importancia del Objetivo
     */
    public String getImportancia() {
        return importancia;
    }

    /**
     * Metodo que almacena la importacia
     * @param importancia Nuevo valor de importancia del objetivos
     */
    public void setImportancia(String importancia) {
        this.importancia = importancia;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve la urgencia
     * @return devuelve la urgencia del Objetivo
     */
    public String getUrgencia() {
        return urgencia;
    }

    /**
     * Metodo que almacena la urgencia
     * @param urgencia Nuevo valor de urgencia del objetivos
     */
    public void setUrgencia(String urgencia) {
        this.urgencia = urgencia;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve el estado de desarrollo
     * @return devuelve el estado de desarrollo del Objetivo
     */
    public String getEstadoDes() {
        return estadoDes;
    }

    /**
     * Metodo que almacena el estado de desarrollo
     * @param estadoDes Nuevo valor de estado de desarrollo del objetivos
     */
    public void setEstadoDes(String estadoDes) {
        this.estadoDes = estadoDes;
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
    }

    /**
     * Metodo que devuelve la Estabilidad
     * @return devuelve la estabilidad del Objetivo
     */
    public String getEstabilidad() {
        return estabilidad;
    }

    /**
     * Metodo que almacena la estabilidad
     * @param estabilidad Nuevo valor de estabilidad del objetivos
     */
    public void setEstabilidad(String estabilidad) {
        this.estabilidad = estabilidad;
        //Notificamos que ha habido un cambio
        this.setChanged();
        this.notifyObservers();
    }


    //CREACION DE LOS SUBOBJETIVOS


    /**
     * Metodo que devuelve la Lista de subobjetivos
     * @return devuelve la lista de Subojetivos del Objetivo
     */
    public ArrayList<Objetivos> getmSubObjetivos() {
        return mSubObjetivos;
    }

    /**
     * Metodo que almacena la lista de subobjetivos
     * @param mSubObjetivos Nuevo valor de la lista subobjetivos del objetivos
     */
    public void setmSubObjetivos(ArrayList<Objetivos> mSubObjetivos) {
        this.mSubObjetivos = mSubObjetivos;
    }

    /**
     * Metodo que crea los subobjetivos
     * @param nombre Nombe del subojetivo
     * @param autores autores del subojetivo
     * @param Fuentes fuentes del subojetivo
     * @param descripcion decripcion del subojetivo
     * @param comentarios comentarios del subojetivo
     * @param importancia importancia del subojetivo
     * @param urgencia urgencia del subojetivo
     * @param estadoDes estado de desarrollo del subojetivo
     * @param estabilidad estabilidad del subojetivo
     * @return el subobjetivo creado
     */
    public Objetivos nuevoSubObjetivo(String nombre,
                                       String autores,
                                       String Fuentes,
                                       String descripcion,
                                       String comentarios,
                                       String importancia,
                                       String urgencia,
                                       String estadoDes,
                                       String estabilidad)
    {
        Objetivos aux = new Objetivos();
        aux.setNombre(nombre);
        aux.setAutores(autores);
        aux.setFuentes(Fuentes);
        aux.setDescripcion(descripcion);
        aux.setComentarios(comentarios);
        aux.setImportancia(importancia);
        aux.setUrgencia(urgencia);
        aux.setEstadoDes(estadoDes);
        aux.setEstabilidad(estabilidad);
        this.getmSubObjetivos().add(aux);
        //Notificamos que ha habido un cambio
         this.setChanged();
         this.notifyObservers();
        return aux;
    }

}
