private async Task <IRandomAccessStreamWithContentType> GetRandomStream(LocalStorageDataConfig config) { var uri = new Uri(string.Format("ms-appx://{0}", config.FilePath)); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri); return(await file.OpenReadAsync()); }
public async Task <IEnumerable <TSchema> > GetDataByIdsAsync <TSchema>(LocalStorageDataConfig config, IEnumerable <string> ids, IParser <TSchema> parser) where TSchema : SchemaBase { #if UWP IRandomAccessStreamWithContentType randomStream = await GetRandomStream(config); using (StreamReader r = new StreamReader(randomStream.AsStreamForRead())) { var items = await parser.ParseAsync(await r.ReadToEndAsync()); if (items != null && items.Any()) { var totalAsTSchema = (items.ToList() as IEnumerable <TSchema>); var resultToReturn = totalAsTSchema.AsQueryable().Where(x => ids.Contains(x._id)).ToList(); return(resultToReturn); } return(new TSchema[0]); } #else IFolder folder = FileSystem.Current.LocalStorage; IFile file = await folder.GetFileAsync(config.FilePath); var items = await parser.ParseAsync(await file.ReadAllTextAsync()); if (items != null && items.Any()) { var totalAsTSchema = (items.ToList() as IEnumerable <TSchema>); var resultToReturn = totalAsTSchema.AsQueryable().Where(x => ids.Contains(x._id)).ToList(); return(resultToReturn); } return(new TSchema[0]); #endif }
protected override void ValidateConfig(LocalStorageDataConfig config) { if (config.FilePath == null) { throw new ConfigParameterNullException("FilePath"); } }
public async Task TestNullUrlConfig() { var config = new LocalStorageDataConfig { FilePath = null }; var dataProvider = new LocalStorageDataProvider<MenuSchema>(); ConfigParameterNullException exception = await ExceptionsAssert.ThrowsAsync<ConfigParameterNullException>(async () => await dataProvider.LoadDataAsync(config)); Assert.IsTrue(exception.Message.Contains("FilePath")); }
public async Task TestMaxRecordsLocalStaticCollection_Min() { var config = new LocalStorageDataConfig { FilePath = "/Assets/LocalCollectionData.json" }; var maxRecords = 1; var dataProvider = new LocalStorageDataProvider<CollectionSchema>(); IEnumerable<CollectionSchema> data = await dataProvider.LoadDataAsync(config, maxRecords); Assert.IsNotNull(data); Assert.AreEqual(maxRecords, data.Count()); }
public async Task LoadStaticCollection() { var config = new LocalStorageDataConfig { FilePath = "/Assets/LocalCollectionData.json" }; var dataProvider = new LocalStorageDataProvider<CollectionSchema>(); IEnumerable<CollectionSchema> data = await dataProvider.LoadDataAsync(config); Assert.IsNotNull(data); Assert.AreNotEqual(data.Count(), 0); }
private static void Assertions(LocalStorageDataConfig config, IParser <T> parser) { if (config == null) { throw new ConfigNullException(); } if (parser == null) { throw new ParserNullException(); } if (config.FilePath == null) { throw new ConfigParameterNullException("FilePath"); } }
public override async Task <IEnumerable <T> > LoadDataAsync(LocalStorageDataConfig config, IParser <T> parser) { Assertions(config, parser); var uri = new Uri(string.Format("ms-appx://{0}", config.FilePath)); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri); IRandomAccessStreamWithContentType randomStream = await file.OpenReadAsync(); using (StreamReader r = new StreamReader(randomStream.AsStreamForRead())) { return(parser.Parse(await r.ReadToEndAsync())); } }
public async void GetItems() { string localStorageQuery = "/Assets/LocalStorageSamples.json"; int maxRecordsParam = 10; string orderBy = "Title"; SortDirection sortDirection = SortDirection.Ascending; _localStorageDataProvider = new LocalStorageDataProvider<LocalStorageDataSchema>(); this.Items = new ObservableCollection<object>(); var config = new LocalStorageDataConfig { FilePath = localStorageQuery, OrderBy = orderBy, SortDirection = sortDirection }; var items = await _localStorageDataProvider.LoadDataAsync(config, maxRecordsParam); foreach (var item in items) { Items.Add(item); } }
public LocalStorageDataProvider(LocalStorageDataConfig config) : base(config, new GenericParser <T>()) { }
public override async Task <IEnumerable <T> > LoadDataAsync(LocalStorageDataConfig config) { return(await LoadDataAsync(config, new GenericParser <T>())); }
protected override async Task <IEnumerable <TSchema> > GetDataAsync <TSchema>(LocalStorageDataConfig config, int pageSize, IParser <TSchema> parser) { ContinuationToken = "1"; #if UWP IRandomAccessStreamWithContentType randomStream = await GetRandomStream(config); using (StreamReader r = new StreamReader(randomStream.AsStreamForRead())) { var items = await parser.ParseAsync(await r.ReadToEndAsync()); if (items != null && items.Any()) { _totalItems = items.ToList(); var totalAsTSchema = (_totalItems as IEnumerable <TSchema>); _hasMoreItems = totalAsTSchema.Count() > pageSize; ContinuationToken = GetContinuationToken(ContinuationToken); var resultToReturn = totalAsTSchema.AsQueryable().OrderBy(config.OrderBy, config.OrderDirection).Take(pageSize).ToList(); return(resultToReturn); } _hasMoreItems = false; return(new TSchema[0]); } #else IEnumerable <TSchema> items = null; if (config.AssemblyForEmbeddedResource == null) { IFolder folder = FileSystem.Current.LocalStorage; IFile file = await folder.GetFileAsync(config.FilePath); items = await parser.ParseAsync(await file.ReadAllTextAsync()); } else { string filename = config.FilePath.Replace('/', '.'); filename = config.AssemblyForEmbeddedResource.GetName().Name + (filename.StartsWith(".") ? "" : ".") + filename; Stream stream = config.AssemblyForEmbeddedResource.GetManifestResourceStream(filename); using (var reader = new System.IO.StreamReader(stream)) { items = await parser.ParseAsync(await reader.ReadToEndAsync()); } } if (items != null && items.Any()) { _totalItems = items.ToList(); var totalAsTSchema = (_totalItems as IEnumerable <TSchema>); _hasMoreItems = totalAsTSchema.Count() > pageSize; ContinuationToken = GetContinuationToken(ContinuationToken); var resultToReturn = totalAsTSchema.AsQueryable() .OrderBy(config.OrderBy, config.OrderDirection) .Take(pageSize) .ToList(); return(resultToReturn); } _hasMoreItems = false; return(new TSchema[0]); #endif }
public async Task <IEnumerable <TSchema> > GetDataByIdsAsync <TSchema>(LocalStorageDataConfig config, IEnumerable <string> ids) where TSchema : SchemaBase { return(await GetDataByIdsAsync(config, ids, new JsonParser <TSchema>())); }
protected override async Task <IEnumerable <TSchema> > GetDataAsync <TSchema>(LocalStorageDataConfig config, int pageSize, IParser <TSchema> parser) { ContinuationToken = "1"; IRandomAccessStreamWithContentType randomStream = await GetRandomStream(config); using (StreamReader r = new StreamReader(randomStream.AsStreamForRead())) { var items = await parser.ParseAsync(await r.ReadToEndAsync()); if (items != null && items.Any()) { _totalItems = items.ToList(); var totalAsTSchema = (_totalItems as IEnumerable <TSchema>); _hasMoreItems = totalAsTSchema.Count() > pageSize; ContinuationToken = GetContinuationToken(ContinuationToken); var resultToReturn = totalAsTSchema.AsQueryable().OrderBy(config.OrderBy, config.OrderDirection).Take(pageSize).ToList(); return(resultToReturn); } _hasMoreItems = false; return(new TSchema[0]); } }
public async Task LoadStaticCollection_ByIds() { var config = new LocalStorageDataConfig { FilePath = "/Assets/LocalCollectionData.json" }; var ids = new List<string>(); ids.Add("555ee83e352d0403381fdb7c"); ids.Add("555ee83e352d0403381fdb7a"); var dataProvider = new LocalStorageDataProvider<CollectionSchema>(); IEnumerable<CollectionSchema> data = await dataProvider.GetDataByIdsAsync<CollectionSchema>(config, ids); Assert.IsNotNull(data); Assert.AreEqual(2, data.Count()); }
public async Task LoadMoreStaticCollection_Sorting() { var config = new LocalStorageDataConfig { FilePath = "/Assets/LocalCollectionData.json" }; var dataProvider = new LocalStorageDataProvider<CollectionSchema>(); await dataProvider.LoadDataAsync(config, 2); IEnumerable<CollectionSchema> data = await dataProvider.LoadMoreDataAsync(); config.OrderBy = "Name"; config.OrderDirection = SortDirection.Ascending; IEnumerable<CollectionSchema> dataAsc = await dataProvider.LoadDataAsync(config, 2); dataAsc = await dataProvider.LoadMoreDataAsync(); config.OrderDirection = SortDirection.Descending; IEnumerable<CollectionSchema> dataDesc = await dataProvider.LoadDataAsync(config, 2); dataDesc = await dataProvider.LoadMoreDataAsync(); Assert.AreNotEqual(data.FirstOrDefault()?.Name, dataAsc.FirstOrDefault().Name); var dataExpected = dataAsc.OrderBy(x => x.Name).ToList(); for (int i = 0; i < dataExpected.Count() - 1; i++) { Assert.AreEqual(dataExpected[i].Name, dataAsc.ToList()[i].Name); } dataExpected = dataDesc.OrderByDescending(x => x.Name).ToList(); for (int i = 0; i < dataExpected.Count() - 1; i++) { Assert.AreEqual(dataExpected[i].Name, dataDesc.ToList()[i].Name); } }
public async Task LoadMoreDataInvalidOperationStaticCollection() { var config = new LocalStorageDataConfig { FilePath = "/Assets/LocalCollectionData.json" }; var dataProvider = new LocalStorageDataProvider<CollectionSchema>(); InvalidOperationException exception = await ExceptionsAssert.ThrowsAsync<InvalidOperationException>(async () => await dataProvider.LoadMoreDataAsync()); }
protected override async Task <IEnumerable <TSchema> > GetDataAsync <TSchema>(LocalStorageDataConfig config, int maxRecords, IParser <TSchema> parser) { var uri = new Uri(string.Format("ms-appx://{0}", config.FilePath)); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri); IRandomAccessStreamWithContentType randomStream = await file.OpenReadAsync(); using (StreamReader r = new StreamReader(randomStream.AsStreamForRead())) { return(parser.Parse(await r.ReadToEndAsync())); } }
protected override async Task <IEnumerable <TSchema> > GetMoreDataAsync <TSchema>(LocalStorageDataConfig config, int pageSize, IParser <TSchema> parser) { int page = Convert.ToInt32(ContinuationToken); var items = await Task.Run(() => { return(GetMoreData <TSchema>(pageSize, page)); }); _hasMoreItems = items.Any(); ContinuationToken = GetContinuationToken(ContinuationToken); return(items); }
public LocalStorageDataProvider(LocalStorageDataConfig config, IParser <T> parser) : base(config, parser) { }
protected override IParser <T> GetDefaultParserInternal(LocalStorageDataConfig config) { return(new JsonParser <T>()); }
private async void Request() { try { IsBusy = true; HasErrors = false; NoItems = false; DataProviderRawData = string.Empty; Items.Clear(); var config = new LocalStorageDataConfig { FilePath = LocalStorageQuery, OrderBy = OrderBy.ToString(), OrderDirection = SortDirection }; var items = await localStorageDataProvider.LoadDataAsync(config, MaxRecordsParam); NoItems = !items.Any(); foreach (var item in items) { Items.Add(item); } var rawParser = new RawParser(); var rawData = await rawDataProvider.LoadDataAsync(config, MaxRecordsParam, rawParser); DataProviderRawData = rawData.FirstOrDefault()?.Raw; } catch (Exception ex) { DataProviderRawData += ex.Message; DataProviderRawData += ex.StackTrace; HasErrors = true; } finally { IsBusy = false; } }