Package org.indrasoftwarelabs.containers

Source Code of org.indrasoftwarelabs.containers.EditContainer

package org.indrasoftwarelabs.containers;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;

import org.indrasoftwarelabs.db.Query;
import org.indrasoftwarelabs.db.Sentence;
import org.indrasoftwarelabs.dialogs.ArgumentDialog;
import org.indrasoftwarelabs.dialogs.ResultDialog;
import org.indrasoftwarelabs.log.LogForDay;
import org.indrasoftwarelabs.main.MainForm;
import org.indrasoftwarelabs.main.QCS;

@SuppressWarnings("serial")
public class EditContainer extends Container {

  Container miContenedor = new Container();
 
  ResultSet rs;
 
  String sentenceName;
  String sentenceDescription;
  String sentenceSQL;
  String sentenceSQLFormatted;
  String sentenceArgsMap;
  String sentenceMaxRegisters = "0";
 
  final static int NEW  = 1;
  final static int EDIT  = 2;
 
  int    valueOrder;
  String  queryNAME;
  int    queryID;
  int    mode;
 
  final DefaultTableModel model = new DefaultTableModel();
 
  //Connection con;
 
  List<String[]> listaArgumentos = new ArrayList<String[]>();
  String[] filaParametros = null;
 
  final List<String> vectorParamsIDs = new ArrayList<String>();
 
  String columnNames[] = {"RANK", "NOMBRE", "TIPO", "VALOR"};
  Object[][] rowData = null;
 
  public static final String SEPARADOR = "?*?";
 
  final String DATE_FORMAT_DATE    = "dd/MM/yyyy";
  final String DATE_FORMAT_TIMESTAMP  = "dd/MM/yyyy HH:mm:ss";
  DateFormat dateFormat;
  Date date;
 
  /**
   * Get Container
   * @return
   */
  public Container getMyContainer() {
    return miContenedor;
  }
 
  public EditContainer(String queryName, final JFrame frame, final Properties prop, final Container mainContenedor){
   
    if(queryName == null){
        mode = NEW;
      }else{
        mode = EDIT;
      }
     
      //con = conn;
      sentenceName = queryName;
     
      if(queryName != null){
       
        try {
           
          LogForDay.writeToLog("Estableciendo conexion a BBDD ", QCS.logPath, LogForDay.DEBUG);
            Connection con;
        try {
          con = MainForm.getConexion(prop);
        } catch (SQLException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        } catch (ClassNotFoundException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        } catch (Exception err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        }
         
            String[][] params = Query.sentenceAddParam(Query.TYPE_STRING, queryName, 1);
          rs = Query.executeQueryWithParamsByConn(Sentence.GET_QUERY_DATA_BY_QUERY_ID, params, con);
          while (rs.next()){
            queryNAME    =  params[0][1];
           
            sentenceName    =  rs.getString("NAME");
            sentenceDescription =  rs.getString("DESCRIPTION");
            sentenceSQL      =  rs.getString("SQL_SENTENCE");
            sentenceArgsMap    =  rs.getString("MAP");
            sentenceMaxRegisters=  String.valueOf(rs.getInt("MAX_REGISTERS"));
           
            queryID        =  rs.getInt("ID");
          }
         
          rs = Query.executeQueryWithParamsByConn(Sentence.GET_QUERY_ARGUMENT_DATA_BY_QUERY_ID, params, con);
          while (rs.next()){
            filaParametros = new String[4];
            filaParametros[0] = String.valueOf(rs.getInt("ARGUMENT_ORDER"));
            filaParametros[1] = rs.getString("ARGUMENT_NAME");
            filaParametros[2] = rs.getString("ARGUMENT_TYPE");
            filaParametros[3] = rs.getString("ARGUMENT_ID");
           
            listaArgumentos.add(filaParametros)
          }
         
          sentenceSQLFormatted = sentenceSQL;
         
          if(sentenceArgsMap!= null){
            // Se sustituye cada interrogacion por el argumento que toque la variable sentenceArgsMap = "0,1,1"
            StringTokenizer token = new StringTokenizer(sentenceArgsMap, ",");
            while(token.hasMoreTokens()){
              valueOrder = Integer.parseInt(token.nextToken());
              filaParametros = listaArgumentos.get(valueOrder);
              sentenceSQLFormatted = sentenceSQLFormatted.replaceFirst("\\?", filaParametros[1]);
            }
          }
         
          try {
          MainForm.closeConexion(con);
          LogForDay.writeToLog("Conexxion BBDD cerrada", QCS.logPath, LogForDay.DEBUG);
        } catch (SQLException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        } catch (ClassNotFoundException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        }
         
        } catch (SQLException err) {
          LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        } catch (Exception err) {
          LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        }
       
      }
     
      //miContenedor.setSize(700, 800);
      miContenedor.setLayout(null);
     
        JLabel  etiqueta;
        final JTextArea areaDesc = new JTextArea(40,30);
        final JTextArea areaSQL = new JTextArea(40,30);
       
        final JButton botonVolver;
        final JButton botonGuardar;
        final JButton botonVerify = new JButton();
        final JButton botonRestaurar;
       
        JButton botonAddParam;
        JButton botonRemoveParam;
        JButton botonEditParam;
       
        final JTextField campoNombre;
        final JTextField campoMax = new JTextField();
       
        final JTable table;
       
        //Object[][] rowData = new Object[listaArgumentos.size()][4];
        rowData = new Object[listaArgumentos.size()][4];
       
        for(int x=0; x<columnNames.length;x++){
          model.addColumn(columnNames[x]);
        }
       
        for(int x=0; x<listaArgumentos.size();x++){
         
          filaParametros = listaArgumentos.get(x);
         
          rowData[x][0] = filaParametros[0];   // RANK
          rowData[x][1] = filaParametros[1];   // NOMBRE
          rowData[x][2] = filaParametros[2];   // TIPO
         
        if(filaParametros[2].equals("DATE")){
          dateFormat = new SimpleDateFormat(DATE_FORMAT_DATE);
              date = new Date();
              rowData[x][3] = dateFormat.format(date);
        }else if(filaParametros[2].equals("TIMESTAMP")){
          dateFormat = new SimpleDateFormat(DATE_FORMAT_TIMESTAMP);
              date = new Date();
              rowData[x][3] = dateFormat.format(date);
        }else{
          rowData[x][3] = "0";
        }
         
          model.addRow(rowData[x]);

          // Coger las colunas en un vector. Sintaxis: NOMBRE_ID_TIPO
          vectorParamsIDs.add(filaParametros[1] + EditContainer.SEPARADOR + filaParametros[2] + EditContainer.SEPARADOR + filaParametros[3]);
         
        }
       
        table = new JTable(model){
          private static final long serialVersionUID = 1L;
      // Editable solo la columna values
      public boolean isCellEditable(int row,int column){
        if(column == 3){
          return true;
        }else{
          return false;
        }
      }
        };
       
        // Single selection
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
       
        // Ancho de las columnas
        TableColumn col;
       
        // Se recorren las columnas para ponerles un ancho fijo
        for(int z=0; z<table.getColumnCount(); z++){
          col = table.getColumnModel().getColumn(z);
         
          switch(z){
          case 0:
            col.setPreferredWidth(36);
            break;
          case 1:
            col.setPreferredWidth(144);
            break;
          case 2:
            col.setPreferredWidth(70);
            break;
          case 3:
            col.setPreferredWidth(117);
          }
         
        }
       
        // FILA 1
        /*******************************/
        etiqueta = new JLabel("NOMBRE: ");
        etiqueta.setBounds(20, 90, 80, 30); // x, y, ancho, alto
        miContenedor.add(etiqueta);
       
        campoNombre = new JTextField();
        etiqueta.setLabelFor(campoNombre);
        campoNombre.setSize(300, 30);
        campoNombre.setBounds(120, 90, 300, 30); // x, y, ancho, alto
        campoNombre.setText(sentenceName);
        campoNombre.setEditable(true);
        campoNombre.setVisible(true);
        miContenedor.add(campoNombre);
       
        // BOTON
        Icon iconSave;
        Icon iconCheck;
        Icon iconReset;
        Icon iconBack;
       
        iconSave  = new ImageIcon("res/icons/Save-icon.png");
        iconCheck  = new ImageIcon("res/icons/bbdd.png");
        iconReset  = new ImageIcon("res/icons/Refresh-icon.png");
        iconBack  = new ImageIcon("res/icons/Home-icon.png");
       
        botonGuardar = new JButton("SAVE");
        botonGuardar.setIcon(iconSave);
        botonGuardar.setBounds(30, 550, 48, 48); // x, y, ancho, alto
        //botonGuardar.setToolTipText("Guardar");
        botonGuardar.setVerticalTextPosition(JButton.BOTTOM);
        botonGuardar.setHorizontalTextPosition(JButton.CENTER);
        botonGuardar.addActionListener(new ActionListener() {

          public void actionPerformed(ActionEvent event) {
           
            int value = JOptionPane.showConfirmDialog(frame,"�Deseas guardar las modificaciones?","GUARDAR",JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
        if(value == JOptionPane.OK_OPTION ){
         
          LogForDay.writeToLog("Estableciendo conexion a BBDD ", QCS.logPath, LogForDay.DEBUG);
              Connection con = null;
          try {
            con = MainForm.getConexion(prop);
          } catch (SQLException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          } catch (ClassNotFoundException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          } catch (Exception err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          }
         
          // CHECK SQL...
         
          String msg = "Error! Por favor, revisa la sentencia SQL y los valores de la tabla de parametros";
             
              String param  =  null;
              String valor  =  null;
              String type    =  null;
              String queryToVerify = areaSQL.getText();
             
              String[] listaNombresParams = new String[table.getRowCount()];
             
              for(int x=0; x<table.getRowCount();x++){
                listaNombresParams[x= (String)table.getValueAt(x, 1);
              }
             
              Arrays.sort(listaNombresParams, Collections.reverseOrder()); // Hay que ponerlo en orden de cadena mayor a menor
             
              for(int x=0; x<listaNombresParams.length;x++){
               
                for(int y=0; y<table.getRowCount();y++){
                 
                  param  = (String)table.getValueAt(y, 1);
                 
                  if( !param.equals(listaNombresParams[x]) ){
                    continue;
                  }
                 
                    type  = (String)table.getValueAt(y, 2);
                    valor  = (String)table.getValueAt(y, 3);
                   
                    // Tipos STRING, se les aniade caracter '
                    if(type.equals("STRING")){
                      valor = "'".concat(valor).concat("'");
                    }else if(type.equals("TIMESTAMP")){
                      valor = " TO_DATE('" + valor + "','dd/mm/yyyy HH24:MI:SS') "; // value debe tener formato: dd/mm/yyyy HH24:MI:SS. Por ejemplo 28/07/2011 10:31:07
                    }else if(type.equals("NUMBER")){
                      // NADA QUE FORMATEAR
                    }else if(type.equals("DECIMAL")){
                      // NADA QUE FORMATEAR
                    }else if(type.equals("DATE")){
                      valor = " TO_DATE('" + valor + "','dd/mm/yyyy') "; // value debe tener formato: dd/mm/yyyy. Por ejemplo 28/07/2011 10:31:07
                    }
                   
                    queryToVerify = queryToVerify.replaceAll(param, valor);
                    break;
                   
                }
               
              }
             
              // Se lanza la query formateada y si todo OK, entonces, se habilita el boton GUARDAR
              try {
            rs = Query.executeQuery(queryToVerify, prop);
          } catch (SQLException err) {
           
            LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
           
            rs = null;
            msg = "Error de BBDD! " + err.getLocalizedMessage() ;
          } catch (ClassNotFoundException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          } catch (Exception err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          }
             
              if(rs == null){
                botonGuardar.setEnabled(false);
                      JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                      return;
              }
         
          LogForDay.writeToLog("SQL verificada correctamente", QCS.logPath, LogForDay.DEBUG);
         
          // QUERY
          String queryName     = campoNombre.getText();
          String queryDesc     = areaDesc.getText();
          String queryMaxRegister = campoMax.getText();
         
          try{
            Integer.parseInt(queryMaxRegister);
          }catch(NumberFormatException  err){
           
            LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.DEBUG);
           
            try {
              con.rollback();
            } catch (SQLException err2) {
              LogForDay.writeToLog("Error al hacer rollback " + err2.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
            }
            msg = queryMaxRegister + "No es valido. Por favor introduce un n�mero como valor de registros m�ximo.";
              JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                      return;
           
          }
         
          // FORMATEAR querySQL y cambiar los parametros por interrogaciones...
          String queryToSave = areaSQL.getText();
          String queryToSaveAux;
              // Se concatena un espacio en blanco al final de la query para que pueda buscar el ultimo parametro si este fuera el ultimo string de la sentencia
          queryToSave = queryToSave.concat(" ");
             
              param    = null;
             
              for(int x=0; x<table.getRowCount();x++){
               
                param    = (String)table.getValueAt(x, 1);
                System.out.println("Hay que sustituir el primer parametro:" + param + " por ?");
                 
                  queryToSaveAux = queryToSave;
                  queryToSave = queryToSave.replaceAll(param, "?");
                 
                  if(queryToSaveAux.equals(queryToSave) ){
                    try {
                con.rollback();
              } catch (SQLException err) {
                LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
              }
                    msg = "Cuidado! El parametro " + param + " no esta en la sentencia SQL";
                JOptionPane.showConfirmDialog(frame,msg,"Cuidado",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE);
                        //return;
                  }
                 
              }
             
          // Kitamos el ultimo espacio que hemos aniadido antes, porque si no... cada vez que guardamos hacemos la query mas larga :-)
              queryToSave = queryToSave.substring(0, queryToSave.length()-1 );

          try {
           
            queryToSaveAux = areaSQL.getText();
            int pos = 0;
            String rank;
            String numParam = null;
            String argMap = "";
           
            // Se sustituyen todos los parametros por RANK_#
            for(int x=0;x<table.getRowCount();x++){
              rank = String.valueOf(table.getValueAt(x, 0));
              queryToSaveAux = queryToSaveAux.replaceAll( (String)table.getValueAt(x, 1), "RANK_".concat( rank ).concat("#") );
            }
           
            // Mientras haya valores RANK_#
            while(true){
             
              pos = queryToSaveAux.indexOf("RANK_");
              if(pos == -1){
                break;
              }
             
              numParam = (String) queryToSaveAux.substring(pos+5, queryToSaveAux.indexOf("#", pos+4) ) ;
             
              // Si el valor RANK_# es igual a la row... se coge la fila que es el orden del parametro
              for(int x=0;x<table.getRowCount();x++){
               
                rank = String.valueOf(table.getValueAt(x, 0));
               
                if( numParam.equals(rank) ){
                  argMap = argMap.concat( String.valueOf(x) ).concat(",");
                  queryToSaveAux = queryToSaveAux.replaceFirst("RANK_", "_");
                  queryToSaveAux = queryToSaveAux.replaceFirst("#", "_");
                  break;
                }
               
              }
             
            }
           
            // Quitar los caracteres enter, tabs, etc...
            queryToSave = queryToSave.trim();
           
            // Quitar la ultima coma
            if(argMap.length() > 0){
              argMap = argMap.substring(0, argMap.length()-1);
            }
           
            //ResultSet rs;
           
            if( mode == EditContainer.NEW){
             
              // Sentencia de actualizacion de query
              String insertQuery = "INSERT INTO GCQS_QUERY VALUES ( (SELECT MAX(QUERY_ID) + 1 FROM GCQS_QUERY), '" + queryName + "',NULL,NULL,'" + queryDesc + "',NULL,SYSDATE,0,NULL,NULL,NULL," + queryMaxRegister + ",0,'" + argMap + "','" + queryToSave + "')";
             
              if(Query.executeInsert(insertQuery, con) == 0){
               
                con.rollback();
                msg = "Hay algun problema en la sentencia o en el resto de campos";
                        JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                        return;
               
              }
             
            }else{
             
              // Sentencia de actualizacion de query
              String updateQuery = "UPDATE GCQS_QUERY " +
              "SET QUERY_NAME = '" + queryName + "', " +
              "QUERY_DESCRIPTION = '" + queryDesc + "', " +
              "MAX_NUM_RET_REG = '" + queryMaxRegister + "', " +
              "ARGUMENTS_MAP = '" + argMap + "', " +
              "PREPARED_QUERY_LONG = '" + queryToSave + "' " +
              "WHERE QUERY_ID = " + queryID;
             
              int rowsUpdated = Query.executeUpdate(updateQuery, con);
             
              if(rowsUpdated == 0){
                con.rollback();
                msg = "Hay algun problema en la lista de parametros";
                JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                        return;
              }
             
            }
           
            String insertParameter = "";
            String updateParameter = "";
           
            // SE BORRAN TODOS SUS ARGUMENTOS
            int totalInserts;
            //int totalDeletes;
           
            if( mode == EditContainer.EDIT){
              String deletequeryArguments = "DELETE FROM GCQS_ARGUMENT WHERE QUERY_ID = " + queryID;
              Query.executeDelete(deletequeryArguments, con);
            }
           
            String fila;
            StringTokenizer  valores_lista;
           
            String nombreParam  = "";
            String tipoParam  = "";
            String idParam    = "";
           
            // SE INSERTAN TODOS LOS QUE HAYA EN LA TABLA...
            for(int cont=0; cont<vectorParamsIDs.size(); cont++){
             
              fila = (String)vectorParamsIDs.get(cont);
              valores_lista = new StringTokenizer(fila, EditContainer.SEPARADOR);
             
              nombreParam  = valores_lista.nextToken();
              tipoParam  = valores_lista.nextToken();
              idParam    = valores_lista.nextToken();
             
              insertParameter = "INSERT INTO GCQS_ARGUMENT (QUERY_ID, ARGUMENT_NAME, ARGUMENT_ORDER, ARGUMENT_TYPE, CREATE_DATE, UPDATE_DATE, ARGUMENT_ID, OPTIMIST_LOCK, UPDATE_PROGRAM, UPDATE_USER, ARGUMENT_DESCRIPTION, ARGUMENT_POSITION) VALUES (" +  queryID + ", TO_CHAR('" + nombreParam + "'), 0, '" + tipoParam + "', SYSDATE, NULL, DECODE ('" + idParam + "', '####',(SELECT MAX(ARGUMENT_ID)+1 FROM GCQS_ARGUMENT),'" + idParam + "'), NULL, NULL, NULL, NULL, NULL)";
              totalInserts = Query.executeInsert(insertParameter, con);
             
              if(totalInserts == 0){
                try {
                  con.rollback();
                } catch (SQLException err) {
                  LogForDay.writeToLog("Error al hacer rollback " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
                }
                con.rollback();
                msg = "Hay algun problema en la lista de parametros, con el parametro: " + nombreParam;
                        JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                        return;
              }
             
            }
           
            String  SQLQuery = areaSQL.getText();
            String celda;
            int[]     intArray  =  new int[table.getRowCount()];
            String[]   stringArray  =  new String[table.getRowCount()];
           
           
            int orden = 1; // Simulando el Query System, habria que empezar por 2
           
            for( int parametro =0; parametro<table.getRowCount(); parametro++ ){
              celda  =  (String)table.getValueAt(parametro, 1);
              intArray[parametro]    = SQLQuery.indexOf(celda);
              stringArray[parametro= celda;
            }
           
            // Se ordena de menor a mayor
            Arrays.sort(intArray);
            SQLQuery = SQLQuery.concat(" ");
           
            for( int parametro =0; parametro<intArray.length; parametro++ ){
             
              //nombreParametro = SQLQuery.substring(intArray[parametro],  SQLQuery.indexOf(" ",intArray[parametro]) );
              //nombreParametro = SQLQuery.substring(intArray[parametro],  intArray[parametro] + stringArray[parametro].length() );
             
              //System.out.println("Parametro: " + nombreParametro);
             
              // Actualizamos la fila de argumentos que tiene el nombre: nombreParametro y le ponemos el orden 1
              updateParameter = "UPDATE GCQS_ARGUMENT SET ARGUMENT_ORDER = " + orden + " WHERE QUERY_ID = " + queryID + " AND ARGUMENT_NAME = '" + stringArray[parametro] + "' ";
              int rowsUpdated = Query.executeUpdate(updateParameter, con);
             
              if(rowsUpdated == 0){
                con.rollback();
                msg = "Hay algun problema en la sentencia o en el resto de campos";
                        JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
                        return;
              }
              orden++;
            }
           
            con.commit();
            msg = "Los cambios se guardaron correctamente";
                    JOptionPane.showConfirmDialog(frame,msg,"OK",JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE);
                   
                    // Si todo es OK, se vuelve a la pantalla del menu
                      frame.setContentPane(mainContenedor);
                      frame.setVisible(true);
                     
          } catch (SQLException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage() , QCS.logPath, LogForDay.ERROR);
            try {
              con.rollback();
            } catch (SQLException err2) {
              LogForDay.writeToLog("Error al hacer rollback: " + err2.getLocalizedMessage() , QCS.logPath, LogForDay.ERROR);
            }
            msg = "Hay algun problema en la sentencia o en el resto de campos";
                    JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
          } catch (Exception err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage() , QCS.logPath, LogForDay.ERROR);
            try {
              con.rollback();
            } catch (SQLException err2) {
              LogForDay.writeToLog("Error al hacer rollback: " + err2.getLocalizedMessage() , QCS.logPath, LogForDay.ERROR);
            }
            msg = "Hay algun problema en la sentencia o en el resto de campos";
                    JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
          }
         
          try {
            MainForm.closeConexion(con);
            LogForDay.writeToLog("Conexxion BBDD cerrada", QCS.logPath, LogForDay.DEBUG);
          } catch (SQLException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          } catch (ClassNotFoundException err) {
            LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          }
         
            }
           
          }
        });
        //panel.add(botonGuardar);
        //miContenedor.add(botonGuardar);

        // FILA 2
        /*******************************/
        etiqueta = new JLabel("DESCRIPCION: ");
        etiqueta.setBounds(20, 145, 100, 30); // x, y, ancho, alto
        miContenedor.add(etiqueta);
        areaDesc.setLineWrap(true);
        areaDesc.setWrapStyleWord(true);
        areaDesc.setEditable(true);
        areaDesc.setBounds(120, 150, 550, 100); // x, y, ancho, alto
        areaDesc.setText(sentenceDescription);
        areaDesc.setAutoscrolls(true);
       
      // TODO Hay que poner que un escuchador de eventos controle que al meter un caracter no llegue al maximo...
     
      JScrollPane sp = new JScrollPane(areaDesc);
      sp.setBounds(120, 150, 550, 100); // x, y, ancho, alto
      sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
     
      //getContentPane().add(sp);
      miContenedor.add(sp);
     
        // BOTON
        botonVolver = new JButton();
        botonVolver.setText("VOLVER");
        botonVolver.setVerticalTextPosition(JButton.BOTTOM);
        botonVolver.setHorizontalTextPosition(JButton.CENTER);
        botonVolver.setIcon(iconBack);
        botonVolver.setBounds(430, 110, 102, 30); // x, y, ancho, alto
        botonVolver.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
           
            int value = JOptionPane.showConfirmDialog(frame,"�Deseas volver sin guardar las modificaciones?","VOLVER",JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
           
            if(value == JOptionPane.OK_OPTION ){
              frame.setContentPane(mainContenedor);
                    frame.setVisible(true);
            }
           
          }
        });
        //miContenedor.add(botonVolver);
       
        // FILA 3
        /*******************************/
       
        // BOTON
        botonRestaurar = new JButton();
        botonRestaurar.setText("RESTAURAR");
        botonRestaurar.setBounds(430, 150, 102, 30); // x, y, ancho, alto
        botonRestaurar.setIcon(iconReset);
        botonRestaurar.setVerticalTextPosition(JButton.BOTTOM);
        botonRestaurar.setHorizontalTextPosition(JButton.CENTER);
        botonRestaurar.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
           
            int value = JOptionPane.showConfirmDialog(frame,"�Deseas restaurar los cambios originales?","RESTAURAR",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
           
            if(value == JOptionPane.YES_OPTION ){
          // Restaurar todos los campos editables
              // Nombre de la query
          campoNombre.setText(sentenceName);
              // Descripcion de la query
          areaDesc.setText(sentenceDescription);
              // Num max registros
          campoMax.setText(sentenceMaxRegisters);
             
          // Parametros
          vectorParamsIDs.clear();
          rowData = new Object[listaArgumentos.size()][4];
             
          while(model.getRowCount() > 0){
            model.removeRow(0);
          }
         
              for(int x=0; x<listaArgumentos.size();x++){
               
                filaParametros = listaArgumentos.get(x);
               
                rowData[x][0] = filaParametros[0];
                rowData[x][1] = filaParametros[1];
                rowData[x][2] = filaParametros[2];
               
               
                //rowData[x][3] = "VALOR";
                if(filaParametros[2].equals("DATE")){
                dateFormat = new SimpleDateFormat(DATE_FORMAT_DATE);
                    date = new Date();
                    rowData[x][3] = dateFormat.format(date);
              }else if(filaParametros[2].equals("TIMESTAMP")){
                dateFormat = new SimpleDateFormat(DATE_FORMAT_TIMESTAMP);
                    date = new Date();
                    rowData[x][3] = dateFormat.format(date);
              }else{
                rowData[x][3] = "0";
              }
               
                model.addRow(rowData[x]);
               
                // Coger las colunas en un vector. Sintaxis: NOMBRE_ID_TIPO
                //vectorParamsIDs.add(filaParametros[3].concat("@UPDATE"));
                vectorParamsIDs.add(filaParametros[1] + EditContainer.SEPARADOR + filaParametros[2] + EditContainer.SEPARADOR + filaParametros[3]);
               
              }
             
              // Consulta
              areaSQL.setText(sentenceSQLFormatted);
             
              botonGuardar.setEnabled(true);
            }
           
          }
        });
       
        //panel.add(botonRestaurar);
        //miContenedor.add(botonRestaurar);
       
        // MAX. REGISTROS
        etiqueta = new JLabel("NUM. MAX. DE REGISTROS: ");
        etiqueta.setBounds(20, 260, 180, 12); // x, y, ancho, alto
        //panel.add(etiqueta);
        miContenedor.add(etiqueta);
       
        etiqueta = new JLabel("(0 = INFINITO)");
        etiqueta.setBounds(20, 272, 180, 10); // x, y, ancho, alto
        //panel.add(etiqueta);
        miContenedor.add(etiqueta);
       
        campoMax.setSize(50, 30);
        campoMax.setBounds(200, 260, 50, 30); // x, y, ancho, alto
        campoMax.setText(sentenceMaxRegisters); //
        campoMax.setEditable(true);
        campoMax.setVisible(true);
        campoMax.setColumns(4);
        //panel.add(campoMax);
        miContenedor.add(campoMax);
       
        // FILA 4
        /*******************************/
        etiqueta = new JLabel("PARAMETROS: ");
        etiqueta.setBounds(20, 290, 100, 30); // x, y, ancho, alto
        //panel.add(etiqueta);
        miContenedor.add(etiqueta);
       
        table.setBounds(120, 300, 500, 160); // x, y, ancho, alto
       
        JTableHeader header = table.getTableHeader();
        header.setBackground(Color.GREEN);
       
        sp = new JScrollPane(table);
      sp.setBounds(120, 300, 500, 160); // x, y, ancho, alto
      sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
     
      //getContentPane().add(sp);
      miContenedor.add(sp);
       
      // Botones para editar la tabla de parametros
     
      ImageIcon icono = new ImageIcon("res/icons/Add-icon.png");
      botonAddParam = new JButton();
      botonAddParam.setIcon(icono);
      botonAddParam.setBounds(640, 330, 30, 30); // x, y, ancho, alto
      botonAddParam.setToolTipText("New Param.");
      botonAddParam.addActionListener(new ActionListener() {

          public void actionPerformed(ActionEvent event){
            // Se abre un cuadro de dialogo y se pide el nombre y el tipo de parametro
            ArgumentDialog customDialog = new ArgumentDialog(model, vectorParamsIDs, null, null, 0, ArgumentDialog.NEW_PARAMETER, botonGuardar);
           
            customDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
            customDialog.setLocationRelativeTo(frame);
          customDialog.setVisible(true);
          customDialog.setResizable(false);
           
          //botonGuardar.setEnabled(false);
          }
         
      });
     
      //panel.add(botonAddParam);
      miContenedor.add(botonAddParam);
     
      icono = new ImageIcon("res/icons/Edit-icon.png");
      botonEditParam = new JButton();
      botonEditParam.setIcon(icono);
      botonEditParam.setBounds(640, 370, 30, 30); // x, y, ancho, alto
      botonEditParam.setToolTipText("Edit Param.");
      botonEditParam.addActionListener(new ActionListener() {

          public void actionPerformed(ActionEvent event){
           
            int fila = table.getSelectedRow();
           
            if(fila > -1){
             
              String nombreParam  = (String)table.getValueAt(fila, 1);
              String tipoParam  = (String)table.getValueAt(fila, 2);
             
              // Se abre un cuadro de dialogo y se rellena el nombre y el tipo de parametro
                ArgumentDialog customDialog = new ArgumentDialog(model, vectorParamsIDs, nombreParam, tipoParam, fila, ArgumentDialog.EDIT_PARAMETER, botonGuardar);
               
                customDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                customDialog.setLocationRelativeTo(frame);
              customDialog.setVisible(true);
              customDialog.setResizable(false);
             
              //botonGuardar.setEnabled(false);
             
            }else{
              String msg = "Selecciona una fila para editar un parametro";
          JOptionPane.showConfirmDialog(frame,msg,"Atencion",JOptionPane.CLOSED_OPTION, JOptionPane.WARNING_MESSAGE);
            }
           
          }
         
      });
     
      //panel.add(botonEditParam);
      miContenedor.add(botonEditParam);
     
      icono = new ImageIcon("res/icons/Delete-icon.png");
      botonRemoveParam = new JButton();
      botonRemoveParam.setIcon(icono);
      botonRemoveParam.setBounds(640, 410, 30, 30); // x, y, ancho, alto
      botonRemoveParam.setToolTipText("Delete param.");
     
      botonRemoveParam.addActionListener(new ActionListener() {

          public void actionPerformed(ActionEvent event){
           
            int fila = table.getSelectedRow();
           
            if(fila > -1){
                // Se borra la fila seleccionada
                model.removeRow(fila);
                vectorParamsIDs.remove(fila);
                botonGuardar.setEnabled(false);
            }else{
              String msg = "Selecciona una fila para borrar un parametro";
          JOptionPane.showConfirmDialog(frame,msg,"Atencion",JOptionPane.CLOSED_OPTION, JOptionPane.WARNING_MESSAGE);
            }
           
          }
         
      });
     
      miContenedor.add(botonRemoveParam);
     
      // FILA 5
        /*******************************/
      etiqueta = new JLabel("CONSULTA: ");
        etiqueta.setBounds(20, 470, 100, 30); // x, y, ancho, alto
        miContenedor.add(etiqueta);
       
        // Area con la sentencia SQL
       
        areaSQL.setLineWrap(true);
      areaSQL.setWrapStyleWord(true);
      //area.setSize(300, 100);
      areaSQL.setEditable(true);
      areaSQL.setBounds(120, 480, 550, 220); // x, y, ancho, alto
      areaSQL.setText(sentenceSQLFormatted);
      areaSQL.setAutoscrolls(true);
     
      areaSQL.addKeyListener( new KeyListener() {
     
      public void keyTyped(KeyEvent e) {
        botonGuardar.setEnabled(false);
      }
     
      public void keyReleased(KeyEvent e) {
       
      }
     
      public void keyPressed(KeyEvent e) {
       
      }
    });
     
      sp = new JScrollPane(areaSQL);
      sp.setBounds(120, 480, 550, 220); // x, y, ancho, alto
      sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
     
      //getContentPane().add(sp);
      miContenedor.add(sp);
       
      botonVerify.setText("CHECK SQL");
        botonVerify.setBounds(10, 500, 100, 30); // x, y, ancho, alto
        botonVerify.setIcon(iconCheck);
        botonVerify.setVerticalTextPosition(JButton.BOTTOM);
        botonVerify.setHorizontalTextPosition(JButton.CENTER);
        botonVerify.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
           
            LogForDay.writeToLog("Estableciendo conexion a BBDD ", QCS.logPath, LogForDay.DEBUG);
            Connection con;
        try {
          con = MainForm.getConexion(prop);
        } catch (SQLException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        } catch (ClassNotFoundException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        } catch (Exception err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          return;
        }
           
            // TEST
            TableColumn col;
               
                for(int z=0; z<table.getColumnCount(); z++){
                  col = table.getColumnModel().getColumn(z);
                  System.out.println("Columna: " + z + " -> " + col.getWidth());
                }
            // TEST
           
            String msg;
           
            String param  =  null;
            String value  =  null;
            String type    =  null;
            String queryToVerify = areaSQL.getText();
           
            // Cogemos todos los nombres de parametros para reemplazar luego desde el nombre mas largo al mas corto
           
            String[] listaNombresParams = new String[table.getRowCount()];
           
            for(int x=0; x<table.getRowCount();x++){
              listaNombresParams[x= (String)table.getValueAt(x, 1);
            }
           
            Arrays.sort(listaNombresParams, Collections.reverseOrder()); // Hay que ponerlo en orden de cadena mayor a menor
           
            for(int x=0; x<listaNombresParams.length;x++){
             
              for(int y=0; y<table.getRowCount();y++){
               
                param  = (String)table.getValueAt(y, 1);
               
                if( !param.equals(listaNombresParams[x]) ){
                  continue;
                }
               
                  type  = (String)table.getValueAt(y, 2);
                  value  = (String)table.getValueAt(y, 3);
                 
                  // Tipos STRING, se les aniade caracter '
                  if(type.equals("STRING")){
                    value = "'".concat(value).concat("'");
                  }else if(type.equals("TIMESTAMP")){
                    value = " TO_DATE('" + value + "','dd/mm/yyyy HH24:MI:SS') "; // value debe tener formato: dd/mm/yyyy HH24:MI:SS. Por ejemplo 28/07/2011 10:31:07
                  }else if(type.equals("NUMBER")){
                    // NADA QUE FORMATEAR
                  }else if(type.equals("DECIMAL")){
                    // NADA QUE FORMATEAR
                  }else if(type.equals("DATE")){
                    value = " TO_DATE('" + value + "','dd/mm/yyyy') "; // value debe tener formato: dd/mm/yyyy. Por ejemplo 28/07/2011 10:31:07
                  }
                 
                  queryToVerify = queryToVerify.replaceAll(param, value);
                  break;
                 
              }
             
            }
           
            // Se lanza la query formateada y si todo OK, entonces, se habilita el boton GUARDAR
            msg = "Error! Por favor, revisa la sentencia SQL y los valores de la tabla de parametros";
           
            try {
          rs = Query.executeQueryByConn(queryToVerify, con);
        } catch (SQLException err) {
         
          LogForDay.writeToLog(" de BBDD. " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
         
          rs = null;
          msg = "Error de BBDD. " + err.getLocalizedMessage() ;
        } catch (ClassNotFoundException err) {
          LogForDay.writeToLog(" " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        } catch (Exception err) {
          LogForDay.writeToLog(" " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        }
           
            if(rs!= null){

              // Se muestra un popup con el resultado de la query
             
                ResultDialog resDialog;
          try {
           
            resDialog = new ResultDialog(frame, rs, 450, 400);
            resDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                  resDialog.setLocationRelativeTo(frame);
                  resDialog.setVisible(true);
               
                      botonGuardar.setEnabled(true);
                     
          } catch (Exception err) {
            LogForDay.writeToLog(" al verificar la sentencia " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
          }
               
            }else{
              botonGuardar.setEnabled(false);
              JOptionPane.showConfirmDialog(frame,msg,"Error",JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
            }
           
            try {
          MainForm.closeConexion(con);
          LogForDay.writeToLog("Conexxion BBDD cerrada", QCS.logPath, LogForDay.DEBUG);
        } catch (SQLException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        } catch (ClassNotFoundException err) {
          LogForDay.writeToLog("Error: " + err.getLocalizedMessage(), QCS.logPath, LogForDay.ERROR);
        }
       
        LogForDay.writeToLog("sentencia verificada correctamente ", QCS.logPath, LogForDay.ERROR);
           
          }
        });
       
        //panel.add(botonVerify);
       
        // Nuevos adds
        //miContenedor.add(botonVerify);
     
        // TOOLBAR
        JToolBar toolbar = new JToolBar();
        toolbar.setSize(700, 75);
        toolbar.setFloatable(false);
       
        toolbar.add(botonGuardar);
        toolbar.addSeparator(); //SEPARADOR
        toolbar.add(botonVerify);
        toolbar.addSeparator(); //SEPARADOR
        toolbar.add(botonRestaurar);
        toolbar.addSeparator(); //SEPARADOR
        toolbar.add(botonVolver);
       
        miContenedor.add(toolbar);
       
        // Se a�ade el panel al formulario
        //add(panel);
        //miContenedor.add(panel);
       
  }
 
}
TOP

Related Classes of org.indrasoftwarelabs.containers.EditContainer

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.