package com.fernandocejas.frodo.internal.observable;
import com.fernandocejas.frodo.annotation.RxLogObservable;
import com.fernandocejas.frodo.internal.MessageManager;
import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint;
import java.lang.annotation.Annotation;
@SuppressWarnings("unchecked") public class LoggableObservableFactory {
private final FrodoProceedingJoinPoint joinPoint;
private final MessageManager messageManager;
private final ObservableInfo observableInfo;
public LoggableObservableFactory(FrodoProceedingJoinPoint joinPoint,
MessageManager messageManager, ObservableInfo observableInfo) {
this.joinPoint = joinPoint;
this.messageManager = messageManager;
this.observableInfo = observableInfo;
}
LoggableObservable create(Annotation annotation) {
final Class observableType = joinPoint.getGenericReturnTypes().get(0);
if (annotation != null) {
switch (((RxLogObservable) annotation).value()) {
case NOTHING:
return new LogNothingObservable(joinPoint, messageManager, observableInfo);
case STREAM:
return new LogStreamObservable(joinPoint, messageManager, observableInfo);
case SCHEDULERS:
return new LogSchedulersObservable(joinPoint, messageManager, observableInfo);
case EVENTS:
return new LogEventsObservable(joinPoint, messageManager, observableInfo);
case EVERYTHING:
default:
return new LogEverythingObservable(joinPoint, messageManager, observableInfo);
}
} else {
return new LogNothingObservable(joinPoint, messageManager, observableInfo);
}
}
}