package com.bergerkiller.bukkit.common.conversion.util;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
import com.bergerkiller.bukkit.common.conversion.Converter;
import com.bergerkiller.bukkit.common.conversion.ConverterPair;
/**
* Wraps around another list of unknown contents and performs conversions automatically.
* This can be used to interact with collections that require additional element conversion.
*
* @param <T> - exposed type
*/
public class ConvertingList<T> extends ConvertingCollection<T> implements List<T> {
public ConvertingList(List<?> list, Converter<?> converterSet, Converter<T> converterGet) {
super(list, converterSet, converterGet);
}
public ConvertingList(List<?> list, ConverterPair<?, T> converterPair) {
super(list, converterPair);
}
@Override
public List<Object> getBase() {
return (List<Object>) super.getBase();
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
return getBase().addAll(index, new ConvertingCollection<Object>(c, converterPair.reverse()));
}
@Override
public T get(int index) {
return converterPair.convertB(getBase().get(index));
}
@Override
public T set(int index, T element) {
return converterPair.convertB(getBase().set(index, converterPair.convertA(element)));
}
@Override
public void add(int index, T element) {
getBase().add(index, converterPair.convertA(element));
}
@Override
public T remove(int index) {
return converterPair.convertB(getBase().remove(index));
}
@Override
public int indexOf(Object o) {
return getBase().indexOf(converterPair.convertA(o));
}
@Override
public int lastIndexOf(Object o) {
return getBase().lastIndexOf(converterPair.convertA(o));
}
@Override
public ListIterator<T> listIterator() {
return new ConvertingListIterator<T>(getBase().listIterator(), converterPair);
}
@Override
public ListIterator<T> listIterator(int index) {
return new ConvertingListIterator<T>(getBase().listIterator(index), converterPair);
}
@Override
public List<T> subList(int fromIndex, int toIndex) {
return new ConvertingList<T>(getBase().subList(fromIndex, toIndex), converterPair);
}
}