1 package net.sf.cantina;
2
3 import java.util.List;
4 import java.util.Vector;
5
6 /***
7 * @author Stephane JAIS
8 */
9 public abstract class ListIterator
10 {
11 private int index = 0;
12
13 public abstract Object getElementAt(int index) throws Exception;
14
15 public abstract int getSize();
16
17 public Object next()
18 throws Exception
19 {
20 Object result = getElementAt(index);
21 index++;
22 return result;
23 }
24
25 public Object previous()
26 throws Exception
27 {
28 Object result = getElementAt(--index);
29 return result;
30 }
31
32 public void skipToPage(int pageSize, int pageNumber)
33 {
34 resetIndex();
35 index += pageSize * (pageNumber-1);
36 }
37
38 public int getTotalPages(int pageSize)
39 {
40 int result = (int)Math.floor(getSize()/pageSize);
41 if (0 != ((getSize()+pageSize) % pageSize))
42 result++;
43 return result;
44 }
45
46 protected List subList(int startIndex, int stopIndex)
47 {
48 List result = new Vector();
49 for (int i = startIndex; i < stopIndex; i++)
50 {
51 try
52 {
53 result.add(getElementAt(i));
54 } catch (Exception e)
55 {
56 }
57 }
58 return result;
59 }
60
61 public List getPreviousElements(int count)
62 {
63 int startIndex = Math.max(0, index - count);
64 int stopIndex = index;
65 index = index - (stopIndex - startIndex);
66 return subList(startIndex, stopIndex);
67 }
68
69 public List getNextElements(int count)
70 {
71 int startIndex = index;
72 int stopIndex = Math.min(getSize(), index + count);
73 index = index + (stopIndex - startIndex);
74 return subList(startIndex, stopIndex);
75 }
76
77 public void resetIndex()
78 {
79 index = 0;
80 }
81
82 public int getIndex()
83 {
84 return index;
85 }
86
87 public boolean hasNext()
88 {
89 return index < getSize();
90 }
91
92 public boolean hasPrevious()
93 {
94 return !(index == 0);
95 }
96
97 }