Commit 7a60e994 authored by Vincent van Beveren's avatar Vincent van Beveren

Continued on GUI, some addtions

parent c3ca3a04
...@@ -8,7 +8,7 @@ import nl.nikhef.sfp.i2c.I2CLink; ...@@ -8,7 +8,7 @@ import nl.nikhef.sfp.i2c.I2CLink;
/** /**
* Encapsulates the peripheral which reads the SFP device, not the SFP device itself. * Encapsulates the peripheral which reads the SFP device, not the SFP device itself.
*/ */
public interface SFPDevice public interface SFPDevice extends Comparable<SFPDevice>
{ {
/** /**
* Device serial. * Device serial.
......
...@@ -75,4 +75,8 @@ public abstract class SFPDeviceBase implements SFPDevice { ...@@ -75,4 +75,8 @@ public abstract class SFPDeviceBase implements SFPDevice {
} }
@Override
public int compareTo(SFPDevice o) {
return getSerial().compareTo(o.getSerial());
}
} }
...@@ -87,7 +87,7 @@ public class DDMI extends DDMIGroup { ...@@ -87,7 +87,7 @@ public class DDMI extends DDMIGroup {
* @param filter The filter to use * @param filter The filter to use
* @return A collection of matched elements * @return A collection of matched elements
*/ */
public <T extends DDMIElement> Collection<T> findElements(DDMIFilter<T> filter) public <T extends DDMIElement> List<T> findElements(DDMIFilter<T> filter)
{ {
List <T> list = new ArrayList<T>(); List <T> list = new ArrayList<T>();
......
...@@ -68,14 +68,11 @@ public class DDMIGroup extends DDMIElement { ...@@ -68,14 +68,11 @@ public class DDMIGroup extends DDMIElement {
DDMIGroup.class.cast(element).findElements(filter, list); DDMIGroup.class.cast(element).findElements(filter, list);
} }
if (!filter.getClass().isAssignableFrom(element.getClass())) continue; if (!filter.matchClass().isAssignableFrom(element.getClass())) continue;
T match = filter.matchClass().cast(element); T match = filter.matchClass().cast(element);
//
if (filter.matches(match)) list.add(match); if (filter.matches(match)) list.add(match);
} }
} }
......
...@@ -8,20 +8,23 @@ import javax.swing.JTable; ...@@ -8,20 +8,23 @@ import javax.swing.JTable;
import javax.swing.JToolBar; import javax.swing.JToolBar;
import nl.nikhef.safaripark.Title; import nl.nikhef.safaripark.Title;
import nl.nikhef.sfp.ddmi.DDMI;
public class Monitor extends JPanel { public class Monitor extends JPanel {
private JTable _table = new JTable(); private JTable _table;
private JToolBar _tbar; private JToolBar _tbar;
public Monitor() { public Monitor() {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
_table = new JTable(new MonitorModel(DDMI.getDefault()));
JScrollPane sp = new JScrollPane(_table); JScrollPane sp = new JScrollPane(_table);
_tbar = new JToolBar("Monitor"); _tbar = new JToolBar("Monitor");
add(_tbar, BorderLayout.NORTH); add(_tbar, BorderLayout.NORTH);
add(sp, BorderLayout.CENTER); add(sp, BorderLayout.CENTER);
} }
......
package nl.nikhef.safaripark.monitor; package nl.nikhef.safaripark.monitor;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import nl.nikhef.sfp.SFPDevice;
import nl.nikhef.sfp.SFPDeviceListener;
import nl.nikhef.sfp.SFPManager;
import nl.nikhef.sfp.SFPProvider;
import nl.nikhef.sfp.SFPProviderListener;
import nl.nikhef.sfp.ddmi.DDMI; import nl.nikhef.sfp.ddmi.DDMI;
import nl.nikhef.sfp.ddmi.DDMIFilter; import nl.nikhef.sfp.ddmi.DDMIFilter;
import nl.nikhef.sfp.ddmi.DDMIValue; import nl.nikhef.sfp.ddmi.DDMIValue;
public class MonitorModel extends AbstractTableModel { public class MonitorModel extends AbstractTableModel implements SFPDeviceListener, SFPProviderListener {
private final DDMI _ddmi; private final DDMI _ddmi;
private List<DDMIValue> _columns;
private SortedSet<SFPDevice> _devices = new TreeSet<SFPDevice>();
private List<DevAndBay> _rows = new ArrayList<DevAndBay>();
private class DevAndBay
{
final SFPDevice dev;
final int bay;
public DevAndBay(SFPDevice dev, int bay) {
this.dev = dev;
this.bay = bay;
}
}
public MonitorModel(DDMI ddmi) { public MonitorModel(DDMI ddmi) {
SFPManager.get().addSFPProviderListener(this);
_ddmi = ddmi; _ddmi = ddmi;
_ddmi.findElements(new DDMIFilter<DDMIValue>() { _columns = _ddmi.findElements(new DDMIFilter<DDMIValue>() {
@Override @Override
public boolean matches(DDMIValue element) { public boolean matches(DDMIValue element) {
...@@ -25,25 +54,82 @@ public class MonitorModel extends AbstractTableModel { ...@@ -25,25 +54,82 @@ public class MonitorModel extends AbstractTableModel {
} }
}); });
} }
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return 0; return _columns.size() + 1;
}
@Override
public String getColumnName(int column) {
if (column == 0) return "Module";
return _columns.get(column - 1).getLabel();
} }
@Override @Override
public int getRowCount() { public int getRowCount() {
return 0; return _rows.size();
} }
@Override @Override
public Object getValueAt(int row, int col) { public Object getValueAt(int row, int col) {
return null; return null;
} }
@Override
public void sfpModuleStateChanged(SFPDevice dev, int bay)
{
if (!_devices.contains(dev)) {
_devices.add(dev);
}
if (updateRowCount()) {
fireTableDataChanged();
}
}
private boolean updateRowCount() {
int rc = 0;
List<DevAndBay> dAb = new ArrayList<DevAndBay>();
for (SFPDevice dev : _devices)
{
for (int i = 0; i < dev.getBayCount(); ++i)
{
if (dev.isModulePresent(i)) {
rc++;
dAb.add(new DevAndBay(dev, i));
}
}
}
_rows = dAb;
return true;
}
@Override
public void sfpDeviceAdded(SFPProvider provider, SFPDevice dev) {
_devices.add(dev);
}
@Override
public void sfpDeviceRemoved(SFPProvider provider, SFPDevice dev) {
_devices.remove(dev);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment