/* (c) 2017 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog.impl; import java.util.AbstractList; import java.util.List; /** * Allows exposing a filtered list of items, but keeping in synch the underlying full list on modification * * @author Niels Charlier (grabbed from SecuredLayerGroupInfo.getLayers() inner class) */ public class FilteredList<T> extends AbstractList<T> { List<T> filtered; List<T> delegate; public FilteredList(List<T> filtered, List<T> delegate) { this.filtered = filtered; this.delegate = delegate; } @Override public T get(int index) { return filtered.get(index); } @Override public int size() { return filtered.size(); } @Override public void add(int index, T element) { delegate.add(index, unwrap(element)); filtered.add(index, element); } public T set(int index, T element) { delegate.set(index, unwrap(element)); return filtered.set(index, element); } public T remove(int index) { delegate.remove(index); return filtered.remove(index); } @Override public boolean remove(Object o) { delegate.remove(o); return filtered.remove(o); } /** * Allows to unwrap an element before setting it into the delegate list * @param element * @return */ protected T unwrap(T element) { return element; } }