• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 package ohos.devtools.views.common.customcomp;
17 
18 import org.apache.commons.lang.StringUtils;
19 
20 import javax.swing.AbstractListModel;
21 import java.util.Collection;
22 import java.util.Enumeration;
23 import java.util.Vector;
24 
25 /**
26  * CustomListFilerModel
27  *
28  * @since 2021/5/19 16:39
29  */
30 public class CustomListFilerModel<E> extends AbstractListModel<E> {
31     private Vector<E> items = new Vector<E>();
32     private Vector<E> filterItems = new Vector<E>();
33     private boolean defaultFilterItems = true;
34 
35     /**
36      * getSize
37      *
38      * @return int
39      */
getSize()40     public int getSize() {
41         return defaultFilterItems ? items.size() : filterItems.size();
42     }
43 
44     /**
45      * getElementAt
46      *
47      * @param index index
48      * @return E
49      */
getElementAt(int index)50     public E getElementAt(int index) {
51         return defaultFilterItems ? items.elementAt(index) : filterItems.elementAt(index);
52     }
53 
54     /**
55      * size
56      *
57      * @return int
58      */
size()59     public int size() {
60         return defaultFilterItems ? items.size() : filterItems.size();
61     }
62 
63     /**
64      * isEmpty
65      *
66      * @return boolean
67      */
isEmpty()68     public boolean isEmpty() {
69         return defaultFilterItems ? items.isEmpty() : filterItems.isEmpty();
70     }
71 
72     /**
73      * elements
74      *
75      * @return Enumeration <E>
76      */
elements()77     public Enumeration<E> elements() {
78         return items.elements();
79     }
80 
81     /**
82      * contains
83      *
84      * @param elem elem
85      * @return boolean
86      */
contains(Object elem)87     public boolean contains(Object elem) {
88         return items.contains(elem);
89     }
90 
91     /**
92      * indexOf
93      *
94      * @param elem elem
95      * @return int
96      */
indexOf(Object elem)97     public int indexOf(Object elem) {
98         return items.indexOf(elem);
99     }
100 
101     /**
102      * indexOf
103      *
104      * @param elem elem
105      * @param index index
106      * @return int
107      */
indexOf(Object elem, int index)108     public int indexOf(Object elem, int index) {
109         return items.indexOf(elem, index);
110     }
111 
112     /**
113      * lastIndexOf
114      *
115      * @param elem elem
116      * @return int
117      */
lastIndexOf(Object elem)118     public int lastIndexOf(Object elem) {
119         return items.lastIndexOf(elem);
120     }
121 
122     /**
123      * lastIndexOf
124      *
125      * @param elem elem
126      * @param index index
127      * @return int
128      */
lastIndexOf(Object elem, int index)129     public int lastIndexOf(Object elem, int index) {
130         return items.lastIndexOf(elem, index);
131     }
132 
133     /**
134      * elementAt
135      *
136      * @param index index
137      * @return E
138      */
elementAt(int index)139     public E elementAt(int index) {
140         return items.elementAt(index);
141     }
142 
143     /**
144      * firstElement
145      *
146      * @return E
147      */
firstElement()148     public E firstElement() {
149         return items.firstElement();
150     }
151 
152     /**
153      * lastElement
154      *
155      * @return E
156      */
lastElement()157     public E lastElement() {
158         return items.lastElement();
159     }
160 
161     /**
162      * setElementAt
163      *
164      * @param element element
165      * @param index index
166      */
setElementAt(E element, int index)167     public void setElementAt(E element, int index) {
168         items.setElementAt(element, index);
169         fireContentsChanged(this, index, index);
170     }
171 
172     /**
173      * removeElementAt
174      *
175      * @param index index
176      */
removeElementAt(int index)177     public void removeElementAt(int index) {
178         items.removeElementAt(index);
179         fireIntervalRemoved(this, index, index);
180     }
181 
182     /**
183      * insertElementAt
184      *
185      * @param element element
186      * @param index index
187      */
insertElementAt(E element, int index)188     public void insertElementAt(E element, int index) {
189         items.insertElementAt(element, index);
190         fireIntervalAdded(this, index, index);
191     }
192 
193     /**
194      * addElement
195      *
196      * @param element element
197      */
addElement(E element)198     public void addElement(E element) {
199         int index = items.size();
200         items.addElement(element);
201         fireIntervalAdded(this, index, index);
202     }
203 
204     /**
205      * removeElement
206      *
207      * @param obj obj
208      * @return boolean
209      */
removeElement(Object obj)210     public boolean removeElement(Object obj) {
211         int index = indexOf(obj);
212         boolean rv = items.removeElement(obj);
213         if (index >= 0) {
214             fireIntervalRemoved(this, index, index);
215         }
216         return rv;
217     }
218 
219     /**
220      * removeAllElements
221      */
removeAllElements()222     public void removeAllElements() {
223         int index1 = items.size() - 1;
224         items.removeAllElements();
225         if (index1 >= 0) {
226             fireIntervalRemoved(this, 0, index1);
227         }
228     }
229 
230     /**
231      * toString
232      *
233      * @return String
234      */
toString()235     public String toString() {
236         return items.toString();
237     }
238 
239     /**
240      * toArray
241      *
242      * @return Object[]
243      */
toArray()244     public Object[] toArray() {
245         Object[] rv = new Object[items.size()];
246         items.copyInto(rv);
247         return rv;
248     }
249 
250     /**
251      * get
252      *
253      * @param index index
254      * @return E
255      */
get(int index)256     public E get(int index) {
257         return items.elementAt(index);
258     }
259 
260     /**
261      * clear
262      */
clear()263     public void clear() {
264         int index1;
265         if (defaultFilterItems) {
266             index1 = filterItems.size() - 1;
267         } else {
268             index1 = items.size() - 1;
269         }
270         items.removeAllElements();
271         filterItems.removeAllElements();
272         defaultFilterItems = true;
273         if (index1 >= 0) {
274             fireIntervalRemoved(this, 0, index1);
275         }
276     }
277 
278     /**
279      * addAll
280      *
281      * @param collection collection
282      */
addAll(Collection<? extends E> collection)283     public void addAll(Collection<? extends E> collection) {
284         if (collection.isEmpty()) {
285             return;
286         }
287         int startIndex = getSize();
288         items.addAll(collection);
289         fireIntervalAdded(this, startIndex, getSize() - 1);
290     }
291 
292     /**
293      * addAll
294      *
295      * @param index index
296      * @param collection collection
297      */
addAll(int index, Collection<? extends E> collection)298     public void addAll(int index, Collection<? extends E> collection) {
299         if (index < 0 || index > getSize()) {
300             throw new ArrayIndexOutOfBoundsException("index out of range: " + index);
301         }
302         if (collection.isEmpty()) {
303             return;
304         }
305         items.addAll(index, collection);
306         fireIntervalAdded(this, index, index + collection.size() - 1);
307     }
308 
309     /**
310      * refilter
311      *
312      * @param text text
313      */
refilter(String text)314     public void refilter(String text) {
315         if (StringUtils.isBlank(text)) {
316             defaultFilterItems = true;
317         } else {
318             defaultFilterItems = false;
319             filterItems.clear();
320             String term = text;
321             for (int index = 0; index < items.size(); index++) {
322                 if (items.get(index).toString().indexOf(term, 0) != -1) {
323                     filterItems.add(items.get(index));
324                 }
325             }
326         }
327         fireContentsChanged(this, 0, getSize());
328     }
329 }
330