package org.brixcms.plugin.content.breadcrumb; import java.util.ArrayList; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.model.IModel; import org.apache.wicket.util.visit.IVisit; import org.apache.wicket.util.visit.IVisitor; import org.brixcms.jcr.wrapper.BrixNode; import org.brixcms.plugin.content.breadcrumb.BreadcrumbContributor.BreadcrumbItem; import org.brixcms.plugin.site.SitePlugin; import org.brixcms.plugin.site.page.PageNode; import org.brixcms.plugin.site.page.PageRenderingPage; import org.brixcms.web.generic.BrixGenericWebMarkupContainer; /** * @author dan.simko@gmail.com */ @SuppressWarnings("serial") public class BreadcrumbRenderer extends BrixGenericWebMarkupContainer<BrixNode> { public BreadcrumbRenderer(String id, IModel<BrixNode> tileNodeModel) { super(id, tileNodeModel); } @Override public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { getResponse().write(createBreadcrumbHtml(createItems())); } private List<BreadcrumbItem> createItems() { final List<BreadcrumbItem> breadcrumbItems = new ArrayList<>(); PageRenderingPage page = (PageRenderingPage) getPage(); PageNode pageNode = (PageNode) page.getPageNode(); breadcrumbItems.add(loadRootItem()); breadcrumbItems.add(new BreadcrumbItem(pageNode.getTitle(), SitePlugin.get().getUriPathForNode(pageNode).toString())); getPage().visitChildren(BreadcrumbContributor.class, new IVisitor<Component, BreadcrumbContributor>() { @Override public void component(Component component, IVisit<BreadcrumbContributor> iVisit) { ((BreadcrumbContributor) component).contributeToBreadcrumb(breadcrumbItems); } }); return breadcrumbItems; } private String createBreadcrumbHtml(List<BreadcrumbItem> breadcrumbItems) { StringBuilder builder = new StringBuilder(); builder.append("<ol class=\"breadcrumb\">"); for (int i = 0; i < breadcrumbItems.size() - 1; i++) { builder.append(createLink(breadcrumbItems.get(i))); } builder.append(createActive(breadcrumbItems.get(breadcrumbItems.size() - 1))); builder.append("</ol>"); return builder.toString(); } private BreadcrumbItem loadRootItem() { BrixNode root = (BrixNode) getModelObject().getProperty(BreadcrumbTileEditor.HOME_NODE).getNode(); String title = getModelObject().getProperty(BreadcrumbTileEditor.HOME_TITLE).getString(); return new BreadcrumbItem(title, SitePlugin.get().getUriPathForNode(root).toString()); } private String createLink(BreadcrumbItem item) { return "<li><a href=" + item.getUrl() + ">" + item.getTitle() + "</a></li>"; } private String createActive(BreadcrumbItem item) { return "<li class=\"active\">" + item.getTitle() + "</li>"; } }