jenkins merging release branch into master (strategy: theirs)
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / component / PagerComponent.java
1 /**
2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.vaadin.component;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
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;
20
21 import eu.etaxonomy.cdm.api.service.pager.Pager;
22
23 /**
24 * @author a.kohlbecker
25 * @since Jul 3, 2018
26 *
27 */
28 public class PagerComponent extends GridLayout {
29
30 private static final long serialVersionUID = 3097302030025769906L;
31
32 // String viewStateTemplate;
33
34 private PagerClickListener pagerClickListener;
35
36 /**
37 *
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>
41 */
42 public PagerComponent(PagerClickListener pagerClickListener){
43 super(1, 1);
44 this.pagerClickListener = pagerClickListener;
45 // this.viewStateTemplate = viewStateTemplate;
46 }
47
48 public void updatePager(Pager<?> pager){
49 List<Component> pagerComponents = new ArrayList<>();
50
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));
54 }
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);
59 }
60 pagerComponents.add(button);
61 }
62
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));
66 }
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);
71
72 removeAllComponents();
73 setColumns(pagerComponents.size() + 1);
74 addComponents(pagerComponents.toArray(new Component[pagerComponents.size()]));
75 }
76
77 /**
78 * @param i
79 * @param string
80 * @param backward
81 * @return
82 */
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));
87 return b;
88 }
89
90 public interface PagerClickListener {
91
92 public void pageIndexClicked(Integer index);
93 }
94 }