package com.fernandocejas.frodo.internal.observable; import com.fernandocejas.frodo.annotation.RxLogObservable; import com.fernandocejas.frodo.core.strings.Strings; import com.fernandocejas.frodo.internal.MessageManager; import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint; import java.lang.annotation.Annotation; @SuppressWarnings("unchecked") public class FrodoObservable { private final FrodoProceedingJoinPoint joinPoint; private final MessageManager messageManager; private final ObservableInfo observableInfo; private final LoggableObservableFactory observableFactory; private String observeOnThread = Strings.EMPTY; public FrodoObservable(FrodoProceedingJoinPoint joinPoint, MessageManager messageManager, LoggableObservableFactory observableFactory) { this.joinPoint = joinPoint; this.messageManager = messageManager; this.observableInfo = new ObservableInfo(joinPoint); this.observableFactory = observableFactory; } public rx.Observable getObservable() throws Throwable { messageManager.printObservableInfo(observableInfo); final Class observableType = joinPoint.getGenericReturnTypes().get(0); final Annotation annotation = joinPoint.getAnnotation(RxLogObservable.class); return observableFactory.create(annotation).get(observableType); } }