package org.iatoki.judgels.raguel; import com.google.inject.AbstractModule; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import org.iatoki.judgels.api.jophiel.JophielClientAPI; import org.iatoki.judgels.api.jophiel.JophielFactory; import org.iatoki.judgels.api.jophiel.JophielPublicAPI; import org.iatoki.judgels.jophiel.JophielAuthAPI; import org.iatoki.judgels.jophiel.avatar.BaseAvatarCacheService; import org.iatoki.judgels.jophiel.user.BaseUserService; import org.iatoki.judgels.jophiel.activity.UserActivityMessageService; import org.iatoki.judgels.play.JudgelsPlayProperties; import org.iatoki.judgels.play.general.GeneralName; import org.iatoki.judgels.play.general.GeneralVersion; import org.iatoki.judgels.play.jid.BaseJidCacheService; import org.iatoki.judgels.play.migration.JudgelsDataMigrator; import org.iatoki.judgels.raguel.activity.UserActivityMessageServiceProvider; import org.iatoki.judgels.raguel.avatar.AvatarCacheServiceProvider; import org.iatoki.judgels.raguel.jid.JidCacheServiceProvider; import org.iatoki.judgels.raguel.user.UserServiceImpl; public final class RaguelModule extends AbstractModule { @Override public void configure() { org.iatoki.judgels.raguel.BuildInfo$ buildInfo = org.iatoki.judgels.raguel.BuildInfo$.MODULE$; bindConstant().annotatedWith(GeneralName.class).to(buildInfo.name()); bindConstant().annotatedWith(GeneralVersion.class).to(buildInfo.version()); // <DEPRECATED> Config config = ConfigFactory.load(); JudgelsPlayProperties.buildInstance(buildInfo.name(), buildInfo.version(), config); RaguelProperties.buildInstance(config); bind(RaguelSingletonsBuilder.class).asEagerSingleton(); // </DEPRECATED> bind(JudgelsDataMigrator.class).to(RaguelDataMigrator.class); bind(JophielAuthAPI.class).toInstance(jophielAuthAPI()); bind(JophielClientAPI.class).toInstance(jophielClientAPI()); bind(JophielPublicAPI.class).toInstance(jophielPublicAPI()); bind(BaseUserService.class).to(UserServiceImpl.class); bind(BaseJidCacheService.class).toProvider(JidCacheServiceProvider.class); bind(BaseAvatarCacheService.class).toProvider(AvatarCacheServiceProvider.class); bind(UserActivityMessageService.class).toProvider(UserActivityMessageServiceProvider.class); } private RaguelProperties raguelProperties() { return RaguelProperties.getInstance(); } private JophielAuthAPI jophielAuthAPI() { return new JophielAuthAPI(raguelProperties().getJophielBaseUrl(), raguelProperties().getJophielClientJid(), raguelProperties().getJophielClientSecret()); } private JophielClientAPI jophielClientAPI() { return JophielFactory.createJophiel(raguelProperties().getJophielBaseUrl()).connectToClientAPI(raguelProperties().getJophielClientJid(), raguelProperties().getJophielClientSecret()); } private JophielPublicAPI jophielPublicAPI() { return JophielFactory.createJophiel(raguelProperties().getJophielBaseUrl()).connectToPublicAPI(); } }