001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
024     * @author Igor Spasic
025     */
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    }