|
XulManager |
|
/* ** Luxor - XML User Interface Language (XUL) Toolkit ** Copyright (c) 2001, 2002 by Gerald Bauer ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ package luxor; import java.awt.Color; import java.awt.Component; import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; import org.jdom.*; import org.jdom.input.*; import luxor.core.*; import luxor.core.data.*; import luxor.core.input.*; import luxor.core.loader.*; import luxor.core.menu.*; import luxor.core.misc.*; import luxor.core.portal.*; import luxor.core.toolbar.*; import luxor.spi.*; import luxor.status.*; import luxor.template.*; import luxor.util.*; public class XulManager { public static NullJComponentResolver NULL_JCOMPONENT_RESOLVER = new NullJComponentResolver(); static Logger T = Logger.getLogger( XulManager.class ); XulResourceLoader _loader; private static XulManager _manager; /** * holds luxor.XulAction */ private HashMap _action = new HashMap( 81 ); /** * holds luxor.AnimDef */ private HashMap _anim = new HashMap( 3 ); private HashMap _box = new HashMap( 81 ); /** * holds luxor.spi.BrowserService */ private HashMap _browser = new HashMap( 13 ); /** * holds luxor.CommandDef */ private HashMap _command = new HashMap( 81 ); private ArrayList _historyResolver = new ArrayList(); /** * holds luxor.IconDef */ private HashMap _icon = new HashMap( 81 ); /** * holds luxor.KeyDef */ private HashMap _key = new HashMap( 81 ); private HashMap _list = new HashMap( 13 ); private HashMap _map = new HashMap( 13 ); /** * holds javax.swing.JMenu */ private HashMap _menu = new HashMap( 13 ); /** * holds luxor.MenuBarDef */ private HashMap _menubar = new HashMap( 13 ); private HashMap _popup = new HashMap( 13 ); /** * holds luxor.PortalDef */ private HashMap _portal = new HashMap( 13 ); /** * holds luxor.XulPortlet */ private HashMap _portlet = new HashMap( 81 ); /** * holds luxor.PreDef */ private HashMap _pre = new HashMap( 13 ); /** * holds luxor.XulServlet */ private HashMap _servlet = new HashMap( 81 ); /** * holds luxor.ToolBarDef */ private HashMap _toolbar = new HashMap( 13 ); private XulManager() { } public XulResourceLoader setResourceLoader( XulResourceLoader newLoader ) { XulResourceLoader oldLoader = _loader; _loader = newLoader; return oldLoader; } public static XulManager getXulManager() { if( _manager == null ) _manager = new XulManager(); return _manager; } public Map getActions() { return _action; } public Map getAnims() { return _anim; } public Map getBoxes() { return _box; } public Map getCommands() { return _command; } /** * convenience method; adds html directory to path */ public String getHTML( Map data, String name ) { // todo: rename to getHtml?? return getTemplate( data, "html/" + name ); } /** * convenience method */ public String getHTML( String name ) { return getHTML( Collections.EMPTY_MAP, name ); } public Map getIcons() { return _icon; } public int getInt( String key, int defaultValue ) { Integer value = ( Integer ) _loader.getConfigData( key ); if( value == null ) return defaultValue; return value.intValue(); } public Map getKeys() { return _key; } public Map getLists() { return _list; } public Map getMaps() { return _map; } public Map getMenuBars() { return _menubar; } public Map getMenus() { return _menu; } public Map getPopups() { return _popup; } /** * convienience method; doesn't require a Map */ public String getPortal( String id ) { return getPortal( Collections.EMPTY_MAP, id ); } public String getPortal( Map data, String id ) { PortalDef portal = ( PortalDef ) _portal.get( id ); if( portal == null ) { Xul.error( "portal definition '" + id + "' not found" ); return "<h1>portal definition " + id + " not found </h1>"; } return portal.getContent( data ); } public Map getPortals() { return _portal; } public Map getPortlets() { return _portlet; } public String getPre( String key ) { PreDef def = ( PreDef ) _pre.get( key ); if( def == null ) { Xul.error( "pre definition '" + key + "' not found" ); return ""; } return def.getPreFormattedText(); } public Map getPres() { return _pre; } public ImageIcon getResourceAsImageIcon( String name ) { URL url = _loader.getResourceAsUrl( name ); if( url == null ) { Xul.error( "icon resource '" + name + "' not found" ); return null; } return new ImageIcon( url ); } public Properties getResourceAsProperties( String name ) throws IOException { InputStream in = _loader.getResourceAsStream( name ); if( in == null ) { String msg = "resource '" + name + "' not found"; Xul.error( msg ); throw new XulResourceNotFoundException( msg ); // todo: should i return null instead of throwing an exception? } Properties props = new Properties(); props.load( in ); return props; } public InputStream getResourceAsStream( String name ) { InputStream in = _loader.getResourceAsStream( name ); if( in == null ) Xul.error( "resource '" + name + "' not found" ); return in; } public String getResourceAsString( String name ) throws IOException { InputStream in = _loader.getResourceAsStream( name ); if( in == null ) { String msg = "resource '" + name + "' not found"; Xul.error( msg ); throw new XulResourceNotFoundException( msg ); // todo: should i return null instead of throwing an exception? } String text = FileUtils.getInputStreamAsString( in ); return text; } public URL getResourceAsUrl( String name ) { URL url = _loader.getResourceAsUrl( name ); if( url == null ) { Xul.error( "resource '" + name + "' not found" ); return null; } return url; } public Document getResourceAsXmlDocument( String name ) throws JDOMException { InputStream in = _loader.getResourceAsStream( name ); if( in == null ) { // todo: should i throw a XulResourceNotFound Exception? Xul.error( "resource '" + name + "' not found" ); return null; } SAXBuilder builder = new SAXBuilder(); Document doc = builder.build( in ); return doc; } public Map getServlets() { return _servlet; } public String getString( String key ) { // todo: should i issue a warning if key doesn't exist? return ( String ) _loader.getConfigData( key ); } public String getString( String key, String defaultValue ) { String value = getString( key ); if( value == null ) value = defaultValue; return value; } public String[] getStringArray( String key ) { // todo: should i rename getStringTable? getStrings? // todo: should i issue a waring if key doesn't exist? return ( String[] ) _loader.getConfigData( key ); } public String getTemplate( Map data, String name ) { return TemplateManager.getTemplateManager().getTemplate( data, name ); } /** * convenience method; doesn't require a map */ public String getTemplate( String name ) { return getTemplate( Collections.EMPTY_MAP, name ); } public Map getToolBars() { return _toolbar; } public void addAction( String key, XulAction value ) { _action.put( key, value ); } public void addAnimDef( AnimDef def ) { _anim.put( def.getId(), def ); } public void addBoxDef( XulBox def ) { _box.put( def.getId(), def ); } public void addBrowser( String key, BrowserService browser ) { _browser.put( key, browser ); } public void addCommandDef( CommandDef def ) { _command.put( def.getId(), def ); } public void addHistoryResolver( HistoryResolver resolver ) { _historyResolver.add( resolver ); } public void addIconDef( IconDef idef ) { _icon.put( idef.getId(), idef ); } public void addKey( KeyDef def ) { _key.put( def.getId(), def ); } public void addListDef( ListDef def ) { _list.put( def.getId(), def ); } public void addMapDef( MapDef def ) { _map.put( def.getId(), def ); } public void addMenu( String key, JMenu menu ) { _menu.put( key, menu ); } public void addMenuBarDef( MenuBarDef mdef ) { _menubar.put( mdef.getId(), mdef ); } public void addPopupDef( PopupDef def ) { _popup.put( def.getId(), def ); } public void addPortalDef( PortalDef def ) { _portal.put( def.getId(), def ); } public void addPortlet( String id, XulPortlet portlet ) { _portlet.put( id, portlet ); } public void addPreDef( PreDef def ) { _pre.put( def.getId(), def ); } public void addServlet( String key, XulServlet value ) { _servlet.put( key, value ); } public void addToolBarDef( ToolBarDef tdef ) { _toolbar.put( tdef.getId(), tdef ); } public JComponent createJComponentFromBox( String key ) { // fix: use XulManager as JComponentResolver // todo: should createBox return a JPanel? XulBox def = ( XulBox ) _box.get( key ); if( def == null ) { Xul.error( "box definition '" + key + "' not found" ); // fix: return special error panel // (e.g background is red, etc. to make it stand out) JPanel panel = new JPanel(); panel.setBackground( Color.red ); return panel; } return def.createNComponent( NULL_JCOMPONENT_RESOLVER ).getJComponent(); } public String[] createList( String key ) { ListDef def = ( ListDef ) _list.get( key ); if( def == null ) { Xul.error( "list definition '" + key + "' not found" ); return null; } return def.createStringArray(); } public XulMap createMap( String key ) { MapDef def = ( MapDef ) _map.get( key ); if( def == null ) { Xul.error( "map definition '" + key + "' not found" ); return null; } return def.createMap(); } public JMenuBar createMenuBar( String key ) { MenuBarDef def = ( MenuBarDef ) _menubar.get( key ); if( def == null ) { Xul.error( "menu bar definition '" + key + "' not found" ); return null; } return def.createMenuBar(); } public NContainer createNContainerFromBox( String key, JComponentResolver resolver ) { XulBox def = ( XulBox ) _box.get( key ); if( def == null ) { Xul.error( "box definition '" + key + "' not found" ); // fix: return special error panel // (e.g background is red, etc. to make it stand out) return null; } return def.createNContainer( resolver ); } public JToolBar createToolBar( String key ) { ToolBarDef def = ( ToolBarDef ) _toolbar.get( key ); if( def == null ) { Xul.error( "toolbar definition '" + key + "' not found" ); return null; } return def.createToolBar(); } public void load() { XulLoader xulLoader = new XulLoader( this ); Iterator it = _loader.getBootstrapEntries().iterator(); while( it.hasNext() ) { String name = ( String ) it.next(); xulLoader.load( name ); } } public XulAction lookupAction( String key ) { return ( XulAction ) _action.get( key ); } public ImageIcon[] lookupAnim( String key ) { AnimDef def = ( AnimDef ) _anim.get( key ); if( def == null ) { Xul.error( "anim definition '" + key + "' not found" ); return null; } return def.create(); } public BrowserService lookupBrowser( String key ) { return ( BrowserService ) _browser.get( key ); } public HistoryModel lookupHistory( String key ) { Iterator it = _historyResolver.iterator(); while( it.hasNext() ) { HistoryResolver resolver = ( HistoryResolver ) it.next(); HistoryModel model = resolver.lookupHistory( key ); if( model != null ) return model; } return null; } public ImageIcon lookupIcon( String key ) { IconDef def = ( IconDef ) _icon.get( key ); if( def == null ) { Xul.error( "icon definition '" + key + "' not found" ); return null; } return def.createIcon(); } public String lookupKey( String id ) { KeyDef def = ( KeyDef ) _key.get( id ); if( def == null ) { Xul.error( "accelerator key definition '" + id + "' not found" ); return null; } return def.getJavaString(); } public JMenu lookupMenu( String key ) { return ( JMenu ) _menu.get( key ); } public JPopupMenu lookupPopup( String key ) { PopupDef def = ( PopupDef ) _popup.get( key ); if( def == null ) { Xul.error( "popup definition '" + key + "' not found" ); return null; } return def.createPopupMenu(); } public XulPortlet lookupPortlet( String id ) { XulPortlet portlet = ( XulPortlet ) _portlet.get( id ); if( portlet == null ) { portlet = new PortletNotFoundPortlet(); Xul.error( "portlet '" + id + "' not found" ); } return portlet; } public XulServlet lookupServlet( String key ) { return ( XulServlet ) _servlet.get( key ); } public static class NullJComponentResolver implements JComponentResolver { public JComponent lookupJComponent( String key ) { return null; } } }
|
XulManager |
|