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

/*
 * jfrmPrincipal.java
 *
 * Created on 15-nov-2011, 16:34:51
 */

package vista;

import java.io.*;
import java.util.Enumeration;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import modelo.CasodeUso;
import modelo.DocumentoReq;
import modelo.PasoCU;
import java.io.File;
import java.io.StringWriter;
import java.util.Enumeration;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import modelo.DocumentoReq;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.xml.transform.dom.DOMSource;
import modelo.RendererArbol;

import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
/**
 *
 * @author acc_local
 */
public class jfrmPrincipal extends javax.swing.JFrame implements Observer{
    private DocumentoReq docPpal=new DocumentoReq();
    private jfrmElementoCreado jEleme = new jfrmElementoCreado();

    /** Creates new form jfrmPrincipal */
    public jfrmPrincipal(DocumentoReq doc) {

        docPpal=doc;
        initComponents();
        jtpDocumento.setContentType("text/html");
        jEleme.setDocPpal(doc);
        doc.addObserver(jEleme);
        this.getJtreDocumento().setCellRenderer(new RendererArbol());
    }

  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPopupMenu1 = new javax.swing.JPopupMenu();
        jmnuEditar = new javax.swing.JMenuItem();
        jmnuEliminar = new javax.swing.JMenuItem();
        jmenuAnadirPaso = new javax.swing.JMenuItem();
        jmenuAnadirExcepcion = new javax.swing.JMenuItem();
        jMenuAnadirSubObjetivo = new javax.swing.JMenuItem();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtreDocumento = new javax.swing.JTree();
        jScrollPane2 = new javax.swing.JScrollPane();
        jtpDocumento = new javax.swing.JTextPane();
        jbtnReunion = new javax.swing.JButton();
        jbtnParticipante = new javax.swing.JButton();
        jbtnNuevaSeccion = new javax.swing.JButton();
        jbtnNuevoParrafo = new javax.swing.JButton();
        jbtnFicheroGrafico = new javax.swing.JButton();
        jbtnReqRestr = new javax.swing.JButton();
        jbtnReqInf = new javax.swing.JButton();
        jbtnRastreabilidad = new javax.swing.JButton();
        jbtnReqNoFun = new javax.swing.JButton();
        jbtnreqfun = new javax.swing.JButton();
        jbtnObjetivo = new javax.swing.JButton();
        jbtnNuevoCU = new javax.swing.JButton();
        jbtnNuevaOrganizacion = new javax.swing.JButton();
        jbtnNuevoFicheroHTML = new javax.swing.JButton();
        jmnuBarraPpal = new javax.swing.JMenuBar();
        jmnuSalir = new javax.swing.JMenu();
        jmniSalir = new javax.swing.JMenuItem();

        jPopupMenu1.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
            public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) {
            }
            public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
                jPopupMenu1PopupMenuWillBecomeInvisible(evt);
            }
            public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
                jPopupMenu1PopupMenuWillBecomeVisible(evt);
            }
        });

        jmnuEditar.setText("Editar");
        jmnuEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmnuEditarActionPerformed(evt);
            }
        });
        jPopupMenu1.add(jmnuEditar);

        jmnuEliminar.setText("Eliminar");
        jmnuEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmnuEliminarActionPerformed(evt);
            }
        });
        jPopupMenu1.add(jmnuEliminar);

        jmenuAnadirPaso.setText("Añadir Paso");
        jmenuAnadirPaso.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmenuAnadirPasoActionPerformed(evt);
            }
        });
        jPopupMenu1.add(jmenuAnadirPaso);

        jmenuAnadirExcepcion.setText("Añadir Excepción");
        jmenuAnadirExcepcion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmenuAnadirExcepcionActionPerformed(evt);
            }
        });
        jPopupMenu1.add(jmenuAnadirExcepcion);

        jMenuAnadirSubObjetivo.setText("Añadir Subobjetivo");
        jMenuAnadirSubObjetivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuAnadirSubObjetivoActionPerformed(evt);
            }
        });
        jPopupMenu1.add(jMenuAnadirSubObjetivo);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.tree.DefaultMutableTreeNode treeNode1 = new javax.swing.tree.DefaultMutableTreeNode("Documento");
        jtreDocumento.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
        jtreDocumento.setComponentPopupMenu(jPopupMenu1);
        jScrollPane1.setViewportView(jtreDocumento);

        jtpDocumento.setEditable(false);
        jtpDocumento.setMaximumSize(new java.awt.Dimension(25, 25));
        jtpDocumento.setMinimumSize(new java.awt.Dimension(25, 25));
        jScrollPane2.setViewportView(jtpDocumento);

        jbtnReunion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/reunion.png"))); // NOI18N
        jbtnReunion.setToolTipText("Nueva reunión");
        jbtnReunion.setBorder(null);
        jbtnReunion.setBorderPainted(false);
        jbtnReunion.setContentAreaFilled(false);
        jbtnReunion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnReunionActionPerformed(evt);
            }
        });

        jbtnParticipante.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/participante_ico.png"))); // NOI18N
        jbtnParticipante.setToolTipText("Nuevo Participante");
        jbtnParticipante.setAlignmentY(0.0F);
        jbtnParticipante.setBorder(null);
        jbtnParticipante.setBorderPainted(false);
        jbtnParticipante.setContentAreaFilled(false);
        jbtnParticipante.setDefaultCapable(false);
        jbtnParticipante.setMargin(null);
        jbtnParticipante.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnParticipanteActionPerformed(evt);
            }
        });

        jbtnNuevaSeccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/seccion.png"))); // NOI18N
        jbtnNuevaSeccion.setToolTipText("Nueva sección");
        jbtnNuevaSeccion.setAlignmentY(0.0F);
        jbtnNuevaSeccion.setBorder(null);
        jbtnNuevaSeccion.setBorderPainted(false);
        jbtnNuevaSeccion.setContentAreaFilled(false);
        jbtnNuevaSeccion.setDefaultCapable(false);
        jbtnNuevaSeccion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnNuevaSeccionActionPerformed(evt);
            }
        });

        jbtnNuevoParrafo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/parrafo_ico.png"))); // NOI18N
        jbtnNuevoParrafo.setToolTipText("Nuevo Parrafo");
        jbtnNuevoParrafo.setAlignmentY(0.0F);
        jbtnNuevoParrafo.setAutoscrolls(true);
        jbtnNuevoParrafo.setBorder(null);
        jbtnNuevoParrafo.setBorderPainted(false);
        jbtnNuevoParrafo.setContentAreaFilled(false);
        jbtnNuevoParrafo.setDefaultCapable(false);
        jbtnNuevoParrafo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbtnNuevoParrafo.setMargin(null);
        jbtnNuevoParrafo.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/parrafo_ico.png"))); // NOI18N
        jbtnNuevoParrafo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnNuevoParrafoActionPerformed(evt);
            }
        });

        jbtnFicheroGrafico.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/Picture.png"))); // NOI18N
        jbtnFicheroGrafico.setToolTipText("Nuevo Fichero gráfico");
        jbtnFicheroGrafico.setAlignmentY(0.0F);
        jbtnFicheroGrafico.setBorder(null);
        jbtnFicheroGrafico.setBorderPainted(false);
        jbtnFicheroGrafico.setContentAreaFilled(false);
        jbtnFicheroGrafico.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnFicheroGrafico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnFicheroGraficoActionPerformed(evt);
            }
        });

        jbtnReqRestr.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/rr.png"))); // NOI18N
        jbtnReqRestr.setToolTipText("Nuevo Requisito de restricción");
        jbtnReqRestr.setAlignmentY(0.0F);
        jbtnReqRestr.setBorder(null);
        jbtnReqRestr.setBorderPainted(false);
        jbtnReqRestr.setContentAreaFilled(false);
        jbtnReqRestr.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnReqRestr.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnReqRestrActionPerformed(evt);
            }
        });

        jbtnReqInf.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/Informacion.png"))); // NOI18N
        jbtnReqInf.setToolTipText("Nuevo Requisito de información");
        jbtnReqInf.setAlignmentY(0.0F);
        jbtnReqInf.setBorder(null);
        jbtnReqInf.setBorderPainted(false);
        jbtnReqInf.setContentAreaFilled(false);
        jbtnReqInf.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnReqInf.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnReqInfActionPerformed(evt);
            }
        });

        jbtnRastreabilidad.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/matriz.png"))); // NOI18N
        jbtnRastreabilidad.setToolTipText("Nueva Matriz de rastreabilidad");
        jbtnRastreabilidad.setAlignmentY(0.0F);
        jbtnRastreabilidad.setBorder(null);
        jbtnRastreabilidad.setBorderPainted(false);
        jbtnRastreabilidad.setContentAreaFilled(false);
        jbtnRastreabilidad.setRequestFocusEnabled(false);
        jbtnRastreabilidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnRastreabilidadActionPerformed(evt);
            }
        });

        jbtnReqNoFun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/rnf.png"))); // NOI18N
        jbtnReqNoFun.setToolTipText("Nuevo Requisito no funcional");
        jbtnReqNoFun.setAlignmentY(0.0F);
        jbtnReqNoFun.setBorder(null);
        jbtnReqNoFun.setBorderPainted(false);
        jbtnReqNoFun.setContentAreaFilled(false);
        jbtnReqNoFun.setDefaultCapable(false);
        jbtnReqNoFun.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnReqNoFun.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnReqNoFunActionPerformed(evt);
            }
        });

        jbtnreqfun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/rf.png"))); // NOI18N
        jbtnreqfun.setToolTipText("Nuevo Requisito funcional");
        jbtnreqfun.setAlignmentY(0.0F);
        jbtnreqfun.setBorder(null);
        jbtnreqfun.setBorderPainted(false);
        jbtnreqfun.setContentAreaFilled(false);
        jbtnreqfun.setDefaultCapable(false);
        jbtnreqfun.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnreqfun.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnreqfunActionPerformed(evt);
            }
        });

        jbtnObjetivo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/objetivos_ico.png"))); // NOI18N
        jbtnObjetivo.setToolTipText("Nuevo Objetivo");
        jbtnObjetivo.setAlignmentY(0.0F);
        jbtnObjetivo.setBorder(null);
        jbtnObjetivo.setBorderPainted(false);
        jbtnObjetivo.setContentAreaFilled(false);
        jbtnObjetivo.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnObjetivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnObjetivoActionPerformed(evt);
            }
        });

        jbtnNuevoCU.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/casodeuso.png"))); // NOI18N
        jbtnNuevoCU.setToolTipText("Nuevo Caso de Uso");
        jbtnNuevoCU.setAlignmentY(0.0F);
        jbtnNuevoCU.setBorder(null);
        jbtnNuevoCU.setBorderPainted(false);
        jbtnNuevoCU.setContentAreaFilled(false);
        jbtnNuevoCU.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnNuevoCU.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnNuevoCUActionPerformed(evt);
            }
        });

        jbtnNuevaOrganizacion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/organizacion.png"))); // NOI18N
        jbtnNuevaOrganizacion.setToolTipText("Nueva Organización");
        jbtnNuevaOrganizacion.setAlignmentY(0.0F);
        jbtnNuevaOrganizacion.setBorderPainted(false);
        jbtnNuevaOrganizacion.setContentAreaFilled(false);
        jbtnNuevaOrganizacion.setFocusPainted(false);
        jbtnNuevaOrganizacion.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnNuevaOrganizacion.setMaximumSize(new java.awt.Dimension(25, 25));
        jbtnNuevaOrganizacion.setMinimumSize(new java.awt.Dimension(25, 25));
        jbtnNuevaOrganizacion.setPreferredSize(new java.awt.Dimension(25, 25));
        jbtnNuevaOrganizacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnNuevaOrganizacionActionPerformed(evt);
            }
        });

        jbtnNuevoFicheroHTML.setIcon(new javax.swing.ImageIcon(getClass().getResource("/iconos/html.png"))); // NOI18N
        jbtnNuevoFicheroHTML.setToolTipText("Nuevo Fichero HTML");
        jbtnNuevoFicheroHTML.setAlignmentY(0.0F);
        jbtnNuevoFicheroHTML.setBorderPainted(false);
        jbtnNuevoFicheroHTML.setContentAreaFilled(false);
        jbtnNuevoFicheroHTML.setMargin(new java.awt.Insets(0, 0, 0, 0));
        jbtnNuevoFicheroHTML.setMaximumSize(new java.awt.Dimension(25, 25));
        jbtnNuevoFicheroHTML.setMinimumSize(new java.awt.Dimension(25, 25));
        jbtnNuevoFicheroHTML.setPreferredSize(new java.awt.Dimension(25, 25));
        jbtnNuevoFicheroHTML.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnNuevoFicheroHTMLActionPerformed(evt);
            }
        });

        jmnuSalir.setText("Salir");

        jmniSalir.setText("Salir");
        jmniSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmniSalirActionPerformed(evt);
            }
        });
        jmnuSalir.add(jmniSalir);

        jmnuBarraPpal.add(jmnuSalir);

        setJMenuBar(jmnuBarraPpal);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jbtnNuevaSeccion)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnNuevoParrafo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnFicheroGrafico)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnParticipante)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnReunion)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnNuevaOrganizacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(13, 13, 13)
                        .addComponent(jbtnObjetivo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnreqfun)
                        .addGap(8, 8, 8)
                        .addComponent(jbtnReqNoFun)
                        .addGap(8, 8, 8)
                        .addComponent(jbtnReqRestr)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnReqInf)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnRastreabilidad)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jbtnNuevoCU)
                        .addGap(316, 316, 316)
                        .addComponent(jbtnNuevoFicheroHTML, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 1159, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jbtnFicheroGrafico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnParticipante, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnReunion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnNuevoParrafo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnNuevaSeccion, javax.swing.GroupLayout.Alignment.LEADING))
                    .addComponent(jbtnObjetivo)
                    .addComponent(jbtnNuevaOrganizacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jbtnRastreabilidad, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnreqfun, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnReqRestr, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnReqNoFun, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbtnReqInf, javax.swing.GroupLayout.Alignment.LEADING))
                    .addComponent(jbtnNuevoCU)
                    .addComponent(jbtnNuevoFicheroHTML, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 582, Short.MAX_VALUE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 582, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    //Antiguo código para crear casos de uso
    
    private void jmniSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmniSalirActionPerformed
        System.exit(0);
    }//GEN-LAST:event_jmniSalirActionPerformed


    private void jbtnReunionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnReunionActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmReunion jReu=new jfrmReunion(this, getDocPpal(), seleccionado, insertIndex);

                jReu.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
}//GEN-LAST:event_jbtnReunionActionPerformed

    private void jbtnParticipanteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnParticipanteActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmParticipante jPar=new jfrmParticipante(this, getDocPpal(), seleccionado, insertIndex);

                jPar.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
}//GEN-LAST:event_jbtnParticipanteActionPerformed

    private void jbtnNuevaSeccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnNuevaSeccionActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmSeccion jSecc=new jfrmSeccion(this, getDocPpal(), seleccionado, insertIndex);

                jSecc.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento");
            }
        }
    }//GEN-LAST:event_jbtnNuevaSeccionActionPerformed

    private void jbtnNuevoParrafoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnNuevoParrafoActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmParrafo jParr=new jfrmParrafo(this, getDocPpal(),jEleme, seleccionado, insertIndex);

                jParr.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
    }//GEN-LAST:event_jbtnNuevoParrafoActionPerformed

    private void jbtnFicheroGraficoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnFicheroGraficoActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmFicheroGrafico jFG=new jfrmFicheroGrafico(this, getDocPpal(),jEleme, seleccionado, insertIndex);

                jFG.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
    }//GEN-LAST:event_jbtnFicheroGraficoActionPerformed

    
    
    private void jbtnReqRestrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnReqRestrActionPerformed
                TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmRequisito jfReq=new jfrmRequisito(this, getDocPpal(), jEleme, seleccionado, insertIndex, "Restriccion");

                jfReq.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }

        }
    }//GEN-LAST:event_jbtnReqRestrActionPerformed

    private void jbtnreqfunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnreqfunActionPerformed
                 TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmRequisito jfReq=new jfrmRequisito(this, getDocPpal(),jEleme, seleccionado, insertIndex, "funcional");

                jfReq.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }

        }
    }//GEN-LAST:event_jbtnreqfunActionPerformed

    private void jbtnReqNoFunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnReqNoFunActionPerformed
                TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmRequisito jfReq=new jfrmRequisito(this, getDocPpal(),jEleme, seleccionado, insertIndex, "NoFuncional");

                jfReq.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }

        }
    }//GEN-LAST:event_jbtnReqNoFunActionPerformed

    private void jbtnReqInfActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnReqInfActionPerformed
                TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmRequisito jfReq=new jfrmRequisito(this, getDocPpal(),jEleme, seleccionado, insertIndex, "Informacion");

                jfReq.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }

        }
    }//GEN-LAST:event_jbtnReqInfActionPerformed

    private void jbtnRastreabilidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnRastreabilidadActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmRastreabilidad jRas=new jfrmRastreabilidad(this, docPpal, seleccionado, insertIndex);

                jRas.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento");
            }
        }
    }//GEN-LAST:event_jbtnRastreabilidadActionPerformed

    private void jbtnNuevoCUActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnNuevoCUActionPerformed
                TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmCasodeUso jfCU=new jfrmCasodeUso(this, getDocPpal(),jEleme, seleccionado, insertIndex);

                jfCU.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }

        }
    }//GEN-LAST:event_jbtnNuevoCUActionPerformed

    private void jbtnObjetivoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnObjetivoActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmObjetivos jObj=new jfrmObjetivos(this, getDocPpal(),jEleme, seleccionado, insertIndex);

                jObj.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
    }//GEN-LAST:event_jbtnObjetivoActionPerformed

    //FUNCION PARA ELIMINAR ELEMENTOS DEL JTREE Y DEL DOCUMENTOREQ
    //FALTA POR ELIMINAR PASOS Y EXCEPCIONES
    private void jmnuEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmnuEliminarActionPerformed

        if(JOptionPane.showConfirmDialog(jtreDocumento, "Quieres borrarlo?")==0)
        {
            DefaultTreeModel aux = (DefaultTreeModel)this.jtreDocumento.getModel();
            MutableTreeNode nodo_a_eliminar = (MutableTreeNode) this.jtreDocumento.getLastSelectedPathComponent();
            if(nodo_a_eliminar.getParent()!=null) {
                //1º- identificar el tipo de elemento que es el nodo.

                if(nodo_a_eliminar.toString().contains("CU ")) {
                    //necesitamos eliminar el caso de uso, pero para ello buscamos su índice
                    if(!getDocPpal().getCasodeUso().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getCasodeUso().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getCasodeUso().size())
                            i++;
                        if (i<getDocPpal().getCasodeUso().size()) {
                            getDocPpal().getCasodeUso().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }

                //ELIMINAR PASO
            if(nodo_a_eliminar.toString().contains("Paso "))
            {
                MutableTreeNode padre = (MutableTreeNode) nodo_a_eliminar.getParent();
                String num_paso = nodo_a_eliminar.toString().substring(5);
                int a=0;
                while(padre.toString().equals(getDocPpal().getCasodeUso().get(a).getNombre())==false && a<getDocPpal().getCasodeUso().size())
                {
                    a++;
                }
                if(a<getDocPpal().getCasodeUso().size())//si no ha llegado al final
                {
                    //mostrarMensaje(getDocPpal().getCasodeUso().get(a).getNombre());
                    int i=0;
                    while(Integer.toString(getDocPpal().getCasodeUso().get(a).getPasoCU().get(i).getNumeroPaso()).equals(num_paso)==false && i<getDocPpal().getCasodeUso().get(a).getPasoCU().size())
                        i++;
                    if (i<getDocPpal().getCasodeUso().get(a).getPasoCU().size())
                    {
                        getDocPpal().getCasodeUso().get(a).getPasoCU().remove(i);
                        aux.removeNodeFromParent(nodo_a_eliminar);
                        this.update(docPpal, aux);
                    }
                }
            }
            if(nodo_a_eliminar.toString().contains("Excep. "))
            {
                if(!getDocPpal().getCasodeUso().isEmpty())//si no está vacío
                {
                    MutableTreeNode CUPadre = (MutableTreeNode) nodo_a_eliminar.getParent().getParent();
                    int i=0;
                    while(!getDocPpal().getCasodeUso().get(i).getNombre().equals(CUPadre.toString()) && i<getDocPpal().getCasodeUso().size())
                        i++;
                    if(i<getDocPpal().getCasodeUso().size())//hemos encontrado al CU padre
                    {
                        CasodeUso CUpadre= getDocPpal().getCasodeUso().get(i);
                        i=0;
                        int pasoPadre = Integer.parseInt(nodo_a_eliminar.getParent().toString().substring(5));
                        while(CUpadre.getPasoCU().get(i).getNumeroPaso() != pasoPadre && i<CUpadre.getPasoCU().size())
                            i++;
                        if(i<CUpadre.getPasoCU().size())    //hemos encontrado al paso padre de la excepcion
                        {
                            PasoCU paso_padre = CUpadre.getPasoCU().get(i);
                            int j=0;
                            while(j<paso_padre.getExcepcionCU().size() && paso_padre.getExcepcionCU().get(j).getNumeroExcep()!= Integer.parseInt(nodo_a_eliminar.toString().substring(7)))
                                j++;
                            if(j<paso_padre.getExcepcionCU().size())//hemos encontrado la excepcion
                            {
                                //mostrarMensaje("Eliminando excepcion "+paso_padre.getExcepcionCU().get(j).getNumeroExcep());
                                paso_padre.getExcepcionCU().remove(j);
                                aux.removeNodeFromParent(nodo_a_eliminar);
                                this.update(docPpal, aux);
                            }
                        }
                    }
                }
            }
                //ELIMINAR SubObjetivo
                if(nodo_a_eliminar.toString().contains("SubObj ")) {
                    if(!getDocPpal().getmObjetivos().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmObjetivos().get(i).getNombre().equals(nodo_a_eliminar.getParent().toString())==false && i<=getDocPpal().getCasodeUso().size())
                            i++;
                        if (i<getDocPpal().getmObjetivos().size()) {
                            if(!getDocPpal().getmObjetivos().get(i).getmSubObjetivos().isEmpty())
                            {
                                int j;
                                for(j=0;j<getDocPpal().getmObjetivos().get(i).getmSubObjetivos().size();j++)
                                {
                                    if(getDocPpal().getmObjetivos().get(i).getmSubObjetivos().get(j).getNombre().equals(nodo_a_eliminar.toString()))
                                    {
                                       getDocPpal().getmObjetivos().get(i).getmSubObjetivos().remove(j);
                                       aux.removeNodeFromParent(nodo_a_eliminar);
                                       this.update(docPpal, aux);
                                    }
                                }
                            }

                        }
                    }
                }
                //ELIMINACION DE REQUISITOS
                if(nodo_a_eliminar.toString().contains("RF ")) {
                    if(!getDocPpal().getmReqFunc().isEmpty())//si no está vacío
                    {
                        int i=0;

                        while(getDocPpal().getmReqFunc().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmReqFunc().size())
                            i++;
                        if (i<getDocPpal().getmReqFunc().size()) {
                            getDocPpal().getmReqFunc().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }

    //
                if(nodo_a_eliminar.toString().contains("RNF "))//REQUISITO NO FUNCIONAL
                {
                    if(!getDocPpal().getmReqNoFunc().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmReqNoFunc().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmReqNoFunc().size())
                            i++;

                        if (i<getDocPpal().getmReqNoFunc().size()) {
                            getDocPpal().getmReqNoFunc().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("RRes "))//REQ. RESTRICCIÓN
                {
                    if(!getDocPpal().getmReqRest().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmReqRest().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmReqRest().size())
                            i++;
                        if (i<getDocPpal().getmReqRest().size()) {
                            getDocPpal().getmReqRest().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("RInf "))//REQ. INFORMACIÓN
                {
                    if(!getDocPpal().getmReqInfo().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmReqInfo().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmReqInfo().size())
                            i++;
                        if (i<getDocPpal().getmReqInfo().size()) {
                            getDocPpal().getmReqInfo().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("Parr "))//PÁRRAFO
                {
                    if(!getDocPpal().getmParrafo().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmParrafo().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmParrafo().size())
                            i++;
                        if (i<getDocPpal().getmParrafo().size()) {
                            getDocPpal().getmParrafo().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("Parti "))//PARTICIPANTE
                {
                    if(!getDocPpal().getmParticipante().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmParticipante().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmParticipante().size())
                            i++;
                        if (i<getDocPpal().getmParticipante().size()) {
                            getDocPpal().getmParticipante().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("Obj "))//OBJETIVO
                {
                    if(!getDocPpal().getmObjetivos().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmObjetivos().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmObjetivos().size())
                            i++;
                        if (i<getDocPpal().getmObjetivos().size()) {
                            getDocPpal().getmObjetivos().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("Reu "))//REUNIÓN
                {
                    if(!getDocPpal().getmReunion().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmReunion().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmReunion().size())
                            i++;
                        if (i<getDocPpal().getmReunion().size()) {
                            getDocPpal().getmReunion().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("FG "))//FICHERO GRAFICO
                {
                    if(!getDocPpal().getmFicheroGrafico().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmFicheroGrafico().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmFicheroGrafico().size())
                            i++;
                        if (i<getDocPpal().getmFicheroGrafico().size()) {
                            getDocPpal().getmFicheroGrafico().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("MRast ")) {
                    if(!getDocPpal().getmRastreabilidad().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmRastreabilidad().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmRastreabilidad().size())
                            i++;
                        if (i<getDocPpal().getmRastreabilidad().size()) {
                            getDocPpal().getmRastreabilidad().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
                if(nodo_a_eliminar.toString().contains("Secc ")) {
                    if(!getDocPpal().getmSeccion().isEmpty())//si no está vacío
                    {
                        int i=0;
                        while(getDocPpal().getmSeccion().get(i).getNombre().equals(nodo_a_eliminar.toString())==false && i<=getDocPpal().getmSeccion().size())
                            i++;
                        if (i<getDocPpal().getmSeccion().size()) {
                            getDocPpal().getmSeccion().remove(i);
                            aux.removeNodeFromParent(nodo_a_eliminar);
                            this.update(docPpal, aux);
                        }
                    }
                }
            } else
                this.mostrarMensaje("No puedes eliminar el documento!");
        }
}//GEN-LAST:event_jmnuEliminarActionPerformed

    private void jbtnNuevaOrganizacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnNuevaOrganizacionActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        } else {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Do")==true || tipo.equals("Se")==true) {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0) {
                    insertIndex=seleccionado.getChildCount();//el indice debe ser el numero que devuelve la funciona childcount xq empiezan en 0
                }

                jfrmOrganizacion jOrg=new jfrmOrganizacion(this, getDocPpal(), seleccionado, insertIndex);

                jOrg.setVisible(true);
                this.setEnabled(false);
            } else {
                mostrarMensaje("Debes seleccionar un documento o una sección");
            }
        }
    }//GEN-LAST:event_jbtnNuevaOrganizacionActionPerformed

    private void jbtnNuevoFicheroHTMLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnNuevoFicheroHTMLActionPerformed

        //creamos un objeto de tipo filechooser
        JFileChooser selectorArchivo = new JFileChooser();

        //abrimos el filechooser
        //selectorArchivo.showDialog(null,"Selecciona el archivo");
        selectorArchivo.showSaveDialog(null);
        File ruta = selectorArchivo.getSelectedFile();

                    
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = null;
        try {
            transformer = tFactory.newTransformer(new StreamSource("src/modelo/XMLDocumentoReq1.xsl"));
        } catch (TransformerConfigurationException ex) {
            Logger.getLogger(jfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            try {
                transformer.transform(new StreamSource("resultado.xml"), new StreamResult(new FileOutputStream(ruta.getPath() + ".html")));
            } catch (FileNotFoundException ex) {
                Logger.getLogger(jfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (TransformerException ex) {
            Logger.getLogger(jfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
        mostrarMensaje("fichero creado");
        
    }//GEN-LAST:event_jbtnNuevoFicheroHTMLActionPerformed




    private void jPopupMenu1PopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_jPopupMenu1PopupMenuWillBecomeVisible
        TreePath tp = getJtreDocumento().getSelectionPath();
        MutableTreeNode aux = (MutableTreeNode) tp.getLastPathComponent();
        this.jmenuAnadirPaso.setVisible(false);
        this.jmenuAnadirExcepcion.setVisible(false);
        this.jMenuAnadirSubObjetivo.setVisible(false);
        this.jmnuEditar.setVisible(false);

        if(aux!=null)
        {
            if(aux.toString().contains("CU "))
            {
                this.jmenuAnadirPaso.setVisible(true);
                this.jmnuEditar.setVisible(true);
            }
            if(aux.toString().contains("Paso "))
            {
                this.jmenuAnadirExcepcion.setVisible(true);
            }
            if(aux.toString().contains("Obj "))
            {
                this.jMenuAnadirSubObjetivo.setVisible(true);
            }
            
            
        }

    }//GEN-LAST:event_jPopupMenu1PopupMenuWillBecomeVisible

    private void jPopupMenu1PopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_jPopupMenu1PopupMenuWillBecomeInvisible
        // cuando desaparece debemos reactivar todos los que hayan podido ser desactivados

        this.jmenuAnadirPaso.setVisible(false);
        this.jmenuAnadirExcepcion.setVisible(false);
        this.jMenuAnadirSubObjetivo.setVisible(false);
        this.jmnuEditar.setVisible(false);
    }//GEN-LAST:event_jPopupMenu1PopupMenuWillBecomeInvisible

    private void jmenuAnadirPasoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmenuAnadirPasoActionPerformed

        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("CU")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();
                }

                jfrmPaso jfPaso=new jfrmPaso(this, seleccionado, insertIndex);

                jfPaso.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un caso de uso");
            }
        }
    }//GEN-LAST:event_jmenuAnadirPasoActionPerformed

    private void jmenuAnadirExcepcionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmenuAnadirExcepcionActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));
            if(tipo.equals("Pa")==true)
            {
                int insertIndex=0;

                 if(seleccionado.getChildCount()!=0)
                 {
                    insertIndex=seleccionado.getChildCount();
                 }

                jfrmExcepcion jfExcepcion=new jfrmExcepcion(this, seleccionado, insertIndex);

                jfExcepcion.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un paso");
            }
        }
    }//GEN-LAST:event_jmenuAnadirExcepcionActionPerformed

    private void jMenuAnadirSubObjetivoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuAnadirSubObjetivoActionPerformed
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null){
            mostrarMensaje("Debes seleccionar un nodo");
        }
        else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            String tipo = new String(); //Con esto copiamos los dos primeros caracteres
            String cad = new String();
            cad = seleccionado.toString();
            tipo += Character.toString(cad.charAt(0));
            tipo += Character.toString(cad.charAt(1));

            if(tipo.equals("Ob")==true)
            {
                int insertIndex=0;

                if(seleccionado.getChildCount()!=0)
                {
                   insertIndex=seleccionado.getChildCount();
                }

                jfrmObjetivos jfObjetivo=new jfrmObjetivos(this, seleccionado, insertIndex);

                jfObjetivo.setVisible(true);
                this.setEnabled(false);
            }
            else
            {
                mostrarMensaje("Debes seleccionar un objetivo");
            }
        }
    }//GEN-LAST:event_jMenuAnadirSubObjetivoActionPerformed

    private void jmnuEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmnuEditarActionPerformed
        MutableTreeNode nodo_a_editar = (MutableTreeNode)
        this.jtreDocumento.getLastSelectedPathComponent();
        int insertIndex=0;
        if(nodo_a_editar.toString().contains("CU "))
        {
            //búsqueda del elemento en su matriz correspondiente
            int i=0;
            while(docPpal.getCasodeUso().get(i).getNombre().equals(nodo_a_editar.toString())==false
&& i<docPpal.getCasodeUso().size())
                i++;
            if(i<docPpal.getCasodeUso().size())//si se cumple es porque no ha llegado al final, por tanto ha encontrado el CU
            {
                jfrmCasodeUso editarCU = new jfrmCasodeUso(this,docPpal.getCasodeUso().get(i), true);
                editarCU.setVisible(true);
                this.setEnabled(false);
            }
        }
    }//GEN-LAST:event_jmnuEditarActionPerformed


    



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem jMenuAnadirSubObjetivo;
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton jbtnFicheroGrafico;
    private javax.swing.JButton jbtnNuevaOrganizacion;
    private javax.swing.JButton jbtnNuevaSeccion;
    private javax.swing.JButton jbtnNuevoCU;
    private javax.swing.JButton jbtnNuevoFicheroHTML;
    private javax.swing.JButton jbtnNuevoParrafo;
    private javax.swing.JButton jbtnObjetivo;
    private javax.swing.JButton jbtnParticipante;
    private javax.swing.JButton jbtnRastreabilidad;
    private javax.swing.JButton jbtnReqInf;
    private javax.swing.JButton jbtnReqNoFun;
    private javax.swing.JButton jbtnReqRestr;
    private javax.swing.JButton jbtnReunion;
    private javax.swing.JButton jbtnreqfun;
    private javax.swing.JMenuItem jmenuAnadirExcepcion;
    private javax.swing.JMenuItem jmenuAnadirPaso;
    private javax.swing.JMenuItem jmniSalir;
    private javax.swing.JMenuBar jmnuBarraPpal;
    private javax.swing.JMenuItem jmnuEditar;
    private javax.swing.JMenuItem jmnuEliminar;
    private javax.swing.JMenu jmnuSalir;
    private javax.swing.JTextPane jtpDocumento;
    private javax.swing.JTree jtreDocumento;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the jtreDocumento
     */
    public javax.swing.JTree getJtreDocumento() {
        return jtreDocumento;
    }

    /**
     * @param jtreDocumento the jtreDocumento to set
     */
    public void setJtreDocumento(javax.swing.JTree jtreDocumento) {
        this.jtreDocumento = jtreDocumento;
    }

    protected void mostrarMensaje(String mensaje) {
                JOptionPane.showMessageDialog(this, mensaje, "Advertencia",
                                JOptionPane.WARNING_MESSAGE);
        }

    public String transformar() throws Exception
{
        String xmlOrigen = "resultado.xml";
        String xslOrigen = "src/modelo/XMLDocumentoReq1.xsl";
        Source xmlSource = new StreamSource(new File(xmlOrigen));
        Source xsltSource = new StreamSource(new File(xslOrigen));
        StringWriter cadenaSalida = new StringWriter();
        Result bufferResultado = new StreamResult(cadenaSalida);
        TransformerFactory factoriaTrans = TransformerFactory.newInstance();
        Transformer transformador = factoriaTrans.newTransformer(xsltSource);
        transformador.transform(xmlSource, bufferResultado);
        jtpDocumento.setText(cadenaSalida.toString());
        //guardar html en fichero físico
        return cadenaSalida.toString();
}

    public void update(Observable o, Object arg) {
        try {
            this.getJtreDocumento().setCellRenderer(new RendererArbol());
            getDocPpal().toXML();
            String res = transformar();
            
        } catch (Exception ex) {
            Logger.getLogger(jfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @return the docPpal
     */
    public DocumentoReq getDocPpal() {
        return docPpal;
    }
    public String get_SelectedNode()
    {
        String aux = new String();
        TreePath tp = getJtreDocumento().getSelectionPath();
        if(tp==null)
        {
            mostrarMensaje("Debes seleccionar un nodo");
        } else
        {
            MutableTreeNode seleccionado= (MutableTreeNode) tp.getLastPathComponent();
            aux = seleccionado.toString();
        }
        return aux;
    }

}
