Coverage report

  %line %branch
org.apache.commons.jelly.tags.swing.SwingTagLibrary
36% 
78% 

 1  
 /*
 2  
  * Copyright 2002,2004 The Apache Software Foundation.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *      http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.apache.commons.jelly.tags.swing;
 17  
 
 18  
 import java.awt.Dimension;
 19  
 import java.awt.Point;
 20  
 import java.util.HashMap;
 21  
 import java.util.Map;
 22  
 
 23  
 import javax.swing.Box;
 24  
 import javax.swing.JButton;
 25  
 import javax.swing.JCheckBox;
 26  
 import javax.swing.JCheckBoxMenuItem;
 27  
 import javax.swing.JComboBox;
 28  
 import javax.swing.JDesktopPane;
 29  
 import javax.swing.JEditorPane;
 30  
 import javax.swing.JFileChooser;
 31  
 import javax.swing.JFrame;
 32  
 import javax.swing.JInternalFrame;
 33  
 import javax.swing.JLabel;
 34  
 import javax.swing.JList;
 35  
 import javax.swing.JMenu;
 36  
 import javax.swing.JMenuBar;
 37  
 import javax.swing.JMenuItem;
 38  
 import javax.swing.JOptionPane;
 39  
 import javax.swing.JPanel;
 40  
 import javax.swing.JPasswordField;
 41  
 import javax.swing.JPopupMenu;
 42  
 import javax.swing.JProgressBar;
 43  
 import javax.swing.JRadioButton;
 44  
 import javax.swing.JRadioButtonMenuItem;
 45  
 import javax.swing.JScrollPane;
 46  
 import javax.swing.JSeparator;
 47  
 import javax.swing.JSplitPane;
 48  
 import javax.swing.JTabbedPane;
 49  
 import javax.swing.JTable;
 50  
 import javax.swing.JTextArea;
 51  
 import javax.swing.JTextField;
 52  
 import javax.swing.JToggleButton;
 53  
 import javax.swing.JToolBar;
 54  
 import javax.swing.JTree;
 55  
 
 56  
 import org.apache.commons.beanutils.ConvertUtils;
 57  
 import org.apache.commons.jelly.JellyException;
 58  
 import org.apache.commons.jelly.Tag;
 59  
 import org.apache.commons.jelly.TagLibrary;
 60  
 import org.apache.commons.jelly.impl.TagFactory;
 61  
 import org.apache.commons.jelly.impl.TagScript;
 62  
 import org.apache.commons.jelly.tags.swing.converters.ColorConverter;
 63  
 import org.apache.commons.jelly.tags.swing.converters.DimensionConverter;
 64  
 import org.apache.commons.jelly.tags.swing.converters.PointConverter;
 65  
 import org.apache.commons.logging.Log;
 66  
 import org.apache.commons.logging.LogFactory;
 67  
 import org.xml.sax.Attributes;
 68  
 
 69  
 /** The Swing tag library. <p/>
 70  
  * In addition to the tag descriptions in the tag doc, implements
 71  
  * the following basic components:
 72  
  * <ul>
 73  
  * <li>button - JButton
 74  
         <li>checkBox - JCheckBox
 75  
 <li>checkBoxMenuItem - JCheckBoxMenuItem
 76  
 <li>comboBox - JComboBox
 77  
 <li>desktopPane - JDesktopPane
 78  
 <li>editorPane - JEditorPane
 79  
 <li>fileChooser - JFileChooser
 80  
 <li>frame - JFrame
 81  
 <li>internalFrame - JInternalFrame
 82  
 <li>label - JLabel
 83  
 <li>list - JList
 84  
 <li>menu - JMenu
 85  
 <li>menuBar - JMenuBar
 86  
 <li>menuItem - JMenuItem
 87  
 <li>panel - JPanel
 88  
 <li>passwordField - JPasswordField
 89  
 <li>popupMenu - JPopupMenu
 90  
 <li>progressBar - JProgressBar
 91  
 <li>radioButton - JRadioButton
 92  
 <li>radioButtonMenuItem - JRadioButtonMenuItem
 93  
 <li>optionPane - JOptionPane
 94  
 <li>scrollPane - JScrollPane
 95  
 <li>separator - JSeparator
 96  
 
 97  
 <li>splitPane - JSplitPane
 98  
 <li>hbox" - Box.createHorizontalBox()
 99  
 <li>vbox - Box.createVerticalBox()
 100  
 
 101  
 <li>tabbedPane - JTabbedPane
 102  
 <li>table - JTable
 103  
 <li>textArea - JTextArea
 104  
 <li>textField - JTextField
 105  
 <li>toggleButton - JToggleButton
 106  
 <li>tree - JTree
 107  
 <li>toolBar - JToolBar
 108  
 
 109  
  * </ul>
 110  
  *
 111  
  * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
 112  
  * @author <a href="mailto:bob@eng.werken.com">bob mcwhirter</a>
 113  
  * @version $Revision: 331130 $
 114  
  */
 115  
 public class SwingTagLibrary extends TagLibrary {
 116  
 
 117  
     /** The Log to which logging calls will be made. */
 118  104
     private static final Log log = LogFactory.getLog(SwingTagLibrary.class);
 119  
 
 120  
     /** A map of element name to bean class objects */
 121  
     private Map factoryMap;
 122  
 
 123  
     static {
 124  
 
 125  
         // ### we should create Converters from Strings to various Swing types such as
 126  
         // ### Icon, KeyStroke etc.
 127  4
         ConvertUtils.register( new DimensionConverter(), Dimension.class );
 128  4
         ConvertUtils.register( new PointConverter(), Point.class );
 129  4
         ConvertUtils.register( new ColorConverter(), java.awt.Color.class );
 130  4
     }
 131  
 
 132  8
     public SwingTagLibrary() {
 133  8
         registerTag( "action", ActionTag.class );
 134  8
         registerTag( "buttonGroup", ButtonGroupTag.class );
 135  8
         registerTag( "component", ComponentTag.class );
 136  8
         registerTag( "font", FontTag.class );
 137  8
         registerTag( "windowListener", WindowListenerTag.class );
 138  8
         registerTag( "focusListener", FocusListenerTag.class );
 139  8
         registerTag( "keyListener", KeyListenerTag.class );
 140  
 
 141  
         // the model tags
 142  8
         registerTag( "tableModel", TableModelTag.class );
 143  8
         registerTag( "tableModelColumn", TableModelColumnTag.class );
 144  
 
 145  
         // the border tags...
 146  8
         registerTag( "etchedBorder", EtchedBorderTag.class );
 147  8
         registerTag( "emptyBorder", EmptyBorderTag.class );
 148  8
         registerTag( "titledBorder", TitledBorderTag.class );
 149  
         // @todo the other kinds of borders, empty, bevelled, compound etc
 150  
 
 151  
         // the layout tags...
 152  
 
 153  
         // HTML style table, tr, td layouts
 154  8
         registerTag( "tableLayout", TableLayoutTag.class );
 155  8
         registerTag( "tr", TrTag.class );
 156  8
         registerTag( "td", TdTag.class );
 157  
 
 158  
         // GridBagLayout
 159  8
         registerTag( "gridBagLayout", GridBagLayoutTag.class );
 160  8
         registerTag( "gbc", GbcTag.class );
 161  
 
 162  
         // BorderLayout
 163  8
         registerTag( "borderLayout", BorderLayoutTag.class );
 164  8
         registerTag( "borderAlign", BorderAlignTag.class );
 165  
         
 166  
         //CardLayout
 167  8
         registerTag( "cardLayout", CardLayoutTag.class);
 168  
 
 169  
         // Dialog
 170  8
         registerTag( "dialog", DialogTag.class );
 171  8
     }
 172  
 
 173  
     /** Creates a new script to execute the given tag name and attributes */
 174  
     public TagScript createTagScript(String name, Attributes attributes) throws JellyException {
 175  0
         TagScript answer = super.createTagScript(name, attributes);
 176  0
         if ( answer == null ) {
 177  0
             final Factory factory = getFactory( name );
 178  0
             if ( factory != null ) {
 179  0
                 return new TagScript(
 180  
                     new TagFactory() {
 181  
                         public Tag createTag(String name, Attributes attributes) throws JellyException {
 182  
                             if ( factory instanceof TagFactory ) {
 183  
                                 return ((TagFactory) factory).createTag(name, attributes);
 184  
                             }
 185  
                             else {
 186  
                                 return new ComponentTag(factory);
 187  
                             }
 188  
                         }
 189  
                     }
 190  
                 );
 191  
             }
 192  
         }
 193  0
         return answer;
 194  
     }
 195  
 
 196  
     /**
 197  
      * @return the Factory of the Swing component for the given element name
 198  
      */
 199  
     public Factory getFactory(String elementName) {
 200  0
         return (Factory) getFactoryMap().get(elementName);
 201  
     }
 202  
 
 203  
     // Implementation methods
 204  
     //-------------------------------------------------------------------------
 205  
 
 206  
     /**
 207  
      * Strategy method allowing derived classes to change the registration behaviour
 208  
      */
 209  
     protected void registerFactories() {
 210  0
         registerBeanFactory( "button", JButton.class );
 211  0
         registerBeanFactory( "checkBox", JCheckBox.class );
 212  0
         registerBeanFactory( "checkBoxMenuItem", JCheckBoxMenuItem.class );
 213  0
         registerBeanFactory( "comboBox", JComboBox.class );
 214  
         // how to add content there ?
 215  
         // Have a ComboBoxModel (just one should have a Table or Tree Model objects) ?
 216  
         // can the element control it's children ?
 217  
         // but children should also be able to be any component (as Swing comps. are all container)
 218  0
         registerBeanFactory( "desktopPane", JDesktopPane.class );
 219  0
         registerBeanFactory( "editorPane", JEditorPane.class );
 220  0
         registerBeanFactory( "fileChooser", JFileChooser.class );
 221  0
         registerBeanFactory( "frame", JFrame.class );
 222  0
         registerBeanFactory( "internalFrame", JInternalFrame.class );
 223  0
         registerBeanFactory( "label", JLabel.class );
 224  0
         registerBeanFactory( "list", JList.class );
 225  0
         registerBeanFactory( "menu", JMenu.class );
 226  0
         registerBeanFactory( "menuBar", JMenuBar.class );
 227  0
         registerBeanFactory( "menuItem", JMenuItem.class );
 228  0
         registerBeanFactory( "panel", JPanel.class );
 229  0
         registerBeanFactory( "passwordField", JPasswordField.class );
 230  0
         registerBeanFactory( "popupMenu", JPopupMenu.class );
 231  0
         registerBeanFactory( "progressBar", JProgressBar.class );
 232  0
         registerBeanFactory( "radioButton", JRadioButton.class );
 233  0
         registerBeanFactory( "radioButtonMenuItem", JRadioButtonMenuItem.class );
 234  0
         registerBeanFactory( "optionPane", JOptionPane.class );
 235  0
         registerBeanFactory( "scrollPane", JScrollPane.class );
 236  0
         registerBeanFactory( "separator", JSeparator.class );
 237  
 
 238  0
         registerFactory(
 239  
             "splitPane",
 240  
             new Factory() {
 241  
                 public Object newInstance() {
 242  
                     JSplitPane answer = new JSplitPane();
 243  
                     answer.setLeftComponent(null);
 244  
                     answer.setRightComponent(null);
 245  
                     answer.setTopComponent(null);
 246  
                     answer.setBottomComponent(null);
 247  
                     return answer;
 248  
                 }
 249  
             }
 250  
         );
 251  
 
 252  
         // Box related layout components
 253  0
         registerFactory(
 254  
             "hbox",
 255  
             new Factory() {
 256  
                 public Object newInstance() {
 257  
                     return Box.createHorizontalBox();
 258  
                 }
 259  
             }
 260  
         );
 261  0
         registerFactory(
 262  
             "vbox",
 263  
             new Factory() {
 264  
                 public Object newInstance() {
 265  
                     return Box.createVerticalBox();
 266  
                 }
 267  
             }
 268  
         );
 269  
 
 270  0
         registerBeanFactory( "tabbedPane", JTabbedPane.class );
 271  0
         registerBeanFactory( "table", JTable.class );
 272  0
         registerBeanFactory( "textArea", JTextArea.class );
 273  0
         registerBeanFactory( "textField", JTextField.class );
 274  0
         registerBeanFactory( "toggleButton", JToggleButton.class );
 275  0
         registerBeanFactory( "tree", JTree.class );
 276  0
         registerBeanFactory( "toolBar", JToolBar.class );
 277  0
     }
 278  
 
 279  
     /**
 280  
      * Register a widget factory for the given element name
 281  
      */
 282  
     protected void registerFactory(String name, Factory factory) {
 283  0
         getFactoryMap().put(name, factory);
 284  0
     }
 285  
 
 286  
     /**
 287  
      * Register a bean factory for the given element name and class
 288  
      */
 289  
     protected void registerBeanFactory(String name, Class beanClass) {
 290  0
         registerFactory(name, new BeanFactory(beanClass));
 291  0
     }
 292  
 
 293  
     protected Map getFactoryMap() {
 294  0
         if ( factoryMap == null ) {
 295  0
             factoryMap = new HashMap();
 296  0
             registerFactories();
 297  
         }
 298  0
         return factoryMap;
 299  
     }
 300  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.