View Javadoc
1 /* 2 * $Header: $ 3 * $Revision: 1.0 $ 4 * $Date: $ 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: $ 61 */ 62 package org.apache.commons.jelly.tags.dynabean; 63 64 import java.io.IOException; 65 import java.io.Writer; 66 67 import org.apache.commons.jelly.JellyContext; 68 import org.apache.commons.jelly.JellyException; 69 import org.apache.commons.jelly.MissingAttributeException; 70 import org.apache.commons.jelly.Script; 71 import org.apache.commons.jelly.TagSupport; 72 import org.apache.commons.jelly.XMLOutput; 73 import org.apache.commons.jelly.expression.Expression; 74 75 import org.apache.commons.beanutils.*; 76 77 /*** 78 * DynaProperty tag defines a property of a DynaClass 79 * It can only exist inside a DynaClass parent context 80 * The properties are added to the properties array 81 * of the parent context, and will be used to 82 * create the DynaClass object 83 * 84 * @author Theo Niemeijer 85 * @version 1.0 86 */ 87 public class PropertyTag extends TagSupport { 88 89 private String name; 90 private String type; 91 private Class propertyClass; 92 private DynaProperty prop; 93 94 public PropertyTag() { 95 } 96 97 // Tag interface 98 //------------------------------------------------------------------------- 99 public void doTag (XMLOutput output) throws Exception { 100 101 // Check that this tag is used inside the body of 102 // a DynaClass tag, so that it can access the 103 // context of that tag 104 DynaclassTag parentTag = (DynaclassTag) findAncestorWithClass( DynaclassTag.class ); 105 if ( parentTag == null ) { 106 throw new JellyException( "This tag must be enclosed inside a <dynaclass> tag" ); 107 } 108 109 // Check property name 110 if (name == null) { 111 throw new MissingAttributeException( "name" ); 112 } 113 114 // Lookup appropriate property class 115 Class propClass = propertyClass; 116 if (propClass == null) { 117 118 // Check property type 119 if (type == null) { 120 throw new MissingAttributeException( "type" ); 121 } 122 123 if (type.equals("String")) { 124 propClass = String.class; 125 } 126 else if (type.equals("Integer")) { 127 propClass = Integer.TYPE; 128 } 129 else if (type.equals("Short")) { 130 propClass = Short.TYPE; 131 } 132 else if (type.equals("Long")) { 133 propClass = Long.TYPE; 134 } 135 else if (type.equals("Float")) { 136 propClass = Float.TYPE; 137 } 138 else if (type.equals("Double")) { 139 propClass = Double.TYPE; 140 } 141 else if (type.equals("Long")) { 142 propClass = Long.TYPE; 143 } 144 145 if (propClass == null) { 146 try { 147 propClass = Class.forName(type); 148 } 149 catch (Exception e) { 150 throw new JellyException 151 ("Class " + type + 152 " not found by Class.forName"); 153 } 154 } 155 } 156 157 // Create dynaproperty object with given name and type 158 prop = new DynaProperty (name, propClass); 159 160 // Add new property to dynaclass context 161 parentTag.addDynaProperty(prop); 162 } 163 164 // Properties 165 //------------------------------------------------------------------------- 166 167 /*** 168 * Sets the name of this property 169 */ 170 public void setName(String name) { 171 this.name = name; 172 } 173 174 /*** 175 * Sets the type name of this property 176 */ 177 public void setType(String type) { 178 this.type = type; 179 } 180 181 /*** 182 * Returns the Class for this property 183 */ 184 public Class getPropertyClass() { 185 return propertyClass; 186 } 187 188 /*** 189 * Sets the Class instance for this property 190 */ 191 public void setPropertyClass(Class propertyClass) { 192 this.propertyClass = propertyClass; 193 } 194 195 }

This page was automatically generated by Maven