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