Package vg.modules.notepad.components

Source Code of vg.modules.notepad.components.ConnectionStatistic$CSTableModel

package vg.modules.notepad.components;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;

import vg.core.event.UIEventCreateNewConnection;
import vg.core.event.UIEventDeleteConnection;
import vg.core.plugin.PluginParameter;
import vg.modules.notepad.components.connectorComponent.Connector;

public class ConnectionStatistic extends JDialog {
  private final static long serialVersionUID = 1L;
  // Defines
  private final static int DEF_ROW_HEIGHT = 22;
  // Components
  private JTable table;
  private JScrollPane tableScroll;
  private final JPanel view;
  private final JButton /*addConnectionButton,*/ cancelButton;
  // Data
  private final List<UIEventCreateNewConnection> connections;
  private final PluginParameter param;
  private final Connector connector;
  /**
   * Constructor.
   */
  public ConnectionStatistic(final JFrame parent, final PluginParameter param) {
    super(parent, "Connection statistic", true);
    // create components
    this.param = param;
    this.connector = new Connector(param, parent);
    this.connections = new ArrayList<UIEventCreateNewConnection>();
    this.view = new JPanel(new GridBagLayout());
    this.cancelButton = new JButton("Cancel");
    // add listeners
    this.cancelButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ConnectionStatistic.this.setVisible(false);
      }
    });
    // init ui
    this.setLayout(new GridLayout(1, 1));
    this.setSize(500,400);

    this.add(this.view);
    GridBagConstraints gbc = new GridBagConstraints(1,1, 1,1, 1,0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0,0);

    gbc = new GridBagConstraints(0,1, 1,1, 1,0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0,0);
    this.view.add(this.cancelButton, gbc);
  }
  /**
   * This method opens the connection statistics panel.
   */
  synchronized
  public void open() {
    if(SwingUtilities.isEventDispatchThread()) {
      this.setVisible(true);
    } else {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          ConnectionStatistic.this.setVisible(true);
        }
      });
    }
  }
  /**
   * This method adds new connection.
   */
  synchronized
  public void addConnection(final UIEventCreateNewConnection connection) {
    this.connections.add(connection);
    rebuildTable();
  }
  /**
   * This method removes connection from connection statistic panel.
   */
  synchronized
  public void removeConnection(int connectionId) {
    for(UIEventCreateNewConnection buf : this.connections) {
      if(buf.getConnectionId() == connectionId) {
        this.connections.remove(buf);
        break;
      }
    }
    rebuildTable();
  }
  synchronized
  public void removeAllConnections() {
    this.connections.clear();
    rebuildTable();
  }
  ///////////////////////////////////////////////////////////////////////////
  // PRIVATE METHODS
  ///////////////////////////////////////////////////////////////////////////
  private void rebuildTable() {
    if(SwingUtilities.isEventDispatchThread()) {
      localRebuildTable();
    } else {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          localRebuildTable();
        }
      });
    }
  }
  private void localRebuildTable() {
    final Object[][] data = new Object[this.connections.size()][5];
   
    int i = 0;
    for(UIEventCreateNewConnection buf : this.connections) {
      data[i][0] = buf.getConnectionName();
      data[i][1] = buf.getGraphName();
      data[i][2] = buf.getAnchor();
      JButton edit = new JButton("Edit");
      edit.addActionListener(new EditListener(this.connector, buf));
      data[i][3] = edit;
      JButton delete = new JButton("Delete");
      delete.addActionListener(new DeleteListener(buf.getConnectionId(), param));
      data[i][4] = delete;
      i++;
    }
   
    if(ConnectionStatistic.this.table != null) {
      ConnectionStatistic.this.view.remove(ConnectionStatistic.this.tableScroll);
    }
    CSTableModel model = new CSTableModel(data);
    ConnectionStatistic.this.table = new JTable(model);
    ConnectionStatistic.this.table.setOpaque(true);
    ConnectionStatistic.this.table.setFillsViewportHeight(true);
    ConnectionStatistic.this.table.setRowHeight(DEF_ROW_HEIGHT);
    TableRowSorter<CSTableModel> sorter = new TableRowSorter<CSTableModel>(model);
    sorter.setSortable(0, true);
    sorter.setSortable(1, true);
    sorter.setSortable(2, true);
    sorter.setSortable(3, false);
    sorter.setSortable(4, false);
    ConnectionStatistic.this.table.setRowSorter(sorter);
    ConnectionStatistic.this.table.setShowGrid(true);
    ConnectionStatistic.this.table.getTableHeader().setReorderingAllowed(false);
    //---------------------------------------
    CSTableCellRenderer renderer = new CSTableCellRenderer();
    TableColumn col3 = ConnectionStatistic.this.table.getColumnModel().getColumn(3);
    TableColumn col4 = ConnectionStatistic.this.table.getColumnModel().getColumn(4);
    col3.setCellRenderer(renderer);
    col4.setCellRenderer(renderer);
    //---------------------------------------
    CSTableCellEditor editor = new CSTableCellEditor(model, renderer);
    col3.setCellEditor(editor);
    col4.setCellEditor(editor);
    //---------------------------------------
    ConnectionStatistic.this.tableScroll = new JScrollPane(ConnectionStatistic.this.table);
    GridBagConstraints gbc = new GridBagConstraints(0,0, 2,1, 1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,0);
    ConnectionStatistic.this.view.add(ConnectionStatistic.this.tableScroll, gbc);
    ConnectionStatistic.this.view.updateUI();
  }
  ///////////////////////////////////////////////////////////////////////////
  // PRIVATE CLASSES
  ///////////////////////////////////////////////////////////////////////////
  /**
   * This class realizes model for attribute table
   * @author tzolotuhin
   */
  private class CSTableModel extends AbstractTableModel {
    private static final long serialVersionUID = 1000L;
    //-------------------------------------------------------------------------
    private String[] columnNames = null;
      private Object[][] table = null;
      private final static int DEF_COUNT_COLUMN = 5;
    //-------------------------------------------------------------------------
      public CSTableModel(final Object[][] data) {
        this.columnNames = new String[DEF_COUNT_COLUMN];
        this.table = data;
           this.columnNames = new String[]{"Name", "Graph name", "Anchor", "Edit", "Delete"};
      }
      public int getColumnCount() {    
        return(DEF_COUNT_COLUMN);
      }
      public int getRowCount() {
        return(this.table.length);
      }
      public Object getValueAt(int rowIndex, int columnIndex) {
        return(this.table[rowIndex][columnIndex]);
      }
      public String getColumnName(int column) {
        return(this.columnNames[column]);
      }
      public Class<?> getColumnClass(int columnIndex) {
        if (getRowCount() > 0)
          return(this.table[0][columnIndex].getClass());
        return null;
      }
      public boolean isCellEditable(int rowIndex, int columnIndex) {
        if(columnIndex == 3 || columnIndex == 4) {
          return(true);
        }
        return(false);
      }
      /**
       * This method sets value in table.
       * @param value - value.
       * @param row   - number of row.
       * @param col   - number of column.
       */
      public void setValueAt(Object value, int row, int col) {
      this.table[row][col] = value;
          fireTableCellUpdated(row, col);
     
  }
  private class CSTableCellEditor extends AbstractCellEditor implements TableCellEditor {
    private static final long serialVersionUID = 1000L;
    //---------------------------------------------------------------------
    private Object lastObject;
    private CSTableCellRenderer renderer;
    public CSTableCellEditor(CSTableModel model, CSTableCellRenderer renderer) {
      this.renderer = renderer;
    }
    /**
     *  This method is called when a cell value is edited by the user.
     */
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int colIndex) {
      this.lastObject = table.getValueAt(rowIndex, colIndex);
      return(this.renderer.getTableCellRendererComponent(table, value, isSelected, isSelected, rowIndex, colIndex));
    }
    /**
     * This method is called when editing is completed.
     * It must return the new value to be stored in the cell.
     */
    public Object getCellEditorValue() {
      return(this.lastObject);
    }
  }
  private class CSTableCellRenderer implements TableCellRenderer {
    private final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

    public Component getTableCellRendererComponent(final JTable table, final Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      switch(column) {
        case 3:case 4:
        {
          JButton obj = (JButton)table.getValueAt(row, column);
          return(obj);
        }
      }
      return(DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column));
    }
  }
  /**
   * Listener for delete button.
   * @author tzolotuhin
   */
  private class DeleteListener implements ActionListener {
    private final int connectionId;
    private final PluginParameter param;
    public DeleteListener(int connectionId, final PluginParameter param) {
      this.param = param;
      this.connectionId = connectionId;
    }
    public void actionPerformed(ActionEvent e) {
      UIEventDeleteConnection event = new UIEventDeleteConnection(this.connectionId);
      this.param.userInterface.addEvent(event);
    }
  }
  /**
   * Listener for edit button.
   * @author tzolotuhin
   */
  private class EditListener implements ActionListener {
    private final Connector connector;
    private final UIEventCreateNewConnection connection;
    public EditListener(final Connector connector, UIEventCreateNewConnection connection) {
      this.connector = connector;
      this.connection = connection;
    }
    public void actionPerformed(ActionEvent e) {
      this.connector.replace(this.connection.getConnectionId(), this.connection.getConnectionName(), this.connection.getFileId(), this.connection.getGraphId(), this.connection.getAnchor());
    }
  }
}
TOP

Related Classes of vg.modules.notepad.components.ConnectionStatistic$CSTableModel

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.