package com.yoghurt.crypto.transactions.client.di; import com.google.gwt.activity.shared.ActivityMapper; import com.google.gwt.inject.client.AbstractGinModule; import com.google.gwt.inject.client.assistedinject.GinFactoryModuleBuilder; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.place.shared.PlaceHistoryMapper; import com.google.inject.Inject; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.SimpleEventBus; import com.yoghurt.crypto.transactions.client.ApplicationConfigProvider; import com.yoghurt.crypto.transactions.client.place.AddressPlace; import com.yoghurt.crypto.transactions.client.place.AddressPlace.AddressDataType; import com.yoghurt.crypto.transactions.client.place.ApplicationActivityMapper; import com.yoghurt.crypto.transactions.client.place.ApplicationActivityMapper.ActivityFactory; import com.yoghurt.crypto.transactions.client.place.ApplicationPlaceHistoryMapper; import com.yoghurt.crypto.transactions.client.place.BlockPlace; import com.yoghurt.crypto.transactions.client.place.BlockPlace.BlockDataType; import com.yoghurt.crypto.transactions.client.place.DefaultPlace; import com.yoghurt.crypto.transactions.client.place.ScriptPlace; import com.yoghurt.crypto.transactions.client.place.StartupPlace; import com.yoghurt.crypto.transactions.client.place.TransactionPlace; import com.yoghurt.crypto.transactions.client.place.TransactionPlace.TransactionDataType; import com.yoghurt.crypto.transactions.client.resources.ColorPicker; import com.yoghurt.crypto.transactions.client.resources.SimpleColorPicker; import com.yoghurt.crypto.transactions.client.ui.AddressView; import com.yoghurt.crypto.transactions.client.ui.AddressViewImpl; import com.yoghurt.crypto.transactions.client.ui.BlockView; import com.yoghurt.crypto.transactions.client.ui.BlockViewImpl; import com.yoghurt.crypto.transactions.client.ui.ConfigView; import com.yoghurt.crypto.transactions.client.ui.ConfigViewImpl; import com.yoghurt.crypto.transactions.client.ui.ContributeView; import com.yoghurt.crypto.transactions.client.ui.ContributeViewImpl; import com.yoghurt.crypto.transactions.client.ui.MineView; import com.yoghurt.crypto.transactions.client.ui.MineViewImpl; import com.yoghurt.crypto.transactions.client.ui.RPCResponseView; import com.yoghurt.crypto.transactions.client.ui.RPCResponseViewImpl; import com.yoghurt.crypto.transactions.client.ui.ScriptView; import com.yoghurt.crypto.transactions.client.ui.ScriptViewImpl; import com.yoghurt.crypto.transactions.client.ui.StartupView; import com.yoghurt.crypto.transactions.client.ui.StartupViewImpl; import com.yoghurt.crypto.transactions.client.ui.TransactionView; import com.yoghurt.crypto.transactions.client.ui.TransactionViewImpl; import com.yoghurt.crypto.transactions.shared.domain.config.UserApplicationConfig; public class ApplicationClientModule extends AbstractGinModule { @Override protected void configure() { // Binding application critical architecture bind(ActivityMapper.class).to(ApplicationActivityMapper.class).in(Singleton.class);; bind(Place.class).annotatedWith(DefaultPlace.class).to(StartupPlace.class).in(Singleton.class); bind(PlaceController.class).to(ApplicationPlaceController.class).in(Singleton.class); bind(BitcoinPlaceRouter.class).to(ApplicationPlaceController.class).in(Singleton.class); bind(PlaceHistoryMapper.class).to(ApplicationPlaceHistoryMapper.class).in(Singleton.class); bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class); bind(ColorPicker.class).to(SimpleColorPicker.class).in(Singleton.class); // Binding views bind(StartupView.class).to(StartupViewImpl.class).in(Singleton.class); bind(TransactionView.class).to(TransactionViewImpl.class); bind(BlockView.class).to(BlockViewImpl.class); bind(MineView.class).to(MineViewImpl.class); bind(ScriptView.class).to(ScriptViewImpl.class); bind(ConfigView.class).to(ConfigViewImpl.class); bind(ContributeView.class).to(ContributeViewImpl.class); bind(RPCResponseView.class).to(RPCResponseViewImpl.class); bind(AddressView.class).to(AddressViewImpl.class); install(new GinFactoryModuleBuilder().build(ActivityFactory.class)); } @Provides public UserApplicationConfig getUserApplicationConfig(final ApplicationConfigProvider provider) { return provider.getApplicationConfig(); } public static class ApplicationPlaceController extends PlaceController implements BitcoinPlaceRouter { @Inject public ApplicationPlaceController(final EventBus eventBus) { super(eventBus); } @Override public void goToTransaction(final String txid) { goTo(new TransactionPlace(TransactionDataType.ID, txid)); } @Override public void goToBlock(final int height) { goTo(new BlockPlace(BlockDataType.HEIGHT, height)); } @Override public void goToBlock(final String blockHash) { goTo(new BlockPlace(BlockDataType.ID, blockHash)); } @Override public void goToScript(final String transactionHash, final int outputIndex, final String scriptSig) { goTo(new ScriptPlace(transactionHash, outputIndex, scriptSig)); } @Override public void goToAddress(final String addr) { goTo(new AddressPlace(AddressDataType.ID, addr)); } } }