View Javadoc
1 /* 2 * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/xml/XMLTagLibrary.java,v 1.6 2002/05/17 18:04:00 jstrachan Exp $ 3 * $Revision: 1.6 $ 4 * $Date: 2002/05/17 18:04:00 $ 5 * 6 * ==================================================================== 7 * 8 * The Apache Software License, Version 1.1 9 * 10 * Copyright (c) 1999-2002 The Apache Software Foundation. All rights 11 * reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in 22 * the documentation and/or other materials provided with the 23 * distribution. 24 * 25 * 3. The end-user documentation included with the redistribution, if 26 * any, must include the following acknowlegement: 27 * "This product includes software developed by the 28 * Apache Software Foundation (http://www.apache.org/)." 29 * Alternately, this acknowlegement may appear in the software itself, 30 * if and wherever such third-party acknowlegements normally appear. 31 * 32 * 4. The names "The Jakarta Project", "Commons", and "Apache Software 33 * Foundation" must not be used to endorse or promote products derived 34 * from this software without prior written permission. For written 35 * permission, please contact apache@apache.org. 36 * 37 * 5. Products derived from this software may not be called "Apache" 38 * nor may "Apache" appear in their names without prior written 39 * permission of the Apache Group. 40 * 41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52 * SUCH DAMAGE. 53 * ==================================================================== 54 * 55 * This software consists of voluntary contributions made by many 56 * individuals on behalf of the Apache Software Foundation. For more 57 * information on the Apache Software Foundation, please see 58 * <http://www.apache.org/>;. 59 * 60 * $Id: XMLTagLibrary.java,v 1.6 2002/05/17 18:04:00 jstrachan Exp $ 61 */ 62 package org.apache.commons.jelly.tags.swing; 63 64 import java.awt.Dimension; 65 import java.awt.Point; 66 import java.util.HashMap; 67 import java.util.Map; 68 69 import javax.swing.*; 70 71 import org.apache.commons.beanutils.ConvertUtils; 72 73 import org.apache.commons.jelly.Tag; 74 import org.apache.commons.jelly.TagLibrary; 75 import org.apache.commons.jelly.impl.TagScript; 76 import org.apache.commons.jelly.impl.DynaTagScript; 77 import org.apache.commons.jelly.impl.TagFactory; 78 import org.apache.commons.jelly.tags.swing.converters.DimensionConverter; 79 import org.apache.commons.jelly.tags.swing.converters.PointConverter; 80 81 import org.apache.commons.logging.Log; 82 import org.apache.commons.logging.LogFactory; 83 84 import org.xml.sax.Attributes; 85 86 /*** 87 * A Jelly custom tag library that allows Ant tasks to be called from inside Jelly. 88 * 89 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 90 * @author <a href="mailto:bob@eng.werken.com">bob mcwhirter</a> 91 * @version $Revision: 1.6 $ 92 */ 93 public class SwingTagLibrary extends TagLibrary { 94 95 /*** The Log to which logging calls will be made. */ 96 private static final Log log = LogFactory.getLog(SwingTagLibrary.class); 97 98 /*** A map of element name to bean class objects */ 99 private Map factoryMap; 100 101 static { 102 103 // ### we should create Converters from Strings to various Swing types such as 104 // ### Icon, KeyStroke etc. 105 ConvertUtils.register( new DimensionConverter(), Dimension.class ); 106 ConvertUtils.register( new PointConverter(), Point.class ); 107 } 108 109 public SwingTagLibrary() { 110 registerTag( "action", ActionTag.class ); 111 registerTag( "windowListener", WindowListenerTag.class ); 112 } 113 114 /*** Creates a new script to execute the given tag name and attributes */ 115 public TagScript createTagScript(String name, Attributes attributes) throws Exception { 116 TagScript answer = super.createTagScript(name, attributes); 117 if ( answer == null ) { 118 final Factory factory = getFactory( name ); 119 if ( factory != null ) { 120 return new DynaTagScript( 121 new TagFactory() { 122 public Tag createTag() throws Exception { 123 return new ComponentTag(factory); 124 } 125 } 126 ); 127 } 128 } 129 return answer; 130 } 131 132 /*** 133 * @return the Factory of the Swing component for the given element name 134 */ 135 public Factory getFactory(String elementName) { 136 return (Factory) getFactoryMap().get(elementName); 137 } 138 139 // Implementation methods 140 //------------------------------------------------------------------------- 141 142 /*** 143 * Strategy method allowing derived classes to change the registration behaviour 144 */ 145 protected void registerFactories() { 146 registerBeanFactory( "button", JButton.class ); 147 registerBeanFactory( "checkBox", JCheckBox.class ); 148 registerBeanFactory( "checkBoxMenuItem", JCheckBoxMenuItem.class ); 149 registerBeanFactory( "comboBox", JComboBox.class ); 150 registerBeanFactory( "desktopPane", JDesktopPane.class ); 151 registerBeanFactory( "dialog", JDesktopPane.class ); 152 registerBeanFactory( "frame", JFrame.class ); 153 registerBeanFactory( "internalFrame", JInternalFrame.class ); 154 registerBeanFactory( "label", JLabel.class ); 155 registerBeanFactory( "list", JList.class ); 156 registerBeanFactory( "menu", JMenu.class ); 157 registerBeanFactory( "menuBar", JMenuBar.class ); 158 registerBeanFactory( "menuItem", JMenuItem.class ); 159 registerBeanFactory( "panel", JPanel.class ); 160 registerBeanFactory( "passwordField", JPasswordField.class ); 161 registerBeanFactory( "popupMenu", JPopupMenu.class ); 162 registerBeanFactory( "radioButton", JRadioButton.class ); 163 registerBeanFactory( "radioButtonMenuItem", JRadioButtonMenuItem.class ); 164 registerBeanFactory( "optionPane", JOptionPane.class ); 165 registerBeanFactory( "scrollPane", JScrollPane.class ); 166 registerBeanFactory( "separator", JSeparator.class ); 167 168 registerFactory( 169 "splitPane", 170 new Factory() { 171 public Object newInstance() { 172 JSplitPane answer = new JSplitPane(); 173 answer.setLeftComponent(null); 174 answer.setRightComponent(null); 175 answer.setTopComponent(null); 176 answer.setBottomComponent(null); 177 return answer; 178 } 179 } 180 ); 181 registerBeanFactory( "tabbedPane", JTabbedPane.class ); 182 registerBeanFactory( "table", JTable.class ); 183 registerBeanFactory( "textArea", JTextArea.class ); 184 registerBeanFactory( "textField", JTextField.class ); 185 registerBeanFactory( "toggleButton", JToggleButton.class ); 186 registerBeanFactory( "tree", JTree.class ); 187 registerBeanFactory( "toolBar", JToolBar.class ); 188 } 189 190 /*** 191 * Register a widget factory for the given element name 192 */ 193 protected void registerFactory(String name, Factory factory) { 194 getFactoryMap().put(name, factory); 195 } 196 197 /*** 198 * Register a bean factory for the given element name and class 199 */ 200 protected void registerBeanFactory(String name, Class beanClass) { 201 registerFactory(name, new BeanFactory(beanClass)); 202 } 203 204 protected Map getFactoryMap() { 205 if ( factoryMap == null ) { 206 factoryMap = new HashMap(); 207 registerFactories(); 208 } 209 return factoryMap; 210 } 211 }

This page was automatically generated by Maven