public async Task <T> GetSubjectAsync <T>(KnowedgebaseSubjects subject, CancellationToken token) where T : class { try { using (var reader = await _source.GetKnowledgebaseXml(subject, token)) { var serialiser = new XmlSerializer(typeof(T)); return(serialiser.Deserialize(reader) as T); } } catch (KnowledgebaseException) { throw; } catch (AggregateException ae) { if (ae.InnerExceptions.Count == 1) { throw ae.InnerExceptions[0]; } throw; } catch (Exception e) { _logger.Error(e, "Error when deserialising xml for {subject}", subject); throw new KnowledgebaseException($"Error when deserialising xml for {subject}"); } }
public async void GetXml(KnowedgebaseSubjects subject, string expectedRoot) { using (var reader = await _client.GetKnowledgebaseXml(subject, CancellationToken.None)) { while (reader.Read()) { if (reader.IsStartElement()) { Assert.Equal(expectedRoot, reader.Name); break; } } } }
public async Task <XmlTextReader> GetKnowledgebaseXml(KnowedgebaseSubjects subject, CancellationToken token) { try { var stream = await GetKnowledgebaseStream(subject, token); return(new XmlTextReader(stream)); } catch (KnowledgebaseException) { throw; } catch (Exception e) { var message = $"Error getting {Enum.GetName(typeof(KnowedgebaseSubjects), subject)}"; _logger.Error(e, message); throw new KnowledgebaseException(message, e); } }
public override Task <Stream> GetKnowledgebaseStream(KnowedgebaseSubjects subject, CancellationToken token) { if (!_files.TryGetValue(subject, out var file)) { var message = $"{Enum.GetName(typeof(KnowedgebaseSubjects), subject)} file not configured"; _logger.Error(message); throw new KnowledgebaseException(message); } try { return(Task.FromResult((Stream)File.OpenRead(file))); } catch (FileNotFoundException fe) { var message = $"{Enum.GetName(typeof(KnowedgebaseSubjects), subject)} file does not exist: {file}"; _logger.Error(fe, message); throw new KnowledgebaseException(message); } }
public async void GetXml(KnowedgebaseSubjects subject, string expectedRoot) { using (var client = new NationalRailEnquiriesSource(new HttpClient(), Substitute.For <ILogger>())) { await client.Initiate(user, password, CancellationToken.None); using (var reader = await client.GetKnowledgebaseXml(subject, CancellationToken.None)) { while (reader.Read()) { if (reader.IsStartElement()) { Assert.Equal(expectedRoot, reader.Name); break; } } } } }
public override async Task <Stream> GetKnowledgebaseStream(KnowedgebaseSubjects subject, CancellationToken token) { if (!IsInititated) { throw new KnowledgebaseException("Source not initialised."); } var response = await _client.GetAsync(SourceUrls[subject], token); if (response.IsSuccessStatusCode) { return(await response.Content.ReadAsStreamAsync()); } var message = $"Http Error {response.StatusCode} getting {Enum.GetName(typeof(KnowedgebaseSubjects), subject)}"; _logger.Error(message); throw new KnowledgebaseException(message); }
private static Task CreateOutputTask(KnowedgebaseSubjects subject, NationalRailEnquiriesSource source, string outputFolder, CancellationToken token) { return(Task.Run(async() => { var subjectName = Enum.GetName(typeof(KnowedgebaseSubjects), subject); try { using (var reader = new StreamReader(await source.GetKnowledgebaseStream(subject, token))) { var fileName = Path.Combine(outputFolder, $"{subjectName}.xml"); var xml = reader.ReadToEnd(); await File.WriteAllTextAsync(fileName, xml, token); Log.Information($"Downloaded {subjectName}", subjectName); } } catch (Exception e) { Log.Error(e, $"Error retrieving {subjectName}", subjectName); throw; } }, token)); }
public abstract Task <Stream> GetKnowledgebaseStream(KnowedgebaseSubjects subject, CancellationToken token);