org.apache.wicket.markup.html.navigation.paging.PagingNavigator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wicket-core Show documentation
Show all versions of wicket-core Show documentation
Wicket is a Java web application framework that takes simplicity,
separation of concerns and ease of development to a whole new level.
Wicket pages can be mocked up, previewed and later revised using
standard WYSIWYG HTML design tools. Dynamic content processing and
form handling is all handled in Java code using a first-class
component model backed by POJO data beans that can easily be
persisted using your favorite technology.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.wicket.markup.html.navigation.paging;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.panel.Panel;
/**
* A Wicket panel component to draw and maintain a complete page navigator, meant to be easily added
* to any PageableListView. A navigation which contains links to the first and last page, the
* current page +- some increment and which supports paged navigation bars (@see
* PageableListViewNavigationWithMargin).
*
* @author Juergen Donnerstag
*/
public class PagingNavigator extends Panel
{
private static final long serialVersionUID = 1L;
/** The navigation bar to be printed, e.g. 1 | 2 | 3 etc. */
private PagingNavigation pagingNavigation;
private final IPageable pageable;
private final IPagingLabelProvider labelProvider;
/**
* Constructor.
*
* @param id
* See Component
* @param pageable
* The pageable component the page links are referring to.
*/
public PagingNavigator(final String id, final IPageable pageable)
{
this(id, pageable, null);
}
/**
* Constructor.
*
* @param id
* See Component
* @param pageable
* The pageable component the page links are referring to.
* @param labelProvider
* The label provider for the link text.
*/
public PagingNavigator(final String id, final IPageable pageable,
final IPagingLabelProvider labelProvider)
{
super(id);
this.pageable = pageable;
this.labelProvider = labelProvider;
}
/**
* {@link IPageable} this navigator is linked with
*
* @return {@link IPageable} instance
*/
public final IPageable getPageable()
{
return pageable;
}
@Override
protected void onInitialize()
{
super.onInitialize();
// Get the navigation bar and add it to the hierarchy
pagingNavigation = newNavigation("navigation", pageable, labelProvider);
add(pagingNavigation);
// Add additional page links
add(newPagingNavigationLink("first", pageable, 0).add(
new TitleAppender("PagingNavigator.first")));
add(newPagingNavigationIncrementLink("prev", pageable, -1).add(
new TitleAppender("PagingNavigator.previous")));
add(newPagingNavigationIncrementLink("next", pageable, 1).add(
new TitleAppender("PagingNavigator.next")));
add(newPagingNavigationLink("last", pageable, -1).add(
new TitleAppender("PagingNavigator.last")));
}
/**
* Create a new increment link. May be subclassed to make use of specialized links, e.g. Ajaxian
* links.
*
* @param id
* the link id
* @param pageable
* the pageable to control
* @param increment
* the increment
* @return the increment link
*/
protected AbstractLink newPagingNavigationIncrementLink(String id, IPageable pageable,
int increment)
{
return new PagingNavigationIncrementLink(id, pageable, increment);
}
/**
* Create a new pagenumber link. May be subclassed to make use of specialized links, e.g.
* Ajaxian links.
*
* @param id
* the link id
* @param pageable
* the pageable to control
* @param pageNumber
* the page to jump to
* @return the pagenumber link
*/
protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, int pageNumber)
{
return new PagingNavigationLink(id, pageable, pageNumber);
}
/**
* Create a new PagingNavigation. May be subclassed to make us of specialized PagingNavigation.
*
* @param id
* The id of the navigation component
* @param pageable
* the pageable component
* @param labelProvider
* The label provider for the link text.
* @return the navigation object
*/
protected PagingNavigation newNavigation(final String id, final IPageable pageable,
final IPagingLabelProvider labelProvider)
{
return new PagingNavigation(id, pageable, labelProvider);
}
/**
* Gets the pageable navigation component for configuration purposes.
*
* @return the associated pageable navigation.
*/
public final PagingNavigation getPagingNavigation()
{
return pagingNavigation;
}
/**
* Appends title attribute to navigation links
*
* @author igor.vaynberg
*/
private final class TitleAppender extends Behavior
{
private static final long serialVersionUID = 1L;
private final String resourceKey;
/**
* Constructor
*
* @param resourceKey
* resource key of the message
*/
public TitleAppender(String resourceKey)
{
this.resourceKey = resourceKey;
}
/** {@inheritDoc} */
@Override
public void onComponentTag(Component component, ComponentTag tag)
{
tag.put("title", PagingNavigator.this.getString(resourceKey));
}
}
}