
com.github.davidmoten.rx.internal.operators.OnSubscribeDoOnEmpty Maven / Gradle / Ivy
package com.github.davidmoten.rx.internal.operators;
import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Subscriber;
import rx.exceptions.Exceptions;
import rx.functions.Action0;
public final class OnSubscribeDoOnEmpty implements OnSubscribe {
private final Action0 onEmpty;
private Observable observable;
public OnSubscribeDoOnEmpty(Observable observable, Action0 onEmpty) {
this.observable = observable;
this.onEmpty = onEmpty;
}
@Override
public void call(final Subscriber super T> child) {
Subscriber parent = createSubscriber(child, onEmpty);
observable.unsafeSubscribe(parent);
}
private static Subscriber createSubscriber(final Subscriber super T> child, final Action0 onEmpty) {
return new Subscriber(child) {
private boolean isEmpty = true;
@Override
public void onCompleted() {
if (isEmpty) {
try {
onEmpty.call();
} catch (Throwable e) {
Exceptions.throwOrReport(e,this);
return;
}
if (!isUnsubscribed()) {
child.onCompleted();
}
} else {
child.onCompleted();
}
}
@Override
public void onError(Throwable e) {
child.onError(e);
}
@Override
public void onNext(T t) {
isEmpty = false;
child.onNext(t);
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy