All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 child) {
        Subscriber parent = createSubscriber(child, onEmpty);
        observable.unsafeSubscribe(parent);
    }

    private static  Subscriber createSubscriber(final Subscriber 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