package eu.hgross.blaubot.ui; import java.awt.Component; import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.util.Map; import java.util.Set; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import eu.hgross.blaubot.core.Blaubot; import eu.hgross.blaubot.core.BlaubotKingdom; import eu.hgross.blaubot.core.IBlaubotDevice; import eu.hgross.blaubot.core.ILifecycleListener; import eu.hgross.blaubot.core.State; import eu.hgross.blaubot.admin.AbstractAdminMessage; import eu.hgross.blaubot.admin.CensusMessage; import eu.hgross.blaubot.messaging.IBlaubotAdminMessageListener; /** * Shows all member of the blaubot network */ public class KingdomCensusPanel extends JPanel implements IBlaubotDebugView, IBlaubotKingdomDebugView { private Blaubot mBlaubot; private BlaubotKingdom mBlaubotKingdom; public KingdomCensusPanel() { super(); this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); } private CensusMessage mLastCensusMessage; private IBlaubotAdminMessageListener mAdminMessageListener = new IBlaubotAdminMessageListener() { @Override public void onAdminMessage(AbstractAdminMessage adminMessage) { if(adminMessage instanceof CensusMessage) { mLastCensusMessage = (CensusMessage) adminMessage; updateViews(); } } }; private ILifecycleListener mLifecycleListener = new ILifecycleListener() { @Override public void onConnected() { updateViews(); } @Override public void onDisconnected() { updateViews(); } @Override public void onDeviceJoined(IBlaubotDevice blaubotDevice) { } @Override public void onDeviceLeft(IBlaubotDevice blaubotDevice) { } @Override public void onPrinceDeviceChanged(IBlaubotDevice oldPrince, IBlaubotDevice newPrince) { } @Override public void onKingDeviceChanged(IBlaubotDevice oldKing, IBlaubotDevice newKing) { } }; private void updateViews() { if(this.mLastCensusMessage != null) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { removeAll(); final Set<Map.Entry<String, State>> entries = mLastCensusMessage.getDeviceStates().entrySet(); if (entries.isEmpty()) { add(new JLabel("No members.")); } else { add(new JLabel("Kingdom:")); add(Box.createRigidArea(new Dimension(0, 5))); } for(Map.Entry<String, State> entry : entries) { final String uniqueDeviceId = entry.getKey(); final State state = entry.getValue(); JPanel panel = Util.createIcon(state, uniqueDeviceId); add(panel); } updateUI(); } }); } } @Override public void registerBlaubotInstance(Blaubot blaubot) { if(this.mBlaubot != null) { unregisterBlaubotInstance(); } this.mBlaubot = blaubot; blaubot.getChannelManager().addAdminMessageListener(mAdminMessageListener); blaubot.addLifecycleListener(mLifecycleListener); } @Override public void unregisterBlaubotInstance() { if(this.mBlaubot != null) { this.mBlaubot.getChannelManager().removeAdminMessageListener(mAdminMessageListener); this.mBlaubot.removeLifecycleListener(mLifecycleListener); } this.mBlaubot = null; } @Override public void registerBlaubotKingdomInstance(BlaubotKingdom blaubotKingdom) { if(this.mBlaubotKingdom != null) { unregisterBlaubotKingdomInstance(); } this.mBlaubotKingdom = blaubotKingdom; blaubotKingdom.getChannelManager().addAdminMessageListener(mAdminMessageListener); blaubotKingdom.addLifecycleListener(mLifecycleListener); } @Override public void unregisterBlaubotKingdomInstance() { if (this.mBlaubotKingdom != null) { mBlaubotKingdom.getChannelManager().removeAdminMessageListener(mAdminMessageListener); mBlaubotKingdom.removeLifecycleListener(mLifecycleListener); } this.mBlaubotKingdom = null; } }