1 14 package org.compiere.model; 15 16 import java.io.*; 17 import java.util.*; 18 import javax.swing.*; 19 20 import org.compiere.util.*; 21 22 31 public abstract class Lookup extends AbstractListModel 32 implements MutableComboBoxModel, Serializable 33 { 34 37 public Lookup() 38 { 39 } 41 42 protected volatile ArrayList p_data = new ArrayList(); 43 44 45 private volatile Object m_selectedObject; 46 47 48 private Object [] m_tempData = null; 49 50 51 private Worker m_worker = null; 52 53 54 protected Logger log = Logger.getCLogger(getClass()); 55 56 57 58 63 public void setSelectedItem(Object anObject) 64 { 65 if ((m_selectedObject != null && !m_selectedObject.equals( anObject )) 66 || m_selectedObject == null && anObject != null) 67 { 68 if (p_data.contains(anObject) || anObject == null) 69 { 70 m_selectedObject = anObject; 71 } 73 else 74 { 75 m_selectedObject = null; 76 log.debug("setSelectedItem - Set to NULL"); 77 } 78 fireContentsChanged(this, -1, -1); 80 } 81 } 83 87 public Object getSelectedItem() 88 { 89 return m_selectedObject; 90 } 92 96 public int getSize() 97 { 98 return p_data.size(); 99 } 101 106 public Object getElementAt (int index) 107 { 108 return p_data.get(index); 109 } 111 118 public int getIndexOf (Object anObject) 119 { 120 return p_data.indexOf(anObject); 121 } 123 127 public void addElement (Object anObject) 128 { 129 p_data.add(anObject); 130 fireIntervalAdded (this, p_data.size()-1, p_data.size()-1); 131 if (p_data.size() == 1 && m_selectedObject == null && anObject != null) 132 setSelectedItem (anObject); 133 } 135 140 public void insertElementAt (Object anObject, int index) 141 { 142 p_data.add (index, anObject); 143 fireIntervalAdded (this, index, index); 144 } 146 150 public void removeElementAt (int index) 151 { 152 if (getElementAt(index) == m_selectedObject) 153 { 154 if (index == 0) 155 setSelectedItem (getSize() == 1 ? null : getElementAt( index + 1 )); 156 else 157 setSelectedItem (getElementAt (index - 1)); 158 } 159 p_data.remove(index); 160 fireIntervalRemoved (this, index, index); 161 } 163 167 public void removeElement (Object anObject) 168 { 169 int index = p_data.indexOf (anObject); 170 if (index != -1) 171 removeElementAt(index); 172 } 174 177 public void removeAllElements() 178 { 179 if (p_data.size() > 0) 180 { 181 int firstIndex = 0; 182 int lastIndex = p_data.size() - 1; 183 p_data.clear(); 184 m_selectedObject = null; 185 fireIntervalRemoved (this, firstIndex, lastIndex); 186 } 187 } 189 190 191 196 public void put (String key, String value) 197 { 198 NamePair pp = new ValueNamePair (key, value); 199 addElement(pp); 200 } 202 207 public void put (int key, String value) 208 { 209 NamePair pp = new KeyNamePair (key, value); 210 addElement(pp); 211 } 213 221 public void fillComboBox (boolean mandatory, boolean onlyValidated, boolean onlyActive, boolean temporary) 222 { 223 if (temporary) 225 { 226 int size = p_data.size(); 227 m_tempData = new Object [size]; 228 p_data.toArray(m_tempData); 230 } 233 234 if (m_worker != null && m_worker.isAlive()) 236 { 237 log.warn ("fillComboBox - Worker already active - ignored"); 238 return; 239 } 240 m_worker = new Worker (mandatory, onlyValidated, onlyActive, temporary); 242 m_worker.run(); } 247 251 public void fillComboBox (boolean restore) 252 { 253 if (restore && m_tempData != null) 254 { 255 Object obj = m_selectedObject; 256 p_data.clear(); 257 p_data = new ArrayList(m_tempData.length); 259 for (int i = 0; i < m_tempData.length; i++) 260 p_data.add(m_tempData[i]); 261 m_tempData = null; 262 263 if (obj == null && p_data.size() > 0) 265 obj = p_data.get(0); 266 setSelectedItem(obj); 267 fireContentsChanged(this, 0, p_data.size()); 268 return; 269 } 270 fillComboBox(false, false, false, false); 271 } 273 274 275 280 public abstract String getDisplay (Object key); 281 282 287 public abstract NamePair get (Object key); 288 289 290 298 public abstract ArrayList getData (boolean mandatory, boolean onlyValidated, boolean onlyActive, boolean temporary); 299 300 305 public abstract String getColumnName(); 306 307 312 public abstract boolean containsKey (Object key); 313 314 315 316 320 public int refresh() 321 { 322 return 0; 323 } 325 329 public boolean isValidated() 330 { 331 return true; 332 } 334 338 public String getValidation() 339 { 340 return ""; 341 } 343 347 public boolean hasInactive() 348 { 349 return false; 350 } 351 352 356 public int getZoom() 357 { 358 return 0; 359 } 361 366 public int getZoom(String isSOTrx) 367 { 368 return 0; 369 } 371 375 public MQuery getZoomQuery() 376 { 377 return null; 378 } 380 388 public NamePair getDirect (Object key, boolean saveInCache, boolean cacheLocal) 389 { 390 return get (key); 391 } 393 396 public void dispose() 397 { 398 while (m_worker != null && m_worker.isAlive()) 399 m_worker.interrupt(); 400 m_worker = null; 401 if (p_data != null) 403 p_data.clear(); 404 p_data = null; 405 m_selectedObject = null; 406 m_tempData = null; 407 } 409 412 public void loadComplete() 413 { 414 } 416 417 418 421 class Worker extends Thread 422 { 423 430 Worker (boolean mandatory, boolean onlyValidated, boolean onlyActive, boolean temporary) 431 { 432 l_mandatory = mandatory; 433 l_onlyValidated = onlyValidated; 434 l_onlyActive = onlyActive; 435 l_temporary = temporary; 436 } 438 private long m_startTime = System.currentTimeMillis(); 439 private boolean l_mandatory, l_onlyValidated, l_onlyActive, l_temporary; 440 441 444 public void run() 445 { 446 Object obj = m_selectedObject; 447 p_data.clear(); 448 if (interrupted()) 449 return; 450 451 p_data = getData (l_mandatory, l_onlyValidated, l_onlyActive, l_temporary); 453 if (interrupted()) 454 return; 455 456 if (obj != m_selectedObject) 458 { 459 if (Log.isTraceLevel(7)) 460 log.debug("Worker.run - SelectedValue Changed=" + obj + "->" + m_selectedObject); 461 obj = m_selectedObject; 462 } 463 464 if (obj == null && l_mandatory && p_data.size() > 0) 466 { 467 obj = p_data.get(0); 468 m_selectedObject = obj; 469 if (Log.isTraceLevel(7)) 470 log.debug("Worker.run - SelectedValue SetToFirst=" + obj); 471 } 473 fireContentsChanged(this, 0, p_data.size()); 474 log.debug("Worker.run - Count=" + p_data.size() + " ms=" + String.valueOf(System.currentTimeMillis()-m_startTime)); 475 } } 478 } | Popular Tags |