Package net.sourceforge.squirrel_sql.plugins.smarttools.gui

Source Code of net.sourceforge.squirrel_sql.plugins.smarttools.gui.SmarttoolMissingIndicesFrame$Renderer

/*
* Copyright (C) 2008 Michael Romankiewicz
* microm at users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package net.sourceforge.squirrel_sql.plugins.smarttools.gui;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
import net.sourceforge.squirrel_sql.fw.sql.IndexInfo;
import net.sourceforge.squirrel_sql.fw.sql.PrimaryKeyInfo;
import net.sourceforge.squirrel_sql.fw.sql.SQLUtilities;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.plugins.smarttools.SmarttoolsHelper;
import net.sourceforge.squirrel_sql.plugins.smarttools.comp.STButton;

import javax.swing.*;
import javax.swing.JTable.PrintMode;
import javax.swing.border.EtchedBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
import java.util.Vector;

public class SmarttoolMissingIndicesFrame extends DialogWidget implements ISmarttoolFrame, ActionListener
{
  private static final long serialVersionUID = 3680564513241320485L;

  private final int START_WORKING = 1;

  private final int STOP_WORKING = 2;

  private final int COL_TABLENAME = 0;

  private final int COL_RECORDS = 1;

  private final int COL_PRIMARY = 2;

  private final int COL_UNIQUE = 3;

  private final int COL_SUMMARY = 4;

  // variables
  // ========================================================================
  // non visible
  // ------------------------------------------------------------------------
  // Logger for this class
  private final static ILogger log = LoggerController.createLogger(SmarttoolMissingIndicesFrame.class);

  private final static StringManager stringManager = StringManagerFactory.getStringManager(SmarttoolMissingIndicesFrame.class);

  private ISession session;

  private Thread threadWork = null;

  private boolean threadSuspended;

  private Vector<String> vecHeader = new Vector<String>();

  private Vector<Vector<Object>> vecData = new Vector<Vector<Object>>();

  // visible (gui)
  // ------------------------------------------------------------------------
  private JLabel lblTitleTable = new JLabel();

  private JLabel lblTablename = new JLabel();

  private JTextField tfTablename = new JTextField();

  private JRadioButton rbDisplayTypeAll = new JRadioButton();

  private ButtonGroup buttongroup1 = new ButtonGroup();

  private JRadioButton rbDisplayTypePK = new JRadioButton();

  private JRadioButton rbDisplayTypeUI = new JRadioButton();

  private JLabel lblDisplayType = new JLabel();

  private STButton btnStart = new STButton();

  private STButton btnStop = new STButton();

  private JLabel lblTitleTableResult = new JLabel();

  private JLabel lblFooterTableResult = new JLabel();

  private STButton btnPrint = new STButton();

  private STButton btnDdl = new STButton();

  private STButton btnRecordCount = new STButton();

  private JTable tblResult = null;

  private JProgressBar pbMain = new JProgressBar();

  /**
   * Constructor
   *
   * @param app
   * @param rsrc
   * @param session
   * @param tab
   */
  public SmarttoolMissingIndicesFrame(ISession session, String title) {
    super("Smarttool - " + title, true, true, true, true, session.getApplication());
    this.session = session;

    initLayout();
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
    this.moveToFront();
  }

  private interface i18n
  {
    // Labels
    String LBL_TITLE_USED_TABLES = stringManager.getString("missingindices.title.tables");

    String LBL_TABLENAME = stringManager.getString("missingindices.lbl.table.name");

    String LBL_DISPLAYTYPE = stringManager.getString("missingindices.lbl.display.type");

    String LBL_RB_DISPLAYTYPE_ALL = stringManager.getString("missingindices.lbl.radiobutton.display.type.all");

    String LBL_RB_DISPLAYTYPE_PK = stringManager.getString("missingindices.lbl.radiobutton.display.type.primarykey");

    String LBL_RB_DISPLAYTYPE_UI = stringManager.getString("missingindices.lbl.radiobutton.display.type.uniqueindex");

    String TABLECOLUMN_PRIMARY_KEY_COUNT = stringManager.getString("missingindices.lbl.tablecolumn.primarykey");

    String TABLECOLUMN_UNIQUE_INDEX_COUNT = stringManager.getString("missingindices.lbl.tablecolumn.uniqueindices");

    String TABLECOLUMN_INDEX_COUNT = stringManager.getString("missingindices.lbl.tablecolumn.indices");

    String TABLECOLUMN_RECORD_COUNT = stringManager.getString("missingindices.lbl.tablecolumn.records");

    String LBL_BTN_START = stringManager.getString("global.lbl.btn.start");

    String LBL_BTN_STOP = stringManager.getString("global.lbl.btn.stop");

    String LBL_BTN_PRINT = stringManager.getString("global.lbl.btn.print");

    String LBL_BTN_DDL = stringManager.getString("missingindices.lbl.btn.ddl");

    String TOOLTIP_BTN_DDL = stringManager.getString("missingindices.tooltip.btn.ddl");

    String LBL_BTN_RECORDS = stringManager.getString("missingindices.lbl.btn.records");

    String TOOLTIP_BTN_RECORDS = stringManager.getString("missingindices.tooltip.btn.records");

    // Tooltips and questions
    String TOOLTIP_WILDCARD = stringManager.getString("missingindices.tooltip.wildcard");

    String TOOLTIP_RB_DISPLAYTYPE_ALL = stringManager.getString("missingindices.tooltip.radiobutton.display.type.all");

    String TOOLTIP_RB_DISPLAYTYPE_PK = stringManager.getString("missingindices.tooltip.radiobutton.display.type.primarykey");

    String TOOLTIP_RB_DISPLAYTYPE_UI = stringManager.getString("missingindices.tooltip.radiobutton.display.type.uniqueindex");

    String TOOLTIP_BTN_PRINT = stringManager.getString("global.tooltip.btn.print");

    // Global misc
    String GLOBAL_RECORDS = stringManager.getString("global.records");

    String GLOBAL_TABLE = stringManager.getString("global.table");

    String GLOBAL_COLUMN = stringManager.getString("global.column");

    String GLOBAL_DATATYPE = stringManager.getString("global.datatype");

    String GLOBAL_PAGE = stringManager.getString("global.page");

    String GLOBAL_ALIAS = stringManager.getString("global.alias");

    // Questions
    String QUESTION_CANCEL_WORK = stringManager.getString("missingindices.question.cancel.work");

    String QUESTION_CANCEL_WORK_TITLE = stringManager.getString("missingindices.question.cancel.work.title");

    // Errors
    String ERROR_READ_CHECKING_DATA = stringManager.getString("missingindices.error.read.checking.data");

    String ERROR_NO_ROW_SELECTED = stringManager.getString("missingindices.error.no.row.selected");

    String ERROR_RECORD_COUNT = stringManager.getString("missingindices.error.reading.recordcount");

    // Infos
    String INFO_FINISHED = stringManager.getString("missingindices.info.finished");

    String INFO_REPORT = stringManager.getString("missingindices.info.report");
  }

  private void initLayout()
  {
    this.getContentPane().setLayout(new BorderLayout());
    createTableHeader();
    tblResult = new JTable(vecData, vecHeader);
    this.getContentPane().add(createPanel());

    initVisualObjects();
  }

  public JPanel createPanel()
  {
    JPanel jpanel1 = new JPanel();
    FormLayout formlayout1 = new FormLayout(
       "FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE",
       "CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
    CellConstraints cc = new CellConstraints();
    jpanel1.setLayout(formlayout1);

    pbMain.setName("pbMain");
    pbMain.setValue(25);
    jpanel1.add(pbMain, cc.xywh(2, 15, 3, 1));

    jpanel1.add(createpanelTableAndColumn(), cc.xy(2, 2));
    jpanel1.add(createpanelButton(), cc.xy(4, 2));
    lblTitleTableResult.setBackground(new Color(102, 102, 102));
    lblTitleTableResult.setName("lblTitleTableResult");
    lblTitleTableResult.setOpaque(true);
    lblTitleTableResult.setText(" Searching for ...");
    jpanel1.add(lblTitleTableResult, cc.xy(2, 4));

    lblFooterTableResult.setBackground(new Color(102, 102, 102));
    lblFooterTableResult.setName("lblFooterTableResult");
    lblFooterTableResult.setOpaque(true);
    lblFooterTableResult.setText(" Finshed in ...");
    jpanel1.add(lblFooterTableResult, cc.xywh(2, 13, 3, 1));

    btnPrint.setActionCommand("Print");
    btnPrint.setName("btnPrint");
    btnPrint.setText("Print");
    jpanel1.add(btnPrint, cc.xy(4, 4));

    tblResult.setName("tblResult");
    JScrollPane jscrollpane1 = new JScrollPane();
    jscrollpane1.setViewportView(tblResult);
    jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    jpanel1.add(jscrollpane1, cc.xywh(2, 7, 1, 5));

    btnDdl.setActionCommand("ddl");
    btnDdl.setName("btnDdl");
    btnDdl.setText("ddl");
    btnDdl.setToolTipText("create ddl statement for primary key or unique index");
    jpanel1.add(btnDdl, cc.xy(4, 7));

    btnRecordCount.setActionCommand("records");
    btnRecordCount.setName("btnRecordCount");
    btnRecordCount.setText("records");
    btnRecordCount.setToolTipText("determine the record count of the displayed tables");
    jpanel1.add(btnRecordCount, cc.xy(4, 9));

    return jpanel1;
  }

  public JPanel createpanelTableAndColumn()
  {
    JPanel panelTableAndColumn = new JPanel();
    panelTableAndColumn.setName("panelTableAndColumn");
    EtchedBorder etchedborder1 = new EtchedBorder(EtchedBorder.RAISED, null, null);
    panelTableAndColumn.setBorder(etchedborder1);
    FormLayout formlayout1 = new FormLayout(
       "FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE",
       "CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
    CellConstraints cc = new CellConstraints();
    panelTableAndColumn.setLayout(formlayout1);

    lblTitleTable.setBackground(new Color(102, 102, 102));
    lblTitleTable.setName("lblTitleTable");
    lblTitleTable.setOpaque(true);
    lblTitleTable.setText(" Used tables");
    panelTableAndColumn.add(lblTitleTable, cc.xywh(1, 1, 5, 1));

    lblTablename.setName("lblTablename");
    lblTablename.setText("table name");
    panelTableAndColumn.add(lblTablename, cc.xy(2, 3));

    tfTablename.setName("tfTablename");
    panelTableAndColumn.add(tfTablename, cc.xy(4, 3));

    panelTableAndColumn.add(createpanelDisplayType(), cc.xy(4, 5));
    lblDisplayType.setName("lblDisplayType");
    lblDisplayType.setText("display");
    panelTableAndColumn.add(lblDisplayType, cc.xy(2, 5));

    return panelTableAndColumn;
  }

  public JPanel createpanelDisplayType()
  {
    JPanel panelDisplayType = new JPanel();
    panelDisplayType.setName("panelDisplayType");
    FormLayout formlayout1 = new FormLayout(
       "FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE",
       "CENTER:DEFAULT:NONE");
    CellConstraints cc = new CellConstraints();
    panelDisplayType.setLayout(formlayout1);

    rbDisplayTypeAll.setActionCommand("all entries");
    rbDisplayTypeAll.setName("rbDisplayTypeAll");
    rbDisplayTypeAll.setText("all entries");
    buttongroup1.add(rbDisplayTypeAll);
    panelDisplayType.add(rbDisplayTypeAll, cc.xy(1, 1));

    rbDisplayTypePK.setActionCommand("missing primary key");
    rbDisplayTypePK.setName("rbDisplayTypePK");
    rbDisplayTypePK.setText("missing primary key");
    buttongroup1.add(rbDisplayTypePK);
    panelDisplayType.add(rbDisplayTypePK, cc.xy(3, 1));

    rbDisplayTypeUI.setActionCommand("missing unique index");
    rbDisplayTypeUI.setName("rbDisplayTypeUI");
    rbDisplayTypeUI.setText("missing unique index");
    buttongroup1.add(rbDisplayTypeUI);
    panelDisplayType.add(rbDisplayTypeUI, cc.xy(5, 1));

    return panelDisplayType;
  }

  public JPanel createpanelButton()
  {
    JPanel panelButton = new JPanel();
    panelButton.setName("panelButton");
    FormLayout formlayout1 = new FormLayout(
       "FILL:DEFAULT:NONE", "CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
    CellConstraints cc = new CellConstraints();
    panelButton.setLayout(formlayout1);

    btnStart.setActionCommand("Start");
    btnStart.setName("btnStart");
    btnStart.setText("Start");
    panelButton.add(btnStart, cc.xy(1, 1));

    btnStop.setActionCommand("Stop");
    btnStop.setName("btnStop");
    btnStop.setText("Stop");
    panelButton.add(btnStop, cc.xy(1, 3));

    return panelButton;
  }

  public void setFocusToFirstEmptyInputField()
  {
    // nothing to do
  }

  private void initVisualObjects()
  {
    lblTitleTable.setText(this.getTitle()); // i18n.LBL_TITLE_USED_TABLES);
    lblTablename.setText(i18n.LBL_TABLENAME);
    lblTitleTableResult.setText(" " + i18n.INFO_REPORT);
    lblFooterTableResult.setText("");

    lblDisplayType.setText(i18n.LBL_DISPLAYTYPE);

    tfTablename.setToolTipText(i18n.TOOLTIP_WILDCARD);

    rbDisplayTypeAll.setText(i18n.LBL_RB_DISPLAYTYPE_ALL);
    rbDisplayTypeAll.setToolTipText(i18n.TOOLTIP_RB_DISPLAYTYPE_ALL);
    rbDisplayTypePK.setText(i18n.LBL_RB_DISPLAYTYPE_PK);
    rbDisplayTypePK.setToolTipText(i18n.TOOLTIP_RB_DISPLAYTYPE_PK);
    rbDisplayTypeUI.setText(i18n.LBL_RB_DISPLAYTYPE_UI);
    rbDisplayTypeUI.setToolTipText(i18n.TOOLTIP_RB_DISPLAYTYPE_UI);
    rbDisplayTypeUI.setSelected(true);

    btnStart.setText(i18n.LBL_BTN_START);
    btnStart.setIcon(SmarttoolsHelper.loadIcon("start16x16.png"));
    btnStart.addActionListener(this);

    btnStop.setText(i18n.LBL_BTN_STOP);
    btnStop.setIcon(SmarttoolsHelper.loadIcon("stop16x16.png"));
    btnStop.addActionListener(this);
    btnStop.setEnabled(false);

    btnPrint.setText(i18n.LBL_BTN_PRINT);
    btnPrint.setIcon(SmarttoolsHelper.loadIcon("printer16x16.png"));
    btnPrint.addActionListener(this);
    btnPrint.setEnabled(false);

    btnDdl.setText(i18n.LBL_BTN_DDL);
    btnDdl.setToolTipText(i18n.TOOLTIP_BTN_DDL);
    btnDdl.setIcon(SmarttoolsHelper.loadIcon("change16x16.png"));
    btnDdl.addActionListener(this);
    btnDdl.setEnabled(false);

    btnRecordCount.setText(i18n.LBL_BTN_RECORDS);
    btnRecordCount.setToolTipText(i18n.TOOLTIP_BTN_RECORDS);
    btnRecordCount.setIcon(SmarttoolsHelper.loadIcon("count16x16.png"));
    btnRecordCount.addActionListener(this);
    btnRecordCount.setEnabled(false);

    initTableColumnWidth();
    tblResult.setDefaultRenderer(Object.class, new Renderer());

    pbMain.setValue(0);
    pbMain.setStringPainted(true);
  }

  private void createTableHeader()
  {
    vecHeader.add(i18n.GLOBAL_TABLE);
    vecHeader.add(i18n.TABLECOLUMN_RECORD_COUNT);
    vecHeader.add(i18n.TABLECOLUMN_PRIMARY_KEY_COUNT);
    vecHeader.add(i18n.TABLECOLUMN_UNIQUE_INDEX_COUNT);
    vecHeader.add(i18n.TABLECOLUMN_INDEX_COUNT);
  }

  // controlling
  // ------------------------------------------------------------------------
  public void controlComponents(int type)
  {
    if (type == START_WORKING || type == STOP_WORKING)
    {
      boolean b = type == STOP_WORKING;
      tfTablename.setEnabled(b);
      btnStart.setEnabled(b);
      btnStop.setEnabled(!b);
      btnPrint.setEnabled(b && tblResult.getRowCount() > 0);
      btnDdl.setEnabled(btnPrint.isEnabled());
      btnRecordCount.setEnabled(btnPrint.isEnabled());
    }
  }

  // user checks
  // ------------------------------------------------------------------------
  private void startWork()
  {
    controlComponents(START_WORKING);
    threadWork = new ThreadWork();
    threadWork.start();
  }

  private void stopWork()
  {
    threadSuspended = true;
    if (JOptionPane.showConfirmDialog(
       session.getApplication().getMainFrame(), i18n.QUESTION_CANCEL_WORK, i18n.QUESTION_CANCEL_WORK_TITLE,
       JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
    {
      threadWork = null;
      controlComponents(STOP_WORKING);
    }
    threadSuspended = false;
  }

  private void printResult()
  {
    try
    {
      MessageFormat headerFormat = new MessageFormat(lblTitleTable.getText());
      MessageFormat footerFormat = new MessageFormat(i18n.GLOBAL_ALIAS + ": "
            + session.getAlias().getName() + " | "
            + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT).format(new Date())
            + " | " + i18n.GLOBAL_PAGE + " {0} ");

      tblResult.print(PrintMode.FIT_WIDTH, headerFormat, footerFormat);
    } catch (PrinterException e)
    {
      log.error(e.getLocalizedMessage());
    }
  }

  private void getRecordCounts()
  {
    Statement stmt = null;
    try
    {
      stmt = session.getSQLConnection().createStatement();
      for (int i = 0; i < tblResult.getRowCount() - 1; i++)
      {
        int records = getRecordCount(stmt, (String) tblResult.getValueAt(i, COL_TABLENAME));
        tblResult.setValueAt(new Integer(records), i, COL_RECORDS);
        ((DefaultTableModel) tblResult.getModel()).fireTableDataChanged();
      }
      stmt.close();
      stmt = null;
    } catch (SQLException e)
    {
      log.error(e.getLocalizedMessage());
    } finally
    {
      SQLUtilities.closeStatement(stmt);
    }
  }

  private int getRecordCount(Statement stmt, String tablename) throws SQLException
  {
    int recordCount = 0;

    ResultSet rs = null;
    try
    {
      rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tablename);
      if (rs.next())
      {
        recordCount = rs.getInt(1);
      }
    } finally
    {
      SQLUtilities.closeResultSet(rs);
    }

    return recordCount;
  }

  // ########################################################################
  // ########## events
  // ########################################################################
  // ------------------------------------------------------------------------
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == btnStart)
    {
      startWork();
    } else if (e.getSource() == btnStop)
    {
      stopWork();
    } else if (e.getSource() == btnPrint)
    {
      printResult();
    } else if (e.getSource() == btnDdl)
    {
      if (tblResult.getSelectedRow() > -1)
      {
        new SmarttoolCreateIndexD(null, session, (String) tblResult.getValueAt(
           tblResult.getSelectedRow(), COL_TABLENAME));
      } else
      {
        JOptionPane.showMessageDialog(session.getApplication().getMainFrame(), i18n.ERROR_NO_ROW_SELECTED);
      }
    }
    if (e.getSource() == btnRecordCount)
    {
      getRecordCounts();
    }
  }

  // ------------------------------------------------------------------------
  class ThreadWork extends Thread
  {
    private Thread thisThread = null;

    @Override
    public void run()
    {
      super.run();
      thisThread = Thread.currentThread();

      startTest();

      controlComponents(STOP_WORKING);
      threadWork = null;
    }

    private boolean isThreadInvalid()
    {
      if (thisThread != threadWork)
      {
        return true;
      }
      try
      {
        synchronized (this)
        {
          while (threadSuspended)
          {
            wait(200);
          }
        }
      } catch (InterruptedException e)
      {
      }
      return false;
    }

    private void startTest()
    {
      long startTime = System.currentTimeMillis();
      boolean error = false;

      ((DefaultTableModel) tblResult.getModel()).setDataVector(new Vector<Vector<Object>>(), vecHeader);

      String tableNamePattern = tfTablename.getText().trim();
      if (tableNamePattern.length() == 0)
      {
        tableNamePattern = "%";
      }
      try
      {
        ITableInfo[] tableInfoArray = session.getMetaData().getTables(
           null, null, tableNamePattern, new String[]
             { "TABLE" }, null);
        lblFooterTableResult.setText("");
        pbMain.setValue(0);
        pbMain.setMaximum(tableInfoArray.length);

        for (int iTableInfo = 0; iTableInfo < tableInfoArray.length; iTableInfo++)
        {
          ITableInfo tableInfo = tableInfoArray[iTableInfo];
          pbMain.setString(tableInfo.getSimpleName() + " " + (iTableInfo + 1) + "/"
                + pbMain.getMaximum());

          if (!checkIndices(tableInfo))
          {
            error = true;
          }

          pbMain.setValue(iTableInfo + 1);
          pbMain.repaint();
          if (isThreadInvalid())
          {
            break;
          }
        }
        long diffTime = System.currentTimeMillis() - startTime;
        lblFooterTableResult.setText(" " + i18n.INFO_FINISHED + " " + diffTime + " ms");
        if (error)
        {
          JOptionPane.showMessageDialog(null, i18n.ERROR_RECORD_COUNT);
        }
      } catch (SQLException e)
      {
        log.error(e);
        JOptionPane.showMessageDialog(null, i18n.ERROR_READ_CHECKING_DATA);
      }
    }

    private boolean checkIndices(ITableInfo tableInfo) throws SQLException
    {
      int uniqueIndexCount = 0;
      int recordCount = 0;
      List<IndexInfo> listIndexInfo = session.getMetaData().getIndexInfo(tableInfo);
      for (int iIndexInfo = 0; iIndexInfo < listIndexInfo.size(); iIndexInfo++)
      {
        if (!listIndexInfo.get(iIndexInfo).isNonUnique())
        {
          uniqueIndexCount++;
        }
      }

      PrimaryKeyInfo[] arrayPrimaryKeyInfo = session.getMetaData().getPrimaryKey(tableInfo);

      if (rbDisplayTypeAll.isSelected()
            || (rbDisplayTypePK.isSelected() && arrayPrimaryKeyInfo.length == 0)
            || (uniqueIndexCount == 0))
      {
        addTableEntry(
           tableInfo.getSimpleName(), recordCount, arrayPrimaryKeyInfo.length, uniqueIndexCount,
           listIndexInfo.size());
      }

      return recordCount > -1;
    }

    private void addTableEntry(String tableName, int recordCount, int primaryKey, int uniqueIndices,
          int indexSummary)
    {
      Vector<Object> vecRow = new Vector<Object>();
      vecRow.add(tableName);
      vecRow.add(recordCount);
      vecRow.add(primaryKey);
      vecRow.add(uniqueIndices);
      vecRow.add(indexSummary);
      DefaultTableModel tm = (DefaultTableModel) tblResult.getModel();
      tm.addRow(vecRow);
      tm.fireTableDataChanged();
      initTableColumnWidth();
    }
  }

  private void initTableColumnWidth()
  {
    TableColumnModel tcm = tblResult.getTableHeader().getColumnModel();
    tcm.getColumn(COL_TABLENAME).setPreferredWidth(190);
    tcm.getColumn(COL_RECORDS).setPreferredWidth(80);
    tcm.getColumn(COL_PRIMARY).setPreferredWidth(90);
    tcm.getColumn(COL_UNIQUE).setPreferredWidth(100);
    tcm.getColumn(COL_SUMMARY).setPreferredWidth(60);
  }

  private class Renderer implements TableCellRenderer
  {
    private ImageIcon iconMarked = SmarttoolsHelper.loadIcon("gridMarked16x16.png");

    private ImageIcon iconDemarked = SmarttoolsHelper.loadIcon("gridDemarked16x16.png");

    private ImageIcon iconMarkedSelected = SmarttoolsHelper.loadIcon("gridMarkedSelected16x16.png");

    private ImageIcon iconDemarkedSelected = SmarttoolsHelper.loadIcon("gridDemarkedSelected16x16.png");

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
          boolean hasFocus, int row, int column)
    {
      JLabel lbl = new JLabel(value + "");
      lbl.setOpaque(true);

      if (isSelected)
      {
        lbl.setBackground(tblResult.getSelectionBackground());
        lbl.setForeground(tblResult.getSelectionForeground());
      } else
      {
        lbl.setBackground(tblResult.getBackground());
        lbl.setForeground(tblResult.getForeground());
      }
      if (column >= COL_RECORDS)
      {
        if (column == COL_PRIMARY)
        {
          lbl.setText("");
          if (((Integer) value).intValue() == 0)
          {
            if (isSelected)
            {
              lbl.setIcon(iconDemarkedSelected);
            } else
            {
              lbl.setIcon(iconDemarked);
            }
          } else
          {
            if (isSelected)
            {
              lbl.setIcon(iconMarkedSelected);
            } else
            {
              lbl.setIcon(iconMarked);
            }
          }
        }
        lbl.setHorizontalAlignment(SwingConstants.CENTER);
        if (((Integer) value).intValue() == 0)
        {
          if (column == COL_PRIMARY)
          {
            lbl.setBackground(Color.ORANGE);
          } else if (column > COL_PRIMARY)
          {
            lbl.setBackground(Color.RED);
          }
        }
      } else
      {
        lbl.setHorizontalAlignment(SwingConstants.LEADING);
      }

      return lbl;
    }

  }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.plugins.smarttools.gui.SmarttoolMissingIndicesFrame$Renderer

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.