2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.cdm
.vaadin
.component
;
11 import java
.util
.ArrayList
;
12 import java
.util
.List
;
14 import com
.vaadin
.server
.FontAwesome
;
15 import com
.vaadin
.server
.Resource
;
16 import com
.vaadin
.ui
.Button
;
17 import com
.vaadin
.ui
.Component
;
18 import com
.vaadin
.ui
.GridLayout
;
19 import com
.vaadin
.ui
.themes
.ValoTheme
;
21 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
24 * @author a.kohlbecker
28 public class PagerComponent
extends GridLayout
{
30 private static final long serialVersionUID
= 3097302030025769906L;
32 // String viewStateTemplate;
34 private PagerClickListener pagerClickListener
;
38 * @param viewStateBase
39 * template where <code>$1%d</code> is being used as placeholder
40 * for the page index. E.g. <code>list/all/$1%d</code>
42 public PagerComponent(PagerClickListener pagerClickListener
){
44 this.pagerClickListener
= pagerClickListener
;
45 // this.viewStateTemplate = viewStateTemplate;
48 public void updatePager(Pager
<?
> pager
){
49 List
<Component
> pagerComponents
= new ArrayList
<>();
51 if(pager
.getCurrentIndex() > 0){
52 pagerComponents
.add(pagerButton(0, null, FontAwesome
.ANGLE_DOUBLE_LEFT
));
53 pagerComponents
.add(pagerButton(pager
.getCurrentIndex() - 1, null, FontAwesome
.ANGLE_LEFT
));
55 for(Integer index
: pager
.getIndices()){
56 Button button
= pagerButton(index
, index
.toString(), null);
57 if(index
.intValue() == pager
.getCurrentIndex()){
58 button
.addStyleName(ValoTheme
.BUTTON_BORDERLESS_COLORED
);
60 pagerComponents
.add(button
);
63 if(pager
.getCurrentIndex() != pager
.getPagesAvailable()-1){
64 pagerComponents
.add(pagerButton(pager
.getCurrentIndex() + 1, null, FontAwesome
.ANGLE_RIGHT
));
65 pagerComponents
.add(pagerButton(pager
.getPagesAvailable() - 1, null, FontAwesome
.ANGLE_DOUBLE_RIGHT
));
67 Button rangeIndicator
= new Button("[ " + pager
.getFirstRecord() + " - " + pager
.getLastRecord() + " / " + pager
.getCount() + " ]");
68 rangeIndicator
.addStyleName(ValoTheme
.BUTTON_BORDERLESS
);
69 rangeIndicator
.setEnabled(false); // just a label
70 pagerComponents
.add(rangeIndicator
);
72 removeAllComponents();
73 setColumns(pagerComponents
.size() + 1);
74 addComponents(pagerComponents
.toArray(new Component
[pagerComponents
.size()]));
83 private Button
pagerButton(int index
, String caption
, Resource icon
) {
84 Button b
= new Button(caption
, icon
);
85 b
.addStyleName(ValoTheme
.BUTTON_BORDERLESS
);
86 b
.addClickListener(e
-> pagerClickListener
.pageIndexClicked(index
));
90 public interface PagerClickListener
{
92 public void pageIndexClicked(Integer index
);