View Javadoc

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  
19  package org.apache.commons.beanutils;
20  
21  
22  
23  
24  
25  /***
26   * <p>A <strong>DynaClass</strong> is a simulation of the functionality of
27   * <code>java.lang.Class</code> for classes implementing the
28   * <code>DynaBean</code> interface.  DynaBean instances that share the same
29   * DynaClass all have the same set of available properties, along with any
30   * associated data types, read-only states, and write-only states.</p>
31   *
32   * @author Craig McClanahan
33   * @author Michael Smith
34   * @author Paulo Gaspar
35   * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
36   */
37  
38  public interface DynaClass {
39  
40  
41      /***
42       * Return the name of this DynaClass (analogous to the
43       * <code>getName()</code> method of <code>java.lang.Class</code), which
44       * allows the same <code>DynaClass</code> implementation class to support
45       * different dynamic classes, with different sets of properties.
46       *
47       * @return the name of the DynaClass
48       */
49      public String getName();
50  
51  
52      /***
53       * Return a property descriptor for the specified property, if it exists;
54       * otherwise, return <code>null</code>.
55       *
56       * @param name Name of the dynamic property for which a descriptor
57       *  is requested
58       * @return The descriptor for the specified property
59       *
60       * @exception IllegalArgumentException if no property name is specified
61       */
62      public DynaProperty getDynaProperty(String name);
63  
64  
65      /***
66       * <p>Return an array of <code>ProperyDescriptors</code> for the properties
67       * currently defined in this DynaClass.  If no properties are defined, a
68       * zero-length array will be returned.</p>
69       *
70       * <p><strong>FIXME</strong> - Should we really be implementing
71       * <code>getBeanInfo()</code> instead, which returns property descriptors
72       * and a bunch of other stuff?</p>
73       *
74       * @return the set of properties for this DynaClass
75       */
76      public DynaProperty[] getDynaProperties();
77  
78  
79      /***
80       * Instantiate and return a new DynaBean instance, associated
81       * with this DynaClass.
82       *
83       * @return A new <code>DynaBean</code> instance
84       *
85       * @exception IllegalAccessException if the Class or the appropriate
86       *  constructor is not accessible
87       * @exception InstantiationException if this Class represents an abstract
88       *  class, an array class, a primitive type, or void; or if instantiation
89       *  fails for some other reason
90       */
91      public DynaBean newInstance()
92              throws IllegalAccessException, InstantiationException;
93  
94  
95  }