diff src/org/dancres/blitz/tools/dash/DashBoardFrame.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children 77db38eb3042
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/dancres/blitz/tools/dash/DashBoardFrame.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,151 @@
+package org.dancres.blitz.tools.dash;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+import javax.swing.SwingUtilities;
+import javax.swing.ImageIcon;
+
+import org.dancres.blitz.remote.StatsAdmin;
+import org.dancres.blitz.stats.Stat;
+
+public class DashBoardFrame extends JFrame
+    implements Runnable{
+
+    static final Logger theLogger =
+            Logger.getLogger("org.dancres.blitz.tools.dash.DashBoardFrame");
+
+    private StatsAdmin _admin; 
+    private DashBoard _dashBoard;
+    private JLabel _status;
+    private Thread _updater;
+    private boolean _exitOnClose;
+    private StatsTableModel _allStats=new StatsTableModel();
+    
+    public DashBoardFrame(String title,StatsAdmin admin,boolean exitOnClose){
+        super(title);
+        
+        // System.out.println("Blitz Dashboard: Developed in association with Inca X (www.incax.com)");
+        
+        _admin=admin;
+        _exitOnClose=exitOnClose;
+        setResizable(false);
+
+        if (exitOnClose) {
+            try{
+                String lfClassName=UIManager.getSystemLookAndFeelClassName(); 
+                String uiClass = "javax.swing.plaf.metal.MetalLookAndFeel";
+                if(uiClass.equals(lfClassName)){
+                    MetalLookAndFeel.setCurrentTheme(new BlitzTheme());
+                }
+                
+                UIManager.setLookAndFeel(lfClassName);
+                ImageIcon icon=new ImageIcon(getClass().getResource("images/blitz.gif"));
+                setIconImage(icon.getImage());
+            
+            }catch(Exception ex){
+                theLogger.log(Level.SEVERE, "Exception in close", ex);
+            }
+        }
+        
+        setSize(740,140);
+
+        //add listener to intterupt thread on close
+        addWindowListener( new WindowAdapter(){
+                public void windowClosing(WindowEvent evt){
+                    closeWin();
+                
+                }
+            
+            });
+        
+        getContentPane().add(createUI(),BorderLayout.CENTER);
+        
+        _updater=new Thread(this);
+        _updater.start();
+    }
+
+    public Dimension getPreferredSize() {
+        return new Dimension(740, 140);
+    }
+
+    private void closeWin(){
+        dispose();
+        _updater.interrupt();
+        
+        if(_exitOnClose){
+            System.exit(0);
+        }
+    }
+    //added so the ServiceUI WindowListener gets notified
+    private void postWindowClosingEvent(){
+        dispatchEvent(new WindowEvent(this,WindowEvent.WINDOW_CLOSING));
+    }
+    
+    //creates the UI for this application
+    private JComponent createUI(){
+        
+        _dashBoard=new DashBoard(this);
+        _dashBoard.init(_admin);
+        return _dashBoard; 
+    
+    }
+    private JComponent createStatusBar(){
+        _status=new JLabel();
+        JPanel p=new JPanel();
+        p.setLayout( new FlowLayout(FlowLayout.LEFT));
+        p.add(_status);
+        p.setPreferredSize(new Dimension(740, 140));
+        return p;
+    }
+    public void run(){
+        while(!_updater.isInterrupted()){
+            try{
+                //need to be configurable
+                Thread.sleep(1500);
+                Map lookup=new HashMap();
+                
+                Stat[] stats = _admin.getStats();
+                _dashBoard.update(stats);
+                //now pass on to main global view
+                
+            }catch(InterruptedException ex){
+                // System.out.println("Updater thread exiting");
+                return;
+            }catch(java.rmi.ConnectException ex){
+                JOptionPane.showMessageDialog(this,ex.getMessage());
+                postWindowClosingEvent();
+            
+            }catch(java.rmi.NoSuchObjectException ex){
+                JOptionPane.showMessageDialog(this,ex.getMessage());
+                postWindowClosingEvent();
+            
+            }catch(Exception ex){
+                int ok=JOptionPane.showConfirmDialog(this,
+                                                     ""+ex.getMessage()+"\n\nDo you want to continue monitoring stats?"
+                                                     ,"Error",
+                                                     JOptionPane.YES_NO_OPTION);
+                
+                if(ok==JOptionPane.NO_OPTION){
+                    postWindowClosingEvent();
+                }  
+                theLogger.log(Level.INFO,  "Exception in update", ex);
+            }
+        }
+    }
+}