Package com.GestDB

Source Code of com.GestDB.Gestor

/*
* Gestor.java
*
* Created on 2004
* Created by Arsenio Molinero
* Copyright (C) 2004, 2011 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; eitherexitr 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;

import com.GestDB.convert.ImportarDlg;
import com.GestDB.convert.wizarExportarDatos;
import com.GestDB.general.Trackbug;
import com.GestDB.sql.BuscarYReemplazar;
import com.GestDB.sql.ConexionIFrame;
import com.GestDB.sql.ConexionTXT;
import com.GestDB.sql.SQLPannel;
import com.GestDB.sql.SelectConexion;
import com.GestDB.sql.addInternalFrame;
import com.GestDB.swing.*;
import com.GestDB.update.Updater;
import com.utils.utilidades;
import java.awt.Dimension;
import java.awt.Point;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JInternalFrame;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

/**
*
* @author  Arsenio Molinero
*/
public class Gestor extends javax.swing.JFrame {

    /** Creates new form Gestor */
    public Gestor() {
        Trackbug.info("Inicio aplicaci�n");
        try {
            elGestorActivo = this;
            try {
                // cargar las librerias dinamicamente.
                CargarLibrerias(this.getClass());
            }catch(IOException ioe)
            {
                Trackbug.error(ioe, ioe.getMessage());
            }       

            CargaPropiedades(this.getClass());

            try {
                // vamos con la parte gr�fica
                String sskin = "Liquid";
                String sskintheme = "";
                if(propiedades.containsKey("gestor.skin"))
                    sskin = (String)propiedades.get("gestor.skin");
                if(propiedades.containsKey("gestor.skintheme"))
                    sskintheme = (String)propiedades.get("gestor.skintheme");

                // carga los skins
                sSkinActual = sskin + " - " + sskintheme;
                skins = new Skins(sskin,sskintheme,this);
            }catch(Exception cnfe)
            {
                ;
            }       

            initComponents();
            setTitle("GestDB " + Version);
            this.setIconImage(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/gestdb_32x32.png")).getImage());

            DesktopPanel.setAutoscrolls(true);

            // ponemos los literales en el idioma cargado.
            PonLiterales();

            // miramos si hay propiedades de como estaba la �ltima vez el entono cargado
            if(propiedades.containsKey("gestor.x") && Integer.parseInt((String)propiedades.get("gestor.x")) >= 0 &&
                    Integer.parseInt((String)propiedades.get("gestor.y")) >= 0)
            {
                this.setLocation(Integer.parseInt((String)propiedades.get("gestor.x")),
                    Integer.parseInt((String)propiedades.get("gestor.y")));
            }
            if(propiedades.containsKey("gestor.ancho") && Integer.parseInt((String)propiedades.get("gestor.ancho")) >= 100 &&
                    Integer.parseInt((String)propiedades.get("gestor.alto")) >= 100)
            {
                this.setSize(Integer.parseInt((String)propiedades.get("gestor.ancho")),
                    Integer.parseInt((String)propiedades.get("gestor.alto")));
            }

            // si es la primera vez que se caraga el sistema o se ha actualizado y es la primera vez que se ejecuta
            // tiene que indicar que se activar�n las actualizaciones autom�ticas, que si no las quiere puede
            // configurarlas en la pantalla de configuraci�n
            if(Gestor.propiedades.containsKey("sql.ComprobarActualizaciones") == false)
            {
                Gestor.propiedades.put("sql.ComprobarActualizaciones","true");
                Gestor.propiedades.put("sql.ActualizarAutomaticamente","true");

                GuardaPropiedades(this.getClass(),Gestor.propiedades);

                Alerta al = new Alerta(elGestorActivo, GetLiteral("gestor.error_1","Error"), true,
                    GetLiteral("gestor.alert_updates","El sistema se acaba de configurar para comprobar si hay actualizaciones en cada arranque, tambi�n para actualizarse autom�ticamente. Puede cambiar este comportamiento desde la ventana de configuraci�n."), Alerta.OK);
                al.setVisible(true);
                al = null;
            }

            // si estan activas las comprobaciones de las actualizaciones lanzamos el thread que se encarga de esta tarea
            if(Gestor.propiedades.containsKey("sql.ComprobarActualizaciones") && Gestor.propiedades.getProperty("sql.ComprobarActualizaciones").toLowerCase().equals("true"))
            {
                Updater updater = new Updater();
                updater.start();
            }

            if(propiedades.containsKey("gestor.conexiones.abiertas") &&
                (
                (propiedades.containsKey("gestor.abrir.conexiones") && propiedades.getProperty("gestor.abrir.conexiones").toLowerCase().equals("true")) ||
                !propiedades.containsKey("gestor.abrir.conexiones")
                ))
            {
                // la cadena que nos retorna esta separada por ";"
                String cadena = (String)propiedades.get("gestor.conexiones.abiertas");
                String cadena2 = "";
                Properties pConexiones = CargaConexiones(this.getClass());

                // si esta activa la opci�n de guardar los tabs se tiene que encargar de cargar los tabs
                String tabsXml = null;
                if((propiedades.containsKey("conexion.tabs.guardar") &&
                    propiedades.getProperty("conexion.tabs.guardar").toLowerCase().equals("true")) ||
                    !propiedades.containsKey("conexion.tabs.guardar"))
                {
                    tabsXml = getTabs(this);
                }
                String stmpTab = "", titulo1 = "", query1 = "";
                int pos1 = 0, pos2 = 0;
                Vector vConPendientesAbrir = new Vector();
                // antes de nada tenemos que mirar si hay conexiones y si es asi preguntar si desea abrirlas
                StringTokenizer st2 = new StringTokenizer(cadena,";",false);
                while(st2.hasMoreTokens())
                {
                    cadena2 = st2.nextToken();
                    if(cadena2 != null && cadena2.length() > 0)
                    {
                        vConPendientesAbrir.addElement(cadena2);
                    }
                }

                if(vConPendientesAbrir.size() > 0)
                {
                    selectOpenConnections soc = new selectOpenConnections(this, vConPendientesAbrir, tabsXml, pConexiones);
                    DesktopPanel.add(soc);
                    soc.show();
                }
            }
           
        } catch(Exception e)
        {
            Trackbug.fatal(e, e.getMessage());
        }
    }

    /**
     * Abre una conexi�n contra una base de datos
     * @param vConexiones Vector que contiene la informaci�n de las conexiones
     * @param tabsXml Contenido del xml que tiene la informaci�n de las pesta�as de la conexi�n antes de ser cerrada la �ltima vez
     * @param pConexiones propiedades de la conexi�n a abrir.
     */
    public void openConn(Vector vConexiones, String tabsXml, Properties pConexiones)
    {
        String cadena = null;
        int pos1 = 0;
        int pos2 = 0;
        try {
            for(int i=0; i < vConexiones.size(); i++)
            {
                cadena = (String)vConexiones.elementAt(i);
                ConexionIFrame conexIFrame = null;

                conexIFrame = new ConexionIFrame(this, cadena, GetLiteral("gestor.connected_to","Conexi�n con") + ": " + cadena, getConexion(cadena,pConexiones,JDBCDRIVERCLASS),
                            getConexion(cadena,pConexiones,JDBCDRIVERURL), getConexion(cadena,pConexiones,USER),
                            getConexion(cadena,pConexiones,PASSWORD));

                // si esta activa la opci�n de guarar los tabs se tiene que encargar de cargar los tabs
                if(tabsXml != null && tabsXml.indexOf("<conection><title>" + cadena + "</title>") != -1)
                {
                    pos1 = tabsXml.indexOf("<conection><title>" + cadena + "</title>");
                    pos1 = tabsXml.indexOf("</title>",pos1) + 8; // quita el title
                    pos2 = tabsXml.indexOf("</conection>",pos1);
                    if(pos2 != -1)
                    {
                        conexIFrame.putXML(tabsXml.substring(pos1,pos2));
                    }
                }

                DesktopPanel.add(conexIFrame);
                conexIFrame.setVisible(true);
            }

            // coloca las ventana en cascada
            javax.swing.JInternalFrame jif[] = DesktopPanel.getAllFrames();
            for(int i=jif.length, x=0, y=0 ;i> 0;i--,x += 20,y += 20)
                jif[i-1].setBounds(x,y,570,450);
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }
    }

    /** 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() {

        jpmIdiomas = new javax.swing.JPopupMenu();
        jpmConexionesRecientes = new javax.swing.JPopupMenu();
        DesktopPanel = new javax.swing.JDesktopPane();
        jToolBar1 = new javax.swing.JToolBar();
        jButton1 = new javax.swing.JButton();
        jbConexionesRecientes = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();

        setTitle("GestDB 2.2");
        setFont(new java.awt.Font("Verdana", 0, 10)); // NOI18N
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
        getContentPane().add(DesktopPanel, java.awt.BorderLayout.CENTER);

        jToolBar1.setFloatable(false);
        jToolBar1.setOrientation(1);
        jToolBar1.setRollover(true);
        jToolBar1.setBorderPainted(false);
        jToolBar1.setFont(new java.awt.Font("Dialog", 0, 10));
        jToolBar1.setMaximumSize(new java.awt.Dimension(50, 538));
        jToolBar1.setMinimumSize(new java.awt.Dimension(50, 538));
        jToolBar1.setPreferredSize(new java.awt.Dimension(50, 538));

        jButton1.setFont(new java.awt.Font("Dialog", 0, 8));
        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/conecta.gif"))); // NOI18N
        jButton1.setToolTipText("Abre una conexi�n con un gestor de BBDD");
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton1);

        jbConexionesRecientes.setFont(new java.awt.Font("Dialog", 0, 8));
        jbConexionesRecientes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/recent_connect.gif"))); // NOI18N
        jbConexionesRecientes.setToolTipText("Muestra las conexiones recientes");
        jbConexionesRecientes.setFocusable(false);
        jbConexionesRecientes.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jbConexionesRecientes.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jbConexionesRecientes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbConexionesRecientesActionPerformed(evt);
            }
        });
        jToolBar1.add(jbConexionesRecientes);

        jButton9.setFont(new java.awt.Font("Dialog", 0, 8));
        jButton9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/config.gif"))); // NOI18N
        jButton9.setToolTipText("Configurar la aplicaci�n");
        jButton9.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton9.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton9);

        jButton2.setFont(new java.awt.Font("Dialog", 0, 8));
        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/cascada.gif"))); // NOI18N
        jButton2.setToolTipText("Colocar las ventanas en cascada");
        jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton2);

        jButton3.setFont(new java.awt.Font("Dialog", 0, 8));
        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/mosaicoHoriz.gif"))); // NOI18N
        jButton3.setToolTipText("Colocar en mosaico horizontalaa");
        jButton3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton3.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton3);

        jButton4.setFont(new java.awt.Font("Dialog", 0, 8));
        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/mosaicoVertical.gif"))); // NOI18N
        jButton4.setToolTipText("Colocar en mosaico vertical");
        jButton4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        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);

        jButton5.setFont(new java.awt.Font("Dialog", 0, 8)); // NOI18N
        jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/ayuda.gif"))); // NOI18N
        jButton5.setToolTipText("Contenidos");
        jButton5.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton5.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton5);

        jButton8.setFont(new java.awt.Font("Dialog", 0, 8)); // NOI18N
        jButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/philosophical-gnu-sm_32_32.jpg"))); // NOI18N
        jButton8.setToolTipText("Acerca del producto");
        jButton8.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        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);

        jButton6.setFont(new java.awt.Font("Dialog", 0, 8)); // NOI18N
        jButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/gestdb_32x32.png"))); // NOI18N
        jButton6.setToolTipText("Acerca del producto");
        jButton6.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton6.setPreferredSize(new java.awt.Dimension(60, 57));
        jButton6.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        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("Dialog", 0, 8));
        jButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/spanish.jpg"))); // NOI18N
        jButton7.setText("Espa�ol");
        jButton7.setToolTipText("Permite cambiar el idioma de la aplicaci�n");
        jButton7.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton7.setMaximumSize(new java.awt.Dimension(39, 39));
        jButton7.setMinimumSize(new java.awt.Dimension(39, 39));
        jButton7.setPreferredSize(new java.awt.Dimension(39, 39));
        jButton7.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        jToolBar1.add(jButton7);

        getContentPane().add(jToolBar1, java.awt.BorderLayout.WEST);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-702)/2, (screenSize.height-447)/2, 702, 447);
    }// </editor-fold>//GEN-END:initComponents

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton9ActionPerformed
        try {
            // Abre la ventana de configuraci�n
            Configuracion conf = new Configuracion(this);
            DesktopPanel.add(conf);
            conf.setVisible(true);
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }
           
    }//GEN-LAST:event_jButton9ActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        try {
            // Abre el dialogo de Licencia
            String file = "";
            if(Gestor.propiedades.get("gestor.language") != null)
                file = "/com/GestDB/resources/licenses_" + Gestor.propiedades.get("gestor.language") + ".htm";
            else
                file = "/com/GestDB/resources/licenses_spanish.htm";
            jifAyuda help = new jifAyuda(Gestor.GetLiteral("gestor.button_license","Licencia"),file);
            DesktopPanel.add(help);
            help.setVisible(true);
            try{
                help.setMaximum(true);
            }catch(Exception e)
            {
                ;
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
        try {
            // Abre el dialogo de Contenido
            String file = "";
            if(Gestor.propiedades.get("gestor.language") != null)
                file = "/com/GestDB/resources/help_" + Gestor.propiedades.get("gestor.language") + "/help_" + Gestor.propiedades.get("gestor.language") + ".htm";
            else
                file = "/com/GestDB/resources/help_spanish/help_spanish.htm";

            jifAyuda help = new jifAyuda(Gestor.GetLiteral("gestor.button_content","Contenidos"),file);
            DesktopPanel.add(help);
            help.setVisible(true);
            try{
                help.setMaximum(true);
            }catch(Exception e)
            {
                ;
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        String sIdioma = null;
        String sTituloIdioma = null;
        try {
            // compone el men� de idiomas
            if(jpmIdiomas.isShowing() == false)
            {
                jpmIdiomas = new javax.swing.JPopupMenu();
                StringTokenizer st1 = new StringTokenizer(Gestor.GetLiteral("gestor.language_list","spanish"),";",false);
                javax.swing.JMenuItem idioma = null;
                while(st1.hasMoreTokens())
                {
                    sIdioma = st1.nextToken();
                    // saca el t�tulo del idioma
                    sTituloIdioma = Gestor.GetLiteral("gestor.language_" + sIdioma,"Espa�ol");
                    // crea el men�
                    idioma = new javax.swing.JMenuItem(sTituloIdioma, new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/" + sIdioma + ".jpg")));
                    idioma.setName(sIdioma); // le pongo el name para poner utilizarlo despues.
                    idioma.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                            CambiaIdioma(((javax.swing.JMenuItem)evt.getSource()).getName());
                        }
                    });

                    jpmIdiomas.add(idioma);
                }

                // muestra el men�
                jpmIdiomas.show(jButton7,jButton7.getX(),jButton7.getY());
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage() + " lista de idiomas: " + Gestor.GetLiteral("gestor.language_list","spanish") +
                    ". sidioma: " + sIdioma + ", sTituloIdioma: " + sTituloIdioma);
        }
           
    }//GEN-LAST:event_jButton7ActionPerformed

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
        try {
            // Abre el dialogo de acerca de...
            AcercaDe ad = new AcercaDe(new java.awt.Frame(),true);
            ad.setVisible(true);
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }//GEN-LAST:event_jButton6ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        // Coloca las ventanas en mosaico vertical
        javax.swing.JInternalFrame jif[] = DesktopPanel.getAllFrames();
        if(jif.length > 0)
        {
            int ancho = DesktopPanel.getWidth() / jif.length;
            int alto = DesktopPanel.getHeight();
            for(int i=jif.length, x=0, y=0 ;i> 0;i--,x += ancho)
                jif[i-1].setBounds(x,y,ancho,alto);
        }

    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        // Coloca las ventanas en mosaico horizontal
        javax.swing.JInternalFrame jif[] = DesktopPanel.getAllFrames();
        if(jif.length > 0)
        {
            int ancho = DesktopPanel.getWidth();
            int alto = DesktopPanel.getHeight() / jif.length;
            for(int i=jif.length, x=0, y=0 ;i> 0;i--,y += alto)
                jif[i-1].setBounds(x,y,ancho,alto);
        }

    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // Coloca las ventanas en cascada
        javax.swing.JInternalFrame jif[] = DesktopPanel.getAllFrames();
        for(int i=jif.length, x=0, y=0 ;i> 0;i--,x += 20,y += 20)
            jif[i-1].setBounds(x,y,570,450);
       
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        try {
            // Abre una conexi�n con un gestor de BBDD
            SelectConexion sc = new SelectConexion(this,true);
            sc.setVisible(true);


            if (!sc.wasCanceled() && sc.isAbrir())
            {
                // preparado la lista de conexiones recientes
                Vector vConexionesRecientes = new Vector();
                if(propiedades.containsKey("gestor.recent_connections"))
                {
                    StringTokenizer st1 = new StringTokenizer((String)propiedades.get("gestor.recent_connections"),";",false);
                    while(st1.hasMoreTokens())
                    {
                        vConexionesRecientes.addElement(st1.nextToken());
                    }
                }
                // antes de insertar el elemento teemos que mirar si ya lo teniamos para quitarlo.
                if(vConexionesRecientes.contains(sc.getKey()))
                    vConexionesRecientes.remove(sc.getKey());

                vConexionesRecientes.insertElementAt(sc.getKey(), 0);
                // las guardamos, como m�ximo las 10 �ltimas
                String sTemp = "";
                for(int i = 0, limite = vConexionesRecientes.size(); i < 10 && i < limite; i++)
                {
                    sTemp += (i > 0?";":"") + vConexionesRecientes.elementAt(i);
                }
                propiedades.put("gestor.recent_connections",sTemp);

                ConexionIFrame conexIFrame = new ConexionIFrame(this, sc.getKey(), GetLiteral("gestor.connected_to","Conexi�n con") + ": " + sc.getKey(), sc.getjdbcDriverClass(), sc.getjdbcDriverURL(), sc.getuser(), sc.getpassword());
                conexIFrame.setBounds(0, 0, DesktopPanel.getWidth(), DesktopPanel.getHeight());
                DesktopPanel.add(conexIFrame);
                boolean bPorDefecto = true;

                if((propiedades.containsKey("conexion.tabs.guardar") &&
                    propiedades.getProperty("conexion.tabs.guardar").toLowerCase().equals("true")) ||
                    !propiedades.containsKey("conexion.tabs.guardar"))
                {
                    String tabsXml = getTabs(this);
                    if(tabsXml != null && tabsXml.indexOf("<conection><title>" + sc.getKey() + "</title>") != -1)
                    {
                        int pos1 = tabsXml.indexOf("<conection><title>" + sc.getKey() + "</title>");
                        pos1 = tabsXml.indexOf("</title>",pos1) + 8; // quita el title
                        int pos2 = tabsXml.indexOf("</conection>",pos1);
                        if(pos2 != -1)
                        {
                            bPorDefecto = false;
                            conexIFrame.putXML(tabsXml.substring(pos1,pos2));
                        }
                    }
                }

                if(bPorDefecto)
                {
                    // cargamos una pesta�a de sql por defecto
                    SQLPannel sqlp = new SQLPannel(this, sc.getKey(), conexIFrame.getTitle(), sc.getjdbcDriverClass(), sc.getjdbcDriverURL(), sc.getuser(), sc.getpassword());
                    conexIFrame.jTabbedPane1.add("SQL   ", sqlp);
                    conexIFrame.jTabbedPane1.setSelectedComponent(sqlp);
                    sqlp.jTabbedPane1.grabFocus();
                }

                conexIFrame.setVisible(true);

                sc = null;
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }//GEN-LAST:event_jButton1ActionPerformed
   
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
        try {
            saveAll(this);
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }
           
        System.exit(0);
    }//GEN-LAST:event_exitForm

    private void jbConexionesRecientesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbConexionesRecientesActionPerformed
        try {
            // compone el men� de conexiones recientes
            if(jpmConexionesRecientes.isShowing() == false && propiedades.containsKey("gestor.recent_connections"))
            {
                jpmConexionesRecientes = new javax.swing.JPopupMenu();

                StringTokenizer st1 = new StringTokenizer((String)propiedades.get("gestor.recent_connections"),";",false);
                String sTemp = null;
                javax.swing.JMenuItem conexionMenu = null;

                while(st1.hasMoreTokens())
                {
                    sTemp = st1.nextToken();
                    // crea el men�
                    conexionMenu = new javax.swing.JMenuItem(sTemp);
                    conexionMenu.setName(sTemp); // le pongo el name para poner utilizarlo despues.
                    Gestor gGestor = this;
                    conexionMenu.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                            Vector vConTemp = new Vector(1);
                            vConTemp.addElement(evt.getActionCommand());
                            Trackbug.info("Accion: " + evt.getActionCommand());
                            String tabsXml = null;
                            if((propiedades.containsKey("conexion.tabs.guardar") &&
                                propiedades.getProperty("conexion.tabs.guardar").toLowerCase().equals("true")) ||
                                !propiedades.containsKey("conexion.tabs.guardar"))
                            {
                                tabsXml = getTabs();
                            }

                            Properties pConexiones = CargaConexiones(this.getClass());
                            openConn(vConTemp, tabsXml, pConexiones);
                        }
                    });

                    jpmConexionesRecientes.add(conexionMenu);
                }

                // muestra el men�
                jpmConexionesRecientes.show(jbConexionesRecientes,jbConexionesRecientes.getX(),jbConexionesRecientes.getY());
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }//GEN-LAST:event_jbConexionesRecientesActionPerformed

    public static String getRutaTabs(Gestor elgestor)
    {
        String rutatabs = "";

        try {
            try {
                // tiene que escribir el archivo de pesta�as
                rutatabs = elgestor.getClass().getClassLoader().getResource("tabs.xml").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                rutatabs = "tabs.xml";
            } catch(Exception ee) {
                rutatabs = "tabs.xml";
            }

            if(rutatabs.indexOf("%20") != -1)
                rutatabs = rutatabs.replaceAll("%20"," ");

            if(rutatabs == null) rutatabs = "tabs.xml";

        } catch(Exception e)
        {
            ;
        }

        return rutatabs;
    }

    public String getTabs()
    {
        return getTabs(this);
    }

    public static String getTabs(Gestor elgestor)
    {
        String stabs = "<tabs></tabs>";
        String rutatabs = getRutaTabs(elgestor);

        if(rutatabs.length() > 0)
        {

            try {
                try {
                    stabs = new String(utilidades.lee_Archivo2(rutatabs));
                } catch(IOException ioe)
                {
                    stabs = "";
                }

                if(stabs.trim().length() == 0)
                {
                    stabs = "<tabs></tabs>";
                }
            } catch(Exception e)
            {
                stabs = "<tabs></tabs>";
            }
        }

        return stabs;
    }

    public static void saveAll(Gestor elgestor)
    {
        try {
            Point punto = elgestor.getLocation();
            propiedades.put("gestor.x",String.valueOf(punto.x));
            propiedades.put("gestor.y",String.valueOf(punto.y));
            Dimension dim = elgestor.getSize();
            propiedades.put("gestor.ancho",String.valueOf(dim.width));
            propiedades.put("gestor.alto",String.valueOf(dim.height));

            // guardo las conexiones abiertas. primero cargamos las que existen para añadir o reemplazar las que tenemos
            String ruta = "";
            try {
                try {
                    ruta = elgestor.getClass().getClassLoader().getResource("gestdb.properties").getPath();
                } catch(java.lang.NoSuchMethodError nsme) {
                    ruta = "gestdb.properties";
                } catch(Exception ee) {
                    ruta = "gestdb.properties";
                }

                if(ruta.indexOf("%20") != -1)
                    ruta = ruta.replaceAll("%20"," ");

                if(ruta == null) ruta = "gestdb.properties";

            } catch(Exception e)
            {
                ;
            }

            try {

                String stabs = getTabs(elgestor);

                if(stabs.trim().length() == 0)
                {
                    stabs = "<tabs></tabs>";
                }
                javax.swing.JInternalFrame[] jif = elgestor.DesktopPanel.getAllFrames();
                String cadena = "";
                StringBuffer sb = new StringBuffer();
                int pos = 0;
                int pos2 = 0;
                if (jif.length > 0) {
                    for (int i = 0, j = jif.length; i < j; i++) {
                        if (jif[i] instanceof ConexionIFrame) {
                            cadena += ";" + ((ConexionIFrame) jif[i]).getKey();
                            if ((propiedades.containsKey("conexion.tabs.guardar") && propiedades.getProperty("conexion.tabs.guardar").toLowerCase().equals("true")) || !propiedades.containsKey("conexion.tabs.guardar")) {
                                sb.append("<conection>"); // a�ade la referencia a la conexi�n
                                sb.append("<title>").append(((ConexionIFrame) jif[i]).getKey()).append("</title>");
                                sb.append(((ConexionIFrame) jif[i]).getXML());
                                sb.append("</conection>");

                                // si la pestaña existia en el tabs anterior, la eliminamos para que solo tenga la nueva
                                pos = stabs.indexOf("<conection><title>" + ((ConexionIFrame) jif[i]).getKey() + "</title>");
                                if(pos != -1)
                                {
                                    pos2 = stabs.indexOf("</conection>",pos);
                                    if(pos2 != -1)
                                    {
                                        stabs = stabs.substring(0,pos) + stabs.substring(pos2 + 12);
                                    }
                                }
                            }
                        }
                    }
                }
                propiedades.put("gestor.conexiones.abiertas", cadena);

                pos = stabs.indexOf("</tabs>");
                if(pos != -1)
                {
                    stabs = stabs.substring(0,pos) + sb.toString() + stabs.substring(pos);
                    String rutatabs = getRutaTabs(elgestor);
                    utilidades.crea_Archivo(rutatabs, stabs.getBytes());
                }

                if(ruta.length() > 0)
                    propiedades.store(new FileOutputStream(ruta), GetLiteral("gestor.properties_gesdbini","Propiedades del entorno gestDB"));

            } catch (IOException ex) {
                Trackbug.fatal(ex, "Error: " + ex.getMessage());
            }
        } catch(Throwable e)
        {
            Trackbug.fatal(e,"Error: " + e.getMessage());
        }

    }

    /**
     * Comprueba si el dialogo de gesti�n de favoritos esta abierto, si no lo esta carga el dialogo
     */
    public void showFavoritesDialog(JInternalFrame jifPadre) {
        if(jifFav != null && jifFav.isVisible())
        {
            jifFav.dispose();
            jifFav.setVisible(false);
        }

        if(jifFav != null)
        {
            DesktopPanel.remove(jifFav);
            jifFav = null;
        }

        jifFav = new jifFavoritos(this,jifPadre);
        DesktopPanel.add(jifFav);
        jifFav.setVisible(true);
    }

   
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        try {
            if(args.length > 0)
            {
                if(args[0].toLowerCase().equals("-texto"))
                {
                    new ConexionTXT(args).start();
                }
                else
                {
                    ConexionTXT cont = new ConexionTXT(args);
                    CargaPropiedades(cont.getClass());
                    if(propiedades.containsKey("gestor.language"))
                        CargaIdioma(cont.getClass(),(String)propiedades.get("gestor.language"));
                    else
                        CargaIdioma(cont.getClass(),"spanish");

                    System.out.println("args[0]: " + args[0]);
                    System.out.println("GestDB " + Version);
                    System.out.println(GetLiteral("gestor.help_commandline1","Sintaxis: "));
                    System.out.println(GetLiteral("gestor.help_commandline2","java -jar gestdb.jar [opciones]"));
                    System.out.println(GetLiteral("gestor.help_commandline4","Si no se introducen opciones se arranca la aplicaci�n en modo grafico."));
                    System.out.println(GetLiteral("gestor.help_commandline5","Opciones:"));
                    System.out.println(GetLiteral("gestor.help_commandline6","\t-help\testa pantalla."));
                    System.out.println(GetLiteral("gestor.help_commandline7","\t-texto\tse arranca la aplicaci�n en modo texto."));
                    System.out.println(GetLiteral("gestor.help_commandline8","\t-texto -in archivo\tIgual a la de -texto pero cogiendo la entrada estandart de un archivo."));
                    System.out.println(GetLiteral("gestor.help_commandline9","\t-texto -out archivo\tIgual a la anterior pero saca toda la salida a un archivo."));
                    System.out.println(GetLiteral("gestor.help_commandline10","\t-texto -out archivo -in archivo\tIgual a la anterior cogiendo la entrada estandart de un archivo."));
                    System.out.println(GetLiteral("gestor.help_commandline11","\t-texto -in archivo -out archivo\tIgual a la anterior cogiendo la entrada estandart de un archivo."));

                    cont = null;
                    System.exit(0);
                }
            }
            else
                new Gestor().setVisible(true);
        } catch(Exception e)
        {
            Trackbug.fatal(e, "Error:" + e.getMessage());
        }
       
    }

    public static Document CargaFavoritos(Class clase)
    {
        Document doc = null;

        try {
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("favorites.xml").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "favorites.xml";
            } catch(Exception ee) {
                ruta = "favorites.xml";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");

            if(ruta == null) ruta = "favorites.xml";

            if(ruta.length() > 0)
            {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder parser = factory.newDocumentBuilder();

                // Cargar el xml de favoritos
                File file = new File(ruta);
                if (file.exists()){
                    doc = parser.parse(file);
                }
            }
        } catch (SAXException ex) {
            Trackbug.error(ex, ex.getMessage());
        } catch (ParserConfigurationException ex) {
            Trackbug.error(ex, ex.getMessage());
        } catch(java.io.FileNotFoundException fnfe)
        {
            Trackbug.error(fnfe, fnfe.getMessage());
        } catch(java.io.IOException ioe)
        {
            Trackbug.error(ioe, ioe.getMessage());
        }

        return doc;
    }

    public static void GuardaFavoritos(Class clase, Document doc, Transformer aTransformer)
    {
        try {
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("favorites.xml").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "favorites.xml";
            } catch(Exception ee) {
                ruta = "favorites.xml";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");

            if(ruta == null) ruta = "favorites.xml";

            if(ruta.length() > 0)
            {
//                aTransformer.setOutputProperty(OutputKeys.METHOD, "text");
                Source source = new DOMSource(doc);
                Result result = new StreamResult(new File("favorites.xml"));
                aTransformer.transform(source, result);
            }

        }catch(Exception e)
        {
            Trackbug.error(e, e.getMessage());
        }
    }
   
    public static void CargaPropiedades(Class clase)
    {

        try {
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("gestdb.properties").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "gestdb.properties";
            } catch(Exception ee) {
                ruta = "gestdb.properties";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");
               
            if(ruta == null) ruta = "gestdb.properties";

            if(ruta.length() > 0)
                propiedades.load(new FileInputStream(ruta));
        } catch(java.io.FileNotFoundException fnfe)
        {
            System.err.println(GetLiteral("gestor.error_2","Error cargando propiedades") + ": " + fnfe.getMessage());
        } catch(java.io.IOException ioe)
        {
            System.err.println(GetLiteral("gestor.error_2","Error cargando propiedades") + ": " + ioe.getMessage());
        }
    }

    public static void CargaIdioma(Class clase, String idioma)
    {
        try {
            Properties pIdioma2 = new Properties();
            pIdioma2.load(clase.getResourceAsStream("/com/GestDB/resources/language_" + idioma + ".properties"));
            pIdioma = pIdioma2;
        } catch(java.lang.NullPointerException npe)
        {
            Trackbug.error(npe, "Error cargando idioma: " + npe.getMessage() +
                    "\nArchivo: " + clase.getResourceAsStream("/com/GestDB/resources/language_" + idioma + ".properties") +
                    "\nIdioma: " + idioma);
        } catch(java.io.FileNotFoundException fnfe)
        {
            Trackbug.error(fnfe, "Error cargando idioma: " + fnfe.getMessage() +
                    "\nArchivo: " + clase.getResourceAsStream("/com/GestDB/resources/language_" + idioma + ".properties") +
                    "\nIdioma: " + idioma);
        } catch(java.io.IOException ioe)
        {
            Trackbug.error(ioe, "Error cargando idioma: " + ioe.getMessage() +
                    "\nArchivo: " + clase.getResourceAsStream("/com/GestDB/resources/language_" + idioma + ".properties") +
                    "\nIdioma: " + idioma);
        }
    }
   
    public static Properties CargaConexiones(Class clase)
    {
        // Tiene que cargar los datos de las conexiones.
        Properties Propiedades = new Properties();
        try {
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("GestDB.ini").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "GestDB.ini";
            } catch(Exception ee) {
                ruta = "GestDB.ini";
            }

            if(ruta == null) ruta = "GestDB.ini";

            if(ruta.length() > 0) {
                File fl = new File(ruta);
                if ( fl.exists() ) {
                    try{
                        FileInputStream fls = new FileInputStream(ruta);
                        Propiedades.load(fls);
                        fls.close();
                    }catch(java.io.IOException e) {
                        Trackbug.error(e, e.getMessage());
                    }
                }
            }
        } catch(Exception e) {
            Propiedades = null;
        }
       
        // si en el archivo de propiedades no aparece la palabra encriptadas significa que estan encriptadas, o si
        // aparece la palabra y tiene el valor = "si".
        if(!propiedades.containsKey("gestor.conexiones.encriptadas") ||  ((String)propiedades.get("gestor.conexiones.encriptadas")).toLowerCase().equals("si"))
        {
            // las tenemos que desencriptar en el properties
            Object me[] = Propiedades.entrySet().toArray();
            for(int i=0;i<me.length;i++)
                Propiedades.put(((Map.Entry)me[i]).getKey(),utilidades.XOR((String)((Map.Entry)me[i]).getValue()));
        }

        return Propiedades;
    }

    public static void GuardaConexiones(Class clase, Properties Propiedades)
    {
        try {
            // tenemos que encriptar las conexiones antes de continuar.
            Properties Prop = new Properties();
            Object me[] = Propiedades.entrySet().toArray();
            for(int i=0;i<me.length;i++)
                Prop.put(((Map.Entry)me[i]).getKey(),utilidades.XOR((String)((Map.Entry)me[i]).getValue()));

            propiedades.put("gestor.conexiones.encriptadas","si");
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("gestdb.properties").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "gestdb.properties";
            } catch(Exception ee) {
                ruta = "gestdb.properties";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");
           
            if(ruta == null) ruta = "gestdb.properties";

            if(ruta.length() > 0)
                propiedades.store(new FileOutputStream(ruta), GetLiteral("gestor.properties_gesdbini","Propiedades del entorno gestDB"));

            // almacenamos las conexiones en disco
            try {
                ruta = clase.getClassLoader().getResource("GestDB.ini").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "GestDB.ini";
            } catch(Exception ee) {
                ruta = "GestDB.ini";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");
           
            if(ruta == null) ruta = "GestDB.ini";

            if(ruta.length() > 0) {
                File fl = new File(ruta);
//                if ( fl.exists() ) {
                    try{
                        FileOutputStream fls = new FileOutputStream(ruta);
                        Prop.store(fls, GetLiteral("gestor.properties_gesdbini","Propiedades del entorno gestDB"));
                        fls.close();
                        Prop = null;
                    }catch(java.io.IOException e) {
                        Trackbug.error(e, e.getMessage());
                    }
//                }
            }
        }catch(Exception e)
        {
            Trackbug.fatal(e, e.getMessage());
        }
    }

    public static void GuardaPropiedades(Class clase, Properties Propiedades)
    {
        try {
            propiedades.put("gestor.conexiones.encriptadas","si");
            String ruta = "";
            try {
                ruta = clase.getClassLoader().getResource("gestdb.properties").getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                ruta = "gestdb.properties";
            } catch(Exception ee) {
                ruta = "gestdb.properties";
            }

            if(ruta.indexOf("%20") != -1)
                ruta = ruta.replaceAll("%20"," ");

            if(ruta == null) ruta = "gestdb.properties";

            if(ruta.length() > 0)
                propiedades.store(new FileOutputStream(ruta), GetLiteral("gestor.properties_gesdbini","Propiedades del entorno gestDB"));
        }catch(Exception e)
        {
            Trackbug.fatal(e, e.getMessage());
        }
    }
   
    public static int JDBCDRIVERURL = 0;
    public static int JDBCDRIVERCLASS = 1;
    public static int USER = 2;
    public static int PASSWORD = 3;
    public static int IP = 4;
    public static int PORT = 5;
    public static int SID = 6;

    public static String getConexion(String key, Properties Propiedades,int tipo)
    {
        String jdbcDriverURL = "";
        String jdbcDriverClass = "";
        String user = "";
        String password = "";
        String ip = "";
        String port = "";
        String sid = "";

        if(Propiedades != null) {
            HashMap hmConexion = SelectConexion.getHMConexion(key, Propiedades);
            if(hmConexion.containsKey("ip"))
                ip = (String)hmConexion.get("ip");
            if(hmConexion.containsKey("puerto"))
                port = (String)hmConexion.get("puerto");
            if(hmConexion.containsKey("sid"))
                sid = (String)hmConexion.get("sid");
            if(hmConexion.containsKey("jdbcDriverClass"))
                jdbcDriverClass = (String)hmConexion.get("jdbcDriverClass");
            if(hmConexion.containsKey("jdbcDriverURL"))
                jdbcDriverURL = (String)hmConexion.get("jdbcDriverURL");
            if(hmConexion.containsKey("user"))
                user = (String)hmConexion.get("user");
            if(hmConexion.containsKey("password"))
                password = (String)hmConexion.get("password");

            // carga la clase
            try {
                Class.forName(jdbcDriverClass);
            } catch(Exception nfe) {
                Trackbug.error(nfe, GetLiteral("gestor.error_6","Error cargando la clase") + ": " + nfe.getMessage());
                // tenemos que sacar una ventana indicando que nos falta el driver jdbc y que tenemos que copiarlo al directorio
                // lib y rearancar el programa
                Alerta al = new Alerta(elGestorActivo, GetLiteral("gestor.error_1","Error"), true,
                    GetLiteral("conexiontxt.error_2","No se encuentran las clases correspondientes al driver jdbc de la base de datos.") +
                    "\n" + GetLiteral("selectconexion.getdriver","Descargueselo de la web del fabricante de la BBDD o busquelo en 'http://developers.sun.com/product/jdbc/drivers'.") +
                    "\n" + GetLiteral("selectconexion.copydriver","Cuando tenga el archivo JAR o ZIP c�pielo al directorio 'lib' del GestDB y rearranque el programa."), Alerta.OK);
                al.setVisible(true);
                al = null;
                return "";
            }
        }

        switch(tipo)
        {
            case 0:
                        return jdbcDriverURL;
            case 1:
                        return jdbcDriverClass;
            case 2:
                        return user;
            case 3:
                        return password;
            case 4:
                        return ip;
            case 5:
                        return port;
            case 6:
                        return sid;
        }

        return "";
    }

    public void PonLiterales()
    {
        CargaIdioma2();

        // mira el icono y el t�tulo del idioma a utilizar
        jButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/GestDB/images/" + GetLiteral("gestor.language_icon","spanish.jpg"))));
        jButton7.setText(GetLiteral("gestor.language_name","Espa�ol"));
        jButton7.setToolTipText(GetLiteral("gestor.button_idioma_tootips","Permite cambiar el idioma de la aplicaci�n"));

        jButton9.setToolTipText(GetLiteral("gestor.button_config_tooltips","Configurar la aplicaci�n"));
       
//        if(pIdioma.containsKey("gestor.button_About"))
//            this.jButton6.setText((String)pIdioma.get("gestor.button_About"));
        if(pIdioma.containsKey("gestor.button_About_tooltips"))
            this.jButton6.setToolTipText((String)pIdioma.get("gestor.button_About_tooltips"));
//        if(pIdioma.containsKey("gestor.button_connect"))
//            this.jButton1.setText((String)pIdioma.get("gestor.button_connect"));
        if(pIdioma.containsKey("gestor.button_connect_tooltips"))
            this.jButton1.setToolTipText((String)pIdioma.get("gestor.button_connect_tooltips"));

        this.jbConexionesRecientes.setToolTipText(GetLiteral("gestor.button_recent_connections_tooltips","Muestra las conexiones recientes"));

//        if(pIdioma.containsKey("gestor.button_content"))
//            this.jButton5.setText((String)pIdioma.get("gestor.button_content"));
        if(pIdioma.containsKey("gestor.button_content_tooltips"))
            this.jButton5.setToolTipText((String)pIdioma.get("gestor.button_content_tooltips"));
//        if(pIdioma.containsKey("gestor.button_license"))
//            this.jButton8.setText((String)pIdioma.get("gestor.button_license"));
        if(pIdioma.containsKey("gestor.button_license_tooltips"))
            this.jButton8.setToolTipText((String)pIdioma.get("gestor.button_license_tooltips"));
//        if(pIdioma.containsKey("gestor.button_window_cascade"))
//            this.jButton2.setText((String)pIdioma.get("gestor.button_window_cascade"));
        if(pIdioma.containsKey("gestor.button_window_cascade_tooltips"))
            this.jButton2.setToolTipText((String)pIdioma.get("gestor.button_window_cascade_tooltips"));
//        if(pIdioma.containsKey("gestor.button_window_mosaich"))
//            this.jButton3.setText((String)pIdioma.get("gestor.button_window_mosaich"));
        if(pIdioma.containsKey("gestor.button_window_mosaich_tooltips"))
            this.jButton3.setToolTipText((String)pIdioma.get("gestor.button_window_mosaich_tooltips"));
//        if(pIdioma.containsKey("gestor.button_window_mosaicv"))
//            this.jButton4.setText((String)pIdioma.get("gestor.button_window_mosaicv"));
        if(pIdioma.containsKey("gestor.button_window_mosaicv_tooltips"))
            this.jButton4.setToolTipText((String)pIdioma.get("gestor.button_window_mosaicv_tooltips"));

    }
   
    public void CargaIdioma2()
    {
        // lee el idioma que tiene seleccionado el usuario y pone el icono que corresponda
        // miramos si esta la propiedad del idioma utilizado
        if(propiedades.containsKey("gestor.language"))
        {
            CargaIdioma(this.getClass(),(String)propiedades.get("gestor.language"));
        }
        else
        {
            CargaIdioma(this.getClass(),"spanish");
        }
    }

    public static String GetLiteral(String clave, String vdefault)
    {
        if(pIdioma.containsKey(clave))
            return (String)pIdioma.get(clave);
        else
            return vdefault;
    }

    private void CambiaIdioma(String idioma)
    {
        propiedades.put("gestor.language",idioma);
        PonLiterales();
       
        // se tiene que recorrer todas las ventanas que tenga abiertas para actualizar el idioma en esas ventanas
        javax.swing.JInternalFrame jif[] = DesktopPanel.getAllFrames();
        if(jif.length > 0)
        {
            for(int i=jif.length;i> 0;i--)
            {
                if(jif[i-1] instanceof Literales)
                    ((Literales)jif[i-1]).PonLiterales();
            }
        }
       
    }
   
    /*
     * Permite cargar las librerias dinamicamente, coge el directorio del programa y carga los jar y zip que existen
     * en los subdirectorios llamados "lib" y "skin".
     */
    public static void CargarLibrerias(Class clase) throws IOException
    {
        Class claseJVM = URLClassLoader.class;
        Class params[] = new Class[]{ URL.class };
        URLClassLoader cargadorJVM = (URLClassLoader)ClassLoader.getSystemClassLoader();           
        // carga la ruta base de las librerias
        GetDirBaseLib(clase);
        GetDirBaseSkin(clase);
        GetDirBaseTmp(clase);
        try{
            File objFile = new File(rutaBaseLib);
            String ext[] = {"jar","zip"};
            com.utils.FileNameFilter fnflib = new com.utils.FileNameFilter(ext);
            File archivos[] = null;
           
            // cogemos todos los jar y zip del directorio lib
            if(objFile.exists() && objFile.canRead() && objFile.isDirectory())
            {
                archivos = objFile.listFiles(fnflib);
            }
           
            // cogemos el m�todo addurl que necesitamos
            java.lang.reflect.Method metodo = claseJVM.getDeclaredMethod("addURL", params);

            // y le hacemos accesible, pues es protected
            metodo.setAccessible(true);

            // a�adimos primero el directorio lib
            URL objUrl = objFile.toURL();
            metodo.invoke(cargadorJVM, new Object[]{ objUrl });
           
            // vamos con los zip y jar
            if(archivos != null)
            {
                for(int i=0;i<archivos.length;i++)
                {
                    metodo.invoke(cargadorJVM, new Object[]{ archivos[i].toURL() });
                }
            }
           
            // vamos con los zip y jar del directorio raiz del gestdb
            objFile = new File(".");
            archivos = null;
           
            // cogemos todos los jar y zip del directorio raiz
            if(objFile.exists() && objFile.canRead() && objFile.isDirectory())
            {
                archivos = objFile.listFiles(fnflib);
            }
           
            // los procesamos
            if(archivos != null)
            {
                for(int i=0;i<archivos.length;i++)
                {
                    metodo.invoke(cargadorJVM, new Object[]{ archivos[i].toURL() });
                }
            }

            // vamos con los zip y jar del directorio skin
            objFile = new File(rutaBaseSkin);
            archivos = null;
           
            // cogemos todos los jar y zip del directorio skin
            if(objFile.exists() && objFile.canRead() && objFile.isDirectory())
            {
                archivos = objFile.listFiles(fnflib);
            }
           
            // los procesamos
            if(archivos != null)
            {
                for(int i=0;i<archivos.length;i++)
                {
                    metodo.invoke(cargadorJVM, new Object[]{ archivos[i].toURL() });
                }
            }
        }catch(Throwable th){
            th.printStackTrace();
            throw new IOException("Error");
        }
    }

    private static String GetSubDirBase(Class clase, String subdir)
    {
        String rutaBaseTmp = null;
        // se averigua el directorio de la aplicaci�n
        if(subdir != null)
        {
            if(subdir.charAt(subdir.length()-1) != '\\' && subdir.charAt(subdir.length()-1) != '/')
                subdir += "/";
           
            try {
                rutaBaseTmp = clase.getClassLoader().getSystemResource(subdir).getPath();
            } catch(java.lang.NoSuchMethodError nsme) {
                rutaBaseTmp = subdir;
            } catch(Exception ee) {
                rutaBaseTmp = subdir;
            }

            if(rutaBaseTmp.indexOf("%20") != -1)
                rutaBaseTmp = rutaBaseTmp.replaceAll("%20"," ");

            if(rutaBaseTmp == null) rutaBaseTmp = subdir;
        }
       
        return rutaBaseTmp;
    }
   
    private static String GetDirBaseLib(Class clase)
    {
        // se averigua el directorio de la aplicaci�n
        if(rutaBaseLib == null)
            rutaBaseLib = GetSubDirBase(clase,"lib/");
       
        return rutaBaseLib;
    }

    private static String GetDirBaseSkin(Class clase)
    {
        // se averigua el directorio de la aplicaci�n
        if(rutaBaseSkin == null)
            rutaBaseSkin = GetSubDirBase(clase,"skin/");
       
        return rutaBaseSkin;
    }
   
    private static String GetDirBaseTmp(Class clase)
    {
        // se averigua el directorio de la aplicaci�n
        if(rutaBaseTmp == null)
            rutaBaseTmp = GetSubDirBase(clase,"tmp/");
       
        return rutaBaseTmp;
    }
   
    public static String getRutaBaseLib()
    {
        return rutaBaseLib;
    }

    public static String getRutaBaseSkin()
    {
        return rutaBaseSkin;
    }

    public static String getRutaBaseTmp()
    {
        return rutaBaseTmp;
    }

    public void addInternalFrameToDestock(javax.swing.JInternalFrame jif)
    {
        DesktopPanel.add(jif);
        jif.setVisible(true);
    }

    public static String getConexionActual()
    {
        String resultado = "";
        JInternalFrame ji = elGestorActivo.DesktopPanel.getSelectedFrame();
        if(ji != null)
        {
            if(ji instanceof wizarExportarDatos)
                resultado = ((wizarExportarDatos)ji).jdbcDriverClass + " - " + ((wizarExportarDatos)ji).jdbcDriverURL;
            else if(ji instanceof ImportarDlg)
                resultado = ((ImportarDlg)ji).jdbcDriverClass + " - " + ((ImportarDlg)ji).jdbcDriverURL;
            else if(ji instanceof BuscarYReemplazar)
                resultado = ((BuscarYReemplazar)ji).jdbcDriverClass + " - " + ((BuscarYReemplazar)ji).jdbcDriverURL;
            else if(ji instanceof ConexionIFrame)
                resultado = ((ConexionIFrame)ji).jdbcDriverClass + " - " + ((ConexionIFrame)ji).jdbcDriverURL;
            else if(ji instanceof addInternalFrame)
                resultado = ((addInternalFrame)ji).jdbcDriverClass + " - " + ((addInternalFrame)ji).jdbcDriverURL;
           
        }
       
        return resultado;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    public javax.swing.JDesktopPane DesktopPanel;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JButton jbConexionesRecientes;
    private javax.swing.JPopupMenu jpmConexionesRecientes;
    private javax.swing.JPopupMenu jpmIdiomas;
    // End of variables declaration//GEN-END:variables
   
    /*
     * las propiedades que tenemos son:
     *
     * ultimo_dir
     * ...
     */
    public static Gestor elGestorActivo = null;
    private static String rutaBaseLib = null;
    private static String rutaBaseSkin = null;
    private static String rutaBaseTmp = null;
    public static Properties propiedades = new Properties();
    public static Properties pIdioma = new Properties();
    public static Skins skins = null;
    public static String sSkinActual = "";
    public static String Version = "2.4.003";

    public jifFavoritos jifFav = null;

}

TOP

Related Classes of com.GestDB.Gestor

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.