1 23 24 package org.infoglue.deliver.controllers.kernel.impl.simple; 25 26 import java.util.ArrayList ; 27 import java.util.Collections ; 28 import java.util.HashMap ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Locale ; 32 import java.util.Map ; 33 34 import org.apache.log4j.Logger; 35 import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController; 36 import org.infoglue.cms.entities.content.ContentVO; 37 import org.infoglue.cms.entities.content.ContentVersion; 38 import org.infoglue.cms.entities.structure.SiteNodeVO; 39 import org.infoglue.cms.exception.SystemException; 40 import org.infoglue.cms.util.XMLHelper; 41 import org.infoglue.deliver.applications.actions.InfoGlueComponent; 42 import org.infoglue.deliver.applications.databeans.ComponentDeliveryContext; 43 import org.infoglue.deliver.applications.databeans.DeliveryContext; 44 import org.infoglue.deliver.util.NullObject; 45 import org.infoglue.deliver.applications.databeans.Slot; 46 import org.infoglue.deliver.applications.databeans.WebPage; 47 import org.infoglue.deliver.util.CacheController; 48 import org.infoglue.deliver.util.Support; 49 import org.w3c.dom.Document ; 50 import org.w3c.dom.Element ; 51 import org.w3c.dom.NodeList ; 52 53 public class ComponentLogic 54 { 55 private final static Logger logger = Logger.getLogger(ComponentLogic.class.getName()); 56 57 private TemplateController templateController = null; 58 private InfoGlueComponent infoGlueComponent = null; 59 private boolean useInheritance = true; 60 private boolean useEditOnSight = true; 61 private boolean threatFoldersAsContents = false; 62 private ComponentDeliveryContext componentDeliveryContext; 63 64 public ComponentLogic(TemplateController templateController, InfoGlueComponent infoGlueComponent) 65 { 66 this.templateController = templateController; 67 this.infoGlueComponent = infoGlueComponent; 68 this.componentDeliveryContext = ComponentDeliveryContext.getComponentDeliveryContext(templateController.getDeliveryContext(), infoGlueComponent); 69 this.componentDeliveryContext.addUsedContent("content_" + infoGlueComponent.getContentId()); 70 } 71 72 85 86 99 public List getBoundFolderContents(String propertyName, boolean searchRecursive, String sortAttribute, String sortOrder) throws Exception  100 { 101 return getBoundFolderContents(propertyName, searchRecursive, sortAttribute, sortOrder, false); 102 } 103 104 118 public List getBoundFolderContents(String propertyName, boolean searchRecursive, String sortAttribute, String sortOrder, boolean includeFolders) throws Exception  119 { 120 List childContents = new ArrayList (); 121 122 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 126 if(property != null) 127 { 128 List bindings = (List )property.get("bindings"); 129 if(bindings.size() > 0) 130 { 131 Integer contentId = new Integer ((String )bindings.get(0)); 132 childContents = this.templateController.getChildContents(contentId, searchRecursive, sortAttribute, sortOrder, includeFolders); 133 } 134 } 135 136 return childContents; 137 } 138 139 143 public List getBoundCategoryContents(String categoryAttribute, String typeAttribute) throws Exception  144 { 145 Map categoryComponent = getInheritedComponentProperty(infoGlueComponent, categoryAttribute, this.useInheritance); 146 Map attributeComponent = getInheritedComponentProperty(infoGlueComponent, typeAttribute, this.useInheritance); 147 if(categoryComponent != null && attributeComponent != null) 148 { 149 String attr = (String )attributeComponent.get("path"); 150 Integer categoryId = getSingleBindingAsInteger(categoryComponent); 151 final List contentVersionsByCategory = templateController.getContentVersionsByCategory(categoryId, attr); 152 return contentVersionsByCategory; 153 } 154 155 return Collections.EMPTY_LIST; 156 } 157 158 private Integer getSingleBindingAsInteger(Map componentProperty) 159 { 160 List bindings = (List )componentProperty.get("bindings"); 161 return (bindings.size() > 0) 162 ? new Integer ((String )bindings.get(0)) 163 : new Integer (0); 164 } 165 166 public String getAssetUrl(String propertyName) throws Exception  167 { 168 String assetUrl = ""; 169 170 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 171 if(property != null) 172 { 173 List bindings = (List )property.get("bindings"); 174 logger.info("bindings:" + bindings.size()); 175 if(bindings.size() > 0) 176 { 177 Integer contentId = new Integer ((String )bindings.get(0)); 178 logger.info("contentId:" + contentId); 179 assetUrl = templateController.getAssetUrl(contentId); 180 } 181 } 182 return assetUrl; 183 } 184 185 public String getAssetUrl(String propertyName, boolean useInheritance) throws Exception  186 { 187 String assetUrl = ""; 188 189 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 190 if(property != null) 191 { 192 List bindings = (List )property.get("bindings"); 193 logger.info("bindings:" + bindings.size()); 194 if(bindings.size() > 0) 195 { 196 Integer contentId = new Integer ((String )bindings.get(0)); 197 logger.info("contentId:" + contentId); 198 assetUrl = templateController.getAssetUrl(contentId); 199 } 200 } 201 return assetUrl; 202 } 203 204 public String getAssetUrl(String propertyName, String assetKey) throws Exception  205 { 206 String assetUrl = ""; 207 208 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 209 if(property != null) 210 { 211 List bindings = (List )property.get("bindings"); 212 if(bindings.size() > 0) 213 { 214 Integer contentId = new Integer ((String )bindings.get(0)); 215 assetUrl = templateController.getAssetUrl(contentId, assetKey); 216 } 217 } 218 return assetUrl; 219 } 220 221 public String getAssetUrl(String propertyName, String assetKey, boolean useInheritance) throws Exception  222 { 223 String assetUrl = ""; 224 225 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 226 if(property != null) 227 { 228 List bindings = (List )property.get("bindings"); 229 if(bindings.size() > 0) 230 { 231 Integer contentId = new Integer ((String )bindings.get(0)); 232 assetUrl = templateController.getAssetUrl(contentId, assetKey); 233 } 234 } 235 return assetUrl; 236 } 237 238 public String getAssetThumbnailUrl(String propertyName, int width, int height) throws Exception  239 { 240 return getAssetThumbnailUrl(propertyName, width, height, this.useInheritance); 241 } 242 243 public String getAssetThumbnailUrl(String propertyName, int width, int height, boolean useInheritance) throws Exception  244 { 245 String assetUrl = ""; 246 247 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 248 if(property != null) 249 { 250 List bindings = (List )property.get("bindings"); 251 if(bindings.size() > 0) 252 { 253 Integer contentId = new Integer ((String )bindings.get(0)); 254 assetUrl = templateController.getAssetThumbnailUrl(contentId, width, height); 255 } 256 } 257 return assetUrl; 258 } 259 260 public String getAssetThumbnailUrl(String propertyName, String assetKey, int width, int height) throws Exception  261 { 262 return getAssetThumbnailUrl(propertyName, assetKey, width, height, this.useInheritance); 263 } 264 265 public String getAssetThumbnailUrl(String propertyName, String assetKey, int width, int height, boolean useInheritance) throws Exception  266 { 267 String assetUrl = ""; 268 269 try 270 { 271 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 272 if(property != null) 273 { 274 List bindings = (List )property.get("bindings"); 275 if(bindings.size() > 0) 276 { 277 Integer contentId = new Integer ((String )bindings.get(0)); 278 assetUrl = templateController.getAssetThumbnailUrl(contentId, assetKey, width, height); 279 } 280 } 281 } 282 catch(Exception e) 283 { 284 e.printStackTrace(); 285 } 286 287 return assetUrl; 288 } 289 290 public String getAssetThumbnailUrl(Integer contentId, int width, int height) throws Exception  291 { 292 String assetUrl = templateController.getAssetThumbnailUrl(contentId, width, height); 293 return assetUrl; 294 } 295 296 public String getAssetThumbnailUrl(Integer contentId, String assetKey, int width, int height) throws Exception  297 { 298 String assetUrl = templateController.getAssetThumbnailUrl(contentId, assetKey, width, height); 299 return assetUrl; 300 } 301 302 303 public String getAssetUrl(Integer contentId, String assetKey) 304 { 305 String assetUrl = templateController.getAssetUrl(contentId, assetKey); 306 307 return assetUrl; 308 } 309 310 public String getContentAttribute(String propertyName, String attributeName) 311 { 312 return getContentAttribute(propertyName, attributeName, !this.useEditOnSight, this.useInheritance); 313 } 314 315 public String getContentAttribute(String propertyName, String attributeName, boolean disableEditOnSight) 316 { 317 return getContentAttribute(propertyName, attributeName, disableEditOnSight, this.useInheritance); 318 } 319 320 339 340 public Integer getContentId(Map property) 341 { 342 Integer contentId = null; 343 344 if(property != null) 345 { 346 List bindings = (List )property.get("bindings"); 347 if(bindings.size() > 0) 348 { 349 contentId = new Integer ((String )bindings.get(0)); 350 } 351 } 352 353 return contentId; 354 } 355 356 public List getBoundContents(Map property) 357 { 358 List contents = new ArrayList (); 359 360 if(property != null) 361 { 362 List bindings = (List )property.get("bindings"); 363 Iterator bindingsIterator = bindings.iterator(); 364 while(bindingsIterator.hasNext()) 365 { 366 Integer contentId = new Integer ((String )bindingsIterator.next()); 367 contents.add(this.templateController.getContent(contentId)); 368 } 369 } 370 371 return contents; 372 } 373 374 public Integer getSiteNodeId(Map property) 375 { 376 Integer siteNodeId = null; 377 378 if(property != null) 379 { 380 List bindings = (List )property.get("bindings"); 381 if(bindings.size() > 0) 382 { 383 siteNodeId = new Integer ((String )bindings.get(0)); 384 } 385 } 386 387 return siteNodeId; 388 } 389 390 public List getBoundPages(Map property) 391 { 392 List pages = new ArrayList (); 393 394 if(property != null) 395 { 396 List bindings = (List )property.get("bindings"); 397 Iterator bindingsIterator = bindings.iterator(); 398 while(bindingsIterator.hasNext()) 399 { 400 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 401 SiteNodeVO siteNode = templateController.getSiteNode(siteNodeId); 402 if(siteNode != null) 403 { 404 WebPage webPage = new WebPage(); 405 webPage.setSiteNodeId(siteNodeId); 406 webPage.setLanguageId(templateController.getLanguageId()); 407 webPage.setContentId(null); 408 webPage.setNavigationTitle(getPageNavTitle(siteNodeId)); 409 webPage.setMetaInfoContentId(siteNode.getMetaInfoContentId()); 410 webPage.setUrl(getPageUrl(siteNodeId)); 411 pages.add(webPage); 412 } 413 } 414 } 415 416 return pages; 417 } 418 419 420 public String getContentAttribute(String propertyName, String attributeName, boolean disableEditOnSight, boolean useInheritance) 421 { 422 String attributeValue = ""; 423 424 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 425 if(property != null) 426 { 427 List bindings = (List )property.get("bindings"); 428 if(bindings.size() > 0) 429 { 430 Integer contentId = new Integer ((String )bindings.get(0)); 431 if(disableEditOnSight) 432 attributeValue = templateController.getContentAttribute(contentId, attributeName, disableEditOnSight); 433 else 434 attributeValue = templateController.getContentAttribute(contentId, attributeName); 435 } 436 } 437 438 return attributeValue; 439 } 440 441 public String getContentAttribute(String propertyName, Integer languageId, String attributeName, boolean disableEditOnSight, boolean useInheritance) 442 { 443 String attributeValue = ""; 444 445 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 446 if(property != null) 447 { 448 List bindings = (List )property.get("bindings"); 449 if(bindings.size() > 0) 450 { 451 Integer contentId = new Integer ((String )bindings.get(0)); 452 attributeValue = templateController.getContentAttribute(contentId, languageId, attributeName, disableEditOnSight); 453 } 454 } 455 456 return attributeValue; 457 } 458 459 public String getParsedContentAttribute(String propertyName, String attributeName) 460 { 461 return getParsedContentAttribute(propertyName, attributeName, !this.useEditOnSight, this.useInheritance); 462 } 463 464 public String getParsedContentAttribute(String propertyName, String attributeName, boolean disableEditOnSight, boolean useInheritance) 465 { 466 String attributeValue = ""; 467 468 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 469 if(property != null) 470 { 471 List bindings = (List )property.get("bindings"); 472 if(bindings.size() > 0) 473 { 474 Integer contentId = new Integer ((String )bindings.get(0)); 475 attributeValue = templateController.getParsedContentAttribute(contentId, attributeName, disableEditOnSight); 476 } 477 } 478 479 return attributeValue; 480 } 481 482 public String getParsedContentAttribute(String propertyName, Integer languageId, String attributeName, boolean disableEditOnSight, boolean useInheritance) 483 { 484 String attributeValue = ""; 485 486 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 487 if(property != null) 488 { 489 List bindings = (List )property.get("bindings"); 490 if(bindings.size() > 0) 491 { 492 Integer contentId = new Integer ((String )bindings.get(0)); 493 attributeValue = templateController.getParsedContentAttribute(contentId, languageId, attributeName, disableEditOnSight); 494 } 495 } 496 497 return attributeValue; 498 } 499 500 public List getFormAttributes(String propertyName, String attributeName) 501 { 502 List formAttributes = new ArrayList (); 503 504 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 505 if(property != null) 506 { 507 List bindings = (List )property.get("bindings"); 508 if(bindings.size() > 0) 509 { 510 Integer contentId = new Integer ((String )bindings.get(0)); 511 String formDefinition = templateController.getContentAttribute(contentId, attributeName, true); 512 formAttributes = FormDeliveryController.getFormDeliveryController().getContentTypeAttributes(formDefinition); 513 } 514 } 515 516 return formAttributes; 517 } 518 519 public String getPropertyValue(String propertyName) throws SystemException 520 { 521 return getPropertyValue(propertyName, true); 522 } 523 524 public String getPropertyValue(String propertyName, boolean useLangaugeFallback) throws SystemException 525 { 526 return getPropertyValue(propertyName, useLangaugeFallback, this.useInheritance); 527 } 528 529 public String getPropertyValue(String propertyName, boolean useLangaugeFallback, boolean useInheritance) throws SystemException 530 { 531 String propertyValue = ""; 532 533 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), templateController.getLanguageId()); 534 535 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 536 if(property != null) 537 { 538 if(property != null) 539 { 540 propertyValue = (String )property.get("path"); 541 if(propertyValue == null) 542 { 543 Iterator keysIterator = property.keySet().iterator(); 544 while(keysIterator.hasNext()) 545 { 546 String key = (String )keysIterator.next(); 547 } 548 } 549 } 550 } 551 552 return propertyValue; 553 } 554 555 556 557 public String getPropertyValue(Integer siteNodeId, String propertyName, boolean useLangaugeFallback, boolean useInheritance) throws SystemException 558 { 559 String propertyValue = ""; 560 561 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), templateController.getLanguageId()); 562 563 Map property = getInheritedComponentProperty(siteNodeId, this.infoGlueComponent, propertyName, useInheritance); 564 if(property != null) 565 { 566 if(property != null) 567 { 568 propertyValue = (String )property.get("path"); 569 if(propertyValue == null) 570 { 571 Iterator keysIterator = property.keySet().iterator(); 572 while(keysIterator.hasNext()) 573 { 574 String key = (String )keysIterator.next(); 575 } 576 } 577 } 578 } 579 580 return propertyValue; 581 } 582 583 584 585 public ContentVO getBoundContent(String propertyName) 586 { 587 return getBoundContent(propertyName, true); 588 } 589 590 public ContentVO getBoundContent(String propertyName, boolean useInheritance) 591 { 592 ContentVO content = null; 593 594 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 595 if(property != null) 596 { 597 List bindings = (List )property.get("bindings"); 598 if(bindings.size() > 0) 599 { 600 Integer contentId = new Integer ((String )bindings.get(0)); 601 content = this.templateController.getContent(contentId); 602 } 603 } 604 605 return content; 606 } 607 608 public ContentVO getBoundContent(Integer siteNodeId, String propertyName, boolean useInheritance) 609 { 610 ContentVO content = null; 611 612 Map property = getInheritedComponentProperty(siteNodeId, this.infoGlueComponent, propertyName, useInheritance); 613 if(property != null) 614 { 615 List bindings = (List )property.get("bindings"); 616 if(bindings.size() > 0) 617 { 618 Integer contentId = new Integer ((String )bindings.get(0)); 619 content = this.templateController.getContent(contentId); 620 } 621 } 622 623 return content; 624 } 625 626 public Integer getBoundContentId(String propertyName) 627 { 628 return getBoundContentId(propertyName, true); 629 } 630 631 public Integer getBoundContentId(String propertyName, boolean useInheritance) 632 { 633 Integer contentId = null; 634 635 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 636 if(property != null) 637 { 638 List bindings = (List )property.get("bindings"); 639 if(bindings.size() > 0) 640 { 641 contentId = new Integer ((String )bindings.get(0)); 642 } 643 } 644 645 return contentId; 646 } 647 648 public List getBoundContents(String propertyName) 649 { 650 return getBoundContents(propertyName, this.useInheritance); 651 } 652 653 public List getBoundContents(String propertyName, boolean useInheritance) 654 { 655 List contents = new ArrayList (); 656 657 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 658 if(property != null) 659 { 660 List bindings = (List )property.get("bindings"); 661 Iterator bindingsIterator = bindings.iterator(); 662 while(bindingsIterator.hasNext()) 663 { 664 Integer contentId = new Integer ((String )bindingsIterator.next()); 665 contents.add(this.templateController.getContent(contentId)); 666 } 667 } 668 669 return contents; 670 } 671 672 public WebPage getBoundPage(String propertyName) 673 { 674 return getBoundPage(propertyName, this.useInheritance); 675 } 676 677 680 681 public WebPage getBoundPage(String propertyName, boolean useInheritance) 682 { 683 WebPage webPage = null; 684 685 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 686 687 if(property != null) 688 { 689 List bindings = (List )property.get("bindings"); 690 Iterator bindingsIterator = bindings.iterator(); 691 if(bindingsIterator.hasNext()) 692 { 693 webPage = new WebPage(); 694 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 695 SiteNodeVO siteNode = templateController.getSiteNode(siteNodeId); 696 if(siteNode != null) 697 { 698 webPage.setSiteNodeId(siteNodeId); 699 webPage.setLanguageId(templateController.getLanguageId()); 700 webPage.setContentId(null); 701 webPage.setNavigationTitle(getPageNavTitle(siteNodeId)); 702 webPage.setMetaInfoContentId(siteNode.getMetaInfoContentId()); 703 webPage.setUrl(getPageUrl(siteNodeId)); 704 } 705 } 706 } 707 708 return webPage; 709 } 710 711 712 public List getBoundPages(String propertyName) 713 { 714 return getBoundPages(propertyName, this.useInheritance); 715 } 716 717 720 721 public List getBoundPages(String propertyName, boolean useInheritance) 722 { 723 List pages = new ArrayList (); 724 725 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 726 727 if(property != null) 728 { 729 List bindings = (List )property.get("bindings"); 730 Iterator bindingsIterator = bindings.iterator(); 731 while(bindingsIterator.hasNext()) 732 { 733 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 734 SiteNodeVO siteNode = templateController.getSiteNode(siteNodeId); 735 if(siteNode != null) 736 { 737 WebPage webPage = new WebPage(); 738 webPage.setSiteNodeId(siteNodeId); 739 webPage.setLanguageId(templateController.getLanguageId()); 740 webPage.setContentId(null); 741 webPage.setNavigationTitle(getPageNavTitle(siteNodeId)); 742 webPage.setMetaInfoContentId(siteNode.getMetaInfoContentId()); 743 webPage.setUrl(getPageUrl(siteNodeId)); 744 pages.add(webPage); 745 } 746 } 747 } 748 749 return pages; 750 } 751 752 755 756 public SiteNodeVO getBoundSiteNode(String propertyName, boolean useInheritance) 757 { 758 SiteNodeVO siteNodeVO = null; 759 760 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 761 762 if(property != null) 763 { 764 List bindings = (List )property.get("bindings"); 765 Iterator bindingsIterator = bindings.iterator(); 766 if(bindingsIterator.hasNext()) 767 { 768 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 769 siteNodeVO = templateController.getSiteNode(siteNodeId); 770 } 771 } 772 773 return siteNodeVO; 774 } 775 776 779 780 public SiteNodeVO getBoundSiteNode(Integer targetSiteNodeId, String propertyName, boolean useInheritance) 781 { 782 SiteNodeVO siteNodeVO = null; 783 784 Map property = getInheritedComponentProperty(targetSiteNodeId, this.infoGlueComponent, propertyName, useInheritance); 785 786 if(property != null) 787 { 788 List bindings = (List )property.get("bindings"); 789 Iterator bindingsIterator = bindings.iterator(); 790 if(bindingsIterator.hasNext()) 791 { 792 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 793 siteNodeVO = templateController.getSiteNode(siteNodeId); 794 } 795 } 796 797 return siteNodeVO; 798 } 799 800 803 804 public List getChildContents(String propertyName) 805 { 806 return getChildContents(propertyName, this.useInheritance, false, "id", "asc", false); 807 } 808 809 812 813 public List getChildContents(String propertyName, boolean useInheritance, boolean searchRecursive, String sortAttribute, String sortOrder, boolean includeFolders) 814 { 815 List childContents = new ArrayList (); 816 817 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 818 if(property != null) 819 { 820 List bindings = (List )property.get("bindings"); 821 Iterator bindingsIterator = bindings.iterator(); 822 while(bindingsIterator.hasNext()) 823 { 824 Integer contentId = new Integer ((String )bindingsIterator.next()); 825 childContents.addAll(this.templateController.getChildContents(contentId, searchRecursive, sortAttribute, sortOrder, includeFolders)); 826 } 827 } 828 return childContents; 829 } 830 831 832 835 836 public List getChildPages(String propertyName) 837 { 838 return getChildPages(propertyName, this.useInheritance); 839 } 840 841 public List getChildPages(String propertyName, boolean useInheritance) 842 { 843 return getChildPages(propertyName, useInheritance, false, false); 844 } 845 846 public List getChildPages(String propertyName, boolean useInheritance, boolean escapeHTML) 847 { 848 return getChildPages(propertyName, this.useInheritance, escapeHTML, false); 849 } 850 851 854 855 public List getChildPages(String propertyName, boolean useInheritance, boolean escapeHTML, boolean hideUnauthorizedPages) 856 { 857 List childPages = new ArrayList (); 858 859 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 860 if(property != null) 861 { 862 List bindings = (List )property.get("bindings"); 863 Iterator bindingsIterator = bindings.iterator(); 864 while(bindingsIterator.hasNext()) 865 { 866 Integer siteNodeId = new Integer ((String )bindingsIterator.next()); 867 childPages.addAll(getChildPages(siteNodeId)); 868 } 869 } 870 return childPages; 871 } 872 873 874 877 878 public List getChildPages(Integer siteNodeId) 879 { 880 List pages = templateController.getChildPages(siteNodeId); 881 882 Iterator pagesIterator = pages.iterator(); 883 while(pagesIterator.hasNext()) 884 { 885 WebPage webPage = (WebPage)pagesIterator.next(); 886 webPage.setUrl(getPageUrl(webPage.getSiteNodeId())); 887 } 888 889 return pages; 890 } 891 892 public String getPageUrl(String propertyName) throws Exception  893 { 894 return getPageUrl(propertyName, this.useInheritance); 895 } 896 897 public String getPageUrl(String propertyName, boolean useInheritance) 898 { 899 String pageUrl = ""; 900 901 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 902 if(property != null) 903 { 904 List bindings = (List )property.get("bindings"); 905 if(bindings.size() > 0) 906 { 907 Integer siteNodeId = new Integer ((String )bindings.get(0)); 908 pageUrl = this.getPageUrl(siteNodeId, templateController.getLanguageId(), templateController.getContentId()); 909 } 910 } 911 912 return pageUrl; 913 } 914 915 public String getPageUrl(Integer siteNodeId) 916 { 917 String pageUrl = ""; 918 919 pageUrl = this.getPageUrl(siteNodeId, templateController.getLanguageId(), null); 920 921 return pageUrl; 922 } 923 924 public String getPageUrl(String propertyName, Integer contentId) 925 { 926 return getPageUrl(propertyName, contentId, this.useInheritance); 927 } 928 929 public String getPageUrl(String propertyName, Integer contentId, boolean useInheritance) 930 { 931 String pageUrl = ""; 932 933 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 934 if(property != null) 935 { 936 List bindings = (List )property.get("bindings"); 937 if(bindings.size() > 0) 938 { 939 Integer siteNodeId = new Integer ((String )bindings.get(0)); 940 pageUrl = this.getPageUrl(siteNodeId, templateController.getLanguageId(), contentId); 941 } 942 } 943 944 return pageUrl; 945 } 946 947 public String getPageUrl(String propertyName, Integer contentId, Integer languageId, boolean useInheritance) 948 { 949 String pageUrl = ""; 950 951 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 952 if(property != null) 953 { 954 List bindings = (List )property.get("bindings"); 955 if(bindings.size() > 0) 956 { 957 Integer siteNodeId = new Integer ((String )bindings.get(0)); 958 pageUrl = this.getPageUrl(siteNodeId, languageId, contentId); 959 } 960 } 961 962 return pageUrl; 963 } 964 965 971 972 public String getPageAsDigitalAssetUrl(String propertyName) throws Exception  973 { 974 return getPageAsDigitalAssetUrl(propertyName, this.useInheritance, ""); 975 } 976 977 983 public String getPageAsDigitalAssetUrl(String propertyName, boolean useInheritance, String fileSuffix) 984 { 985 String pageUrl = ""; 986 987 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 988 if(property != null) 989 { 990 List bindings = (List )property.get("bindings"); 991 if(bindings.size() > 0) 992 { 993 Integer siteNodeId = new Integer ((String )bindings.get(0)); 994 pageUrl = this.getPageAsDigitalAssetUrl(siteNodeId, templateController.getLanguageId(), templateController.getContentId(), fileSuffix); 995 } 996 } 997 998 return pageUrl; 999 } 1000 1001 1007 public String getPageAsDigitalAssetUrl(String propertyName, Integer languageId, Integer contentId, boolean useInheritance, String fileSuffix) 1008 { 1009 String pageUrl = ""; 1010 1011 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, useInheritance); 1012 if(property != null) 1013 { 1014 List bindings = (List )property.get("bindings"); 1015 if(bindings.size() > 0) 1016 { 1017 Integer siteNodeId = new Integer ((String )bindings.get(0)); 1018 pageUrl = this.getPageAsDigitalAssetUrl(siteNodeId, languageId, contentId, fileSuffix); 1019 } 1020 } 1021 1022 return pageUrl; 1023 } 1024 1025 1031 public String getPageAsDigitalAssetUrl(Integer siteNodeId, Integer languageId, Integer contentId, String fileSuffix) 1032 { 1033 String pageUrl = this.templateController.getPageAsDigitalAssetUrl(siteNodeId, languageId, contentId, fileSuffix); 1034 1035 return pageUrl; 1036 } 1037 1038 1039 public String getPageNavTitle(String propertyName) 1040 { 1041 String pageUrl = ""; 1042 1043 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 1044 if(property != null) 1045 { 1046 List bindings = (List )property.get("bindings"); 1047 if(bindings.size() > 0) 1048 { 1049 Integer siteNodeId = new Integer ((String )bindings.get(0)); 1050 pageUrl = templateController.getPageNavTitle(siteNodeId); 1051 } 1052 } 1053 1054 return pageUrl; 1055 } 1056 1057 public List getRelatedPages(String propertyName, String attributeName) 1058 { 1059 List relatedPages = new ArrayList (); 1060 1061 Map property = getInheritedComponentProperty(this.infoGlueComponent, propertyName, this.useInheritance); 1062 if(property != null) 1063 { 1064 List bindings = (List )property.get("bindings"); 1065 if(bindings.size() > 0) 1066 { 1067 Integer contentId = new Integer ((String )bindings.get(0)); 1068 relatedPages = templateController.getRelatedPages(contentId, attributeName); 1069 } 1070 } 1071 1072 return relatedPages; 1073 } 1074 1075 1078 1079 public Map getInheritedComponentProperty(InfoGlueComponent component, String propertyName, boolean useInheritance) 1080 { 1081 try 1082 { 1083 Map property1 = getComponentProperty(propertyName, useInheritance); 1084 if(property1 != null) 1085 return property1; 1086 1087 Map property = (Map )component.getProperties().get(propertyName); 1088 InfoGlueComponent parentComponent = component.getParentComponent(); 1089 while(property == null && parentComponent != null) 1091 { 1092 property = (Map )parentComponent.getProperties().get(propertyName); 1093 parentComponent = parentComponent.getParentComponent(); 1094 } 1095 1096 return property; 1097 } 1098 catch(Exception e) 1099 { 1100 e.printStackTrace(); 1101 } 1102 1103 return null; 1104 } 1105 1106 1109 1110 public Map getInheritedComponentProperty(Integer siteNodeId, InfoGlueComponent component, String propertyName, boolean useInheritance) 1111 { 1112 try 1113 { 1114 Map property1 = getComponentProperty(siteNodeId, propertyName, useInheritance); 1115 if(property1 != null) 1116 return property1; 1117 1127 1128 return null; 1129 } 1130 catch(Exception e) 1131 { 1132 e.printStackTrace(); 1133 } 1134 1135 return null; 1136 } 1137 1138 1141 1142 public List getInheritedComponentProperties(String propertyName, boolean useInheritance) 1143 { 1144 return getInheritedComponentProperties(this.templateController.getSiteNodeId(), propertyName, useInheritance); 1145 } 1146 1147 1150 1151 public List getInheritedComponentProperties(Integer siteNodeId, String propertyName, boolean useInheritance) 1152 { 1153 try 1154 { 1155 List properties = getComponentProperties(siteNodeId, propertyName, useInheritance); 1156 if(properties != null) 1157 return properties; 1158 1159 return null; 1160 } 1161 catch(Exception e) 1162 { 1163 e.printStackTrace(); 1164 } 1165 1166 return null; 1167 } 1168 1169 1172 1173 public boolean getHasDefinedProperty(Integer siteNodeId, Integer languageId, String propertyName, boolean useInheritance) 1174 { 1175 Map property = getComponentProperty(siteNodeId, languageId, propertyName, useInheritance); 1176 1177 return property == null ? false : true; 1178 } 1179 1180 1181 1184 1185 public Map getComponentProperty(Integer siteNodeId, Integer languageId, String propertyName, boolean useInheritance) 1186 { 1187 Map componentProperty = getComponentProperty(siteNodeId, languageId, propertyName); 1188 SiteNodeVO parentSiteNodeVO = this.templateController.getParentSiteNode(siteNodeId); 1189 while(componentProperty == null && useInheritance && parentSiteNodeVO != null) 1190 { 1191 componentProperty = getComponentProperty(parentSiteNodeVO.getId(), languageId, propertyName); 1192 parentSiteNodeVO = this.templateController.getParentSiteNode(parentSiteNodeVO.getId()); 1193 } 1194 1195 return componentProperty; 1196 } 1197 1198 1199 1202 1203 public Map getComponentProperty(Integer siteNodeId, Integer languageId, String propertyName) 1204 { 1205 try 1206 { 1207 List contentVersionIdList = new ArrayList (); 1208 1209 String componentPropertiesXML = getPageComponentsString(this.templateController, siteNodeId, languageId, new Integer (-1), contentVersionIdList); 1210 logger.info("componentPropertiesXML:" + componentPropertiesXML); 1211 1212 String key = "" + siteNodeId + "_" + languageId + "_" + propertyName; 1213 Object propertyCandidate = CacheController.getCachedObjectFromAdvancedCache("componentPropertyCache", key); 1215 Map property = null; 1217 1218 if(propertyCandidate != null) 1219 { 1220 if(propertyCandidate instanceof NullObject) 1221 property = null; 1222 else 1223 property = (Map )propertyCandidate; 1224 1225 } 1228 else 1229 { 1230 logger.info("Have to fetch property from XML...:" + key); 1231 1232 1234 if(componentPropertiesXML != null && componentPropertiesXML.length() > 0) 1235 { 1236 Document document = XMLHelper.readDocumentFromByteArray(componentPropertiesXML.getBytes("UTF-8")); 1237 String propertyXPath = "//component/properties/property[@name='" + propertyName + "']"; 1238 NodeList anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), propertyXPath); 1240 1242 for(int i=0; i < anl.getLength(); i++) 1243 { 1244 Element propertyElement = (Element )anl.item(i); 1245 1246 String name = propertyElement.getAttribute("name"); 1247 String type = propertyElement.getAttribute("type"); 1248 String entity = propertyElement.getAttribute("entity"); 1249 boolean isMultipleBinding = new Boolean (propertyElement.getAttribute("multiple")).booleanValue(); 1250 1251 String value = null; 1252 1253 if(type.equalsIgnoreCase("textfield") || type.equalsIgnoreCase("textarea") || type.equalsIgnoreCase("select")) 1254 { 1255 value = propertyElement.getAttribute("path"); 1256 1257 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId); 1258 1259 if(propertyElement.hasAttribute("path_" + locale.getLanguage())) 1260 value = propertyElement.getAttribute("path_" + locale.getLanguage()); 1261 } 1262 1263 property = new HashMap (); 1264 property.put("name", name); 1265 property.put("path", value); 1266 property.put("type", type); 1267 1268 List bindings = new ArrayList (); 1269 NodeList bindingNodeList = propertyElement.getElementsByTagName("binding"); 1270 for(int j=0; j < bindingNodeList.getLength(); j++) 1272 { 1273 Element bindingElement = (Element )bindingNodeList.item(j); 1274 String entityName = bindingElement.getAttribute("entity"); 1275 String entityId = bindingElement.getAttribute("entityId"); 1276 if(entityName.equalsIgnoreCase("Content")) 1278 { 1279 bindings.add(entityId); 1281 } 1282 else 1283 { 1284 bindings.add(entityId); 1286 } 1287 } 1288 1289 property.put("bindings", bindings); 1290 } 1291 1292 if(property != null && contentVersionIdList.size() > 0) 1293 { 1294 1296 Integer contentVersionId = (Integer )contentVersionIdList.get(0); 1297 if(contentVersionId != null) 1298 { 1299 ContentVersion contentVersion = ContentVersionController.getContentVersionController().getContentVersionWithId(contentVersionId, this.templateController.getDatabase()); 1300 logger.info("Caching property:" + key); 1301 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, property, new String []{"contentVersion_" + contentVersionId, "content_" + contentVersion.getValueObject().getContentId()}, true); 1302 } 1303 } 1304 } 1305 } 1306 1307 return property; 1308 } 1309 catch(Exception e) 1310 { 1311 e.printStackTrace(); 1312 } 1313 1314 return null; 1315 } 1316 1317 1321 1322 public String getPageUrl(Integer siteNodeId, Integer languageId, Integer contentId) 1323 { 1324 String pageUrl = this.templateController.getPageUrl(siteNodeId, languageId, contentId); 1325 1326 return pageUrl; 1327 } 1328 1329 1330 public String getPageNavTitle(Integer siteNodeId) 1331 { 1332 String navTitle = ""; 1333 1334 navTitle = templateController.getPageNavTitle(siteNodeId); 1335 1336 return navTitle; 1337 } 1338 1339 1340 1343 1344 private Map getComponentProperty(String propertyName, boolean useInheritance) throws Exception  1345 { 1346 Map property = (Map )this.infoGlueComponent.getProperties().get(propertyName); 1347 1348 if(useInheritance) 1349 { 1350 try 1351 { 1352 NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(this.templateController.getSiteNodeId(), this.templateController.getLanguageId(), this.templateController.getContentId()); 1353 1354 SiteNodeVO parentSiteNodeVO = nodeDeliveryController.getSiteNode(templateController.getDatabase(), this.templateController.getSiteNodeId()).getValueObject(); 1355 while(property == null && parentSiteNodeVO != null) 1356 { 1357 property = getInheritedComponentProperty(this.templateController, parentSiteNodeVO.getId(), this.templateController.getLanguageId(), this.templateController.getContentId(), this.infoGlueComponent.getId(), propertyName); 1358 1359 SiteNodeVO newParentSiteNodeVO = nodeDeliveryController.getParentSiteNode(templateController.getDatabase(), parentSiteNodeVO.getId()); 1360 1361 if(newParentSiteNodeVO == null) 1362 { 1363 Integer parentRepositoryId = this.templateController.getParentRepositoryId(parentSiteNodeVO.getRepositoryId()); 1364 logger.info("parentRepositoryId:" + parentRepositoryId); 1365 if(parentRepositoryId != null) 1366 { 1367 newParentSiteNodeVO = this.templateController.getRepositoryRootSiteNode(parentRepositoryId); 1368 } 1369 } 1370 1371 parentSiteNodeVO = newParentSiteNodeVO; 1372 } 1373 } 1374 catch(Exception e) 1375 { 1376 e.printStackTrace(); 1377 } 1378 } 1379 1380 1382 return property; 1383 } 1384 1385 1388 1389 private Map getComponentProperty(Integer siteNodeId, String propertyName, boolean useInheritance) throws Exception  1390 { 1391 Map property = getInheritedComponentProperty(this.templateController, siteNodeId, this.templateController.getLanguageId(), this.templateController.getContentId(), this.infoGlueComponent.getId(), propertyName); 1394 1395 if(useInheritance) 1396 { 1397 try 1398 { 1399 NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(siteNodeId, this.templateController.getLanguageId(), this.templateController.getContentId()); 1400 1401 SiteNodeVO parentSiteNodeVO = nodeDeliveryController.getSiteNode(templateController.getDatabase(), siteNodeId).getValueObject(); 1402 while(property == null && parentSiteNodeVO != null) 1403 { 1404 property = getInheritedComponentProperty(this.templateController, parentSiteNodeVO.getId(), this.templateController.getLanguageId(), this.templateController.getContentId(), this.infoGlueComponent.getId(), propertyName); 1405 1406 SiteNodeVO newParentSiteNodeVO = nodeDeliveryController.getParentSiteNode(templateController.getDatabase(), parentSiteNodeVO.getId()); 1407 1408 if(newParentSiteNodeVO == null) 1409 { 1410 Integer parentRepositoryId = this.templateController.getParentRepositoryId(parentSiteNodeVO.getRepositoryId()); 1411 logger.info("parentRepositoryId:" + parentRepositoryId); 1412 if(parentRepositoryId != null) 1413 { 1414 newParentSiteNodeVO = this.templateController.getRepositoryRootSiteNode(parentRepositoryId); 1415 } 1416 } 1417 1418 parentSiteNodeVO = newParentSiteNodeVO; 1419 } 1420 } 1421 catch(Exception e) 1422 { 1423 e.printStackTrace(); 1424 } 1425 } 1426 1427 1429 return property; 1430 } 1431 1432 1433 1436 1437 private Map getInheritedComponentProperty(TemplateController templateController, Integer siteNodeId, Integer languageId, Integer contentId, Integer componentId, String propertyName) throws Exception  1438 { 1439 List contentVersionIdList = new ArrayList (); 1440 1441 String inheritedPageComponentsXML = getPageComponentsString(templateController, siteNodeId, languageId, contentId, contentVersionIdList); 1443 1445 String key = "inherited_" + siteNodeId + "_" + languageId + "_" + componentId + "_" + propertyName; 1446 Object propertyCandidate = CacheController.getCachedObjectFromAdvancedCache("componentPropertyCache", key); 1447 Map property = null; 1449 1450 if(propertyCandidate != null) 1451 { 1452 if(propertyCandidate instanceof NullObject) 1453 property = null; 1454 else 1455 property = (Map )propertyCandidate; 1456 1457 } 1460 else 1461 { 1462 logger.info("Checking for property " + propertyName + " on siteNodeId " + siteNodeId); 1463 1464 1466 1468 if(inheritedPageComponentsXML != null && inheritedPageComponentsXML.length() > 0) 1469 { 1470 Document document = XMLHelper.readDocumentFromByteArray(inheritedPageComponentsXML.getBytes("UTF-8")); 1471 String propertyXPath = "//component[@id=" + componentId + "]/properties/property[@name='" + propertyName + "']"; 1472 NodeList anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), propertyXPath); 1475 1477 if(anl == null || anl.getLength() == 0) 1479 { 1480 String globalPropertyXPath = "//component/properties/property[@name='" + propertyName + "'][1]"; 1481 anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), globalPropertyXPath); 1484 } 1487 1488 for(int i=0; i < anl.getLength(); i++) 1489 { 1490 Element propertyElement = (Element )anl.item(i); 1491 1494 String name = propertyElement.getAttribute("name"); 1495 String type = propertyElement.getAttribute("type"); 1496 String entity = propertyElement.getAttribute("entity"); 1497 boolean isMultipleBinding = new Boolean (propertyElement.getAttribute("multiple")).booleanValue(); 1498 1499 1504 1509 String value = null; 1510 1511 if(type.equalsIgnoreCase("textfield") || type.equalsIgnoreCase("textarea") || type.equalsIgnoreCase("select")) 1512 { 1513 value = propertyElement.getAttribute("path"); 1514 1515 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId); 1516 Locale masterLocale = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(templateController.getDatabase(), siteNodeId).getLocale(); 1518 1520 if(propertyElement.hasAttribute("path_" + locale.getLanguage())) 1521 value = propertyElement.getAttribute("path_" + locale.getLanguage()); 1522 1523 if((value == null || value.equals("")) && propertyElement.hasAttribute("path_" + masterLocale.getLanguage())) 1524 value = propertyElement.getAttribute("path_" + masterLocale.getLanguage()); 1525 } 1526 else 1527 { 1528 value = getComponentPropertyValue(inheritedPageComponentsXML, componentId, languageId, name); 1529 } 1530 1531 1532 property = new HashMap (); 1533 property.put("name", name); 1534 property.put("path", value); 1536 property.put("type", type); 1537 1538 List bindings = new ArrayList (); 1539 NodeList bindingNodeList = propertyElement.getElementsByTagName("binding"); 1540 for(int j=0; j < bindingNodeList.getLength(); j++) 1542 { 1543 Element bindingElement = (Element )bindingNodeList.item(j); 1544 String entityName = bindingElement.getAttribute("entity"); 1545 String entityId = bindingElement.getAttribute("entityId"); 1546 if(entityName.equalsIgnoreCase("Content")) 1548 { 1549 bindings.add(entityId); 1551 } 1552 else 1553 { 1554 bindings.add(entityId); 1556 } 1557 } 1558 1559 property.put("bindings", bindings); 1560 } 1561 } 1562 1563 if(property != null && contentVersionIdList.size() > 0) 1565 { 1566 Integer contentVersionId = (Integer )contentVersionIdList.get(0); 1567 if(contentVersionId != null) 1568 { 1569 ContentVersion contentVersion = ContentVersionController.getContentVersionController().getContentVersionWithId(contentVersionId, this.templateController.getDatabase()); 1570 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, property, new String []{"contentVersion_" + contentVersionId, "content_" + contentVersion.getValueObject().getContentId()}, true); 1572 } 1573 } 1574 else 1575 { 1576 if(property == null && contentVersionIdList.size() > 0) 1578 { 1579 Integer contentVersionId = (Integer )contentVersionIdList.get(0); 1580 if(contentVersionId != null) 1582 { 1583 ContentVersion contentVersion = ContentVersionController.getContentVersionController().getContentVersionWithId(contentVersionId, this.templateController.getDatabase()); 1584 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, new NullObject(), new String []{"contentVersion_" + contentVersionId, "content_" + contentVersion.getValueObject().getContentId()}, true); 1586 } 1587 else 1588 { 1589 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, new NullObject(), new String []{}, false); 1591 } 1592 } 1593 else 1594 { 1595 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, new NullObject(), new String []{}, false); 1597 } 1598 } 1599 } 1600 1601 return property; 1602 } 1603 1604 1605 1608 1609 private List getComponentProperties(Integer siteNodeId, String propertyName, boolean useInheritance) throws Exception  1610 { 1611 List properties = getInheritedComponentProperties(this.templateController, siteNodeId, this.templateController.getLanguageId(), this.templateController.getContentId(), this.infoGlueComponent.getId(), propertyName); 1612 1613 if(useInheritance) 1614 { 1615 try 1616 { 1617 NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(siteNodeId, this.templateController.getLanguageId(), this.templateController.getContentId()); 1618 1619 SiteNodeVO parentSiteNodeVO = nodeDeliveryController.getSiteNode(templateController.getDatabase(), siteNodeId).getValueObject(); 1620 while(properties == null || properties.size() == 0 && parentSiteNodeVO != null) 1621 { 1622 properties = getInheritedComponentProperties(this.templateController, parentSiteNodeVO.getId(), this.templateController.getLanguageId(), this.templateController.getContentId(), this.infoGlueComponent.getId(), propertyName); 1623 1624 SiteNodeVO newParentSiteNodeVO = nodeDeliveryController.getParentSiteNode(templateController.getDatabase(), parentSiteNodeVO.getId()); 1625 1626 if(newParentSiteNodeVO == null) 1627 { 1628 Integer parentRepositoryId = this.templateController.getParentRepositoryId(parentSiteNodeVO.getRepositoryId()); 1629 logger.info("parentRepositoryId:" + parentRepositoryId); 1630 if(parentRepositoryId != null) 1631 { 1632 newParentSiteNodeVO = this.templateController.getRepositoryRootSiteNode(parentRepositoryId); 1633 } 1634 } 1635 1636 parentSiteNodeVO = newParentSiteNodeVO; 1637 } 1638 } 1639 catch(Exception e) 1640 { 1641 e.printStackTrace(); 1642 } 1643 } 1644 1645 return properties; 1646 } 1647 1648 1649 1652 1653 private List getInheritedComponentProperties(TemplateController templateController, Integer siteNodeId, Integer languageId, Integer contentId, Integer componentId, String propertyName) throws Exception  1654 { 1655 List contentVersionIdList = new ArrayList (); 1656 1657 String inheritedPageComponentsXML = getPageComponentsString(templateController, siteNodeId, languageId, contentId, contentVersionIdList); 1659 1661 String key = "all_" + siteNodeId + "_" + languageId + "_" + propertyName; 1662 List properties = (List )CacheController.getCachedObjectFromAdvancedCache("componentPropertyCache", key); 1663 1664 if(properties != null) 1665 { 1666 } 1669 else 1670 { 1671 properties = new ArrayList (); 1672 1673 1675 1677 if(inheritedPageComponentsXML != null && inheritedPageComponentsXML.length() > 0) 1678 { 1679 Document document = XMLHelper.readDocumentFromByteArray(inheritedPageComponentsXML.getBytes("UTF-8")); 1680 1681 String globalPropertyXPath = "//component/properties/property[@name='" + propertyName + "']"; 1682 NodeList anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), globalPropertyXPath); 1685 1688 for(int i=0; i < anl.getLength(); i++) 1689 { 1690 Element propertyElement = (Element )anl.item(i); 1691 1694 String name = propertyElement.getAttribute("name"); 1695 String type = propertyElement.getAttribute("type"); 1696 String entity = propertyElement.getAttribute("entity"); 1697 boolean isMultipleBinding = new Boolean (propertyElement.getAttribute("multiple")).booleanValue(); 1698 1699 1704 String value = null; 1705 1706 if(type.equalsIgnoreCase("textfield") || type.equalsIgnoreCase("textarea") || type.equalsIgnoreCase("select")) 1707 { 1708 value = propertyElement.getAttribute("path"); 1709 1710 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId); 1711 1712 if(propertyElement.hasAttribute("path_" + locale.getLanguage())) 1713 value = propertyElement.getAttribute("path_" + locale.getLanguage()); 1714 } 1715 else 1716 { 1717 value = getComponentPropertyValue(propertyElement, languageId, name); 1718 } 1719 1726 Map property = new HashMap (); 1727 property.put("name", name); 1728 property.put("path", value); 1729 property.put("type", type); 1730 1731 List bindings = new ArrayList (); 1732 NodeList bindingNodeList = propertyElement.getElementsByTagName("binding"); 1733 for(int j=0; j < bindingNodeList.getLength(); j++) 1735 { 1736 Element bindingElement = (Element )bindingNodeList.item(j); 1737 String entityName = bindingElement.getAttribute("entity"); 1738 String entityId = bindingElement.getAttribute("entityId"); 1739 if(entityName.equalsIgnoreCase("Content")) 1741 { 1742 bindings.add(entityId); 1744 } 1745 else 1746 { 1747 bindings.add(entityId); 1749 } 1750 } 1751 1752 property.put("bindings", bindings); 1753 1754 properties.add(property); 1755 } 1756 } 1757 1758 if(properties != null && contentVersionIdList.size() > 0) 1759 { 1760 1762 Integer contentVersionId = (Integer )contentVersionIdList.get(0); 1763 if(contentVersionId != null) 1765 { 1766 ContentVersion contentVersion = ContentVersionController.getContentVersionController().getContentVersionWithId(contentVersionId, this.templateController.getDatabase()); 1767 CacheController.cacheObjectInAdvancedCache("componentPropertyCache", key, properties, new String []{"contentVersion_" + contentVersionId, "content_" + contentVersion.getValueObject().getContentId()}, true); 1768 } 1769 } 1770 1771 } 1772 1773 return properties; 1774 } 1775 1776 1779 1780 private String getComponentPropertiesString(TemplateController templateController, Integer siteNodeId, Integer languageId, Integer contentId) throws SystemException, Exception  1781 { 1782 String template = null; 1783 1784 try 1785 { 1786 template = templateController.getContentAttribute(contentId, "ComponentStructure", true); 1787 1788 if(template == null) 1789 throw new SystemException("There was no component properties bound to this page which makes it impossible to render."); 1790 } 1791 catch(Exception e) 1792 { 1793 logger.error(e.getMessage(), e); 1794 throw e; 1795 } 1796 1797 return template; 1798 } 1799 1800 1801 1805 1806 private String getComponentPropertyValue(String componentXML, Integer componentId, Integer languageId, String name) throws Exception  1807 { 1808 String value = "Undefined"; 1809 1810 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId); 1811 1812 Document document = XMLHelper.readDocumentFromByteArray(componentXML.getBytes("UTF-8")); 1813 String componentXPath = "//component[@id=" + componentId + "]/properties/property[@name='" + name + "']"; 1814 NodeList anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), componentXPath); 1816 for(int i=0; i < anl.getLength(); i++) 1817 { 1818 Element property = (Element )anl.item(i); 1819 1820 String id = property.getAttribute("type"); 1821 String path = property.getAttribute("path"); 1822 1823 if(property.hasAttribute("path_" + locale.getLanguage())) 1824 path = property.getAttribute("path_" + locale.getLanguage()); 1825 1826 value = path; 1827 } 1828 1829 1830 return value; 1831 } 1832 1833 1837 1838 private String getComponentPropertyValue(Element property, Integer languageId, String name) throws Exception  1839 { 1840 String value = "Undefined"; 1841 1842 Locale locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId); 1843 1844 String id = property.getAttribute("type"); 1845 String path = property.getAttribute("path"); 1846 1847 if(property.hasAttribute("path_" + locale.getLanguage())) 1848 path = property.getAttribute("path_" + locale.getLanguage()); 1849 1850 value = path; 1851 1852 return value; 1853 } 1854 1855 1858 1859 public List getChildComponents() 1860 { 1861 return getChildComponents(this.getInfoGlueComponent(), null); 1862 } 1863 1864 1867 1868 public List getChildComponents(String slotId) 1869 { 1870 return getChildComponents(this.getInfoGlueComponent(), slotId); 1871 } 1872 1873 1876 1877 public List getChildComponents(InfoGlueComponent component, String slotId) 1878 { 1879 List childComponents = new ArrayList (); 1880 1881 List slotList = component.getSlotList(); 1882 1883 Iterator slotListIterator = slotList.iterator(); 1884 while(slotListIterator.hasNext()) 1885 { 1886 Slot slot = (Slot)slotListIterator.next(); 1887 if(slotId == null || slotId.equalsIgnoreCase(slot.getId())) 1888 { 1889 childComponents.addAll(slot.getComponents()); 1890 } 1891 } 1892 1893 return childComponents; 1894 } 1895 1896 1899 1900 protected String getPageComponentsString(TemplateController templateController, Integer siteNodeId, Integer languageId, Integer contentId, List usedContentVersionId) throws SystemException, Exception  1901 { 1902 String cacheName = "componentEditorCache"; 1903 String cacheKey = "pageComponentString_" + siteNodeId + "_" + languageId + "_" + contentId; 1904 String versionKey = cacheKey + "_contentVersionId"; 1905 String cachedPageComponentsString = (String )CacheController.getCachedObject(cacheName, cacheKey); 1906 Integer contentVersionId = (Integer )CacheController.getCachedObjectFromAdvancedCache("contentVersionCache", versionKey); 1907 1908 if(cachedPageComponentsString != null) 1909 { 1910 if(usedContentVersionId != null) 1912 usedContentVersionId.add(contentVersionId); 1913 1914 return cachedPageComponentsString; 1915 } 1916 1917 String pageComponentsString = null; 1918 1919 ContentVO contentVO = NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, contentId).getBoundContent(templateController.getDatabase(), templateController.getPrincipal(), siteNodeId, languageId, true, "Meta information", templateController.getDeliveryContext()); 1920 1921 if(contentVO == null) 1922 throw new SystemException("There was no Meta Information bound to this page which makes it impossible to render."); 1923 1924 Integer masterLanguageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(templateController.getDatabase(), siteNodeId).getId(); 1925 pageComponentsString = templateController.getContentAttributeWithReturningId(contentVO.getContentId(), masterLanguageId, "ComponentStructure", true, usedContentVersionId); 1926 1927 if(pageComponentsString == null) 1928 throw new SystemException("There was no Meta Information bound to this page which makes it impossible to render."); 1929 1930 logger.info("pageComponentsString: " + pageComponentsString); 1931 1932 CacheController.cacheObject(cacheName, cacheKey, pageComponentsString); 1933 if(usedContentVersionId != null && usedContentVersionId.size() > 0) 1934 { 1935 Integer tempContentVersionId = (Integer )usedContentVersionId.get(0); 1936 ContentVersion contentVersion = ContentVersionController.getContentVersionController().getContentVersionWithId(tempContentVersionId, this.templateController.getDatabase()); 1937 CacheController.cacheObjectInAdvancedCache("contentVersionCache", versionKey, tempContentVersionId, new String []{"contentVersion_" + tempContentVersionId, "content_" + contentVersion.getValueObject().getContentId()}, true); 1939 } 1940 1941 return pageComponentsString; 1942 } 1943 1944 1945 1948 1974 1975 1978 1979 public InfoGlueComponent getInfoGlueComponent() 1980 { 1981 return infoGlueComponent; 1982 } 1983 1984 public boolean getUseInheritance() 1985 { 1986 return useInheritance; 1987 } 1988 1989 public void setUseInheritance(boolean useInheritance) 1990 { 1991 this.useInheritance = useInheritance; 1992 } 1993 1994 public boolean getUseEditOnSight() 1995 { 1996 return useEditOnSight; 1997 } 1998 1999 public void setUseEditOnSight(boolean useEditOnSight) 2000 { 2001 this.useEditOnSight = useEditOnSight; 2002 } 2003 2004 public boolean getThreatFoldersAsContents() 2005 { 2006 return threatFoldersAsContents; 2007 } 2008 2009 public void setThreatFoldersAsContents(boolean threatFoldersAsContents) 2010 { 2011 this.threatFoldersAsContents = threatFoldersAsContents; 2012 this.templateController.setThreatFoldersAsContents(threatFoldersAsContents); 2013 } 2014 2015 2019 public ComponentDeliveryContext getComponentDeliveryContext() 2020 { 2021 return componentDeliveryContext; 2022 } 2023 2024 2025 2037 public String getContentAttributeMapValue( String propertyName, String attributeName, String keyName ) 2038 { 2039 String mapValue = ""; 2040 try 2041 { 2042 mapValue = (String )Support.convertTextToProperties( 2043 getContentAttribute( propertyName, attributeName, true, true ) ).get( keyName ); 2044 } 2045 catch ( Exception e ) 2046 { 2047 logger.error( "An error occurred trying to get getContentAttributeMapValue ( " + propertyName +", " + attributeName + ", " + keyName + " ) ; "+ e.getMessage(), e ); 2048 } 2049 if ( mapValue == null ) 2050 { 2051 mapValue = ""; 2052 } 2053 return mapValue; 2054 } 2055 2056 2064 public String getRenderedTextUrl( String text ) 2065 { 2066 return templateController.getRenderedTextUrl( text, null ); 2067 } 2068 2069 2080 public String getRenderedTextUrl( String fontConfigPropertyName, String text ) 2081 { 2082 return getRenderedTextUrl( fontConfigPropertyName, text, (Map )null ); 2083 } 2084 2085 2099 public String getRenderedTextUrl( String fontConfigPropertyName, String text, String renderAttributes ) 2100 { 2101 return getRenderedTextUrl( fontConfigPropertyName, text, Support.convertTextToMap( renderAttributes, "=", "," ) ); 2102 } 2103 2104 2118 public String getRenderedTextUrl( String fontConfigPropertyName, String text, Map renderAttributes ) 2119 { 2120 String assetUrl = ""; 2121 try 2122 { 2123 Map property = getInheritedComponentProperty( this.infoGlueComponent, fontConfigPropertyName, true ); 2124 if ( property != null ) 2125 { 2126 List bindings = (List )property.get( "bindings" ); 2127 if ( bindings.size() > 0 ) 2128 { 2129 Integer contentId = new Integer ( (String )bindings.get( 0 ) ); 2130 assetUrl = templateController.getRenderedTextUrl( contentId, text, renderAttributes ); 2131 } 2132 } 2133 else 2134 { 2135 assetUrl = templateController.getRenderedTextUrl( text, renderAttributes ); 2136 } 2137 2138 } 2139 catch ( Exception e ) 2140 { 2141 logger.error( "An error occurred trying to get getRenderedTextUrl As ImageUrl:" + e.getMessage(), e ); 2142 } 2143 2144 return assetUrl; 2145 } 2146} | Popular Tags |