001
014
015 package com.liferay.portal.atom;
016
017 import com.liferay.portal.kernel.atom.AtomRequestContext;
018 import com.liferay.portal.kernel.dao.search.SearchContainer;
019
020 import org.apache.abdera.ext.history.FeedPagingHelper;
021 import org.apache.abdera.model.Feed;
022
023
026 public class AtomPager {
027
028 public AtomPager(AtomRequestContext atomRequestContext, int totalElements) {
029 this(
030 atomRequestContext.getIntParameter("page"),
031 atomRequestContext.getIntParameter(
032 "max", SearchContainer.DEFAULT_DELTA),
033 totalElements);
034 }
035
036 public AtomPager(int page, int totalElements) {
037 this(page, SearchContainer.DEFAULT_DELTA, totalElements);
038 }
039
040 public AtomPager(int page, int elementsPerPage, int totalElements) {
041 _firstPage = 1;
042
043 int lastPage = totalElements / elementsPerPage;
044
045 if ((totalElements % elementsPerPage) > 0) {
046 lastPage++;
047 }
048
049 if (lastPage == 0) {
050 lastPage = 1;
051 }
052
053 _lastPage = lastPage;
054
055 if (page < _firstPage) {
056 _page = _firstPage;
057 }
058 else if (page > _lastPage) {
059 _page = _lastPage;
060 }
061 else {
062 _page = page;
063 }
064
065 _totalElements = totalElements;
066 _elementsPerPage = elementsPerPage;
067
068 _start = (_page - 1) * _elementsPerPage;
069
070 int end = _start + _elementsPerPage;
071
072 if (end > totalElements) {
073 end = totalElements;
074 }
075
076 _end = end - 1;
077
078 _previousPage = _page - 1;
079
080 int nextPage = _page + 1;
081
082 if (nextPage > _lastPage) {
083 nextPage = 0;
084 }
085
086 _nextPage = nextPage;
087 }
088
089 public int getElementsPerPage() {
090 return _elementsPerPage;
091 }
092
093 public int getEnd() {
094 return _end;
095 }
096
097 public int getFirstPage() {
098 return _firstPage;
099 }
100
101 public int getLastPage() {
102 return _lastPage;
103 }
104
105 public int getNextPage() {
106 return _nextPage;
107 }
108
109 public int getPage() {
110 return _page;
111 }
112
113 public int getPreviousPage() {
114 return _previousPage;
115 }
116
117 public int getStart() {
118 return _start;
119 }
120
121 public int getTotalElements() {
122 return _totalElements;
123 }
124
125 public void setFeedPagingLinks(Feed feed, String url) {
126 FeedPagingHelper.setFirst(feed, AtomUtil.setPageInUrl(url, 1));
127 FeedPagingHelper.setLast(feed, AtomUtil.setPageInUrl(url, _lastPage));
128
129 if (_previousPage != 0) {
130 FeedPagingHelper.setPrevious(
131 feed, AtomUtil.setPageInUrl(url, _previousPage));
132 }
133
134 if (_nextPage != 0) {
135 FeedPagingHelper.setNext(
136 feed, AtomUtil.setPageInUrl(url, _nextPage));
137 }
138 }
139
140 private int _elementsPerPage;
141 private int _end;
142 private int _firstPage;
143 private int _lastPage;
144 private int _nextPage;
145 private int _page;
146 private int _previousPage;
147 private int _start;
148 private int _totalElements;
149
150 }