package io.codearte.jfairy; import com.google.inject.AbstractModule; import com.google.inject.assistedinject.FactoryModuleBuilder; import io.codearte.jfairy.data.DataMaster; import io.codearte.jfairy.producer.company.CompanyFactory; import io.codearte.jfairy.producer.company.CompanyProvider; import io.codearte.jfairy.producer.company.DefaultCompanyProvider; import io.codearte.jfairy.producer.payment.DefaultIBANProvider; import io.codearte.jfairy.producer.payment.IBANFactory; import io.codearte.jfairy.producer.payment.IBANProvider; import io.codearte.jfairy.producer.person.DefaultPersonProvider; import io.codearte.jfairy.producer.person.PersonFactory; import io.codearte.jfairy.producer.person.PersonProvider; import java.util.Random; /** * @author jkubrynski@gmail.com * @author Olga Maciaszek-Sharma * @since 2013-11-15 */ public abstract class FairyModule extends AbstractModule { private final Random random; private final DataMaster dataMaster; public FairyModule(DataMaster dataMaster, Random random) { this.random = random; this.dataMaster = dataMaster; } @Override protected void configure() { bind(DataMaster.class).toInstance(dataMaster); bind(Random.class).toInstance(random); install(new FactoryModuleBuilder().build(FairyFactory.class)); install(new FactoryModuleBuilder().implement(PersonProvider.class, DefaultPersonProvider.class).build(PersonFactory.class)); install(new FactoryModuleBuilder().implement(CompanyProvider.class, DefaultCompanyProvider.class).build(CompanyFactory.class)); install(new FactoryModuleBuilder().implement(IBANProvider.class, DefaultIBANProvider.class).build(IBANFactory.class)); } }