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