|
AppFrame |
|
/*
** Rachel - Resource Loading Toolkit for Web Start/JNLP
** 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 demo.resman;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.transform.*;
import apollo.*;
import demo.common.html.*;
import demo.common.image.*;
import demo.common.tree.*;
import houston.*;
import rachel.*;
import rachel.loader.*;
public class AppFrame extends JFrame
{
public AppFrame()
{
super( "ResMan - Rachel Resource Manager Example App" );
addWindowListener(
new WindowAdapter()
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
} );
ResMan.setResourceLoader( new ClassResourceLoader( Tool.class ) );
ImageIcon appIcon = ResMan.getIcon( "images/inform.gif" );
setIconImage( appIcon.getImage() );
Properties props = null;
try
{
props = ResMan.getProperties( "menu.properties" );
}
catch( IOException ioex )
{
Status.error( "*** failed to load properties: " + ioex.toString() );
}
WebBrowser browserProps = new WebBrowser();
browserProps.showHtmlText( propsToHtml( props ) );
BufferedImage vanessaImg = null;
try
{
vanessaImg = ResMan.getImage( "images/vanessa.jpg" );
}
catch( IOException ioex )
{
Status.error( "*** failed to load image: " + ioex.toString() );
}
ImagePanel imagePanel = new ImagePanel( vanessaImg );
WebBrowser browserText = new WebBrowser();
String strunkHtmlSnippet = "";
try
{
strunkHtmlSnippet = ResMan.getText( "strunk.html" );
}
catch( IOException ioex )
{
Status.error( "*** failed to load text: " + ioex.toString() );
}
browserText.showHtmlText( strunkHtmlSnippet );
WebBrowser browserStream = new WebBrowser();
InputStream inStream = ResMan.getInputStream( "overview.xml" );
InputStream xslStream = ResMan.getInputStream( "doc2html.xsl" );
// setup jaxp transformer (aka xsl/t engine)
StreamSource inSource = new StreamSource( inStream, "overview.xml" );
StreamSource xsltSource = new StreamSource( xslStream, "doc2html.xsl" );
JDOMResult outResult = new JDOMResult();
try
{
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer( xsltSource );
trans.transform( inSource, outResult );
// get result as a string
StringWriter outBuffer = new StringWriter();
XMLOutputter outputter = new XMLOutputter( "", false );
outputter.output( outResult.getDocument().getRootElement(), outBuffer );
browserStream.showHtmlText( outBuffer.toString() );
}
catch( TransformerConfigurationException tcex )
{
Status.error( "*** failed to setup xsl/t processor: " + tcex.toString() );
}
catch( TransformerException tex )
{
Status.error( "*** failed to process xsl/t stylesheet: " + tex.toString() );
}
catch( IOException ioex )
{
Status.error( "*** failed to create html document from xml data: " + ioex.toString() );
}
Document doc = null;
try
{
doc = ResMan.getXmlDocument( "overview.xml" );
}
catch( JDOMException jex )
{
Status.error( "*** failed to retrieve xml document: " + jex.toString() );
}
JTree tree = new JTree( new XmlTreeModel( doc ) );
tree.setCellRenderer( new XmlTreeNodeRenderer() );
tree.setEditable( false );
tree.putClientProperty( "JTree.lineStyle", "Angled" );
tree.setRootVisible( true );
tree.setShowsRootHandles( true );
JTabbedPane tab = new JTabbedPane();
tab.addTab( "ResMan.getProperties()", new JScrollPane( browserProps.getComponent() ) );
tab.addTab( "ResMan.getImage()", imagePanel );
tab.addTab( "ResMan.getText()", new JScrollPane( browserText.getComponent() ) );
tab.addTab( "ResMan.getXmlDocument()", new JScrollPane( tree ) );
tab.addTab( "ResMan.getInputStream()", new JScrollPane( browserStream.getComponent() ) );
getContentPane().setLayout( new BorderLayout() );
getContentPane().add( tab, BorderLayout.CENTER );
BasicService basic = ServiceManager.lookupBasicService();
JMenuBar menuBar = new JMenuBar();
JMenu helpMenu = new JMenu( "Help" );
ImageIcon worldIcon = ResMan.getIcon( "images/world2.gif" );
String items = props.getProperty( "help.menu", "" );
StringTokenizer t = new StringTokenizer( items, " " );
while( t.hasMoreTokens() )
{
String itemKey = t.nextToken();
String itemText = props.getProperty( itemKey + ".text" );
String itemUrl = props.getProperty( itemKey + ".url" );
try
{
Action action = new CmdShowDocumentHousehold( itemText, worldIcon, basic, new URL( itemUrl ) );
JMenuItem mi = helpMenu.add( action );
mi.setToolTipText( itemUrl );
}
catch( MalformedURLException mex )
{
Status.error( "*** invalid URL " + itemUrl + ": " + mex.toString() );
}
}
menuBar.add( helpMenu );
setJMenuBar( menuBar );
setSize( 600, 400 );
setVisible( true );
}
private String propsToHtml( Properties props )
{
StringBuffer buf = new StringBuffer();
buf.append( "<html>" );
// add properties to page
buf.append( "<h2>menu.properties</h2>" );
buf.append( "<table border='1'>" );
buf.append( "<tr><th>Name<th>Value" );
// sort properties by putting them into a tree map
TreeMap propsSorted = new TreeMap( props );
Iterator it = propsSorted.entrySet().iterator();
while( it.hasNext() )
{
Map.Entry entry = ( Map.Entry ) it.next();
String key = ( String ) entry.getKey();
String value = ( String ) entry.getValue();
buf.append( "<tr><td>" + key + "<td>" + value );
}
buf.append( "</table>" );
buf.append( "</html>" );
return buf.toString();
}
}
|
AppFrame |
|