001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.markup.html.navigation.paging;
018:
019: import org.apache.wicket.Page;
020: import org.apache.wicket.markup.html.link.Link;
021:
022: /**
023: * An incremental link to a page of a PageableListView. Assuming your list view
024: * navigation looks like
025: *
026: * <pre>
027: *
028: * [first / << / <] 1 | 2 | 3 [> / >> /last]
029: *
030: * </pre>
031: *
032: * <p>
033: * and "<" meaning the previous and "<<" goto the "current page - 5",
034: * than it is this kind of incremental page links which can easily be created.
035: *
036: * @author Juergen Donnerstag
037: * @author Martijn Dashorst
038: */
039: public class PagingNavigationIncrementLink extends Link {
040: private static final long serialVersionUID = 1L;
041:
042: /** The increment. */
043: private final int increment;
044:
045: /** The PageableListView the page links are referring to. */
046: protected final IPageable pageable;
047:
048: /**
049: * Constructor.
050: *
051: * @param id
052: * See Component
053: * @param pageable
054: * The pageable component the page links are referring to
055: * @param increment
056: * increment by
057: */
058: public PagingNavigationIncrementLink(final String id,
059: final IPageable pageable, final int increment) {
060: super (id);
061: setAutoEnable(true);
062: this .increment = increment;
063: this .pageable = pageable;
064: }
065:
066: /**
067: * @see org.apache.wicket.markup.html.link.Link#onClick()
068: */
069: public void onClick() {
070: // Tell the PageableListView which page to print next
071: pageable.setCurrentPage(getPageNumber());
072:
073: // We do need to redirect, else refresh refresh will go to next, next
074: setRedirect(true);
075:
076: // Return the current page.
077: setResponsePage(getPage());
078: }
079:
080: /**
081: * Determines the next page number for the pageable component.
082: *
083: * @return the new page number
084: */
085: public final int getPageNumber() {
086: // Determine the page number based on the current
087: // PageableListView page and the increment
088: int idx = pageable.getCurrentPage() + increment;
089:
090: // make sure the index lies between 0 and the last page
091: return Math.max(0, Math.min(pageable.getPageCount() - 1, idx));
092: }
093:
094: /**
095: * @return True if it is referring to the first page of the underlying
096: * PageableListView.
097: */
098: public boolean isFirst() {
099: return pageable.getCurrentPage() <= 0;
100: }
101:
102: /**
103: * @return True if it is referring to the last page of the underlying
104: * PageableListView.
105: */
106: public boolean isLast() {
107: return pageable.getCurrentPage() >= (pageable.getPageCount() - 1);
108: }
109:
110: /**
111: * Returns true if the page link links to the given page.
112: *
113: * @param page
114: * ignored
115: * @return True if this link links to the given page
116: * @see org.apache.wicket.markup.html.link.PageLink#linksTo(org.apache.wicket.Page)
117: */
118: public boolean linksTo(final Page page) {
119: int currentPage = pageable.getCurrentPage();
120: if (((increment < 0) && isFirst())
121: || ((increment > 0) && isLast())) {
122: return true;
123: }
124:
125: return false;
126: }
127: }
|