/*
* 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;
}