Package org.eclipse.core.databinding.observable.value

# Class LocalDateTimeObservableValue

java.lang.Object
org.eclipse.core.databinding.observable.AbstractObservable
org.eclipse.core.databinding.observable.value.AbstractObservableValue<LocalDateTime>
org.eclipse.core.databinding.observable.value.LocalDateTimeObservableValue

All Implemented Interfaces:
  `IObservable`, `IObservableValue<LocalDateTime>`

public final class LocalDateTimeObservableValue extends AbstractObservableValue<LocalDateTime>
An `IObservableValue`<`LocalDateTime`> which supports scenarios where the date and time are presented as separate elements in the user interface. This class combines the year, month, and day portion of the date observable (an `IObservableValue`<`LocalDate`>) and the hour, minute, second, and millisecond portion of the time observable (also an `IObservableValue`<`LocalTime`>).

This observable's value will be null whenever the date observable's value is null. Otherwise the value is the combination of the date portion of the date observable and the time portion of the time observable (a time observable value of null is treated the same as 0:00:00.000).

When setting the value of this observable, setting a null value will set null on the date observable, and set a time of 0:00:00.000 on the time observable. When setting non-null values, the non-applicable fields of each observable are left intact. That is, the hour, minute, second and millisecond components of the date observable are preserved, and the year, month and day components of the time observable are preserved.

The observables used for the date and time component may impose their own restrictions with regard to supported values. For example some observables do not allow a null value, because the underlying widget lacks support for a null value (example: DateTime).

One use for this class is binding a date-and-time value to two separate user interface elements, one for editing date and one for editing time:

     DataBindingContext bindingContext = new DataBindingContext();
     IObservableValue&lt;LocalDateTime&gt;  beanValue = BeansObservables.observeValue(...);
     IObservableValue&lt;LocalDate&gt; dateObservable = WidgetProperties.localDateSelection().observe(dateWidget);
     IObservableValue&lt;LocalTime&gt; timeObservable = WidgetProperties.localTimeSelection().observe(timeWidget);
     bindingContext.bindValue(new LocalDateTimeObservableValue(dateObservable, timeObservable), beanValue);

A second use is editing only the date or time value of a date-and-time value. This can be accomplished by using a widget-specific observable for the editable value and a `WritableValue` as a container for the fixed value. The example below allows editing the date while preserving the time:

     DataBindingContext bindingContext = new DataBindingContext();
     IObservableValue<LocalDateTime> beanValue = BeansObservables.observeValue(...);
     IObservableValue<LocalDate> dateObservable = WidgetProperties.localDateSelection().observe(dateWidget);
     IObservableValue<LocalTime> timeObservable = new WritableValue<>(dateObservable.getRealm(),
     		beanValue.getValue(), LocalTime.class);
     bindingContext.bindValue(new LocalDateTimeObservableValue(dateObservable, timeObservable), beanValue);

Since:
  1.10

## Constructor Summary

Constructors
Constructor
Description
`LocalDateTimeObservableValue(IObservableValue<LocalDate> dateObservable, IObservableValue<LocalTime> timeObservable)`
Constructs a DateAndTimeObservableValue with the specified constituent observables.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`addListener(Object listenerType, IObservablesListener listener)`
`protected Object`
`clone()`
`void`
`dispose()`
Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.
`protected LocalDateTime`
`doGetValue()`
`protected void`
`doSetValue(LocalDateTime combined)`
Template method for setting the value of the observable.
`protected void`
`fireEvent(ObservableEvent event)`
`protected void`
`firstListenerAdded()`
`Realm`
`getRealm()`
`Object`
`getValueType()`
The value type of this observable value, or `null` if this observable value is untyped.
`protected boolean`
`hasListeners()`
`boolean`
`isStale()`
Returns whether the state of this observable is stale and is expected to change soon.
`protected void`
`lastListenerRemoved()`
`protected void`
`removeListener(Object listenerType, IObservablesListener listener)`

### Methods inherited from class org.eclipse.core.databinding.observable.value.AbstractObservableValue

`addValueChangeListener, fireChange, fireValueChange, getValue, removeValueChangeListener, setValue`

### Methods inherited from class org.eclipse.core.databinding.observable.AbstractObservable

`addChangeListener, addDisposeListener, addStaleListener, checkRealm, fireStale, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListener`

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.eclipse.core.databinding.observable.IObservable

`addChangeListener, addDisposeListener, addStaleListener, getRealm, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListener`

## Constructor Details

### LocalDateTimeObservableValue

public LocalDateTimeObservableValue(IObservableValue<LocalDate> dateObservable, IObservableValue<LocalTime> timeObservable)
Constructs a DateAndTimeObservableValue with the specified constituent observables.

Parameters:
  `dateObservable` - the observable used for the date component (year, month and day) of the constructed observable.
  `timeObservable` - the observable used for the time component (hour, minute, second and millisecond) of the constructed observable.

## Method Details

### getValueType

public Object getValueType()
Description copied from interface: `IObservableValue`
The value type of this observable value, or `null` if this observable value is untyped.

Returns:
  the value type, or `null`

### firstListenerAdded

protected void firstListenerAdded()

### lastListenerRemoved

protected void lastListenerRemoved()

### doGetValue

protected LocalDateTime doGetValue()

Specified by:
  `doGetValue` in class `AbstractObservableValue<LocalDateTime>`

### doSetValue

protected void doSetValue(LocalDateTime combined)
Description copied from class: `AbstractObservableValue`
Template method for setting the value of the observable. By default the method throws an `UnsupportedOperationException`.

Overrides:
  `doSetValue` in class `AbstractObservableValue<LocalDateTime>`
Parameters:
  `combined` - the value to set

### isStale

public boolean isStale()
Description copied from interface: `IObservable`
Returns whether the state of this observable is stale and is expected to change soon. A non-stale observable that becomes stale will notify its stale listeners. A stale object that becomes non-stale does so by changing its state and notifying its change listeners, it does not notify its stale listeners about becoming non-stale. Clients that do not expect asynchronous changes may ignore staleness of observable objects.

Specified by:
  `isStale` in interface `IObservable`
Overrides:
  `isStale` in class `AbstractObservableValue<LocalDateTime>`
Returns:
  true if this observable's state is stale and will change soon.

### dispose

public void dispose()
Description copied from interface: `IObservable`
Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.

Specified by:
  `dispose` in interface `IObservable`
Overrides:
  `dispose` in class `AbstractObservable`

### addListener

protected void addListener(Object listenerType, IObservablesListener listener)

Parameters:
  `listenerType` - arbitrary object to identify a type of the listener
  `listener` - the listener to add; not `null`

### removeListener

protected void removeListener(Object listenerType, IObservablesListener listener)

Parameters:
  `listenerType` - arbitrary object to identify a type of the listener
  `listener` - the listener to remove; not `null`

### hasListeners

protected boolean hasListeners()

### fireEvent

protected void fireEvent(ObservableEvent event)

### getRealm

public Realm getRealm()

Returns:
  Returns the realm.

### clone

protected Object clone() throws CloneNotSupportedException

Overrides:
  `clone` in class `Object`
Throws:
  `CloneNotSupportedException`