All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codefilarete.tool.collection.ReadOnlyList Maven / Gradle / Ivy

package org.codefilarete.tool.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;

/**
 * A marking class for {@link List} which elements cannot be added nor removed.
 *
 * @param  element type
 * @author Guillaume Mary
 */
public class ReadOnlyList extends ReadOnlyCollection> implements List {
	
	public ReadOnlyList() {
		this(new ArrayList<>());
	}
	
	public ReadOnlyList(int initialCapacity) {
		this(new ArrayList<>(initialCapacity));
	}
	
	public ReadOnlyList(List list) {
		super((List) list);
	}
	
	@Override
	public E get(int index) {
		return delegate.get(index);
	}
	
	@Override
	public Iterator iterator() {
		return listIterator();
	}
	
	@Override
	public ListIterator listIterator() {
		return listIterator(0);
	}
	
	@Override
	public ListIterator listIterator(int index) {
		return new ReadOnlyListIterator(index);
	}
	
	@Override
	public List subList(int fromIndex, int toIndex) {
		return new ReadOnlyList<>(delegate.subList(fromIndex, toIndex));
	}
	
	@Override
	public int indexOf(Object o) {
		return delegate.indexOf(o);
	}
	
	@Override
	public int lastIndexOf(Object o) {
		return delegate.lastIndexOf(o);
	}
	
	@Override
	public final E set(int index, E element) {
		throw new UnsupportedOperationException();
	}
	
	@Override
	public final void add(int index, E element) {
		throw new UnsupportedOperationException();
	}
	
	@Override
	public final E remove(int index) {
		throw new UnsupportedOperationException();
	}
	
	@Override
	public final boolean addAll(int index, Collection c) {
		throw new UnsupportedOperationException();
	}
	
	@Override
	public final void replaceAll(UnaryOperator operator) {
		throw new UnsupportedOperationException();
	}
	
	@Override
	public final void sort(Comparator c) {
		throw new UnsupportedOperationException();
	}
	
	class ReadOnlyListIterator extends ReadOnlyIterator implements ListIterator {
		
		private final ListIterator delegateIterator;
		
		ReadOnlyListIterator(int index) {
			delegateIterator = delegate.listIterator(index);
		}
		
		@Override
		public boolean hasNext() {
			return delegateIterator.hasNext();
		}
		
		@Override
		public E next() {
			return delegateIterator.next();
		}
		
		@Override
		public boolean hasPrevious() {
			return delegateIterator.hasPrevious();
		}
		
		@Override
		public E previous() {
			return delegateIterator.previous();
		}
		
		@Override
		public int nextIndex() {
			return delegateIterator.nextIndex();
		}
		
		@Override
		public int previousIndex() {
			return delegateIterator.previousIndex();
		}
		
		@Override
		public void forEachRemaining(Consumer action) {
			delegateIterator.forEachRemaining(action);
		}
		
		@Override
		public final void set(E e) {
			throw new UnsupportedOperationException();
		}
		
		@Override
		public final void add(E e) {
			throw new UnsupportedOperationException();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy