package eu.hgross.blaubot.ui;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import eu.hgross.blaubot.core.BlaubotKingdom;
/**
* The view for a BlaubotKingdom.
*/
public class BlaubotKingdomView extends JPanel implements IBlaubotKingdomDebugView {
private final KingdomCensusPanel mKingdomCensusPanel;
private final List<IBlaubotKingdomDebugView> allViews;
private final LifeCycleViewPanel mLifecycleViewPanel;
private final ChannelPanel mChannelPanel;
private final JLabel mHeadlineLabel;
private final JButton mDisconnectButton;
private final PingPanel mPingPanel;
private BlaubotKingdom blaubotKingdom;
public BlaubotKingdomView() {
super();
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1;
this.mKingdomCensusPanel = new KingdomCensusPanel();
this.mLifecycleViewPanel = new LifeCycleViewPanel();
this.mChannelPanel = new ChannelPanel();
this.mPingPanel = new PingPanel();
this.allViews = Arrays.asList(new IBlaubotKingdomDebugView[]{mPingPanel, mKingdomCensusPanel, mChannelPanel, mLifecycleViewPanel});
this.mHeadlineLabel = new JLabel("Kingdom of ...");
this.mDisconnectButton = new JButton("Disconnect kingdom");
add(mHeadlineLabel, c);
add(mDisconnectButton, c);
for(IBlaubotKingdomDebugView debugView : allViews) {
if(debugView instanceof Component) {
final Component spaceY = Box.createRigidArea(new Dimension(0, 7));
this.add(spaceY, c);
this.add((Component) debugView, c);
}
}
this.mDisconnectButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(blaubotKingdom != null) {
new Thread(new Runnable() {
@Override
public void run() {
blaubotKingdom.disconnectKingdom();
}
}).start();
}
}
});
}
@Override
public void registerBlaubotKingdomInstance(final BlaubotKingdom blaubotKingdom) {
if (this.blaubotKingdom != null) {
unregisterBlaubotKingdomInstance();
}
this.blaubotKingdom = blaubotKingdom;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
mHeadlineLabel.setText("<html><h3>Kingdom of " + blaubotKingdom.getKingDevice().getUniqueDeviceID()+ "</h3></html>");
}
});
for (IBlaubotKingdomDebugView v : allViews) {
v.registerBlaubotKingdomInstance(blaubotKingdom);
}
}
@Override
public void unregisterBlaubotKingdomInstance() {
if (this.blaubotKingdom != null) {
for (IBlaubotKingdomDebugView view : allViews) {
view.unregisterBlaubotKingdomInstance();
}
}
this.blaubotKingdom = null;
}
}