// Path: domain/src/main/java/sergio/vasco/androidforexample/domain/abstractions/Bus.java
// public interface Bus {
//   void post(Object object);
//   void postInmediate(Object object);
//   void register(Object object);
//   void unregister(Object object);
// }
// 
// Path: domain/src/main/java/sergio/vasco/androidforexample/domain/interactors/InteractorInvoker.java
// public interface InteractorInvoker {
//   void execute(Interactor interactor);
//   void execute(Interactor interactor, InteractorPriority priority);
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/BusImp.java
// public class BusImp extends EventBus implements Bus {
// 
//   private static final Handler handler = new Handler(Looper.getMainLooper());
// 
//   @Override public void post(final Object event) {
//     handler.post(new Runnable() {
//       @Override public void run() {
//         BusImp.super.post(event);
//       }
//     });
//   }
// 
//   @Override public void postInmediate(final Object event) {
//     handler.postAtFrontOfQueue(new Runnable() {
//       @Override public void run() {
//         BusImp.super.post(event);
//       }
//     });
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/InteractorInvokerImp.java
// public class InteractorInvokerImp implements InteractorInvoker {
// 
//   private JobManager jobManager;
// 
//   public InteractorInvokerImp(JobManager jobManager) {
//     this.jobManager = jobManager;
//   }
// 
//   @Override public void execute(Interactor interactor) {
//     execute(interactor, InteractorPriority.MEDIUM);
//   }
// 
//   @Override public void execute(Interactor interactor, InteractorPriority priority) {
//     jobManager.addJob(interactorToJob(interactor, priority));
//   }
// 
//   private Job interactorToJob(Interactor interactor, InteractorPriority priority) {
//     Params params = new Params(priority.getPriorityValue());
//     return new InteractorJobImp(params, interactor);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/InteractorJobImp.java
// public class InteractorJobImp extends Job {
// 
//   private Interactor interactor;
// 
//   public InteractorJobImp(Params params, Interactor interactor) {
//     super(params);
//     this.interactor = interactor;
//   }
// 
//   @Override public void onAdded() {
//   }
// 
//   @Override public void onRun() throws Throwable {
//     interactor.execute();
//    }
// 
//   @Override protected void onCancel() {
//   }
// 
//   @Override protected boolean shouldReRunOnThrowable(Throwable throwable) {
//     return false;
//   }
// }
// 
// Path: data/src/main/java/sergio/vasco/realmforandroid/data/repository/database/DataBaseService.java
// public interface DataBaseService {
//   void getInstance();
//   void insert(RealmObject table);
//   <E extends RealmObject> RealmResults<E> query (Class<E> genericClass);
//   <E extends RealmObject> int getNextId(String idName, Class<E> genericClass);
//   void beginTransaction();
//   void commitTransaction();
// }
// 
// Path: data/src/main/java/sergio/vasco/realmforandroid/data/repository/database/DataBaseServiceImp.java
// public class DataBaseServiceImp implements DataBaseService {
// 
//   private Context context;
//   private Realm realm;
// 
//   public DataBaseServiceImp(Context context) {
//     this.context = context;
//   }
// 
//   @Override public void getInstance() {
//     realm = Realm.getInstance(context);
//   }
// 
//   @Override public void insert(RealmObject table) {
//     getInstance();
//     beginTransaction();
//     realm.copyToRealm(table);
//     commitTransaction();
//   }
// 
//   @Override public <E extends RealmObject> RealmResults<E> query(Class<E> genericClass) {
//     getInstance();
//     RealmQuery<E> query = realm.where(genericClass);
//     return query.findAll();
//   }
// 
//   @Override public <E extends RealmObject> int getNextId(String idName, Class<E> genericClass) {
//     getInstance();
//     if(realm.where(genericClass).findAll().size() == 0){
//       return 1;
//     }
//     return realm.where(genericClass).max(idName).intValue() + 1;
//   }
// 
//   @Override public void beginTransaction() {
//     realm.beginTransaction();
//   }
// 
//   @Override public void commitTransaction() {
//     realm.commitTransaction();
//   }
// }


import android.app.Application;
import com.path.android.jobqueue.JobManager;
import dagger.Module;
import dagger.Provides;
import javax.inject.Singleton;
import sergio.vasco.androidforexample.domain.abstractions.Bus;
import sergio.vasco.androidforexample.domain.interactors.InteractorInvoker;
import sergio.vasco.realmforandroid.app.domain.BusImp;
import sergio.vasco.realmforandroid.app.domain.InteractorInvokerImp;
import sergio.vasco.realmforandroid.app.domain.InteractorJobImp;
import sergio.vasco.realmforandroid.data.repository.database.DataBaseService;
import sergio.vasco.realmforandroid.data.repository.database.DataBaseServiceImp;
package sergio.vasco.realmforandroid.app.di.modules;


/**
 * Name: Sergio Vasco
 * Date: 15/1/16.
 */
@Module
public class DataModule {

  @Singleton @Provides Bus provideEventBus(){
    return new BusImp();
  }

  @Singleton @Provides InteractorInvoker provideInteractorInvoker(JobManager jobManager){
    return new InteractorInvokerImp(jobManager);
  }

// Path: domain/src/main/java/sergio/vasco/androidforexample/domain/abstractions/Bus.java
// public interface Bus {
//   void post(Object object);
//   void postInmediate(Object object);
//   void register(Object object);
//   void unregister(Object object);
// }
// 
// Path: domain/src/main/java/sergio/vasco/androidforexample/domain/interactors/InteractorInvoker.java
// public interface InteractorInvoker {
//   void execute(Interactor interactor);
//   void execute(Interactor interactor, InteractorPriority priority);
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/BusImp.java
// public class BusImp extends EventBus implements Bus {
// 
//   private static final Handler handler = new Handler(Looper.getMainLooper());
// 
//   @Override public void post(final Object event) {
//     handler.post(new Runnable() {
//       @Override public void run() {
//         BusImp.super.post(event);
//       }
//     });
//   }
// 
//   @Override public void postInmediate(final Object event) {
//     handler.postAtFrontOfQueue(new Runnable() {
//       @Override public void run() {
//         BusImp.super.post(event);
//       }
//     });
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/InteractorInvokerImp.java
// public class InteractorInvokerImp implements InteractorInvoker {
// 
//   private JobManager jobManager;
// 
//   public InteractorInvokerImp(JobManager jobManager) {
//     this.jobManager = jobManager;
//   }
// 
//   @Override public void execute(Interactor interactor) {
//     execute(interactor, InteractorPriority.MEDIUM);
//   }
// 
//   @Override public void execute(Interactor interactor, InteractorPriority priority) {
//     jobManager.addJob(interactorToJob(interactor, priority));
//   }
// 
//   private Job interactorToJob(Interactor interactor, InteractorPriority priority) {
//     Params params = new Params(priority.getPriorityValue());
//     return new InteractorJobImp(params, interactor);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/domain/InteractorJobImp.java
// public class InteractorJobImp extends Job {
// 
//   private Interactor interactor;
// 
//   public InteractorJobImp(Params params, Interactor interactor) {
//     super(params);
//     this.interactor = interactor;
//   }
// 
//   @Override public void onAdded() {
//   }
// 
//   @Override public void onRun() throws Throwable {
//     interactor.execute();
//    }
// 
//   @Override protected void onCancel() {
//   }
// 
//   @Override protected boolean shouldReRunOnThrowable(Throwable throwable) {
//     return false;
//   }
// }
// 
// Path: data/src/main/java/sergio/vasco/realmforandroid/data/repository/database/DataBaseService.java
// public interface DataBaseService {
//   void getInstance();
//   void insert(RealmObject table);
//   <E extends RealmObject> RealmResults<E> query (Class<E> genericClass);
//   <E extends RealmObject> int getNextId(String idName, Class<E> genericClass);
//   void beginTransaction();
//   void commitTransaction();
// }
// 
// Path: data/src/main/java/sergio/vasco/realmforandroid/data/repository/database/DataBaseServiceImp.java
// public class DataBaseServiceImp implements DataBaseService {
// 
//   private Context context;
//   private Realm realm;
// 
//   public DataBaseServiceImp(Context context) {
//     this.context = context;
//   }
// 
//   @Override public void getInstance() {
//     realm = Realm.getInstance(context);
//   }
// 
//   @Override public void insert(RealmObject table) {
//     getInstance();
//     beginTransaction();
//     realm.copyToRealm(table);
//     commitTransaction();
//   }
// 
//   @Override public <E extends RealmObject> RealmResults<E> query(Class<E> genericClass) {
//     getInstance();
//     RealmQuery<E> query = realm.where(genericClass);
//     return query.findAll();
//   }
// 
//   @Override public <E extends RealmObject> int getNextId(String idName, Class<E> genericClass) {
//     getInstance();
//     if(realm.where(genericClass).findAll().size() == 0){
//       return 1;
//     }
//     return realm.where(genericClass).max(idName).intValue() + 1;
//   }
// 
//   @Override public void beginTransaction() {
//     realm.beginTransaction();
//   }
// 
//   @Override public void commitTransaction() {
//     realm.commitTransaction();
//   }
// }


// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/DataModule.java
import android.app.Application;
import com.path.android.jobqueue.JobManager;
import dagger.Module;
import dagger.Provides;
import javax.inject.Singleton;
import sergio.vasco.androidforexample.domain.abstractions.Bus;
import sergio.vasco.androidforexample.domain.interactors.InteractorInvoker;
import sergio.vasco.realmforandroid.app.domain.BusImp;
import sergio.vasco.realmforandroid.app.domain.InteractorInvokerImp;
import sergio.vasco.realmforandroid.app.domain.InteractorJobImp;
import sergio.vasco.realmforandroid.data.repository.database.DataBaseService;
import sergio.vasco.realmforandroid.data.repository.database.DataBaseServiceImp;

package sergio.vasco.realmforandroid.app.di.modules;


/**
 * Name: Sergio Vasco
 * Date: 15/1/16.
 */
@Module
public class DataModule {

  @Singleton @Provides Bus provideEventBus(){
    return new BusImp();
  }

  @Singleton @Provides InteractorInvoker provideInteractorInvoker(JobManager jobManager){
    return new InteractorInvokerImp(jobManager);
  }

  @Singleton @Provides JobManager provideJobManager(Application app){