public void AddFromFilesystem()
        {
            var fd = new OpenFileDialog();
            fd.ShowDialog();

            var änderungsdatei = new Bankleitzahlenänderungsdatei { Dateiname = fd.SafeFileName, Uri = new Uri(fd.FileName) };
            ÄnderungsdateiAuswahl.Add(änderungsdatei);

            NotifyOfPropertyChange(() => CanÄnderungsdateiAuswahl);
            SelectedÄnderungsdateiAuswahl = SelectedÄnderungsdateiAuswahl ?? ÄnderungsdateiAuswahl.FirstOrDefault();
        }
 public async Task<List<Bank>> LadeBankenAusÄnderungsdatei(Bankleitzahlenänderungsdatei änderungsdatei)
 {
     switch (änderungsdatei.Uri.Scheme)
     {
         case "file":
             return await LadeBankenAusÄnderungsdatei_Lokal(änderungsdatei);
         case "http":
         case "https":
             return await LadeBankenAusÄnderungsdatei_Web(änderungsdatei);
         default:
             throw new ArgumentException("URI passt nicht.");
     }
 }
        public void LadeÄnderungsdatei(Bankleitzahlenänderungsdatei selectedÄnderungsdateiAuswahl)
        {
            Task.Run(() =>
            {
                var bundesbankService = new BundesbankService();
                var banken = bundesbankService.GetBanken(selectedÄnderungsdateiAuswahl).Result;

                var banken_UIElements = from bank in banken
                                        select new HighlightableTextBlockViewModel
                                        {
                                            Text = bank.ToString()
                                        };

                Execute.OnUIThread(() =>
                {
                    Banken.Clear();
                    Banken.AddRange(banken_UIElements);
                });

            }).ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    var hasFileHelperException = false;

                    task.Exception.Flatten().Handle(e =>
                    {
                        if (e.Source == "FileHelpers") hasFileHelperException = true;
                        return true;
                    });

                    if (hasFileHelperException)
                    {
                        MessageBox.Show("Datei konnte nicht geparst werden!");
                    }
                    else
                    {
                        MessageBox.Show("Ein Fehler ist passiert!");
                    }
                }
            });
        }
        public void LadeÄnderungsdatei(Bankleitzahlenänderungsdatei selectedÄnderungsdateiAuswahl)
        {
            Task.Run(() =>
            {
                var bundesbankService = new BundesbankService();
                var banken = bundesbankService.GetBanken(selectedÄnderungsdateiAuswahl).Result;

                var banken_UIElements = from bank in banken
                                        select new HighlightableTextBlock(bank.ToString());

                // Muss im UI-Thread ausgeführt werden:
                Dispatcher.Invoke(() =>
                {
                    BankenListBoxItems.Clear();
                    banken_UIElements.ToList().ForEach(ui => BankenListBoxItems.Add(ui));
                });
            }).ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    var hasFileHelperException = false;

                    task.Exception.Flatten().Handle(e =>
                    {
                        if (e.Source == "FileHelpers") hasFileHelperException = true;
                        return true;
                    });

                    if (hasFileHelperException)
                    {
                        MessageBox.Show("Datei konnte nicht geparst werden!");
                    }
                    else
                    {
                        MessageBox.Show("Ein Fehler ist passiert!");
                    }
                }
            });
        }
        public async void Bundesbank_BankleitzahlenänderungsdateiService_LadeBankenAusDateiÜbersGemockteWeb()
        {
            var änderungsdatei = new Bankleitzahlenänderungsdatei
            {
                Uri = new Uri("https://foo.bla/blz_2015_09_07_txt.txt")
            };

            var banken = await _service.LadeBankenAusÄnderungsdatei(änderungsdatei);

            Assert.That(banken.Count(), Is.EqualTo(18424));

            var bundesbank = banken.First();
            Assert.That((int)bundesbank.Bankleitzahl, Is.EqualTo(10000000));
            Assert.That(bundesbank.Name, Is.EqualTo("Bundesbank"));
            Assert.That(bundesbank.Adresse.City, Is.EqualTo("Berlin"));
            Assert.That(bundesbank.Adresse.PostalCode, Is.EqualTo("10591"));

            var bankMitUmlaut = banken.ElementAt(17);
            Assert.That((int)bankMitUmlaut.Bankleitzahl, Is.EqualTo(10030500));
            Assert.That(bankMitUmlaut.Name, Is.EqualTo("Bankhaus Löbbecke"));
            Assert.That(bankMitUmlaut.Adresse.City, Is.EqualTo("Berlin"));
            Assert.That(bankMitUmlaut.Adresse.PostalCode, Is.EqualTo("10117"));
        }
        private void AddFromFilesystemMenuItem_Click(object sender, RoutedEventArgs e)
        {
            var fd = new OpenFileDialog();
            fd.ShowDialog();

            var änderungsdatei = new Bankleitzahlenänderungsdatei { Dateiname = fd.SafeFileName, Uri = new Uri(fd.FileName) };
            ÄnderungsdateiAuswahl.Add(änderungsdatei);

            PropertyChanged(this, new PropertyChangedEventArgs(nameof(IstAuswahlMöglich)));
            SelectedÄnderungsdateiAuswahl = SelectedÄnderungsdateiAuswahl ?? ÄnderungsdateiAuswahl.FirstOrDefault();
        }
        private async Task<List<Bank>> LadeBankenAusÄnderungsdatei_Web(Bankleitzahlenänderungsdatei änderungsdatei)
        {
            using (var webclient = WebClientFactory.CreateWebClient())
            {
                var stream = await webclient.OpenReadTaskAsync(änderungsdatei.Uri);

                return LadeBankenAusStream(stream);
            }
        }
 private Task<List<Bank>> LadeBankenAusÄnderungsdatei_Lokal(Bankleitzahlenänderungsdatei änderungsdatei)
 {
     var pfad = änderungsdatei.Uri.LocalPath;
     var stream = FileSystem.File.OpenRead(pfad);
     var banken = LadeBankenAusStream(stream);
     return Task.FromResult(banken);
 }
 public async Task<List<Bank>> GetBanken(Bankleitzahlenänderungsdatei änderungsdatei) => await BankleitzahlenänderungsdateiService.LadeBankenAusÄnderungsdatei(änderungsdatei);
        public async void Bundesbank_BankleitzahlenänderungsdateiService_LadeBankenAusLokalerDatei()
        {
            var änderungsdatei = new Bankleitzahlenänderungsdatei
            {
                Uri = new Uri(@"c:\data\Bundesbankänderungsdateien\blz_2015_09_07_txt.txt")
            };

            var banken = await _service.LadeBankenAusÄnderungsdatei(änderungsdatei);

            Assert.That(banken.Count(), Is.EqualTo(3));

            var bank = banken.First();
            Assert.That((int)bank.Bankleitzahl, Is.EqualTo(10030500));
            Assert.That(bank.Name, Is.EqualTo("Bankhaus Löbbecke"));
            Assert.That(bank.Adresse.City, Is.EqualTo("Berlin"));
            Assert.That(bank.Adresse.PostalCode, Is.EqualTo("10117"));
        }