package com.constellio.app.ui.framework.containers; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.addons.lazyquerycontainer.Query; import org.vaadin.addons.lazyquerycontainer.QueryDefinition; import org.vaadin.addons.lazyquerycontainer.QueryFactory; import com.constellio.app.ui.entities.UserCredentialVO; import com.constellio.app.ui.framework.data.UserCredentialVODataProvider; import com.vaadin.data.Item; import com.vaadin.data.util.BeanItem; import com.vaadin.data.util.filter.SimpleStringFilter; @SuppressWarnings("serial") public class UserCredentialVOLazyContainer extends LazyQueryContainer { public UserCredentialVOLazyContainer(UserCredentialVODataProvider dataProvider, int batchSize) { super(new UserCredentialVOLazyQueryDefinition(dataProvider, batchSize), new UserCredentialVOLazyQueryFactory(dataProvider)); } public static class UserCredentialVOLazyQueryDefinition extends LazyQueryDefinition { UserCredentialVODataProvider dataProvider; public UserCredentialVOLazyQueryDefinition(UserCredentialVODataProvider dataProvider, int batchSize) { super(true, batchSize, null); this.dataProvider = dataProvider; super.addProperty("username", String.class, null, true, true); super.addProperty("firstName", String.class, null, true, true); super.addProperty("lastName", String.class, null, true, true); super.addProperty("email", String.class, null, true, true); } } public static class UserCredentialVOLazyQueryFactory implements QueryFactory, Serializable { UserCredentialVODataProvider dataProvider; public UserCredentialVOLazyQueryFactory(UserCredentialVODataProvider dataProvider) { this.dataProvider = dataProvider; } @Override public Query constructQuery(final QueryDefinition queryDefinition) { if (queryDefinition.getFilters().isEmpty()) { dataProvider.setFilter(null); } else { SimpleStringFilter defaultFilter = (SimpleStringFilter) queryDefinition.getFilters().get(0); dataProvider.setFilter(defaultFilter.getFilterString()); } return new SerializableQuery() { @Override public int size() { return dataProvider.size(); } @Override public void saveItems(List<Item> addedItems, List<Item> modifiedItems, List<Item> removedItems) { throw new UnsupportedOperationException("Query is read-only"); } @Override public List<Item> loadItems(int startIndex, int count) { List<Item> items = new ArrayList<>(); List<UserCredentialVO> userCredentialVOs = dataProvider.listUserCredentialVOs(startIndex, count); for (UserCredentialVO userCredentialVO : userCredentialVOs) { Item item = new BeanItem<>(userCredentialVO); items.add(item); } return items; } @Override public boolean deleteAllItems() { throw new UnsupportedOperationException("Query is read-only"); } @Override public Item constructItem() { throw new UnsupportedOperationException("Query is read-only"); } }; } private static interface SerializableQuery extends Query, Serializable { } } }