Package org.apache.cayenne.reflect

## Interface PropertyDescriptor

- All Known Subinterfaces:
    `ArcProperty`, `AttributeProperty`, `Property`, `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

    All Methods Instance Methods Abstract Methods Default Methods
    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 Detail

    - #### 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 `Util.nullSafeEquals(Object, Object)` method.
      Parameters:
        `value1` - to compare
        `value2` - to compare
      Returns:
        true if given values are equal
      Since:
        4.2