public boolean remove(Object o) { checkRealm(); int i = indexOf(o); if (i != -1) { remove(i); return true; } return false; }
public boolean isStale() { getterCalled(); if (staleListener == null || listChangeListener == null) { // this.stale is only updated in response to list change events or // stale events on the sublists. If we are not listening to sublists // then we must calculate staleness on every invocation. return computeStaleness(); } if (stale == null) { this.stale = computeStaleness() ? Boolean.TRUE : Boolean.FALSE; } return stale.booleanValue(); }
public Object[] toArray() { getterCalled(); return toArray(new Object[doGetSize()]); }
@Override public IObservableList<E> observe(Realm realm, S source) { List<IObservableList<E>> lists = new ArrayList<>(properties.length); for (IListProperty<S, E> property : properties) { lists.add(property.observe(realm, source)); } IObservableList<E> multiList = new MultiList<>(lists, elementType); for (IObservableList<E> list : lists) { PropertyObservableUtil.cascadeDispose(multiList, list); } return multiList; } }
public Object[] toArray(Object[] a) { getterCalled(); Object[] result = a; if (result.length < doGetSize()) { result = (Object[]) Array.newInstance(a.getClass() .getComponentType(), doGetSize()); } int offset = 0; for (int i = 0; i < lists.length; i++) { Object[] oa = lists[i].toArray(); System.arraycopy(oa, 0, result, offset, oa.length); offset += lists[i].size(); } return result; }
public Iterator iterator() { getterCalled(); return new MultiListItr(); }
public int lastIndexOf(Object o) { getterCalled(); int offset = size(); for (int i = 0; i < lists.length; i++) { offset -= lists[i].size(); int index = lists[i].indexOf(o); if (index != -1) return offset + index; } return -1; }
private void listChanged(ListChangeEvent event) { IObservableList source = event.getObservableList(); int offset = 0; for (int i = 0; i < lists.length; i++) { if (source == lists[i]) { fireListChange(offsetListDiff(offset, event.diff)); return; } offset += lists[i].size(); } Assert .isLegal( false, "MultiList received a ListChangeEvent from an observable list that is not one of its sources."); //$NON-NLS-1$ }
private void makeStale() { if (stale == null || stale.booleanValue() == false) { stale = Boolean.TRUE; fireStale(); } }
public void clear() { checkRealm(); for (int i = 0; i < lists.length; i++) lists[i].clear(); }
public void handleListChange(final ListChangeEvent event) { getRealm().exec(new Runnable() { public void run() { stale = null; listChanged(event); if (isStale()) fireStale(); } }); } };
this.stale = computeStaleness() ? Boolean.TRUE : Boolean.FALSE;
@Override public IObservableList<E> observe(Realm realm, S source) { List<IObservableList<E>> lists = new ArrayList<>(properties.length); for (int i = 0; i < properties.length; i++) { lists.add(properties[i].observe(realm, source)); } IObservableList<E> multiList = new MultiList<>(lists, elementType); for (IObservableList<E> list : lists) { PropertyObservableUtil.cascadeDispose(multiList, list); } return multiList; } }
public boolean equals(Object o) { getterCalled(); if (o == this) return true; if (o == null) return false; if (!(o instanceof List)) return false; List that = (List) o; if (doGetSize() != that.size()) return false; int subListIndex = 0; for (int i = 0; i < lists.length; i++) { List subList = that.subList(subListIndex, subListIndex + lists[i].size()); if (!lists[i].equals(subList)) { return false; } subListIndex += lists[i].size(); } return true; }
public int hashCode() { getterCalled(); int result = 1; for (int i = 0; i < lists.length; i++) { result = result * 31 + lists[i].hashCode(); } return result; }
public boolean isEmpty() { getterCalled(); for (int i = 0; i < lists.length; i++) { if (!lists[i].isEmpty()) return false; } return true; }
public boolean contains(Object o) { getterCalled(); for (int i = 0; i < lists.length; i++) { if (lists[i].contains(o)) return true; } return false; }
public ListIterator listIterator(int index) { getterCalled(); return new MultiListListItr(index); }
public Object get(int index) { getterCalled(); int offset = 0; for (int i = 0; i < lists.length; i++) { if (index - offset < lists[i].size()) return lists[i].get(index - offset); offset += lists[i].size(); } throw new IndexOutOfBoundsException("index: " + index + ", size: " //$NON-NLS-1$ //$NON-NLS-2$ + offset); }
public int indexOf(Object o) { getterCalled(); int offset = 0; for (int i = 0; i < lists.length; i++) { int index = lists[i].indexOf(o); if (index != -1) return offset + index; offset += lists[i].size(); } return -1; }