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

io.reactiverse.reactivecontexts.propagators.rxjava1.ContextPropagatorOnCompleteCreateAction Maven / Gradle / Ivy

The newest version!
package io.reactiverse.reactivecontexts.propagators.rxjava1;

import io.reactiverse.reactivecontexts.core.Context;
import io.reactiverse.reactivecontexts.core.ContextState;
import rx.Completable.OnSubscribe;
import rx.CompletableSubscriber;
import rx.Subscription;
import rx.functions.Func1;

public class ContextPropagatorOnCompleteCreateAction implements Func1 {

	@Override
	public OnSubscribe call(OnSubscribe t) {
		return new ContextCapturerCompletable(t);
	}

	final static class ContextCapturerCompletable implements OnSubscribe {

	    final OnSubscribe source;

		private ContextState states;

	    public ContextCapturerCompletable(OnSubscribe source) {
	        this.source = source;
	        states = Context.capture();
	    }

	    @Override
	    public void call(CompletableSubscriber t) {
        	ContextState previousStates = states.install();
			try {
	    		source.call(new OnAssemblyCompletableSubscriber(t, states));
			}finally {
				previousStates.restore();
			}
	    }

	    static final class OnAssemblyCompletableSubscriber implements CompletableSubscriber {

	        final CompletableSubscriber actual;
			private final ContextState states;


	        public OnAssemblyCompletableSubscriber(CompletableSubscriber actual, ContextState states) {
	            this.actual = actual;
	            this.states = states;
	        }

	        @Override
	        public void onError(Throwable e) {
	        	ContextState previousStates = states.install();
				try {
					actual.onError(e);
				}finally {
					previousStates.restore();
				}
	        }

	        @Override
	        public void onCompleted() {
	        	ContextState previousStates = states.install();
				try {
					actual.onCompleted();
				}finally {
					previousStates.restore();
				}
	        }

			@Override
			public void onSubscribe(Subscription d) {
				ContextState previousStates = states.install();
				try {
					actual.onSubscribe(d);
				}finally {
					previousStates.restore();
				}
			}
	    }
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy