blob: e4b4f7483d1ddd334464ab82e762ccde5c16e265 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*/
package org.eclipse.osbp.xtext.table.common;
import java.text.NumberFormat;
import java.util.Locale;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.osbp.runtime.common.i18n.ITranslator;
import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
import org.eclipse.osbp.xtext.datamart.common.olap.DerivedPosition;
import org.tepi.filtertable.paged.PagedFilterControlConfig;
import org.tepi.filtertable.paged.PagedFilterTable;
import org.tepi.filtertable.paged.PagedTableChangeEvent;
import com.vaadin.data.util.converter.StringToIntegerConverter;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.Reindeer;
@SuppressWarnings({ "serial", "rawtypes" })
public class CellSetPagedFilterTable extends PagedFilterTable {
private HorizontalLayout controlBar = null;
private AbstractOrderedLayout parent = null;
private ITranslator translator = null;
private DataBindingContext dbc = null;
@Override
public String getColumnHeader(Object propertyId) {
if (getColumnHeaderMode() == ColumnHeaderMode.HIDDEN) {
return null;
}
DerivedPosition column = ((CellSetIndexedContainer)getContainerDataSource().getContainer()).getColumnPosition(propertyId);
if (column != null) {
return column.toString();
}
return propertyId.toString();
}
@Override
public void setLocale(Locale locale) {
super.setLocale(locale);
addControls(parent, translator, dbc);
resetFilters();
}
public void addControls(AbstractOrderedLayout parent, ITranslator translator, DataBindingContext dbc) {
this.parent = parent;
this.translator = translator;
this.dbc = dbc;
if (controlBar != null) {
parent.removeComponent(controlBar);
controlBar = null;
}
PagedFilterControlConfig config = new PagedFilterControlConfig();
Label itemsPerPageLabel = new Label();
dbc.bindValue(VaadinObservables.observeDescription(itemsPerPageLabel),
BeansObservables.observeValue(translator, "items_per_page"),
new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
itemsPerPageLabel.setSizeUndefined();
final ComboBox itemsPerPageSelect = new ComboBox();
for (Integer i : config.getPageLengths()) {
itemsPerPageSelect.addItem(i);
itemsPerPageSelect.setItemCaption(i, String.valueOf(i));
}
itemsPerPageSelect.setImmediate(true);
itemsPerPageSelect.setNullSelectionAllowed(false);
itemsPerPageSelect.setWidth(null);
itemsPerPageSelect.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = -2255853716069800092L;
@Override
public void valueChange(
com.vaadin.data.Property.ValueChangeEvent event) {
setPageLength((Integer) event.getProperty().getValue());
}
});
if (itemsPerPageSelect.containsId(getPageLength())) {
itemsPerPageSelect.select(getPageLength());
} else {
itemsPerPageSelect.select(itemsPerPageSelect.getItemIds()
.iterator().next());
}
Label pageLabel = new Label();
dbc.bindValue(VaadinObservables.observeDescription(itemsPerPageLabel),
BeansObservables.observeValue(translator, "page"),
new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
final TextField currentPageTextField = new TextField();
currentPageTextField.setValue(String.valueOf(getCurrentPage()));
currentPageTextField.setConverter(new StringToIntegerConverter() {
@Override
protected NumberFormat getFormat(Locale locale) {
NumberFormat result = super.getFormat(UI.getCurrent()
.getLocale());
result.setGroupingUsed(false);
return result;
}
});
Label separatorLabel = new Label(" / ", ContentMode.HTML);
final Label totalPagesLabel = new Label(
String.valueOf(getTotalAmountOfPages()), ContentMode.HTML);
currentPageTextField.setStyleName(Reindeer.TEXTFIELD_SMALL);
currentPageTextField.setImmediate(true);
currentPageTextField.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = -2255853716069800092L;
@Override
public void valueChange(
com.vaadin.data.Property.ValueChangeEvent event) {
if (currentPageTextField.isValid()
&& currentPageTextField.getValue() != null) {
int page = Integer.valueOf(String
.valueOf(currentPageTextField.getValue()));
setCurrentPage(page);
}
}
});
pageLabel.setWidth(null);
currentPageTextField.setColumns(3);
separatorLabel.setWidth(null);
totalPagesLabel.setWidth(null);
controlBar = new HorizontalLayout();
HorizontalLayout pageSize = new HorizontalLayout();
HorizontalLayout pageManagement = new HorizontalLayout();
final Button first = new Button(config.getFirst(), new ClickListener() {
private static final long serialVersionUID = -355520120491283992L;
@Override
public void buttonClick(ClickEvent event) {
setCurrentPage(0);
}
});
final Button previous = new Button(config.getPrevious(),
new ClickListener() {
private static final long serialVersionUID = -355520120491283992L;
@Override
public void buttonClick(ClickEvent event) {
previousPage();
}
});
final Button next = new Button(config.getNext(), new ClickListener() {
private static final long serialVersionUID = -1927138212640638452L;
@Override
public void buttonClick(ClickEvent event) {
nextPage();
}
});
final Button last = new Button(config.getLast(), new ClickListener() {
private static final long serialVersionUID = -355520120491283992L;
@Override
public void buttonClick(ClickEvent event) {
setCurrentPage(getTotalAmountOfPages());
}
});
first.setStyleName(Reindeer.BUTTON_LINK);
previous.setStyleName(Reindeer.BUTTON_LINK);
next.setStyleName(Reindeer.BUTTON_LINK);
last.setStyleName(Reindeer.BUTTON_LINK);
itemsPerPageLabel.addStyleName("pagedtable-itemsperpagecaption");
itemsPerPageSelect.addStyleName("pagedtable-itemsperpagecombobox");
pageLabel.addStyleName("pagedtable-pagecaption");
currentPageTextField.addStyleName("pagedtable-pagefield");
separatorLabel.addStyleName("pagedtable-separator");
totalPagesLabel.addStyleName("pagedtable-total");
first.addStyleName("pagedtable-first");
previous.addStyleName("pagedtable-previous");
next.addStyleName("pagedtable-next");
last.addStyleName("pagedtable-last");
itemsPerPageLabel.addStyleName("pagedtable-label");
itemsPerPageSelect.addStyleName("pagedtable-combobox");
pageLabel.addStyleName("pagedtable-label");
currentPageTextField.addStyleName("pagedtable-label");
separatorLabel.addStyleName("pagedtable-label");
totalPagesLabel.addStyleName("pagedtable-label");
first.addStyleName("pagedtable-button");
previous.addStyleName("pagedtable-button");
next.addStyleName("pagedtable-button");
last.addStyleName("pagedtable-button");
pageSize.addComponent(itemsPerPageLabel);
pageSize.addComponent(itemsPerPageSelect);
pageSize.setComponentAlignment(itemsPerPageLabel, Alignment.MIDDLE_LEFT);
pageSize.setComponentAlignment(itemsPerPageSelect,
Alignment.MIDDLE_LEFT);
pageSize.setSpacing(true);
pageManagement.addComponent(first);
pageManagement.addComponent(previous);
pageManagement.addComponent(pageLabel);
pageManagement.addComponent(currentPageTextField);
pageManagement.addComponent(separatorLabel);
pageManagement.addComponent(totalPagesLabel);
pageManagement.addComponent(next);
pageManagement.addComponent(last);
pageManagement.setComponentAlignment(first, Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(previous, Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(pageLabel, Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(currentPageTextField,
Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(separatorLabel,
Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(totalPagesLabel,
Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(next, Alignment.MIDDLE_LEFT);
pageManagement.setComponentAlignment(last, Alignment.MIDDLE_LEFT);
pageManagement.setWidth(null);
pageManagement.setSpacing(true);
controlBar.addComponent(pageSize);
controlBar.addComponent(pageManagement);
controlBar.setComponentAlignment(pageManagement,
Alignment.MIDDLE_CENTER);
controlBar.setWidth(100, Unit.PERCENTAGE);
controlBar.setExpandRatio(pageSize, 1);
if (super.getContainerDataSource() != null) {
first.setEnabled(super.getContainerDataSource().getStartIndex() > 0);
previous.setEnabled(super.getContainerDataSource().getStartIndex() > 0);
next.setEnabled(super.getContainerDataSource().getStartIndex() < super.getContainerDataSource().getRealSize()
- getPageLength());
last.setEnabled(super.getContainerDataSource().getStartIndex() < super.getContainerDataSource().getRealSize()
- getPageLength());
}
addListener(new PageChangeListener() {
private boolean inMiddleOfValueChange;
@Override
public void pageChanged(PagedTableChangeEvent event) {
if (!inMiddleOfValueChange) {
inMiddleOfValueChange = true;
first.setEnabled(event.getTable().getContainerDataSource().getStartIndex() > 0);
previous.setEnabled(event.getTable().getContainerDataSource().getStartIndex() > 0);
next.setEnabled(event.getTable().getContainerDataSource().getStartIndex() < event.getTable().getContainerDataSource()
.getRealSize() - getPageLength());
last.setEnabled(event.getTable().getContainerDataSource().getStartIndex() < event.getTable().getContainerDataSource()
.getRealSize() - getPageLength());
currentPageTextField.setValue(String
.valueOf(getCurrentPage()));
totalPagesLabel.setValue(Integer
.toString(getTotalAmountOfPages()));
itemsPerPageSelect
.setValue(getPageLength());
inMiddleOfValueChange = false;
}
}
});
parent.addComponent(controlBar);
}
}