package co.codewizards.cloudstore.core.collection; import static co.codewizards.cloudstore.core.util.AssertUtil.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public abstract class LazyUnmodifiableList<E> implements List<E> { private List<E> elements; // @Override // public void forEach(Consumer<? super E> action) { // getElements().forEach(action); // } @Override public int size() { return getElements().size(); } @Override public boolean isEmpty() { return getElements().isEmpty(); } @Override public boolean contains(Object o) { return getElements().contains(o); } @Override public Iterator<E> iterator() { return getElements().iterator(); } @Override public Object[] toArray() { return getElements().toArray(); } @Override public <T> T[] toArray(T[] a) { return getElements().toArray(a); } @Override public boolean add(E e) { return getElements().add(e); } @Override public boolean remove(Object o) { return getElements().remove(o); } @Override public boolean containsAll(Collection<?> c) { return getElements().containsAll(c); } @Override public boolean addAll(Collection<? extends E> c) { return getElements().addAll(c); } @Override public boolean addAll(int index, Collection<? extends E> c) { return getElements().addAll(index, c); } @Override public boolean removeAll(Collection<?> c) { return getElements().removeAll(c); } @Override public boolean retainAll(Collection<?> c) { return getElements().retainAll(c); } // @Override // public void replaceAll(UnaryOperator<E> operator) { // getElements().replaceAll(operator); // } // @Override // public boolean removeIf(Predicate<? super E> filter) { // return getElements().removeIf(filter); // } // @Override // public void sort(Comparator<? super E> c) { // getElements().sort(c); // } @Override public void clear() { getElements().clear(); } @Override public boolean equals(Object o) { return getElements().equals(o); } @Override public int hashCode() { return getElements().hashCode(); } @Override public E get(int index) { return getElements().get(index); } @Override public E set(int index, E element) { return getElements().set(index, element); } @Override public void add(int index, E element) { getElements().add(index, element); } // @Override // public Stream<E> stream() { // return getElements().stream(); // } @Override public E remove(int index) { return getElements().remove(index); } // @Override // public Stream<E> parallelStream() { // return getElements().parallelStream(); // } @Override public int indexOf(Object o) { return getElements().indexOf(o); } @Override public int lastIndexOf(Object o) { return getElements().lastIndexOf(o); } @Override public ListIterator<E> listIterator() { return getElements().listIterator(); } @Override public ListIterator<E> listIterator(int index) { return getElements().listIterator(index); } @Override public List<E> subList(int fromIndex, int toIndex) { return getElements().subList(fromIndex, toIndex); } // @Override // public Spliterator<E> spliterator() { // return getElements().spliterator(); // } protected List<E> getElements() { if (elements == null) elements = Collections.unmodifiableList(new ArrayList<E>(assertNotNull(loadElements(), getClass().getName() + ".loadElements()"))); return elements; } protected abstract Collection<E> loadElements(); }