001 // Copyright 2004, 2005 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry.spec;
016
017 import java.util.Arrays;
018 import java.util.Collection;
019 import java.util.Collections;
020
021 import org.apache.hivemind.HiveMind;
022 import org.apache.hivemind.impl.BaseLocatable;
023 import org.apache.hivemind.util.Defense;
024 import org.apache.tapestry.TapestryUtils;
025
026 /**
027 * Defines a formal parameter to a component. A
028 * <code>IParameterSpecification</code> is contained by a
029 * {@link IComponentSpecification}.
030 * <p>
031 * TBD: Identify arrays in some way.
032 *
033 * @author Howard Lewis Ship
034 */
035
036 public class ParameterSpecification extends BaseLocatable implements
037 IParameterSpecification
038 {
039
040 private boolean _required = false;
041
042 private String _type;
043
044 /** @since 1.0.9 */
045 private String _description;
046
047 /** @since 2.0.3 */
048 private String _propertyName;
049
050 /** @since 3.0 */
051 private String _defaultValue;
052
053 /** @since 4.0 */
054 private boolean _cache = true;
055
056 /** @since 4.0 */
057 private Collection _aliasNames = Collections.EMPTY_LIST;
058
059 /** @since 4.0 */
060 private String _parameterName;
061
062 /** @since 4.0 */
063 private boolean _deprecated = false;
064
065 /**
066 * Returns the class name of the expected type of the parameter. The default
067 * value is <code>java.lang.Object</code> which matches anything.
068 */
069
070 public String getType()
071 {
072 return _type;
073 }
074
075 /**
076 * Returns true if the parameter is required by the component. The default
077 * is false, meaning the parameter is optional.
078 */
079
080 public boolean isRequired()
081 {
082 return _required;
083 }
084
085 public void setRequired(boolean value)
086 {
087 _required = value;
088 }
089
090 /**
091 * Sets the type of value expected for the parameter. This can be left blank
092 * to indicate any type.
093 */
094
095 public void setType(String value)
096 {
097 _type = value;
098 }
099
100 /**
101 * Returns the documentation for this parameter.
102 *
103 * @since 1.0.9
104 */
105
106 public String getDescription()
107 {
108 return _description;
109 }
110
111 /**
112 * Sets the documentation for this parameter.
113 *
114 * @since 1.0.9
115 */
116
117 public void setDescription(String description)
118 {
119 _description = description;
120 }
121
122 /**
123 * Sets the property name (of the component class) to connect the parameter
124 * to.
125 */
126
127 public void setPropertyName(String propertyName)
128 {
129 _propertyName = propertyName;
130 }
131
132 /**
133 * Returns the name of the JavaBeans property to connect the parameter to.
134 */
135
136 public String getPropertyName()
137 {
138 return _propertyName;
139 }
140
141 /**
142 * @see org.apache.tapestry.spec.IParameterSpecification#getDefaultValue()
143 */
144 public String getDefaultValue()
145 {
146 return _defaultValue;
147 }
148
149 /**
150 * @see org.apache.tapestry.spec.IParameterSpecification#setDefaultValue(java.lang.String)
151 */
152 public void setDefaultValue(String defaultValue)
153 {
154 _defaultValue = defaultValue;
155 }
156
157 /** @since 4.0 */
158 public boolean getCache()
159 {
160 return _cache;
161 }
162
163 /** @since 4.0 */
164 public void setCache(boolean cache)
165 {
166 _cache = cache;
167 }
168
169 /** @since 4.0 */
170 public Collection getAliasNames()
171 {
172 return _aliasNames;
173 }
174
175 /** @since 4.0 */
176 public String getParameterName()
177 {
178 return _parameterName;
179 }
180
181 /** @since 4.0 */
182 public void setAliases(String nameList)
183 {
184 if (HiveMind.isNonBlank(nameList))
185 {
186 String[] names = TapestryUtils.split(nameList);
187
188 _aliasNames = Arrays.asList(names);
189 }
190 }
191
192 /** @since 4.0 */
193 public void setParameterName(String name)
194 {
195 Defense.notNull(name, "name");
196
197 _parameterName = name;
198 }
199
200 /** @since 4.0 */
201 public boolean isDeprecated()
202 {
203 return _deprecated;
204 }
205
206 /** @since 4.0 */
207 public void setDeprecated(boolean deprecated)
208 {
209 _deprecated = deprecated;
210 }
211
212 }