package vicazh.hyperpool.stream;
import java.awt.event.*;
import java.lang.reflect.*;
import java.util.*;
import javax.management.*;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.event.*;
import vicazh.hyperpool.*;
/**
* The graphic default selector
*
* @author Victor Zhigunov
* @version 0.4.9.3
*/
public class IDefSelector extends IValSelector implements DefSelectorMBean,
DocumentListener {
private JComboBox defBox;
private ISelectorListModel defModel;
private JTable ptable;
private IPrioritiesModel pmodel;
private JFormattedTextField textClient;
private JFormattedTextField textServer;
private JButton buttonOK;
private JProgressBar bar;
/**
* @param interfaceClass
* interface class
* @param name
* selector name
* @param valModel
* combo box model for values
* @param model
* selector table model
* @param defBox
* combo box for default value
* @param ptable
* priorities table
* @param textClient
* client speed value field
* @param textServer
* server speed value field
* @param buttonOK
* OK button
* @param bar
* progress bar
*/
public IDefSelector(Class<?> interfaceClass, String name,
ISelectorListModel valModel, ISelectorModel model,
JComboBox defBox, JTable ptable, JFormattedTextField textClient,
JFormattedTextField textServer, JButton buttonOK, JProgressBar bar) {
super(interfaceClass, name, valModel, model);
this.defBox = defBox;
this.defModel = (ISelectorListModel) defBox.getModel();
this.ptable = ptable;
this.pmodel = (IPrioritiesModel) ptable.getModel();
if (textClient != null)
textClient.getDocument().addDocumentListener(this);
this.textClient = textClient;
if (textServer != null)
textServer.getDocument().addDocumentListener(this);
this.textServer = textServer;
buttonOK.setEnabled(false);
buttonOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
IDefSelector.this.buttonOK.setEnabled(false);
Priorities list = (Priorities) getList();
if (IDefSelector.this.textClient != null) {
list.setClient((Double) IDefSelector.this.textClient
.getValue());
pmodel.clientsSpeed = (Double) IDefSelector.this.textClient
.getValue();
}
if (IDefSelector.this.textServer != null) {
list.setServer((Double) IDefSelector.this.textServer
.getValue());
pmodel.serversSpeed = (Double) IDefSelector.this.textServer
.getValue();
}
setList(list);
}
});
this.buttonOK = buttonOK;
this.bar = bar;
}
/**
* @param name
* selector name
* @param valModel
* combo box model for values
* @param model
* selector table model
* @param defBox
* combo box for default value
* @param ptable
* priorities table
* @param textClient
* client speed value field
* @param textServer
* server speed value field
* @param buttonOK
* OK button
* @param bar
* progress bar
*/
public IDefSelector(String name, ISelectorListModel valModel,
ISelectorModel model, JComboBox defBox, JTable ptable,
JFormattedTextField textClient, JFormattedTextField textServer,
JButton buttonOK, JProgressBar bar) {
this(DefSelectorMBean.class, name, valModel, model, defBox, ptable,
textClient, textServer, buttonOK, bar);
updateUI();
}
public void added(int index) {
super.added(index);
defModel.insert(index);
pmodel.insert(index);
}
public void removed(int index) {
super.removed(index);
defModel.remove(index);
pmodel.remove(index);
}
protected void otherNotification(String type, Object value) {
if (type.equals(SelectorMBean.DEF)) {
defBox.setSelectedIndex((Integer) value);
defBox.repaint();
} else if (type.equals(ListSelectorMBean.LIST)) {
if (textClient != null) {
textClient.setValue(((Priorities) value).getClient());
pmodel.clientsSpeed = ((Priorities) value).getClient();
}
if (textServer != null) {
textServer.setValue(((Priorities) value).getServer());
pmodel.serversSpeed = ((Priorities) value).getServer();
}
pmodel.fireTableDataChanged();
}
super.otherNotification(type, value);
}
public void insertUpdate(DocumentEvent e) {
update();
}
public void removeUpdate(DocumentEvent e) {
update();
}
public void changedUpdate(DocumentEvent e) {
update();
}
private void update() {
buttonOK.setEnabled(true);
}
public void updateUI() {
bar.updateUI();
}
public List<PriorityItem> getItems() {
try {
return ((DefSelectorMBean) melement).getItems();
} catch (UndeclaredThrowableException e) {
}
return null;
}
private Timer timer;
protected void action() {
if (!ptable.isShowing())
return;
pmodel.items = getItems();
if (pmodel.items != null)
for (int i = 0; i < pmodel.items.size(); i++) {
pmodel.fireTableCellUpdated(i, 3);
pmodel.fireTableCellUpdated(i, 4);
pmodel.fireTableCellUpdated(i, 5);
pmodel.fireTableCellUpdated(i, 6);
}
}
public void connect(MBeanServerConnection mbsc) throws Exception {
super.connect(mbsc);
timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
action();
}
});
timer.start();
}
public void disconnect() throws Exception {
super.disconnect();
timer.stop();
}
public List<List<Object>> getList() {
List<List<Object>> l = super.getList();
if (textClient != null) {
boolean b = false;
for (Object o : l)
if (((Priority) o).getClient() > 0) {
b = true;
break;
}
textClient.setEnabled(b);
pmodel.clientsEnabled = b;
}
if (textServer != null) {
boolean b = false;
for (Object o : l)
if (((Priority) o).getServer() > 0) {
b = true;
break;
}
textServer.setEnabled(b);
pmodel.serversEnabled = b;
}
return l;
}
}