private static void Replay(Production production) { Console.WriteLine("Opening MongoDB Connections..."); IReadOnlyRepository <Wax3Data> wax3Repository = new MongoRepository <Wax3Data>(MongoDBConnectionString); IReadWriteRepository <Wax3State> wax3StateRepository = new MongoRepository <Wax3State>(MongoDBConnectionString); IReadOnlyRepository <RfidData> rfidRepository = new MongoRepository <RfidData>(MongoDBConnectionString); IReadWriteRepository <RfidState> rfidStateRepository = new MongoRepository <RfidState>(MongoDBConnectionString); IReadOnlyRepository <ApplianceEvent> appEventRepository = new MongoRepository <ApplianceEvent>(MongoDBConnectionString); IReadWriteRepository <AoiState> aoiStateRepository = new MongoRepository <AoiState>(MongoDBConnectionString); IReadWriteRepository <ShotDecision> shotDecisionRepository = new MongoRepository <ShotDecision>(MongoDBConnectionString); Console.WriteLine("Reading Replay Dataset..."); var wax3Data = wax3Repository.GetAll().ToList().Where(d => d.Timestamp.Date == production.Takes.First().Media.First().StartTime.Date).OrderBy(d => d.Timestamp).AsQueryable(); var rfidData = rfidRepository.GetAll().ToList().Where(d => d.Timestamp.Date == production.Takes.First().Media.First().StartTime.Date).OrderBy(d => d.Timestamp).AsQueryable(); if (!wax3Data.Any() || !rfidData.Any()) { Console.WriteLine("No Data to Replay. Exiting."); return; } Console.WriteLine("Starting Activity Recognisers..."); IRecogniser <Wax3Data, Wax3State> wax3Recogniser = new Wax3Recogniser(); IRecogniser <RfidData, RfidState> rfidRecogniser = new RfidRecogniser(); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <Wax3State> wax3ReplayManager = new ReplayManager <Wax3Data, Wax3State>(wax3Recogniser, wax3Data); IReplayManager <RfidState> rfidReplayManager = new ReplayManager <RfidData, RfidState>(rfidRecogniser, rfidData); Console.WriteLine(" Processing Datasets..."); wax3ReplayManager.Process(); rfidReplayManager.Process(); var wax3States = wax3ReplayManager.GetStates().AsQueryable(); var rfidStates = rfidReplayManager.GetStates().AsQueryable(); Console.WriteLine(" Inserting States into MongoDB..."); wax3StateRepository.InsertMany(wax3States); rfidStateRepository.InsertMany(rfidStates); Console.WriteLine("Starting Area of Interest Classifier..."); var aoiClassifier = new AoiClassifier(production); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <AoiState> aoiReplayManager = new AoiReplayManager(aoiClassifier, wax3States, rfidStates, appEventRepository.GetAll()); Console.WriteLine(" Processing Datasets..."); aoiReplayManager.Process(); var aoiStates = aoiReplayManager.GetStates().AsQueryable(); Console.WriteLine(" Inserting States into MongoDB..."); aoiStateRepository.InsertMany(aoiStates); Console.WriteLine("Starting Auto-Director..."); var autoDirector = new AutoDirector(production); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <ShotDecision> shotDecisionReplayManager = new ReplayManager <AoiState, ShotDecision>(autoDirector, aoiStates); Console.WriteLine(" Processing Datasets..."); shotDecisionReplayManager.Process(); var shotDecisions = shotDecisionReplayManager.GetStates(); Console.WriteLine(" Inserting Shot Decisions into MongoDB..."); shotDecisionRepository.InsertMany(shotDecisions); Console.WriteLine("Complete."); }