io.reactivex.rxjavafx.sources.ObservableSetSource Maven / Gradle / Ivy
/**
* Copyright 2017 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.reactivex.rxjavafx.sources;
import io.reactivex.Observable;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.rxjavafx.schedulers.JavaFxScheduler;
import io.reactivex.rxjavafx.subscriptions.JavaFxSubscriptions;
import javafx.collections.ObservableSet;
import javafx.collections.SetChangeListener;
public final class ObservableSetSource {
private ObservableSetSource() {}
public static Observable> fromObservableSet(final ObservableSet source) {
return Observable.create((ObservableOnSubscribe>) subscriber -> {
SetChangeListener listener = c -> subscriber.onNext(source);
source.addListener(listener);
subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeListener(listener)));
}).startWith(source).subscribeOn(JavaFxScheduler.platform());
}
public static Observable fromObservableSetAdds(final ObservableSet source) {
return Observable.create((ObservableOnSubscribe) subscriber -> {
SetChangeListener listener = c -> {
if (c.wasAdded()) {
subscriber.onNext(c.getElementAdded());
}
};
source.addListener(listener);
subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeListener(listener)));
}).subscribeOn(JavaFxScheduler.platform());
}
public static Observable fromObservableSetRemovals(final ObservableSet source) {
return Observable.create((ObservableOnSubscribe) subscriber -> {
SetChangeListener listener = c -> {
if (c.wasRemoved()) {
subscriber.onNext(c.getElementRemoved());
}
};
source.addListener(listener);
subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeListener(listener)));
}).subscribeOn(JavaFxScheduler.platform());
}
public static Observable> fromObservableSetChanges(final ObservableSet source) {
return Observable.create((ObservableOnSubscribe>) subscriber -> {
SetChangeListener listener = c -> {
if (c.wasRemoved()) {
subscriber.onNext(new SetChange(c.getElementRemoved(), Flag.REMOVED));
}
if (c.wasAdded()) {
subscriber.onNext(new SetChange(c.getElementAdded(), Flag.ADDED));
}
};
source.addListener(listener);
subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeListener(listener)));
}).subscribeOn(JavaFxScheduler.platform());
}
}