1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.ecm.webui.core;
18
19 import java.util.Arrays;
20
21 import org.exoplatform.commons.serialization.api.annotations.Serialized;
22 import org.exoplatform.commons.utils.PageList;
23 import org.exoplatform.webui.config.annotation.ComponentConfig;
24 import org.exoplatform.webui.config.annotation.EventConfig;
25 import org.exoplatform.webui.core.UIComponent;
26 import org.exoplatform.webui.core.UIPageIterator;
27 import org.exoplatform.webui.event.Event;
28 import org.exoplatform.webui.event.EventListener;
29
30
31
32
33
34
35
36
37
38
39
40 @ComponentConfig(template = "classpath:groovy/ecm/webui/core/UIPageIterator.gtmpl", events = {
41 @EventConfig(listeners = UIECMPageIterator.ShowPageActionListener.class),
42 @EventConfig(listeners = UIECMPageIterator.ChangeMaxSizePageActionListener.class) })
43 @Serialized
44 public class UIECMPageIterator extends UIPageIterator {
45
46
47
48
49 private int itemsPerPage_ = 0;
50
51 private int totalItems = 0;
52
53 private boolean useMaxSizeSetting_ = false;
54
55 public static final int[] MAX_ITEMS_PER_PAGE = new int[] { 5, 10, 15, 20, 30, 60, 100 };
56
57 private boolean justPaginated_ = false;
58
59 public boolean isJustPaginated() { return justPaginated_; }
60
61 public void setJustPaginated(boolean value) {
62 justPaginated_ = value;
63 }
64
65 public UIECMPageIterator() {
66 }
67
68 public int[] getMaxItemPerPageList() {
69 int pageSize = this.getItemsPerPage();
70 if (isPageSizeInList(pageSize)) {
71 return MAX_ITEMS_PER_PAGE;
72 } else {
73 int length = MAX_ITEMS_PER_PAGE.length + 1;
74 int[] pageSizeList = new int[length];
75 System.arraycopy(MAX_ITEMS_PER_PAGE, 0, pageSizeList, 0, MAX_ITEMS_PER_PAGE.length);
76 pageSizeList[pageSizeList.length - 1] = pageSize;
77 Arrays.sort(pageSizeList);
78 return pageSizeList;
79 }
80 }
81
82 public int getItemsPerPage() {
83 if (itemsPerPage_ <= 0) {
84 itemsPerPage_ = 10;
85 }
86 return itemsPerPage_;
87 }
88
89 public void setItemsPerPage(int itemsPerPage) {
90 this.itemsPerPage_ = itemsPerPage;
91 }
92
93 public int getTotalItems() {
94 return totalItems;
95 }
96
97 public void setTotalItems(int totalItems) {
98 this.totalItems = totalItems;
99 }
100
101
102
103
104 public void setUseMaxSizeSetting(boolean useMaxSizeSetting_) {
105 this.useMaxSizeSetting_ = useMaxSizeSetting_;
106 }
107
108
109
110
111 public boolean isUseMaxSizeSetting() {
112 return useMaxSizeSetting_;
113 }
114
115 public void setPageList(PageList pageList)
116 {
117 super.setPageList(pageList);
118 this.itemsPerPage_ = pageList.getPageSize();
119 }
120
121 private boolean isPageSizeInList(int pageSize) {
122 for (int size : MAX_ITEMS_PER_PAGE) {
123 if (size == pageSize) {
124 return true;
125 }
126 }
127 return false;
128 }
129
130 static public class ShowPageActionListener extends EventListener<UIECMPageIterator> {
131 public void execute(Event<UIECMPageIterator> event) throws Exception {
132 UIECMPageIterator uiPageIterator = event.getSource();
133 int page = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
134 uiPageIterator.setCurrentPage(page);
135 uiPageIterator.setJustPaginated(true);
136 UIComponent parent = uiPageIterator.getParent();
137 if (parent == null)
138 return;
139 event.getRequestContext().addUIComponentToUpdateByAjax(parent);
140 parent.broadcast(event, event.getExecutionPhase());
141 }
142 }
143
144 static public class ChangeMaxSizePageActionListener extends EventListener<UIECMPageIterator>{
145
146 public void execute(Event<UIECMPageIterator> event) throws Exception {
147 UIECMPageIterator uiPageIterator = event.getSource();
148 int itemsPerPage = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
149 uiPageIterator.setItemsPerPage(itemsPerPage);
150 UIComponent parent = uiPageIterator.getParent();
151 if (parent == null)
152 return;
153 if (parent instanceof UIPagingGrid ) {
154 ((UIPagingGrid)parent).refresh(uiPageIterator.getCurrentPage());
155 } else if (parent instanceof UIPagingGridDecorator) {
156 ((UIPagingGridDecorator)parent).refresh(uiPageIterator.getCurrentPage());
157 }
158 event.getRequestContext().addUIComponentToUpdateByAjax(parent);
159 }
160
161 }
162
163 }