View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.hadoop.hbase.hbtop.screen.top;
19  
20  import org.apache.hadoop.hbase.classification.InterfaceAudience;
21  
22  /**
23   * Utility class for paging for the metrics.
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 }