1   package com.atlassian.user.search.page;
2   
3   import java.util.Iterator;
4   import java.util.List;
5   import java.util.NoSuchElementException;
6   
7   /**
8    * @deprecated use MergedListPager 
9    */
10  @SuppressWarnings("unchecked") /* Not made generic because it's deprecated */
11  public class MergedPager implements Pager
12  {
13      private final Pager leftPager;
14      private final Pager rightPager;
15  
16      /**
17       * Do not instantiate a MergedPager directly, use {@link PagerFactory#getPager}
18       */
19      MergedPager(Pager pager1, Pager rightPager)
20      {
21          this.leftPager = pager1;
22          this.rightPager = rightPager;
23      }
24  
25      public boolean isEmpty()
26      {
27          return (leftPager == null || leftPager.isEmpty()) && (rightPager == null || rightPager.isEmpty());
28      }
29  
30      public Iterator iterator()
31      {
32          if (leftPager == null && rightPager == null)
33          {
34              return new Iterator()
35              {
36                  public void remove()
37                  {
38                      throw new UnsupportedOperationException("This iterator does not support removal");
39                  }
40  
41                  public boolean hasNext()
42                  {
43                      return false;
44                  }
45  
46                  public Object next()
47                  {
48                      throw new NoSuchElementException("Empty iterator");
49                  }
50              };
51          }
52          else if (leftPager != null && rightPager != null)
53          {
54              return new Iterator()
55              {
56  
57                  Iterator iter1 = leftPager.iterator();
58                  Iterator iter2 = rightPager.iterator();
59  
60                  public void remove()
61                  {
62                      throw new UnsupportedOperationException("This iterator does not support removal");
63                  }
64  
65                  public boolean hasNext()
66                  {
67                      return (iter1.hasNext() || iter2.hasNext());
68                  }
69  
70                  public Object next()
71                  {
72                      if (iter1.hasNext())
73                          return iter1.next();
74                      else if (iter2.hasNext())
75                          return iter2.next();
76  
77                      throw new NoSuchElementException("Exhausted iterator");
78                  }
79              };
80          }
81          else if (leftPager == null)
82              return rightPager.iterator();
83          else
84              return leftPager.iterator();
85      }
86  
87      public List getCurrentPage()
88      {
89          List currentPage = leftPager.getCurrentPage();
90  
91          // fetch some more if preload limit has not been reached
92          for (Object o : rightPager.getCurrentPage())
93          {
94              if (currentPage.size() < PRELOAD_LIMIT)
95                  currentPage.add(o);
96              else
97                  break;
98          }
99  
100         return currentPage;
101     }
102 
103     public void nextPage()
104     {
105         leftPager.nextPage();
106 
107         if (leftPager.getCurrentPage().isEmpty())
108             rightPager.nextPage();
109     }
110 
111     public boolean onLastPage()
112     {
113         return (leftPager.getCurrentPage().isEmpty() && rightPager.onLastPage());
114     }
115 
116     public void skipTo(int index) throws PagerException
117     {
118         leftPager.skipTo(index);
119 
120         if (leftPager.getIndex() != index)
121             rightPager.skipTo(index - leftPager.getIndex() - leftPager.getCurrentPage().size());
122     }
123 
124     /**
125      * @return the current index position of the pager
126      */
127     public int getIndex()
128     {
129         return leftPager.getIndex() + rightPager.getIndex();
130     }
131 
132     public int getIndexOfFirstItemInCurrentPage()
133     {
134         if (!(leftPager.getCurrentPage().isEmpty()))
135             return leftPager.getIndexOfFirstItemInCurrentPage();
136 
137         return leftPager.getIndexOfFirstItemInCurrentPage() + rightPager.getIndexOfFirstItemInCurrentPage();
138     }
139 }