001package arez.spy;
002
003import arez.Arez;
004import java.util.Map;
005import java.util.Objects;
006import javax.annotation.Nonnull;
007import javax.annotation.Nullable;
008
009/**
010 * Notification when ObservableValue has changed.
011 */
012public final class ObservableValueChangeEvent
013  implements SerializableEvent
014{
015  @Nonnull
016  private final ObservableValueInfo _observableValue;
017  @Nullable
018  private final Object _value;
019
020  public ObservableValueChangeEvent( @Nonnull final ObservableValueInfo observableValue, @Nullable final Object value )
021  {
022    _observableValue = Objects.requireNonNull( observableValue );
023    _value = value;
024  }
025
026  @Nonnull
027  public ObservableValueInfo getObservableValue()
028  {
029    return _observableValue;
030  }
031
032  @Nullable
033  public Object getValue()
034  {
035    return _value;
036  }
037
038  @Override
039  public void toMap( @Nonnull final Map<String, Object> map )
040  {
041    map.put( "type", "ObservableValueChange" );
042    map.put( "name", getObservableValue().getName() );
043    if ( Arez.arePropertyIntrospectorsEnabled() )
044    {
045      map.put( "value", getValue() );
046    }
047  }
048}