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  }