Skip to content

Commit 89a2b67

Browse files
committed
Merge pull request #21 from thomasnield/observable_changes
Implement fromObservableValueChanges
2 parents 2e07b63 + 4c504a0 commit 89a2b67

File tree

3 files changed

+47
-13
lines changed

3 files changed

+47
-13
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package rx.javafx.sources;
2+
3+
public final class Change<T> {
4+
private final T oldVal;
5+
private final T newVal;
6+
7+
public Change(T oldVal, T newVal) {
8+
this.oldVal = oldVal;
9+
this.newVal = newVal;
10+
}
11+
public T getOldVal() {
12+
return oldVal;
13+
}
14+
public T getNewVal() {
15+
return newVal;
16+
}
17+
}

src/main/java/rx/javafx/sources/ObservableValueSource.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import javafx.beans.value.ObservableValue;
55
import rx.Observable;
66
import rx.Subscriber;
7-
import rx.functions.Action0;
87
import rx.subscriptions.JavaFxSubscriptions;
98

109
public class ObservableValueSource {
@@ -18,25 +17,31 @@ public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxO
1817
public void call(final Subscriber<? super T> subscriber) {
1918
subscriber.onNext(fxObservable.getValue());
2019

21-
final ChangeListener<T> listener = new ChangeListener<T>() {
22-
@Override
23-
public void changed(final ObservableValue<? extends T> observableValue, final T prev, final T current) {
24-
subscriber.onNext(current);
25-
}
26-
};
20+
final ChangeListener<T> listener = (observableValue, prev, current) -> subscriber.onNext(current);
2721

2822
fxObservable.addListener(listener);
2923

30-
subscriber.add(JavaFxSubscriptions.unsubscribeInEventDispatchThread(new Action0() {
31-
@Override
32-
public void call() {
33-
fxObservable.removeListener(listener);
34-
}
35-
}));
24+
subscriber.add(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener)));
3625

3726
}
3827
});
3928
}
29+
/**
30+
* @see rx.observables.JavaFxObservable#fromObservableValue
31+
*/
32+
public static <T> Observable<Change<T>> fromObservableValueChanges(final ObservableValue<T> fxObservable) {
33+
return Observable.create(new Observable.OnSubscribe<Change<T>>() {
34+
@Override
35+
public void call(final Subscriber<? super Change<T>> subscriber) {
36+
37+
final ChangeListener<T> listener = (observableValue, prev, current) -> subscriber.onNext(new Change<>(prev,current));
4038

39+
fxObservable.addListener(listener);
40+
41+
subscriber.add(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener)));
42+
43+
}
44+
});
45+
}
4146

4247
}

src/main/java/rx/observables/JavaFxObservable.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javafx.event.EventType;
2222
import javafx.scene.Node;
2323
import rx.Observable;
24+
import rx.javafx.sources.Change;
2425
import rx.javafx.sources.NodeEventSource;
2526
import rx.javafx.sources.ObservableValueSource;
2627

@@ -50,4 +51,15 @@ public static <T extends Event> Observable<T> fromNodeEvents(final Node node, fi
5051
public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxObservable) {
5152
return ObservableValueSource.fromObservableValue(fxObservable);
5253
}
54+
55+
/**
56+
* Create an rx Observable from a javafx ObservableValue, and emits changes with old and new value pairs
57+
*
58+
* @param fxObservable the observed ObservableValue
59+
* @param <T> the type of the observed value
60+
* @return an Observable emitting values as the wrapped ObservableValue changes
61+
*/
62+
public static <T> Observable<Change<T>> fromObservableValueChanges(final ObservableValue<T> fxObservable) {
63+
return ObservableValueSource.fromObservableValueChanges(fxObservable);
64+
}
5365
}

0 commit comments

Comments
 (0)