donaldp     2002/10/20 20:44:30

  Added:       metaclass/src/java/org/apache/excalibur/metaclass/model
                        Attribute.java ClassDescriptor.java ClassInfo.java
                        FeatureDescriptor.java FieldDescriptor.java
                        MethodDescriptor.java ParameterDescriptor.java
                        package.html
  Log:
  Runtime metadata discovery V5
  
  Revision  Changes    Path
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/Attribute.java
  
  Index: Attribute.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  import java.util.Properties;
  
  /**
   * Attributes are the mechanism via which the Component model
   * is extended. Each Attribute is made up of
   * <ul>
   *   <li>name: the name of the Attribute</li>
   *   <li>parameters: a set of key-value pairs specifying parameters for 
Attribute</li>
   * </ul>
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public final class Attribute
      implements Serializable
  {
      private static final String[] EMPTY_SET = new String[ 0 ];
  
      /**
       * The name of the Attribute.
       */
      private final String m_name;
  
      /**
       * The arbitrary set of parameters associated with the Attribute.
       */
      private final Properties m_parameters;
  
      /**
       * Create a Attribute with specified name and parameters.
       *
       * @param name the Attribute name
       * @param parameters the Attribute parameters
       */
      public Attribute( final String name,
                        final Properties parameters )
      {
          if( null == name )
          {
              throw new NullPointerException( "name" );
          }
          if( null == parameters )
          {
              throw new NullPointerException( "parameters" );
          }
  
          m_name = name;
          m_parameters = parameters;
      }
  
      /**
       * Return the name of the Attribute.
       *
       * @return the name of the Attribute.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Return the parameter for specified key.
       *
       * @return the parameter for specified key.
       */
      public String getParameter( final String key )
      {
          if( null == m_parameters )
          {
              return null;
          }
          else
          {
              return m_parameters.getProperty( key );
          }
      }
  
      /**
       * Return the parameter for specified key, or defaultValue if unspecified.
       *
       * @return the parameter for specified key, or defaultValue if unspecified.
       */
      public String getParameter( final String key,
                                  final String defaultValue )
      {
          if( null == m_parameters )
          {
              return defaultValue;
          }
          else
          {
              return m_parameters.getProperty( key, defaultValue );
          }
      }
  
      /**
       * Returns an array of parameter names available under this Attribute.
       *
       * @return an array of parameter names available under this Attribute.
       */
      public String[] getParameterNames()
      {
          if( null == m_parameters )
          {
              return EMPTY_SET;
          }
          else
          {
              return (String[])m_parameters.keySet().toArray( EMPTY_SET );
          }
      }
  
      public String toString()
      {
          return getName() + m_parameters;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/ClassDescriptor.java
  
  Index: ClassDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import org.apache.avalon.framework.info.FeatureDescriptor;
  import org.apache.avalon.framework.info.Attribute;
  
  /**
   * This descriptor contains the information relevent to a
   * particular class. It essentially contains a list of attributes
   * defined by the class and the name of the class that it is applied to.
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public final class ClassDescriptor
      extends FeatureDescriptor
  {
      /**
       * The name of class.
       */
      private final String m_classname;
  
      public ClassDescriptor( final String classname,
                              final Attribute[] attribute )
      {
          super( attribute );
          if( null == classname )
          {
              throw new NullPointerException( "classname" );
          }
  
          m_classname = classname;
      }
  
      /**
       * Return the name of the class.
       *
       * @return the name of the class.
       */
      public String getClassname()
      {
          return m_classname;
      }
  }
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/ClassInfo.java
  
  Index: ClassInfo.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  
  /**
   * This class contains the meta information about a Class. It contains
   * references to descriptors about the class, the classes fields and
   * the classes methods.
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public class ClassInfo
      implements Serializable
  {
      private final ClassDescriptor m_classDescriptor;
      private final FieldDescriptor[] m_fields;
      private final MethodDescriptor[] m_methods;
  
      public ClassInfo( final ClassDescriptor classDescriptor,
                        final FieldDescriptor[] fields,
                        final MethodDescriptor[] methods )
      {
          m_classDescriptor = classDescriptor;
          m_fields = fields;
          m_methods = methods;
      }
  
      public ClassDescriptor getClassDescriptor()
      {
          return m_classDescriptor;
      }
  
      public FieldDescriptor[] getFields()
      {
          return m_fields;
      }
  
      public MethodDescriptor[] getMethods()
      {
          return m_methods;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/FeatureDescriptor.java
  
  Index: FeatureDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included  with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  import java.util.Arrays;
  import java.util.ArrayList;
  
  /**
   * This is the Abstract class for all feature descriptors.
   * Every descriptor has the capability of adding Attributes
   * of some kind. These Attributes can then be interpreted by
   * the container. The meaning of the specific Attributes will
   * be defined by future specification documents.
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public abstract class FeatureDescriptor
      implements Serializable
  {
      /**
       * The arbitrary set of Attributes associated with Component.
       */
      private final Attribute[] m_attributes;
  
      /**
       * The modifiers for this particular feature as defined
       * in {@link java.lang.reflect.Modifier}.
       */
      private final int m_modifiers;
  
      /**
       * Create a FeatureDescriptor with specific set of attributes.
       *
       * @param attributes the attributes
       */
      protected FeatureDescriptor( final Attribute[] attributes,
                                   final int modifiers )
      {
          if( null == attributes )
          {
              throw new NullPointerException( "attributes" );
          }
  
          m_attributes = attributes;
          m_modifiers = modifiers;
      }
  
      /**
       * Return the attributes associated with descriptor.
       *
       * @return the attributes associated with descriptor.
       */
      public Attribute[] getAttributes()
      {
          return m_attributes;
      }
  
      /**
       * Return the attribute with specified name.
       *
       * @return the attribute with specified name.
       */
      public Attribute getAttributeByName( final String name )
      {
          for( int i = 0; i < m_attributes.length; i++ )
          {
              final Attribute attribute = m_attributes[ i ];
              if( attribute.getName().equals( name ) )
              {
                  return attribute;
              }
          }
          return null;
      }
  
      /**
       * Return the attributes with specified name.
       *
       * @return the attributes with specified name.
       */
      public Attribute[] getAttributesByName( final String name )
      {
          final ArrayList results = new ArrayList();
  
          for( int i = 0; i < m_attributes.length; i++ )
          {
              final Attribute attribute = m_attributes[ i ];
              if( attribute.getName().equals( name ) )
              {
                  results.add( attribute );
              }
          }
          return (Attribute[])results.toArray( new Attribute[ results.size() ] );
      }
  
      /**
       * Return the modifiers for feature decoded by
       * {@link java.lang.reflect.Modifier}.
       *
       * @return the modifiers for feature decoded by
       *         {@link java.lang.reflect.Modifier}.
       */
      public int getModifiers()
      {
          return m_modifiers;
      }
  
      /**
       * Helper method to convert attributes into a
       * string representation.
       *
       * @return attributes converted into a string representation
       */
      protected final String attributesToString()
      {
          if( 0 == m_attributes.length )
          {
              return "";
          }
          else
          {
              return String.valueOf( Arrays.asList( m_attributes ) );
          }
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/FieldDescriptor.java
  
  Index: FieldDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  
  /**
   * A descriptor that describes a Field. It contains
   * information about;
   * <ul>
   *   <li>name: the name of the field</li>
   *   <li>type: the type of the field</li>
   *   <li>modifiers: the access modifiers for the field</li>
   * </ul>
   *
   * <p>Also associated with each field is a set of arbitrary
   * Attributes that can be used to store extra information
   * about method.</p>
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public final class FieldDescriptor
      extends FeatureDescriptor
      implements Serializable
  {
      /**
       * The name of the field.
       */
      private final String m_name;
  
      /**
       * The type of the field.
       */
      private final String m_type;
  
      /**
       * Create a descriptor for a field.
       *
       * @param name the name of the field
       * @param type the return type of the field
       * @param modifiers the access modifiers for field
       * @param attributes any attributes associated with method
       */
      public FieldDescriptor( final String name,
                               final String type,
                               final int modifiers,
                               final Attribute[] attributes )
      {
          super( attributes, modifiers );
          if( null == name )
          {
              throw new NullPointerException( "name" );
          }
          if( null == type )
          {
              throw new NullPointerException( "type" );
          }
  
          m_name = name;
          m_type = type;
      }
  
      /**
       * Return the name of the field.
       *
       * @return the name of the field.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Return the type of the field.
       *
       * @return the type of the field.
       */
      public String getType()
      {
          return m_type;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/MethodDescriptor.java
  
  Index: MethodDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  
  /**
   * A descriptor that describes a Method. It contains
   * information about;
   * <ul>
   *   <li>name: the name of the method</li>
   *   <li>return type: the return type of the method</li>
   *   <li>modifiers: the access modifiers for the method</li>
   *   <li>parameters: the parameters a method takes</li>
   * </ul>
   *
   * <p>Also associated with each method is a set of arbitrary
   * Attributes that can be used to store extra information
   * about method.</p>
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public final class MethodDescriptor
      extends FeatureDescriptor
      implements Serializable
  {
      /**
       * The name of the Method.
       */
      private final String m_name;
  
      /**
       * The return type of the method.
       */
      private final String m_returnType;
  
      /**
       * The parameters associated with the method.
       */
      private final ParameterDescriptor[] m_parameters;
  
      /**
       * Create a descriptor for a method.
       *
       * @param name the name of the method
       * @param returnType the return type of the method
       * @param modifiers the access modifiers for method
       * @param parameters the parameters of the method
       * @param attributes any attributes associated with method
       */
      public MethodDescriptor( final String name,
                               final String returnType,
                               final int modifiers,
                               final ParameterDescriptor[] parameters,
                               final Attribute[] attributes )
      {
          super( attributes, modifiers );
          if( null == name )
          {
              throw new NullPointerException( "name" );
          }
          if( null == returnType )
          {
              throw new NullPointerException( "returnType" );
          }
          if( null == parameters )
          {
              throw new NullPointerException( "parameters" );
          }
  
          m_name = name;
          m_returnType = returnType;
          m_parameters = parameters;
      }
  
      /**
       * Return the name of the method.
       *
       * @return the name of the method.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Return the return type of the method.
       *
       * @return the return type of the method.
       */
      public String getReturnType()
      {
          return m_returnType;
      }
  
      /**
       * Return the parameters associated with method.
       *
       * @return the parameters associated with method.
       */
      public ParameterDescriptor[] getParameters()
      {
          return m_parameters;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/ParameterDescriptor.java
  
  Index: ParameterDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.metaclass.model;
  
  import java.io.Serializable;
  
  /**
   * A descriptor that describes a parameter of a Method.
   * It contains information about;
   * <ul>
   *   <li>name: the name of the parameter.
   *   This name may be automatically constructed if descriptor is
   *   created via reflection.</li>
   *   <li>type: the type of the parameter</li>
   * </ul>
   *
   * <p>Also associated with each parameter is a set of arbitrary
   * Attributes that can be used to store extra information
   * about parameter. Usually these attributes are used to store
   * information such as display name for a Parameter.</p>
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/10/21 03:44:29 $
   */
  public final class ParameterDescriptor
      implements Serializable
  {
      /**
       * The name of the Parameter in source file.
       */
      private final String m_name;
  
      /**
       * The class/interface of the Parameter.
       */
      private final String m_type;
  
      /**
       * Construct a descriptor for a parameter.
       *
       * @param name the name of the parameter
       * @param type the type of the parameter
       */
      public ParameterDescriptor( final String name,
                                  final String type )
      {
          if( null == name )
          {
              throw new NullPointerException( "name" );
          }
          if( null == type )
          {
              throw new NullPointerException( "type" );
          }
  
          m_name = name;
          m_type = type;
      }
  
      /**
       * Return the name of the parameter.
       *
       * @return the name of the parameter.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Return the type of the parameter.
       *
       * @return the type of the parameter.
       */
      public String getType()
      {
          return m_type;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-excalibur/metaclass/src/java/org/apache/excalibur/metaclass/model/package.html
  
  Index: package.html
  ===================================================================
  <html>
  <body>
  A set of classes supporting the representation of metadata about a
  particular class.
  
  <h3>Overview</h3>
  <p>This package includes a set of classes supporting the representation of
  metadata about a class. The metadata primarily consists of "attributes"
  that can be attached to classes, fields and methods.<p>
  
  <h3>Package Structure (UML)</h3>
  <p><img src="doc-files/uml.gif" border="0" /></p>
  
  </body>
  </html>
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>

Reply via email to