
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