package market.guess.ui.console; import java.time.Clock; import market.guess.api.CatalogContext; import market.guess.api.GuessMarketContext; import market.guess.service.LocalGuessMarketContext; import market.guess.service.catalog.LocalCatalogContext; import market.guess.service.catalog.infrastructure.MarketContext; import market.guess.service.catalog.infrastructure.mapper.v1.EventMapperV1; import market.guess.service.catalog.infrastructure.provider.Loader; import market.guess.service.catalog.infrastructure.provider.v1.XMLLoaderV1; import market.guess.service.catalog.infrastructure.provider.v1.XMLValidatorV1; import market.guess.service.catalog.infrastructure.repository.EventRepository; import market.guess.service.catalog.infrastructure.repository.InMemoryEventRepository; import market.guess.service.catalog.infrastructure.repository.InMemoryUserRepository; import market.guess.service.catalog.infrastructure.repository.UserRepository; import market.guess.service.fulfillment.FulfillmentContext; import market.guess.service.fulfillment.LocalFulfillmentContext; import market.guess.service.ledger.LedgerContext; import market.guess.service.matching.LocalMatchingEngine; import market.guess.service.matching.MatchingEngine; import market.guess.service.risk.LocalRiskEngine; import market.guess.service.risk.RiskEngine; import market.guess.service.settlement.LocalSettlementContext; import market.guess.service.settlement.SettlementContext; import market.guess.ui.console.command.EventDetailsMenuCommand; import market.guess.ui.console.command.ExitMenuCommand; import market.guess.ui.console.command.ListEventsMenuCommand; import market.guess.ui.console.command.LoadFileMenuCommand; import market.guess.ui.console.command.LoadMarketStateMenuCommand; import market.guess.ui.console.command.PlaceOrderMenuCommand; import market.guess.ui.console.command.SaveMarketStateMenuCommand; import market.guess.ui.console.command.SettleEventMenuCommand; import market.guess.ui.console.io.InputProcessor; import org.picocontainer.DefaultPicoContainer; import org.picocontainer.behaviors.Caching; public class App { public static void main() { var pico = new DefaultPicoContainer(new Caching()); pico.addComponent(EventRepository.class, InMemoryEventRepository.class); pico.addComponent(UserRepository.class, InMemoryUserRepository.class); pico.addComponent(MarketContext.class); pico.addComponent(EventMapperV1.class); pico.addComponent(Loader.class, XMLLoaderV1.class); pico.addComponent(XMLValidatorV1.class); pico.addComponent(GuessMarketContext.class, LocalGuessMarketContext.class); pico.addComponent(CatalogContext.class, LocalCatalogContext.class); pico.addComponent(LedgerContext.class); pico.addComponent(RiskEngine.class, LocalRiskEngine.class); pico.addComponent(MatchingEngine.class, LocalMatchingEngine.class); pico.addComponent(FulfillmentContext.class, LocalFulfillmentContext.class); pico.addComponent(SettlementContext.class, LocalSettlementContext.class); pico.addComponent(Clock.class, Clock.systemUTC()); pico.addComponent(LoadFileMenuCommand.class); pico.addComponent(ListEventsMenuCommand.class); pico.addComponent(ExitMenuCommand.class); pico.addComponent(PlaceOrderMenuCommand.class); pico.addComponent(SettleEventMenuCommand.class); pico.addComponent(EventDetailsMenuCommand.class); pico.addComponent(LoadMarketStateMenuCommand.class); pico.addComponent(SaveMarketStateMenuCommand.class); pico.addComponent(InputProcessor.class); pico.addComponent(Menu.class); pico.start(); } }