forked from Qihoo360/wayne
/
page.go
30 lines (25 loc) · 825 Bytes
/
page.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package dataselector
import (
"github.com/Qihoo360/wayne/src/backend/common"
)
// GenericDataSelect takes a list of GenericDataCells and DataSelectQuery and returns selected data as instructed by dsQuery.
func DataSelectPage(dataList []DataCell, q *common.QueryParam) *common.Page {
SelectableData := DataSelector{
GenericDataList: dataList,
DataSelectQuery: q,
}
// Pipeline is Filter -> Sort -> Paginate
filtered := SelectableData.Filter().Sort()
filteredTotal := len(filtered.GenericDataList)
// slice start and end point
start := q.Offset()
end := start + q.Limit()
if start > int64(filteredTotal) {
start = int64(filteredTotal)
}
if end > int64(filteredTotal) {
end = int64(filteredTotal)
}
pagedList := filtered.GenericDataList[start:end]
return q.NewPage(int64(filteredTotal), pagedList)
}