package com.fernandocejas.frodo.internal.observable;
import com.fernandocejas.frodo.internal.MessageManager;
import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint;
import rx.Notification;
import rx.Observable;
import rx.functions.Action0;
import rx.functions.Action1;
@SuppressWarnings("unchecked") class LogSchedulersObservable extends LoggableObservable {
LogSchedulersObservable(FrodoProceedingJoinPoint joinPoint,
MessageManager messageManager, ObservableInfo observableInfo) {
super(joinPoint, messageManager, observableInfo);
}
@Override <T> Observable<T> get(T type) throws Throwable {
return ((Observable<T>) joinPoint.proceed())
.doOnEach(new Action1<Notification<? super T>>() {
@Override public void call(Notification<? super T> notification) {
if (!observableInfo.getSubscribeOnThread().isPresent()
&& (notification.isOnNext() || notification.isOnError())) {
observableInfo.setSubscribeOnThread(Thread.currentThread().getName());
}
}
})
.doOnUnsubscribe(new Action0() {
@Override
public void call() {
if (!observableInfo.getObserveOnThread().isPresent()) {
observableInfo.setObserveOnThread(Thread.currentThread().getName());
}
messageManager.printObservableThreadInfo(observableInfo);
}
});
}
}