/// <summary> /// Reads the specified <paramref name="source"/> /// </summary> /// <param name="source">The source to be read</param> /// <returns>An <see cref="IEnumerable{BaseData}"/> that contains the data in the source</returns> public IEnumerable<BaseData> Read(SubscriptionDataSource source) { IStreamReader reader = null; var instances = new BaseDataCollection(); try { switch (source.TransportMedium) { default: case SubscriptionTransportMedium.Rest: reader = new RestSubscriptionStreamReader(source.Source); break; case SubscriptionTransportMedium.LocalFile: reader = new LocalFileSubscriptionStreamReader(source.Source); break; case SubscriptionTransportMedium.RemoteFile: reader = new RemoteFileSubscriptionStreamReader(source.Source, Globals.Cache); break; } var raw = ""; try { raw = reader.ReadLine(); var result = _factory.Reader(_config, raw, _date, _isLiveMode); instances = result as BaseDataCollection; if (instances == null) { OnInvalidSource(source, new Exception("Reader must generate a BaseDataCollection with the FileFormat.Collection")); } } catch (Exception err) { OnReaderError(raw, err); } foreach (var instance in instances.Data) { yield return instance; } } finally { if (reader != null) reader.Dispose(); } }
/// <summary> /// Creates a new <see cref="IStreamReader"/> for the specified <paramref name="subscriptionDataSource"/> /// </summary> /// <param name="subscriptionDataSource">The source to produce an <see cref="IStreamReader"/> for</param> /// <returns>A new instance of <see cref="IStreamReader"/> to read the source, or null if there was an error</returns> private IStreamReader CreateStreamReader(SubscriptionDataSource subscriptionDataSource) { IStreamReader reader; switch (subscriptionDataSource.TransportMedium) { case SubscriptionTransportMedium.LocalFile: reader = HandleLocalFileSource(subscriptionDataSource); break; case SubscriptionTransportMedium.RemoteFile: reader = HandleRemoteSourceFile(subscriptionDataSource); break; case SubscriptionTransportMedium.Rest: reader = new RestSubscriptionStreamReader(subscriptionDataSource.Source); break; default: throw new InvalidEnumArgumentException("Unexpected SubscriptionTransportMedium specified: " + subscriptionDataSource.TransportMedium); } return reader; }