1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.hbtop.screen.top;
19
20 import org.apache.hadoop.hbase.classification.InterfaceAudience;
21
22
23
24
25 @InterfaceAudience.Private
26 public class Paging {
27 private int currentPosition;
28 private int pageStartPosition;
29 private int pageEndPosition;
30
31 private int pageSize;
32 private int recordsSize;
33
34 public void init() {
35 currentPosition = 0;
36 pageStartPosition = 0;
37 pageEndPosition = Math.min(pageSize, recordsSize);
38 }
39
40 public void updatePageSize(int pageSize) {
41 this.pageSize = pageSize;
42
43 if (pageSize == 0) {
44 pageStartPosition = 0;
45 pageEndPosition = 0;
46 } else {
47 pageEndPosition = pageStartPosition + pageSize;
48 keepConsistent();
49 }
50 }
51
52 public void updateRecordsSize(int recordsSize) {
53 if (this.recordsSize == 0) {
54 currentPosition = 0;
55 pageStartPosition = 0;
56 pageEndPosition = Math.min(pageSize, recordsSize);
57 this.recordsSize = recordsSize;
58 } else if (recordsSize == 0) {
59 currentPosition = 0;
60 pageStartPosition = 0;
61 pageEndPosition = 0;
62 this.recordsSize = recordsSize;
63 } else {
64 this.recordsSize = recordsSize;
65 if (pageSize > 0) {
66 pageEndPosition = pageStartPosition + pageSize;
67 keepConsistent();
68 }
69 }
70 }
71
72 public void arrowUp() {
73 if (currentPosition > 0) {
74 currentPosition -= 1;
75 if (pageSize > 0) {
76 keepConsistent();
77 }
78 }
79 }
80
81 public void arrowDown() {
82 if (currentPosition < recordsSize - 1) {
83 currentPosition += 1;
84 if (pageSize > 0) {
85 keepConsistent();
86 }
87 }
88 }
89
90 public void pageUp() {
91 if (pageSize > 0 && currentPosition > 0) {
92 currentPosition -= pageSize;
93 if (currentPosition < 0) {
94 currentPosition = 0;
95 }
96 keepConsistent();
97 }
98 }
99
100 public void pageDown() {
101 if (pageSize > 0 && currentPosition < recordsSize - 1) {
102
103 currentPosition = currentPosition + pageSize;
104 if (currentPosition >= recordsSize) {
105 currentPosition = recordsSize - 1;
106 }
107
108 pageStartPosition = currentPosition;
109 pageEndPosition = pageStartPosition + pageSize;
110 keepConsistent();
111 }
112 }
113
114 private void keepConsistent() {
115 if (currentPosition < pageStartPosition) {
116 pageStartPosition = currentPosition;
117 pageEndPosition = pageStartPosition + pageSize;
118 } else if (currentPosition > recordsSize - 1) {
119 currentPosition = recordsSize - 1;
120 pageEndPosition = recordsSize;
121 pageStartPosition = pageEndPosition - pageSize;
122 } else if (currentPosition > pageEndPosition - 1) {
123 pageEndPosition = currentPosition + 1;
124 pageStartPosition = pageEndPosition - pageSize;
125 }
126
127 if (pageStartPosition < 0) {
128 pageStartPosition = 0;
129 }
130
131 if (pageEndPosition > recordsSize) {
132 pageEndPosition = recordsSize;
133 pageStartPosition = pageEndPosition - pageSize;
134 if (pageStartPosition < 0) {
135 pageStartPosition = 0;
136 }
137 }
138 }
139
140 public int getCurrentPosition() {
141 return currentPosition;
142 }
143
144 public int getPageStartPosition() {
145 return pageStartPosition;
146 }
147
148 public int getPageEndPosition() {
149 return pageEndPosition;
150 }
151 }