package com.vaadin.data.provider; import java.util.List; import java.util.stream.Stream; /** * A dummy data provider for testing item replacement and stale elements. */ public class ReplaceListDataProvider extends AbstractDataProvider<StrBean, Void> { private final List<StrBean> backend; public ReplaceListDataProvider(List<StrBean> items) { backend = items; } @Override public void refreshItem(StrBean item) { if (replaceItem(item)) { super.refreshItem(item); } } private boolean replaceItem(StrBean item) { for (int i = 0; i < backend.size(); ++i) { if (getId(backend.get(i)).equals(getId(item))) { if (backend.get(i).equals(item)) { return false; } backend.remove(i); backend.add(i, item); return true; } } return false; } @Override public boolean isInMemory() { return true; } @Override public int size(Query<StrBean, Void> t) { return backend.size(); } @Override public Stream<StrBean> fetch(Query<StrBean, Void> query) { return backend.stream().skip(query.getOffset()).limit(query.getLimit()); } public boolean isStale(StrBean item) { Object id = getId(item); boolean itemExistsInBackEnd = backend.contains(item); boolean backEndHasInstanceWithSameId = backend.stream().map(this::getId) .filter(i -> id.equals(i)).count() == 1; return !itemExistsInBackEnd && backEndHasInstanceWithSameId; } @Override public Object getId(StrBean item) { return item.getId(); } }