1 31 32 package org.opencms.frontend.templateone; 33 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.i18n.CmsEncoder; 37 import org.opencms.i18n.CmsMessages; 38 import org.opencms.jsp.CmsJspNavElement; 39 import org.opencms.main.CmsException; 40 import org.opencms.main.CmsLog; 41 import org.opencms.main.OpenCms; 42 import org.opencms.util.CmsStringUtil; 43 import org.opencms.xml.content.CmsXmlContent; 44 import org.opencms.xml.types.I_CmsXmlContentValue; 45 46 import java.io.IOException ; 47 import java.util.ArrayList ; 48 import java.util.HashMap ; 49 import java.util.Iterator ; 50 import java.util.List ; 51 import java.util.Locale ; 52 import java.util.Map ; 53 54 import javax.servlet.http.HttpServletRequest ; 55 import javax.servlet.http.HttpServletResponse ; 56 import javax.servlet.jsp.JspException ; 57 import javax.servlet.jsp.JspWriter ; 58 import javax.servlet.jsp.PageContext ; 59 60 import org.apache.commons.logging.Log; 61 62 86 public class CmsTemplateNavigation extends CmsTemplateBase { 87 88 89 public static final String FILE_CONFIG_HEADNAV = "headnav"; 90 91 92 public static final String PARAM_HEADNAV_FOLDER = "headnavfolder"; 93 94 95 public static final String PARAM_HEADNAV_IMAGES = "headnavimages"; 96 97 98 public static final String PARAM_HEADNAV_MARKCURRENT = "headnavmarkcurrent"; 99 100 101 public static final String PARAM_HEADNAV_MANUAL = "headnavmanual"; 102 103 104 public static final String PARAM_HEADNAV_MENUCLICK = "headnavmenuclick"; 105 106 107 public static final String PARAM_HEADNAV_MENUDEPTH = "headnavmenudepth"; 108 109 110 public static final String PARAM_LOCALE = "locale"; 111 112 113 public static final String PARAM_NAVLEFT_ELEMENTURI = "navleftelementuri"; 114 115 116 public static final String PARAM_NAVLEFT_SHOWSELECTED = "navleftselected"; 117 118 119 public static final String PARAM_NAVLEFT_SHOWTREE = "navleftshowtree"; 120 121 122 public static final String PARAM_RESPATH = "respath"; 123 124 125 public static final String PARAM_SHOWMENUS = "showmenus"; 126 127 128 public static final String PARAM_STARTFOLDER = "startfolder"; 129 130 131 public static final String PROPERTY_HEADNAV_USE = "style_head_nav_showitem"; 132 133 134 private static final Log LOG = CmsLog.getLog(CmsTemplateBean.class); 135 136 137 private CmsXmlContent m_globalConfiguration; 138 139 140 private CmsXmlContent m_headNavConfiguration; 141 142 143 private String m_headNavFolder; 144 145 146 private boolean m_headNavItemDefaultValue; 147 148 149 private boolean m_headNavManual; 150 151 152 private boolean m_headNavMarkCurrent; 153 154 155 private boolean m_headNavMenuClick; 156 157 158 private String m_locale; 159 160 161 private int m_menuDepth; 162 163 164 private CmsMessages m_messages; 165 166 167 private String m_navLeftElementUri; 168 169 170 private boolean m_navLeftShowSelected; 171 172 173 private boolean m_navLeftShowTree; 174 175 176 private String m_resPath; 177 178 179 private boolean m_showAccessibleVersion; 180 181 182 private boolean m_showHeadNavImages; 183 184 185 private boolean m_showMenus; 186 187 188 private String m_startFolder; 189 190 193 public CmsTemplateNavigation() { 194 195 super(); 196 } 197 198 207 public CmsTemplateNavigation(PageContext context, HttpServletRequest req, HttpServletResponse res) { 208 209 super(); 210 init(context, req, res); 211 } 212 213 222 public String buildNavigationBreadCrumb(String styleClass) { 223 224 StringBuffer result = new StringBuffer (512); 225 int startLevel = 1; 227 if (showNavLeftSelected()) { 228 startLevel = CmsResource.getPathLevel(getHeadNavFolder()); 230 } else { 231 startLevel = CmsResource.getPathLevel(getStartFolder()); 233 } 234 CmsJspNavElement currentPage = getNavigation().getNavigationForResource(getRequestContext().getUri()); 236 int currentLevel = currentPage.getNavTreeLevel(); 238 int deltaLevel = currentLevel - startLevel; 240 241 boolean showNavigation = deltaLevel > 3 || (deltaLevel == 3 && currentPage.isInNavigation()); 243 244 if (showNavigation) { 245 String separator = ">"; 247 result.append("<div class=\""); 248 result.append(styleClass); 249 result.append("\">"); 250 List navElements = getNavigation().getNavigationBreadCrumb(startLevel + 3, true); 251 for (int i = 0; i < navElements.size(); i++) { 252 CmsJspNavElement nav = (CmsJspNavElement)navElements.get(i); 253 result.append("<a HREF=\""); 254 result.append(link(nav.getResourceName())); 255 result.append("\" class=\""); 256 result.append(styleClass); 257 result.append("\" title=\""); 258 result.append(nav.getNavText()); 259 result.append("\">"); 260 result.append(separator); 261 result.append(" "); 262 result.append(nav.getNavText()); 263 result.append("</a>\n"); 264 } 265 if (currentPage.isInNavigation()) { 266 result.append("<a HREF=\""); 268 result.append(link(currentPage.getResourceName())); 269 result.append("\" class=\""); 270 result.append(styleClass); 271 result.append("\" title=\""); 272 result.append(currentPage.getNavText()); 273 result.append("\">"); 274 result.append(separator); 275 result.append(" "); 276 result.append(currentPage.getNavText()); 277 result.append("</a>\n"); 278 } 279 result.append("</div>"); 280 281 } 282 return result.toString(); 283 } 284 285 296 public String buildNavigationHead(String homeLabel, String styleLink, String styleSeparator) { 297 298 boolean firstItem = true; 299 StringBuffer result = new StringBuffer (1024); 300 result.append("<div class=\""); 301 result.append(styleLink); 302 result.append("\">\n"); 303 result.append("\t<!-- Start Topnavigation -->\n"); 304 305 boolean showHomeLink = Boolean.valueOf(getConfigurationValue("headnav.homelink/link.show", CmsStringUtil.TRUE)).booleanValue(); 306 if (showHomeLink && !showHeadNavImages()) { 307 boolean onlyIndex = Boolean.valueOf( 309 getConfigurationValue("headnav.homelink/link.onlyindex", CmsStringUtil.FALSE)).booleanValue(); 310 String url = getStartFolder(); 311 String target = "_self"; 312 if ((onlyIndex && isDefaultFile(getStartFolder(), getRequestContext().getUri())) || (!onlyIndex)) { 313 url = getConfigurationValue("headnav.homelink/link.url", getStartFolder()); 315 homeLabel = getConfigurationValue("headnav.homelink/link.text", homeLabel); 316 target = getConfigurationValue("headnav.homelink/link.target", "_self"); 317 } 318 319 if (url.startsWith("/")) { 320 url = link(url); 322 } 323 homeLabel = homeLabel.toUpperCase(); 324 325 result.append("<a class=\""); 326 result.append(styleLink); 327 result.append("\" HREF=\""); 328 result.append(url); 329 result.append("\" title=\""); 330 result.append(homeLabel); 331 result.append("\" target=\""); 332 result.append(target); 333 result.append("\">"); 334 result.append(homeLabel); 335 result.append("</a>\n"); 336 firstItem = false; 337 } else if (showHeadNavImages()) { 338 result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>"); 340 } 341 342 int count = -1; 343 String showItemProperty; 344 345 boolean manualHeadConfig = isHeadNavManual(); 347 348 List navElements = new ArrayList (); 349 if (manualHeadConfig) { 350 navElements = getHeadNavItemsFromConfig(0, "0"); 352 } else { 353 navElements = getNavigation().getNavigationForFolder(getHeadNavFolder()); 355 } 356 for (int i = 0; i < navElements.size(); i++) { 357 CmsJspNavElement nav = (CmsJspNavElement)navElements.get(i); 358 String link = nav.getResourceName(); 359 if (link.startsWith("/")) { 360 link = link(link); 361 } 362 showItemProperty = getHeadNavItemDefaultStringValue(); 363 if (getCmsObject().existsResource(nav.getResourceName())) { 364 showItemProperty = property( 365 PROPERTY_HEADNAV_USE, 366 nav.getResourceName(), 367 getHeadNavItemDefaultStringValue()); 368 } else if (LOG.isWarnEnabled()) { 369 LOG.warn(Messages.get().getBundle().key( 370 Messages.LOG_NAVIGATION_CONFIG_ERR_2, 371 nav.getResourceName(), 372 getRequestContext().getUri())); 373 } 374 boolean showItem = Boolean.valueOf(showItemProperty).booleanValue(); 375 if (manualHeadConfig || (nav.isFolderLink() && showItem)) { 376 count++; 378 String navText = CmsEncoder.escapeXml(nav.getNavText().toUpperCase()); 379 String target = nav.getInfo(); 380 if (CmsStringUtil.isEmpty(target)) { 381 target = "_self"; 382 } 383 if (showHeadNavImages()) { 384 result.append("<td style= \"vertical-align: middle\">"); 386 result.append("<a"); 387 if (showMenus()) { 388 result.append(" onmouseover=\"buttonMouseover(event, 'menu"); 389 result.append(count); 390 result.append("');\""); 391 if (getHeadNavMenuClick()) { 392 result.append(" onclick=\"return buttonClick(event, 'menu"); 394 result.append(count); 395 result.append("');\""); 396 } 397 } 398 result.append(" title=\""); 399 result.append(navText); 400 result.append("\" HREF=\""); 401 result.append(link); 402 result.append("\" target=\""); 403 result.append(target); 404 result.append("\">"); 405 result.append("<img SRC=\""); 406 result.append(link(nav.getNavImage())); 407 result.append("\" border=\"0\" alt=\""); 408 result.append(navText); 409 result.append("\">"); 410 result.append("</a></td>\n"); 411 } else { 412 if (!firstItem) { 414 result.append("<span class=\""); 415 result.append(styleSeparator); 416 result.append("\">|</span>\n"); 417 } 418 result.append("<a"); 419 if (showMenus()) { 420 result.append(" onmouseover=\"buttonMouseover(event, 'menu"); 421 result.append(count); 422 result.append("');\""); 423 if (getHeadNavMenuClick()) { 424 result.append(" onclick=\"return buttonClick(event, 'menu"); 426 result.append(count); 427 result.append("');\""); 428 } 429 } 430 if (getHeadNavMarkCurrent() && getRequestContext().getUri().startsWith(nav.getResourceName())) { 431 result.append(" style=\"font-weight: bold;\""); 433 } 434 result.append(" class=\""); 435 result.append(styleLink); 436 result.append("\" title=\""); 437 result.append(navText); 438 result.append("\" HREF=\""); 439 result.append(link); 440 result.append("\" target=\""); 441 result.append(target); 442 result.append("\">"); 443 result.append(navText); 444 result.append("</a>\n"); 445 } 446 firstItem = false; 447 } 448 } 449 450 if (showHeadNavImages()) { 451 result.append("</tr></table>"); 453 } 454 455 result.append("\t<!-- End Topnavigation -->\n"); 456 result.append("</div>\n"); 457 return result.toString(); 458 } 459 460 469 public String buildNavigationHeadMenus(String styleClass) { 470 471 boolean cacheNavEnabled = !getRequestContext().currentProject().isOnlineProject(); 472 String cacheKey = null; 473 if (cacheNavEnabled) { 474 StringBuffer key = new StringBuffer (8); 476 key.append(getRequestContext().getSiteRoot()); 477 key.append("_"); 478 key.append(getHeadNavFolder().hashCode()); 479 key.append("_"); 480 key.append(getStartFolder().hashCode()); 481 key.append("_"); 482 key.append(getMenuDepth()); 483 key.append("_"); 484 key.append(showMenus()); 485 key.append("_"); 486 key.append(showAccessibleVersion()); 487 key.append("_"); 488 key.append(getLocale()); 489 if (isHeadNavManual()) { 490 key.append("_"); 492 key.append(getConfigPath().hashCode()); 493 } 494 cacheKey = key.toString(); 495 String cachedNav = CmsTemplateParts.getInstance().getPart(cacheKey); 496 if (CmsStringUtil.isNotEmpty(cachedNav)) { 497 return cachedNav; 499 } 500 } 501 502 StringBuffer result = new StringBuffer (4096); 503 504 if (showMenus()) { 505 507 boolean manualHeadConfig = isHeadNavManual(); 509 510 List navElements = new ArrayList (); 511 if (manualHeadConfig) { 512 navElements = getHeadNavItemsFromConfig(0, "0"); 514 } else { 515 navElements = getNavigation().getNavigationForFolder(getHeadNavFolder()); 517 } 518 519 int count = -1; 520 String showItemProperty; 521 for (int i = 0; i < navElements.size(); i++) { 522 CmsJspNavElement foldernav = (CmsJspNavElement)navElements.get(i); 523 showItemProperty = getHeadNavItemDefaultStringValue(); 524 if (getCmsObject().existsResource(foldernav.getResourceName())) { 525 showItemProperty = property( 526 PROPERTY_HEADNAV_USE, 527 foldernav.getResourceName(), 528 getHeadNavItemDefaultStringValue()); 529 } else if (LOG.isWarnEnabled()) { 530 LOG.warn(Messages.get().getBundle().key( 531 Messages.LOG_NAVIGATION_CONFIG_ERR_2, 532 foldernav.getResourceName(), 533 getRequestContext().getUri())); 534 } 535 boolean showItem = Boolean.valueOf(showItemProperty).booleanValue(); 536 if (manualHeadConfig || (foldernav.isFolderLink() && showItem)) { 537 count++; 539 String subfolder = foldernav.getResourceName(); 540 541 List subNav = new ArrayList (); 542 String menuIndexes = null; 543 if (manualHeadConfig) { 544 menuIndexes = String.valueOf(i); 545 subNav = getHeadNavItemsFromConfig(1, menuIndexes); 546 } else { 547 subNav = getNavigation().getNavigationForFolder(subfolder); 549 } 550 result.append(getMenuNavigation(subNav, styleClass, "menu" + count, 1, menuIndexes)); 551 } 552 } 553 554 if (cacheNavEnabled) { 555 CmsTemplateParts.getInstance().addPart(cacheKey, result.toString()); 557 } 558 } 559 return result.toString(); 560 } 561 562 567 public String buildNavigationLeft() { 568 569 StringBuffer result = new StringBuffer (2048); 570 if (showNavLeftTree()) { 571 result.append("<!-- Start navigation left -->\n"); 573 if (!showAccessibleVersion()) { 574 result.append("\t<div style=\"line-height: 1px; font-size: 1px; display: block; height: 4px;\"> </div>\n"); 575 } 576 int startLevel = 1; 578 if (showNavLeftSelected()) { 579 startLevel = CmsResource.getPathLevel(getHeadNavFolder()); 581 } else { 582 startLevel = CmsResource.getPathLevel(getStartFolder()); 584 } 585 int endLevel = startLevel + 2; 586 587 String uri = getRequestContext().getUri(); 589 590 List navElements = getNavigation().getNavigationTreeForFolder( 592 getRequestContext().getUri(), 593 startLevel, 594 endLevel); 595 int oldLevel = -1; 596 for (int i = 0; i < navElements.size(); i++) { 597 CmsJspNavElement nav = (CmsJspNavElement)navElements.get(i); 598 boolean showElement = true; 600 601 String resName = nav.getResourceName(); 603 604 int level = nav.getNavTreeLevel() - (startLevel - 1); 606 607 String styleClass = "navleft"; 609 if (uri.equals(resName) || (nav.isFolderLink() && isDefaultFile(resName, uri))) { 610 styleClass += "active"; 611 } 612 613 if (showNavLeftSelected()) { 615 if (level <= 1 && !uri.startsWith(resName)) { 616 showElement = false; 618 } 619 } 620 621 if (showElement) { 622 if (oldLevel != -1) { 624 if (level == oldLevel) { 626 result.append("</li>\n"); 628 } else if (level < oldLevel) { 629 int delta = oldLevel - level; 631 boolean itemClosed = false; 632 for (int k = 0; k < delta; k++) { 633 if (!itemClosed) { 635 result.append("</li>"); 636 itemClosed = true; 637 } 638 result.append("\n</ul></li>\n"); 639 } 640 } else { 641 result.append("<ul class=\"navleft\">\n"); 643 } 644 } else { 645 result.append("<ul class=\"navleft\">\n"); 647 } 648 649 result.append("<li class=\""); 651 result.append(styleClass); 652 result.append("\"><a class=\""); 653 result.append(styleClass); 654 result.append("\" HREF=\""); 655 result.append(link(resName)); 656 result.append("\" title=\""); 657 result.append(nav.getNavText()); 658 result.append("\">"); 659 result.append(nav.getNavText()); 660 result.append("</a>"); 661 oldLevel = level; 663 } 664 } 665 for (int i = 0; i < oldLevel; i++) { 666 result.append("</li></ul>\n"); 668 } 669 result.append("<!-- End navigation left -->"); 670 } 671 return result.toString(); 672 } 673 674 680 public void buildNavLeftIncludeElement() throws IOException , JspException { 681 682 JspWriter out = getJspContext().getOut(); 683 if (showNavLeftElement()) { 684 out.print("\t<div style=\"line-height: 1px; font-size: 1px; display: block; height: 4px;\"> </div>\n"); 685 include(getNavLeftElementUri(), "text1", true); 686 } else if (!showNavLeftTree()) { 687 out.print(" "); 689 } 690 } 691 692 697 public String getConfigPath() { 698 699 return property(CmsTemplateBean.PROPERTY_CONFIGPATH, "search", "/"); 700 } 701 702 707 public CmsXmlContent getConfiguration() { 708 709 if (m_globalConfiguration == null) { 710 m_globalConfiguration = CmsTemplateBean.getConfigurationFile(getConfigPath() 711 + CmsTemplateBean.FILE_CONFIG_COMMON, getCmsObject()); 712 } 713 return m_globalConfiguration; 714 } 715 716 725 public String getConfigurationValue(String key, String defaultValue) { 726 727 String value = null; 728 try { 729 value = getConfiguration().getStringValue(null, key, getRequestContext().getLocale()); 730 } catch (Exception e) { 731 if (LOG.isDebugEnabled()) { 733 LOG.debug(e.getMessage(), e); 734 } 735 } 736 if (CmsStringUtil.isEmpty(value)) { 737 value = defaultValue; 738 } 739 return value; 740 } 741 742 747 public String getHeadNavFolder() { 748 749 return m_headNavFolder; 750 } 751 752 767 public List getHeadNavItemsFromConfig(int menuLevel, String menuIndexes) { 768 769 if (m_headNavConfiguration == null) { 770 m_headNavConfiguration = CmsTemplateBean.getConfigurationFile( 772 getConfigPath() + FILE_CONFIG_HEADNAV, 773 getCmsObject()); 774 } 775 Locale locale = getRequestContext().getLocale(); 776 List navEntries = new ArrayList (); 777 if (menuLevel == 0) { 778 navEntries = m_headNavConfiguration.getValues("link", locale); 780 } else { 781 StringBuffer xPath = new StringBuffer (8); 783 xPath.append("link"); 784 for (int i = 0; i < menuLevel; i++) { 785 int menuIndex = Integer.parseInt(String.valueOf(menuIndexes.charAt(i))); 787 xPath.append("["); 788 xPath.append(menuIndex + 1); 789 xPath.append("]/menu"); 790 791 } 792 navEntries = m_headNavConfiguration.getValues(xPath.toString(), locale); 793 } 794 int navEntriesSize = navEntries.size(); 795 List result = new ArrayList (navEntriesSize); 796 for (int i = 0; i < navEntriesSize; i++) { 797 I_CmsXmlContentValue headLink = (I_CmsXmlContentValue)navEntries.get(i); 798 String linkPath = headLink.getPath(); 800 String url = m_headNavConfiguration.getStringValue(getCmsObject(), linkPath + "/link.url", locale); 802 String text = m_headNavConfiguration.getStringValue(getCmsObject(), linkPath + "/link.text", locale); 804 String target = m_headNavConfiguration.getStringValue(getCmsObject(), linkPath + "/link.target", locale); 806 if (CmsStringUtil.isEmpty(target)) { 807 target = "_self"; 808 } 809 Map properties = new HashMap (3); 811 properties.put(CmsPropertyDefinition.PROPERTY_NAVTEXT, text); 812 properties.put(CmsPropertyDefinition.PROPERTY_NAVINFO, target); 813 if (showHeadNavImages() && menuLevel == 0) { 814 String image = m_headNavConfiguration.getStringValue(getCmsObject(), linkPath + "/link.image", locale); 816 if (CmsStringUtil.isEmpty(image)) { 817 image = ""; 818 } 819 properties.put(CmsPropertyDefinition.PROPERTY_NAVIMAGE, image); 820 } 821 CmsJspNavElement nav = new CmsJspNavElement(url, properties, 1); 822 result.add(nav); 823 } 824 return result; 825 826 } 827 828 833 public boolean getHeadNavMarkCurrent() { 834 835 return m_headNavMarkCurrent; 836 } 837 838 843 public boolean getHeadNavMenuClick() { 844 845 return m_headNavMenuClick; 846 } 847 848 853 public String getLocale() { 854 855 return m_locale; 856 } 857 858 863 public int getMenuDepth() { 864 865 return m_menuDepth; 866 } 867 868 879 public StringBuffer getMenuNavigation( 880 List curNav, 881 String styleClass, 882 String prefix, 883 int currentDepth, 884 String menuIndexes) { 885 886 StringBuffer result = new StringBuffer (64); 887 String showItemProperty; 888 889 int navSize = curNav.size(); 890 if (navSize > 0) { 891 Map subNav = new HashMap (); 893 Map subIndex = new HashMap (); 894 boolean entryPresent = false; 895 boolean manualConfig = CmsStringUtil.isNotEmpty(menuIndexes); 896 for (int i = 0; i < navSize; i++) { 898 CmsJspNavElement ne = (CmsJspNavElement)curNav.get(i); 899 String resName = ne.getResourceName(); 900 String link = resName; 901 if (link.startsWith("/")) { 902 link = link(link); 903 } 904 showItemProperty = getHeadNavItemDefaultStringValue(); 905 if (getCmsObject().existsResource(resName)) { 906 showItemProperty = property(PROPERTY_HEADNAV_USE, resName, getHeadNavItemDefaultStringValue()); 907 } else if (LOG.isWarnEnabled()) { 908 LOG.warn(Messages.get().getBundle().key( 909 Messages.LOG_NAVIGATION_CONFIG_ERR_2, 910 resName, 911 getRequestContext().getUri())); 912 } 913 boolean showEntry = manualConfig || Boolean.valueOf(showItemProperty).booleanValue(); 914 if (showEntry) { 915 entryPresent = true; 916 List navEntries = new ArrayList (); 917 if (currentDepth < getMenuDepth()) { 919 if (manualConfig) { 920 navEntries = getHeadNavItemsFromConfig(currentDepth + 1, menuIndexes + String.valueOf(i)); 922 } else if (ne.isFolderLink()) { 923 navEntries = getNavigation().getNavigationForFolder(resName); 925 } 926 927 } 928 929 String target = ne.getInfo(); 930 if (CmsStringUtil.isEmpty(target)) { 931 target = "_self"; 932 } 933 result.append(" <a class=\"mI\" HREF=\""); 934 result.append(link); 935 result.append("\""); 936 result.append("\" target=\""); 937 result.append(target); 938 result.append("\""); 939 if ((ne.isFolderLink() && hasSubMenuEntries(navEntries)) || (manualConfig && navEntries.size() > 0)) { 940 result.append(" onmouseover=\"menuItemMouseover(event, '"); 942 result.append(prefix); 943 result.append("_"); 944 result.append(resName.hashCode()); 945 result.append("');\">"); 946 result.append("<span class=\"mIText\">"); 947 result.append(ne.getNavText()); 948 result.append("</span><span class=\"mIArrow\">▶</span></a>"); 949 subNav.put(resName, navEntries); 951 if (manualConfig) { 952 subIndex.put(resName, menuIndexes + String.valueOf(i)); 954 } 955 } else { 956 result.append(">"); 958 result.append(ne.getNavText()); 959 result.append("</a>"); 960 } 961 } 962 } 963 result.append("</div>\n"); 964 965 StringBuffer openTag = new StringBuffer (8); 966 if ("menu0".equals(prefix) && showAccessibleVersion()) { 967 CmsMessages messages = new CmsMessages(CmsTemplateBean.MESSAGE_BUNDLE, getRequestContext().getLocale()); 969 openTag.append("<div style=\"visibility: hidden; display:none;\">"); 970 openTag.append("<h3>").append(messages.key("headline.accessible.nav.headline")).append("</h3>"); 971 openTag.append("<p>").append(messages.key("headline.accessible.nav.text")).append("</p>"); 972 openTag.append("</div>"); 973 } 974 if (entryPresent) { 975 openTag.append("<div class=\""); 976 openTag.append(styleClass); 977 openTag.append("\" id=\""); 978 openTag.append(prefix); 979 openTag.append("\" onmouseover=\"menuMouseover(event);\">"); 980 } else { 981 openTag.append("<div style=\"visibility: hidden;\" id=\""); 982 openTag.append(prefix); 983 openTag.append("\">"); 984 } 985 result.insert(0, openTag); 986 987 Iterator i = subNav.keySet().iterator(); 989 while (i.hasNext()) { 990 String resName = (String )i.next(); 991 List navEntries = (List )subNav.get(resName); 992 String newIndex = menuIndexes; 993 if (manualConfig) { 994 newIndex = (String )subIndex.get(resName); 996 } 997 result.append(getMenuNavigation( 998 navEntries, 999 styleClass, 1000 prefix + "_" + resName.hashCode(), 1001 currentDepth + 1, 1002 newIndex)); 1003 } 1004 } 1005 return result; 1006 } 1007 1008 1013 public String getNavLeftElementUri() { 1014 1015 return m_navLeftElementUri; 1016 } 1017 1018 1023 public String getResourcePath() { 1024 1025 return m_resPath; 1026 } 1027 1028 1033 public String getStartFolder() { 1034 1035 return m_startFolder; 1036 } 1037 1038 1048 public void init(PageContext context, HttpServletRequest req, HttpServletResponse res) { 1049 1050 super.init(context, req, res); 1052 m_locale = req.getParameter(PARAM_LOCALE); 1054 if (m_locale == null) { 1055 m_locale = property(CmsPropertyDefinition.PROPERTY_LOCALE, "search", "en").toLowerCase(); 1056 } 1057 m_showAccessibleVersion = Boolean.valueOf(req.getParameter(CmsTemplateBean.PARAM_ACCESSIBLE)).booleanValue(); 1058 m_headNavFolder = req.getParameter(PARAM_HEADNAV_FOLDER); 1059 m_showHeadNavImages = Boolean.valueOf(req.getParameter(PARAM_HEADNAV_IMAGES)).booleanValue(); 1060 m_headNavItemDefaultValue = true; 1061 m_headNavManual = Boolean.valueOf(req.getParameter(PARAM_HEADNAV_MANUAL)).booleanValue(); 1062 m_headNavMarkCurrent = Boolean.valueOf(req.getParameter(PARAM_HEADNAV_MARKCURRENT)).booleanValue(); 1063 m_headNavMenuClick = Boolean.valueOf(req.getParameter(PARAM_HEADNAV_MENUCLICK)).booleanValue(); 1064 try { 1065 m_menuDepth = Integer.parseInt(req.getParameter(PARAM_HEADNAV_MENUDEPTH)); 1066 } catch (Exception e) { 1067 m_menuDepth = 2; 1068 } 1069 m_navLeftElementUri = req.getParameter(PARAM_NAVLEFT_ELEMENTURI); 1070 m_navLeftShowSelected = Boolean.valueOf(req.getParameter(PARAM_NAVLEFT_SHOWSELECTED)).booleanValue(); 1071 m_navLeftShowTree = Boolean.valueOf(req.getParameter(PARAM_NAVLEFT_SHOWTREE)).booleanValue(); 1072 m_resPath = req.getParameter(PARAM_RESPATH); 1073 m_startFolder = req.getParameter(PARAM_STARTFOLDER); 1074 m_showMenus = Boolean.valueOf(req.getParameter(PARAM_SHOWMENUS)).booleanValue(); 1075 } 1076 1077 1087 public String key(String keyName) { 1088 1089 return messages().key(keyName); 1090 } 1091 1092 1097 public CmsMessages messages() { 1098 1099 if (m_messages == null) { 1100 m_messages = getMessages(CmsTemplateBean.MESSAGE_BUNDLE, getLocale()); 1101 } 1102 return m_messages; 1103 } 1104 1105 1110 public void setHeadNavItemDefaultValue(boolean defaultValue) { 1111 1112 m_headNavItemDefaultValue = defaultValue; 1113 } 1114 1115 1120 public boolean showAccessibleVersion() { 1121 1122 return m_showAccessibleVersion; 1123 } 1124 1125 1130 public boolean showHeadNavImages() { 1131 1132 return m_showHeadNavImages; 1133 } 1134 1135 1140 public boolean showMenus() { 1141 1142 return m_showMenus; 1143 } 1144 1145 1150 public boolean showNavLeftElement() { 1151 1152 return (getNavLeftElementUri() != null && !CmsTemplateBean.PROPERTY_VALUE_NONE.equals(getNavLeftElementUri())); 1153 } 1154 1155 1160 public boolean showNavLeftSelected() { 1161 1162 return m_navLeftShowSelected; 1163 } 1164 1165 1170 public boolean showNavLeftTree() { 1171 1172 return m_navLeftShowTree; 1173 } 1174 1175 1180 private String getHeadNavItemDefaultStringValue() { 1181 1182 return "" + m_headNavItemDefaultValue; 1183 } 1184 1185 1191 private boolean hasSubMenuEntries(List navEntries) { 1192 1193 for (int i = navEntries.size() - 1; i >= 0; i--) { 1194 CmsJspNavElement nav = (CmsJspNavElement)navEntries.get(i); 1195 String showItemProperty = getHeadNavItemDefaultStringValue(); 1196 if (getCmsObject().existsResource(nav.getResourceName())) { 1197 showItemProperty = property( 1198 PROPERTY_HEADNAV_USE, 1199 nav.getResourceName(), 1200 getHeadNavItemDefaultStringValue()); 1201 } else if (LOG.isWarnEnabled()) { 1202 LOG.warn(Messages.get().getBundle().key( 1203 Messages.LOG_NAVIGATION_CONFIG_ERR_2, 1204 nav.getResourceName(), 1205 getRequestContext().getUri())); 1206 } 1207 if (Boolean.valueOf(showItemProperty).booleanValue()) { 1208 return true; 1209 } 1210 } 1211 return false; 1212 } 1213 1214 1223 private boolean isDefaultFile(String navPath, String fileUri) { 1224 1225 String folderName = CmsResource.getFolderPath(fileUri); 1226 if (navPath.equals(folderName)) { 1227 String fileName = CmsResource.getName(fileUri); 1228 try { 1229 String defaultFileName = getCmsObject().readPropertyObject( 1231 folderName, 1232 CmsPropertyDefinition.PROPERTY_DEFAULT_FILE, 1233 false).getValue(); 1234 if (defaultFileName != null && fileName.equals(defaultFileName)) { 1235 return true; 1237 } 1238 } catch (CmsException e) { 1239 } 1241 List defaultFileNames = OpenCms.getDefaultFiles(); 1242 for (int i = 0; i < defaultFileNames.size(); i++) { 1243 String currFileName = (String )defaultFileNames.get(i); 1244 if (fileName.equals(currFileName)) { 1245 return true; 1246 } 1247 } 1248 } 1249 1250 return false; 1252 } 1253 1254 1259 private boolean isHeadNavManual() { 1260 1261 return m_headNavManual; 1262 } 1263} | Popular Tags |