package ru.codeinside.gses.webui.supervisor; import com.vaadin.event.FieldEvents; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import ru.codeinside.adm.database.Bid; import ru.codeinside.gses.lazyquerycontainer.LazyQueryContainer; import ru.codeinside.gses.service.Fn; import ru.codeinside.gses.webui.Flash; final public class PersistenceFilter extends HorizontalLayout { final Label bidHint; Table table; FilterablePersistence persistence; String lastProcessInstanceId; PersistenceFilter(Table table, FilterablePersistence persistence) { this.persistence = persistence; this.table = table; setSpacing(true); bidHint = new Label(); bidHint.setStyleName("small"); final TextField bidField = new TextField(); bidField.setInputPrompt("Фильтр по заявке"); bidField.setImmediate(true); bidField.addListener(new BidChangeListener()); addComponent(bidField); addComponent(bidHint); } class BidChangeListener implements FieldEvents.TextChangeListener { @Override public void textChange(final FieldEvents.TextChangeEvent event) { final String bidText = Fn.trimToNull(event.getText()); String processInstanceId = null; String errorText = null; if (bidText != null) { try { Long.parseLong(bidText); } catch (NumberFormatException e) { errorText = "Введите номер"; } if (errorText == null) { final Bid bid = Flash.flash().getAdminService().getBid(bidText); if (bid == null) { errorText = "Заявка " + bidText + " не существует"; } else if (bid.getDateFinished() != null) { errorText = "Заявка " + bidText + " уже исполнена"; } else { processInstanceId = bid.getProcessInstanceId(); } } } bidHint.setValue(errorText != null ? errorText : null); if (!Fn.isEqual(lastProcessInstanceId, processInstanceId)) { final Object selectionId = table.getValue(); persistence.setProcessInstanceFilter(processInstanceId); ((LazyQueryContainer) table.getContainerDataSource()).refresh(); if (selectionId != null) { table.setValue(null); if (table.size() > 0) { table.setValue(0); // оставим выделенным первый элемент } } lastProcessInstanceId = processInstanceId; } } } }