Package de.ixdb.squirrel_sql.plugins.cache

Source Code of de.ixdb.squirrel_sql.plugins.cache.ProcessListTab

package de.ixdb.squirrel_sql.plugins.cache;

import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab;
import net.sourceforge.squirrel_sql.fw.gui.ButtonTableHeader;
import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
import net.sourceforge.squirrel_sql.fw.datasetviewer.CellDataPopup;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class ProcessListTab  implements IMainPanelTab
{
   ProcessListPanel _pnlProcessList;
   private ISession _session;
   private ProcessData[] _procData;
   private ProcessListTabListener _processListTabListener;

   public ProcessListTab(ProcessData[] procData, ProcessListTabListener processListTabListener)
   {
      _procData = procData;


      _processListTabListener = processListTabListener;
      _pnlProcessList = new ProcessListPanel();

      DefaultTableModel dtm =
         new DefaultTableModel()
         {
            public boolean isCellEditable(int row, int column)
            {
               return false;
            }

            public Object getValueAt(int row, int column)
            {
               return onGetValueAt(row, column);
            }

            public String getColumnName(int column)
            {
               return ProcessData.getColumns()[column];
            }

            public int getRowCount()
            {
               if(null == ProcessListTab.this)
               {
                  // I have seen the reference to the outer class being null
                  // when this method is called.
                  // I have seen it only with the runtime jars
                  // and on Linux.
                  // I could not reproduce in my IDE.
                  return 0;
               }
               else
               {
                  return ProcessListTab.this._procData.length;
               }
            }

            public int getColumnCount()
            {
               return ProcessData.getColumns().length;
            }

         };

      SortableTableModel stm = (SortableTableModel) _pnlProcessList.tblProcessList.getModel();
      stm.setActualModel(dtm);

      DefaultTableCellRenderer dtcr =
         new DefaultTableCellRenderer()
         {
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
            {
               Component rend = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
               if(null != value && 0 < value.toString().indexOf('\n'))
               {
                  rend.setBackground(Color.cyan);
               }
               else
               {
                  if (isSelected)
                  {
                     setBackground(table.getSelectionBackground());
                  }
                  else
                  {
                     setBackground(table.getBackground());
                  }
               }
               return rend;
            }
         };


      final TableColumnModel tcm = new DefaultTableColumnModel();
      for (int i = 0; i < ProcessData.getColumns().length; ++i)
      {
         final TableColumn col = new TableColumn(i);
         col.setHeaderValue(ProcessData.getColumns()[i]);
         col.setCellRenderer(dtcr);
         tcm.addColumn(col);
      }


      _pnlProcessList.tblProcessList.setColumnModel(tcm);


      _pnlProcessList.btnRefresh.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            onRefresh();
         }
      });

      _pnlProcessList.btnTerminate.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            onTerminate();
         }
      });

      _pnlProcessList.btnClose.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            onClose();
         }
      });


      _pnlProcessList.tblProcessList.addMouseListener(new MouseAdapter()
      {
         public void mousePressed(MouseEvent evt)
         {
            if (evt.getClickCount() == 2)
            {
               // figure out which column the user clicked on
               // so we can pass in the right column description

               Point pt = evt.getPoint();
               int col = _pnlProcessList.tblProcessList.columnAtPoint(pt);
               ColumnDisplayDefinition dumDef = new ColumnDisplayDefinition(50, "Detail");
               CellDataPopup.showDialog(_pnlProcessList.tblProcessList, dumDef, evt,false);
            }
         }
      });
   }


   private void onClose()
   {
      _processListTabListener.closeRequested(_session);
   }

   private void onTerminate()
   {
      int selectedRow = _pnlProcessList.tblProcessList.getSelectedRow();
      selectedRow = _pnlProcessList.tblProcessList.getSortableTableModel().transfromToModelRow(selectedRow);

      String msg;
      if(-1 == selectedRow)
      {
         msg = "No process selected.\nPlease select the Process you wish to terminate.";
         JOptionPane.showMessageDialog(_session.getApplication().getMainFrame(), msg);
         return;
      }

      msg = "Do you really wish to terminate the selected process?";
      if(JOptionPane.YES_OPTION != JOptionPane.showConfirmDialog(_session.getApplication().getMainFrame(), msg, "Terminate process", JOptionPane.YES_NO_CANCEL_OPTION))
      {
         return;
      }

      int termRet = _processListTabListener.terminateRequested(_session, _procData[selectedRow]);

      if(1 != termRet)
      {
         msg = "Terminate should return 1 but returned " + termRet + ".\nMaybe terminate didn't succeed.";
         JOptionPane.showMessageDialog(_session.getApplication().getMainFrame(), msg);
         return;
      }
   }

   private void onRefresh()
   {
      int selectedRow = _pnlProcessList.tblProcessList.getSelectedRow();

      ProcessData old = null;
      if(-1 != selectedRow)
      {
         old = _procData[selectedRow];
      }

      _procData = _processListTabListener.refreshRequested(_session);

      SortableTableModel stm = (SortableTableModel) _pnlProcessList.tblProcessList.getModel();
      ((DefaultTableModel)stm.getActualModel()).fireTableDataChanged();
      stm.fireTableDataChanged();

      ButtonTableHeader bth = (ButtonTableHeader) _pnlProcessList.tblProcessList.getTableHeader();

      if(-1 != bth.getCurrentlySortedColumnIdx())
      {
         stm.sortByColumn(bth.getCurrentlySortedColumnIdx(), bth.isAscending());
      }


      _pnlProcessList.tblProcessList.repaint();

      if(null != old)
      {
         for (int i = 0; i < _procData.length; i++)
         {
            if(old.job == _procData[i].job)
            {
               _pnlProcessList.tblProcessList.getSelectionModel().setSelectionInterval(i,i);
               break;
            }
         }
      }

   }

   private Object onGetValueAt(int row, int column)
   {
      try
      {
         return ProcessData.class.getFields()[column].get(_procData[row]);
      }
      catch (IllegalAccessException e)
      {
         throw new RuntimeException(e);
      }
   }

   public String getTitle()
   {
      return "Processes";
   }

   public String getHint()
   {
      return getTitle();
   }

   public Component getComponent()
   {
      return _pnlProcessList;
   }

   public void setSession(ISession session)
   {
      _session = session;
   }

   public void sessionClosing(ISession session)
   {
      _session = null;
   }

   public void select()
   {
   }
}
TOP

Related Classes of de.ixdb.squirrel_sql.plugins.cache.ProcessListTab

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.