Class BeanPropertyMeta

java.lang.Object
org.apache.juneau.BeanPropertyMeta
All Implemented Interfaces:
Comparable<BeanPropertyMeta>

public final class BeanPropertyMeta extends Object implements Comparable<BeanPropertyMeta>
Contains metadata about a bean property.

Contains information such as type of property (e.g. field/getter/setter), class type of property value, and whether any transforms are associated with this property.

Developers will typically not need access to this class. The information provided by it is already exposed through several methods on the BeanMap API.

See Also:
  • Constructor Details

    • BeanPropertyMeta

      Creates a new BeanPropertyMeta using the contents of the specified builder.
      Parameters:
      b - The builder to copy fields from.
  • Method Details

    • builder

      public static BeanPropertyMeta.Builder builder(BeanMeta<?> beanMeta, String name)
      Parameters:
      beanMeta - The metadata on the bean
      name - The bean property name.
      Returns:
      A new builder.
    • getName

      public String getName()
      Returns the name of this bean property.
      Returns:
      The name of the bean property.
    • getBeanMeta

      public BeanMeta<?> getBeanMeta()
      Returns the bean meta that this property belongs to.
      Returns:
      The bean meta that this property belongs to.
    • getGetter

      public Method getGetter()
      Returns the getter method for this property.
      Returns:
      The getter method for this bean property, or null if there is no getter method.
    • getSetter

      public Method getSetter()
      Returns the setter method for this property.
      Returns:
      The setter method for this bean property, or null if there is no setter method.
    • getField

      public Field getField()
      Returns the field for this property.
      Returns:
      The field for this bean property, or null if there is no field associated with this bean property.
    • getInnerField

      public Field getInnerField()
      Returns the field for this property even if the field is private.
      Returns:
      The field for this bean property, or null if there is no field associated with this bean property.
    • getClassMeta

      public ClassMeta<?> getClassMeta()
      Returns the ClassMeta of the class of this property.

      If this property or the property type class has a ObjectSwap associated with it, this method returns the transformed class meta. This matches the class type that is used by the get(BeanMap,String) and set(BeanMap,String,Object) methods.

      Returns:
      The ClassMeta of the class of this property.
    • getBeanRegistry

      Returns the bean dictionary in use for this bean property.

      The order of lookup for the dictionary is as follows:

      1. Dictionary defined via @Beanp(dictionary).
      2. Dictionary defined via BeanContext.Builder.beanDictionary(Class...).
      Returns:
      The bean dictionary in use for this bean property. Never null.
    • isUri

      public boolean isUri()
      Returns true if this bean property is a URI.

      A bean property can be considered a URI if any of the following are true:

      • Property class type is URL or URI.
      • Property class type is annotated with @Uri.
      • Property getter, setter, or field is annotated with @Uri.
      Returns:
      true if this bean property is a URI.
    • isDyna

      public boolean isDyna()
      Returns true if this bean property is named "*".
      Returns:
      true if this bean property is named "*".
    • getProperties

      public String[] getProperties()
      Returns the override list of properties defined through a @Beanp(properties) annotation on this property.
      Returns:
      The list of override properties, or null if annotation not specified.
    • getDelegateFor

      Returns the metadata on the property that this metadata is a delegate for.
      Returns:
      the metadata on the property that this metadata is a delegate for, or this object if it's not a delegate.
    • get

      public Object get(BeanMap<?> m, String pName)
      Equivalent to calling BeanMap.get(Object), but is faster since it avoids looking up the property meta.
      Parameters:
      m - The bean map to get the transformed value from.
      pName - The property name if this is a dyna property (i.e. "*").
      Otherwise can be null.
      Returns:
      The property value.
      Returns null if this is a write-only property.
    • getRaw

      public Object getRaw(BeanMap<?> m, String pName)
      Equivalent to calling BeanMap.getRaw(Object), but is faster since it avoids looking up the property meta.
      Parameters:
      m - The bean map to get the transformed value from.
      pName - The property name if this is a dyna property (i.e. "*").
      Otherwise can be null.
      Returns:
      The raw property value.
    • set

      public Object set(BeanMap<?> m, String pName, Object value) throws BeanRuntimeException
      Equivalent to calling BeanMap.put(String, Object), but is faster since it avoids looking up the property meta.

      This is a no-op on a read-only property.

      Parameters:
      m - The bean map to set the property value on.
      pName - The property name if this is a dyna property (i.e. "*").
      Otherwise can be null.
      value - The value to set.
      Returns:
      The previous property value.
      Throws:
      BeanRuntimeException - If property could not be set.
    • getDynaMap

      Returns the Map object returned by the DynaBean getter.

      The DynaBean property is the property whose name is "*" and returns a map of "extra" properties on the bean.

      Parameters:
      bean - The bean.
      Returns:
      The map returned by the getter, or an empty map if the getter returned null or this isn't a DynaBean property.
      Throws:
      IllegalArgumentException - Thrown by method invocation.
      IllegalAccessException - Thrown by method invocation.
      InvocationTargetException - Thrown by method invocation.
    • setArray

      Sets an array field on this bean.

      Works on both Object and primitive arrays.

      Parameters:
      bean - The bean of the field.
      l - The collection to use to set the array field.
      Throws:
      IllegalArgumentException - Thrown by method invocation.
      IllegalAccessException - Thrown by method invocation.
      InvocationTargetException - Thrown by method invocation.
    • add

      public void add(BeanMap<?> m, String pName, Object value) throws BeanRuntimeException
      Adds a value to a Collection or array property.

      Note that adding values to an array property is inefficient for large arrays since it must copy the array into a larger array on each operation.

      Parameters:
      m - The bean of the field being set.
      pName - The property name if this is a dyna property (i.e. "*").
      Otherwise can be null.
      value - The value to add to the field.
      Throws:
      BeanRuntimeException - If field is not a collection or array.
    • add

      public void add(BeanMap<?> m, String pName, String key, Object value) throws BeanRuntimeException
      Adds a value to a Map or bean property.
      Parameters:
      m - The bean of the field being set.
      pName - The property name if this is a dyna property (i.e. "*").
      Otherwise can be null.
      key - The key to add to the field.
      value - The value to add to the field.
      Throws:
      BeanRuntimeException - If field is not a map or array.
    • getAllAnnotationsParentFirst

      public <A extends Annotation> List<A> getAllAnnotationsParentFirst(Class<A> a)
      Returns all instances of the specified annotation in the hierarchy of this bean property.

      Searches through the class hierarchy (e.g. superclasses, interfaces, packages) for all instances of the specified annotation.

      Type Parameters:
      A - The class to find annotations for.
      Parameters:
      a - The class to find annotations for.
      Returns:
      A list of annotations ordered in parent-to-child order. Never null.
    • forEachAnnotation

      public <A extends Annotation> BeanPropertyMeta forEachAnnotation(Class<A> a, Predicate<A> filter, Consumer<A> action)
      Performs an action on all matching instances of the specified annotation on the getter/setter/field of the property.
      Type Parameters:
      A - The class to find annotations for.
      Parameters:
      a - The class to find annotations for.
      filter - The filter to apply to the annotation.
      action - The action to perform against the annotation.
      Returns:
      A list of annotations ordered in child-to-parent order. Never null.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • canRead

      public boolean canRead()
      Returns true if this property can be read.
      Returns:
      true if this property can be read.
    • canWrite

      public boolean canWrite()
      Returns true if this property can be written.
      Returns:
      true if this property can be written.
    • isReadOnly

      public boolean isReadOnly()
      Returns true if this property is read-only.

      This implies the property MIGHT be writable, but that parsers should not set a value for it.

      Returns:
      true if this property is read-only.
    • isWriteOnly

      protected boolean isWriteOnly()
      Returns true if this property is write-only.

      This implies the property MIGHT be readable, but that serializers should not serialize it.

      Returns:
      true if this property is write-only.
    • compareTo

      public int compareTo(BeanPropertyMeta o)
      Specified by:
      compareTo in interface Comparable<BeanPropertyMeta>
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object