// Path: presentation/src/main/java/eu/rampsoftware/er/di/ApplicationComponent.java
// @Component(modules = {ApplicationModule.class, NetModule.class})
// @Singleton
// public interface ApplicationComponent {
//     /**
//      * Creates new instance of CurrenciesActivitySubComponent {@link dagger.Subcomponent Subcomponent}.
//      *
//      * @param module
//      * @return
//      */
//     CurrenciesActivitySubComponent newCurrenciesActivitySubComponent(CurrenciesActivityModule module);
//     CurrencyDetailsActivitySubComponent newCurrencyDetailsActivitySubComponent(CurrencyDetailsActivityModule module);
// }
// 
// Path: presentation/src/main/java/eu/rampsoftware/er/di/ApplicationModule.java
// @Module
// public class ApplicationModule implements IApplicationModule {
// 
//     private final Context mContext;
// 
//     public ApplicationModule(Context context){
//         mContext = context;
//     }
// 
//     @Override
//     @Provides
//     @Named("example")
//     @Singleton
//     public String provideExampleString() {
//         return "Production Example";
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public Context provideContext(){
//         return mContext;
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public ApplicationProperties provideApplicationProperties(final Context context){
//         return new ResourcesApplicationProperties(context);
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     @Named("remote")
//     public CurrencyDataSource provideRemoteCurrencyDataSource(ApplicationProperties properties, final CurrencyDataApi currencyDataApi){
//         return new RetrofitCurrencyDataSource(currencyDataApi, properties.getOerAppId());
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     @Named("local")
//     public CurrencyDataSource provideLocalCurrencyDataSource(){
//         return new DatabaseCurrencyDataSource();
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public CurrencyRepository provideCurrencyRepository(@Named("local") final CurrencyDataSource localSource,
//                                                         @Named("remote") final CurrencyDataSource remoteSource){
//         return new CachingCurrencyRepository(localSource, remoteSource);
//     }
// 
//     @Provides
//     @Singleton
//     @Override
//     public PreferencesData providePreferencesData(ApplicationProperties properties){
//         return new SharedPreferencesData(mContext.getSharedPreferences(
//                 properties.sharedPreferencesName(), Context.MODE_PRIVATE));
//     }
// }


import android.app.Application;
import eu.rampsoftware.er.di.ApplicationComponent;
import eu.rampsoftware.er.di.ApplicationModule;
import eu.rampsoftware.er.di.DaggerApplicationComponent;
import io.realm.Realm;
package eu.rampsoftware.er;



public class ExchangeRatesApplication extends Application {

    private ApplicationComponent mApplicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        initRealm();
        mApplicationComponent = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this))
                .build();
    }

    protected void initRealm() {
        Realm.init(this);
    }

// Path: presentation/src/main/java/eu/rampsoftware/er/di/ApplicationComponent.java
// @Component(modules = {ApplicationModule.class, NetModule.class})
// @Singleton
// public interface ApplicationComponent {
//     /**
//      * Creates new instance of CurrenciesActivitySubComponent {@link dagger.Subcomponent Subcomponent}.
//      *
//      * @param module
//      * @return
//      */
//     CurrenciesActivitySubComponent newCurrenciesActivitySubComponent(CurrenciesActivityModule module);
//     CurrencyDetailsActivitySubComponent newCurrencyDetailsActivitySubComponent(CurrencyDetailsActivityModule module);
// }
// 
// Path: presentation/src/main/java/eu/rampsoftware/er/di/ApplicationModule.java
// @Module
// public class ApplicationModule implements IApplicationModule {
// 
//     private final Context mContext;
// 
//     public ApplicationModule(Context context){
//         mContext = context;
//     }
// 
//     @Override
//     @Provides
//     @Named("example")
//     @Singleton
//     public String provideExampleString() {
//         return "Production Example";
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public Context provideContext(){
//         return mContext;
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public ApplicationProperties provideApplicationProperties(final Context context){
//         return new ResourcesApplicationProperties(context);
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     @Named("remote")
//     public CurrencyDataSource provideRemoteCurrencyDataSource(ApplicationProperties properties, final CurrencyDataApi currencyDataApi){
//         return new RetrofitCurrencyDataSource(currencyDataApi, properties.getOerAppId());
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     @Named("local")
//     public CurrencyDataSource provideLocalCurrencyDataSource(){
//         return new DatabaseCurrencyDataSource();
//     }
// 
//     @Override
//     @Provides
//     @Singleton
//     public CurrencyRepository provideCurrencyRepository(@Named("local") final CurrencyDataSource localSource,
//                                                         @Named("remote") final CurrencyDataSource remoteSource){
//         return new CachingCurrencyRepository(localSource, remoteSource);
//     }
// 
//     @Provides
//     @Singleton
//     @Override
//     public PreferencesData providePreferencesData(ApplicationProperties properties){
//         return new SharedPreferencesData(mContext.getSharedPreferences(
//                 properties.sharedPreferencesName(), Context.MODE_PRIVATE));
//     }
// }


// Path: presentation/src/main/java/eu/rampsoftware/er/ExchangeRatesApplication.java
import android.app.Application;
import eu.rampsoftware.er.di.ApplicationComponent;
import eu.rampsoftware.er.di.ApplicationModule;
import eu.rampsoftware.er.di.DaggerApplicationComponent;
import io.realm.Realm;

package eu.rampsoftware.er;



public class ExchangeRatesApplication extends Application {

    private ApplicationComponent mApplicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        initRealm();
        mApplicationComponent = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this))
                .build();
    }

    protected void initRealm() {
        Realm.init(this);
    }

    public ApplicationComponent getApplicationComponent() {