# Interface PropertyDescriptor

All Known Subinterfaces:
  `ArcProperty, AttributeProperty, ToManyMapProperty, ToManyProperty, ToOneProperty`

All Known Implementing Classes:
  `BaseArcProperty, BaseProperty, BaseToManyProperty, BaseToOneProperty, SimpleAttributeProperty`

public interface PropertyDescriptor
Defines bean property API used by Cayenne to access object data, do faulting and graph maintenance tasks.

Since:
  4.0

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default boolean`
  `equals(Object value1, Object value2)`
  Allows to use special logic to compare values for equality as in rare cases it is not sufficient to use the default equals() method.
  `String`
  `getName()`
  Returns property name.
  `void`
  `injectValueHolder(Object object)`
  If a property is implemented as a ValueHolder, this operation would create an unfaulted value holder and inject it into the object, if an object doesn't have it set yet.
  `Object`
  `readProperty(Object object)`
  Returns a property value, inflating unresolved object if need.
  `Object`
  `readPropertyDirectly(Object object)`
  Returns a property value of an object without disturbing the object fault status.
  `boolean`
  `visit(PropertyVisitor visitor)`
  A visitor accept method.
  `void`
  `writeProperty(Object object, Object oldValue, Object newValue)`
  Sets a property value, inflating unresolved object if need.
  `void`
  `writePropertyDirectly(Object object, Object oldValue, Object newValue)`
  Sets a property value of an object without disturbing the object fault status.

- ## Method Details

  - ### getName

    String getName()
    Returns property name.

  - ### readPropertyDirectly

    Object readPropertyDirectly(Object object) throws PropertyException
    Returns a property value of an object without disturbing the object fault status.
    Throws:
      `PropertyException`

  - ### readProperty

    Object readProperty(Object object) throws PropertyException
    Returns a property value, inflating unresolved object if need.
    Throws:
      `PropertyException`

  - ### writePropertyDirectly

    void writePropertyDirectly(Object object, Object oldValue, Object newValue) throws PropertyException
    Sets a property value of an object without disturbing the object fault status. Old value of the property is specified as a hint and can be ignored by the property implementor.
    Throws:
      `PropertyException`

  - ### writeProperty

    void writeProperty(Object object, Object oldValue, Object newValue) throws PropertyException
    Sets a property value, inflating unresolved object if need. Old value of the property is specified as a hint and can be ignored by the property implementor.
    Throws:
      `PropertyException`

  - ### visit

    boolean visit(PropertyVisitor visitor)
    A visitor accept method.
    Returns:
      a status returned by the corresponding callback method of the visitor. It serves as an indication of whether peer properties processing is still needed.

  - ### injectValueHolder

    void injectValueHolder(Object object) throws PropertyException
    If a property is implemented as a ValueHolder, this operation would create an unfaulted value holder and inject it into the object, if an object doesn't have it set yet.
    Throws:
      `PropertyException`

  - ### equals

    default boolean equals(Object value1, Object value2)
    Allows to use special logic to compare values for equality as in rare cases it is not sufficient to use the default equals() method. Default implementation uses `Objects.deepEquals(Object, Object)`.
    Parameters:
      `value1` - to compare
      `value2` - to compare
    Returns:
      true if given values are equal
    Since:
      4.2