
com.cookingfox.lapasse.impl.state.manager.DefaultRxStateManager Maven / Gradle / Ivy
The newest version!
package com.cookingfox.lapasse.impl.state.manager;
import com.cookingfox.lapasse.api.event.Event;
import com.cookingfox.lapasse.api.state.State;
import com.cookingfox.lapasse.api.state.manager.RxStateManager;
import com.cookingfox.lapasse.api.state.manager.StateManager;
import com.cookingfox.lapasse.api.state.observer.OnStateChanged;
import com.cookingfox.lapasse.api.state.observer.StateChanged;
import com.cookingfox.lapasse.impl.state.observer.StateChangedVo;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Action0;
import rx.subscriptions.Subscriptions;
/**
* Default implementation of {@link StateManager}.
*
* @param The concrete type of the state object.
*/
public class DefaultRxStateManager
extends DefaultStateManager
implements RxStateManager {
//----------------------------------------------------------------------------------------------
// CONSTRUCTOR
//----------------------------------------------------------------------------------------------
public DefaultRxStateManager(S initialState) {
super(initialState);
}
//----------------------------------------------------------------------------------------------
// PUBLIC METHODS
//----------------------------------------------------------------------------------------------
@Override
public Observable> observeStateChanges() {
return Observable.create(new Observable.OnSubscribe>() {
@Override
public void call(final Subscriber super StateChanged> subscriber) {
// create new listener
final OnStateChanged listener = new OnStateChanged() {
@Override
public void onStateChanged(final S state, final Event event) {
// wrap parameters with VO
subscriber.onNext(new StateChangedVo<>(event, state));
}
};
// add listener
addStateChangedListener(listener);
// remove listener on unsubscribe
subscriber.add(Subscriptions.create(new Action0() {
@Override
public void call() {
// complete subscriber
subscriber.onCompleted();
// remove listener, if not yet cleared
if (stateChangedListeners.contains(listener)) {
removeStateChangedListener(listener);
}
}
}));
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy