1 28 29 package com.opencms.defaults; 30 31 import org.opencms.file.CmsObject; 32 import org.opencms.file.CmsPropertyDefinition; 33 import org.opencms.file.CmsResource; 34 import org.opencms.file.CmsResourceFilter; 35 import org.opencms.main.CmsException; 36 import org.opencms.main.OpenCms; 37 import org.opencms.workplace.CmsWorkplace; 38 39 import com.opencms.legacy.CmsLegacyException; 40 import com.opencms.legacy.CmsXmlTemplateLoader; 41 import com.opencms.template.A_CmsXmlContent; 42 import com.opencms.template.CmsCacheDirectives; 43 import com.opencms.template.CmsXmlTemplateFile; 44 45 import java.util.ArrayList ; 46 import java.util.Hashtable ; 47 import java.util.Iterator ; 48 import java.util.List ; 49 import java.util.StringTokenizer ; 50 import java.util.Vector ; 51 52 62 public class CmsXmlNav extends A_CmsNavBase { 63 64 74 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 75 return true; 76 } 77 78 79 80 90 protected String buildNav(CmsObject cms, A_CmsXmlContent doc, Object userObject, List resources) 91 throws CmsException { 92 93 String requestedUri = cms.getRequestContext().getUri(); 95 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 98 StringBuffer result = new StringBuffer (); 99 int size = resources.size(); 100 101 String navLink[] = new String [size]; 102 String navText[] = new String [size]; 103 float navPos[] = new float[size]; 104 int max=extractNav(cms, resources, navLink, navText, navPos); 106 for (int i=0; i<max; i++) { 110 template.setData("navtext", navText[i]); 111 template.setData("navcount", new Integer (i+1).toString()); 112 template.setData("navlevel", new Integer (extractLevel(cms, navLink[i])).toString()); 113 String link=""; 115 if (navLink[i].endsWith("/")) { 116 String navIndex=cms.readProperty(navLink[i], C_PROPERTY_NAVINDEX); 118 if (navIndex==null) { 120 navIndex=C_NAVINDEX; 121 } 122 try { 123 cms.readFile(navLink[i] + navIndex); 124 link=navLink[i] + navIndex; 125 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i] + navIndex)); 126 } catch (CmsException e) { 127 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 128 } 129 } else { 130 try { 131 cms.readFile(navLink[i]); 132 link=navLink[i]; 133 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i])); 134 } catch (CmsException e) { 135 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 136 } 137 } 138 if (link.equals(requestedUri)) { 141 result.append(template.getProcessedDataValue("navcurrent", this, userObject)); 142 } else { 143 result.append(template.getProcessedDataValue("naventry", this, userObject)); 144 } 145 } 146 return result.toString(); 147 } 148 149 164 protected String buildNavFold(CmsObject cms, CmsXmlTemplateFile template, Object userObject, List resources, String requestedUri, String currentFolder, String servletPath, int level, int[] count) 165 throws CmsException { 166 167 StringBuffer result = new StringBuffer (); 168 int size = resources.size(); 170 String navLink[] = new String [size]; 171 String navText[] = new String [size]; 172 float navPos[] = new float[size]; 173 int max=extractNav(cms, resources, navLink, navText, navPos); 175 if (max>0) { 176 result.append(template.getProcessedDataValue("navstart", this, userObject)); 177 for (int i=0; i<max; i++) { 178 count[0]++; 179 template.setData("navtext", navText[i]); 180 template.setData("navcount", new Integer (count[0]).toString()); 181 int extractedLevel=extractLevel(cms, navLink[i]); 184 template.setData("navlevel", new Integer (extractedLevel).toString()); 185 193 String link=""; 194 if (navLink[i].endsWith("/")) { 196 String navIndex=cms.readProperty(navLink[i], C_PROPERTY_NAVINDEX); 198 if (navIndex==null) { 200 navIndex=C_NAVINDEX; 201 } 202 try { 204 cms.readFile(navLink[i] + navIndex); 205 link=navLink[i] + navIndex; 206 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i] + navIndex)); 207 } catch (CmsException e) { 208 link=requestedUri; 209 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 210 } 211 } else { 212 try { 214 cms.readFile(navLink[i]); 215 link=navLink[i]; 216 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i])); 217 } catch (CmsException e) { 218 link=requestedUri; 219 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 220 } 221 } 222 if (link.equals(requestedUri)) { 224 result.append(template.getProcessedDataValue("navcurrent", this, userObject)); 225 } else { 226 result.append(template.getProcessedDataValue("naventry", this, userObject)); 227 } 228 if (requestedUri.indexOf(navLink[i])!=-1) { 230 List all=cms.getSubFolders(navLink[i]); 231 List files=cms.getFilesInFolder(navLink[i]); 232 if (navLink[i].endsWith("/")) { 234 Vector vfsDeps = new Vector (); 235 vfsDeps.add(cms.readFolder(navLink[i])); 236 registerVariantDeps(cms, template.getAbsoluteFilename(), null, null, 237 (Hashtable )userObject, vfsDeps, null, null); 238 } 239 ((ArrayList )all).ensureCapacity(all.size() + files.size()); 240 Iterator e = files.iterator(); 241 while (e.hasNext()) { 242 all.add(e.next()); 243 } 244 result.append(buildNavFold(cms, template, userObject, all, requestedUri, currentFolder, servletPath, level, count)); 245 } 246 } 247 result.append(template.getProcessedDataValue("navend", this, userObject)); 248 } 249 250 return result.toString(); 251 252 } 253 254 271 protected String buildNavTree(CmsObject cms, CmsXmlTemplateFile template, Object userObject, List resources, String requestedUri, String currentFolder, String servletPath, int level, int depth, boolean depthIsNull, int[] count) 272 throws CmsException { 273 274 StringBuffer result = new StringBuffer (); 275 int size = resources.size(); 278 String navLink[] = new String [size]; 279 String navText[] = new String [size]; 280 float navPos[] = new float[size]; 281 int max=extractNav(cms, resources, navLink, navText, navPos); 285 if (max>0) { 287 result.append(template.getProcessedDataValue("navstart", this, userObject)); 288 for (int i=0; i<max; i++) { 289 count[0]++; 291 template.setData("navtext", navText[i]); 292 template.setData("navcount", new Integer (count[0]).toString()); 293 int extractedLevel=extractLevel(cms, navLink[i]); 296 template.setData("navlevel", new Integer (extractedLevel).toString()); 297 305 String link=""; 306 if (navLink[i].endsWith("/")) { 308 String navIndex=cms.readProperty(navLink[i], C_PROPERTY_NAVINDEX); 310 if (navIndex==null || (navIndex!=null && navIndex.equals(""))) { 312 navIndex=C_NAVINDEX; 313 } 314 try { 316 cms.readFile(navLink[i] + navIndex); 317 link=navLink[i] + navIndex; 318 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i] + navIndex)); 319 } catch (CmsException e) { 320 link=requestedUri; 321 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 322 } 323 } else { 324 try { 326 cms.readFile(navLink[i]); 327 link=navLink[i]; 328 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, navLink[i])); 329 } catch (CmsException e) { 330 link=requestedUri; 331 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, requestedUri)); 332 } 333 } 334 if (link.equals(requestedUri)) { 336 result.append(template.getProcessedDataValue("navcurrent", this, userObject)); 337 } else { 338 result.append(template.getProcessedDataValue("naventry", this, userObject)); 339 } 340 depth--; 346 if (depthIsNull || depth>=0) { 347 if (navLink[i].endsWith("/")) { 348 List all=cms.getSubFolders(navLink[i]); 349 List files=cms.getFilesInFolder(navLink[i]); 350 Vector vfsDeps = new Vector (); 352 vfsDeps.add(cms.readFolder(navLink[i])); 353 registerVariantDeps(cms, template.getAbsoluteFilename(), null, null, 354 (Hashtable )userObject, vfsDeps, null, null); 355 ((ArrayList )all).ensureCapacity(all.size() + files.size()); 356 Iterator e = files.iterator(); 357 while (e.hasNext()) { 358 all.add(e.next()); 359 } 360 result.append(buildNavTree(cms, template, userObject, all, requestedUri, currentFolder, servletPath, level, depth, depthIsNull, count)); 361 } 362 } 363 } 364 result.append(template.getProcessedDataValue("navend", this, userObject)); 365 } 366 return result.toString(); 367 } 368 377 protected String extractFolder(CmsObject cms, int level, String exact) 378 throws CmsException { 379 380 String navIndex=C_NAVINDEX; 382 try { 383 navIndex=cms.readProperty(CmsResource.getFolderPath(cms.getRequestContext().getUri()), C_PROPERTY_NAVINDEX); 384 navIndex=((navIndex==null || (navIndex!=null && navIndex.equals("")))?C_NAVINDEX:navIndex); 385 } catch (Exception err) { 386 navIndex=C_NAVINDEX; 387 } 388 String uri=CmsResource.getFolderPath(cms.getRequestContext().getUri())+navIndex; 389 String requestedUri=cms.getRequestContext().getUri(); 390 String currentFolder="/"; 392 StringTokenizer st = new StringTokenizer (CmsResource.getFolderPath(cms.getRequestContext().getUri()), "/"); 393 int count=st.countTokens()+1; 394 if (level<0) { 397 level=(-1)*level; 398 level=count-level; 399 } 400 if (exact.equals("true") && (level<=0 || level>count || (level==count && requestedUri.equals(uri)))) { 402 return ""; 403 } 404 while (st.hasMoreTokens()) { 410 if (level>1) { 411 currentFolder=currentFolder+st.nextToken()+"/"; 412 level--; 413 } else { 414 break; 415 } 416 } 417 return currentFolder; 418 } 419 427 protected int extractLevel(CmsObject cms, String folder) 428 throws CmsException { 429 StringTokenizer st = new StringTokenizer (folder, "/"); 430 int count=st.countTokens(); 431 count=(count==0?1:count); 432 return count; 433 } 434 445 protected int extractNav(CmsObject cms, List resources, String [] navLink, String [] navText, float[] navPos) 446 throws CmsException { 447 448 String requestedUri = cms.getRequestContext().getUri(); 449 450 int size = resources.size(); 451 int max = 0; 452 453 for (int i=0; i<size; i++) { 457 CmsResource currentResource = (CmsResource)resources.get(i); 458 String path = cms.getSitePath(currentResource); 459 String pos = cms.readProperty(path, CmsPropertyDefinition.PROPERTY_NAVPOS); 460 String text = cms.readProperty(path, CmsPropertyDefinition.PROPERTY_NAVTEXT); 461 if (currentResource.getState() != CmsResource.STATE_DELETED) { 463 if (pos != null && text != null && (!"".equals(pos)) && (!"".equals(text)) 465 && ((!currentResource.getName().startsWith(CmsWorkplace.TEMP_FILE_PREFIX)) || path.equals(requestedUri))) { 466 navLink[max] = path; 467 navText[max] = text; 468 navPos[max] = new Float (pos).floatValue(); 469 max++; 470 } 471 } 472 } 473 474 sortNav(max, navLink, navText, navPos); 476 477 return max; 478 } 479 489 public Object getFolderCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 490 throws CmsException { 491 492 String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri()); 493 currentFolder=CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + currentFolder; 494 return currentFolder.getBytes(); 495 } 496 506 public Object getFolderParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 507 throws CmsException { 508 509 int level=1; 510 String exact="false"; 514 if (!tagcontent.equals("")) { 517 try { 518 if (tagcontent.indexOf(",")!=-1) { 519 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 520 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 521 } else { 522 level=Integer.parseInt(tagcontent); 523 } 524 } catch (NumberFormatException e) { 525 level=1; 526 exact=tagcontent.toLowerCase(); 527 if (!exact.equals("true")) { 528 exact="false"; 529 } 530 } 531 } 532 String currentFolder=extractFolder(cms, ((-1)*level), exact); 533 if (currentFolder.equals("")) 534 return "".getBytes(); 535 String parentFolder=CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + currentFolder; 536 return parentFolder.getBytes(); 537 } 538 548 public Object getFolderRoot(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 549 throws CmsException { 550 551 int level=1; 552 String exact="false"; 553 if (!tagcontent.equals("")) { 556 try { 557 if (tagcontent.indexOf(",")!=-1) { 558 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 559 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 560 } else { 561 level=Integer.parseInt(tagcontent); 562 } 563 } catch (NumberFormatException e) { 564 level=1; 565 exact=tagcontent.toLowerCase(); 566 if (!exact.equals("true")) { 567 exact="false"; 568 } 569 } 570 } 571 String currentFolder=extractFolder(cms, level, exact); 572 if (currentFolder.equals("")) 573 return "".getBytes(); 574 String rootFolder=CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + currentFolder; 575 return rootFolder.getBytes(); 576 } 577 587 public Object getNavCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 588 throws CmsException { 589 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 591 if (!template.hasData("naventry")) { 593 return "".getBytes(); 594 } 595 String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri()); 596 int level=extractLevel(cms, currentFolder)+1; 597 String exact="false"; 598 if (!tagcontent.equals("")) { 601 try { 602 if (tagcontent.indexOf(",")!=-1) { 603 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 604 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 605 } else { 606 level=Integer.parseInt(tagcontent); 607 } 608 } catch (NumberFormatException e) { 609 level=extractLevel(cms, currentFolder)+1; 610 exact=tagcontent.toLowerCase(); 611 if (!exact.equals("true")) { 612 exact="false"; 613 } 614 } 615 } 616 currentFolder="/"; 618 StringTokenizer st = new StringTokenizer (CmsResource.getFolderPath(cms.getRequestContext().getUri()), "/"); 619 int count=st.countTokens()+1; 620 if (exact.equals("true") && level!=count) { 621 return "".getBytes(); 622 } 623 while (st.hasMoreTokens()) { 624 if (level>1) { 625 currentFolder=currentFolder+st.nextToken()+"/"; 626 level--; 627 } else { 628 break; 629 } 630 } 631 Vector vfsDeps = new Vector (); 633 vfsDeps.add(cms.readFolder(currentFolder)); 634 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 635 (Hashtable )userObject, vfsDeps, null, null); 636 List resources=cms.getSubFolders(currentFolder); 638 List allFile=cms.getFilesInFolder(currentFolder); 639 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 640 Iterator e = allFile.iterator(); 641 while (e.hasNext()) { 642 resources.add(e.next()); 643 } 644 if (!template.hasData("navcurrent")) { 646 template.setData("navcurrent", template.getData("naventry")); 647 } 648 return buildNav(cms, doc, userObject, resources).getBytes(); 649 } 650 661 public Object getNavFold(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 662 throws CmsException { 663 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 665 if (!template.hasData("naventry")) { 667 return "".getBytes(); 668 } 669 int level=1; 670 int[] count={0}; 671 String exact="false"; 672 if (!tagcontent.equals("")) { 676 try { 677 if (tagcontent.indexOf(",")!=-1) { 678 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 679 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 680 } else { 681 level=Integer.parseInt(tagcontent); 682 } 683 } catch (NumberFormatException e) { 684 level=1; 685 exact=tagcontent.toLowerCase(); 686 if (!exact.equals("true")) { 687 exact="false"; 688 } 689 } 690 } 691 String folder=extractFolder(cms, level, exact); 693 if (folder.equals("")) 694 return "".getBytes(); 695 String requestedUri = cms.getRequestContext().getUri(); 698 String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri()); 699 String servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl(); 700 Vector vfsDeps = new Vector (); 702 vfsDeps.add(cms.readFolder(folder)); 703 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 704 (Hashtable )userObject, vfsDeps, null, null); 705 List resources=cms.getSubFolders(folder); 707 List allFile=cms.getFilesInFolder(folder); 708 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 709 Iterator e = allFile.iterator(); 710 while (e.hasNext()) { 711 resources.add(e.next()); 712 } 713 714 String result=""; 715 if (!template.hasData("navcurrent")) { 717 template.setData("navcurrent", template.getData("naventry")); 718 } 719 if (!template.hasData("navstart")) { 720 template.setData("navstart", ""); 721 } 722 if (!template.hasData("navend")) { 723 template.setData("navend", ""); 724 } 725 result=buildNavFold(cms, template, userObject, resources, requestedUri, currentFolder, servletPath, level, count); 726 727 return result.getBytes(); 728 } 729 739 public Object getNavParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 740 throws CmsException { 741 742 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 744 if (!template.hasData("naventry")) { 746 return "".getBytes(); 747 } 748 int level=1; 749 String exact=""; 750 if (!tagcontent.equals("")) { 754 try { 755 if (tagcontent.indexOf(",")!=-1) { 756 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 757 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 758 } else { 759 level=Integer.parseInt(tagcontent); 760 } 761 } catch (NumberFormatException e) { 762 level=1; 763 exact=tagcontent.toLowerCase(); 764 if (!exact.equals("true")) { 765 exact="false"; 766 } 767 } 768 } 769 String currentFolder=extractFolder(cms, ((-1)*level), exact); 774 if (currentFolder.equals("")) 775 return "".getBytes(); 776 Vector vfsDeps = new Vector (); 778 vfsDeps.add(cms.readFolder(currentFolder)); 779 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 780 (Hashtable )userObject, vfsDeps, null, null); 781 List resources=cms.getSubFolders(currentFolder); 782 List allFile=cms.getFilesInFolder(currentFolder); 783 784 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 785 Iterator e = allFile.iterator(); 786 while (e.hasNext()) { 787 resources.add(e.next()); 788 } 789 if (!template.hasData("navcurrent")) { 791 template.setData("navcurrent", template.getData("naventry")); 792 } 793 return buildNav(cms, doc, userObject, resources).getBytes(); 794 } 795 796 806 public Object getNavRoot(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 807 throws CmsException { 808 809 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 811 if (!template.hasData("naventry")) { 813 return "".getBytes(); 814 } 815 int level=1; 816 String exact="false"; 817 if (!tagcontent.equals("")) { 820 try { 821 if (tagcontent.indexOf(",")!=-1) { 822 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 823 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 824 } else { 825 level=Integer.parseInt(tagcontent); 826 } 827 } catch (NumberFormatException e) { 828 level=1; 829 exact=tagcontent.toLowerCase(); 830 if (!exact.equals("true")) { 831 exact="false"; 832 } 833 } 834 } 835 String currentFolder=extractFolder(cms, level, exact); 836 if (currentFolder.equals("")) 837 return "".getBytes(); 838 Vector vfsDeps = new Vector (); 840 vfsDeps.add(cms.readFolder(currentFolder)); 841 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 842 (Hashtable )userObject, vfsDeps, null, null); 843 List resources=cms.getSubFolders(currentFolder); 845 List allFile=cms.getFilesInFolder(currentFolder); 846 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 847 Iterator e = allFile.iterator(); 848 while (e.hasNext()) { 849 resources.add(e.next()); 850 } 851 if (!template.hasData("navcurrent")) { 853 template.setData("navcurrent", template.getData("naventry")); 854 } 855 return buildNav(cms, doc, userObject, resources).getBytes(); 856 } 857 858 880 public Object getNavPath(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) throws CmsException { 881 String navPath = ""; 883 884 CmsXmlTemplateFile template = (CmsXmlTemplateFile)doc; 886 887 boolean startAbsolute = true; 889 890 int requestedNavLevels = 1; 892 893 boolean includeCurrentFolder = true; 895 896 int startLevel = 0, endLevel = 0; 898 899 900 if (!template.hasData("naventry")) { 902 return "".getBytes(); 903 } 904 905 if (!template.hasData("navcurrent")) { 907 template.setData("navcurrent", template.getData("naventry")); 908 } 909 910 if (!"".equals(tagcontent)) { 912 StringTokenizer tagContentTokenizer = new StringTokenizer (tagcontent, ","); 913 914 if (tagContentTokenizer.countTokens()>=3) { 915 if (tagContentTokenizer.hasMoreTokens()) { 917 startAbsolute = tagContentTokenizer.nextToken().trim().equalsIgnoreCase("absolute"); 918 } 919 920 if (tagContentTokenizer.hasMoreTokens()) { 922 includeCurrentFolder = tagContentTokenizer.nextToken().trim().equalsIgnoreCase("this"); 923 } 924 925 if (tagContentTokenizer.hasMoreTokens()) { 927 try { 928 requestedNavLevels = Integer.parseInt(tagContentTokenizer.nextToken()); 929 } catch (Exception e) { 930 requestedNavLevels = 1; 931 } 932 } 933 } 934 } 935 936 String requestedFolder = CmsResource.getFolderPath(cms.getRequestContext().getUri()); 938 939 endLevel = extractLevel(cms, requestedFolder); 941 if (includeCurrentFolder) { 942 endLevel++; 943 } 944 945 if (startAbsolute) { 947 startLevel = 1; 948 } else { 949 startLevel = endLevel - requestedNavLevels + 1; 950 } 951 952 for (int i=startLevel; i<=endLevel; i++) { 953 String currentFolder = extractFolder(cms, i, "false"); 954 955 Vector vfsDeps = new Vector (); 957 vfsDeps.add(cms.readFolder(currentFolder)); 958 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, (Hashtable )userObject, vfsDeps, null, null); 959 960 Vector resources = new Vector (); 962 resources.addElement(cms.readFolder(currentFolder, CmsResourceFilter.ALL)); 963 964 String currentNav = buildNav(cms, doc, userObject, resources); 966 navPath += currentNav; 967 } 968 969 return navPath.getBytes(); 970 } 971 972 984 public Object getNavMap(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) throws CmsException { 985 String navMap = ""; 987 988 int startLevel = 1; 990 991 int endLevel = 2; 993 994 CmsXmlTemplateFile template = (CmsXmlTemplateFile)doc; 996 997 if (!template.hasData("naventry")) { 999 return "".getBytes(); 1000 } 1001 1002 if (!template.hasData("navcurrent")) { 1004 template.setData("navcurrent", template.getData("naventry")); 1005 } 1006 1007 1008 if (!"".equals(tagcontent)) { 1010 int commaIndex = tagcontent.indexOf(","); 1011 1012 if (commaIndex!=-1 && tagcontent.length()>=3) { 1013 try { 1014 startLevel = Integer.parseInt(tagcontent.substring(0, commaIndex)); 1015 endLevel = Integer.parseInt(tagcontent.substring(commaIndex+1)); 1016 } catch (Exception e) { 1017 startLevel = 1; 1019 endLevel = 2; 1020 } 1021 } 1022 } 1023 1024 int recursion = endLevel - startLevel; 1026 1027 String currentFolder = extractFolder(cms, startLevel, "false"); 1029 1030 navMap = this.buildMap(cms, doc, userObject, currentFolder, "naventry", 0, recursion).toString(); 1032 1033 return navMap.getBytes(); 1034 } 1035 1036 1051 protected StringBuffer buildMap(CmsObject cms, A_CmsXmlContent doc, Object userObject, String currentFolder, String datablock, int currentResursionLevel, int maxRecursionLevel) throws CmsException { 1052 StringBuffer result = new StringBuffer (); 1053 CmsXmlTemplateFile template = (CmsXmlTemplateFile)doc; 1054 boolean isFolder = false; 1055 1056 Vector vfsDeps = new Vector (); 1058 vfsDeps.add(cms.readFolder(currentFolder)); 1059 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, (Hashtable )userObject, vfsDeps, null, null); 1060 1061 List resources = cms.getSubFolders(currentFolder); 1063 List files = cms.getFilesInFolder(currentFolder); 1064 ((ArrayList )resources).ensureCapacity(resources.size() + files.size()); 1065 1066 Iterator allFiles = files.iterator(); 1067 while (allFiles.hasNext()) { 1068 resources.add(allFiles.next()); 1069 } 1070 1071 int size = resources.size(); 1073 String navLink[] = new String [size]; 1074 String navText[] = new String [size]; 1075 float navPos[] = new float[size]; 1076 int navResourceCount = extractNav(cms, resources, navLink, navText, navPos); 1077 1078 for (int i=0; i<navResourceCount; i++) { 1079 isFolder = false; 1080 String currentNavLink = null; 1081 1082 template.setData("navtext", navText[i]); 1084 template.setData("navcount", new Integer (i+1).toString()); 1085 template.setData("navlevel", new Integer (extractLevel(cms, navLink[i])).toString()); 1086 1087 if (navLink[i].endsWith("/")) { 1088 isFolder = true; 1090 1091 String navIndex = cms.readProperty(navLink[i], C_PROPERTY_NAVINDEX); 1092 if (navIndex==null) { 1093 navIndex = C_NAVINDEX; 1094 } 1095 1096 currentNavLink = navLink[i] + navIndex; 1097 } else { 1098 currentNavLink = navLink[i]; 1100 } 1101 1102 try { 1104 cms.readFile(currentNavLink); 1105 template.setData("navlink", OpenCms.getLinkManager().substituteLink(cms, currentNavLink)); 1106 } catch (CmsException e) { 1107 template.setData("navlink", "#"); 1108 } 1109 1110 result.append(template.getProcessedDataValue(datablock, this, userObject)); 1112 1113 if (isFolder && (currentResursionLevel + 1 <= maxRecursionLevel)) { 1115 String subMapNavEntryDatablock = "naventry"; 1116 for (int j = 0; j <= currentResursionLevel; j++) { 1117 subMapNavEntryDatablock += "sub"; 1118 } 1119 1120 if (!template.hasData(subMapNavEntryDatablock)) { 1122 subMapNavEntryDatablock = "naventry"; 1123 } 1124 1125 StringBuffer subMap = this.buildMap(cms, doc, userObject, navLink[i], subMapNavEntryDatablock, currentResursionLevel+1, maxRecursionLevel); 1126 result.append(subMap.toString()); 1127 } 1128 } 1129 1130 return result; 1131 } 1132 1133 1143 public Object getNavTree(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 1144 throws CmsException { 1145 1146 CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc; 1148 if (!template.hasData("naventry")) { 1150 return "".getBytes(); 1151 } 1152 int level=1; 1153 int depth=0; 1154 int[] count={0}; 1155 String exact="false"; 1156 boolean depthIsNull=true; 1158 if (!tagcontent.equals("")) { 1162 StringTokenizer st = new StringTokenizer (tagcontent, ","); 1163 String token1="", token2="", token3=""; 1164 if (st.hasMoreTokens()) 1165 token1=st.nextToken(); 1166 if (st.hasMoreTokens()) 1167 token2=st.nextToken(); 1168 if (st.hasMoreTokens()) 1169 token3=st.nextToken(); 1170 if (!token3.equals("")) 1172 exact=token3.toLowerCase(); 1173 if (!token2.equals("")) { 1174 try { 1175 depth=Integer.parseInt(token2); 1176 } catch (NumberFormatException e) { 1177 depth=0; 1178 exact=token2.toLowerCase(); 1179 if (!exact.equals("true")) { 1180 exact="false"; 1181 } 1182 } 1183 } 1184 if (!token1.equals("")) { 1185 try { 1186 level=Integer.parseInt(token1); 1187 } catch (NumberFormatException e) { 1188 level=1; 1189 exact=token1.toLowerCase(); 1190 if (!exact.equals("true")) { 1191 exact="false"; 1192 } 1193 } 1194 } 1195 } 1196 String folder=extractFolder(cms, level, exact); 1199 if (folder.equals("")) 1200 return "".getBytes(); 1201 if (depth>0) { 1202 depthIsNull=false; 1203 } 1204 Vector vfsDeps = new Vector (); 1206 vfsDeps.add(cms.readFolder(folder)); 1207 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 1208 (Hashtable )userObject, vfsDeps, null, null); 1209 List resources=cms.getSubFolders(folder); 1211 List allFile=cms.getFilesInFolder(folder); 1213 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 1215 Iterator e = allFile.iterator(); 1216 while (e.hasNext()) { 1217 resources.add(e.next()); 1218 } 1219 String requestedUri = cms.getRequestContext().getUri(); 1221 String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri()); 1222 String servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl(); 1223 1224 String result=""; 1225 if (!template.hasData("navcurrent")) { 1229 template.setData("navcurrent", template.getData("naventry")); 1230 } 1231 if (!template.hasData("navstart")) { 1232 template.setData("navstart", ""); 1233 } 1234 if (!template.hasData("navend")) { 1235 template.setData("navend", ""); 1236 } 1237 result=buildNavTree(cms, template, userObject, resources, requestedUri, currentFolder, servletPath, level, depth, depthIsNull, count); 1238 return result.getBytes(); 1239 } 1240 1241 1251 public Object getPropertyCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 1252 throws CmsException { 1253 String property=""; 1254 if (!tagcontent.equals("")) { 1256 String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri()); 1257 property=cms.readProperty(currentFolder, tagcontent); 1258 property=(property!=null?property:""); 1259 Vector vfsDeps = new Vector (); 1261 vfsDeps.add(cms.readFolder(currentFolder)); 1262 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 1263 (Hashtable )userObject, vfsDeps, null, null); 1264 } 1265 return (property.getBytes()); 1266 } 1267 1268 1269 1279 public Object getPropertyParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 1280 throws CmsException { 1281 int level=1; 1282 String property=""; 1283 String exact="false"; 1286 if (!tagcontent.equals("")) { 1289 try { 1290 if (tagcontent.indexOf(",")!=-1) { 1291 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 1292 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 1293 } else { 1294 level=Integer.parseInt(tagcontent); 1295 } 1296 } catch (NumberFormatException e) { 1297 level=1; 1298 exact=tagcontent.toLowerCase(); 1299 if (!exact.equals("true")) { 1300 exact="false"; 1301 } 1302 } 1303 String currentFolder=extractFolder(cms, ((-1)*level), exact); 1308 if (currentFolder.equals("")) 1309 return "".getBytes(); 1310 property=cms.readProperty(currentFolder, tagcontent.substring(tagcontent.indexOf(",")+1)); 1311 property=(property!=null?property:""); 1312 Vector vfsDeps = new Vector (); 1314 vfsDeps.add(cms.readFolder(currentFolder)); 1315 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 1316 (Hashtable )userObject, vfsDeps, null, null); 1317 } 1318 return (property.getBytes()); 1319 } 1320 1321 1331 public Object getPropertyRoot(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 1332 throws CmsException { 1333 int level=1; 1334 String property=""; 1335 String exact="false"; 1336 if (!tagcontent.equals("")) { 1339 try { 1340 if (tagcontent.indexOf(",")!=-1) { 1341 level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(","))); 1342 exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase(); 1343 } else { 1344 level=Integer.parseInt(tagcontent); 1345 } 1346 } catch (NumberFormatException e) { 1347 level=1; 1348 exact=tagcontent.toLowerCase(); 1349 if (!exact.equals("true")) { 1350 exact="false"; 1351 } 1352 } 1353 String currentFolder=extractFolder(cms, level, exact); 1354 if (currentFolder.equals("")) 1355 return "".getBytes(); 1356 property=cms.readProperty(currentFolder, tagcontent.substring(tagcontent.indexOf(",")+1)); 1357 property=(property!=null?property:""); 1358 Vector vfsDeps = new Vector (); 1360 vfsDeps.add(cms.readFolder(currentFolder)); 1361 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 1362 (Hashtable )userObject, vfsDeps, null, null); 1363 } 1364 return (property.getBytes()); 1365 } 1366 1367 1368 1378 public Object getPropertyUri(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 1379 throws CmsException { 1380 String property=""; 1381 String requestedUri = cms.getRequestContext().getUri(); 1382 property=cms.readProperty(requestedUri, tagcontent); 1383 property=(property!=null?property:""); 1384 Vector vfsDeps = new Vector (); 1386 vfsDeps.add(cms.readResource(requestedUri)); 1387 registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null, 1388 (Hashtable )userObject, vfsDeps, null, null); 1389 return (property.getBytes()); 1390 } 1391 1392 1402 public CmsCacheDirectives getCacheDirectives(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 1403 1404 CmsCacheDirectives result = new CmsCacheDirectives(true); 1406 result.setCacheUri(true); 1407 result.noAutoRenewAfterPublish(); 1409 return result; 1410 } 1411 1412 1423 public Object getNavPop(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) throws CmsException { 1424 String currentFolder = ""; 1425 StringBuffer sRet = new StringBuffer (); 1426 int deep = 3; 1429 int level = -1; 1430 1431 if (!tagcontent.equals("")) { 1432 try { 1433 StringTokenizer st = new StringTokenizer (tagcontent.toString(), ","); 1434 1435 if (st.hasMoreTokens()) { 1436 level = Integer.parseInt(st.nextToken().trim()); 1437 1438 } 1439 if (st.hasMoreTokens()) { 1440 deep = Integer.parseInt(st.nextToken().trim()); 1441 } 1442 } catch (Exception e) { 1443 throw new CmsLegacyException(e.getMessage()); 1444 } 1445 } 1446 1447 switch (level) { 1448 case -1 : 1449 currentFolder = CmsResource.getFolderPath(cms.getRequestContext().getUri()); 1450 break; 1451 1452 case 0 : 1453 currentFolder = cms.getSitePath(cms.readFolder("/")); 1454 break; 1455 1456 default : 1457 if (extractFolder(cms, 1, "").equals("/")) { 1458 currentFolder = extractFolder(cms, level + 1, ""); 1459 } else { 1460 currentFolder = extractFolder(cms, level, ""); 1461 } 1462 break; 1463 } 1464 1465 List resources = cms.getSubFolders(currentFolder); 1466 List allFile = cms.getFilesInFolder(currentFolder); 1467 ((ArrayList )resources).ensureCapacity(resources.size() + allFile.size()); 1468 Iterator e = allFile.iterator(); 1469 1470 List resources2 = null; 1471 List allFile2 = null; 1472 Iterator e2 = null; 1473 Object oBuffer2 = null; 1474 1475 List resources3 = null; 1476 List allFile3 = null; 1477 Iterator e3 = null; 1478 Object oBuffer1 = null; 1479 Object oBuffer3 = null; 1480 1481 Vector resources4 = new Vector (); 1482 ArrayList alLink = new ArrayList (); 1483 ArrayList alPos = new ArrayList (); 1484 ArrayList alLink2 = new ArrayList (); 1485 ArrayList alPos2 = new ArrayList (); 1486 1487 while (e.hasNext()) { 1488 oBuffer1 = e.next(); 1489 resources.add(oBuffer1); 1490 } 1491 1492 sRet = buildNavPop(cms, doc, userObject, resources, null, 1, 0, 0, deep); 1493 1494 if (deep > 1) { 1495 int size = resources.size(); 1496 String navLink[] = new String [size]; 1497 String navText[] = new String [size]; 1498 float navPos[] = new float[size]; 1499 1500 int max = extractNav(cms, resources, navLink, navText, navPos); 1501 1502 for (int iCount = 0; iCount < max; iCount++) { 1503 if (navLink[iCount].endsWith("/") || navLink[iCount].endsWith("\\")) { 1504 alLink.add(navLink[iCount]); 1505 alPos.add(new Integer (iCount)); 1506 resources2 = cms.getSubFolders(navLink[iCount]); 1507 allFile2 = cms.getFilesInFolder(navLink[iCount]); 1508 ((ArrayList )resources2).ensureCapacity(resources2.size() + allFile2.size()); 1509 e2 = allFile2.iterator(); 1510 1511 while (e2.hasNext()) { 1512 oBuffer2 = e2.next(); 1513 resources2.add(oBuffer2); 1514 } 1515 1516 for (int iResCounter = 0; iResCounter < resources2.size(); iResCounter++) { 1517 resources4.addElement(resources2.get(iResCounter)); 1518 } 1519 1520 sRet = buildNavPop(cms, doc, userObject, resources2, sRet, 2, iCount, 0, deep); 1521 1522 int size2 = resources2.size(); 1524 String navLink2[] = new String [size2]; 1525 String navText2[] = new String [size2]; 1526 float navPos2[] = new float[size2]; 1527 1528 int max3 = extractNav(cms, resources2, navLink2, navText2, navPos2); 1529 1530 for (int iCount3 = 0; iCount3 < max3; iCount3++) { 1531 alLink2.add(navLink2[iCount3]); 1532 alPos2.add(new Integer (iCount3)); 1533 } 1534 1535 } 1536 } 1537 } 1538 1539 if (deep > 2) { 1540 int size2 = resources4.size(); 1541 String [] navLink = new String [size2]; 1542 String [] navText = new String [size2]; 1543 float[] navPos = new float[size2]; 1544 int iCounter3 = 0; 1545 1546 int max2 = extractNav(cms, resources4, navLink, navText, navPos); 1547 1548 for (int iCount = 0; iCount < max2; iCount++) { 1549 if (navLink[iCount].endsWith("/") || navLink[iCount].endsWith("\\")) { 1550 resources3 = cms.getSubFolders(navLink[iCount]); 1551 allFile3 = cms.getFilesInFolder(navLink[iCount]); 1552 ((ArrayList )resources3).ensureCapacity(resources3.size() + allFile3.size()); 1553 e3 = allFile3.iterator(); 1554 1555 while (e3.hasNext()) { 1556 oBuffer3 = e3.next(); 1557 resources3.add(oBuffer3); 1558 } 1559 1560 int iArrayPos = -1; 1561 int iArrayPos2 = -1; 1562 String sLinkDummy = ""; 1563 1564 for (iCounter3 = 0; iCounter3 < alLink.size(); iCounter3++) { 1565 sLinkDummy = navLink[iCount].substring(0, navLink[iCount].lastIndexOf("/")); 1566 sLinkDummy = sLinkDummy.substring(0, sLinkDummy.lastIndexOf("/") + 1); 1567 if (((String ) alLink.get(iCounter3)).equals(sLinkDummy)) { 1568 iArrayPos = ((Integer ) alPos.get(iCounter3)).intValue(); 1569 } 1570 } 1571 1572 for (iCounter3 = 0; iCounter3 < alLink2.size(); iCounter3++) { 1573 sLinkDummy = navLink[iCount].substring(0, navLink[iCount].lastIndexOf("/") + 1); 1574 if (((String ) alLink2.get(iCounter3)).equals(sLinkDummy)) { 1575 iArrayPos2 = ((Integer ) alPos2.get(iCounter3)).intValue(); 1576 } 1577 } 1578 1579 if (navText.length > 0) { 1580 sRet = buildNavPop(cms, doc, userObject, resources3, sRet, 3, iArrayPos, iArrayPos2, deep); 1581 } 1582 1583 } 1584 } 1585 1586 } 1587 1588 return sRet.toString().getBytes(); 1589 } 1590 1591 1608 protected StringBuffer buildNavPop(CmsObject cms, A_CmsXmlContent doc, Object userObject, List resources, StringBuffer result2, int iDirLevel, int lPos, int lPos2, int iMaxDeep) throws CmsException { 1609 String requestedUri = cms.getRequestContext().getUri(); 1610 String currentFolder = CmsResource.getFolderPath(cms.getRequestContext().getUri()); 1611 String servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl(); 1612 1613 CmsXmlTemplateFile xmlDataBlock = (CmsXmlTemplateFile) doc; 1614 StringBuffer result = null; 1615 if (result2 == null) { 1616 result = new StringBuffer (); 1617 } else { 1618 result = result2; 1619 } 1620 1621 int size = resources.size(); 1622 1623 String navLink[] = new String [size]; 1624 String navText[] = new String [size]; 1625 float navPos[] = new float[size]; 1626 1627 int max = extractNav(cms, resources, navLink, navText, navPos); 1628 1629 if (xmlDataBlock.hasData("navEntry")) { 1633 if (!xmlDataBlock.hasData("navCurrent")) { 1634 xmlDataBlock.setData("navCurrent", xmlDataBlock.getData("navEntry")); 1635 } 1636 1637 xmlDataBlock.setData("menueLevel", iDirLevel + ""); 1638 xmlDataBlock.setData("Level1Pos", lPos + 1 + ""); 1639 xmlDataBlock.setData("Level2Pos", lPos2 + 1 + ""); 1640 1641 result.append(xmlDataBlock.getProcessedDataValue("navStart" + iDirLevel, this, userObject)); 1642 1643 boolean bHasSubFiles = false; 1644 for (int i = 0; i < max; i++) { 1645 bHasSubFiles = false; 1646 if (navLink[i].endsWith("/") || navLink[i].endsWith("\\")) { 1647 List resources2 = cms.getSubFolders(navLink[i]); 1648 List allFile2 = cms.getFilesInFolder(navLink[i]); 1649 ((ArrayList )resources2).ensureCapacity(resources2.size() + allFile2.size()); 1650 Iterator e2 = allFile2.iterator(); 1651 while (e2.hasNext()) { 1652 resources2.add(e2.next()); 1653 } 1654 int size2 = resources2.size(); 1655 String navLink2[] = new String [size2]; 1656 String navText2[] = new String [size2]; 1657 float navPos2[] = new float[size2]; 1658 1659 if (extractNav(cms, resources2, navLink2, navText2, navPos2) > 0) { 1660 bHasSubFiles = true; 1661 } 1662 1663 } 1664 1665 xmlDataBlock.setData("navText", navText[i]); 1666 xmlDataBlock.setData("count", new Integer (i + 1).toString()); 1667 xmlDataBlock.setData("level", new Integer (extractLevel(cms, navLink[i])).toString()); 1668 if (navLink[i].endsWith("/")) { 1672 String navIndex = cms.readProperty(navLink[i], C_PROPERTY_NAVINDEX); 1673 if (navIndex == null) { 1674 navIndex = C_NAVINDEX; 1675 } 1676 try { 1677 cms.readFile(navLink[i] + navIndex); 1678 xmlDataBlock.setData("navLink", servletPath + navLink[i] + navIndex); 1679 } catch (CmsException e) { 1680 xmlDataBlock.setData("navLink", servletPath + requestedUri); 1681 } 1682 } else { 1683 try { 1684 cms.readFile(navLink[i]); 1685 xmlDataBlock.setData("navLink", servletPath + navLink[i]); 1686 } catch (CmsException e) { 1687 xmlDataBlock.setData("navLink", servletPath + requestedUri); 1688 } 1689 } 1690 xmlDataBlock.setData("data1", navLink[i]); 1692 xmlDataBlock.setData("data2", requestedUri); 1693 xmlDataBlock.setData("data3", currentFolder); 1694 1695 String sFolder = ""; 1696 String sFolder2 = ""; 1697 sFolder = navLink[i]; 1698 if (currentFolder.length() >= sFolder.length()) { 1699 if (currentFolder.length() > sFolder.length()) { 1700 sFolder2 = currentFolder.substring(0, sFolder.length()); 1701 } else { 1702 sFolder2 = currentFolder.substring(0); 1703 } 1704 } 1705 1706 String sSubExten = ""; 1707 if (bHasSubFiles && iDirLevel < iMaxDeep) { 1708 sSubExten = "ws"; 1709 } 1710 if (sFolder2.equals(sFolder) || navLink[i].equals(currentFolder) || navLink[i].equals(requestedUri)) { 1711 result.append(xmlDataBlock.getProcessedDataValue("navCurrent" + iDirLevel + sSubExten, this, userObject)); 1712 } else { 1713 result.append(xmlDataBlock.getProcessedDataValue("navEntry" + iDirLevel + sSubExten, this, userObject)); 1714 } 1715 1716 } 1717 result.append(xmlDataBlock.getProcessedDataValue("navEnd" + iDirLevel, this, userObject)); 1718 } 1719 1720 return result; 1721 } 1722 1723 1740 public Object getLanguagePath(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) throws CmsException { 1741 String sLanguageToken = "_lang_"; 1742 String sLanguageIdent = ""; 1743 String sNoFoundLink = ""; 1744 String sTokenReplaceType = "0"; 1745 String sLinkLeftSide = "/"; 1746 String currentFolder = cms.getRequestContext().getUri(); 1747 String sReturnPath = ""; 1748 int iParamCount; 1749 String sParam = ""; 1750 1751 if (!tagcontent.equals("")) { 1752 try { 1753 StringTokenizer st = new StringTokenizer (tagcontent.toString(), ","); 1754 iParamCount = st.countTokens(); 1755 1756 if (iParamCount < 1) { 1757 throw new CmsLegacyException("Not enough parameters!"); 1758 } 1759 1760 if (st.hasMoreTokens()) { 1761 sLanguageIdent = st.nextToken().trim(); 1762 } 1763 1764 if (st.hasMoreTokens()) { 1765 sParam = st.nextToken().trim(); 1766 if (!sParam.equals("")) { 1767 sLanguageToken = sParam; 1768 } 1769 } 1770 1771 if (st.hasMoreTokens()) { 1772 sParam = st.nextToken().trim(); 1773 if (!sParam.equals("")) { 1774 sTokenReplaceType = sParam; 1775 } 1776 } 1777 1778 if (st.hasMoreTokens()) { 1779 sParam = st.nextToken().trim(); 1780 if (!sParam.equals("")) { 1781 sNoFoundLink = sParam; 1782 } 1783 } 1784 1785 } catch (Exception e) { 1786 throw new CmsLegacyException(e.getMessage()); 1787 } 1788 1789 int ifound = 0; 1790 1791 if (sTokenReplaceType.equals("0")) { 1792 ifound = currentFolder.indexOf(sLanguageToken); 1793 } else { 1794 currentFolder = currentFolder.substring(1); 1795 ifound = currentFolder.indexOf("/"); 1796 } 1797 1798 if (ifound > (-1)) { 1799 String sTemp = currentFolder.substring(0, ifound); 1800 sLinkLeftSide = sTemp.substring(0, sTemp.lastIndexOf("/") + 1); 1801 sReturnPath = sLinkLeftSide + "" + sLanguageIdent + currentFolder.substring(ifound); 1802 1803 boolean resourceExists = false; 1805 1806 try { 1807 CmsResource dummy = cms.readResource(sReturnPath); 1808 1809 if (dummy != null) { 1810 resourceExists = true; 1812 } 1813 } catch (CmsException e) { 1814 resourceExists = false; 1816 } 1817 1818 if (!resourceExists) { 1819 if (iParamCount > 3) { 1820 sReturnPath = "/" + sNoFoundLink; 1821 } else { 1822 sReturnPath = sReturnPath.substring(0, sReturnPath.lastIndexOf("/") + 1); 1823 } 1824 } 1825 } else { 1826 currentFolder = cms.getRequestContext().getUri(); 1827 } 1828 } else { 1829 throw new CmsLegacyException("Not enough parameters!"); 1830 } 1831 1832 return CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + sReturnPath; 1833 } 1834} 1835
| Popular Tags
|