All Downloads are FREE. Search and download functionalities are using the official Maven repository.

examples.explorer.Swixml2Explorer Maven / Gradle / Ivy

The newest version!
package examples.explorer;

import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.MutableTreeNode;

import org.jdesktop.application.Action;
import org.swixml.SwingTagLibrary;
import org.swixml.XFrame;
import org.swixml.examples.wizard.DDLWizardApplication;
import org.swixml.jsr296.SwingApplication;

import examples.border.BorderExample;
import examples.combo.ComboExample;
import examples.dialog.LoginExample;
import examples.layout.LayoutExample;
import examples.legacy.Accelerator;
import examples.legacy.Actions;
import examples.legacy.Cards;
import examples.legacy.CustomTags;
import examples.legacy.Form;
import examples.legacy.FormLayout;
import examples.legacy.GridBag;
import examples.legacy.Layout;
import examples.legacy.XInclude;
import examples.script.ScriptExample;
import examples.spinner.SpinnerExample;
import examples.table.TableExample;
import examples.task.BackgroundTaskExample;
import examples.text.TextExample;
import examples.tree.TreeExample;
import examples.util.GenericTreeModel;


public class Swixml2Explorer extends SwingApplication  {

	static final Logger logger = Logger.getAnonymousLogger();
	
	public static class PanelInfo {
	
		public final Class panelClass;
		public final String swixmlUri;
		public final String name;
		public final String sourceCodeUri; 
		private String xmlPanel = "examples/explorer/Content.xml";
		
		public PanelInfo( String name, Class panelClass ) {
			super();
			this.name = name;
			this.panelClass = panelClass;
			this.swixmlUri = null;
			this.sourceCodeUri = null;
		}
		public PanelInfo( String name, Class panelClass, String swixmlUri, String sourceCodeUri ) {
			super();
			this.name = name;
			this.panelClass = panelClass;
			this.swixmlUri = swixmlUri;
			this.sourceCodeUri = sourceCodeUri;
		}

		public final String getXmlPanel() {
			return xmlPanel;
		}

		public final void setXmlPanel(String xmlPanel) {
			if( null==xmlPanel ) throw new IllegalArgumentException("xmlPanels null!");
			this.xmlPanel = xmlPanel;
		}

		@Override
		public String toString() {
			return name;
		}
		
		
		
	}
	
	@SuppressWarnings("serial")
	public static class ContentPanel extends JPanel {
		
		private String xmlSource;
		private String javaSource;
		
		public ContentPanel( PanelInfo info ) {

			xmlSource = loadResource(info.swixmlUri);
			javaSource = loadResource(info.sourceCodeUri);
		}
		
		public final String getXmlSource() {
			return xmlSource;
		}
		public final void setXmlSource(String xmlSource) {
			this.xmlSource = xmlSource;
		}
		public final String getJavaSource() {
			return javaSource;
		}
		public final void setJavaSource(String javaSource) {
			this.javaSource = javaSource;
		}
		
		
	}
	
	@SuppressWarnings("serial")
	public class MyFrame extends XFrame {
		
		Set panels = new HashSet(100);
		private Class selectedApplicationClass = null;
		
		private final GenericTreeModel applications;
		public JPanel contentPanel ;
		
		public MyFrame()  {

			PanelInfo root = new PanelInfo( "Applications", null );
			root.setXmlPanel("examples/explorer/Summary.xml");
			panels.add( root );

			applications = new GenericTreeModel(root);
					
			
			{
				PanelInfo pp = new PanelInfo("Legacy", null);
				pp.setXmlPanel("examples/explorer/Legacy.xml");
				
				panels.add( pp );
				
				MutableTreeNode node =  applications.addNodeToRoot( pp, true );
				
				{
					PanelInfo p = new PanelInfo("Accelerator", Accelerator.class, "xml/accelerator.xml", "examples/legacy/Accelerator.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("CustomTags", CustomTags.class, "xml/customtags.xml", "examples/legacy/CustomTags.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Actions", Actions.class, "xml/actions.xml", "examples/legacy/Actions.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Cards", Cards.class, "xml/cards.xml", "examples/legacy/Cards.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("GridBag", GridBag.class, "xml/gridbag.xml", "examples/legacy/GridBag.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Layout", Layout.class, "xml/funlayout.xml", "examples/legacy/Layout.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Form", Form.class, "xml/form.xml", "examples/legacy/Form.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("FormLayout", FormLayout.class, "xml/formlayout.xml", "examples/legacy/FormLayout.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Include", XInclude.class);
					p.setXmlPanel("xml/xincludeContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
			}
			
			{
				PanelInfo pp = new PanelInfo("New Features",null);
				pp.setXmlPanel("examples/explorer/NewFeatures.xml");
				
				panels.add( pp );
				
				MutableTreeNode node =  applications.addNodeToRoot( pp, true );
				{
					PanelInfo p = new PanelInfo("Script example", ScriptExample.class);
					p.setXmlPanel("examples/script/ScriptDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Layout example", LayoutExample.class, "examples/layout/LayoutFrame.xml", "examples/layout/LayoutExample.java");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Border Example", BorderExample.class);
					p.setXmlPanel("examples/border/BorderExampleContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Combo Example", ComboExample.class, "examples/combo/ComboDialog.xml", "examples/combo/ComboExample.java");
					panels.add( p );
					applications.addNode(node, p );
				}
			
				{
					PanelInfo p = new PanelInfo("Table Binding Example", TableExample.class);
					p.setXmlPanel("examples/table/TableDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Tree Example", TreeExample.class);
					p.setXmlPanel("examples/tree/TreeDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Dialog Example", LoginExample.class);
					p.setXmlPanel("examples/dialog/LoginDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Background task Example", BackgroundTaskExample.class);
					p.setXmlPanel("examples/task/BackgroundTaskDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Spinner Example", SpinnerExample.class);
					p.setXmlPanel("examples/spinner/SpinnerDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Text Fields Example", TextExample.class);
					p.setXmlPanel("examples/text/TextDialogContent.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
				{
					PanelInfo p = new PanelInfo("Wizard Integration Example", DDLWizardApplication.class);
					p.setXmlPanel("examples/wizard/WizardExample.xml");
					panels.add( p );
					applications.addNode(node, p );
				}
			}
			
		}

		JTree mainTree;
		
		@Override
		public void addNotify() {
			
			for( PanelInfo p : panels ) {
				
				try {
					JPanel panel = Swixml2Explorer.this.render( new ContentPanel(p), p.getXmlPanel() );
					contentPanel.add( panel, p.name );
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			
			CardLayout l = (CardLayout) contentPanel.getLayout();
			
			l.show(contentPanel, "Applications");

			for( int i=1; i<=mainTree.getRowCount(); ++i ) {
				mainTree.expandRow(i);
			}
			
			super.addNotify();
			
		}

		public final GenericTreeModel getApplications() {
			return applications;
		}

		public final Class getSelectedApplicationClass() {
			return selectedApplicationClass;
		}


		public final void setSelectedApplicationClass(Class selectedApplicationClass) {
			this.selectedApplicationClass = selectedApplicationClass;
			firePropertyChange("runnable", null, null);
		}


		@Action
		public void selectNode( ActionEvent ev ) {
		
			logger.info( String.format( "select node [%s]\n", ev ));
			
			PanelInfo info = applications.getSelectedObject( (TreeSelectionEvent) ev.getSource());

			setSelectedApplicationClass( info.panelClass );

			CardLayout l = (CardLayout) contentPanel.getLayout();
		
			l.show(contentPanel, info.name);
			

		}
		
		@Action
		public void activeNode( ActionEvent ev ) {
		
			logger.info( String.format("run application  [%s]\n", ev) );

			PanelInfo info = applications.getSelectedObject( (MouseEvent) ev.getSource());

			setSelectedApplicationClass( info.panelClass );
			
			runApplication();
			
			
		}
		
		public boolean isRunnable() {
			return selectedApplicationClass!=null;
		}
		
		@Action( enabledProperty="runnable")
		public void runApplication() {
		
			if( !isRunnable() ) return;
			logger.info( String.format("run application  [%s]\n", selectedApplicationClass) );

			try {
				Method main = getSelectedApplicationClass().getMethod("main", String[].class );
				
				Object args = new String[0];
				main.invoke(null, args);
				
			} catch (Exception e) {
				logger.log( Level.WARNING, "error on start application", e );
			}
		}
		
	}

	
	@SuppressWarnings("unchecked")
	public static   T getComponentByName( Container container, Class clazz, String name ) {
		for( Component c : container.getComponents() ) {
			//System.out.printf( "component [%s]\n", c.getName() );
			if( name.equalsIgnoreCase(c.getName()) && clazz.isAssignableFrom(c.getClass())) {
				return (T)c;
			}
			else if( c instanceof Container ) {
				Component result = getComponentByName( (Container) c, clazz, name);
				if( null!=result ) {
					return (T)result;
				}
			}
		}
		return null;
	}

	public static String loadResource( String res ) {
		return FileTextArea.loadResource(res);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
            
                String[] ff = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
                
                for( String f : ff ) {
                    System.out.printf( "font-family [%s]\n", f );
                }
		SwingApplication.launch(Swixml2Explorer.class, args);

	}

	@Override
	protected void startup() {
		try {
			
			SwingTagLibrary.getInstance().registerTag("FileTextArea", FileTextArea.class);
			
			MyFrame frame = render( new MyFrame(), "examples/explorer/Explorer.xml" );

			show( frame );
			
		} catch (Exception e) {

			e.printStackTrace();
			exit();
		}
		
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy