package modelo;

import Controlador.Controlador;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Observable;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import modelo.CasodeUso;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import vista.jfrmPrincipal;


// <editor-fold defaultstate="collapsed" desc=" UML Marker ">
// #[regen=yes,id=DCE.6152FD4C-6D23-B415-B6AA-5E3083D32571]
// </editor-fold>

public class DocumentoReq extends Observable{

    private ArrayList<CasodeUso> mCasodeUso=new ArrayList();

    private ArrayList<Elemento_rastreable> mElemento_rastreable=new ArrayList();
    private ArrayList<Requisito> mRequisito=new ArrayList();
    private ArrayList<Requisito_funcional> mRequisito_funcional=new ArrayList();
    private ArrayList<Requisito_informacion> mRequisito_informacion=new ArrayList();
    private ArrayList<Requisito_no_funcional> mRequisito_no_funcional=new ArrayList();
    private ArrayList<Requisito_restriccion> mRequisito_restriccion=new ArrayList();
    private ArrayList<Objetivo> mObjetivo=new ArrayList();
    private ArrayList<Organizacion> mOrganizacion=new ArrayList();
    private ArrayList<Participante> mParticipante=new ArrayList();
    private ArrayList<Reunion> mReunion=new ArrayList();

    private ArrayList<PasoCU> mPasoCU=new ArrayList();
    private ArrayList<ExcepcionCU> mExcepcionCU=new ArrayList();
    private ArrayList<DEspecifico> mDEspecifico=new ArrayList();
    private ArrayList<SubObj> mSubObjetivo=new ArrayList();

    private ArrayList<Matriz> mMatriz=new ArrayList();
    private ArrayList<Parrafo> mParrafo=new ArrayList();
    private ArrayList<Seccion> mSeccion=new ArrayList();
    private ArrayList<Grafico> mGrafico=new ArrayList();

    jfrmPrincipal jfaux;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.1D51ABF1-2DD9-82E3-126D-173DEB5FADBA]
    // </editor-fold>
    public DocumentoReq () {
    }

    public ArrayList<Matriz> getMatriz () {
        return mMatriz;
    }



      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setMatriz (ArrayList<Matriz> val) {
        this.mMatriz = val;
    }

         public ArrayList<Parrafo> getParrafo () {
        return mParrafo;
    }

      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setParrafo (ArrayList<Parrafo> val) {
        this.mParrafo = val;
    }

         public ArrayList<Seccion> getSeccion () {
        return mSeccion;
    }

      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setSeccion (ArrayList<Seccion> val) {
        this.mSeccion = val;
    }

    public ArrayList<Grafico> getGrafico () {
        return mGrafico;
    }

      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setGrafico (ArrayList<Grafico> val) {
        this.mGrafico = val;
    }

    public ArrayList<SubObj> getSubObjetivo () {
        return mSubObjetivo;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setSubObjetivo (ArrayList<SubObj> val) {
        this.mSubObjetivo = val;
    }

    public ArrayList<DEspecifico> getDEspecifico () {
        return mDEspecifico;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setDEspecifico (ArrayList<DEspecifico> val) {
        this.mDEspecifico = val;
    }
     public ArrayList<ExcepcionCU> getExcepcionCU () {
        return mExcepcionCU;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setExcepcionCU (ArrayList<ExcepcionCU> val) {
        this.mExcepcionCU = val;
    }

    public ArrayList<PasoCU> getPasoCU () {
        return mPasoCU;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setPasoCU (ArrayList<PasoCU> val) {
        this.mPasoCU = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.A9A64C79-62B1-D6C4-FB8A-BCD4EF81E5C4]
    // </editor-fold>
    public ArrayList<CasodeUso> getCasodeUso () {
        return mCasodeUso;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setCasodeUso (ArrayList<CasodeUso> val) {
        this.mCasodeUso = val;
    }

     public ArrayList<Elemento_rastreable> getElemento_rastreable () {
        return mElemento_rastreable;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setElemento_rastreable (ArrayList<Elemento_rastreable> val) {
        this.mElemento_rastreable = val;
    }

    public ArrayList<Requisito> getRequisito () {
        return mRequisito;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setRequisito (ArrayList<Requisito> val) {
        this.mRequisito = val;
    }

    public ArrayList<Requisito_funcional> getRequisito_funcional () {
        return mRequisito_funcional;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setRequisito_funcional (ArrayList<Requisito_funcional> val) {
        this.mRequisito_funcional = val;
    }

    public ArrayList<Requisito_informacion> getRequisito_informacion () {
        return mRequisito_informacion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setRequisito_informacion (ArrayList<Requisito_informacion> val) {
        this.mRequisito_informacion = val;
    }

    public ArrayList<Requisito_no_funcional> getRequisito_no_funcional () {
        return mRequisito_no_funcional;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setRequisito_no_funcional (ArrayList<Requisito_no_funcional> val) {
        this.mRequisito_no_funcional = val;
    }

    public ArrayList<Requisito_restriccion> getRequisito_restriccion () {
        return mRequisito_restriccion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setRequisito_restriccion (ArrayList<Requisito_restriccion> val) {
        this.mRequisito_restriccion = val;
    }

    public ArrayList<Objetivo> getObjetivo () {
        return mObjetivo;
    }

    public void setObjetivo (ArrayList<Objetivo> val) {
        this.mObjetivo = val;
    }


     public ArrayList<Organizacion> getOrganizacion() {
        return mOrganizacion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setOrganizacion (ArrayList<Organizacion> val) {
        this.mOrganizacion = val;
    }

       public ArrayList<Participante> getParticipante () {
        return mParticipante;
    }

      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setParticipante (ArrayList<Participante> val) {
        this.mParticipante = val;
    }

    public ArrayList<Reunion> getReunion () {
        return mReunion;
    }

      // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.53D39B7F-03CC-D44E-1C6A-CB6F6C02538E]
    // </editor-fold>
    public void setReunion (ArrayList<Reunion> val) {
        this.mReunion = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.3DF3139E-17FC-1508-86A3-908C60405553]
    // </editor-fold>
    public CasodeUso nuevoCU (Date fecha, String nombreCU, boolean esAbstracto,String eventoActivacion, int frecuencia, String unidadFrecuencia, String precondicion, String postcondicion, String importancia, String urgencia, String estadoDesarrollo, String estabilidad) {

        //// Creo la instancia
        CasodeUso auxCU=new CasodeUso();
        //// Asigno los valores a los atributos
        auxCU.setfecha(fecha);
        auxCU.setNombre(nombreCU);
        auxCU.setEsAbstracto(esAbstracto);
        auxCU.setEventoActivacion(eventoActivacion);
        auxCU.setFrecuencia(frecuencia);
        auxCU.setUnidadFrecuencia(unidadFrecuencia);
        auxCU.setPrecondicion(precondicion);
        auxCU.setPostcondicion(postcondicion);
        auxCU.setImportancia(importancia);
        auxCU.setUrgencia(urgencia);
        auxCU.setEstadodeDesarrollo(estadoDesarrollo);
        auxCU.setEstabilidad(estabilidad);
        //// Enlazo el CasodeUso a la lista de CU que tiene el documento
        this.getCasodeUso().add(auxCU);
        persist(auxCU);
        setChanged();
        notifyObservers();
        return auxCU;
    }

    public Elemento_rastreable nuevoER (int identificador, String nombre, int version, Date fecha, String fuentes, String organizacion, String historia, String comentarios, String autores){

        Elemento_rastreable auxER=new Elemento_rastreable();

        auxER.setIdentificador(identificador);
        auxER.setAutores(autores);
        auxER.setComentarios(comentarios);
        //auxER.setFecha(fecha);
        auxER.setFuentes(fuentes);
        auxER.setHistoria(historia);
        auxER.setNombre(nombre);
        auxER.setOrganizacion(organizacion);
        auxER.setVersion(version);

        this.getElemento_rastreable().add(auxER);
    setChanged();
    notifyObservers();
        return auxER;
    }

   public Requisito nuevoR (String definirPrioridad){

       Requisito auxR=new Requisito();

       this.getRequisito().add(auxR);
       setChanged();
       notifyObservers();
       return auxR;
   }

   public Requisito_funcional nuevoRF (Date fecha,String Nombre, String Texto, String Importancia, String Estabilidad, String EstadoDesarrollo, String Urgencia){

       Requisito_funcional auxRF=new Requisito_funcional();

       auxRF.setFecha(fecha);
       auxRF.setNombre(Nombre);
       auxRF.setTexto(Texto);
       auxRF.setImportancia(Importancia);
       auxRF.setEstabilidad(Estabilidad);
       auxRF.setEstado_desarrollo(EstadoDesarrollo);
       auxRF.setUrgencia(Urgencia);

       this.getRequisito_funcional().add(auxRF);
       setChanged();
       notifyObservers();
       return auxRF;
   }

   public Requisito_informacion nuevoRI (Date fecha, String Nombre, String ConceptoRelevante, int ValorMaximo, String UnidadMaxima, int ValorMedio, String UnidadMedia, int Nummaximo, int NumMedio, String Importancia, String Estabilidad, String EstadoDesarrollo, String Urgencia){

       Requisito_informacion auxRI=new Requisito_informacion();

       auxRI.setFecha(fecha);
       auxRI.setNombre(Nombre);
       auxRI.setImportancia(Importancia);
       auxRI.setEstabilidad(Estabilidad);
       auxRI.setEstado_desarrollo(EstadoDesarrollo);
       auxRI.setUrgencia(Urgencia);
       auxRI.setConceptoRelevante(ConceptoRelevante);
       auxRI.setValorMaximo(ValorMaximo);
       auxRI.setUnidadMaxima(UnidadMaxima);
       auxRI.setValorMedio(ValorMedio);
       auxRI.setUnidadMedia(UnidadMedia);
       auxRI.setNummaximo(Nummaximo);
       auxRI.setNumMedio(NumMedio);

       this.getRequisito_informacion().add(auxRI);
       setChanged();
       notifyObservers();
       return auxRI;
   }

   public Requisito_no_funcional nuevoRNF (Date fecha, String Nombre, String Texto, String Importancia, String Estabilidad, String EstadoDesarrollo, String Urgencia){

       Requisito_no_funcional auxRNF=new Requisito_no_funcional();

       auxRNF.setFecha(fecha);
       auxRNF.setNombre(Nombre);
       auxRNF.setTexto(Texto);
       auxRNF.setImportancia(Importancia);
       auxRNF.setEstabilidad(Estabilidad);
       auxRNF.setEstado_desarrollo(EstadoDesarrollo);
       auxRNF.setUrgencia(Urgencia);

       this.getRequisito_no_funcional().add(auxRNF);
       setChanged();
       notifyObservers();
       return auxRNF;
   }

   public Requisito_restriccion nuevoRR (Date fecha, String Nombre, String Texto, String Importancia, String Estabilidad, String EstadoDesarrollo, String Urgencia){

       Requisito_restriccion auxRR=new Requisito_restriccion();

       auxRR.setFecha(fecha);
       auxRR.setNombre(Nombre);
       auxRR.setTexto(Texto);
       auxRR.setImportancia(Importancia);
       auxRR.setEstabilidad(Estabilidad);
       auxRR.setEstado_desarrollo(EstadoDesarrollo);
       auxRR.setUrgencia(Urgencia);

       this.getRequisito_restriccion().add(auxRR);
       setChanged();
       notifyObservers();
       return auxRR;
   }

   public Objetivo nuevoObjetivo (Date fecha, String nombre, String descripcion, String Importancia, String Urgencia, String Estabilidad, String EstadoDesarrollo, String Comentarios){

       Objetivo auxObj=new Objetivo();

       auxObj.setFecha(fecha);
       auxObj.setNombre(nombre);
       auxObj.setDescripcion(descripcion);
       auxObj.setImportancia(Importancia);
       auxObj.setEstabilidad(Estabilidad);
       auxObj.setEstadodeDesarrollo(EstadoDesarrollo);
       auxObj.setUrgencia(Urgencia);
       auxObj.setComentarios(Comentarios);

       this.getObjetivo().add(auxObj);
       setChanged();
       notifyObservers();
       return auxObj;
   }

   public Organizacion nuevoOrg (Date fecha, String nombre, String direccion,int telefono, String participantesAsociados,String comentarios){

        Organizacion auxOrg=new Organizacion();

        auxOrg.setFecha(fecha);
        auxOrg.setNombre(nombre);
        auxOrg.setComentarios(comentarios);
        auxOrg.setDireccion(direccion);
        auxOrg.setTelefono(telefono);
        auxOrg.setparticipantesAsociados(participantesAsociados);

        this.getOrganizacion().add(auxOrg);
        setChanged();
        notifyObservers();
        return auxOrg;
   }

   public Participante nuevoPA (Date fecha, String nombre, String Rol, String Organizacion, boolean esCliente, boolean esUsuario, String Comentarios, boolean esDesarrollador){

        Participante auxPA=new Participante();

        auxPA.setFecha(fecha);
        auxPA.setNombre(nombre);
        auxPA.setRol(Rol);
        auxPA.setOrganizacion(Organizacion);
        auxPA.setEsCliente(esCliente);
        auxPA.setEsUsuario(esUsuario);
        auxPA.setComentarios(Comentarios);
        auxPA.setEsDesarrollador(esDesarrollador);

        this.getParticipante().add(auxPA);
        setChanged();
        notifyObservers();
        return auxPA;
   }

   public Reunion nuevaRE (Date fecha, String nombre, String lugar, Date fecharu, int hora, String Asistente, String resultados, String Comentarios){

        Reunion auxRE=new Reunion();

        auxRE.setFecha(fecha);
        auxRE.setNombre(nombre);
        auxRE.setLugar(lugar);
        auxRE.setFecharu(fecharu);
        auxRE.sethora(hora);
        auxRE.setAsistentes(Asistente);
        auxRE.setResultados(resultados);
        auxRE.setComentarios(Comentarios);

        this.getReunion().add(auxRE);
        setChanged();
        notifyObservers();
        return auxRE;
   }

   public Matriz nuevaMatriz (Date fecha, String nombre,String FilaMatriz, String ColumnaMatriz ,String comentarios){

        Matriz auxMa=new Matriz();

        auxMa.setFecha(fecha);
        auxMa.setNombre(nombre);
        auxMa.setFilaMatriz(FilaMatriz);
        auxMa.setColumnaMatriz(ColumnaMatriz);
        auxMa.setComentarios(comentarios);

        this.getMatriz().add(auxMa);
        setChanged();
        notifyObservers();
        return auxMa;
   }

   public Parrafo nuevoParrafo (Date fecha, String nombre,String Texto, boolean eleGlosario, String Resultados, String TrazasDesde, String TrazasHacia, String comentarios){

        Parrafo auxPA=new Parrafo();

        auxPA.setFecha(fecha);
        auxPA.setNombre(nombre);
        auxPA.setTexto(Texto);
        auxPA.setEleGlosario(eleGlosario);
        auxPA.setResultados(Resultados);
        auxPA.setTrazasDesde(TrazasDesde);
        auxPA.setTrazasHacia(TrazasHacia);
        auxPA.setComentarios(comentarios);

        this.getParrafo().add(auxPA);
        setChanged();
        notifyObservers();
        return auxPA;
   }

   public Seccion nuevaSeccion (Date fecha, String nombre,boolean esSeccionNormal,boolean esApendice, boolean OrdenarNombre, String comentarios){

        Seccion auxSE=new Seccion();

        auxSE.setFecha(fecha);
        auxSE.setNombre(nombre);
        auxSE.setEsApendice(esApendice);
        auxSE.setOrdenarNombre(OrdenarNombre);
        auxSE.setEsSeccionNormal(esSeccionNormal);
        auxSE.setComentarios(comentarios);

        this.getSeccion().add(auxSE);
        setChanged();
        notifyObservers();
        return auxSE;
   }
     
   public Grafico nuevoGrafico (Date fecha, String nombre,String buscar,String TrazasDesde, String TrazasHacia, String comentarios){

        Grafico auxGR=new Grafico();

        auxGR.setFecha(fecha);
        auxGR.setNombre(nombre);
        auxGR.setbuscar(buscar);
        auxGR.setTrazasDesde(TrazasDesde);
        auxGR.setTrazasHacia(TrazasHacia);
        auxGR.setComentarios(comentarios);

        this.getGrafico().add(auxGR);
        setChanged();
        notifyObservers();
        return auxGR;
   }
    
   public void toXML(){
    ArrayList<CasodeUso> auxCU = this.getCasodeUso();
    ArrayList<Requisito_informacion> auxRI = this.getRequisito_informacion();
    ArrayList<Objetivo> auxObj = this.getObjetivo();

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        
    try{
        DocumentBuilder builder = factory.newDocumentBuilder();
        DOMImplementation implementation = builder.getDOMImplementation();
        Document document = implementation.createDocument(null, "xml", null);
        Element raiz = document.createElement("Documento");  // creamos el elemento raiz
        document.setXmlVersion("1.0"); // asignamos la version de nuestro XML
        document.getDocumentElement().appendChild(raiz);  //pegamos la raiz al documento

        for ( int i = 0; i < auxCU.size(); i++){
//      for ( Iterator iterador = this.getCasodeUso().listIterator(); iterador.hasNext(); ) {
//          CasodeUso auxCU = (CasodeUso) iterador.next();

        Element elementoA = document.createElement("CasodeUso"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxCU.get(i).getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("esAbstracto"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxCU.get(i).getEsAbstracto())); //Ingresamos la info
        Element elemento3= document.createElement("fecha"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(String.valueOf(auxCU.get(i).getfecha())); //Ingresamos la info
        Element elemento4= document.createElement("eventoActivacion"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxCU.get(i).getEventoActivacion()); //Ingresamos la info
        Element elemento5= document.createElement("frecuencia"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(String.valueOf(auxCU.get(i).getFrecuencia())); //Ingresamos la info
        Element elemento6= document.createElement("unidadFrecuencia"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxCU.get(i).getUnidadFrecuencia()); //Ingresamos la info
        Element elemento7= document.createElement("precondicion"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxCU.get(i).getPrecondicion()); //Ingresamos la info
        Element elemento8= document.createElement("postcondicion"); //creamos un nuevo elemento
        Text text8 = document.createTextNode(auxCU.get(i).getPostcondicion()); //Ingresamos la info
        Element elemento9= document.createElement("importancia"); //creamos un nuevo elemento
        Text text9 = document.createTextNode(auxCU.get(i).getImportancia()); //Ingresamos la info
        Element elemento10= document.createElement("urgencia"); //creamos un nuevo elemento
        Text text10 = document.createTextNode(auxCU.get(i).getUrgencia()); //Ingresamos la info
        Element elemento11= document.createElement("estadoDesarrollo"); //creamos un nuevo elemento
        Text text11 = document.createTextNode(auxCU.get(i).getEstadodeDesarrollo()); //Ingresamos la info
        Element elemento12= document.createElement("estabilidad"); //creamos un nuevo elemento
        Text text12 = document.createTextNode(auxCU.get(i).getEstabilidad()); //Ingresamos la info
            
        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elemento8.appendChild(text8);
        elemento9.appendChild(text9);
        elemento10.appendChild(text10);
        elemento11.appendChild(text11);
        elemento12.appendChild(text12);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        elementoA.appendChild(elemento8);
        elementoA.appendChild(elemento9);
        elementoA.appendChild(elemento10);
        elementoA.appendChild(elemento11);
        elementoA.appendChild(elemento12);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz

        List<PasoCU> auxpaso = auxCU.get(i).getPasoCU();
        for ( int j = 0; j < auxpaso.size(); j++){

//      for ( Iterator iteradorpa = this.getPasoCU().listIterator(); iteradorpa.hasNext(); ) {
//          PasoCU auxpaso = (PasoCU) iteradorpa.next();

        Element elementoB = document.createElement("NuevoPaso"); //creamos un nuevo elemento
        Element elemento13= document.createElement("esCondicional"); //creamos un nuevo elemento
        Text text13 = document.createTextNode(String.valueOf(auxpaso.get(j).getEsCondicional())); //Ingresamos la info
        Element elemento14= document.createElement("condicion"); //creamos un nuevo elemento
        Text text14 = document.createTextNode(auxpaso.get(j).getCondicion()); //Ingresamos la info
        Element elemento15= document.createElement("tipoaccion"); //creamos un nuevo elemento
        Text text15 = document.createTextNode(auxpaso.get(j).gettipoAccion()); //Ingresamos la info
        Element elemento16= document.createElement("accionrealizada"); //creamos un nuevo elemento
        Text text16 = document.createTextNode(auxpaso.get(j).getTexto()); //Ingresamos la info
        Element elemento17= document.createElement("rendimiento"); //creamos un nuevo elemento
        Text text17 = document.createTextNode(String.valueOf(auxpaso.get(j).getRendimiento())); //Ingresamos la info
        Element elemento18= document.createElement("unidad"); //creamos un nuevo elemento
        Text text18 = document.createTextNode(auxpaso.get(j).getUnidad()); //Ingresamos la info

        elemento13.appendChild(text13);
        elemento14.appendChild(text14);
        elemento15.appendChild(text15);
        elemento16.appendChild(text16);
        elemento17.appendChild(text17);
        elemento18.appendChild(text18);

        elementoB.appendChild(elemento13);
        elementoB.appendChild(elemento14);
        elementoB.appendChild(elemento15);
        elementoB.appendChild(elemento16);
        elementoB.appendChild(elemento17);
        elementoB.appendChild(elemento18);

        raiz.appendChild(elementoB); //pegamos el elemento hijo a la raiz
        }
        //Metemos Excepcion dentro de Caso de Uso y no dentro de Paso
        List<ExcepcionCU> auxexcepcion = auxCU.get(i).getExcepcionCU();
        for ( int k = 0; k < auxexcepcion.size(); k++){

        Element elementoB = document.createElement("NuevaExcepcion"); //creamos un nuevo elemento
        Element elemento19= document.createElement("condicion"); //creamos un nuevo elemento
        Text text19 = document.createTextNode(auxexcepcion.get(k).getCondicion()); //Ingresamos la info
        Element elemento20= document.createElement("tipoaccion"); //creamos un nuevo elemento
        Text text20 = document.createTextNode(auxexcepcion.get(k).gettipoAccion()); //Ingresamos la info
        Element elemento21= document.createElement("accionrealizada"); //creamos un nuevo elemento
        Text text21 = document.createTextNode(auxexcepcion.get(k).getTexto()); //Ingresamos la info
        Element elemento22= document.createElement("rendimiento"); //creamos un nuevo elemento
        Text text22 = document.createTextNode(String.valueOf(auxexcepcion.get(k).getRendimiento())); //Ingresamos la info
        Element elemento23= document.createElement("unidad"); //creamos un nuevo elemento
        Text text23 = document.createTextNode(auxexcepcion.get(k).getUnidad()); //Ingresamos la info

        elemento19.appendChild(text19);
        elemento20.appendChild(text20);
        elemento21.appendChild(text21);
        elemento22.appendChild(text22);
        elemento23.appendChild(text23);

        elementoB.appendChild(elemento19);
        elementoB.appendChild(elemento20);
        elementoB.appendChild(elemento21);
        elementoB.appendChild(elemento22);
        elementoB.appendChild(elemento23);

        raiz.appendChild(elementoB); //pegamos el elemento hijo a la raiz
        
        }
        }

        for ( Iterator iterador = this.getRequisito_funcional().listIterator(); iterador.hasNext(); ) {
            Requisito_funcional auxRF = (Requisito_funcional) iterador.next();

        Element elementoA = document.createElement("RequisitoFuncional"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxRF.getNombre()); //Ingresamos el nombre
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxRF.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Texto"); //creamos un nuevo elemento
        Text text3 = document.createTextNode("Elsistemadebera "+auxRF.getTexto()); //Ingresamos la info
        Element elemento4= document.createElement("Importancia"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxRF.getImportancia()); //Ingresamos la info
        Element elemento5= document.createElement("Urgencia"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxRF.getUrgencia()); //Ingresamos la info
        Element elemento6= document.createElement("Estado_de_desarrollo"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxRF.getEstado_desarrollo()); //Ingresamos la info
        Element elemento7= document.createElement("Estabilidad"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxRF.getEstabilidad()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getRequisito_no_funcional().listIterator(); iterador.hasNext(); ) {
            Requisito_no_funcional auxRNF = (Requisito_no_funcional) iterador.next();

        Element elementoA = document.createElement("RequisitoNoFuncional"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxRNF.getNombre()); //Ingresamos el nombre
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxRNF.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Texto"); //creamos un nuevo elemento
        Text text3 = document.createTextNode("Elsistemadebera "+auxRNF.getTexto()); //Ingresamos la info
        Element elemento4= document.createElement("Importancia"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxRNF.getImportancia()); //Ingresamos la info
        Element elemento5= document.createElement("Urgencia"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxRNF.getUrgencia()); //Ingresamos la info
        Element elemento6= document.createElement("Etado_de_desarrollo"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxRNF.getEstado_desarrollo()); //Ingresamos la info
        Element elemento7= document.createElement("Estabilidad"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxRNF.getEstabilidad()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getRequisito_restriccion().listIterator(); iterador.hasNext(); ) {
            Requisito_restriccion auxRR = (Requisito_restriccion) iterador.next();

        Element elementoA = document.createElement("RequisitoRestriccion"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxRR.getNombre()); //Ingresamos el nombre
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxRR.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Texto"); //creamos un nuevo elemento
        Text text3 = document.createTextNode("Elsistemadebera "+auxRR.getTexto()); //Ingresamos la info
        Element elemento4= document.createElement("Importancia"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxRR.getImportancia()); //Ingresamos la info
        Element elemento5= document.createElement("Urgencia"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxRR.getUrgencia()); //Ingresamos la info
        Element elemento6= document.createElement("Estado_de_desarrollo"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxRR.getEstado_desarrollo()); //Ingresamos la info
        Element elemento7= document.createElement("Estabilidad"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxRR.getEstabilidad()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( int i = 0; i < auxRI.size(); i++){

        Element elementoA = document.createElement("RequisitoInformacion"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxRI.get(i).getNombre()); //Ingresamos el nombre
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxRI.get(i).getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("conceptoRelevante"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxRI.get(i).getConceptoRelevante()); //Ingresamos la info
        Element elemento4= document.createElement("tiempomaxiomodevida"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(String.valueOf(auxRI.get(i).getValorMaximo())); //Ingresamos la info
        Element elemento5= document.createElement("unidaddetiempo"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxRI.get(i).getUnidadMaxima()); //Ingresamos la info
        Element elemento6= document.createElement("tiempominimodevida"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(String.valueOf(auxRI.get(i).getValorMedio())); //Ingresamos la info
        Element elemento7= document.createElement("unidaddetiempo"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxRI.get(i).getUnidadMedia()); //Ingresamos la info
        Element elemento8= document.createElement("ocurrenciassimultaneasnumeromaximo"); //creamos un nuevo elemento
        Text text8 = document.createTextNode(String.valueOf(auxRI.get(i).getNummaximo())); //Ingresamos la info
        Element elemento9= document.createElement("ocurrenciassimultaneasnumeromedio"); //creamos un nuevo elemento
        Text text9 = document.createTextNode(String.valueOf(auxRI.get(i).getNumMedio())); //Ingresamos la info
        Element elemento10= document.createElement("importancia"); //creamos un nuevo elemento
        Text text10 = document.createTextNode(auxRI.get(i).getImportancia()); //Ingresamos la info
        Element elemento11= document.createElement("urgencia"); //creamos un nuevo elemento
        Text text11 = document.createTextNode(auxRI.get(i).getUrgencia()); //Ingresamos la info
        Element elemento12= document.createElement("estado_de_desarrollo"); //creamos un nuevo elemento
        Text text12 = document.createTextNode(auxRI.get(i).getEstado_desarrollo()); //Ingresamos la info
        Element elemento13= document.createElement("estabilidad"); //creamos un nuevo elemento
        Text text13 = document.createTextNode(auxRI.get(i).getEstabilidad()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elemento8.appendChild(text8);
        elemento9.appendChild(text9);
        elemento10.appendChild(text10);
        elemento11.appendChild(text11);
        elemento12.appendChild(text12);
        elemento13.appendChild(text13);
        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        elementoA.appendChild(elemento8);
        elementoA.appendChild(elemento9);
        elementoA.appendChild(elemento10);
        elementoA.appendChild(elemento11);
        elementoA.appendChild(elemento12);
        elementoA.appendChild(elemento13);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz

        ArrayList<DEspecifico> auxde = auxRI.get(i).getDEspecifico();
            for ( int j = 0; j < auxde.size(); j++){

        Element elementoB = document.createElement("DatoEspecifico"); //creamos un nuevo elemento
        Element elemento14= document.createElement("descripcion"); //creamos un nuevo elemento
        Text text14 = document.createTextNode(auxde.get(j).getComentarios()); //Ingresamos la info
        Element elemento15= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text15 = document.createTextNode(auxde.get(j).getDescripcion()); //Ingresamos la info

        elemento14.appendChild(text14);
        elemento15.appendChild(text15);
        elementoB.appendChild(elemento14);
        elementoB.appendChild(elemento15);
        raiz.appendChild(elementoB);
        }
        }

        for ( Iterator iterador = this.getOrganizacion().listIterator(); iterador.hasNext(); ) {
            Organizacion auxOrg = (Organizacion) iterador.next();

        Element elementoA = document.createElement("Organizacion"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxOrg.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxOrg.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Direccion"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxOrg.getDireccion()); //Ingresamos la info
        Element elemento4= document.createElement("Telefono"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(String.valueOf(auxOrg.getTelefono())); //Ingresamos la info
        Element elemento5= document.createElement("ParticipantesAsociados"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxOrg.getparticipantesAsociados()); //Ingresamos la info
        Element elemento6= document.createElement("Comentarios"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxOrg.getComentarios()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);

        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }
        for ( Iterator iterador = this.getReunion().listIterator(); iterador.hasNext(); ) {
            Reunion auxRE = (Reunion) iterador.next();

        Element elementoA = document.createElement("Reunion"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxRE.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxRE.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("direccion"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxRE.getLugar()); //Ingresamos la info
        Element elemento4= document.createElement("fechanuev"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(String.valueOf(auxRE.getFecharu())); //Ingresamos la info
        Element elemento5= document.createElement("hora"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(String.valueOf(auxRE.gethora())); //Ingresamos la info
        Element elemento6= document.createElement("asistentes"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxRE.getAsistentes()); //Ingresamos la info
        Element elemento7= document.createElement("resultado"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxRE.getResultados()); //Ingresamos la info
        Element elemento8= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text8 = document.createTextNode(auxRE.getComentarios()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elemento8.appendChild(text8);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        elementoA.appendChild(elemento8);

        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getParticipante().listIterator(); iterador.hasNext(); ) {
            Participante auxPA = (Participante) iterador.next();

        Element elementoA = document.createElement("Participantes"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxPA.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxPA.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Rol"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxPA.getRol()); //Ingresamos la info
        Element elemento4= document.createElement("organizacion"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxPA.getOrganizacion()); //Ingresamos la info
        Element elemento5= document.createElement("esCliente"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(String.valueOf(auxPA.getEsCliente())); //Ingresamos la info
        Element elemento6= document.createElement("esUsuario"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(String.valueOf(auxPA.getEsUsuario())); //Ingresamos la info
        Element elemento7= document.createElement("esDesarrollador"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(String.valueOf(auxPA.getEsDesarrollador())); //Ingresamos la info
        Element elemento8= document.createElement("Comentarios"); //creamos un nuevo elemento
        Text text8 = document.createTextNode(auxPA.getComentarios()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elemento8.appendChild(text8);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        elementoA.appendChild(elemento8);

        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( int i = 0; i < auxObj.size(); i++){

        Element elementoA = document.createElement("Objetivo"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxObj.get(i).getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxObj.get(i).getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("Descripcion"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxObj.get(i).getDescripcion()); //Ingresamos la info
        Element elemento4= document.createElement("Importancia"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxObj.get(i).getImportancia()); //Ingresamos la info
        Element elemento5= document.createElement("Urgencia"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxObj.get(i).getUrgencia()); //Ingresamos la info
        Element elemento6= document.createElement("Estado_de_desarrollo"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxObj.get(i).getEstadodeDesarrollo()); //Ingresamos la info
        Element elemento7= document.createElement("Estabilidad"); //creamos un nuevo elemento
        Text text7 = document.createTextNode(auxObj.get(i).getEstabilidad()); //Ingresamos la info
        Element elemento8= document.createElement("Comentarios"); //creamos un nuevo elemento
        Text text8 = document.createTextNode(auxObj.get(i).getComentarios()); //Ingresamos la info
        
        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);
        elemento7.appendChild(text7);
        elemento8.appendChild(text8);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        elementoA.appendChild(elemento7);
        elementoA.appendChild(elemento8);

        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz

        ArrayList<SubObj> auxsubObj = auxObj.get(i).getSubObjetivo();
            for ( int j = 0; j < auxsubObj.size(); j++){
//        for ( Iterator iteradorpa = this.getPasoCU().listIterator(); iteradorpa.hasNext(); ) {
//                  PasoCU auxpaso = (PasoCU) iteradorpa.next();

        Element elementoB = document.createElement("SubObjetivo"); //creamos un nuevo elemento
        Element elemento9= document.createElement("Nombre"); //creamos un nuevo elemento
        Text text9 = document.createTextNode(auxsubObj.get(j).getNombre()); //Ingresamos la info
        Element elemento10= document.createElement("fecha"); //creamos un nuevo elemento
        Text text10 = document.createTextNode(String.valueOf(auxsubObj.get(j).getFecha())); //Ingresamos la info
        Element elemento11= document.createElement("Descripcion"); //creamos un nuevo elemento
        Text text11 = document.createTextNode(auxsubObj.get(j).getDescripcion()); //Ingresamos la info
        Element elemento12= document.createElement("Importancia"); //creamos un nuevo elemento
        Text text12 = document.createTextNode(auxsubObj.get(j).getImportancia()); //Ingresamos la info
        Element elemento13= document.createElement("Urgencia"); //creamos un nuevo elemento
        Text text13 = document.createTextNode(auxsubObj.get(j).getUrgencia()); //Ingresamos la info
        Element elemento14= document.createElement("Estadodesarrollo"); //creamos un nuevo elemento
        Text text14 = document.createTextNode(auxsubObj.get(j).getEstadodesarrollo()); //Ingresamos la info
        Element elemento15= document.createElement("Estabilidad"); //creamos un nuevo elemento
        Text text15 = document.createTextNode(auxsubObj.get(j).getEstabilidad()); //Ingresamos la info
        Element elemento16= document.createElement("Comentarios"); //creamos un nuevo elemento
        Text text16 = document.createTextNode(auxsubObj.get(j).getComentarios()); //Ingresamos la info

        elemento9.appendChild(text9);
        elemento10.appendChild(text10);
        elemento11.appendChild(text11);
        elemento12.appendChild(text12);
        elemento13.appendChild(text13);
        elemento14.appendChild(text14);
        elemento15.appendChild(text15);
        elemento16.appendChild(text16);

        elementoB.appendChild(elemento9);
        elementoB.appendChild(elemento10);
        elementoB.appendChild(elemento11);
        elementoB.appendChild(elemento12);
        elementoB.appendChild(elemento13);
        elementoB.appendChild(elemento14);
        elementoB.appendChild(elemento15);
        elementoB.appendChild(elemento16);

        raiz.appendChild(elementoB); //pegamos el elemento hijo a la raiz
        }
        }

        for ( Iterator iterador = this.getGrafico().listIterator(); iterador.hasNext(); ) {
            Grafico auxGR = (Grafico) iterador.next();

        Element elementoA = document.createElement("Grafico"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxGR.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxGR.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("buscar"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxGR.getbuscar()); //Ingresamos la info
        Element elemento4= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxGR.getComentarios()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getSeccion().listIterator(); iterador.hasNext(); ) {
            Seccion auxSE = (Seccion) iterador.next();

        Element elementoA = document.createElement("SeccionApendice"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxSE.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxSE.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("esSeccionNormal"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(String.valueOf(auxSE.getEsSeccionNormal())); //Ingresamos la info
        Element elemento4= document.createElement("esApendice"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(String.valueOf(auxSE.getEsApendice())); //Ingresamos la info
        Element elemento5= document.createElement("ordenarNombre"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(String.valueOf(auxSE.getOrdenarNombre())); //Ingresamos la info
        Element elemento6= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxSE.getComentarios()); //Ingresamos la info
        
        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getParrafo().listIterator(); iterador.hasNext(); ) {
            Parrafo auxParr = (Parrafo) iterador.next();

        Element elementoA = document.createElement("ParrafoGlosario"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxParr.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxParr.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("texto"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxParr.getTexto()); //Ingresamos la info
        Element elemento4= document.createElement("elementoGlosario"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(String.valueOf(auxParr.getEleGlosario())); //Ingresamos la info
        Element elemento5= document.createElement("resultados"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxParr.getResultados()); //Ingresamos la info
        Element elemento6= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text6 = document.createTextNode(auxParr.getComentarios()); //Ingresamos la info
        
        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);
        elemento6.appendChild(text6);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        elementoA.appendChild(elemento6);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        for ( Iterator iterador = this.getMatriz().listIterator(); iterador.hasNext(); ) {
            Matriz auxMA = (Matriz) iterador.next();

        Element elementoA = document.createElement("Matriz"); //creamos un nuevo elemento
        Element elemento1= document.createElement("nombre"); //creamos un nuevo elemento
        Text text1 = document.createTextNode(auxMA.getNombre()); //Ingresamos la info
        Element elemento2= document.createElement("fecha"); //creamos un nuevo elemento
        Text text2 = document.createTextNode(String.valueOf(auxMA.getFecha())); //Ingresamos la info
        Element elemento3= document.createElement("filaMatriz"); //creamos un nuevo elemento
        Text text3 = document.createTextNode(auxMA.getFilaMatriz()); //Ingresamos la info
        Element elemento4= document.createElement("columnaMatriz"); //creamos un nuevo elemento
        Text text4 = document.createTextNode(auxMA.getColumnaMatriz()); //Ingresamos la info
        Element elemento5= document.createElement("comentarios"); //creamos un nuevo elemento
        Text text5 = document.createTextNode(auxMA.getComentarios()); //Ingresamos la info

        elemento1.appendChild(text1);
        elemento2.appendChild(text2);
        elemento3.appendChild(text3);
        elemento4.appendChild(text4);
        elemento5.appendChild(text5);

        elementoA.appendChild(elemento1);
        elementoA.appendChild(elemento2);
        elementoA.appendChild(elemento3);
        elementoA.appendChild(elemento4);
        elementoA.appendChild(elemento5);
        raiz.appendChild(elementoA); //pegamos el elemento hijo a la raiz
        }

        Source source = new DOMSource(document);
        Result result = new StreamResult(new java.io.File("resultado.xml")); //nombre del archivo
        Result console= new StreamResult(System.out);

        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(source, result);
        transformer.transform(source, console);

       }catch(Exception e){
            System.err.println("Error: "+e);
        }
   }

    public Object buscarpornombre(Object o){

        String cadena=(String) o;

        String nombreCU=cadena.substring(10);//Devuelve la cadena a partir del caracter 3
        Iterator itcu=this.getCasodeUso().listIterator();
        String Condicion=cadena.substring(10);
        Iterator itpaso=this.getPasoCU().listIterator();
        String Condicion1=cadena.substring(15);
        Iterator itexcepcion=this.getExcepcionCU().listIterator();
        String nombreRF=cadena.substring(19);
        Iterator itrf=this.getRequisito_funcional().listIterator();
        String nombreRNF=cadena.substring(21);
        Iterator itrnf=this.getRequisito_no_funcional().listIterator();
        String nombreRR=cadena.substring(21);
        Iterator itrr=this.getRequisito_restriccion().listIterator();
        String nombreRI=cadena.substring(21);
        Iterator itri=this.getRequisito_informacion().listIterator();

        String descripcion=cadena.substring(15);
        Iterator itde=this.getDEspecifico().listIterator();

        String nombreObj=cadena.substring(4);
        Iterator itobj=this.getObjetivo().listIterator();
        String nombreSubObj=cadena.substring(12);
        Iterator itso=this.getSubObjetivo().listIterator();

        String nombreOrg=cadena.substring(13);
        Iterator itorg=this.getOrganizacion().listIterator();
        String nombrePA=cadena.substring(14);
        Iterator itpa=this.getParticipante().listIterator();
        String nombreRE=cadena.substring(8);
        Iterator itre=this.getReunion().listIterator();

        String nombreGrafico=cadena.substring(3);
        Iterator itgr=this.getGrafico().listIterator();
        String nombreMatriz=cadena.substring(7);
        Iterator itma=this.getMatriz().listIterator();
        String nombreSeccion=cadena.substring(3);
        Iterator itse=this.getSeccion().listIterator();
        String nombreParrafo=cadena.substring(8);
        Iterator itparr=this.getParrafo().listIterator();


        while(itcu.hasNext()){ //mientras que no llegue al final
            CasodeUso cu=(CasodeUso) itcu.next(); //Obtengo el proximo elemento del iterador
            if(cu.getNombre().equals(nombreCU)){
                return cu;
            }
        }
        while(itpaso.hasNext()){
            PasoCU paso=(PasoCU) itpaso.next();
            if(paso.getCondicion().equals(Condicion)){
                return paso;
            }
        }
        while(itexcepcion.hasNext()){
            ExcepcionCU excepcion=(ExcepcionCU) itexcepcion.next();
            if(excepcion.getCondicion().equals(Condicion1)){
                return excepcion;
            }
        }
        while(itrf.hasNext()){
            Requisito_funcional rf=(Requisito_funcional) itrf.next();
            if(rf.getNombre().equals(nombreRF)){
                return rf;
            }
        }
        while(itrnf.hasNext()){
            Requisito_no_funcional rnf=(Requisito_no_funcional) itrnf.next();
            if(rnf.getNombre().equals(nombreRNF)){
                return rnf;
            }
        }
        while(itrr.hasNext()){
            Requisito_restriccion rr=(Requisito_restriccion) itrr.next();
            if(rr.getNombre().equals(nombreRNF)){
                return rr;
            }
        }
        while(itri.hasNext()){
            Requisito_informacion ri=(Requisito_informacion) itri.next();
            if(ri.getNombre().equals(nombreRI)){
                return ri;
            }
        }
        
        while(itde.hasNext()){
            DEspecifico de=(DEspecifico) itde.next();
            if(de.getDescripcion().equals(descripcion)){
                return de;
            }
        }

        while(itobj.hasNext()){
            Objetivo obj=(Objetivo) itobj.next();
            if(obj.getNombre().equals(nombreObj)){
                return obj;
            }
        }

        while(itso.hasNext()){
            SubObj so=(SubObj) itso.next();
            if(so.getNombre().equals(nombreSubObj)){
                return so;
            }
        }

        while(itorg.hasNext()){
            Organizacion org=(Organizacion) itorg.next();
            if(org.getNombre().equals(nombreOrg)){
                return org;
            }
        }
        while(itpa.hasNext()){
            Participante pa=(Participante) itpa.next();
            if(pa.getNombre().equals(nombrePA)){
                return pa;
            }
        }
        while(itre.hasNext()){
            Reunion re=(Reunion) itre.next();
            if(re.getNombre().equals(nombreRE)){
                return re;
            }
        }
        while(itgr.hasNext()){
            Grafico grafico=(Grafico) itgr.next();
            if(grafico.getNombre().equals(nombreGrafico)){
                return grafico;
            }
        }

        while(itma.hasNext()){
            Matriz matriz=(Matriz) itma.next();
            if(matriz.getNombre().equals(nombreMatriz)){
                return matriz;
            }
        }
        while(itse.hasNext()){
            Seccion seccion=(Seccion) itse.next();
            if(seccion.getNombre().equals(nombreSeccion)){
                return seccion;
            }
        }
        while(itparr.hasNext()){
            Parrafo parrafo=(Parrafo) itparr.next();
            if(parrafo.getNombre().equals(nombreParrafo)){
                return parrafo;
            }
        }

        return null;
    }

//    @Override
//    public boolean equals(Object obj) {
//        if (obj == null) {
//            return false;
//        }
//        if (getClass() != obj.getClass()) {
//            return false;
//        }
//        final DocumentoReq other = (DocumentoReq) obj;
//        if (this.mCasodeUso != other.mCasodeUso && (this.mCasodeUso == null || !this.mCasodeUso.equals(other.mCasodeUso))) {
//            return false;
//        }
//        return true;
//    }
//
//    @Override
//    public int hashCode() {
//        int hash = 7;
//        hash = 37 * hash + (this.mCasodeUso != null ? this.mCasodeUso.hashCode() : 0);
//        return hash;
//    }
//
//    @Override
//    public String toString() {
//        return super.toString();
//    }



    public void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistencia");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public static List getData(String opt) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistencia");
        return emf.createEntityManager().createQuery("SELECT p FROM CasodeUso p").getResultList();
    }


}

