package com.constellio.app.ui.framework.components;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.ui.framework.buttons.SearchButton;
import com.constellio.app.ui.framework.components.fields.BaseTextField;
import com.constellio.app.ui.handlers.OnEnterKeyHandler;
import com.vaadin.data.Container.Filterable;
import com.vaadin.data.util.filter.SimpleStringFilter;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
public class TableStringFilter extends HorizontalLayout {
private TextField filterField;
private Button filterButton;
private Table table;
public TableStringFilter(final Table table) {
setSpacing(true);
this.table = table;
filterField = new BaseTextField();
new OnEnterKeyHandler() {
@Override
public void onEnterKeyPressed() {
addFilter();
}
}.installOn(filterField);
filterButton = new SearchButton();
filterButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
addFilter();
}
});
addComponents(filterField, filterButton);
}
private void addFilter() {
List<String> captionColumnHeaders = Arrays.asList(table.getColumnHeaders());
Filterable filterableContainer = (Filterable) table.getContainerDataSource();
String filterValue = filterField.getValue();
filterableContainer.removeAllContainerFilters();
if (StringUtils.isNotBlank(filterValue)) {
filterableContainer.addContainerFilter(new SimpleStringFilter(null, filterValue, false, false));
}
table.setContainerDataSource(null);
table.setContainerDataSource(filterableContainer);
for (int i = 0; i < table.getColumnHeaders().length; i++) {
table.setColumnHeader(table.getColumnHeaders()[i], captionColumnHeaders.get(i));
}
}
public final TextField getFilterField() {
return filterField;
}
public final Button getFilterButton() {
return filterButton;
}
public final Table getTable() {
return table;
}
}