// Path: app/src/main/java/com/tonilopezmr/sample/executor/Executor.java
// public interface Executor {
//     void run(final Interactor interactor);
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/MainThread.java
// public interface MainThread {
//     void post(final Runnable runnable);
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/MainThreadImp.java
// public class MainThreadImp implements MainThread{
// 
//     private Handler handler;
// 
//     public MainThreadImp() {
//         this.handler = new Handler(Looper.getMainLooper());
//     }
// 
//     @Override
//     public void post(final Runnable runnable) {
//         handler.post(runnable);
//     }
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/ThreadExecutor.java
// public class ThreadExecutor implements Executor{
// 
//     private static final int CORE_POOL_SIZE = 3;
//     private static final int MAX_POOL_SIZE = 5;
//     private static final int KEEP_ALIVE_TIME = 120;
//     private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
//     private static final BlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>();
// 
//     private ThreadPoolExecutor threadPoolexecutor;
// 
//     public ThreadExecutor() {
//         int corePoolSize = CORE_POOL_SIZE;
//         int maxPoolSize = MAX_POOL_SIZE;
//         int keepAliveTime = KEEP_ALIVE_TIME;
//         TimeUnit timeUnit = TIME_UNIT;
//         BlockingQueue<Runnable> workQueue = WORK_QUEUE;
// 
//         threadPoolexecutor =
//                 new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, timeUnit, workQueue);
//     }
// 
//     @Override
//     public void run(final Interactor interactor) {
//         if (interactor == null) {
//             throw new IllegalArgumentException("Interactor to execute can't be null");
//         }
// 
//         threadPoolexecutor.submit(interactor);
//     }
// 
// 
// }


import com.tonilopezmr.sample.executor.Executor;
import com.tonilopezmr.sample.executor.MainThread;
import com.tonilopezmr.sample.executor.MainThreadImp;
import com.tonilopezmr.sample.executor.ThreadExecutor;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
package com.tonilopezmr.sample.di.modules;




/**
 *
 * @author Toni
 */
@Module(
        complete = false,
        library = true
)
public final class ExecutorModule {

    @Provides
    @Singleton
    public Executor provideThreadExecutor(){
        return new ThreadExecutor();
    }

    @Provides
// Path: app/src/main/java/com/tonilopezmr/sample/executor/Executor.java
// public interface Executor {
//     void run(final Interactor interactor);
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/MainThread.java
// public interface MainThread {
//     void post(final Runnable runnable);
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/MainThreadImp.java
// public class MainThreadImp implements MainThread{
// 
//     private Handler handler;
// 
//     public MainThreadImp() {
//         this.handler = new Handler(Looper.getMainLooper());
//     }
// 
//     @Override
//     public void post(final Runnable runnable) {
//         handler.post(runnable);
//     }
// }
// 
// Path: app/src/main/java/com/tonilopezmr/sample/executor/ThreadExecutor.java
// public class ThreadExecutor implements Executor{
// 
//     private static final int CORE_POOL_SIZE = 3;
//     private static final int MAX_POOL_SIZE = 5;
//     private static final int KEEP_ALIVE_TIME = 120;
//     private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
//     private static final BlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>();
// 
//     private ThreadPoolExecutor threadPoolexecutor;
// 
//     public ThreadExecutor() {
//         int corePoolSize = CORE_POOL_SIZE;
//         int maxPoolSize = MAX_POOL_SIZE;
//         int keepAliveTime = KEEP_ALIVE_TIME;
//         TimeUnit timeUnit = TIME_UNIT;
//         BlockingQueue<Runnable> workQueue = WORK_QUEUE;
// 
//         threadPoolexecutor =
//                 new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, timeUnit, workQueue);
//     }
// 
//     @Override
//     public void run(final Interactor interactor) {
//         if (interactor == null) {
//             throw new IllegalArgumentException("Interactor to execute can't be null");
//         }
// 
//         threadPoolexecutor.submit(interactor);
//     }
// 
// 
// }


// Path: app/src/main/java/com/tonilopezmr/sample/di/modules/ExecutorModule.java
import com.tonilopezmr.sample.executor.Executor;
import com.tonilopezmr.sample.executor.MainThread;
import com.tonilopezmr.sample.executor.MainThreadImp;
import com.tonilopezmr.sample.executor.ThreadExecutor;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;

package com.tonilopezmr.sample.di.modules;




/**
 *
 * @author Toni
 */
@Module(
        complete = false,
        library = true
)
public final class ExecutorModule {

    @Provides
    @Singleton
    public Executor provideThreadExecutor(){
        return new ThreadExecutor();
    }

    @Provides
    @Singleton