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