package nl.tudelft.bw4t.client.environment;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import eis.iilang.Percept;
import nl.tudelft.bw4t.client.gui.menu.ComboEntityModel;
import nl.tudelft.bw4t.client.gui.menu.EntityComboModelProvider;
public class PerceptDebugScreen extends JFrame implements Runnable, ActionListener, EntityComboModelProvider {
private static final long serialVersionUID = -7329333876656307218L;
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private RemoteEnvironment env;
private DefaultListModel<String> perceptModel = new DefaultListModel<>();
private JList<String> perceptList = new JList<>(perceptModel);
private JComboBox<String> entityCombo;
private PerceptDebugScreen that = this;
public PerceptDebugScreen(RemoteEnvironment env) {
this.env = env;
init();
}
private void init() {
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
entityCombo = new JComboBox<String>(new ComboEntityModel(this));
add(entityCombo, BorderLayout.NORTH);
add(new JScrollPane(perceptList), BorderLayout.CENTER);
entityCombo.addActionListener(this);
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
SwingUtilities.invokeAndWait(that);
} catch (InvocationTargetException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 0, 200, TimeUnit.MILLISECONDS);
setLocationRelativeTo(null);
setPreferredSize(new Dimension(150, 300));
setSize(getPreferredSize());
setVisible(true);
}
public void run() {
String selectedEntity = (String) entityCombo.getSelectedItem();
perceptModel.clear();
final List<Percept> storedPercepts = env.getStoredPercepts(selectedEntity);
if (storedPercepts != null) {
for (Percept p : storedPercepts) {
perceptModel.addElement(p.toProlog());
}
}
revalidate();
repaint();
}
@Override
public void dispose() {
scheduler.shutdown();
super.dispose();
}
@Override
public void actionPerformed(ActionEvent arg0) {
this.run();
}
@Override
public Collection<String> getEntities() {
try {
return env.getEntities();
} catch (NullPointerException e) {
return null;
}
}
}