package com.github.signed.integration.camel.gui.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import com.github.signed.integration.camel.gui.StartStop;
import com.github.signed.integration.camel.gui.UserCommand;
public class StartStopSwing implements StartStop {
private final JPanel panel = new JPanel();
private final JButton start = new JButton("start");
private final JButton stop = new JButton("stop");
public StartStopSwing() {
panel.add(start);
panel.add(stop);
hideStop();
}
@Override
public void displayStart() {
if (!SwingUtilities.isEventDispatchThread()) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
displayStart();
}
});
return;
}
hideStop();
start.setVisible(true);
}
@Override
public void displayStop() {
if (!SwingUtilities.isEventDispatchThread()) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
displayStop();
}
});
return;
}
hideStart();
stop.setVisible(true);
}
@Override
public void onStart(final UserCommand command) {
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingWorker<Void, Void> swingWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
command.given();
return null;
}
};
swingWorker.execute();
}
});
}
@Override
public void onStop(final UserCommand command) {
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingWorker<Void, Void> swingWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
command.given();
return null;
}
};
swingWorker.execute();
}
});
}
public void addTo(JPanel parent) {
parent.add(this.panel);
}
private void hideStart() {
start.setVisible(false);
}
private void hideStop() {
stop.setVisible(false);
}
}