/** ListProxy.java.
Purpose:
Description:
History:
2:10:51 PM Dec 25, 2014, Created by jumperchen
Copyright (C) 2014 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.bind.proxy;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/**
* A list proxy
* @author jumperchen
* @since 8.0.0
*/
public class ListProxy<E> extends AbstractCollectionProxy<E> implements List<E> {
private static final long serialVersionUID = 20141225150833L;
private Annotation[] _callerAnnots;
public ListProxy(Collection<E> origin, Annotation[] callerAnnots) {
super(origin, callerAnnots);
_callerAnnots = callerAnnots;
resetFromOrigin();
}
@SuppressWarnings("unchecked")
protected Collection<E> initCache() {
return new ArrayList<E>(((Collection<E>) getOriginObject()).size());
}
public boolean addAll(int index, Collection<? extends E> c) {
_dirty = true;
return ((List<E>) getCache()).addAll(index, c);
}
public E get(int index) {
return ((List<E>) getCache()).get(index);
}
public E set(int index, E element) {
_dirty = true;
return ((List<E>) getCache()).set(index, element);
}
public void add(int index, E element) {
_dirty = true;
((List<E>) getCache()).add(index, element);
}
public E remove(int index) {
_dirty = true;
return ((List<E>) getCache()).remove(index);
}
public int indexOf(Object o) {
final int size = size();
if (o == null) {
for (int i = 0; i < size; i++)
if (testEquals(get(i), null))
return i;
} else {
for (int i = 0; i < size; i++)
if (testEquals(o, get(i)))
return i;
}
return -1;
}
public int lastIndexOf(Object o) {
final int size = size();
if (o == null) {
for (int i = size - 1; i >= 0; i--)
if (testEquals(get(i), null))
return i;
} else {
for (int i = size - 1; i >= 0; i--)
if (testEquals(o, get(i)))
return i;
}
return -1;
}
public ListIterator<E> listIterator() {
return ((List<E>) getCache()).listIterator();
}
public ListIterator<E> listIterator(int index) {
return ((List<E>) getCache()).listIterator(index);
}
public List<E> subList(int fromIndex, int toIndex) {
return ProxyHelper.createProxyIfAny(((List<E>) getCache()).subList(fromIndex, toIndex), _callerAnnots);
}
}