package ch.rakudave.jnetmap;
import java.util.LinkedList;
import ch.rakudave.jnetmap.device.Host;
import ch.rakudave.jnetmap.device.DeviceEvent;
import ch.rakudave.jnetmap.device.DeviceListener;
import ch.rakudave.jnetmap.device.Device;
public class MapModel implements Model, DeviceListener {
private LinkedList<ModelListener> listeners;
private LinkedList<Host> devices;
public MapModel() {
devices = new LinkedList<Host>();
listeners = new LinkedList<ModelListener>();
}
@Override
public void addDevice(Host item) {
if (item != null && devices.add(item)) {
notifyListeners(new ModelEvent(this, new DeviceEvent(item, DeviceEvent.Type.DEVICE_ADDED)));
}
}
@Override
public void addModelListener(ModelListener listener) {
if (listener != null && !listeners.contains(listener)) listeners.add(listener);
}
@Override
@SuppressWarnings("unchecked")
public Iterable<Host> getDevices() {
return (Iterable<Host>) devices.clone();
}
@Override
public void itemChanged(DeviceEvent event) {
notifyListeners(new ModelEvent(this, event));
}
public void notifyListeners(ModelEvent e) {
for (ModelListener l : listeners) l.modelChanged(e);
}
@Override
public void removeAllItems() {
//TODO
}
@Override
public void removeDevice(Device item) {
if (devices.remove(item)) {
notifyListeners(new ModelEvent(this, new DeviceEvent(item, DeviceEvent.Type.DEVICE_REMOVED)));
}
}
@Override
public void removeModelListener(ModelListener listener) {
listeners.remove(listener);
}
}