public MainViewModel( IClosable mainWindow, IDataApiClient dataApiClient, UploadedFileProcessor uploadedFileProcessor, IObjectDatabase <DataSet> dataSetDatabase, IObjectDatabase <DataTag> tagDatabase, IObjectDatabase <DataProject> projectDatabase, IObjectDatabase <DataCollectionProtocol> protocolDatabase, IObjectDatabase <DataCollectionProtocolParameter> protocolParameterDatabase) { this.mainWindow = mainWindow; this.dataApiClient = dataApiClient; this.uploadedFileProcessor = uploadedFileProcessor; this.dataSetDatabase = dataSetDatabase; this.tagDatabase = tagDatabase; this.projectDatabase = projectDatabase; this.protocolDatabase = protocolDatabase; this.protocolParameterDatabase = protocolParameterDatabase; var passwordBoxSpawner = new WpfPasswordBoxSpawner(); var loginViewSpawner = new WpfWindowSpawner <LoginViewModel>(vm => new LoginWindow { ViewModel = vm }); var changePasswordViewSpawner = new WpfWindowSpawner <ChangePasswordViewModel>(vm => new ChangePasswordWindow { ViewModel = vm }); UserSwitchViewModel = new UserSwitchViewModel( dataApiClient, LoginSuccessful, LoginFailed, passwordBoxSpawner, loginViewSpawner, changePasswordViewSpawner); ProjectAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataProject>( x => x.Id, projectDatabase, new DataProjectAutoCompleteMatcher()); ProjectAutoCompleteViewModel.PropertyChanged += ProjectAutoCompleteViewModel_PropertyChanged; DataSetAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataSet>( x => x.Id, dataSetDatabase, new DataSetAutoCompleteMatcher(), allowNewValue: true, objectBuilder: id => new DataSet(id)); CreateNewProjectCommand = new RelayCommand(CreateNewProject); AddSelectedFilesToDataSetCommand = new AsyncRelayCommand(AddSelectedFilesToDataSet, CanAddSelectedFilesToDataSet); SelectAllCommand = new RelayCommand(SelectAll, CanSelectAll); DeselectAllCommand = new RelayCommand(DeselectAll, CanDeselectAll); OpenAboutWindowCommand = new RelayCommand(OpenAboutWindow); }
private void App_OnStartup(object sender, StartupEventArgs e) { StaticMessageBoxSpawner.Spawner = new WpfMessageBoxSpawner(); StaticUiUpdateNotifier.Notifier = new WpfUiUpdateNotifier(); var clipboard = new WpfClipboard(); var startWindow = new StartupWindow { ApplicationName = "File uploader" }; startWindow.Show(); var apiConfiguration = new ApiConfiguration( Settings.Default.ApiServerAddress, Settings.Default.ApiServerPort); var dataApiClient = new DataApiClient(apiConfiguration); if (!dataApiClient.IsAvailable()) { MessageBox.Show($"Cannot contact DataAPI @ '{apiConfiguration.ServerAddress}:{apiConfiguration.ServerPort}'. Shutting down..."); Current.Shutdown(-1); return; } try { dataApiClient.Login(); } catch { // Ignore. If Active Directory is not available, in some other way later. } var imageDatabase = new GenericDatabase <Image>(dataApiClient); var shortIdDatabase = new GenericDatabase <ShortId>(dataApiClient); var dataSetDatabase = new GenericDatabase <DataSet>(dataApiClient); var tagDatabase = new GenericDatabase <DataTag>(dataApiClient); var projectDatabase = new GenericDatabase <DataProject>(dataApiClient); var protocolDatabase = new GenericDatabase <DataCollectionProtocol>(dataApiClient); var protocolParameterDatabase = new GenericDatabase <DataCollectionProtocolParameter>(dataApiClient); var dataBlobDatabase = new GenericDatabase <DataBlob>(dataApiClient); var dataProjectUploadInfoDatabase = new GenericDatabase <DataProjectUploadInfo>(dataApiClient); var fileHandlers = new IFileHandler[] { new ImageFileHandler(imageDatabase) }; var additionalInformationViewSpawner = new WpfAdditionalInformationViewSpawner(); var fileManager = new UploadedFileProcessor( fileHandlers, dataApiClient, dataBlobDatabase, dataProjectUploadInfoDatabase, clipboard, additionalInformationViewSpawner); var mainWindow = new MainWindow(); var mainViewModel = new MainViewModel( mainWindow, dataApiClient, fileManager, dataSetDatabase, tagDatabase, projectDatabase, protocolDatabase, protocolParameterDatabase); mainWindow.ViewModel = mainViewModel; startWindow.Close(); mainWindow.ShowDialog(); }