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

io.reactiverse.reactivecontexts.propagators.rxjava1.ContextPropagatorOnSingleCreateAction 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.Single;
import rx.Single.OnSubscribe;
import rx.SingleSubscriber;
import rx.functions.Func1;

public class ContextPropagatorOnSingleCreateAction implements Func1 {

	@Override
	public OnSubscribe call(OnSubscribe t) {
		return new ContextCapturerSingle(t);
	}
	
	final static class ContextCapturerSingle implements Single.OnSubscribe {

	    final Single.OnSubscribe source;

		private ContextState states;

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

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

	    static final class OnAssemblySingleSubscriber extends SingleSubscriber {

	        final SingleSubscriber actual;
			private final ContextState states;


	        public OnAssemblySingleSubscriber(SingleSubscriber actual, ContextState states) {
	            this.actual = actual;
	            this.states = states;
	            actual.add(this);
	        }

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

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

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy