package placeholder.ui.panel;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import placeholder.Crawler;
import placeholder.website.queue.WebsiteQueue;
import placeholder.website.queue.WebsiteResultQueue;
/**
* @author Heiko Bornholdt
*/
public class SimplePanel extends JPanel {
private static final long serialVersionUID = 1L;
protected JTextArea textArea;
protected JLabel websiteQueue;
protected JLabel websiteResultQueue;
public SimplePanel(final WebsiteQueue queue, final WebsiteResultQueue resultQueue) {
this.setLayout(new BorderLayout());
// create panels
this.createLogPanel();
this.createStatusPanel();
// update status every second
new Timer().schedule(new TimerTask() {
public void run() {
websiteQueue.setText(new Integer(queue.getSize()).toString());
websiteResultQueue.setText(new Integer(resultQueue.getSize()).toString());
}
}, 0, 100);
// start crawler
PrintStream out = new PrintStream(new TextAreaOutputStream(this.textArea));
new Crawler(out, queue, resultQueue).start();
}
/**
* Creates the log panel.
*/
protected void createLogPanel() {
// init panel
JPanel panel = new JPanel();
panel.setBorder(new EmptyBorder(3, 3, 3, 3));
panel.setLayout(new BorderLayout());
this.textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(this.textArea);
panel.add(scrollPane);
this.add(BorderLayout.CENTER, panel);
}
/**
* Creates the status panel.
*/
protected void createStatusPanel() {
// init panel
JPanel panel = new JPanel();
panel.setBorder(new EmptyBorder(0, 3, 3, 3));
panel.setLayout(new GridLayout(1, 4));
// WebsiteQueue
panel.add(new JLabel("WebsiteQueue"));
this.websiteQueue = new JLabel("0");
panel.add(this.websiteQueue);
// WebsiteResultQueue
panel.add(new JLabel("WebsiteResultQueue"));
this.websiteResultQueue = new JLabel("0");
panel.add(this.websiteResultQueue);
this.add(BorderLayout.SOUTH, panel);
}
/**
* Prints output to log textArea.
*/
protected class TextAreaOutputStream extends OutputStream {
protected final JTextArea textArea;
public TextAreaOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
public void write(int b) throws IOException {
this.textArea.append(String.valueOf((char)b));
this.textArea.setCaretPosition(this.textArea.getDocument().getLength());
}
}
}