Mercurial > hg > blitz_stable
diff src/org/dancres/blitz/serviceui/DashboardUI.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/dancres/blitz/serviceui/DashboardUI.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,151 @@ +package org.dancres.blitz.serviceui; + +import net.jini.lookup.entry.UIDescriptor; +import net.jini.lookup.entry.Name; + +import net.jini.lookup.ui.MainUI; +import net.jini.lookup.ui.factory.JFrameFactory; +import net.jini.lookup.ui.factory.JComponentFactory; +import net.jini.lookup.ui.attribute.UIFactoryTypes; + +import net.jini.core.lookup.ServiceItem; + +import net.jini.core.entry.Entry; + +import net.jini.admin.JoinAdmin; +import net.jini.admin.Administrable; + +import org.dancres.blitz.remote.StatsAdmin; +import org.dancres.blitz.tools.dash.DashBoardFrame; +import org.dancres.blitz.tools.dash.StartDashBoard; + +import javax.swing.JFrame; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JEditorPane; +import javax.swing.JScrollPane; + +import java.awt.event.WindowListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowAdapter; + +import java.util.HashSet; +import java.util.Set; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import java.rmi.MarshalledObject; +import java.rmi.RemoteException; +import java.io.IOException; +import java.net.URL; + +public class DashboardUI{ + static Logger theLogger = + Logger.getLogger("org.dancres.blitz.serviceui.DashboardUI"); + + public static UIDescriptor getUIDescriptor() + throws IOException { + + UIDescriptor desc = new UIDescriptor(); + desc.role = MainUI.ROLE; + desc.toolkit = JFrameFactory.TOOLKIT; + desc.attributes=new HashSet(); + + Set types = new HashSet(); + types.add(JFrameFactory.TYPE_NAME); + types.add(JComponentFactory.TYPE_NAME); + UIFactoryTypes factoryTypes=new UIFactoryTypes( types ); + + desc.attributes.add(factoryTypes); + + desc.factory = new MarshalledObject(new Factory()); + return desc; + } + private static class Factory + implements JFrameFactory, JComponentFactory{ + + static final long serialVersionUID = -1750620586876278578L; + + //cache the current instance as it doesn't make any sense + //have multiple dashboards connected to the same space + private static DashBoardFrame _frame; + + public JFrame getJFrame(Object roleObject){ + //if we are already running then return the + //cached JFrame and bring it to the front + if(_frame!=null){ + //TO DO: + //Add a method to the Dashboard to bring all its child + //frames to the front, by invoking toFront() on each child + //e.g _frame.showWindows(); + + _frame.toFront(); + return _frame; + } + try{ + ServiceItem si=(ServiceItem)roleObject; + + Administrable admin=(Administrable)si.service; + StatsAdmin sa=(StatsAdmin)admin.getAdmin(); + JoinAdmin ja=(JoinAdmin)admin.getAdmin(); + + String title=StartDashBoard.VER+" ["+getSpaceName(ja)+"]"; + boolean closeOnExit=false; //don't call System.exit() + _frame = new DashBoardFrame(title,sa,closeOnExit); + + _frame.addWindowListener(new WindowAdapter(){ + public void windowClosing(WindowEvent evt){ + //set _frame to null so next time + //we create a new window + _frame=null; + } + }); + return _frame; + }catch(RemoteException ex){ + ex.printStackTrace(); + JFrame f= new JFrame("Blitz Dashboard Exception"); + + f.getContentPane().add( new JLabel(""+ex)); + f.setSize(200,200); + f.setVisible(true); + return f; + } + } + //JComponentFactory + //return an html view + public JComponent getJComponent(Object roleObject){ + try{ + + URL url=Factory.class.getResource("blitz.htm"); + JEditorPane htmlView=new JEditorPane(url); + htmlView.setEditable(false); + //set the AccessibleContext Name for this view + //so the Inca X browser will display it + JScrollPane sp=new JScrollPane(htmlView); + sp.getAccessibleContext().setAccessibleName("Blitz dashboard"); + return sp; + }catch(Exception ex){ + theLogger.log(Level.SEVERE, "Got exception", ex); + return new JLabel(ex.toString()); + } + } + //get the space name from lookup attributes + private String getSpaceName(JoinAdmin ja){ + try{ + + Entry [] atts=ja.getLookupAttributes(); + for(int i=0;i<atts.length;i++){ + if(atts[i] instanceof Name){ + return ((Name)atts[i]).name; + } + } + }catch(Exception ex){ + theLogger.log(Level.SEVERE, "Dashboard failed to get spacename", + ex); + } + return ""; + } + } +}