001 /* 002 * SiteMap.java 003 */ 004 005 package net.sf.tacos.components; 006 007 import java.util.List; 008 import net.sf.tacos.services.CategoryInfo; 009 import net.sf.tacos.services.SiteMap; 010 import org.apache.tapestry.BaseComponent; 011 012 /** 013 * Useful methods for generating a site map. 014 * @author andyhot 015 */ 016 public abstract class SiteMapComponent extends BaseComponent 017 { 018 public abstract SiteMap getSiteMap(); 019 public abstract String getName(); 020 public abstract String getCategory(); 021 022 public abstract boolean getShowAll(); 023 public abstract boolean getIgnoreCurrentPage(); 024 025 /** 026 * If the sitemap should be shown. 027 */ 028 public boolean getShowSiteMap() 029 { 030 return getIgnoreCurrentPage() 031 || (getCurrentPageCategory() != null); 032 } 033 034 /** 035 * The category where the given page belongs. 036 */ 037 public CategoryInfo getCategoryOf(String page) 038 { 039 return getSiteMap().getCategoryFromPage(page); 040 } 041 042 /** 043 * The category of the currently displaying page. 044 */ 045 public CategoryInfo getCurrentPageCategory() 046 { 047 return getCategoryOf(getPage().getPageName()); 048 } 049 050 /** 051 * If the given page is part of the currently rendering category. 052 */ 053 public boolean isPageInCategory(String page) 054 { 055 return getSiteMap().inCategory(page, getCategory()); 056 } 057 058 /** 059 * If the currently displaying page is part of the currently rendering category. 060 */ 061 public boolean isCurrentPageInCategory() 062 { 063 return isPageInCategory(getPage().getPageName()); 064 } 065 066 /** 067 * The default page for the currently rendering category. 068 */ 069 public String getDefaultPage() 070 { 071 return getSiteMap().getDefaultPage(getCategory()).getName(); 072 } 073 074 /** 075 * The css class to be applied for the currently rendering category. 076 * It is 'current' if the category in question contains the displaying page. 077 */ 078 public String getCategoryClass() 079 { 080 return isCurrentPageInCategory() ? "current" : null; 081 } 082 083 /** 084 * The display name for the currently rendering category. 085 */ 086 public String getCategoryDisplayName() 087 { 088 if (getShowAll()) 089 return getSiteMap().getCategoryInfo(getCategory()).getName(); 090 else 091 return getSiteMap().getDefaultPageDesc(getCategory()); 092 } 093 094 /** 095 * The display name for the currently rendering page. 096 */ 097 public String getPageDisplayName() 098 { 099 return getSiteMap().getPageInfo(getName()).getDesc(); 100 } 101 102 /** 103 * Gets the pages that belong to the same category as the given one. 104 */ 105 public List getPagesOfCategoryOfPage(String page) 106 { 107 return getSiteMap().getCategoryPages(page); 108 } 109 110 /** 111 * Gets the pages that belong to the same category as the currently displaying one. 112 */ 113 public List getPagesOfCategoryOfCurrentPage() 114 { 115 return getPagesOfCategoryOfPage(getPage().getPageName()); 116 } 117 118 /** 119 * Gets the pages of the given category. 120 */ 121 public List getPagesOfCategory(String category) 122 { 123 return getSiteMap().getCategoryInfo(category).getPageNames(); 124 } 125 126 /** 127 * Gets the pages of the currently rendering category. 128 */ 129 public List getPagesOfCurrentCategory() 130 { 131 return getPagesOfCategory(getCategory()); 132 } 133 134 public boolean getShowPage() 135 { 136 if (getShowAll()) 137 return true; 138 else 139 return !getName().equals( getCategoryOf(getPage().getPageName()).getDefaultPage() ); 140 } 141 142 /** 143 * The css class to be applied for the currently rendering page. 144 * It is 'here' if the page in question is in fact the one currently displayed. 145 */ 146 public String getPageClass() 147 { 148 String name = getName(); 149 String pageName = getPage().getPageName(); 150 151 boolean selected = name.equals(pageName) 152 || getSiteMap().contains(name, pageName); 153 return selected ? "here" : null; 154 } 155 }