1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.commons.beanutils2; 19 20 /** 21 * <p> 22 * A <strong>DynaBean</strong> is a Java object that supports properties whose names and data types, as well as values, may be dynamically modified. To the 23 * maximum degree feasible, other components of the BeanUtils package will recognize such beans and treat them as standard JavaBeans for the purpose of 24 * retrieving and setting property values. 25 * </p> 26 */ 27 public interface DynaBean { 28 29 /** 30 * Does the specified mapped property contain a value for the specified key value? 31 * 32 * @param name Name of the property to check 33 * @param key Name of the key to check 34 * @return {@code true} if the mapped property contains a value for the specified key, otherwise {@code false} 35 * @throws IllegalArgumentException if there is no property of the specified name 36 */ 37 boolean contains(String name, String key); 38 39 /** 40 * Gets the value of a simple property with the specified name. 41 * 42 * @param name Name of the property whose value is to be retrieved 43 * @return The property's value 44 * @throws IllegalArgumentException if there is no property of the specified name 45 */ 46 Object get(String name); 47 48 /** 49 * Gets the value of an indexed property with the specified name. 50 * 51 * @param name Name of the property whose value is to be retrieved 52 * @param index Index of the value to be retrieved 53 * @return The indexed property's value 54 * @throws IllegalArgumentException if there is no property of the specified name 55 * @throws IllegalArgumentException if the specified property exists, but is not indexed 56 * @throws IndexOutOfBoundsException if the specified index is outside the range of the underlying property 57 * @throws NullPointerException if no array or List has been initialized for this property 58 */ 59 Object get(String name, int index); 60 61 /** 62 * Gets the value of a mapped property with the specified name, or {@code null} if there is no value for the specified key. 63 * 64 * @param name Name of the property whose value is to be retrieved 65 * @param key Key of the value to be retrieved 66 * @return The mapped property's value 67 * @throws IllegalArgumentException if there is no property of the specified name 68 * @throws IllegalArgumentException if the specified property exists, but is not mapped 69 */ 70 Object get(String name, String key); 71 72 /** 73 * Gets the {@code DynaClass} instance that describes the set of properties available for this DynaBean. 74 * 75 * @return The associated DynaClass 76 */ 77 DynaClass getDynaClass(); 78 79 /** 80 * Remove any existing value for the specified key on the specified mapped property. 81 * 82 * @param name Name of the property for which a value is to be removed 83 * @param key Key of the value to be removed 84 * @throws IllegalArgumentException if there is no property of the specified name 85 */ 86 void remove(String name, String key); 87 88 /** 89 * Sets the value of an indexed property with the specified name. 90 * 91 * @param name Name of the property whose value is to be set 92 * @param index Index of the property to be set 93 * @param value Value to which this property is to be set 94 * @throws ConversionException if the specified value cannot be converted to the type required for this property 95 * @throws IllegalArgumentException if there is no property of the specified name 96 * @throws IllegalArgumentException if the specified property exists, but is not indexed 97 * @throws IndexOutOfBoundsException if the specified index is outside the range of the underlying property 98 */ 99 void set(String name, int index, Object value); 100 101 /** 102 * Sets the value of a simple property with the specified name. 103 * 104 * @param name Name of the property whose value is to be set 105 * @param value Value to which this property is to be set 106 * @throws ConversionException if the specified value cannot be converted to the type required for this property 107 * @throws IllegalArgumentException if there is no property of the specified name 108 * @throws NullPointerException if an attempt is made to set a primitive property to null 109 */ 110 void set(String name, Object value); 111 112 /** 113 * Sets the value of a mapped property with the specified name. 114 * 115 * @param name Name of the property whose value is to be set 116 * @param key Key of the property to be set 117 * @param value Value to which this property is to be set 118 * @throws ConversionException if the specified value cannot be converted to the type required for this property 119 * @throws IllegalArgumentException if there is no property of the specified name 120 * @throws IllegalArgumentException if the specified property exists, but is not mapped 121 */ 122 void set(String name, String key, Object value); 123 124 }