/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.webui.data; import com.google.common.collect.Lists; import com.vaadin.data.Item; import org.activiti.engine.query.Query; import ru.codeinside.gses.webui.containers.LazyLoadingContainer; import ru.codeinside.gses.webui.containers.LazyLoadingQuery; import java.util.List; public abstract class AbstractLazyLoadingQuery<T> implements LazyLoadingQuery { private static final long serialVersionUID = 4269788861279171943L; protected final ItemBuilder<T> itemBuilder; protected String orderBy = "name"; protected boolean asc = true; public AbstractLazyLoadingQuery(ItemBuilder<T> itemBuilder) { this.itemBuilder = itemBuilder; } public void setLazyLoadingContainer(LazyLoadingContainer lazyLoadingContainer) { } public void setSorting(Object[] propertyIds, boolean[] ascending) { for (Object o : propertyIds) { orderBy = (String) o; } for (boolean o : ascending) { asc = o; } } List<T> listPage(Query<?, T> query, int start, int count) { if (asc) { query.asc(); } else { query.desc(); } return query.listPage(start, count); } public List<Item> loadItems(int start, int count) { List<Item> items = Lists.newArrayList(); if (itemBuilder instanceof BatchBuilder) { ((BatchBuilder) itemBuilder).batchStart(); } for (T domainObject : items(start, count)) { items.add(itemBuilder.createItem(domainObject)); } if (itemBuilder instanceof BatchBuilder) { ((BatchBuilder) itemBuilder).batchFinish(); } return items; } public Item loadSingleResult(String id) { T domainObject = singleResult(id); if (domainObject != null) { return itemBuilder.createItem(domainObject); } return null; } abstract List<T> items(int start, int count); abstract T singleResult(String id); }