/* * Created on 14.5.2004 */ package com.idega.block.navigation.presentation; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import com.idega.builder.business.PageTreeNode; import com.idega.core.builder.business.BuilderService; import com.idega.core.builder.data.ICPage; import com.idega.presentation.Block; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.PresentationObject; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; /** * @author laddi */ public class NavigationBreadCrumbs extends Block { private ICPage iRoot; private ICPage iCurrentPage; private int iLevels = -1; private int iPadding = 0; private String iSeperatorText; private Image iSeperatorImage; private String iLinkStyleName; private String iTextStyleName; private String iSeperatorStyleName; private BuilderService iBuilderService; private PageTreeNode iCurrentNode; boolean iIgnoreCategoryPages = false; /* (non-Javadoc) * @see com.idega.presentation.PresentationObject#main(com.idega.presentation.IWContext) */ public void main(IWContext iwc) throws Exception { this.iBuilderService = getBuilderService(iwc); if (this.iRoot == null) { this.iRoot = this.iBuilderService.getRootPage(); } this.iCurrentPage = this.iBuilderService.getCurrentPage(iwc); List pages = new ArrayList(); PageTreeNode page = new PageTreeNode(((Integer) this.iCurrentPage.getPrimaryKey()).intValue(), iwc); boolean showPage = true; boolean isCategoryPage = false; int level = 1; while (showPage) { if (page.getNodeID() == ((Integer) this.iRoot.getPrimaryKey()).intValue()) { showPage = false; } if (this.iIgnoreCategoryPages && page.isCategory()) { isCategoryPage = true; } else { isCategoryPage = false; } if (!isCategoryPage) { if (page.getNodeID() == ((Integer) this.iCurrentPage.getPrimaryKey()).intValue()) { Text pageText = new Text(page.getLocalizedNodeName(iwc)); if (this.iTextStyleName != null) { pageText.setStyleClass(this.iTextStyleName); } pages.add(pageText); } else { Link pageLink = new Link(page.getLocalizedNodeName(iwc)); pageLink.setPage(page.getNodeID()); if (this.iLinkStyleName != null) { pageLink.setStyleClass(this.iLinkStyleName); } pages.add(pageLink); } } level++; if (this.iLevels != -1 && level > this.iLevels) { showPage = false; } page = (PageTreeNode) page.getParentNode(); if (page == null) { showPage = false; } } Collections.reverse(pages); Table table = new Table(); table.setCellpadding(0); table.setCellspacing(0); int column = 1; Iterator iter = pages.iterator(); while (iter.hasNext()) { PresentationObject object = (PresentationObject) iter.next(); table.add(object, column, 1); if (column == 1) { table.setCellpaddingRight(column++, 1, this.iPadding); } else { table.setCellpaddingLeft(column, 1, this.iPadding); table.setCellpaddingRight(column++, 1, this.iPadding); } if (iter.hasNext()) { if (this.iSeperatorText != null) { Text seperatorText = new Text(this.iSeperatorText); if (this.iSeperatorStyleName != null) { seperatorText.setStyleClass(this.iSeperatorStyleName); } table.add(seperatorText, column++, 1); } else if (this.iSeperatorImage != null) { table.add(this.iSeperatorImage, column++, 1); } } } add(table); } /** * @param levels The levels to set. */ public void setLevels(int levels) { this.iLevels = levels; } /** * @param linkStyleName The linkStyleName to set. */ public void setLinkStyleName(String linkStyleName) { this.iLinkStyleName = linkStyleName; } /** * @param padding The padding to set. */ public void setPadding(int padding) { this.iPadding = padding; } /** * @param root The root to set. */ public void setRoot(ICPage root) { this.iRoot = root; } /** * @param seperatorImage The seperatorImage to set. */ public void setSeperatorImage(Image seperatorImage) { this.iSeperatorImage = seperatorImage; } /** * @param seperatorStyleName The seperatorStyleName to set. */ public void setSeperatorStyleName(String seperatorStyleName) { this.iSeperatorStyleName = seperatorStyleName; } /** * @param seperatorText The seperatorText to set. */ public void setSeperatorText(String seperatorText) { this.iSeperatorText = seperatorText; } /** * @param textStyleName The textStyleName to set. */ public void setTextStyleName(String textStyleName) { this.iTextStyleName = textStyleName; } /** * @param ignoreCategoryPages The ignoreCategoryPages to set. */ public void setIgnoreCategoryPages(boolean ignoreCategoryPages) { this.iIgnoreCategoryPages = ignoreCategoryPages; } }