package lt.inventi.wicket.component.breadcrumb; import java.io.Serializable; import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.cycle.RequestCycle; public class Breadcrumb implements IBreadcrumbTargetProvider, Serializable { /** * We cannot use page ids because they might change after page is loaded, * e.g. when the model is updated before navigating to the next page. * * @param page * @return */ static String constructIdFrom(IRequestablePage page) { return String.valueOf(page.hashCode()); } private String id; private BreadcrumbTitle title; private final BreadcrumbPageProvider pageAndUrlProvider; Breadcrumb(IRequestablePage page, BreadcrumbTitle title) { this.id = constructIdFrom(page); this.pageAndUrlProvider = new BreadcrumbPageProvider(page); this.title = title; } public BreadcrumbTitle title() { return title; } public Class<?> getType() { return pageAndUrlProvider.getPageType(); } @Override public IRequestHandler getHandler() { return pageAndUrlProvider.getHandler(); } @Override public CharSequence getURL(RequestCycle rc) { return pageAndUrlProvider.getURL(rc); } void updateWith(Breadcrumb newCrumb) { this.id = newCrumb.id; this.title = newCrumb.title; } String getId() { return id; } String getStableId() { return pageAndUrlProvider.getId(); } @Override public String toString() { return "Crumb<" + id + ", " + pageAndUrlProvider + ">"; } }