FetchNextPage(long skipCount)
{
return fetchPageDelegate(MaxNumItems, skipCount);
}
public class Page
{
public Page(IList
items, long? totalNumItems, bool? hasMoreItems)
{
Items = items;
TotalNumItems = totalNumItems;
HasMoreItems = hasMoreItems;
}
public IList
Items { get; private set; }
public long? TotalNumItems { get; private set; }
public bool? HasMoreItems { get; private set; }
}
}
///
/// CMIS Collection Enumerable.
///
public class CollectionEnumerable : AbstractEnumerable
{
public CollectionEnumerable(PageFetcher pageFetcher) :
this(0, pageFetcher) { }
public CollectionEnumerable(long position, PageFetcher pageFetcher) :
base(position, pageFetcher) { }
protected override AbstractEnumerator CreateEnumerator()
{
return new CollectionEnumerator(SkipCount, PageFetcher);
}
}
///
/// Enumerator for iterating over all items in a CMIS Collection.
///
public class CollectionEnumerator : AbstractEnumerator
{
public CollectionEnumerator(long skipCount, PageFetcher pageFetcher) :
base(skipCount, pageFetcher) { }
public override bool MoveNext()
{
PageFetcher.Page page = GetCurrentPage();
if (page == null)
{
return false;
}
IList items = page.Items;
if (items == null || items.Count == 0)
{
return false;
}
if (SkipOffset == items.Count)
{
if (!HasMoreItems)
{
return false;
}
page = IncrementPage();
items = page == null ? null : page.Items;
}
if (items == null || items.Count == 0 || SkipOffset == items.Count)
{
return false;
}
Current = items[IncrementSkipOffset()];
return true;
}
}
///
/// Enumerable for a CMIS Collection Page.
///
public class CollectionPageEnumerable : AbstractEnumerable
{
public CollectionPageEnumerable(PageFetcher pageFetcher) :
this(0, pageFetcher) { }
public CollectionPageEnumerable(long position, PageFetcher pageFetcher) :
base(position, pageFetcher) { }
protected override AbstractEnumerator CreateEnumerator()
{
return new CollectionPageEnumerator(SkipCount, PageFetcher);
}
}
///
/// Enumerator for iterating over a page of items in a CMIS Collection.
///
public class CollectionPageEnumerator : AbstractEnumerator
{
public CollectionPageEnumerator(long skipCount, PageFetcher pageFetcher) :
base(skipCount, pageFetcher) { }
public override bool MoveNext()
{
PageFetcher.Page page = GetCurrentPage();
if (page == null)
{
return false;
}
IList items = page.Items;
if (items == null || items.Count == 0 || SkipOffset == items.Count)
{
return false;
}
Current = items[IncrementSkipOffset()];
return true;
}
}
}