/*
 *      Luis Israel Diéguez Arjona
 *      Sonia Cejas Soria
 *      Sergio Cabello García
 *      María José González Cordero
 *
 *      Ingeniería del Software de Gestión II
 *      Ingeniería Técnica Informática de Gestión
 *      Universidad de Huelva
 */

package controlador;

import java.util.ArrayList;
import java.util.Enumeration;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;





public class Utilidades {


    
    // Devuelve el identificador (pre + numérico) de un elemento: UC-0001, UC-0002,...
    public String getIdentificadorNodo (MutableTreeNode nodoSeleccionado) {
        String ident = "";

        ident = nodoSeleccionado.toString();                                    // GET el texto
        int inicio = ident.indexOf("(") + 1;                                    // GET inicio identificador
        int fin = ident.indexOf(")");                                           // GET final identificador
        ident = ident.substring(inicio, fin);                                   // GET el pre-identificador (UC, STK,...)

        return ident;
    }
    // Devuelve el pre-identificador de un elemento: UC, STK,...
    public String getPreIdentificadorNodo (MutableTreeNode nodoSeleccionado) {
        String ident = "";

        ident = nodoSeleccionado.toString();            // GET el texto
        int inicio = ident.indexOf("(") + 1;            // GET inicio identificador
        int fin = ident.indexOf(")") - 5;               // GET final identificador
        if(inicio != 0)
            ident = ident.substring(inicio, fin);           // GET el pre-identificador (UC, STK,...)
        else
            ident = "";
        return ident;

    }
    // Devuelve el pre-identificador de un elemento: UC, STK,...
    public String getPreIdentificadorNodo (TreeNode nodoSeleccionado) {
        String ident = "";

        ident = nodoSeleccionado.toString();            // GET el texto
        int inicio = ident.indexOf("(") + 1;            // GET inicio identificador
        int fin = ident.indexOf(")") - 5;               // GET final identificador
        if(inicio != 0)
            ident = ident.substring(inicio, fin);           // GET el pre-identificador (UC, STK,...)
        else
            ident = "";
        return ident;

    }
    // Devuelve el identificador numérico de un elemento: 0001, 0002,...
    public String getIdentificadorNumericoNodo (MutableTreeNode nodoSeleccionado) {
        String ident = "";

        ident = nodoSeleccionado.toString();            // GET el texto
        int i = ident.indexOf(")");                     // GET final identificador
        ident = ident.substring(i-4, i);                // GET el identificador numérico

        return ident;
    }

    // Recibe STK-0003. Devuelve el número: 0001, 0002,...
    public String getIdentificadorNumerico (String identificador) {
        int i = identificador.indexOf("-");                                     // GET final identificador
        String ident = identificador.substring(i+1, identificador.length());    // GET el identificador numérico

        return ident;
    }
    
    public int getHijosTipoSeccion(TreeNode nodo) {
        int contador = 1;
        //Recorrer los hijos del nodo seleccionado y ver cual es la última seccion introducida a esa altura.
        if (nodo.getChildCount() >= 0) {
            for (Enumeration e = nodo.children(); e.hasMoreElements(); ) {
                    TreeNode n = (TreeNode) e.nextElement();
                    if(getPreIdentificadorNodo(n).equals("SEC"))
                        contador++;
            }
        }
        return contador;
    }

    public int getHijosTipoApendice(TreeNode nodo) {
        int contador = 1;
        //Recorrer los hijos del nodo seleccionado y ver cual es la última seccion introducida a esa altura.
        if (nodo.getChildCount() >= 0) {
            for (Enumeration e = nodo.children(); e.hasMoreElements(); ) {
                    TreeNode n = (TreeNode) e.nextElement();
                    if(getPreIdentificadorNodo(n).equals("APE"))
                        contador++;
            }
        }
        return contador;
    }
    
    //Para matriz de rastreabilidad
    ArrayList<String> tipos = new ArrayList<String>();
    public void inicializarTipos (){
        tipos.add("Párrafo/Elemento de glosario");
        tipos.add("Fichero gráfico");
        tipos.add("Objetivo");
        tipos.add("Requisito de información");
        tipos.add("Requisito de restricción");
        tipos.add("Caso de Uso");
        tipos.add("Requisito funcional");
        tipos.add("Requisito no funcional");
    }

    public ArrayList<String> getTipos () {
        return tipos;
    }

    //Uso al añadir autor en los distintos formularios
    ArrayList<String> arrayAutor = new ArrayList<String>();

    public ArrayList<String> getArrayAutor () {
        return arrayAutor;
    }
    public void setArrayAutor (ArrayList<String> val) {
        this.arrayAutor = val;
    }
    // Añade en el arrayAutor
    public void addArrayAutor (String val) {
        this.getArrayAutor().add(val);
    }
    // Elimina del arrayAutor
    public void removeArrayAutor (String val) {
        boolean encontrado = false;
        int i = 0;
        ArrayList<String> arrayAutores = this.getArrayAutor();
        // Busco y lo elimino
        while (!encontrado && i < arrayAutores.size()) {
            if (arrayAutores.get(i).equals(val)) {
                this.getArrayAutor().remove(i);
                encontrado = true;
            }
            i++;
        }
    }

    //Uso al añadir fuente en los distintos formularios
    ArrayList<String> arrayFuente = new ArrayList<String>();
    public ArrayList<String> getArrayFuente () {
        return arrayFuente;
    }
    public void setArrayFuente (ArrayList<String> val) {
        this.arrayAutor = val;
    }
        // Añade en el arrayFuente
    public void addArrayFuente (String val) {
        this.getArrayFuente().add(val);
    }
    // Elimina del arrayFuente
    public void removeArrayFuente (String val) {
        boolean encontrado = false;
        int i = 0;
        ArrayList<String> arrayFuentes = this.getArrayFuente();
        // Busco y lo elimino
        while (!encontrado && i < arrayFuentes.size()) {
            if (arrayFuentes.get(i).equals(val)) {
                this.getArrayFuente().remove(i);
                encontrado = true;
            }
            i++;
        }
    }

    //Uso al añadir destino
    ArrayList<String> arrayDestino = new ArrayList<String>();
    public ArrayList<String> getArrayDestino () {
        return arrayDestino;
    }
    public void setArrayDestino (ArrayList<String> val) {
        this.arrayDestino = val;
    }
    // Añade en el arrayDestino
    public void addArrayDestino (String val) {
        this.getArrayDestino().add(val);
    }
    // Elimina del arrayDestino
    public void removeArrayDestino (String val) {
        boolean encontrado = false;
        int i = 0;
        ArrayList<String> arrayDestinos = this.getArrayDestino();
        // Busco y lo elimino
        while (!encontrado && i < arrayDestinos.size()) {
            if (arrayDestinos.get(i).equals(val)) {
                this.getArrayDestino().remove(i);
                encontrado = true;
            }
            i++;
        }
    }

    //Uso al añadir origen
    ArrayList<String> arrayOrigen = new ArrayList<String>();
    public ArrayList<String> getArrayOrigen () {
        return arrayOrigen;
    }
    public void setArrayOrigen (ArrayList<String> val) {
        this.arrayOrigen = val;
    }
    // Añade en el arrayOrigen
    public void addArrayOrigen (String val) {
        this.getArrayOrigen().add(val);
    }
    // Elimina del arrayOrigen
    public void removeArrayOrigen (String val) {
        boolean encontrado = false;
        int i = 0;
        ArrayList<String> arrayOrigenes = this.getArrayOrigen();
        // Busco y lo elimino
        while (!encontrado && i < arrayOrigenes.size()) {
            if (arrayOrigenes.get(i).equals(val)) {
                this.getArrayOrigen().remove(i);
                encontrado = true;
            }
            i++;
        }
    }

}

