All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jive3.DevicePollingPanel Maven / Gradle / Ivy

The newest version!
package jive3;

import fr.esrf.tangoatk.widget.util.ATKConstant;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.ActionEvent;
import java.util.Vector;

import jive.JiveUtils;

public class DevicePollingPanel extends JPanel implements MouseListener,ActionListener {

  private JTabbedPane tabPane;
  private JTable      cmdTable;
  private DefaultTableModel cmdModel;
  private JTable      attTable;
  private DefaultTableModel attModel;
  private JTable      adminTable;
  private DefaultTableModel adminModel;
  private JButton     refreshButton;
  private JButton     applyButton;
  private JButton     resetButton;
  private JPopupMenu  tableMenu;
  private JMenuItem   enablePollingMenuItem;
  private JMenuItem   disablePollingMenuItem;
  private JMenuItem   setPeriodMenuItem;

  private JTable selectedTable;
  private int[]  selectedRows;

  private TaskPollingNode[]   source = null;

  DevicePollingPanel()  {

    setLayout(new BorderLayout());

    // -- Command table -------------------------------
    cmdModel = new DefaultTableModel() {

      public Class getColumnClass(int columnIndex) {
        if(columnIndex==1)
          return Boolean.class;
        else
          return String.class;
      }
      public boolean isCellEditable(int row, int column) {
          return (column!=0) && (!JiveUtils.readOnly);
      }

      public void setValueAt(Object aValue, int row, int column) {
        if(!aValue.equals(getValueAt(row,column))) {
          super.setValueAt(aValue,row,column);
          String  name = (String)cmdModel.getValueAt(row,0);
          boolean polled = ((Boolean)cmdModel.getValueAt(row,1)).booleanValue();
          String  period = (String)cmdModel.getValueAt(row,2);
          if(column==2) { polled=true; }
          int nb = source.length;
          int k = 0;

          // Confirmation dialog
          if (source.length > 1) {

            Vector propChange = new Vector();
            propChange.add("IsPolled");
            propChange.add(Boolean.toString(polled));
            propChange.add("Period");
            propChange.add(period);
            if (!MultiChangeConfirmDlg.confirmChange(propChange, source.length," for command " + name)) {
              refreshValue();
              return;
            }

          }

          if(nb>1) ProgressFrame.displayProgress("Updating polling");
          for(int i=0;i 1) {

            Vector propChange = new Vector();
            propChange.add("IsPolled");
            propChange.add(Boolean.toString(polled));
            propChange.add("Period");
            propChange.add(period);
            if (!MultiChangeConfirmDlg.confirmChange(propChange, source.length," for attribute " + name)) {
              refreshValue();
              return;
            }

          }

          if(nb>1) ProgressFrame.displayProgress("Updating polling");
          for(int i=0;i 1) {

            Vector propChange = new Vector();

            if( row==0 ) {
              propChange.add("PollOldFactor");
              propChange.add((String) aValue);
            } else {
              propChange.add("PollRingDepth");
              propChange.add((String) aValue);
            }

            if (!MultiChangeConfirmDlg.confirmChange(propChange, source.length)) {
              refreshValue();
              return;
            }

          }

          if(nb>1) ProgressFrame.displayProgress("Updating polling");
          if (row == 0) {
            for (int i = 0; i < source.length; i++) {
              k++;
              ProgressFrame.setProgress("Updating " + source[i].getName() + "/PollOldFactor",
                      (k * 100) / nb);
              source[i].setPollOldFactor((String) aValue);
            }
          } else {
            for (int i = 0; i < source.length; i++) {
              k++;
              ProgressFrame.setProgress("Updating " + source[i].getName() + "/PollRingDepth",
                      (k * 100) / nb);
              source[i].setPollRingDepth((String) aValue);
            }
          }
          ProgressFrame.hideProgress();
          refreshValue();
        }
      }

    };
    adminTable = new JTable(adminModel);
    adminTable.addMouseListener(this);
    JScrollPane adminView = new JScrollPane(adminTable);

    tabPane = new JTabbedPane();
    tabPane.setFont(ATKConstant.labelFont);
    tabPane.add("Command", cmdView);
    tabPane.add("Attribute",attView);
    tabPane.add("Settings",adminView);

    Border b = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"...");
    tabPane.setBorder(b);
    add(tabPane, BorderLayout.CENTER);

    // Bottom panel
    JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    refreshButton = new JButton("Refresh");
    refreshButton.addActionListener(this);
    btnPanel.add(refreshButton);
    applyButton = new JButton("Apply");
    applyButton.setEnabled(!JiveUtils.readOnly);
    applyButton.addActionListener(this);
    btnPanel.add(applyButton);
    resetButton = new JButton("Reset");
    resetButton.setEnabled(!JiveUtils.readOnly);
    resetButton.addActionListener(this);
    btnPanel.add(resetButton);
    add(btnPanel,BorderLayout.SOUTH);

    // Contextual menu
    tableMenu = new JPopupMenu();
    enablePollingMenuItem = new JMenuItem("Enable polling");
    enablePollingMenuItem.addActionListener(this);
    disablePollingMenuItem = new JMenuItem("Disable polling");
    disablePollingMenuItem.addActionListener(this);
    setPeriodMenuItem = new JMenuItem("Set period");
    setPeriodMenuItem.addActionListener(this);
    tableMenu.add(enablePollingMenuItem);
    tableMenu.add(disablePollingMenuItem);
    tableMenu.add(setPeriodMenuItem);

  }
  // Mouse listener -------------------------------------------

  public void mousePressed(MouseEvent e) {

    selectedTable = (JTable)e.getSource();

    if(e.getButton() == MouseEvent.BUTTON3 && e.getClickCount()==1 && !JiveUtils.readOnly) {

      if (selectedTable == attTable || selectedTable == cmdTable) {
        int row = getRowForLocation(e.getY());
        if (row != -1) {
          selectedTable.addRowSelectionInterval(row, row);
          selectedTable.setColumnSelectionInterval(0, 1);
          selectedRows = selectedTable.getSelectedRows();
          tableMenu.show(selectedTable, e.getX(), e.getY());
        }
      }

    }


  }
  public void mouseClicked(MouseEvent e) {}
  public void mouseReleased(MouseEvent e) {}
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}

  // Action listener -------------------------------------------

  public void actionPerformed(ActionEvent e) {

    Object src = e.getSource();

    if( src==refreshButton ) {

      // Refresh the panel
      refreshValue();

    } else if (src==applyButton) {

      if(cmdTable.isEditing()) {
        String t = ((JTextField)cmdTable.getEditorComponent()).getText();
        cmdModel.setValueAt(t,cmdTable.getEditingRow(),cmdTable.getEditingColumn());
      }
      if(attTable.isEditing()) {
        String t = ((JTextField)attTable.getEditorComponent()).getText();
        attModel.setValueAt(t,attTable.getEditingRow(),attTable.getEditingColumn());
      }
      if(adminTable.isEditing()) {
        String t = ((JTextField)adminTable.getEditorComponent()).getText();
        adminModel.setValueAt(t,adminTable.getEditingRow(),adminTable.getEditingColumn());
      }

    } else if (src==resetButton) {

      int ok = JOptionPane.showConfirmDialog(null,
                                             "This will reset polling configuration for all\n" +
                                             "attributes and commands.\nReset configuration ?",
                                             "Confirm reset", JOptionPane.YES_NO_OPTION);
      if (ok == JOptionPane.YES_OPTION) {

        int nb = source.length;
        int k = 0;
        if(nb>1) ProgressFrame.displayProgress("Reseting config");
        for (int i = 0; i < source.length; i++) {
          k++;
          ProgressFrame.setProgress("Reseting " + source[i].getName(), (k*100)/nb);
          source[i].resetConfig();
        }
        ProgressFrame.hideProgress();
        JOptionPane.showMessageDialog(null,"The polling configuration has been succesfully reset.\n" +
                                           "The server needs to be restarted to take change into account.");
      }

    } else if (src==enablePollingMenuItem) {

      int nb = selectedRows.length * source.length;
      int k = 0;
      if(nb>1) ProgressFrame.displayProgress("Enabling polling");
      TableModel model = selectedTable.getModel();
      for(int j=0;j1) ProgressFrame.displayProgress("Disabling polling");
      TableModel model = selectedTable.getModel();
      for(int j=0;j1) ProgressFrame.displayProgress("Updating polling period");
      TableModel model = selectedTable.getModel();
      for(int j=0;j=h && y<=h+selectedTable.getRowHeight(i));
      if(!found) {
        h+=selectedTable.getRowHeight(i);
        i++;
      }
    }

    if(found) {
      return i;
    } else {
      return -1;
    }

  }

  // ---------------------------------------------------------------

  private void refreshValue() {

    if (source != null) {

      source[0].browsePollingStatus();

      // Command
      String cmdColName[] = {"Command name" , "Polled" , "Period (ms)"};
      Object[][] cmdInfo = new Object[source[0].getCommandNumber()][3];
      for(int i=0;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy