001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    
019    package org.apache.commons.beanutils;
020    
021    
022    /**
023     * <p>A <strong>DynaBean</strong> is a Java object that supports properties
024     * whose names and data types, as well as values, may be dynamically modified.
025     * To the maximum degree feasible, other components of the BeanUtils package
026     * will recognize such beans and treat them as standard JavaBeans for the
027     * purpose of retrieving and setting property values.</p>
028     *
029     * @author Craig McClanahan
030     * @author Paulo Gaspar
031     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
032     */
033    
034    public interface DynaBean {
035    
036    
037        /**
038         * Does the specified mapped property contain a value for the specified
039         * key value?
040         *
041         * @param name Name of the property to check
042         * @param key Name of the key to check
043         * @return <code>true<code> if the mapped property contains a value for
044         * the specified key, otherwise <code>false</code>
045         *
046         * @exception IllegalArgumentException if there is no property
047         *  of the specified name
048         */
049        public boolean contains(String name, String key);
050    
051    
052        /**
053         * Return the value of a simple property with the specified name.
054         *
055         * @param name Name of the property whose value is to be retrieved
056         * @return The property's value
057         *
058         * @exception IllegalArgumentException if there is no property
059         *  of the specified name
060         */
061        public Object get(String name);
062    
063    
064        /**
065         * Return the value of an indexed property with the specified name.
066         *
067         * @param name Name of the property whose value is to be retrieved
068         * @param index Index of the value to be retrieved
069         * @return The indexed property's value
070         *
071         * @exception IllegalArgumentException if there is no property
072         *  of the specified name
073         * @exception IllegalArgumentException if the specified property
074         *  exists, but is not indexed
075         * @exception IndexOutOfBoundsException if the specified index
076         *  is outside the range of the underlying property
077         * @exception NullPointerException if no array or List has been
078         *  initialized for this property
079         */
080        public Object get(String name, int index);
081    
082    
083        /**
084         * Return the value of a mapped property with the specified name,
085         * or <code>null</code> if there is no value for the specified key.
086         *
087         * @param name Name of the property whose value is to be retrieved
088         * @param key Key of the value to be retrieved
089         * @return The mapped property's value
090         *
091         * @exception IllegalArgumentException if there is no property
092         *  of the specified name
093         * @exception IllegalArgumentException if the specified property
094         *  exists, but is not mapped
095         */
096        public Object get(String name, String key);
097    
098    
099        /**
100         * Return the <code>DynaClass</code> instance that describes the set of
101         * properties available for this DynaBean.
102         *
103         * @return The associated DynaClass
104         */
105        public DynaClass getDynaClass();
106    
107    
108        /**
109         * Remove any existing value for the specified key on the
110         * specified mapped property.
111         *
112         * @param name Name of the property for which a value is to
113         *  be removed
114         * @param key Key of the value to be removed
115         *
116         * @exception IllegalArgumentException if there is no property
117         *  of the specified name
118         */
119        public void remove(String name, String key);
120    
121    
122        /**
123         * Set the value of a simple property with the specified name.
124         *
125         * @param name Name of the property whose value is to be set
126         * @param value Value to which this property is to be set
127         *
128         * @exception ConversionException if the specified value cannot be
129         *  converted to the type required for this property
130         * @exception IllegalArgumentException if there is no property
131         *  of the specified name
132         * @exception NullPointerException if an attempt is made to set a
133         *  primitive property to null
134         */
135        public void set(String name, Object value);
136    
137    
138        /**
139         * Set the value of an indexed property with the specified name.
140         *
141         * @param name Name of the property whose value is to be set
142         * @param index Index of the property to be set
143         * @param value Value to which this property is to be set
144         *
145         * @exception ConversionException if the specified value cannot be
146         *  converted to the type required for this property
147         * @exception IllegalArgumentException if there is no property
148         *  of the specified name
149         * @exception IllegalArgumentException if the specified property
150         *  exists, but is not indexed
151         * @exception IndexOutOfBoundsException if the specified index
152         *  is outside the range of the underlying property
153         */
154        public void set(String name, int index, Object value);
155    
156    
157        /**
158         * Set the value of a mapped property with the specified name.
159         *
160         * @param name Name of the property whose value is to be set
161         * @param key Key of the property to be set
162         * @param value Value to which this property is to be set
163         *
164         * @exception ConversionException if the specified value cannot be
165         *  converted to the type required for this property
166         * @exception IllegalArgumentException if there is no property
167         *  of the specified name
168         * @exception IllegalArgumentException if the specified property
169         *  exists, but is not mapped
170         */
171        public void set(String name, String key, Object value);
172    
173    
174    }