View Javadoc
1 /* 2 * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DynamicTag.java,v 1.7 2002/05/17 15:18:12 jstrachan Exp $ 3 * $Revision: 1.7 $ 4 * $Date: 2002/05/17 15:18:12 $ 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: DynamicTag.java,v 1.7 2002/05/17 15:18:12 jstrachan Exp $ 61 */ 62 package org.apache.commons.jelly.tags.swing; 63 64 import java.awt.event.ActionEvent; 65 import java.util.Iterator; 66 import java.util.Map; 67 68 import javax.swing.*; 69 70 import org.apache.commons.beanutils.BeanUtils; 71 72 import org.apache.commons.jelly.JellyException; 73 import org.apache.commons.jelly.MapTagSupport; 74 import org.apache.commons.jelly.XMLOutput; 75 76 import org.apache.commons.logging.Log; 77 import org.apache.commons.logging.LogFactory; 78 79 /*** 80 * Creates a Swing Action and attaches it to the parent component. The This tag creates a Swing component and adds it to its parent tag, optionally declaring this 81 * component as a variable if the <i>var</i> attribute is specified.</p> 82 * 83 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 84 * @version $Revision: 1.7 $ 85 */ 86 public class ActionTag extends MapTagSupport { 87 88 /*** The Log to which logging calls will be made. */ 89 private static final Log log = LogFactory.getLog(ActionTag.class); 90 91 /*** the current action instance */ 92 private Action action; 93 94 public ActionTag() { 95 } 96 97 // Tag interface 98 //------------------------------------------------------------------------- 99 public void doTag(final XMLOutput output) throws Exception { 100 101 Map map = getAttributes(); 102 action = (Action) map.remove( "action" ); 103 Object classObject = map.remove("className"); 104 String var = (String) map.remove( "var" ); 105 106 if ( action == null ) { 107 Class actionClass = null; 108 if ( classObject != null ) { 109 if ( classObject instanceof Class ) { 110 actionClass = (Class) classObject; 111 } 112 else { 113 String name = classObject.toString(); 114 try { 115 actionClass = Class.forName( name ); 116 } 117 catch (Throwable t) { 118 throw new JellyException( "Could not find class: " + name + " for this <action> tag. Exception: " +t, t ); 119 } 120 } 121 if ( actionClass != null ) { 122 action = (Action) actionClass.newInstance(); 123 } 124 } 125 } 126 if ( action == null ) { 127 action = new AbstractAction() { 128 public void actionPerformed(ActionEvent event) { 129 context.setVariable( "event", event ); 130 try { 131 invokeBody(output); 132 } 133 catch (Exception e) { 134 log.error( "Caught: " + e, e ); 135 } 136 } 137 }; 138 } 139 140 // now lets set the properties on the action object 141 for ( Iterator iter = map.entrySet().iterator(); iter.hasNext(); ) { 142 Map.Entry entry = (Map.Entry) iter.next(); 143 String name = (String) entry.getKey(); 144 145 // typically standard Action names start with upper case, so lets upper case it 146 name = capitalize(name); 147 Object value = entry.getValue(); 148 149 action.putValue( name, value ); 150 } 151 152 if ( var != null ) { 153 context.setVariable( var, action ); 154 } 155 156 157 // now lets add this action to its parent if we have one 158 ComponentTag tag = (ComponentTag) findAncestorWithClass( ComponentTag.class ); 159 if ( tag != null ) { 160 tag.setAction(action); 161 } 162 } 163 164 // Properties 165 //------------------------------------------------------------------------- 166 167 /*** 168 * @return the Action object for this tag 169 */ 170 public Action getAction() { 171 return action; 172 } 173 174 175 // Implementation methods 176 //------------------------------------------------------------------------- 177 protected String capitalize(String text) { 178 char ch = text.charAt(0); 179 if ( Character.isUpperCase( ch ) ) { 180 return text; 181 } 182 StringBuffer buffer = new StringBuffer(text.length()); 183 buffer.append( Character.toUpperCase( ch ) ); 184 buffer.append( text.substring(1) ); 185 return buffer.toString(); 186 } 187 188 189 }

This page was automatically generated by Maven