private ICollectionPage <Quaggan> ConvertAsyncResponse(Task <IResponse <ICollection <QuagganDataContract> > > task, int pageIndex) { Contract.Requires(task != null); Contract.Ensures(Contract.Result <ICollectionPage <Quaggan> >() != null); var values = this.converterForPageResponse.Convert(task.Result); if (values == null) { return(new CollectionPage <Quaggan>(0)); } PageContextPatchUtility.Patch(values, pageIndex); return(values); }
/// <inheritdoc /> ICollectionPage <Quaggan> IPaginator <Quaggan> .FindPage(int pageIndex) { var request = new QuagganPageRequest { Page = pageIndex }; var response = this.serviceClient.Send <ICollection <QuagganDataContract> >(request); var values = this.converterForPageResponse.Convert(response); if (values == null) { return(new CollectionPage <Quaggan>(0)); } PageContextPatchUtility.Patch(values, pageIndex); return(values); }
/// <inheritdoc /> ICollectionPage <TValue> IConverter <IResponse <ICollection <TDTO> >, ICollectionPage <TValue> > .Convert(IResponse <ICollection <TDTO> > value, object state) { if (value == null) { return(new CollectionPage <TValue>(0)); } // MEMO: expect the page index as state argument, because we can't parse Link headers yet var pageIndex = state as int?; if (!pageIndex.HasValue) { throw new ArgumentException("Precondition: state is int", "state"); } var dataContracts = value.Content; if (dataContracts == null) { return(new CollectionPage <TValue>(0)); } var page = new CollectionPage <TValue>(dataContracts.Count) { PageSize = value.GetPageSize(), PageCount = value.GetPageTotal(), SubtotalCount = value.GetResultCount(), TotalCount = value.GetResultTotal() }; page.AddRange(dataContracts.Select(dataContract => this.dataContractConverter.Convert(dataContract, value))); // TODO: replace this code with an implementation of the Link header PageContextPatchUtility.Patch(page, pageIndex.Value); return(page); }