package bluej.stride.framedjava.slots;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
| A clone/wrapper of the List interface which adds an extra ModificationToken
| parameter to any methods which modify the list. This helps to ensure
| that modifications only take place within a modification block in StructuredSlot.
|
public class ProtectedList<T>{
private ObservableList<T> content = FXCollections.observableArrayList();
public T get(int index)
{
return content.get(index);
}
public boolean contains(T o)
{
return content.contains(o);
}
public int indexOf(T o)
{
return content.indexOf(o);
}
public boolean isEmpty()
{
return content.isEmpty();
}
public int size()
{
return content.size();
}
public Stream stream()
{
return content.stream();
}
public void forEach(Consumer<? super T> action)
{
content.forEach(action);
}
public boolean add(T t, StructuredSlot.ModificationToken token)
{
token.check();
return content.add(t);
}
public void add(int index, T element, StructuredSlot.ModificationToken token)
{
token.check();
content.add(index, element);
}
public T remove(int index, StructuredSlot.ModificationToken token)
{
token.check();
return content.remove(index);
}
public void clear(StructuredSlot.ModificationToken token)
{
token.check();
content.clear();
}
public ObservableList> observable()
{
return content;
}
public Optional findFirst(Predicate<T> function)
{
for (int i = 0; i < content.size(); i++)
{
if (function.test(content.get(i)))
return Optional.of(i);
}
return Optional.empty();
}
}
. get
. contains
. indexOf
. isEmpty
. size
. stream
. forEach
. add
. add
. remove
. clear
. observable
. findFirst
106 neLoCode
+ 3 LoComm