Exemplo n.º 1
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            AssureAppDataDirectoriesExist();

            ///////////////////////////////////////////////////////////////////////////////////////////////
            ////////                                                                             //////////
            ////////                          Composition Root and Setup                         //////////
            ////////                                                                             //////////
            ///////////////////////////////////////////////////////////////////////////////////////////////

            var connectionService = new ConnectionService();
            var eventBus          = new ClientEventBus(connectionService);

            var commandHandlerCollection = new SingleHandlerCollection <DomainCommand>();
            var commandMessageBus        = new LocalMessageBus <DomainCommand>(commandHandlerCollection);
            var commandBus = new CommandBus(commandMessageBus);

            var persistenceService      = new LocalSettingsXMLPersistenceService(GlobalConstants.LocalSettingsPersistenceFile);
            var localSettingsRepository = new LocalSettingsRepository(persistenceService);

            localSettingsRepository.LoadRepository();

            var clientMedicalPracticeRepository  = new ClientMedicalPracticeRepository(connectionService);
            var clientPatientRepository          = new ClientPatientRepository(connectionService);
            var clienttherapyPlaceTypeRepository = new ClientTherapyPlaceTypeRepository(connectionService);
            var clientLabelRepository            = new ClientLabelRepository(connectionService);
            var clientReadmodelRepository        = new ClientReadModelRepository(eventBus, clientPatientRepository, clientMedicalPracticeRepository, clientLabelRepository, connectionService);


            var workFlow = new ClientWorkflow();
            var session  = new Session(connectionService, workFlow);

            var fatalErrorHandler = new FatalErrorHandler(session);

            var commandService = new CommandService(session, clientReadmodelRepository, commandBus);


            var userActionBuilder = new UserActionBuilder(commandService);

            // CommandHandler

            var addAppointmentCommandHandler     = new     AddAppointmentCommandHandler(connectionService, session, clientPatientRepository, userActionBuilder, fatalErrorHandler.HandleFatalError);
            var deleteAppointmentCommandHandler  = new  DeleteAppointmentCommandHandler(connectionService, session, clientPatientRepository, userActionBuilder, fatalErrorHandler.HandleFatalError);
            var replaceAppointmentCommandHandler = new ReplaceAppointmentCommandHandler(connectionService, session, clientPatientRepository, clientMedicalPracticeRepository, userActionBuilder, fatalErrorHandler.HandleFatalError);

            commandBus.RegisterCommandHandler(addAppointmentCommandHandler);
            commandBus.RegisterCommandHandler(deleteAppointmentCommandHandler);
            commandBus.RegisterCommandHandler(replaceAppointmentCommandHandler);


            // initiate ViewModelCommunication

            var handlerCollection = new MultiHandlerCollection <ViewModelMessage>();
            IMessageBus <ViewModelMessage> viewModelMessageBus  = new LocalMessageBus <ViewModelMessage>(handlerCollection);
            IViewModelCollectionList       viewModelCollections = new ViewModelCollectionList();

            IViewModelCommunication viewModelCommunication = new ViewModelCommunication(viewModelMessageBus,
                                                                                        viewModelCollections);


            var mainWindowBuilder = new MainWindowBuilder(localSettingsRepository,
                                                          clientPatientRepository,
                                                          clientMedicalPracticeRepository,
                                                          clientReadmodelRepository,
                                                          clienttherapyPlaceTypeRepository,
                                                          clientLabelRepository,
                                                          commandService,
                                                          viewModelCommunication,
                                                          session,
                                                          "0.1.0.0",                                                             // TODO: get real versionNumber
                                                          fatalErrorHandler.HandleFatalError);

            var mainWindow = mainWindowBuilder.BuildWindow();

            mainWindow.ShowDialog();



            ///////////////////////////////////////////////////////////////////////////////////////////////
            ////////                                                                             //////////
            ////////             Clean Up and store data after main Window was closed            //////////
            ////////                                                                             //////////
            ///////////////////////////////////////////////////////////////////////////////////////////////

            localSettingsRepository.PersistRepository();

            connectionService.Dispose();
        }
Exemplo n.º 2
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            AssureAppDataDirectoriesExist();

            ///////////////////////////////////////////////////////////////////////////////////////////////////
            ////////                                                                                 //////////
            ////////                            Composition Root and Setup                           //////////
            ////////                                                                                 //////////
            ///////////////////////////////////////////////////////////////////////////////////////////////////

            var dataCenterContainer = new DataCenterContainer();

            // ConnectionService

            var connectionServiceBuilder = new ConnectionServiceBuilder(dataCenterContainer);
            var connectionService        = connectionServiceBuilder.Build();

            // Patient-Repository

            var patientPersistenceService = new XmlPatientDataStore(GlobalConstants.PatientPersistenceFile);
            var patientRepository         = new PatientRepository(patientPersistenceService, connectionService);

            patientRepository.LoadRepository();


            // Config-Repository

            var configPersistenceService = new XmlConfigurationDataStore(GlobalConstants.ConfigPersistenceFile);
            var configRepository         = new ConfigurationRepository(configPersistenceService);

            configRepository.LoadRepository();


            // LocalSettings-Repository

            var settingsPersistenceService = new LocalSettingsXmlPersistenceService(GlobalConstants.LocalServerSettingsPersistanceFile);
            var localSettingsRepository    = new LocalSettingsRepository(settingsPersistenceService);

            localSettingsRepository.LoadRepository();

            // Event-Store

            var eventStreamPersistenceService = new XmlEventStreamPersistanceService();
            var streamPersistenceService      = new StreamPersistenceService(eventStreamPersistenceService, configRepository, GlobalConstants.EventHistoryBasePath, 500);
            var metaDataPersistenceService    = new XmlPracticeMetaDataPersistanceService(GlobalConstants.MetaDataPersistanceFile);
            var metaDataService = new StreamMetaDataService(metaDataPersistenceService);

            var eventStore = new EventStore(streamPersistenceService, metaDataService, connectionService);

            eventStore.LoadRepository();

            // DataAndService

            var dataCenter = new DataCenter(configRepository, patientRepository, eventStore);

            dataCenterContainer.DataCenter = dataCenter;

            var backUpService   = new BackupService(patientRepository, configRepository, eventStore, connectionService);
            var backupScheduler = new BackupScheduler(backUpService);

            backupScheduler.Start(localSettingsRepository);

            // ViewModel-Variables

            var selectedPageVariable = new SharedState <MainPage>(MainPage.Overview);


            // sampleData-generators

            var patientNameGenerator = new PatientNameGenerator();
            var appointmentGenerator = new AppointmentGenerator(configRepository, patientRepository, eventStore);


            // ViewModels

            var selectedPatientVariable  = new SharedState <Patient>(null);
            var patientSelectorViewModel = new PatientSelectorViewModel(patientRepository, selectedPatientVariable);

            var overviewPageViewModel          = new OverviewPageViewModel(connectionService);
            var connectionsPageViewModel       = new ConnectionsPageViewModel(dataCenter, connectionService, selectedPageVariable);
            var userPageViewModel              = new UserPageViewModel(dataCenter, selectedPageVariable);
            var licencePageViewModel           = new LicencePageViewModel();
            var infrastructurePageViewModel    = new InfrastructurePageViewModel(dataCenter, selectedPageVariable, appointmentGenerator);
            var hoursOfOpeningPageViewModel    = new HoursOfOpeningPageViewModel(dataCenter, selectedPageVariable);
            var therapyPlaceTypesPageViewModel = new TherapyPlaceTypesPageViewModel(dataCenter, selectedPageVariable, connectionService);
            var labelPageViewModel             = new LabelPageViewModel(dataCenter, selectedPageVariable, connectionService);
            var patientsPageViewModel          = new PatientsPageViewModel(patientSelectorViewModel, patientRepository, selectedPatientVariable, patientNameGenerator);
            var backupPageViewModel            = new BackupPageViewModel(backUpService, backupScheduler, localSettingsRepository);
            var optionsPageViewModel           = new OptionsPageViewModel();
            var aboutPageViewModel             = new AboutPageViewModel("0.1.0.0");

            var mainWindowViewModel = new MainWindowViewModel(overviewPageViewModel,
                                                              connectionsPageViewModel,
                                                              userPageViewModel,
                                                              licencePageViewModel,
                                                              infrastructurePageViewModel,
                                                              hoursOfOpeningPageViewModel,
                                                              therapyPlaceTypesPageViewModel,
                                                              labelPageViewModel,
                                                              patientsPageViewModel,
                                                              backupPageViewModel,
                                                              optionsPageViewModel,
                                                              aboutPageViewModel,
                                                              selectedPageVariable);
            var mainWindow = new MainWindow
            {
                DataContext = mainWindowViewModel
            };

            mainWindow.ShowDialog();

            ///////////////////////////////////////////////////////////////////////////////////////////////
            ////////                                                                             //////////
            ////////             Clean Up and store data after main Window was closed            //////////
            ////////                                                                             //////////
            ///////////////////////////////////////////////////////////////////////////////////////////////

            backupScheduler.Stop();

            configRepository.PersistRepository();
            patientRepository.PersistRepository();
            eventStore.PersistRepository();
            localSettingsRepository.PersistRepository();

            connectionServiceBuilder.DisposeConnectionService(connectionService);
        }