| /** |
| * |
| * 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); |
| } |
| } |