package rescuecore.debug;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import rescuecore.view.*;
import rescuecore.*;
public class CollectionHandler implements Handler {
private Collection current;
private Layer layer;
private CollectionView component;
public JComponent getComponent() {
if (component==null) {
component = new CollectionView();
component.setObjects(current);
}
return component;
}
public Layer getLayer() {
if (layer==null) {
layer = new Layer("Collection handler");
layer.addObjects(current);
}
return layer;
}
public boolean handle(Object o, int timeStep) {
if (o instanceof Collection) {
current = (Collection)o;
if (layer!=null) layer.setObjects(current);
if (component != null) component.setObjects(current);
return true;
}
return false;
}
public void setMemory(Memory m) {
}
private static class CollectionView extends JPanel {
private CollectionModel model;
public CollectionView() {
super(new BorderLayout());
model = new CollectionModel();
add(new JScrollPane(new JList(model)),BorderLayout.CENTER);
}
public void setObjects(Collection c) {
model.setObjects(c);
}
private static class CollectionModel extends AbstractListModel {
private String[] data;
public CollectionModel() {
data = new String[0];
}
public int getSize() {
return data.length;
}
public Object getElementAt(int index) {
return data[index];
}
public void setObjects(Collection c) {
data = new String[c.size()];
int i=0;
for (Iterator it = c.iterator();it.hasNext();++i) {
Object next = it.next();
data[i] = next==null?"null":next.toString();
}
fireContentsChanged(this,0,data.length);
}
}
}
}