View Javadoc
1   /*
2    * Copyright 2004-2026 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    https://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.ibatis.common.util;
17  
18  import java.util.ArrayList;
19  import java.util.Collection;
20  import java.util.Iterator;
21  import java.util.List;
22  import java.util.ListIterator;
23  
24  /**
25   * Implementation of PaginatedList backed by an ArrayList.
26   *
27   * @deprecated All paginated list features have been deprecated
28   */
29  @Deprecated
30  public class PaginatedArrayList implements PaginatedList {
31  
32    /** The Constant EMPTY_LIST. */
33    private static final ArrayList EMPTY_LIST = new ArrayList<>(0);
34  
35    /** The list. */
36    private List list;
37  
38    /** The page. */
39    private List page;
40  
41    /** The page size. */
42    private int pageSize;
43  
44    /** The index. */
45    private int index;
46  
47    /**
48     * Instantiates a new paginated array list.
49     *
50     * @param pageSize
51     *          the page size
52     */
53    @Deprecated
54    public PaginatedArrayList(int pageSize) {
55      this.pageSize = pageSize;
56      this.index = 0;
57      this.list = new ArrayList<>();
58      repaginate();
59    }
60  
61    /**
62     * Constructor to set the initial size and the page size.
63     *
64     * @param initialCapacity
65     *          - the initial size
66     * @param pageSize
67     *          - the page size
68     */
69    @Deprecated
70    public PaginatedArrayList(int initialCapacity, int pageSize) {
71      this.pageSize = pageSize;
72      this.index = 0;
73      this.list = new ArrayList<>(initialCapacity);
74      repaginate();
75    }
76  
77    /**
78     * Constructor to create an instance using an existing collection.
79     *
80     * @param c
81     *          - the collection to build the instance with
82     * @param pageSize
83     *          - the page size
84     */
85    @Deprecated
86    public PaginatedArrayList(Collection c, int pageSize) {
87      this.pageSize = pageSize;
88      this.index = 0;
89      this.list = new ArrayList<>(c);
90      repaginate();
91    }
92  
93    /**
94     * Repaginate.
95     */
96    private void repaginate() {
97      if (list.isEmpty()) {
98        page = EMPTY_LIST;
99      } else {
100       int start = index * pageSize;
101       int end = start + pageSize - 1;
102       if (end >= list.size()) {
103         end = list.size() - 1;
104       }
105       if (start >= list.size()) {
106         index = 0;
107         repaginate();
108       } else if (start < 0) {
109         index = list.size() / pageSize;
110         if (list.size() % pageSize == 0) {
111           index--;
112         }
113         repaginate();
114       } else {
115         page = list.subList(start, end + 1);
116       }
117     }
118   }
119 
120   /* List accessors (uses page) */
121 
122   @Deprecated
123   @Override
124   public int size() {
125     return page.size();
126   }
127 
128   @Deprecated
129   @Override
130   public boolean isEmpty() {
131     return page.isEmpty();
132   }
133 
134   @Deprecated
135   @Override
136   public boolean contains(Object o) {
137     return page.contains(o);
138   }
139 
140   @Deprecated
141   @Override
142   public Iterator iterator() {
143     return page.iterator();
144   }
145 
146   @Deprecated
147   @Override
148   public Object[] toArray() {
149     return page.toArray();
150   }
151 
152   @Deprecated
153   @Override
154   public Object[] toArray(Object a[]) {
155     return page.toArray(a);
156   }
157 
158   @Deprecated
159   @Override
160   public boolean containsAll(Collection c) {
161     return page.containsAll(c);
162   }
163 
164   @Deprecated
165   @Override
166   public Object get(int index) {
167     return page.get(index);
168   }
169 
170   @Deprecated
171   @Override
172   public int indexOf(Object o) {
173     return page.indexOf(o);
174   }
175 
176   @Deprecated
177   @Override
178   public int lastIndexOf(Object o) {
179     return page.lastIndexOf(o);
180   }
181 
182   @Deprecated
183   @Override
184   public ListIterator listIterator() {
185     return page.listIterator();
186   }
187 
188   @Deprecated
189   @Override
190   public ListIterator listIterator(int index) {
191     return page.listIterator(index);
192   }
193 
194   @Deprecated
195   @Override
196   public List subList(int fromIndex, int toIndex) {
197     return page.subList(fromIndex, toIndex);
198   }
199 
200   /* List mutators (uses master list) */
201 
202   @Deprecated
203   @Override
204   public boolean add(Object o) {
205     boolean b = list.add(o);
206     repaginate();
207     return b;
208   }
209 
210   @Deprecated
211   @Override
212   public boolean remove(Object o) {
213     boolean b = list.remove(o);
214     repaginate();
215     return b;
216   }
217 
218   @Deprecated
219   @Override
220   public boolean addAll(Collection c) {
221     boolean b = list.addAll(c);
222     repaginate();
223     return b;
224   }
225 
226   @Deprecated
227   @Override
228   public boolean addAll(int index, Collection c) {
229     boolean b = list.addAll(index, c);
230     repaginate();
231     return b;
232   }
233 
234   @Deprecated
235   @Override
236   public boolean removeAll(Collection c) {
237     boolean b = list.removeAll(c);
238     repaginate();
239     return b;
240   }
241 
242   @Deprecated
243   @Override
244   public boolean retainAll(Collection c) {
245     boolean b = list.retainAll(c);
246     repaginate();
247     return b;
248   }
249 
250   @Deprecated
251   @Override
252   public void clear() {
253     list.clear();
254     repaginate();
255   }
256 
257   @Deprecated
258   @Override
259   public Object set(int index, Object element) {
260     Object o = list.set(index, element);
261     repaginate();
262     return o;
263   }
264 
265   @Deprecated
266   @Override
267   public void add(int index, Object element) {
268     list.add(index, element);
269     repaginate();
270   }
271 
272   @Deprecated
273   @Override
274   public Object remove(int index) {
275     Object o = list.remove(index);
276     repaginate();
277     return o;
278   }
279 
280   /* Paginated List methods */
281 
282   @Deprecated
283   @Override
284   public int getPageSize() {
285     return pageSize;
286   }
287 
288   @Deprecated
289   @Override
290   public boolean isFirstPage() {
291     return index == 0;
292   }
293 
294   @Deprecated
295   @Override
296   public boolean isMiddlePage() {
297     return !isFirstPage() && !isLastPage();
298   }
299 
300   @Deprecated
301   @Override
302   public boolean isLastPage() {
303     return list.size() - (index + 1) * pageSize < 1;
304   }
305 
306   @Deprecated
307   @Override
308   public boolean isNextPageAvailable() {
309     return !isLastPage();
310   }
311 
312   @Deprecated
313   @Override
314   public boolean isPreviousPageAvailable() {
315     return !isFirstPage();
316   }
317 
318   @Deprecated
319   @Override
320   public boolean nextPage() {
321     if (isNextPageAvailable()) {
322       index++;
323       repaginate();
324       return true;
325     }
326     return false;
327   }
328 
329   @Deprecated
330   @Override
331   public boolean previousPage() {
332     if (isPreviousPageAvailable()) {
333       index--;
334       repaginate();
335       return true;
336     }
337     return false;
338   }
339 
340   @Deprecated
341   @Override
342   public void gotoPage(int pageNumber) {
343     index = pageNumber;
344     repaginate();
345   }
346 
347   @Deprecated
348   @Override
349   public int getPageIndex() {
350     return index;
351   }
352 
353 }