
com.github.davidmoten.rx.StateMachine Maven / Gradle / Ivy
package com.github.davidmoten.rx;
import com.github.davidmoten.rx.util.BackpressureStrategy;
import rx.Observable.Transformer;
import rx.Subscriber;
import rx.functions.Func0;
import rx.functions.Func2;
import rx.functions.Func3;
public final class StateMachine {
private StateMachine() {
// prevent instantiation
}
public static interface Transition
extends Func3, State> {
// override so IDEs have better suggestions for parameters
@Override
public State call(State state, In value, Subscriber subscriber);
}
public static interface Completion extends Func2, Boolean> {
// override so IDEs have better suggestions for parameters
@Override
public Boolean call(State state, Subscriber subscriber);
}
public static Builder builder() {
return new Builder();
}
public static final class Builder {
private Builder() {
// prevent instantiation from other packages
}
public Builder2 initialStateFactory(Func0 initialState) {
return new Builder2(initialState);
}
public Builder2 initialState(final State initialState) {
return new Builder2(Functions.constant0(initialState));
}
}
public static final class Builder2 {
private final Func0 initialState;
private Builder2(Func0 initialState) {
this.initialState = initialState;
}
public Builder3 transition(
Transition transition) {
return new Builder3(initialState, transition);
}
}
public static final class Builder3 {
private final Func0 initialState;
private final Transition transition;
private Completion completion = CompletionAlwaysTrueHolder.instance();
private BackpressureStrategy backpressureStrategy = BackpressureStrategy.BUFFER;
private int initialRequest = Transformers.DEFAULT_INITIAL_BATCH;
private Builder3(Func0 initialState, Transition transition) {
this.initialState = initialState;
this.transition = transition;
}
public Builder3 completion(Completion completion) {
this.completion = completion;
return this;
}
public Builder3 backpressureStrategy(
BackpressureStrategy backpressureStrategy) {
this.backpressureStrategy = backpressureStrategy;
return this;
}
public Builder3 initialRequest(int value) {
this.initialRequest = value;
return this;
}
public Transformer build() {
return Transformers.stateMachine(initialState, transition, completion,
backpressureStrategy, initialRequest);
}
}
private static final class CompletionAlwaysTrueHolder {
private static final Completion
© 2015 - 2025 Weber Informatics LLC | Privacy Policy