/*
 * UtilitarioAjusteTabela.java
 *
 * Created on 10 de Maio de 2008, 11:20
 */

package sistema;

import java.sql.*;
import java.util.Vector;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author  awolf
 */
public class UtilitarioAjusteTabela extends javax.swing.JDialog {
    
    /** Creates new form UtilitarioAjusteTabela */
    private Connection conexao=null;
    public UtilitarioAjusteTabela(java.awt.Frame parent, boolean modal, Connection conexao) {
        super(parent, modal);
        this.conexao=conexao;
        initComponents();
        atualizaTabelas();
        setSize(600, 400);
    }
    
    private void atualizaTabelas(){
        Vector tabelas=new Vector();
        try {
            String[] types = {"TABLE"};
            ResultSet rs=conexao.getMetaData().getTables(null, null, "%", types);

            while(rs.next()){
                tabelas.addElement(rs.getString(3));
            }
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        lsTabelas.setListData(tabelas);
    }
    
    /** 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=" Código Gerado ">//GEN-BEGIN:initComponents
    private void initComponents() {
        paSuperior = new javax.swing.JPanel();
        spTabelas = new javax.swing.JScrollPane();
        lsTabelas = new javax.swing.JList();
        spSQL = new javax.swing.JScrollPane();
        taSQL = new javax.swing.JTextArea();
        paExecutar = new javax.swing.JPanel();
        btExecuta = new javax.swing.JButton();
        spDados = new javax.swing.JScrollPane();
        tbDados = new javax.swing.JTable();
        paFechar = new javax.swing.JPanel();
        btFechar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        paSuperior.setLayout(new java.awt.BorderLayout());

        lsTabelas.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        spTabelas.setViewportView(lsTabelas);

        paSuperior.add(spTabelas, java.awt.BorderLayout.EAST);

        taSQL.setColumns(20);
        taSQL.setRows(5);
        spSQL.setViewportView(taSQL);

        paSuperior.add(spSQL, java.awt.BorderLayout.CENTER);

        paExecutar.setLayout(new java.awt.BorderLayout());

        btExecuta.setText("Executa");
        btExecuta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btExecutaActionPerformed(evt);
            }
        });

        paExecutar.add(btExecuta, java.awt.BorderLayout.WEST);

        paSuperior.add(paExecutar, java.awt.BorderLayout.SOUTH);

        getContentPane().add(paSuperior, java.awt.BorderLayout.NORTH);

        tbDados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Título 1", "Título 2", "Título 3", "Título 4"
            }
        ));
        spDados.setViewportView(tbDados);

        getContentPane().add(spDados, java.awt.BorderLayout.CENTER);

        paFechar.setLayout(new java.awt.BorderLayout());

        btFechar.setText("Fechar");
        btFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btFecharActionPerformed(evt);
            }
        });

        paFechar.add(btFechar, java.awt.BorderLayout.EAST);

        getContentPane().add(paFechar, java.awt.BorderLayout.SOUTH);

        pack();
    }// </editor-fold>//GEN-END:initComponents
        
    private void btFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFecharActionPerformed
        dispose();
    }//GEN-LAST:event_btFecharActionPerformed
    
    private void btExecutaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btExecutaActionPerformed
        try{
            Statement st=conexao.createStatement();
            if(taSQL.getText().trim().toUpperCase().startsWith("SELECT")){
                ResultSet rs=st.executeQuery(taSQL.getText());
                
                Vector cabecalho = new Vector();
                for(int i=1; i<=rs.getMetaData().getColumnCount(); i++){
                    cabecalho.addElement(rs.getMetaData().getColumnName(i));
                }
                
                Vector registros=new Vector();
                while(rs.next()){
                    Vector colunas=new Vector();
                    for(int i=1; i<=rs.getMetaData().getColumnCount(); i++){
                        colunas.addElement(rs.getString(i));
                    }
                    registros.add(new Vector(colunas));
                    colunas.removeAllElements();
                }
                tbDados.setModel(new DefaultTableModel(registros, cabecalho));
            }else{
                st.execute(taSQL.getText());
                atualizaTabelas();
            }
            Aviso("Script executado com sucesso!");
        }catch(Exception e){
            Erro("Erro ao executar o script\n"+e);
        }
    }//GEN-LAST:event_btExecutaActionPerformed
    
    private void Aviso(String mens){
        JOptionPane.showMessageDialog(null, mens, "Aviso", JOptionPane.INFORMATION_MESSAGE);
    }
    private void Erro(String mens){
        JOptionPane.showMessageDialog(null, mens, "Erro", JOptionPane.ERROR_MESSAGE);
    }
    
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton btExecuta;
    private javax.swing.JButton btFechar;
    private javax.swing.JList lsTabelas;
    private javax.swing.JPanel paExecutar;
    private javax.swing.JPanel paFechar;
    private javax.swing.JPanel paSuperior;
    private javax.swing.JScrollPane spDados;
    private javax.swing.JScrollPane spSQL;
    private javax.swing.JScrollPane spTabelas;
    private javax.swing.JTextArea taSQL;
    private javax.swing.JTable tbDados;
    // Fim da declaração de variáveis//GEN-END:variables
    
}
