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