// Path: easymvp-rx2-api/src/main/java/easymvp/executer/PostExecutionThread.java
// public interface PostExecutionThread {
//     Scheduler getScheduler();
// }
// 
// Path: easymvp-rx-api/src/main/java/easymvp/executer/UseCaseExecutor.java
// public interface UseCaseExecutor {
//     Scheduler getScheduler();
// }


import javax.annotation.Nullable;
import easymvp.executer.PostExecutionThread;
import easymvp.executer.UseCaseExecutor;
import rx.Scheduler;
package easymvp.usecase;



/**
 * Each {@code UseCase} of the system orchestrate the flow of data to and from the entities.
 * <p>
 * Outer layers of system can execute use cases by calling {@link #execute(Object)}} method. Also
 * you can use {@link #useCaseExecutor} to execute the job in a background thread and {@link
 * #postExecutionThread} to post the result to another thread(usually UI thread).
 *
 * @param <P> The response type of a use case.
 * @param <Q> The request type of a use case.
 * @author Saeed Masoumi (saeed@6thsolution.com)
 */
public abstract class UseCase<P, Q> {

    private final UseCaseExecutor useCaseExecutor;
// Path: easymvp-rx2-api/src/main/java/easymvp/executer/PostExecutionThread.java
// public interface PostExecutionThread {
//     Scheduler getScheduler();
// }
// 
// Path: easymvp-rx-api/src/main/java/easymvp/executer/UseCaseExecutor.java
// public interface UseCaseExecutor {
//     Scheduler getScheduler();
// }


// Path: easymvp-rx-api/src/main/java/easymvp/usecase/UseCase.java
import javax.annotation.Nullable;
import easymvp.executer.PostExecutionThread;
import easymvp.executer.UseCaseExecutor;
import rx.Scheduler;

package easymvp.usecase;



/**
 * Each {@code UseCase} of the system orchestrate the flow of data to and from the entities.
 * <p>
 * Outer layers of system can execute use cases by calling {@link #execute(Object)}} method. Also
 * you can use {@link #useCaseExecutor} to execute the job in a background thread and {@link
 * #postExecutionThread} to post the result to another thread(usually UI thread).
 *
 * @param <P> The response type of a use case.
 * @param <Q> The request type of a use case.
 * @author Saeed Masoumi (saeed@6thsolution.com)
 */
public abstract class UseCase<P, Q> {

    private final UseCaseExecutor useCaseExecutor;
    private final PostExecutionThread postExecutionThread;