# Interface IBeanValueProperty<S,T>

Type Parameters:
  `S` - type of the source object
  `T` - type of the value of the property

All Superinterfaces:
  `IBeanProperty, IProperty, IValueProperty<S,T>`

public interface IBeanValueProperty<S,T> extends IBeanProperty, IValueProperty<S,T>
An `IValueProperty` extension interface with convenience methods for creating nested bean properties.

Since:
  1.2
Restriction:
  This interface is not intended to be implemented by clients.
Restriction:
  This interface is not intended to be extended by clients.

## Method Summary

Modifier and Type
Method
Description
`<E> IBeanListProperty<S,E>`
`list(String propertyName)`
Returns a master-detail combination of this property and the specified list property.
`<E> IBeanListProperty<S,E>`
`list(String propertyName, Class<E> elementType)`
Returns a master-detail combination of this property and the specified list property.
`<E> IBeanListProperty<S,E>`
`list(IBeanListProperty<? super T, E> property)`
Returns a master-detail combination of this property and the specified list property.
`<K,V> IBeanMapProperty<S,K,V>`
`map(String propertyName)`
Returns a master-detail combination of this property and the specified map property.
`<K,V> IBeanMapProperty<S,K,V>`
`map(String propertyName, Class<K> keyType, Class<V> valueType)`
Returns a master-detail combination of this property and the specified map property.
`<K,V> IBeanMapProperty<S,K,V>`
`map(IBeanMapProperty<? super T, K, V> property)`
Returns a master-detail combination of this property and the specified map property.
`<E> IBeanSetProperty<S,E>`
`set(String propertyName)`
Returns a master-detail combination of this property and the specified set property.
`<E> IBeanSetProperty<S,E>`
`set(String propertyName, Class<E> elementType)`
Returns a master-detail combination of this property and the specified set property.
`<E> IBeanSetProperty<S,E>`
`set(IBeanSetProperty<? super T, E> property)`
Returns a master-detail combination of this property and the specified set property.
`<T2> IBeanValueProperty<S,T2>`
`value(String propertyName)`
Returns a master-detail combination of this property and the specified value property.
`<T2> IBeanValueProperty<S,T2>`
`value(String propertyName, Class<T2> valueType)`
Returns a master-detail combination of this property and the specified value property.
`<T2> IBeanValueProperty<S,T2>`
`value(IBeanValueProperty<? super T, T2> property)`
Returns a master-detail combination of this property and the specified value property.

### Methods inherited from interface IBeanProperty

`getPropertyDescriptor`

### Methods inherited from interface IValueProperty

`getValue, getValueType, list, map, observe, observe, observeDetail, observeDetail, observeDetail, observeDetail, set, setValue, value, valueFactory, valueFactory`

## Method Details

### value

<T2> IBeanValueProperty<S,T2> value(String propertyName)
Returns a master-detail combination of this property and the specified value property.

Parameters:
  `propertyName` - the value property to observe. May be nested e.g. "parent.name"
Returns:
  a master-detail combination of this property and the specified value property.
See Also:
  - `value(IBeanValueProperty)`

### value

<T2> IBeanValueProperty<S,T2> value(String propertyName, Class<T2> valueType)
Returns a master-detail combination of this property and the specified value property.

Parameters:
  `propertyName` - the value property to observe. May be nested e.g. "parent.name"
  `valueType` - the value type of the named property
Returns:
  a master-detail combination of this property and the specified value property.
See Also:
  - `value(IBeanValueProperty)`

### value

<T2> IBeanValueProperty<S,T2> value(IBeanValueProperty<? super T, T2> property)
Returns a master-detail combination of this property and the specified value property. The returned property will observe the specified detail value property for the value of the master value property.

Example:

    // Observes the Node-typed "parent" property of a Node object
    IBeanValueProperty parent = BeanProperties.value(Node.class, "parent");
    // Observes the string-typed "name" property of a Node object
    IBeanValueProperty name = BeanProperties.value(Node.class, "name");
    // Observes the name of the parent of a Node object.
    IBeanValueProperty parentName = parent.value(name);

Parameters:
  `property` - the detail property to observe
Returns:
  a master-detail combination of this property and the specified value property.

### list

<E> IBeanListProperty<S,E> list(String propertyName)
Returns a master-detail combination of this property and the specified list property.

Parameters:
  `propertyName` - the list property to observe
Returns:
  a master-detail combination of this property and the specified list property.
See Also:
  - `list(IBeanListProperty)`

### list

<E> IBeanListProperty<S,E> list(String propertyName, Class<E> elementType)
Returns a master-detail combination of this property and the specified list property.

Parameters:
  `propertyName` - the list property to observe
  `elementType` - the element type of the named property
Returns:
  a master-detail combination of this property and the specified list property.
See Also:
  - `list(IBeanListProperty)`

### list

<E> IBeanListProperty<S,E> list(IBeanListProperty<? super T, E> property)
Returns a master-detail combination of this property and the specified list property. The returned property will observe the specified list property for the value of the master property.

Example:

    // Observes the Node-typed "parent" property of a Node object.
    IBeanValueProperty parent = BeanProperties.value(Node.class, "parent");
    // Observes the List-typed "children" property of a Node object
    // where the elements are Node objects
    IBeanListProperty children = BeanProperties.list(Node.class, "children",
                    Node.class);
    // Observes the children of the parent (siblings) of a Node object.
    IBeanListProperty siblings = parent.list(children);

Parameters:
  `property` - the detail property to observe
Returns:
  a master-detail combination of this property and the specified list property.

### set

<E> IBeanSetProperty<S,E> set(String propertyName)
Returns a master-detail combination of this property and the specified set property.

Parameters:
  `propertyName` - the set property to observe
Returns:
  a master-detail combination of this property and the specified set property.
See Also:
  - `set(IBeanSetProperty)`

### set

<E> IBeanSetProperty<S,E> set(String propertyName, Class<E> elementType)
Returns a master-detail combination of this property and the specified set property.

Parameters:
  `propertyName` - the set property to observe
  `elementType` - the element type of the named property
Returns:
  a master-detail combination of this property and the specified set property.
See Also:
  - `set(IBeanSetProperty)`

### set

<E> IBeanSetProperty<S,E> set(IBeanSetProperty<? super T, E> property)
Returns a master-detail combination of this property and the specified set property. The returned property will observe the specified set property for the value of the master property.

Example:

    // Observes the Node-typed "parent" property of a Node object.
    IBeanValueProperty parent = BeanProperties.value(Node.class, "parent");
    // Observes the Set-typed "children" property of a Node object
    // where the elements are Node objects
    IBeanSetProperty children = BeanProperties.set(Node.class, "children",
                    Node.class);
    // Observes the children of the parent (siblings) of a Node object.
    IBeanSetProperty siblings = parent.set(children);

Parameters:
  `property` - the detail property to observe
Returns:
  a master-detail combination of this property and the specified set property.

### map

<K,V> IBeanMapProperty<S,K,V> map(String propertyName)
Returns a master-detail combination of this property and the specified map property.

Parameters:
  `propertyName` - the map property to observe
Returns:
  a master-detail combination of this property and the specified map property.
See Also:
  - `map(IBeanMapProperty)`

### map

<K,V> IBeanMapProperty<S,K,V> map(String propertyName, Class<K> keyType, Class<V> valueType)
Returns a master-detail combination of this property and the specified map property.

Parameters:
  `propertyName` - the map property to observe
  `keyType` - the key type of the named property
  `valueType` - the value type of the named property
Returns:
  a master-detail combination of this property and the specified map property.
See Also:
  - `map(IBeanMapProperty)`

### map

<K,V> IBeanMapProperty<S,K,V> map(IBeanMapProperty<? super T, K, V> property)
Returns a master-detail combination of this property and the specified map property. The returned property will observe the specified map property for the value of the master property.

Example:

    // Observes the Contact-typed "supervisor" property of a
    // Contact class
    IBeanValueProperty supervisor = BeanProperties.value(Contact.class,
                    "supervisor");
    // Observes the property "phoneNumbers" of a Contact object--a property mapping
    // from PhoneNumberType to PhoneNumber "set-typed "children",
    IBeanMapProperty phoneNumbers = BeanProperties.map(Contact.class,
                    "phoneNumbers", PhoneNumberType.class, PhoneNumber.class);
    // Observes the phone numbers of a contact's supervisor:
    IBeanMapProperty supervisorPhoneNumbers = supervisor.map(phoneNumbers);

Parameters:
  `property` - the detail property to observe
Returns:
  a master-detail combination of this property and the specified map property.