/// <summary>
        /// Gets the master page.
        /// </summary>
        /// <returns></returns>
        /// <remarks>
        /// Sequence Diagram:<br/>
        ///     <img src="SequenceDiagrams/SD_PrintRoverWeb.Administration.DiscoverDevices.GetMasterPage.jpg"/>
        /// </remarks>
        private InnerPage GetMasterPage()
        {
            MasterPage masterPage = this.Page.Master;
            InnerPage  headerPage = (InnerPage)masterPage;

            return(headerPage);
        }
        private void MergePages(InnerPage <TKey, TItem> page, int index, DataPage <TKey, TItem> childPage)
        {
            bool isPrevious;
            DataPage <TKey, TItem> previous = null;
            DataPage <TKey, TItem> next     = null;
            int size = page.CurrentSize;

            if (size == 0)
            {
                // page parameter is RootPage; we should replace RootPage with childPage;
                RootPageRef = childPage;
                return;
            }

            if (index == -1)
            {
                isPrevious = false;
                next       = page.GetPage(index + 1);
            }
            else if (index == size - 1)
            {
                isPrevious = true;
                previous   = page.GetPage(index - 1);
            }
            else
            {
                previous   = page.GetPage(index - 1);
                next       = page.GetPage(index + 1);
                isPrevious = previous.CurrentSize < next.CurrentSize;
            }

            if (isPrevious)
            {
                if (previous.Merge(childPage))
                {
                    page.Remove(index);
                }
                else
                {
                    page[index] = new KeyValuePair <TKey, IPageRef>(childPage.Key, childPage.Identifier);
                }
            }
            else
            {
                if (childPage.Merge(next))
                {
                    page.Remove(index + 1);
                }
                else
                {
                    page[index + 1] = new KeyValuePair <TKey, IPageRef>(next.Key, next.Identifier);
                }
            }
        }
        private void ChangeRootPage(DataPage <TKey, TItem> newInnerPage)
        {
            var oldRoot = RootPage;

            RootPageRef = new InnerPage <TKey, TItem>(provider);
            var rootPage = RootPage.AsInnerPage;

            rootPage.Insert(-1, default(TKey), oldRoot.Identifier);
            rootPage.Insert(0, newInnerPage.Key, newInnerPage.Identifier);
            if (HasMeasures)
            {
                rootPage.AddToMeasures(oldRoot);
                rootPage.AddToMeasures(newInnerPage);
            }
        }