View Javadoc
1   /*
2    * Copyright 2012-2017 CodeLibs Project and the Others.
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    *     http://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,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
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 }