package org.jtwig.util.builder;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang3.builder.Builder;
import org.jtwig.environment.and.AndBuilder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ListBuilder<B, T> implements Builder<List<T>>, AndBuilder<B> {
private final B parent;
private List<T> list = new ArrayList<>();
public ListBuilder(B parent) {
this.parent = parent;
}
public ListBuilder(B parent, Collection<? extends T> list) {
this.parent = parent;
this.list = new ArrayList<>(list);
}
public ListBuilder<B, T> set (List<? extends T> items) {
this.list = new ArrayList<>(items);
return this;
}
public ListBuilder<B, T> add (T item) {
this.list.add(item);
return this;
}
public ListBuilder<B, T> add (List<? extends T> items) {
this.list.addAll(items);
return this;
}
public ListBuilder<B, T> filter (Predicate<T> predicate) {
List<T> newList = new ArrayList<>();
for (T item : this.list) {
if (predicate.apply(item)) {
newList.add(item);
}
}
this.list = newList;
return this;
}
@Override
public B and() {
return parent;
}
@Override
public List<T> build() {
return ImmutableList.copyOf(list);
}
}