Package com.GestDB.sql

Source Code of com.GestDB.sql.SQLPannel$ThreadQuerys

/*
* Conexion.java
*
*
* Created on 2004
* Created by Arsenio Molinero
* Copyright (C) 2004, 2005 Arsenio Molinero
*
* GestDB - a Java multi database client
*
* This file is part of GestDB.
*
* GestDB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* GestDB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GestDB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package com.GestDB.sql;

import com.GestDB.general.Trackbug;
import java.awt.*;
import com.GestDB.swing.*;
import com.utils.utilidades;
import java.sql.*;
import java.util.*;
import java.io.*;
import com.GestDB.*;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ComboBoxModel;
import javax.swing.JEditorPane;
import javax.swing.JTabbedPane;

/**
*
* @author  seni
*/
public class SQLPannel extends javax.swing.JPanel implements Literales {
   
    public SQLPannel(Gestor padre, String key, String titulo, String jdbcDriverClass1, String jdbcDriverURL1, String user1, String password1,
            boolean blimite, int nLimite, boolean bMultitabs)
    {
        this(padre, key, titulo, jdbcDriverClass1, jdbcDriverURL1, user1, password1);
        jckLimite.setSelected(blimite);
        jtLimite.setText(String.valueOf(nLimite));
        jckMultitabs.setSelected(bMultitabs);

    }
    /** Creates new form Conexion */
    public SQLPannel(Gestor padre, String key, String titulo, String jdbcDriverClass1, String jdbcDriverURL1, String user1, String password1) {
        initComponents();
        PonLiterales();
        this.key = key;
        this.padre = padre;
//        this.setTitle(titulo);
        jdbcDriverClass = jdbcDriverClass1;
        jdbcDriverURL = jdbcDriverURL1;
        user = user1;
        password = password1;

        // carga las tablas en el combo del autoquery
        try {
            jcAutoQuery.setModel(tablas());
        } catch(Exception e) {
            Trackbug.error(e, e.getMessage());
            JEditorPane jep = new JEditorPane("text/html", "<html><body><h1>" + Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION") + "</h1>" + e.getMessage() + "</body></html>");
            javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
            jscroll.setViewportView(jep);
            jtabResulserts.add(Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION").substring(0,Math.min(15, Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION").length())) + "  ", jscroll); // m�ximo 15 caracteres
            jtabResulserts.setSelectedComponent(jscroll);
        }

        // se tienen que cargar las tablas antes de crear el editor pues el editor necesita de los nombres de las tablas
        gEditor = new gestEditor(jTabbedPane1,this);
        gEditor.addEditor();
       
        vQuerys.addElement("");
        posQuery = 1;


/*       
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle TamanioMax = ge.getMaximumWindowBounds();
        Point pCentro = ge.getCenterPoint();
        setLocation((int)(pCentro.getX() - (this.getWidth()/2)),
        (int)(pCentro.getY() - (this.getHeight()/2)));
*/       

        if(padre.propiedades.containsKey("conexion.tab1.dividedlocation"))
                this.jSplitPane1.setDividerLocation(Integer.parseInt((String)padre.propiedades.get("conexion.tab1.dividedlocation")));
        if(padre.propiedades.containsKey("conexion.tab2.dividedlocation"))
                this.jSplitPane2.setDividerLocation(Integer.parseInt((String)padre.propiedades.get("conexion.tab2.dividedlocation")));
//        if(padre.propiedades.containsKey("conexion.tab4.dividedlocation"))
//                this.jSplitPane4.setDividerLocation(Integer.parseInt((String)padre.propiedades.get("conexion.tab4.dividedlocation")));
       
    }

    public String getQuery()
    {
        return gEditor.getQuery();
    }
   
    public void setQuery(String squery)
    {
        gEditor.setQuery(squery);
    }
   
    public void EjecutarQuery() {

        // salvamos las querys actuales
        Gestor.saveAll(padre);

        // comprueba el tipo
        String sQuery = gEditor.getQuery().toUpperCase();
        if( (sQuery.indexOf("SELECT ") != -1 || sQuery.indexOf("SHOW ") != -1) && sQuery.indexOf("INSERT ") == -1 && sQuery.indexOf("UPDATE ") == -1 && sQuery.indexOf("DELETE ") == -1 && (sQuery.indexOf("CREATE ") == -1 || sQuery.indexOf("SHOW ") != -1))
        {
            setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));

            // reemplazamos los tabuladores por espacios para que no den errores
            sQuery = gEditor.getQuery().trim().replaceAll("\t", " ");

            int nLimite = 1000;

            try
            {
                nLimite =  Integer.parseInt(jtLimite.getText());
            }
            catch(NumberFormatException ne)
            {
                ;
            }

            ResulsetPannel rspannel = new ResulsetPannel(sQuery, this, jdbcDriverClass, jdbcDriverURL, user, password,jckLimite.isSelected(), nLimite);
           
            if(jckMultitabs.isSelected() == false)
                jtabResulserts.removeAll();

            jtabResulserts.add(sQuery.substring(0,Math.min(15, sQuery.length())) + "  ", rspannel); // m�ximo 15 caracteres
            jtabResulserts.setSelectedComponent(rspannel);

            setCursor(java.awt.Cursor.getDefaultCursor());

            rspannel.doQuery();
        } // fin si es select
        else  // es un update o algo parecido
        {
            // si hay un delete, o un update que pregunte
            if(Gestor.propiedades.containsKey("sql.confirm_delete") && Gestor.propiedades.getProperty("sql.confirm_delete").toLowerCase().equals("true"))
            {
                if(sQuery.toLowerCase().indexOf("delete ") != -1 || sQuery.toLowerCase().indexOf("update ") != -1)
                {
                    com.GestDB.swing.Alerta al = new com.GestDB.swing.Alerta(new javax.swing.JDialog(),
                        Gestor.GetLiteral("gestor.alert","Atenci�n"), true,
                        Gestor.GetLiteral("conexion.alert_4","Se va a proceder a actualizar o eliminar los registros. �Desea continuar?"), com.GestDB.swing.Alerta.OKCANCEL);
                    al.setVisible(true);
                    if(al.getReturnStatus() != com.GestDB.swing.Alerta.RET_OK)
                    {
                        return;
                    }                   
                }
            }

            Connection connection = null;
            java.sql.Statement statement = null;
            try {
                Class.forName(jdbcDriverClass);
                Trackbug.info(Gestor.GetLiteral("conexion.opening_db","Opening db connection") + " " + jdbcDriverURL);
                if(user != null && user.trim().length() != 0)
                    connection = DriverManager.getConnection(jdbcDriverURL, user, password);
                else
                    connection = DriverManager.getConnection(jdbcDriverURL);
               
                connection.setAutoCommit(tbCommit.isSelected());
               
                statement = connection.createStatement();
                inicio = (new java.util.Date()).getTime();

                // reemplazamos los tabuladores por espacios para que no den errores
                sQuery = gEditor.getQuery().trim().replaceAll("\t", " ");

                int nRegUpdate = statement.executeUpdate(sQuery);
                fin = (new java.util.Date()).getTime();

                JEditorPane jep = new JEditorPane("text/html", "<html><body>" +
                        "<p style='color:blue;'>" + nRegUpdate + " " + Gestor.GetLiteral("conexion.reg_process","registros procesados") + "</p>" +
                        "<p>" + Gestor.GetLiteral("sqlpannel.total_time","Tiempo total") + ": " + utilidades.AddLeftCadena(String.valueOf(fin-inicio),6,"0") + "</p>" +
                        "</body></html>");
                javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
                jscroll.setViewportView(jep);
                jtabResulserts.add(sQuery.substring(0,Math.min(15, sQuery.length())), jscroll); // m�ximo 15 caracteres
                jtabResulserts.setSelectedComponent(jscroll);
               
                statement.close();
                connection.close();

                sQuery = sQuery.toUpperCase();

                // si es un create o drop table actualiza el combo de tablas
                if( sQuery.indexOf("CREATE") != -1 || sQuery.indexOf("DROP") != -1 || sQuery.indexOf("ALTER") != -1)
                {               
                    // carga las tablas en el combo del autoquery
                    try {
                        jcAutoQuery.setModel(tablas());
                    } catch(Exception e) {
                        Trackbug.error(e, e.getMessage());
                        JEditorPane jep2 = new JEditorPane("text/html", "<html><body>" +
                                "<h1>" + Gestor.GetLiteral("gestor.error_1","Error") + "</h1>" +
                                "<p style='color:red;'>" + Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION") + "</p>" +
                                "</body></html>");
                        javax.swing.JScrollPane jscroll2 = new javax.swing.JScrollPane();
                        jscroll.setViewportView(jep2);
                        jtabResulserts.add("<E> " + sQuery.substring(0,Math.min(15, sQuery.length())) + "  ", jscroll2); // m�ximo 15 caracteres
                        jtabResulserts.setSelectedComponent(jep2);
                    }
                }               
               
            }
            catch (ClassNotFoundException ex) {
                Trackbug.error(ex, Gestor.GetLiteral("conexion.classjdbc_not_found","No se encuentran las clases correspondientes al driver jdbc de la base de datos.") + ex.getMessage());

                JEditorPane jep = new JEditorPane("text/html", "<html><body>" +
                        "<h1>" + Gestor.GetLiteral("gestor.error_1","Error") + "</h1>" +
                        "<p style='color:red;'>" + ex.getMessage() + "</p>" +
                        "</body></html>");
                javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
                jscroll.setViewportView(jep);
                jtabResulserts.add("<E> " + sQuery.substring(0,Math.min(15, sQuery.length())) + "  ", jscroll); // m�ximo 15 caracteres
                jtabResulserts.setSelectedComponent(jscroll);
            }
            catch (SQLException ex) {
                Trackbug.error(ex, Gestor.GetLiteral("conexion.connect_ko","No se puede conectar con la base de datos.") + ex.getMessage());
                JEditorPane jep = new JEditorPane("text/html", "<html><body>" +
                        "<h1>" + Gestor.GetLiteral("gestor.error_1","Error") + "</h1>" +
                        "<p style='color:red;'>" + ex.getMessage() + "</p>" +
                        "</body></html>");
                javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
                jscroll.setViewportView(jep);
                jtabResulserts.add("<E> " + sQuery.substring(0,Math.min(15, sQuery.length())) + "  ", jscroll); // m�ximo 15 caracteres
                jtabResulserts.setSelectedComponent(jscroll);
            }
            finally {
                try {
                    if(statement != null)
                        statement.close();
                }
                catch (SQLException ex2) {
                    ;
                }
                try {
                    if(connection != null)
                        connection.close();
                }
                catch (SQLException ex2) {
                    ;
                }

            }
        } // fin es update
       
        writeQueryLog(gEditor.getQuery());

        if(!vQuerys.elementAt(posQuery-1).equals(gEditor.getQuery())) {
            vQuerys.addElement(gEditor.getQuery());
            posQuery = vQuerys.size();
        }
    }
   
    public void recargaTablas()
    {
        // carga las tablas en el combo del autoquery
        try {
            jcAutoQuery.setModel(tablas());
        } catch(Exception e) {
            Trackbug.error(e, e.getMessage());
            JEditorPane jep = new JEditorPane("text/html", "<html><body><h1>" + Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION") + "</h1></body></html>");
            javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
            jscroll.setViewportView(jep);
            jtabResulserts.add(Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION").substring(0,Math.min(15, Gestor.GetLiteral("conexion.no_connect","NO HAY CONEXION").length())) + "  ", jscroll); // m�ximo 15 caracteres
            jtabResulserts.setSelectedComponent(jscroll);
        }
    }

    public ComboBoxModel getTablas()
    {
        return jcAutoQuery.getModel();
    }
   
    private javax.swing.ComboBoxModel tablas() throws Exception {
        Connection connection = DriverManager.getConnection(jdbcDriverURL, user, password);
        DatabaseMetaData dbmd = connection.getMetaData();
       
        String tabla = null;
        String tipotabla = null;
        String tiposdetabla[] = new String[1];
        int numTiposTablas = 1;
        tiposdetabla[0] = "TABLE";
       
        java.util.Vector vtemp = new java.util.Vector();
        ResultSet r2 = null;
       
        r2 = dbmd.getTables(null, null, null,tiposdetabla);
        while (r2.next()) {
            tabla = r2.getString("TABLE_NAME");
            vtemp.addElement(tabla);
        }
       
        r2.close();
        return new javax.swing.DefaultComboBoxModel(vtemp);
    }

    public Vector getCampos(String tabla) throws Exception {
        Connection connection = DriverManager.getConnection(jdbcDriverURL, user, password);
        DatabaseMetaData dbmd = connection.getMetaData();
        String tipotabla = null;
        String tiposdetabla[] = new String[1];
        int numTiposTablas = 1;
        tiposdetabla[0] = "TABLE";
       
        java.util.Vector vtemp = new java.util.Vector();
        ResultSet r2 = null;
        r2 = dbmd.getColumns(null, null, tabla,null);
        while (r2.next()) {
            vtemp.addElement(r2.getString("COLUMN_NAME").toUpperCase());
        }
       
        r2.close();
        return vtemp;
    }
   
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pumEditor = new javax.swing.JPopupMenu();
        miAdd = new javax.swing.JMenuItem();
        miDel = new javax.swing.JMenuItem();
        miRen = new javax.swing.JMenuItem();
        popmEditor = new javax.swing.JPopupMenu();
        jmenuToStringJava = new javax.swing.JMenuItem();
        jmenuToStringC = new javax.swing.JMenuItem();
        jToolBar1 = new javax.swing.JToolBar();
        jButton4 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jbPrint = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        jbCut = new javax.swing.JButton();
        jbCopy = new javax.swing.JButton();
        jbPaste = new javax.swing.JButton();
        jSeparator7 = new javax.swing.JToolBar.Separator();
        jbDeshacer = new javax.swing.JButton();
        jbRehacer = new javax.swing.JButton();
        jSeparator8 = new javax.swing.JToolBar.Separator();
        jbFormatter = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        jbEjecute = new javax.swing.JButton();
        jSeparator3 = new javax.swing.JSeparator();
        jlPosicion = new javax.swing.JLabel();
        tbCommit = new javax.swing.JToggleButton();
        jSeparator4 = new javax.swing.JSeparator();
        jcAutoQuery = new javax.swing.JComboBox();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jSeparator5 = new javax.swing.JToolBar.Separator();
        jckMultitabs = new javax.swing.JCheckBox();
        jckLimite = new javax.swing.JCheckBox();
        jtLimite = new javax.swing.JTextField();
        jSeparator6 = new javax.swing.JToolBar.Separator();
        jSplitPane1 = new javax.swing.JSplitPane();
        jSplitPane2 = new javax.swing.JSplitPane();
        jPanel1 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTabbedPane1 = new com.GestDB.swing.CloseButtonTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
        jtabResulserts = new com.GestDB.swing.CloseButtonTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);

        miAdd.setText("A�adir lengueta");
        miAdd.setToolTipText("Permite a�adir otra lengueta de edici�n de sql");
        miAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                miAddActionPerformed(evt);
            }
        });
        pumEditor.add(miAdd);

        miDel.setText("Eliminar lengueta");
        miDel.setToolTipText("Permite eliminarr una lengueta del editor");
        miDel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                miDelActionPerformed(evt);
            }
        });
        pumEditor.add(miDel);

        miRen.setText("Renombrar lengueta");
        miRen.setToolTipText("Permite cambiar el nombre de la lengueta del editor");
        miRen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                miRenActionPerformed(evt);
            }
        });
        pumEditor.add(miRen);

        jmenuToStringJava.setText("Copiar al portapapeles como cadena Java");
        jmenuToStringJava.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmenuToStringJavaActionPerformed(evt);
            }
        });
        popmEditor.add(jmenuToStringJava);

        jmenuToStringC.setText("Copiar al portapapeles como cadena C");
        jmenuToStringC.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmenuToStringCActionPerformed(evt);
            }
        });
        popmEditor.add(jmenuToStringC);

        setFont(new java.awt.Font("Verdana", 0, 10)); // NOI18N
        setMinimumSize(new java.awt.Dimension(518, 261));
        setLayout(new java.awt.BorderLayout());

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);

        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/abrir2.gif"))); // NOI18N
        jButton4.setToolTipText("Abre un archivo de SQL para cargarlo en el editor de SQL activo");
        jButton4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton4.setPreferredSize(new java.awt.Dimension(25, 21));
        jButton4.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton4);

        jButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/guardar2.gif"))); // NOI18N
        jButton8.setToolTipText("Guarda el contenido del editor de sql activo en un archivo externo de SQL");
        jButton8.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton8.setPreferredSize(new java.awt.Dimension(25, 21));
        jButton8.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton8);

        jbPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/print.png"))); // NOI18N
        jbPrint.setToolTipText("Guarda el contenido del editor de sql activo en un archivo externo de SQL");
        jbPrint.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbPrint.setMaximumSize(new java.awt.Dimension(33, 33));
        jbPrint.setMinimumSize(new java.awt.Dimension(33, 33));
        jbPrint.setPreferredSize(new java.awt.Dimension(25, 21));
        jbPrint.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbPrint.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbPrintActionPerformed(evt);
            }
        });
        jToolBar1.add(jbPrint);
        jToolBar1.add(jSeparator2);

        jbCut.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/cut.gif"))); // NOI18N
        jbCut.setToolTipText("Cortar");
        jbCut.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbCut.setMaximumSize(new java.awt.Dimension(33, 33));
        jbCut.setMinimumSize(new java.awt.Dimension(33, 33));
        jbCut.setPreferredSize(new java.awt.Dimension(25, 21));
        jbCut.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbCut.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCutActionPerformed(evt);
            }
        });
        jToolBar1.add(jbCut);

        jbCopy.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/copy.gif"))); // NOI18N
        jbCopy.setToolTipText("Copiar");
        jbCopy.setFocusable(false);
        jbCopy.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbCopy.setMaximumSize(new java.awt.Dimension(33, 33));
        jbCopy.setMinimumSize(new java.awt.Dimension(33, 33));
        jbCopy.setPreferredSize(new java.awt.Dimension(25, 21));
        jbCopy.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbCopy.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCopyActionPerformed(evt);
            }
        });
        jToolBar1.add(jbCopy);

        jbPaste.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/paste.gif"))); // NOI18N
        jbPaste.setToolTipText("Pegar");
        jbPaste.setFocusable(false);
        jbPaste.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbPaste.setMaximumSize(new java.awt.Dimension(33, 33));
        jbPaste.setMinimumSize(new java.awt.Dimension(33, 33));
        jbPaste.setPreferredSize(new java.awt.Dimension(25, 21));
        jbPaste.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbPaste.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbPasteActionPerformed(evt);
            }
        });
        jToolBar1.add(jbPaste);
        jToolBar1.add(jSeparator7);

        jbDeshacer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/undo.png"))); // NOI18N
        jbDeshacer.setToolTipText("Deshacer");
        jbDeshacer.setFocusable(false);
        jbDeshacer.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbDeshacer.setPreferredSize(new java.awt.Dimension(25, 21));
        jbDeshacer.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbDeshacer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbDeshacerActionPerformed(evt);
            }
        });
        jToolBar1.add(jbDeshacer);

        jbRehacer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/redo.png"))); // NOI18N
        jbRehacer.setToolTipText("Rehacer");
        jbRehacer.setFocusable(false);
        jbRehacer.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbRehacer.setPreferredSize(new java.awt.Dimension(25, 21));
        jbRehacer.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbRehacer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbRehacerActionPerformed(evt);
            }
        });
        jToolBar1.add(jbRehacer);
        jToolBar1.add(jSeparator8);

        jbFormatter.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jbFormatter.setForeground(new java.awt.Color(0, 102, 102));
        jbFormatter.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/formatter.png"))); // NOI18N
        jbFormatter.setToolTipText("Genera la query y muestra los resultados");
        jbFormatter.setFocusable(false);
        jbFormatter.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbFormatter.setPreferredSize(new java.awt.Dimension(25, 21));
        jbFormatter.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbFormatter.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbFormatterActionPerformed(evt);
            }
        });
        jToolBar1.add(jbFormatter);

        jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jSeparator1.setMaximumSize(new java.awt.Dimension(8, 32767));
        jToolBar1.add(jSeparator1);

        jbEjecute.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/run2.gif"))); // NOI18N
        jbEjecute.setToolTipText("Ejecuta la query del editor activo");
        jbEjecute.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbEjecute.setPreferredSize(new java.awt.Dimension(25, 21));
        jbEjecute.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbEjecute.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbEjecuteActionPerformed(evt);
            }
        });
        jbEjecute.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jbEjecuteKeyReleased(evt);
            }
        });
        jToolBar1.add(jbEjecute);

        jSeparator3.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jSeparator3.setMaximumSize(new java.awt.Dimension(8, 32767));
        jToolBar1.add(jSeparator3);

        jlPosicion.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jlPosicion.setText("0000:0000");
        jlPosicion.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jlPosicion.setPreferredSize(new java.awt.Dimension(90, 21));
        jToolBar1.add(jlPosicion);

        tbCommit.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        tbCommit.setText("Commit Off");
        tbCommit.setToolTipText("Activa/Deshactiva el commit autom�tico para las sentencias que se ejecuten desde las pesta�as de SQL");
        tbCommit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        tbCommit.setMargin(new java.awt.Insets(2, 3, 2, 3));
        tbCommit.setMaximumSize(new java.awt.Dimension(90, 44));
        tbCommit.setMinimumSize(new java.awt.Dimension(90, 44));
        tbCommit.setPreferredSize(new java.awt.Dimension(90, 21));
        tbCommit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tbCommitActionPerformed(evt);
            }
        });
        tbCommit.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tbCommitKeyReleased(evt);
            }
        });
        jToolBar1.add(tbCommit);

        jSeparator4.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jSeparator4.setMaximumSize(new java.awt.Dimension(8, 32767));
        jToolBar1.add(jSeparator4);

        jcAutoQuery.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jcAutoQuery.setToolTipText("Listado de tablas para utilizar con el autoQuery. Seleccione una tabla y pulse generar");
        jcAutoQuery.setMinimumSize(new java.awt.Dimension(120, 25));
        jcAutoQuery.setPreferredSize(new java.awt.Dimension(200, 21));
        jcAutoQuery.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jcAutoQueryItemStateChanged(evt);
            }
        });
        jToolBar1.add(jcAutoQuery);

        jButton6.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jButton6.setForeground(new java.awt.Color(0, 102, 102));
        jButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/filtro.gif"))); // NOI18N
        jButton6.setToolTipText("Permite indicar los filtros a aplicar a la tabla con el autoquery.");
        jButton6.setOpaque(false);
        jButton6.setPreferredSize(new java.awt.Dimension(25, 21));
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton6);

        jButton7.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jButton7.setForeground(new java.awt.Color(0, 102, 102));
        jButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/generar.gif"))); // NOI18N
        jButton7.setToolTipText("Genera la query y muestra los resultados");
        jButton7.setPreferredSize(new java.awt.Dimension(25, 21));
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton7);
        jToolBar1.add(jSeparator5);

        jckMultitabs.setSelected(true);
        jckMultitabs.setText("Pesta�as");
        jckMultitabs.setFocusable(false);
        jckMultitabs.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jckMultitabs.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jckMultitabs.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jckMultitabsActionPerformed(evt);
            }
        });
        jToolBar1.add(jckMultitabs);

        jckLimite.setSelected(true);
        jckLimite.setText("Limite");
        jckLimite.setFocusable(false);
        jckLimite.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jckLimite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jckLimiteActionPerformed(evt);
            }
        });
        jToolBar1.add(jckLimite);

        jtLimite.setText("1000");
        jtLimite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jtLimiteActionPerformed(evt);
            }
        });
        jToolBar1.add(jtLimite);
        jToolBar1.add(jSeparator6);

        add(jToolBar1, java.awt.BorderLayout.NORTH);

        jSplitPane1.setDividerLocation(100);
        jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);

        jSplitPane2.setDividerLocation(20);
        jSplitPane2.setDividerSize(0);

        jPanel1.setOpaque(false);
        jPanel1.setLayout(new java.awt.GridLayout(3, 1));

        jButton3.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
        jButton3.setText("+");
        jButton3.setToolTipText("A�ade una pesta�a");
        jButton3.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton3.setMargin(new java.awt.Insets(2, 3, 2, 3));
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton3);

        jButton1.setForeground(new java.awt.Color(0, 102, 0));
        jButton1.setText("<");
        jButton1.setToolTipText("Query anterior");
        jButton1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setMargin(new java.awt.Insets(2, 3, 2, 3));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1);

        jButton2.setForeground(new java.awt.Color(0, 102, 0));
        jButton2.setText(">");
        jButton2.setToolTipText("Query siguiente");
        jButton2.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton2.setMargin(new java.awt.Insets(2, 3, 2, 3));
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2);

        jSplitPane2.setLeftComponent(jPanel1);

        jTabbedPane1.setBackground(new java.awt.Color(204, 204, 204));
        jTabbedPane1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTabbedPane1MouseClicked(evt);
            }
        });
        jSplitPane2.setRightComponent(jTabbedPane1);

        jSplitPane1.setLeftComponent(jSplitPane2);

        jtabResulserts.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jtabResulsertsMouseClicked(evt);
            }
        });
        jSplitPane1.setRightComponent(jtabResulserts);

        add(jSplitPane1, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

    private void miRenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_miRenActionPerformed
        RenameTitle rt = new RenameTitle(gEditor);
        padre.DesktopPanel.add(rt);
        rt.setVisible(true);
    }//GEN-LAST:event_miRenActionPerformed

    private void jbEjecuteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbEjecuteActionPerformed
        // comprobamos si se esta ejecutando una query
        if(bFinalizar == false)
        {
            bFinalizar = true;
        }
        else
        {
            // Ejecuta la query del editor activo
            if(gEditor.getQuery().indexOf(";") != -1 || gEditor.getQuery().toLowerCase().indexOf("delimiter") != -1)
                jbEjecutarTodo();
            else EjecutarQuery();
        }

    }//GEN-LAST:event_jbEjecuteActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        // Guarda el contenido del editor de sql activo en un archivo externo de SQL
        javax.swing.JFileChooser jfc = new javax.swing.JFileChooser();
        jfc.setFileSelectionMode(jfc.FILES_AND_DIRECTORIES);
        jfc.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
        if(padre.propiedades.containsKey("conexion.guargar.ultimo_dir"))
            jfc.setCurrentDirectory(new File((String)padre.propiedades.get("conexion.guargar.ultimo_dir")));
        if(jfc.showOpenDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION) {
            try {
                padre.propiedades.put("conexion.guargar.ultimo_dir", jfc.getCurrentDirectory().getAbsolutePath());
                utilidades.crea_Archivo(jfc.getSelectedFile().getAbsolutePath(),gEditor.getQuery().getBytes());
            } catch(java.io.IOException ioe) {
                JEditorPane jep = new JEditorPane("text/html", "<html><body><h1>" + ioe.getMessage() + "</h1></body></html>");
                javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
                jscroll.setViewportView(jep);
                jtabResulserts.add(Gestor.GetLiteral("gestor.error_1","Error") + "  ", jscroll);
                jtabResulserts.setSelectedComponent(jscroll);
            }
        }

    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        // Abre un archivo de sql
        javax.swing.JFileChooser jfc = new javax.swing.JFileChooser();
        jfc.setFileSelectionMode(jfc.FILES_AND_DIRECTORIES);
        if(padre.propiedades.containsKey("conexion.abrir.ultimo_dir"))
            jfc.setCurrentDirectory(new File((String)padre.propiedades.get("conexion.abrir.ultimo_dir")));
        if(jfc.showOpenDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION) {
            try {
                padre.propiedades.put("conexion.abrir.ultimo_dir", jfc.getCurrentDirectory().getAbsolutePath());
                gEditor.setQuery(new String(utilidades.lee_Archivo2(jfc.getSelectedFile().getAbsolutePath())));
            } catch(java.io.IOException ioe) {
                JEditorPane jep = new JEditorPane("text/html", "<html><body><h1>" + ioe.getMessage() + "</h1></body></html>");
                javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
                jscroll.setViewportView(jep);
                jtabResulserts.add(Gestor.GetLiteral("gestor.error_1","Error") + "  ", jscroll);
                jtabResulserts.setSelectedComponent(jscroll);
            }
        }
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jcAutoQueryItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jcAutoQueryItemStateChanged
        sFiltro = "";
    }//GEN-LAST:event_jcAutoQueryItemStateChanged

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        if(posQuery < vQuerys.size())
            ++posQuery;
        gEditor.setQuery((String)vQuerys.elementAt(posQuery - 1));
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        if(posQuery > 1)
            --posQuery;
        gEditor.setQuery((String)vQuerys.elementAt(posQuery - 1));
    }//GEN-LAST:event_jButton1ActionPerformed

    public void jbEjecutarTodo() {
        // salvamos las querys actuales
        Gestor.saveAll(padre);

        ThreadQuerys tq = new ThreadQuerys();
        tq.start();
    }
   
   
    private void miAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_miAddActionPerformed
        gEditor.addEditor();
        if(Gestor.propiedades.containsKey("sql.IrAPestanaNueva"&& Gestor.propiedades.getProperty("sql.IrAPestanaNueva").toLowerCase().equals("true"))
            jTabbedPane1.setSelectedIndex(jTabbedPane1.getTabCount()-1);
    }//GEN-LAST:event_miAddActionPerformed

    private void miDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_miDelActionPerformed
        gEditor.delEditor();
    }//GEN-LAST:event_miDelActionPerformed

    private void jTabbedPane1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTabbedPane1MouseClicked
        if((evt.getModifiers() & evt.BUTTON3_MASK) != 0 && pumEditor.isShowing() == false) {
            pumEditor.show(jTabbedPane1,evt.getX(),evt.getY());
        }
    }//GEN-LAST:event_jTabbedPane1MouseClicked

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        gEditor.addEditor();
        if(Gestor.propiedades.containsKey("sql.IrAPestanaNueva"&& Gestor.propiedades.getProperty("sql.IrAPestanaNueva").toLowerCase().equals("true"))
            jTabbedPane1.setSelectedIndex(jTabbedPane1.getTabCount()-1);
       
    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
        // tiene que tener una tabla seleccionada
        if(jcAutoQuery.getSelectedItem() != null && ((String)jcAutoQuery.getSelectedItem()).trim().length() > 0) {
            setFiltroQueryDlg queryDlg = new setFiltroQueryDlg(new java.awt.Frame(), true, jdbcDriverURL, user, password, (String)jcAutoQuery.getSelectedItem());
            queryDlg.setVisible(true);
            sFiltro = queryDlg.getFiltro();
        }
        else {
            com.GestDB.swing.Alerta al = new com.GestDB.swing.Alerta(new javax.swing.JDialog(),
                Gestor.GetLiteral("gestor.alert","Atenci�n"), true,
                Gestor.GetLiteral("gestor.alert_4","Tiene que seleccionar una tabla para poder aplicar un filtro."),
                com.GestDB.swing.Alerta.OK);
            al.setVisible(true);
        }
    }//GEN-LAST:event_jButton6ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        // Tiene que comprobar si se ha seleccionado una tabla
        if(jcAutoQuery.getSelectedItem() != null && ((String)jcAutoQuery.getSelectedItem()).trim().length() > 0) {
            String squery = "select ";
            if(jdbcDriverClass.indexOf("sqlserver") != -1)
                squery += "* from " +
                    jcAutoQuery.getSelectedItem();
            else
                squery += jcAutoQuery.getSelectedItem() + ".* from " +
                    jcAutoQuery.getSelectedItem();

            if(sFiltro != null && sFiltro.trim().length() > 0)
                squery += " where " + sFiltro;
           
            // pasa la query al editor
            gEditor.setQuery(squery);
            // ejecuta la query
            EjecutarQuery();
        }
        else {
            com.GestDB.swing.Alerta al = new com.GestDB.swing.Alerta(new javax.swing.JDialog(),
                Gestor.GetLiteral("gestor.alert","Atenci�n"), true,
                Gestor.GetLiteral("gestor.alert_5","Tiene que seleccionar una tabla para poder generar la query."),
                com.GestDB.swing.Alerta.OK);
            al.setVisible(true);
        }

    }//GEN-LAST:event_jButton7ActionPerformed

    private void tbCommitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbCommitActionPerformed
        if( tbCommit.isSelected())
        {
            tbCommit.setText("Commit ON");
        }
        else
        {
            tbCommit.setText("Commit OFF");
        }

        // miramos todos los resulset abiertos y les ponemos el commit al valor correcto
        int limit = jtabResulserts.getTabCount();
        for(int i=0; i < limit; i++)
        {
            Component compo = jtabResulserts.getTabComponentAt(i);
            if(compo instanceof ResulsetPannel)
            {
                ((ResulsetPannel)compo).jtmodel.setCommit(tbCommit.isSelected());
            }
        }
    }//GEN-LAST:event_tbCommitActionPerformed

    private void jckLimiteActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jckLimiteActionPerformed
    {//GEN-HEADEREND:event_jckLimiteActionPerformed
        int nLimite = 1000;
        try
        {
            nLimite = Integer.parseInt(jtLimite.getText());
        }
        catch(NumberFormatException ne)
        {
            ;
        }

        int limit = jtabResulserts.getTabCount();
        for(int i=0; i < limit; i++)
        {
            Component compo = jtabResulserts.getTabComponentAt(i);
            if(compo instanceof ResulsetPannel)
            {
                ((ResulsetPannel)compo).jtmodel.setLimit(jckLimite.isSelected(),nLimite);
            }
        }


        jtLimite.setEnabled(jckLimite.isSelected());
    }//GEN-LAST:event_jckLimiteActionPerformed

    private void jtLimiteActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jtLimiteActionPerformed
    {//GEN-HEADEREND:event_jtLimiteActionPerformed
        int nLimite = 1000;
        try
        {
            nLimite = Integer.parseInt(jtLimite.getText());
        }
        catch(NumberFormatException ne)
        {
            ;
        }

        int limit = jtabResulserts.getTabCount();
        for(int i=0; i < limit; i++)
        {
            Component compo = jtabResulserts.getTabComponentAt(i);
            if(compo instanceof ResulsetPannel)
            {
                ((ResulsetPannel)compo).jtmodel.setLimit(jckLimite.isSelected(),nLimite);
            }
        }

    }//GEN-LAST:event_jtLimiteActionPerformed

    private void jckMultitabsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jckMultitabsActionPerformed
        if(jckMultitabs.isSelected() == false && jtabResulserts.getTabCount() > 1)
            jtabResulserts.removeAll();

    }//GEN-LAST:event_jckMultitabsActionPerformed

    private void jtabResulsertsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtabResulsertsMouseClicked
        if ((evt.getModifiers() & evt.CTRL_MASK) == evt.CTRL_MASK && (evt.getModifiers() & evt.BUTTON1_MASK) == evt.BUTTON1_MASK)
        {
            jtabResulserts.removeAll();
        }
        // System.out.println("Mouse: " + evt.getModifiersEx() + ", mouse2: " + evt.getModifiers() + ",mascara: " + ((evt.getModifiersEx() & evt.CTRL_DOWN_MASK) == evt.CTRL_DOWN_MASK) + ", boton down: " + evt.BUTTON1_DOWN_MASK);
    }//GEN-LAST:event_jtabResulsertsMouseClicked

    private void jbFormatterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbFormatterActionPerformed
        gEditor.setQuery(Formatter.FormatQuery(gEditor.getQuery()));
    }//GEN-LAST:event_jbFormatterActionPerformed

    private void jmenuToStringJavaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmenuToStringJavaActionPerformed
        // System.out.println("Formato: \n" + Formatter.toJavaString(gEditor.getQuery()));
    }//GEN-LAST:event_jmenuToStringJavaActionPerformed

    private void jmenuToStringCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmenuToStringCActionPerformed
        // System.out.println("Formato: \n" + Formatter.toCString(gEditor.getQuery()));
    }//GEN-LAST:event_jmenuToStringCActionPerformed

    private void jbPrintActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jbPrintActionPerformed
    {//GEN-HEADEREND:event_jbPrintActionPerformed
       
        Component compo = gEditor.getEditorComponent();
        if(compo != null)
        {
            ImprimirThread it = new ImprimirThread(compo);
            it.start();
        }
    }//GEN-LAST:event_jbPrintActionPerformed

    private void jbCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbCopyActionPerformed
        gEditor.copy();
    }//GEN-LAST:event_jbCopyActionPerformed

    private void jbCutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbCutActionPerformed
        gEditor.cut();
    }//GEN-LAST:event_jbCutActionPerformed

    private void jbPasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbPasteActionPerformed
        gEditor.paste();
    }//GEN-LAST:event_jbPasteActionPerformed

    private void jbDeshacerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbDeshacerActionPerformed
        gEditor.undo();
    }//GEN-LAST:event_jbDeshacerActionPerformed

    private void jbRehacerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbRehacerActionPerformed
        gEditor.redo();
    }//GEN-LAST:event_jbRehacerActionPerformed

    private void tbCommitKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tbCommitKeyReleased
        jbEjecuteKeyReleased(evt);
    }//GEN-LAST:event_tbCommitKeyReleased

    private void jbEjecuteKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jbEjecuteKeyReleased
        if(evt.getKeyCode() == KeyEvent.VK_F5 || evt.getKeyCode() == KeyEvent.VK_F9 || (evt.getKeyCode() == KeyEvent.VK_ENTER  && evt.isControlDown()) )
        {
            // comprobamos si se esta ejecutando una query
            if(bFinalizar == false)
            {
                bFinalizar = true;
            }
            else
            {
                // Ejecuta la query del editor activo
                if(gEditor.getQuery().indexOf(";") != -1 || gEditor.getQuery().toLowerCase().indexOf("delimiter") != -1)
                    jbEjecutarTodo();
                else EjecutarQuery();
            }
        }
    }//GEN-LAST:event_jbEjecuteKeyReleased

    /** Getter for property key.
     * @return Value of property key.
     *
     */
    public java.lang.String getKey() {
        return key;
    }   
   
    /** Setter for property key.
     * @param key New value of property key.
     *
     */
    public void setKey(java.lang.String key) {
        this.key = key;
    }   

    public void putXML(String xml)
    {
        int pos1 = 0, pos2 = 0;
        String titulo1 = "", query1 = "";
        // se tiene que asegurar que la �ltima conexi�n estaba en modo clasico, de lo
        // contrario no cargar� nada de la �ltima sesi�n
        if(xml.substring(0,12).equals("<tab><title>") == false)
            return;
       
        // se recorre las distintas pesta�as y las va creando
        while(xml.length() > 0)
        {
            // coge el titulo <tab><title>***</title>
            pos1 = 12;
            pos2 = xml.indexOf("</title>");
            if(pos2 != -1)
                titulo1 = xml.substring(pos1,pos2);
            else
                break;

            // coge la query </title><query>****</query></tab>
            pos1 = pos2 + 15; // quita </title><query>
            pos2 = xml.indexOf("</query>");
            if(pos2 != -1 && pos1 < xml.length())
                query1 = xml.substring(pos1,pos2);
            else
                break;

            // quita el final </query></tab>
            pos1 = pos2 + 14; // quita </query></tab>
            if(pos1 < xml.length())
                xml = xml.substring(pos1);
            else if(pos1 == xml.length())
                xml = "";
            else
                break;

            // ya tengo la pesta�a la creo
            gEditor.addEditor(titulo1,query1);
        }
    }

    public void setPosition(String texto)
    {
        this.jlPosicion.setText(texto);
    }

    private class ThreadQuerys extends Thread
    {
        public ThreadQuerys()
        {

        }

        public void run()
        {
            bFinalizar = false;
            // reemplazamos los tabuladores por espacios para que no den errores
            String sQuery = gEditor.getQuery().trim().replaceAll("\t", " ");

            // saca todo el contenido del textbox y los separa por ;
            // las querys van separadas por ;
            // a no ser que sean create procedures o crete funtion, dependiendo del gestor se interpretan de una manera distinta
            Vector sentencias = new Vector();
            String resultado = "<html><body><ul>";
            boolean hayError = false;
            String tmp = "";
            boolean primeravezConfirm = true;

            String sQueryATratar = gEditor.getQuery().trim();
            String sQueryTemp = "";
            int iLimit = sQueryATratar.length();
            int pos = 0;
            int posComilla = 0;
            int ultimaPos = 0;
            int ultimaPosOk = 0;
            int numComillas = 0;
            String sDelimiter = ";";
            boolean hayDelimiter = false;

            while(pos < iLimit)
            {
                // miramos si emprezamos con un cambiador de delimitador, si es asi, lo cambiamos.
                hayDelimiter = false;
                if((ultimaPos + 14) < iLimit)
                {
                    sQueryTemp = sQueryATratar.substring(ultimaPos, ultimaPos + 14).trim().toLowerCase();
                    if(sQueryTemp.startsWith("delimiter"))
                    {
                        hayDelimiter = true;
                        // cambiamos el delimitador
                        String sValores[] = sQueryTemp.substring(10).split("[\\f\\s\\n]");
                        if(sValores.length > 0)
                            sDelimiter = sValores[0];
                    }
                }

                pos = sQueryATratar.indexOf(sDelimiter,ultimaPos);
                if(pos == -1)
                    pos = sQueryATratar.length(); // break;
               
                posComilla = ultimaPos - 1;
                // tenemos que contar cuantas comillas que hay hasta pos
                while((posComilla = sQueryATratar.indexOf('\'',posComilla + 1)) != -1 && posComilla < pos)
                    ++numComillas;

                // si el n�mero de comillas es impar, significa que estamos dentro de un comentario
                if(numComillas % 2 != 0)
                {
                    ultimaPos = pos + 1;
                    continue;
                }

                tmp = sQueryATratar.substring(ultimaPosOk,pos);
                ultimaPosOk = pos + sDelimiter.length();
                ultimaPos = ultimaPosOk;

                if(tmp.length() > 1 && !hayDelimiter)
                {
                    // si hay un delete, o un update que pregunte
                    if(primeravezConfirm && Gestor.propiedades.containsKey("sql.confirm_delete") && Gestor.propiedades.getProperty("sql.confirm_delete").toLowerCase().equals("true"))
                    {
                        if(tmp.toLowerCase().indexOf("delete ") != -1 || tmp.toLowerCase().indexOf("update ") != -1)
                        {
                            com.GestDB.swing.Alerta al = new com.GestDB.swing.Alerta(new javax.swing.JDialog(),
                                Gestor.GetLiteral("gestor.alert","Atenci�n"), true,
                                Gestor.GetLiteral("conexion.alert_4","Se va a proceder a actualizar o eliminar los registros. �Desea continuar?"), com.GestDB.swing.Alerta.OKCANCEL);
                            al.setVisible(true);
                            if(al.getReturnStatus() != com.GestDB.swing.Alerta.RET_OK)
                            {
                                return;
                            }
                        }
                        primeravezConfirm = false;
                    }

                    sentencias.addElement(tmp);
                }
            }

            if(sentencias.size() == 0) return;

            setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));

            Connection connection = null;
            java.sql.PreparedStatement statement = null;

            inicio = (new java.util.Date()).getTime();
            String sectenciaActual = "";

            try {
                //get connection
                Class.forName(jdbcDriverClass);
                if(user != null && user.trim().length() != 0)
                    connection = DriverManager.getConnection(jdbcDriverURL, user, password);
                else
                    connection = DriverManager.getConnection(jdbcDriverURL);

                connection.setAutoCommit(false);

                for (int i=0;i<sentencias.size() && !bFinalizar;i++) {
                    if (statement!=null)
                        statement.close();
                    sectenciaActual = sentencias.elementAt(i).toString();
                    statement = connection.prepareStatement(sectenciaActual);
                    resultado += "<li>Query " + i + " " + statement.executeUpdate() + " " + Gestor.GetLiteral("conexion.reg","registros") + " - " + sectenciaActual + "</li>\n";
                    Trackbug.info("Query: " + sectenciaActual);
                    statement.close();
                }

                if(!bFinalizar)
                {
                    connection.commit();
                }
                else
                {
                    connection.rollback();
                    com.GestDB.swing.Alerta al = new com.GestDB.swing.Alerta(new javax.swing.JDialog(),
                        Gestor.GetLiteral("gestor.alert","Atenci�n"), true,
                        Gestor.GetLiteral("sqlpannel.abort","Accion cancelada por el usuario. No se aplican las querys sobre la BBDD"), com.GestDB.swing.Alerta.OK);
                    al.setVisible(true);
                }
               
                connection.close();
            }
            catch (ClassNotFoundException ex) {
                resultado += "\n<li style='color:red;'>" + ex.toString() + "</li>";
                Trackbug.error(ex, ex.getMessage());
                hayError = true;
            }
            catch (SQLException ex) {
                resultado += "\n<li style='color:red;'>" + ex.toString() + " [" + sectenciaActual + "]</li>";
                Trackbug.error(ex, Gestor.GetLiteral("gestor.error_1","Error") + ": " + ex.getMessage() + " [" + sectenciaActual + "]");
                hayError = true;
                if(connection != null) {
                    try {
                        connection.rollback();
                        connection.close();
                    }catch (SQLException ex2) {
                        resultado += "\n<li style='color:red;'>" + ex.toString() + "</li>";
                        Trackbug.error(ex2, ex2.getMessage() + ", " + Gestor.GetLiteral("conexion.error_4","Error haciendo rollback."));
                    }
                }
            }

            fin = (new java.util.Date()).getTime();

            setCursor(java.awt.Cursor.getDefaultCursor());

            resultado += "</ul><p style='color:blue;'>" + Gestor.GetLiteral("sqlpannel.total_time","Tiempo total") + ": " + utilidades.AddLeftCadena(String.valueOf(fin-inicio),6,"0") + "</p>";

            JEditorPane jep = new JEditorPane("text/html", resultado + "</body></html>");
            javax.swing.JScrollPane jscroll = new javax.swing.JScrollPane();
            jscroll.setViewportView(jep);
            jtabResulserts.add((hayError?"<E>":"") + sQueryATratar.substring(0,Math.min(15, sQueryATratar.length())) + "  ", jscroll); // m�ximo 15 caracteres
            jtabResulserts.setSelectedComponent(jscroll);
           
            writeQueryLog(gEditor.getQuery());

            if(!vQuerys.elementAt(posQuery-1).equals(gEditor.getQuery())) {
                vQuerys.addElement(gEditor.getQuery());
                posQuery = vQuerys.size();
            }

            bFinalizar = true;

            jbEjecute.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/run2.gif"))); // NOI18N
            jbEjecute.setToolTipText(Gestor.GetLiteral("conexion.button_run_tooltips","Ejecuta la query del editor activo"));
        }
    }

    private void writeQueryLog(String query)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(new java.util.Date().getTime());
        String mes = String.valueOf(cal.get(Calendar.MONTH) + 1);
        String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
        String hora = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
        String minuto = String.valueOf(cal.get(Calendar.MINUTE));
        String segundo = String.valueOf(cal.get(Calendar.SECOND));
        if(mes.length() == 1)
            mes = "0" + mes;
        if(dia.length() == 1)
            dia = "0" + dia;
        if(hora.length() == 1)
            hora = "0" + hora;
        if(minuto.length() == 1)
            minuto = "0" + minuto;
        if(segundo.length() == 1)
            segundo = "0" + segundo;

        File DirLogQuery = new File("./logs");
        File fileLogQuery = new File(DirLogQuery,String.valueOf(cal.get(Calendar.YEAR)) + "-" + mes + "-" + dia + "_querys.log");

        // comprobamos si existe el directorio padre
        if(DirLogQuery.exists() == false)
        {
            if(DirLogQuery.mkdirs() == false)
                return;
        }

        try {
            FileOutputStream fout = new FileOutputStream(fileLogQuery, true);
            fout.write(("[[[{{{" + hora + ":" + minuto + ":" + segundo + "-" + query + "}}}]]]\n").getBytes());
            fout.close();
        } catch (IOException ex) {
            Logger.getLogger(SQLPannel.class.getName()).log(Level.SEVERE, null,ex);
        }

    }

    /**
     * Retorna un hashmap con todos los nombres de las tablas que hay en el combo de tablas.
     *
     * @return HashMap que tiene como key y value el nombre de la tabla pero las key estan en minusculas.
     */
    public HashMap <String, String> getTablesFromComboBox()
    {
        ComboBoxModel modelo = jcAutoQuery.getModel();
        int limite = modelo.getSize();
        String tabla = null;
       
        HashMap <String, String>hm = new HashMap<String, String>(limite);
        for(int i=0; i < limite; i++)
        {
            tabla = (String)modelo.getElementAt(i);
            hm.put(tabla.toLowerCase(), tabla);
        }
        return hm;
    }

    public void PonLiterales()
    {
         this.jButton4.setToolTipText(Gestor.GetLiteral("conexion.button_open_tooltips","Abre un archivo de SQL para cargarlo en el editor de SQL activo"));
         this.jButton8.setToolTipText(Gestor.GetLiteral("conexion.button_save_tooltips","Guarda el contenido del editor de sql activo en un archivo externo de SQL"));
         this.jbEjecute.setToolTipText(Gestor.GetLiteral("conexion.button_run_tooltips","Ejecuta la query del editor activo"));
         this.jButton3.setText(Gestor.GetLiteral("conexion.button_plus","+"));
         this.jButton3.setToolTipText(Gestor.GetLiteral("conexion.button_plus_tooltips","A�ade una pesta�a"));
         this.jButton1.setText(Gestor.GetLiteral("conexion.button_min","<"));
         this.jButton1.setToolTipText(Gestor.GetLiteral("conexion.button_min_tooltips","Query anterior"));
         this.jButton2.setText(Gestor.GetLiteral("conexion.button_max",">"));
         this.jButton2.setToolTipText(Gestor.GetLiteral("conexion.button_max_tooltips","Query siguiente"));
         this.jButton6.setToolTipText(Gestor.GetLiteral("conexion.button_filter_tooltips","Permite indicar los filtros a aplicar a la tabla con el autoquery."));
         this.jButton7.setToolTipText(Gestor.GetLiteral("conexion.button_generate_tooltips","Genera la query y muestra los resultados"));
         this.jbCut.setToolTipText(Gestor.GetLiteral("conexion.button_cut","Cortar"));
         this.jbCopy.setToolTipText(Gestor.GetLiteral("conexion.button_copy","Copiar"));
         this.jbPaste.setToolTipText(Gestor.GetLiteral("conexion.button_paste","Pegar"));
         this.jbDeshacer.setToolTipText(Gestor.GetLiteral("conexion.button_undo","Deshacer"));
         this.jbRehacer.setToolTipText(Gestor.GetLiteral("conexion.button_redo","Rehacer"));
         this.tbCommit.setText(Gestor.GetLiteral("conexion.button_commit","Commit") + " " + ((this.tbCommit.isSelected())?"On":"Off"));
         this.tbCommit.setToolTipText(Gestor.GetLiteral("conexion.button_commit_tooltips","Activa/Deshactiva el commit autom�tico para las sentencias que se ejecuten desde las pesta�as de SQL"));
         this.jcAutoQuery.setToolTipText(Gestor.GetLiteral("conexion.combobox_autoquery_tooltips","Listado de tablas para utilizar con el autoQuery. Seleccione una tabla y pulse generar"));
         this.miAdd.setText(Gestor.GetLiteral("conexion.submenu_add","A�adir lengueta"));
         this.miAdd.setToolTipText(Gestor.GetLiteral("conexion.submenu_add_tooltips","Permite a�adir otra lengueta de edici�n de sql"));
         this.miDel.setText(Gestor.GetLiteral("conexion.submenu_del","Eliminar lengueta"));
         this.miDel.setToolTipText(Gestor.GetLiteral("conexion.submenu_del_tooltips","Permite eliminar una lengueta del editor"));
         this.miRen.setText(Gestor.GetLiteral("conexion.submenu_ren","Renombar lengueta"));
         this.miRen.setToolTipText(Gestor.GetLiteral("conexion.submenu_ren_tooltips","Permite cambiar el nombre de una lengueta del editor"));
         this.jckLimite.setText(Gestor.GetLiteral("ResulsetPannel.limit","Limite"));
         this.jckMultitabs.setText(Gestor.GetLiteral("ResulsetPannel.multitabs","Pesta�as"));
         this.jckMultitabs.setToolTipText(Gestor.GetLiteral("ResulsetPannel.multitabs_tooltips","Permite indicar si se quieren multiples pesta�as de resulset o una s�la."));
         this.jmenuToStringJava.setText(Gestor.GetLiteral("SQLPannel.menu.copy_java_style","Copiar al portapapeles como cadena Java"));
         this.jmenuToStringC.setText(Gestor.GetLiteral("SQLPannel.menu.copy_c_style","Copiar al portapapeles como cadena C"));

    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JSeparator jSeparator3;
    private javax.swing.JSeparator jSeparator4;
    private javax.swing.JToolBar.Separator jSeparator5;
    private javax.swing.JToolBar.Separator jSeparator6;
    private javax.swing.JToolBar.Separator jSeparator7;
    private javax.swing.JToolBar.Separator jSeparator8;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JSplitPane jSplitPane2;
    public javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JButton jbCopy;
    private javax.swing.JButton jbCut;
    private javax.swing.JButton jbDeshacer;
    private javax.swing.JButton jbEjecute;
    private javax.swing.JButton jbFormatter;
    private javax.swing.JButton jbPaste;
    private javax.swing.JButton jbPrint;
    private javax.swing.JButton jbRehacer;
    private javax.swing.JComboBox jcAutoQuery;
    public javax.swing.JCheckBox jckLimite;
    public javax.swing.JCheckBox jckMultitabs;
    private javax.swing.JLabel jlPosicion;
    private javax.swing.JMenuItem jmenuToStringC;
    private javax.swing.JMenuItem jmenuToStringJava;
    public javax.swing.JTextField jtLimite;
    public javax.swing.JTabbedPane jtabResulserts;
    private javax.swing.JMenuItem miAdd;
    private javax.swing.JMenuItem miDel;
    private javax.swing.JMenuItem miRen;
    public javax.swing.JPopupMenu popmEditor;
    private javax.swing.JPopupMenu pumEditor;
    private javax.swing.JToggleButton tbCommit;
    // End of variables declaration//GEN-END:variables
   
    private Vector vQuerys = new Vector();
    private int posQuery = 0;
    private String jdbcDriverClass=null;
    private String jdbcDriverURL=null;
    private String user=null;
    private String password=null;
    public gestEditor gEditor = null;
    private String sFiltro = "";
    private String key = "";
    public Gestor padre = null;
    private long inicio = 0;
    private long fin = 0;
    private boolean bFinalizar = true;
}
TOP

Related Classes of com.GestDB.sql.SQLPannel$ThreadQuerys

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.