1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.dict;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Date;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.ListIterator;
24
25 import org.dbflute.optional.OptionalEntity;
26
27 public abstract class DictionaryFile<T extends DictionaryItem> {
28 protected DictionaryManager dictionaryManager;
29
30 protected String id;
31
32 protected String path;
33
34 protected Date timestamp;
35
36 public DictionaryFile(final String id, final String path, final Date timestamp) {
37 this.id = id;
38 this.path = path;
39 this.timestamp = timestamp;
40 }
41
42 public String getId() {
43 return id;
44 }
45
46 public String getPath() {
47 return path;
48 }
49
50 public Date getTimestamp() {
51 return timestamp;
52 }
53
54 public DictionaryFile<T> manager(final DictionaryManager dictionaryManager) {
55 this.dictionaryManager = dictionaryManager;
56 return this;
57 }
58
59 public abstract String getType();
60
61 public abstract PagingList<T> selectList(int offset, int size);
62
63 public abstract OptionalEntity<T> get(long id);
64
65 public abstract void insert(T item);
66
67 public abstract void update(T item);
68
69 public abstract void delete(T item);
70
71 public static class PagingList<E> implements List<E> {
72 private final List<E> parent;
73
74 protected int allPageCount;
75
76 protected int allRecordCount;
77
78 protected int pageSize;
79
80 protected int currentPageNumber;
81
82 protected int pageRangeSize;
83
84 public PagingList(final List<E> list, final int offset, final int size, final int allRecordCount) {
85 this.parent = list;
86 this.allRecordCount = allRecordCount;
87 pageSize = size;
88 currentPageNumber = offset / size + 1;
89 allPageCount = (allRecordCount - 1) / size + 1;
90 }
91
92 @Override
93 public int size() {
94 return parent.size();
95 }
96
97 @Override
98 public boolean isEmpty() {
99 return parent.isEmpty();
100 }
101
102 @Override
103 public boolean contains(final Object o) {
104 return parent.contains(o);
105 }
106
107 @Override
108 public Iterator<E> iterator() {
109 return parent.iterator();
110 }
111
112 @Override
113 public Object[] toArray() {
114 return parent.toArray();
115 }
116
117 @Override
118 public <T> T[] toArray(final T[] a) {
119 return parent.toArray(a);
120 }
121
122 @Override
123 public boolean add(final E e) {
124 return parent.add(e);
125 }
126
127 @Override
128 public boolean remove(final Object o) {
129 return parent.remove(o);
130 }
131
132 @Override
133 public boolean containsAll(final Collection<?> c) {
134 return parent.containsAll(c);
135 }
136
137 @Override
138 public boolean addAll(final Collection<? extends E> c) {
139 return parent.addAll(c);
140 }
141
142 @Override
143 public boolean addAll(final int index, final Collection<? extends E> c) {
144 return parent.addAll(index, c);
145 }
146
147 @Override
148 public boolean removeAll(final Collection<?> c) {
149 return parent.retainAll(c);
150 }
151
152 @Override
153 public boolean retainAll(final Collection<?> c) {
154 return parent.retainAll(c);
155 }
156
157 @Override
158 public void clear() {
159 parent.clear();
160 }
161
162 @Override
163 public E get(final int index) {
164 return parent.get(index);
165 }
166
167 @Override
168 public E set(final int index, final E element) {
169 return parent.set(index, element);
170 }
171
172 @Override
173 public void add(final int index, final E element) {
174 parent.add(index, element);
175 }
176
177 @Override
178 public E remove(final int index) {
179 return parent.remove(index);
180 }
181
182 @Override
183 public int indexOf(final Object o) {
184 return parent.indexOf(o);
185 }
186
187 @Override
188 public int lastIndexOf(final Object o) {
189 return parent.lastIndexOf(o);
190 }
191
192 @Override
193 public ListIterator<E> listIterator() {
194 return parent.listIterator();
195 }
196
197 @Override
198 public ListIterator<E> listIterator(final int index) {
199 return parent.listIterator(index);
200 }
201
202 @Override
203 public List<E> subList(final int fromIndex, final int toIndex) {
204 return parent.subList(fromIndex, toIndex);
205 }
206
207 public int getAllRecordCount() {
208 return allRecordCount;
209 }
210
211 public int getPageSize() {
212 return pageSize;
213 }
214
215 public int getCurrentPageNumber() {
216 return currentPageNumber;
217 }
218
219 public int getAllPageCount() {
220 return allPageCount;
221 }
222
223 public boolean isExistPrePage() {
224 return currentPageNumber != 1;
225 }
226
227 public boolean isExistNextPage() {
228 return currentPageNumber != allPageCount;
229 }
230
231 public void setPageRangeSize(final int pageRangeSize) {
232 this.pageRangeSize = pageRangeSize;
233 }
234
235 public List<Integer> createPageNumberList() {
236 int startPage = currentPageNumber - pageRangeSize;
237 if (startPage < 1) {
238 startPage = 1;
239 }
240 int endPage = currentPageNumber + pageRangeSize;
241 if (endPage > allPageCount) {
242 endPage = allPageCount;
243 }
244 final List<Integer> pageNumberList = new ArrayList<>();
245 for (int i = startPage; i <= endPage; i++) {
246 pageNumberList.add(i);
247 }
248 return pageNumberList;
249 }
250
251 }
252
253 }