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 <code>IParameterSpecification</code> is contained
028     * by a {@link IComponentSpecification}.
029     * <p>
030     * TBD: Identify arrays in some way.
031     * 
032     * @author Howard Lewis Ship
033     */
034    
035    public class ParameterSpecification extends BaseLocatable implements IParameterSpecification
036    {
037        private boolean _required = false;
038    
039        private String _type;
040    
041        /** @since 1.0.9 */
042        private String _description;
043    
044        /** @since 2.0.3 */
045        private String _propertyName;
046    
047        /** @since 3.0 */
048        private String _defaultValue;
049    
050        /** @since 4.0 */
051        private boolean _cache = true;
052    
053        /** @since 4.0 */
054        private Collection _aliasNames = Collections.EMPTY_LIST;
055    
056        /** @since 4.0 */
057        private String _parameterName;
058    
059        /** @since 4.0 */
060        private boolean _deprecated = false;
061    
062        /**
063         * Returns the class name of the expected type of the parameter. The default value is
064         * <code>java.lang.Object</code> which matches anything.
065         */
066    
067        public String getType()
068        {
069            return _type;
070        }
071    
072        /**
073         * Returns true if the parameter is required by the component. The default is false, meaning the
074         * parameter is optional.
075         */
076    
077        public boolean isRequired()
078        {
079            return _required;
080        }
081    
082        public void setRequired(boolean value)
083        {
084            _required = value;
085        }
086    
087        /**
088         * Sets the type of value expected for the parameter. This can be left blank to indicate any
089         * type.
090         */
091    
092        public void setType(String value)
093        {
094            _type = value;
095        }
096    
097        /**
098         * Returns the documentation for this parameter.
099         * 
100         * @since 1.0.9
101         */
102    
103        public String getDescription()
104        {
105            return _description;
106        }
107    
108        /**
109         * Sets the documentation for this parameter.
110         * 
111         * @since 1.0.9
112         */
113    
114        public void setDescription(String description)
115        {
116            _description = description;
117        }
118    
119        /**
120         * Sets the property name (of the component class) to connect the parameter to.
121         */
122    
123        public void setPropertyName(String propertyName)
124        {
125            _propertyName = propertyName;
126        }
127    
128        /**
129         * Returns the name of the JavaBeans property to connect the parameter to.
130         */
131    
132        public String getPropertyName()
133        {
134            return _propertyName;
135        }
136    
137        /**
138         * @see org.apache.tapestry.spec.IParameterSpecification#getDefaultValue()
139         */
140        public String getDefaultValue()
141        {
142            return _defaultValue;
143        }
144    
145        /**
146         * @see org.apache.tapestry.spec.IParameterSpecification#setDefaultValue(java.lang.String)
147         */
148        public void setDefaultValue(String defaultValue)
149        {
150            _defaultValue = defaultValue;
151        }
152    
153        /** @since 4.0 */
154        public boolean getCache()
155        {
156            return _cache;
157        }
158    
159        /** @since 4.0 */
160        public void setCache(boolean cache)
161        {
162            _cache = cache;
163        }
164    
165        /** @since 4.0 */
166        public Collection getAliasNames()
167        {
168            return _aliasNames;
169        }
170    
171        /** @since 4.0 */
172        public String getParameterName()
173        {
174            return _parameterName;
175        }
176    
177        /** @since 4.0 */
178        public void setAliases(String nameList)
179        {
180            if (HiveMind.isNonBlank(nameList))
181            {
182                String[] names = TapestryUtils.split(nameList);
183    
184                _aliasNames = Arrays.asList(names);
185            }
186        }
187    
188        /** @since 4.0 */
189        public void setParameterName(String name)
190        {
191            Defense.notNull(name, "name");
192    
193            _parameterName = name;
194        }
195    
196        /** @since 4.0 */
197        public boolean isDeprecated()
198        {
199            return _deprecated;
200        }
201    
202        /** @since 4.0 */
203        public void setDeprecated(boolean deprecated)
204        {
205            _deprecated = deprecated;
206        }
207    
208    }