Exemplo n.º 1
0
        private CachedDataViewState GetCacheState(CollectionQuery query)
        {
            var lastIndexRequested = query.Skip + query.Take - 1;

            CachedDataSet cachedItems;

            if (cachedData.TryGetValue(query.CacheKey, out cachedItems) == false)
            {
                return(CachedDataViewState.CompleteMiss);
            }
            else if (lastIndexRequested < cachedItems.Items.Count)
            {
                return(CachedDataViewState.CompleteHit);
            }
            else if (query.Skip < cachedItems.Items.Count && cachedItems.IsComplete == false)
            {
                return(CachedDataViewState.PartialHit);
            }
            else if (cachedItems.IsComplete)
            {
                return(CachedDataViewState.CompleteHit);
            }
            else
            {
                return(CachedDataViewState.CompleteMiss);
            }
        }
Exemplo n.º 2
0
        private bool IsEndOfCache(CollectionQuery query)
        {
            CachedDataSet cachedItems;

            if (cachedData.TryGetValue(query.CacheKey, out cachedItems) == false)
            {
                return(false);
            }

            var cacheState = GetCacheState(query);

            if (cacheState == CachedDataViewState.CompleteMiss)
            {
                return(false);
            }
            else if (cacheState == CachedDataViewState.PartialHit)
            {
                return(true);
            }
            else if (cachedItems.Items.Count < query.Take && cachedItems.IsComplete)
            {
                return(true);
            }
            else
            {
                return(cachedItems.Items.Count - query.Take == query.Skip);
            }
        }
 protected override async Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken)
 {
     var next = await client.ListContainersSegmentedAsync(continuationToken as BlobContinuationToken);
     var result = new LoadMoreResult(next.Results.Where
         (r => 
             query.Filter == null || 
             (r.Name.IndexOf(query.Filter,StringComparison.InvariantCultureIgnoreCase)  >= 0)
         ).Select(r => new ContainerRecord(r) as object).ToList(), next.ContinuationToken);
     return result;
 }
Exemplo n.º 4
0
        public bool HasAllDataBeenLoaded(CollectionQuery query)
        {
            CachedDataSet dataSet;

            if (cachedData.TryGetValue(query.CacheKey, out dataSet) == false)
            {
                return(false);
            }
            return(dataSet.IsComplete);
        }
Exemplo n.º 5
0
        protected override async Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken)
        {
            BlobResultSegment next;

            next = await container.ListBlobsSegmentedAsync(query.Filter, true, BlobListingDetails.All, null, (continuationToken as BlobContinuationToken), new BlobRequestOptions(), new Microsoft.WindowsAzure.Storage.OperationContext());
     

            var result = new LoadMoreResult(next.Results.Select(r => r as object).ToList(), next.ContinuationToken );
            return result;
        }
Exemplo n.º 6
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            lock (cachedData)
            {
                var cacheState = GetCacheState(query);

                if (cacheState != CachedDataViewState.CompleteHit && isLoading == false && HasAllDataBeenLoaded(query) == false)
                {
                    isLoading = true;
                    pump.QueueAsyncAction(LoadMoreAsync(query, lastContinuationToken), (t) =>
                    {
                        if (t.Exception != null)
                        {
                            throw new AggregateException(t.Exception);
                        }
                        lock (cachedData)
                        {
                            CachedDataSet results;
                            if (cachedData.TryGetValue(query.CacheKey, out results) == false)
                            {
                                results = new CachedDataSet();
                                results.Items.AddRange(t.Result.Items);
                                cachedData.Add(query.CacheKey, results);
                            }
                            else
                            {
                                results.Items.AddRange(t.Result.Items);
                            }

                            if (t.Result.ContinuationToken == null)
                            {
                                results.IsComplete = true;
                            }
                        }

                        lastContinuationToken = t.Result.ContinuationToken;
                        isLoading             = false;
                        FireDataChanged();
                    });
                }

                if (cacheState == CachedDataViewState.CompleteHit)
                {
                    return(CreateFromCache(query, true, HasAllDataBeenLoaded(query) && IsEndOfCache(query)));
                }
                else if (cacheState == CachedDataViewState.CompleteMiss)
                {
                    return(new CollectionDataView(new List <object>(), HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query), query.Skip));
                }
                else
                {
                    return(CreateFromCache(query, HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query)));
                }
            }
        }
Exemplo n.º 7
0
        public override int GetHighestKnownIndex(CollectionQuery query)
        {
            IEnumerable <object> results = Items;

            if (query.Filter != null)
            {
                results = results.Where(item => MatchesFilter(item, query.Filter));
            }

            return(results.Count() - 1);
        }
Exemplo n.º 8
0
        public override int GetHighestKnownIndex(CollectionQuery query)
        {
            IEnumerable<object> results = Items;

            if (query.Filter != null)
            {
                results = results.Where(item => MatchesFilter(item, query.Filter));
            }

            return results.Count() - 1;
        }
Exemplo n.º 9
0
 public override int GetHighestKnownIndex(CollectionQuery query)
 {
     if (cachedData.ContainsKey(query.CacheKey))
     {
         return(cachedData[query.CacheKey].Items.Count - 1);
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 10
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            lock(cachedData)
            {
                var cacheState = GetCacheState(query);

                if (cacheState != CachedDataViewState.CompleteHit && isLoading == false && HasAllDataBeenLoaded(query) == false)
                {
                    isLoading = true;
                    pump.QueueAsyncAction(LoadMoreAsync(query, lastContinuationToken), (t) =>
                     {
                         if (t.Exception != null) throw new AggregateException(t.Exception);
                         lock (cachedData)
                         {
                             CachedDataSet results;
                             if (cachedData.TryGetValue(query.CacheKey, out results) == false)
                             {
                                 results = new CachedDataSet();
                                 results.Items.AddRange(t.Result.Items);
                                 cachedData.Add(query.CacheKey, results);
                             }
                             else
                             {
                                 results.Items.AddRange(t.Result.Items);
                             }

                             if (t.Result.ContinuationToken == null)
                             {
                                 results.IsComplete = true;
                             }
                         }

                         lastContinuationToken = t.Result.ContinuationToken;
                         isLoading = false;
                         FireDataChanged();
                     });
                }

                if (cacheState == CachedDataViewState.CompleteHit)
                {
                    return CreateFromCache(query, true, HasAllDataBeenLoaded(query) && IsEndOfCache(query));
                }
                else if (cacheState == CachedDataViewState.CompleteMiss)
                {
                    return new CollectionDataView(new List<object>(), HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query), query.Skip);
                }
                else
                {
                    return CreateFromCache(query, HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query));
                }
            }
        }
 protected override async Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken)
 {
     var tableQuery = new TableQuery();
     tableQuery.FilterString = query.Filter;
     try
     {
         var next = await table.ExecuteQuerySegmentedAsync(tableQuery, continuationToken as TableContinuationToken);
         var result = new LoadMoreResult(next.Results.Select(r => r as object).ToList(), next.ContinuationToken);
         return result;
     }
     catch (StorageException ex)
     {
         var result = new LoadMoreResult(new List<object>(), null);
         return result;
     }
 }
Exemplo n.º 12
0
        private void InitGridViewModel()
        {
            this.SelectionMode  = GridSelectionMode.Row;
            this.RowPrefix      = ConsoleString.Empty;
            this.Gutter         = 3;
            this.VisibleColumns = new ObservableCollection <ColumnViewModel>();

            visibleRowOffset = 0;
            SelectedIndex    = 0;
            dataSourceSub    = SubscribeUnmanaged(nameof(DataSource), DataSourceOrBoundsChangedListener);
            boundsSub        = SubscribeUnmanaged(nameof(Bounds), DataSourceOrBoundsChangedListener);

            this.query = new CollectionQuery();

            this.NoDataMessage           = "No data";
            this.EndOfDataMessage        = "End";
            this.NoVisibleColumnsMessage = "No visible columns";
        }
Exemplo n.º 13
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            IEnumerable <object> results = Items;

            if (query.Filter != null)
            {
                results = results.Where(item => MatchesFilter(item, query.Filter));
            }

            results = results.Skip(query.Skip).Take(query.Take);

            foreach (var orderBy in query.SortOrder)
            {
                if (results is IOrderedEnumerable <object> )
                {
                    if (orderBy.Descending)
                    {
                        results = (results as IOrderedEnumerable <object>).ThenByDescending(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                    else
                    {
                        results = (results as IOrderedEnumerable <object>).ThenBy(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                }
                else
                {
                    if (orderBy.Descending)
                    {
                        results = results.OrderByDescending(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                    else
                    {
                        results = results.OrderBy(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                }
            }

            return(new CollectionDataView(results.ToList(), true, query.Skip + query.Take >= Items.Where(item => MatchesFilter(item, query.Filter)).Count() - 1, query.Skip));
        }
Exemplo n.º 14
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            IEnumerable<object> results = Items;

            if (query.Filter != null)
            {
                results = results.Where(item => MatchesFilter(item, query.Filter));
            }

            results = results.Skip(query.Skip).Take(query.Take);

            foreach (var orderBy in query.SortOrder)
            {
                if (results is IOrderedEnumerable<object>)
                {
                    if (orderBy.Descending)
                    {
                        results = (results as IOrderedEnumerable<object>).ThenByDescending(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                    else
                    {
                        results = (results as IOrderedEnumerable<object>).ThenBy(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                }
                else
                {
                    if (orderBy.Descending)
                    {
                        results = results.OrderByDescending(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                    else
                    {
                        results = results.OrderBy(item => item?.GetType().GetProperty(orderBy.Value).GetValue(item));
                    }
                }
            }

            return new CollectionDataView(results.ToList(), true, query.Skip + query.Take >= Items.Where(item => MatchesFilter(item, query.Filter)).Count() - 1, query.Skip);
        }
Exemplo n.º 15
0
 private CollectionDataView CreateFromCache(CollectionQuery query, bool cachedPageIsComplete, bool isEndOfData)
 {
     var results = cachedData[query.CacheKey].Items.Skip(query.Skip).Take(query.Take);
     return new CollectionDataView(results.ToList(),cachedPageIsComplete,isEndOfData, query.Skip);
 }
 public abstract int GetHighestKnownIndex(CollectionQuery query);
Exemplo n.º 17
0
 protected abstract Task <LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken);
Exemplo n.º 18
0
        private CollectionDataView CreateFromCache(CollectionQuery query, bool cachedPageIsComplete, bool isEndOfData)
        {
            var results = cachedData[query.CacheKey].Items.Skip(query.Skip).Take(query.Take);

            return(new CollectionDataView(results.ToList(), cachedPageIsComplete, isEndOfData, query.Skip));
        }
 public abstract int GetHighestKnownIndex(CollectionQuery query);
Exemplo n.º 20
0
 protected override async Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken)
 {
     var next = await client.ListTablesSegmentedAsync(query.Filter, continuationToken as TableContinuationToken);
     var result = new LoadMoreResult(next.Results.Select(r => r as object).ToList(), next.ContinuationToken);
     return result;
 }
        protected override Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken)
        {
            return Task.Factory.StartNew(() =>
            {
                int index = continuationToken == null ? 0 : int.Parse(continuationToken as string);
                // sleep to simulate a delay in the async code
                Thread.Sleep(rand.Next((int)MaxDelay.TotalMilliseconds / 2, (int)MaxDelay.TotalMilliseconds));
                List<object> batch = new List<object>();
                while (batch.Count < LoadBatchSize && index < serverData.Count)
                {
                    if (query.Filter == null || serverData[index].Value.IndexOf(query.Filter, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        batch.Add(serverData[index]);
                    }
                    index++;
                }

                foreach (var item in batch)
                {
                    Assert.IsNotNull(item);
                }

                var ret = new LoadMoreResult(batch, batch.Count == 0 ? null : index < serverData.Count ? index + "" : null);
                return ret;
            });
        }
 public abstract CollectionDataView GetDataView(CollectionQuery query);
Exemplo n.º 23
0
        private bool IsEndOfCache(CollectionQuery query)
        {
            CachedDataSet cachedItems;

            if (cachedData.TryGetValue(query.CacheKey, out cachedItems) == false)
            {
                return false;
            }

            var cacheState = GetCacheState(query);
            if (cacheState == CachedDataViewState.CompleteMiss) return false;
            else if (cacheState == CachedDataViewState.PartialHit) return true;
            else
            {
                return query.Skip + query.Take >= cachedItems.Items.Count;
            }
        }
 public abstract CollectionDataView GetDataView(CollectionQuery query);
Exemplo n.º 25
0
 protected abstract Task<LoadMoreResult> LoadMoreAsync(CollectionQuery query, object continuationToken);
Exemplo n.º 26
0
        private void InitGridViewModel()
        {
            this.SelectionMode = GridSelectionMode.Row;
            this.RowPrefix = ConsoleString.Empty;
            this.Gutter = 3;
            this.VisibleColumns = new ObservableCollection<ColumnViewModel>();

            visibleRowOffset = 0;
            SelectedIndex = 0;
            dataSourceSub = SubscribeUnmanaged(nameof(DataSource), DataSourceOrBoundsChangedListener);
            boundsSub = SubscribeUnmanaged(nameof(Bounds), DataSourceOrBoundsChangedListener);

            this.query = new CollectionQuery();

            this.NoDataMessage = "No data";
            this.EndOfDataMessage = "End";
            this.NoVisibleColumnsMessage = "No visible columns";
        }
Exemplo n.º 27
0
 public override int GetHighestKnownIndex(CollectionQuery query)
 {
     if(cachedData.ContainsKey(query.CacheKey))
     {
         return cachedData[query.CacheKey].Items.Count - 1;
     }
     else
     {
         return 0;
     }
 }
Exemplo n.º 28
0
        public void LoadMoreBasic()
        {
            int expectedNumberOfItems = 95;
            CliMessagePump pump = new CliMessagePump(ConsoleProvider.Current);
            TestLoadMoreDataSource dataSource = new TestLoadMoreDataSource(pump, expectedNumberOfItems, TimeSpan.FromMilliseconds(50));

            var query = new CollectionQuery(0, 7, null);
            List<object> viewedData = new List<object>();
            var pumpTask = pump.Start();
            try
            {
                // make sure the pump has started up
                Thread.Sleep(20);

                // the first call to GetDataView should return an empty result that indicates that the view is incomplete
                // because it is still loading data
                var initialDataView = dataSource.GetDataView(query);
                Assert.IsFalse(initialDataView.IsViewComplete);
                Assert.IsFalse(initialDataView.IsViewEndOfData);
                Assert.AreEqual(0, initialDataView.Items.Count);

                // Since we're simulating the server call and we know the max amount of time it can take wait twice that long
                Thread.Sleep(dataSource.MaxDelay + dataSource.MaxDelay);

                // Now there should be a full page of data available to us
                var nextAttemptDataView = dataSource.GetDataView(query);
                Assert.AreEqual(query.Take, nextAttemptDataView.Items.Count);
                Assert.IsTrue(nextAttemptDataView.IsViewComplete);
                Assert.IsFalse(nextAttemptDataView.IsViewEndOfData);

                viewedData.AddRange(nextAttemptDataView.Items);
                query.Skip += query.Take;

                // now ask for data in a tight loop.  Sometimes we will get more data, sometimes we'll get an empty page
                // while more data is being loaded
                while (nextAttemptDataView.IsViewEndOfData == false)
                {
                    nextAttemptDataView = dataSource.GetDataView(query);

                    Console.WriteLine(nextAttemptDataView.Items.Count + " items, viewComplete == " + nextAttemptDataView.IsViewComplete);

                    if (nextAttemptDataView.Items.Count < query.Take && nextAttemptDataView.IsViewEndOfData == false)
                    {
                        Thread.Sleep(10);
                        Assert.IsFalse(nextAttemptDataView.IsViewComplete);
                    }
                    else if (nextAttemptDataView.Items.Count == query.Take)
                    {
                        Assert.IsTrue(nextAttemptDataView.IsViewComplete);
                    }
                    else if (nextAttemptDataView.Items.Count > query.Take)
                    {
                        Assert.Fail(nextAttemptDataView.Items.Count + " should never exceed " + query.Take);
                    }

                    viewedData.AddRange(nextAttemptDataView.Items);
                    query.Skip += nextAttemptDataView.Items.Count;
                }

                int nextExpectedId = 0;
                foreach (var item in viewedData)
                {
                    Assert.IsNotNull(item);
                    Console.WriteLine(item);
                    Assert.AreEqual(nextExpectedId++, ((Item)item).Id);
                }

                Assert.AreEqual(expectedNumberOfItems, viewedData.Count);
                console.Input.Enqueue(new ConsoleKeyInfo(' ', ConsoleKey.Escape, false, false, false));
            } finally
            {
                pump.Stop();
                pumpTask.Wait();
            }
        }
Exemplo n.º 29
0
 public bool HasAllDataBeenLoaded(CollectionQuery query)
 {
     CachedDataSet dataSet;
     if(cachedData.TryGetValue(query.CacheKey, out dataSet) == false)
     {
         return false;
     }
     return dataSet.IsComplete;
 }
Exemplo n.º 30
0
        private CachedDataViewState GetCacheState(CollectionQuery query)
        {
            var lastIndexRequested = query.Skip + query.Take- 1;

            CachedDataSet cachedItems;

            if(cachedData.TryGetValue(query.CacheKey, out cachedItems) == false)
            {
                return CachedDataViewState.CompleteMiss;
            }
            else if(lastIndexRequested < cachedItems.Items.Count)
            {
                return CachedDataViewState.CompleteHit;
            }
            else if(query.Skip < cachedItems.Items.Count && cachedItems.IsComplete == false)
            {
                return CachedDataViewState.PartialHit;
            }
            else if(cachedItems.IsComplete)
            {
                return CachedDataViewState.CompleteHit;
            }
            else
            {
                return CachedDataViewState.CompleteMiss;
            }
        }