// Path: app/src/main/java/sergio/vasco/realmforandroid/app/App.java
// public class App extends Application {
// 
//   private AppComponent appComponent;
// 
//   @Override public void onCreate() {
//     super.onCreate();
//     initDI();
//   }
// 
//   private void initDI() {
//     initAppComponent();
//   }
// 
//   private void initAppComponent() {
//     appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build();
//     appComponent.inject(this);
//   }
// 
//   public AppComponent getAppComponent() {
//     return appComponent;
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/AppModule.java
// @Module
// public class AppModule {
// 
//   private final App app;
// 
//   public AppModule(App app) {
//     this.app = app;
//   }
// 
//   @Singleton @Provides Application provideApplication(){
//     return app;
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/DataModule.java
// @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){
//     return new JobManager(app);
//   }
// 
//   @Singleton @Provides DataBaseService provideDataBaseService(Application app){
//     return new DataBaseServiceImp(app);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/DataSourceModule.java
// @Module
// public class DataSourceModule {
// 
//   @Singleton @Provides ContactsDataSource provideContactsDataSource(DataBaseService dataBaseService){
//     return new ContactsDataSourceImp(dataBaseService);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/InteractorModule.java
// @Module
// public class InteractorModule {
// 
//   @Singleton @Provides GetContactsFromDataBaseInteractor provideGetContactsFromDataBaseInteractor(Bus bus, ContactsRepository contactsRepository){
//     return new GetContactsFromDataBaseInteractor(bus, contactsRepository);
//   }
// 
//   @Singleton @Provides InsertContactsIntoDataBaseInteractor provideInsertContactsIntoDataBaseInteractor(Bus bus, ContactsRepository contactsRepository){
//     return new InsertContactsIntoDataBaseInteractor(bus, contactsRepository);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/MapperModule.java
// @Module
// public class MapperModule {
// 
//   @Singleton @Provides DataContactMapper provideDataContactMapper(){
//     return new DataContactMapper();
//   }
// 
//   @Singleton @Provides PresentationContactMapper providePresentationContactMapper(){
//     return new PresentationContactMapper();
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/RepositoryModule.java
// @Module
// public class RepositoryModule {
// 
//   @Singleton @Provides ContactsRepository provideContactsRepository(ContactsDataSource contactsDataSource){
//     return new ContactsRepositoryImp(contactsDataSource);
//   }
// }


import dagger.Component;
import javax.inject.Singleton;
import sergio.vasco.realmforandroid.app.App;
import sergio.vasco.realmforandroid.app.di.modules.AppModule;
import sergio.vasco.realmforandroid.app.di.modules.DataModule;
import sergio.vasco.realmforandroid.app.di.modules.DataSourceModule;
import sergio.vasco.realmforandroid.app.di.modules.InteractorModule;
import sergio.vasco.realmforandroid.app.di.modules.MapperModule;
import sergio.vasco.realmforandroid.app.di.modules.RepositoryModule;
package sergio.vasco.realmforandroid.app.di.components;


/**
 * Name: Sergio Vasco
 * Date: 15/1/16.
 */

@Singleton @Component(modules = {AppModule.class, DataModule.class, InteractorModule.class,
    RepositoryModule.class, DataSourceModule.class, MapperModule.class})
public interface AppComponent extends InteractorComponent, DataComponent,
    DataSourceComponent, RepositoryComponent, MapperComponent {
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/App.java
// public class App extends Application {
// 
//   private AppComponent appComponent;
// 
//   @Override public void onCreate() {
//     super.onCreate();
//     initDI();
//   }
// 
//   private void initDI() {
//     initAppComponent();
//   }
// 
//   private void initAppComponent() {
//     appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build();
//     appComponent.inject(this);
//   }
// 
//   public AppComponent getAppComponent() {
//     return appComponent;
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/AppModule.java
// @Module
// public class AppModule {
// 
//   private final App app;
// 
//   public AppModule(App app) {
//     this.app = app;
//   }
// 
//   @Singleton @Provides Application provideApplication(){
//     return app;
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/DataModule.java
// @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){
//     return new JobManager(app);
//   }
// 
//   @Singleton @Provides DataBaseService provideDataBaseService(Application app){
//     return new DataBaseServiceImp(app);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/DataSourceModule.java
// @Module
// public class DataSourceModule {
// 
//   @Singleton @Provides ContactsDataSource provideContactsDataSource(DataBaseService dataBaseService){
//     return new ContactsDataSourceImp(dataBaseService);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/InteractorModule.java
// @Module
// public class InteractorModule {
// 
//   @Singleton @Provides GetContactsFromDataBaseInteractor provideGetContactsFromDataBaseInteractor(Bus bus, ContactsRepository contactsRepository){
//     return new GetContactsFromDataBaseInteractor(bus, contactsRepository);
//   }
// 
//   @Singleton @Provides InsertContactsIntoDataBaseInteractor provideInsertContactsIntoDataBaseInteractor(Bus bus, ContactsRepository contactsRepository){
//     return new InsertContactsIntoDataBaseInteractor(bus, contactsRepository);
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/MapperModule.java
// @Module
// public class MapperModule {
// 
//   @Singleton @Provides DataContactMapper provideDataContactMapper(){
//     return new DataContactMapper();
//   }
// 
//   @Singleton @Provides PresentationContactMapper providePresentationContactMapper(){
//     return new PresentationContactMapper();
//   }
// }
// 
// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/modules/RepositoryModule.java
// @Module
// public class RepositoryModule {
// 
//   @Singleton @Provides ContactsRepository provideContactsRepository(ContactsDataSource contactsDataSource){
//     return new ContactsRepositoryImp(contactsDataSource);
//   }
// }


// Path: app/src/main/java/sergio/vasco/realmforandroid/app/di/components/AppComponent.java
import dagger.Component;
import javax.inject.Singleton;
import sergio.vasco.realmforandroid.app.App;
import sergio.vasco.realmforandroid.app.di.modules.AppModule;
import sergio.vasco.realmforandroid.app.di.modules.DataModule;
import sergio.vasco.realmforandroid.app.di.modules.DataSourceModule;
import sergio.vasco.realmforandroid.app.di.modules.InteractorModule;
import sergio.vasco.realmforandroid.app.di.modules.MapperModule;
import sergio.vasco.realmforandroid.app.di.modules.RepositoryModule;

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


/**
 * Name: Sergio Vasco
 * Date: 15/1/16.
 */

@Singleton @Component(modules = {AppModule.class, DataModule.class, InteractorModule.class,
    RepositoryModule.class, DataSourceModule.class, MapperModule.class})
public interface AppComponent extends InteractorComponent, DataComponent,
    DataSourceComponent, RepositoryComponent, MapperComponent {
  void inject(App app);