示例#1
0
        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}");
            }
        }
示例#2
0
 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);
            }
        }
示例#5
0
        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;
                        }
                    }
                }
            }
        }
示例#6
0
        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);
        }
示例#7
0
 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);