1 9 package org.jboss.portal.portlet.deployment.jboss; 10 11 import org.jboss.portal.server.deployment.jboss.Deployment; 12 import org.jboss.portal.server.deployment.PortalWebApp; 13 import org.jboss.portal.server.metadata.ComponentConfigurationMetaData; 14 import org.jboss.portal.server.metadata.PreferenceMetaData; 15 import org.jboss.portal.server.metadata.ContentTypesMetaData; 16 import org.jboss.portal.server.metadata.ContentTypeMetaData; 17 import org.jboss.portal.server.metadata.InterceptorListMetaData; 18 import org.jboss.portal.server.metadata.InterceptorMetaData; 19 import org.jboss.portal.server.plugins.mode.Mode; 20 import org.jboss.portal.server.ServerManager; 21 import org.jboss.portal.server.kernel.ServiceFailureException; 22 import org.jboss.portal.server.config.Configuration; 23 import org.jboss.portal.portlet.metadata.PortletMetaData; 24 import org.jboss.portal.portlet.metadata.PortletApplicationMetaData; 25 import org.jboss.portal.portlet.metadata.PortletModeMetaData; 26 import org.jboss.portal.portlet.metadata.WindowStateMetaData; 27 import org.jboss.portal.portlet.metadata.UserAttributeMetaData; 28 import org.jboss.portal.portlet.metadata.SecurityConstraintMetaData; 29 import org.jboss.portal.portlet.metadata.UserDataConstraintMetaData; 30 import org.jboss.portal.portlet.metadata.TransportGuarantee; 31 import org.jboss.portal.portlet.metadata.PortletPreferencesMetaData; 32 import org.jboss.portal.portlet.metadata.LanguagesMetaData; 33 import org.jboss.portal.portlet.metadata.SecurityRoleRefMetaData; 34 import org.jboss.portal.portlet.metadata.ParameterMetaData; 35 import org.jboss.portal.portlet.metadata.DescriptionMetaData; 36 import org.jboss.portal.portlet.metadata.DisplayNameMetaData; 37 import org.jboss.portal.portlet.PortletUtils; 38 import org.jboss.portal.portlet.PortletInitializationException; 39 import org.jboss.portal.common.util.XML; 40 import org.jboss.portal.common.util.LocaleInfo; 41 import org.jboss.portal.common.util.Tools; 42 import org.jboss.deployment.DeploymentException; 43 import org.w3c.dom.Element ; 44 import org.w3c.dom.NodeList ; 45 import org.w3c.dom.Document ; 46 47 import javax.servlet.ServletContext ; 48 import javax.xml.parsers.DocumentBuilder ; 49 import java.net.URL ; 50 import java.util.Set ; 51 import java.util.HashSet ; 52 import java.util.Iterator ; 53 import java.util.LinkedHashSet ; 54 import java.util.List ; 55 import java.util.ArrayList ; 56 import java.util.Map ; 57 import java.util.HashMap ; 58 import java.util.Locale ; 59 import java.util.Collections ; 60 import java.io.InputStream ; 61 import java.io.File ; 62 import java.io.FileOutputStream ; 63 import java.io.IOException ; 64 65 69 public class PortletAppDeployment extends Deployment 70 { 71 72 75 protected Map configurations; 76 77 80 protected PortletApplicationMetaData portletAppMD; 81 82 85 protected PortletMetaData[] portletMDs; 86 87 90 protected Map jbossPortletElts; 91 92 public PortletAppDeployment(ServerManager serverManager, URL url, PortalWebApp pwa, String appName) 93 { 94 super(serverManager, url, pwa, appName); 95 } 96 97 public void create() throws DeploymentException 98 { 99 readJBossDescriptor(); 101 102 InputStream in = null; 103 try 104 { 105 Configuration config = getServerManager().getConfiguration(); 107 in = config.load("/standardjboss-portlet.xml"); 108 DocumentBuilder builder = XML.getDocumentBuilderFactory().newDocumentBuilder(); 109 Document doc = builder.parse(in); 110 Element portalAppElt = doc.getDocumentElement(); 111 Map configurations = new HashMap (); 112 List componentConfigurationElts = XML.getChildren(portalAppElt, "portlet-configuration"); 113 for (int i = 0; i < componentConfigurationElts.size(); i++) 114 { 115 Element componentConfigurationElt = (Element )componentConfigurationElts.get(i); 116 Element configurationNameElt = XML.getUniqueChild(componentConfigurationElt, "configuration-name", true); 117 String name = XML.asString(configurationNameElt); 118 119 ComponentConfigurationMetaData componentConfigurationMD = new ComponentConfigurationMetaData(name); 120 Element interceptorsElt = XML.getUniqueChild(componentConfigurationElt, "interceptors", true); 121 loadInterceptorSetMetaData(componentConfigurationMD.getInterceptorList(), interceptorsElt); 122 123 configurations.put(componentConfigurationMD.getName(), componentConfigurationMD); 124 } 125 this.configurations = configurations; 126 } 127 catch (Exception e) 128 { 129 throw new DeploymentException("Cannot read default configuration standardjboss-portlet.xml", e); 130 } 131 finally 132 { 133 Tools.safeClose(in); 134 } 135 136 importTLD(); 137 138 try 140 { 141 in = url.openStream(); 142 DocumentBuilder builder = XML.getDocumentBuilderFactory().newDocumentBuilder(); 143 Document doc = builder.parse(url.openStream()); 144 145 Element portletAppElt = doc.getDocumentElement(); 147 portletAppMD = buildPortletAppMetaData(portletAppElt); 148 149 List portletElts = XML.getChildren(portletAppElt, "portlet"); 151 portletMDs = new PortletMetaData[portletElts.size()]; 152 for (int i = 0; i < portletElts.size(); i++) 153 { 154 Element portletElt = (Element )portletElts.get(i); 155 portletMDs[i] = buildPortletMetaData(portletElt); 156 } 157 158 getServerManager().deploy(portletAppMD); 160 for (int i = 0; i < portletMDs.length; i++) 161 { 162 PortletMetaData portletMD = portletMDs[i]; 163 try 164 { 165 getServerManager().deploy(portletMD); 166 } 167 catch (ServiceFailureException e) 168 { 169 Exception failure = e.getException(); 170 if (failure instanceof PortletInitializationException) 171 { 172 PortletInitializationException pie = (PortletInitializationException)failure; 173 log.error("The portlet cannot be started due to an error that occcured during init", pie); 174 } 175 else 176 { 177 throw e; 178 } 179 } 180 } 181 } 182 catch (Exception e) 183 { 184 throw new DeploymentException("Cannot deploy portlet application", e); 185 } 186 finally 187 { 188 Tools.safeClose(in); 189 } 190 } 191 192 195 protected void importTLD() 196 { 197 File targetContextRoot = new File (pwa.getServletContext().getRealPath("/WEB-INF")); 199 if (targetContextRoot.exists() && targetContextRoot.isDirectory()) 200 { 201 InputStream sourceTLD = null; 202 FileOutputStream targetTLD = null; 203 try 204 { 205 sourceTLD = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/jboss/portal/portlet/portlet.tld"); 206 targetTLD = new FileOutputStream (new File (targetContextRoot, "portlet.tld")); 207 Tools.copy(sourceTLD, targetTLD); 208 log.debug("Copied portlet.tld file"); 209 } 210 catch (IOException e) 211 { 212 log.warn("Cannot copy TLD file to the portlet application", e); 213 } 214 finally 215 { 216 Tools.safeClose(sourceTLD); 217 Tools.safeClose(targetTLD); 218 } 219 } 220 else 221 { 222 log.warn("Cannot access the WEB-INF for the portlet application"); 223 } 224 } 225 226 public void destroy() throws DeploymentException 227 { 228 for (int i = 0; i < portletMDs.length; i++) 229 { 230 PortletMetaData portletMD = portletMDs[i]; 231 getServerManager().undeploy(portletMD.getID()); 232 } 233 getServerManager().undeploy(portletAppMD.getID()); 234 } 235 236 238 241 protected PortletMetaData createPortletMetaData(String applicationName, String portletName) 242 { 243 return new PortletMetaData(applicationName, portletName); 244 } 245 246 258 protected PortletApplicationMetaData buildPortletAppMetaData(Element portletAppElt) 259 { 260 PortletApplicationMetaData portletAppMD = new PortletApplicationMetaData(appName, 262 pwa.getServletContext(), 263 pwa.getContextPath(), 264 pwa.getClassLoader()); 265 266 portletAppMD.setVersion(portletAppElt.getAttribute("version")); 268 269 List customPortletModeElts = XML.getChildren(portletAppElt, "custom-portlet-mode"); 271 for (int i = 0; i < customPortletModeElts.size(); i++) 272 { 273 Element customPortletModeElt = (Element )customPortletModeElts.get(i); 274 PortletModeMetaData customPortletModeMD = buildCustomPortletModeMetaData(customPortletModeElt); 275 portletAppMD.getPortletModes().put(customPortletModeMD.getPortletMode(), customPortletModeMD); 276 } 277 278 List customWindowStateElts = XML.getChildren(portletAppElt, "custom-window-state"); 280 for (int i = 0; i < customWindowStateElts.size(); i++) 281 { 282 Element customWindowStateElt = (Element )customWindowStateElts.get(i); 283 WindowStateMetaData customWindowStateMD = buildCustomWindowStateMetaData(customWindowStateElt); 284 portletAppMD.getWindowStates().put(customWindowStateMD.getWindowState(), customWindowStateMD); 285 } 286 287 List userAttributeElts = XML.getChildren(portletAppElt, "user-attribute"); 289 for (int i = 0; i < userAttributeElts.size(); i++) 290 { 291 Element userAttributeElt = (Element )userAttributeElts.get(i); 292 UserAttributeMetaData userAttributeMD = buildUserAttributeMetaData(userAttributeElt); 293 portletAppMD.getUserAttributes().put(userAttributeMD.getName(), userAttributeMD); 294 } 295 296 List securityConstraintElts = XML.getChildren(portletAppElt, "security-constraint"); 298 for (int i = 0; i < securityConstraintElts.size(); i++) 299 { 300 Element securityConstraintElt = (Element )securityConstraintElts.get(i); 301 SecurityConstraintMetaData securityConstraintMD = buildSecurityConstraintMetaData(securityConstraintElt); 302 portletAppMD.getSecurityConstraints().add(securityConstraintMD); 303 } 304 305 return portletAppMD; 306 } 307 308 325 private UserAttributeMetaData buildUserAttributeMetaData(Element userAttributeElt) 326 { 327 UserAttributeMetaData userAttributeMD = new UserAttributeMetaData(); 328 userAttributeMD.setDescriptions(buildDescriptionsMetaData(XML.getChildren(userAttributeElt, "description"))); 329 userAttributeMD.setName(XML.asString(XML.getUniqueChild(userAttributeElt, "name", true))); 330 return userAttributeMD; 331 } 332 333 360 private WindowStateMetaData buildCustomWindowStateMetaData(Element customWindowStateElt) 361 { 362 WindowStateMetaData customWindowStateMD = new WindowStateMetaData(); 363 customWindowStateMD.setDescriptions(buildDescriptionsMetaData(XML.getChildren(customWindowStateElt, "description"))); 364 customWindowStateMD.setWindowState(PortletUtils.decodeWindowState(XML.asString(XML.getUniqueChild(customWindowStateElt, "window-state", true)))); 365 return customWindowStateMD; 366 } 367 368 398 private PortletModeMetaData buildCustomPortletModeMetaData(Element customPortletModeElt) 399 { 400 PortletModeMetaData customPortleModeMD = new PortletModeMetaData(); 401 customPortleModeMD.setDescriptions(buildDescriptionsMetaData(XML.getChildren(customPortletModeElt, "description"))); 402 customPortleModeMD.setPortletMode(PortletUtils.decodePortletMode(XML.asString(XML.getUniqueChild(customPortletModeElt, "portlet-mode", true)))); 403 return customPortleModeMD; 404 } 405 406 436 private SecurityConstraintMetaData buildSecurityConstraintMetaData(Element securityConstraintElt) 437 { 438 Set portletNames = new HashSet (); 439 List portletNameElts = XML.getChildren(XML.getUniqueChild(securityConstraintElt, "portlet-collection", true), "portlet-name"); 440 for (int i = 0; i < portletNameElts.size(); i++) 441 { 442 String portletName = XML.asString((Element )portletNameElts.get(i)); 443 if (portletNames.add(portletName)) 444 { 445 } 447 } 448 449 SecurityConstraintMetaData securityConstraintMD = new SecurityConstraintMetaData(); 450 securityConstraintMD.setDisplayNames(buildDisplayNames(XML.getChildren(securityConstraintElt, "display-name"))); 451 securityConstraintMD.setPortletNames(portletNames); 452 securityConstraintMD.setUserDataConstraint(buildUserDataConstraintMetaData(XML.getUniqueChild(securityConstraintElt, "user-data-constraint", true))); 453 return securityConstraintMD; 454 } 455 456 472 private UserDataConstraintMetaData buildUserDataConstraintMetaData(Element userDataConstraintElt) 473 { 474 UserDataConstraintMetaData userDataConstraintMD = new UserDataConstraintMetaData(); 475 userDataConstraintMD.setDescriptions(buildDescriptionsMetaData(XML.getChildren(userDataConstraintElt, "description"))); 476 userDataConstraintMD.setTransportGuarantee(TransportGuarantee.decode(XML.asString(XML.getUniqueChild(userDataConstraintElt, "transport-guarantee", true)))); 477 return new UserDataConstraintMetaData(); 478 } 479 480 482 protected InterceptorListMetaData buildComponentConfiguration(String portletName) 483 { 484 ComponentConfigurationMetaData configurationMD = (ComponentConfigurationMetaData)configurations.get("Portlet"); 486 487 Element portletElt = (Element )jbossPortletElts.get(portletName); 489 if (portletElt != null) 490 { 491 Element configNameElt = XML.getUniqueChild(portletElt, "config-name", false); 492 if (configNameElt != null) 493 { 494 String configName = XML.asString(configNameElt); 495 log.debug("Using specific configuration for portlet " + portletName + " : " + configName); 496 ComponentConfigurationMetaData tmp = (ComponentConfigurationMetaData)configurations.get(configName); 497 if (tmp != null) 498 { 499 configurationMD = tmp; 500 } 501 else 502 { 503 log.error("No config for the name " + configName + " will use the default configuration"); 504 } 505 } 506 } 507 508 InterceptorListMetaData interceptorList = configurationMD.getInterceptorList(); 510 return interceptorList; 511 } 512 513 542 protected PortletMetaData buildPortletMetaData(final Element portletElt) 543 { 544 Element portletNameElt = XML.getUniqueChild(portletElt, "portlet-name", true); 546 String portletName = XML.asString(portletNameElt); 547 log.debug("Creating portlet " + portletName + " metadata"); 548 549 PortletMetaData portletMD = new PortletMetaData(appName, portletName); 551 552 InterceptorListMetaData interceptorList = buildComponentConfiguration(portletName); 554 portletMD.setInterceptorList(interceptorList); 556 Element portletClassElt = XML.getUniqueChild(portletElt, "portlet-class", true); 558 portletMD.setClassName(XML.asString(portletClassElt)); 559 560 Element expirationCacheElt = XML.getUniqueChild(portletElt, "expiration-cache", false); 562 if (expirationCacheElt != null) 563 { 564 portletMD.setExpirationCache(XML.asString(expirationCacheElt)); 565 } 566 567 Element portletPreferencesElt = XML.getUniqueChild(portletElt, "portlet-preferences", false); 569 PortletPreferencesMetaData preferencesMD = new PortletPreferencesMetaData(); 570 if (portletPreferencesElt != null) 571 { 572 for (Iterator i = buildPreferencesMetaData(portletPreferencesElt).values().iterator(); i.hasNext();) 573 { 574 PreferenceMetaData preferenceMD = (PreferenceMetaData)i.next(); 575 preferencesMD.addPreference(preferenceMD); 576 } 577 Element preferenceValidatorElt = XML.getUniqueChild(portletPreferencesElt, "preferences-validator", false); 578 preferencesMD.setPreferenceValidator(preferenceValidatorElt != null ? XML.asString(preferenceValidatorElt) : null); 579 } 580 portletMD.setPreferences(preferencesMD); 581 582 ContentTypesMetaData contentTypesMD = new ContentTypesMetaData(); 584 for (Iterator i = buildContentTypesMetaData(XML.getChildren(portletElt, "supports")).iterator(); i.hasNext();) 585 { 586 ContentTypeMetaData contentTypeMD = (ContentTypeMetaData)i.next(); 587 contentTypesMD.addContentType(contentTypeMD); 588 } 589 portletMD.setContentTypes(contentTypesMD); 590 portletMD.getDescriptions().putAll(buildDescriptionsMetaData(XML.getChildren(portletElt, "description"))); 591 portletMD.setLanguages(buildLanguagesMetaData(XML.getChildren(portletElt, "supported-locale"), 593 XML.getUniqueChild(portletElt, "resource-bundle", false), 594 XML.getUniqueChild(portletElt, "portlet-info", false))); 595 portletMD.getParameters().putAll(buildParametersMetaData(XML.getChildren(portletElt, "init-param"))); 596 portletMD.getDisplayNames().addAll(buildDisplayNames(XML.getChildren(portletElt, "display-name"))); 597 portletMD.getSecurityRoleRefs().addAll(buildSecurityRolesRefsMetaData(XML.getChildren(portletElt, "security-role-ref"))); 598 return portletMD; 599 } 600 601 private LanguagesMetaData buildLanguagesMetaData(List supportedLocaleElts, Element resourceBundleElt, Element portletInfoElt) 602 { 603 LanguagesMetaData languages = new LanguagesMetaData(); 604 LinkedHashSet supportedLocales = new LinkedHashSet (); 605 for (int i = 0; i < supportedLocaleElts.size(); i++) 606 { 607 String name = XML.asString((Element )supportedLocaleElts.get(i)); 608 LocaleInfo info = LocaleInfo.decodeLocaleInfo(name); 609 if (info != null) 610 { 611 if (!supportedLocales.add(info.getLocale())) 612 { 613 log.warn("Portlet locale " + name + " is declared twice"); 614 } 615 } 616 else 617 { 618 log.warn("Portlet declared locale " + name + " does not exist on this platform, will be ignored"); 619 } 620 } 621 languages.getSupportedLocales().addAll(supportedLocales); 622 if (resourceBundleElt != null) 623 { 624 languages.setResourceBundle(XML.asString(resourceBundleElt)); 625 if (portletInfoElt != null) 626 { 627 languages.setInfo(buildInfoMetaData(portletInfoElt)); 628 } 629 } 630 else 631 { 632 languages.setResourceBundle(null); 633 languages.setInfo(buildInfoMetaData(portletInfoElt)); 634 } 635 return languages; 636 } 637 638 647 private LanguagesMetaData.InfoMetaData buildInfoMetaData(Element portletInfoElt) 648 { 649 LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData(); 650 Element shortTitleElt = XML.getUniqueChild(portletInfoElt, "short-title", false); 651 Element keywordsElt = XML.getUniqueChild(portletInfoElt, "keywords", false); 652 infoMD.setTitle(XML.asString(XML.getUniqueChild(portletInfoElt, "title", true))); 653 infoMD.setShortTitle(shortTitleElt != null ? XML.asString(shortTitleElt) : null); 654 infoMD.setKeywords(keywordsElt != null ? XML.asString(keywordsElt) : null); 655 return infoMD; 656 } 657 658 660 private List buildSecurityRolesRefsMetaData(List securityRoleRefElts) 661 { 662 List securityRoleRefsMD = new ArrayList (); 663 for (int i = 0; i < securityRoleRefElts.size(); i++) 664 { 665 Element securityRoleRefElt = (Element )securityRoleRefElts.get(i); 666 SecurityRoleRefMetaData securityRoleRefMD = buildSecurityRoleRefMetaData(securityRoleRefElt); 667 securityRoleRefsMD.add(securityRoleRefMD); 668 } 669 return securityRoleRefsMD; 670 } 671 672 696 private SecurityRoleRefMetaData buildSecurityRoleRefMetaData(Element securityRoleRefElt) 697 { 698 List descriptionElts = XML.getChildren(securityRoleRefElt, "description"); 699 Element roleNameElt = XML.getUniqueChild(securityRoleRefElt, "role-name", true); 700 Element roleLinkElt = XML.getUniqueChild(securityRoleRefElt, "role-link", false); 701 String roleName = XML.asString(roleNameElt); 702 String roleLink = roleLinkElt != null ? XML.asString(roleLinkElt) : null; 703 Map descriptionsMD = buildDescriptionsMetaData(descriptionElts); 704 SecurityRoleRefMetaData securityRoleRefMD = new SecurityRoleRefMetaData(roleName, roleLink, descriptionsMD); 705 return securityRoleRefMD; 706 } 707 708 724 private ParameterMetaData buildParameterMetadata(Element parameterElt) 725 { 726 ParameterMetaData parameterMD = new ParameterMetaData(); 727 parameterMD.setName(XML.asString(XML.getUniqueChild(parameterElt, "name", true))); 728 parameterMD.setValue(XML.asString(XML.getUniqueChild(parameterElt, "value", true))); 729 parameterMD.setDescriptions(buildDescriptionsMetaData(XML.getChildren(parameterElt, "description"))); 730 return parameterMD; 731 } 732 733 private Map buildParametersMetaData(List parameterElts) 734 { 735 Map parametersMD = new HashMap (); 736 for (int i = 0; i < parameterElts.size(); i++) 737 { 738 ParameterMetaData parameter = buildParameterMetadata((Element )parameterElts.get(i)); 739 parametersMD.put(parameter.getName(), parameter); 740 } 741 return parametersMD; 742 } 743 744 public static Map buildDescriptionsMetaData(List descriptionElts) 745 { 746 Map descriptions = new HashMap (); 747 for (int i = 0; i < descriptionElts.size(); i++) 748 { 749 DescriptionMetaData description = buildDescriptionMetaData((Element )descriptionElts.get(i)); 750 if (descriptions.put(description.getLocale(), description) != null) 751 { 752 } 754 } 755 return descriptions; 756 } 757 758 783 public static DescriptionMetaData buildDescriptionMetaData(Element descriptionElt) 784 { 785 String lang = descriptionElt.getAttribute("xml:lang"); 786 LocaleInfo info = LocaleInfo.decodeLocaleInfo(lang); 787 if (info == null) 788 { 789 info = LocaleInfo.decodeLocaleInfo(Locale.ENGLISH); 791 } 792 DescriptionMetaData descriptionMD = new DescriptionMetaData(); 793 descriptionMD.setDescription(XML.asString(descriptionElt)); 794 descriptionMD.setLocale(info.getLocale()); 795 return descriptionMD; 796 } 797 798 814 public static Set buildContentTypesMetaData(List supportsElts) 815 { 816 Map contentTypes = new HashMap (); 817 for (int i = 0; i < supportsElts.size(); i++) 818 { 819 Element supportsElt = (Element )supportsElts.get(i); 820 HashSet modes = new HashSet (); 821 List portletModeElts = XML.getChildren(supportsElt, "portlet-mode"); 822 for (int j = 0; j < portletModeElts.size(); j++) 823 { 824 Element portletModeElt = (Element )portletModeElts.get(j); 825 String portletMode = XML.asString(portletModeElt); 826 if (modes.add(Mode.create(portletMode))) 827 { 828 } 830 } 831 ContentTypeMetaData contentTypeMD = new ContentTypeMetaData(); 832 contentTypeMD.setContentType(XML.asString(XML.getUniqueChild(supportsElt, "mime-type", true))); 833 contentTypeMD.setModes(modes); 834 if (contentTypes.put(contentTypeMD.getContentType(), contentTypeMD) != null) 835 { 836 } 838 } 839 return new HashSet (contentTypes.values()); 840 } 841 842 878 public static Map buildPreferencesMetaData(Element portletPreferencesElt) 879 { 880 Map preferences = new HashMap (); 881 List preferenceElts = XML.getChildren(portletPreferencesElt, "preference"); 882 for (int i = 0; i < preferenceElts.size(); i++) 883 { 884 Element preferenceElt = (Element )preferenceElts.get(i); 885 PreferenceMetaData preference = buildPreferenceMetaData(preferenceElt); 886 preferences.put(preference.getName(), preference); 887 } 888 return preferences; 889 } 890 891 926 public static PreferenceMetaData buildPreferenceMetaData(Element preferenceElt) 927 { 928 PreferenceMetaData preferenceMD = new PreferenceMetaData(); 929 List valuesElt = XML.getChildren(preferenceElt, "value"); 930 String [] values = new String [valuesElt.size()]; 931 for (int i = 0; i < valuesElt.size(); i++) 932 { 933 values[i] = XML.asString((Element )valuesElt.get(i)); 934 } 935 Element readOnlyElt = XML.getUniqueChild(preferenceElt, "read-only", false); 936 boolean readOnly = false; 937 if (readOnlyElt != null) 938 { 939 String value = XML.asString(readOnlyElt); 940 if ("true".equals(value)) 941 { 942 readOnly = true; 943 } 944 else if ("false".equals(value)) 945 { 946 readOnly = false; 947 } 948 else 949 { 950 readOnly = false; 952 } 953 } 954 else 955 { 956 readOnly = false; 957 } 958 preferenceMD.setName(XML.asString(XML.getUniqueChild(preferenceElt, "name", true))); 959 preferenceMD.setReadOnly(readOnly); 960 preferenceMD.setValues(values); 961 return preferenceMD; 962 } 963 964 987 public static List buildDisplayNames(List displayNameElts) 988 { 989 List displayNames = new ArrayList (); 990 for (int i = 0; i < displayNameElts.size(); i++) 991 { 992 Element displayNameElt = (Element )displayNameElts.get(i); 993 String lang = displayNameElt.getAttributeNS(XML.XML_LANG_NAMESPACE_URI, "lang"); 994 LocaleInfo info = LocaleInfo.decodeLocaleInfo(lang); 995 if (info == null) 996 { 997 info = LocaleInfo.decodeLocaleInfo(Locale.getDefault()); 999 } 1000 DisplayNameMetaData displayName = new DisplayNameMetaData(); 1001 displayName.setDisplayName(XML.asString(displayNameElt)); 1002 displayName.setLocale(info.getLocale()); 1003 displayNames.add(displayName); 1004 } 1009 return displayNames; 1010 } 1011 1012 protected void readJBossDescriptor() 1013 { 1014 ServletContext servletContext = (ServletContext )pwa.getServletContext(); 1015 String contextPath = pwa.getContextPath(); 1016 InputStream in = null; 1017 try 1018 { 1019 in = servletContext.getResourceAsStream("/WEB-INF/jboss-portlet.xml"); 1020 if (in != null) 1021 { 1022 log.debug("Parsing jboss-portlet.xml" + contextPath); 1023 Document doc = XML.getDocumentBuilderFactory().newDocumentBuilder().parse(in); 1024 Element jbossPortletAppElt = doc.getDocumentElement(); 1025 1026 Map jbossPortletElts = new HashMap (); 1028 List portletElts = XML.getChildren(jbossPortletAppElt, "portlet"); 1029 for (int i = 0; i < portletElts.size(); i++) 1030 { 1031 Element portletElt = (Element )portletElts.get(i); 1032 Element portletNameElt = XML.getUniqueChild(portletElt, "portlet-name", true); 1033 String portletName = XML.asString(portletNameElt); 1034 log.debug("Found specific deployment descriptor fragment for portlet " + portletName); 1035 jbossPortletElts.put(portletName, portletElt); 1036 } 1037 1038 this.jbossPortletElts = jbossPortletElts; 1040 } 1041 else 1042 { 1043 this.jbossPortletElts = Collections.EMPTY_MAP; 1044 } 1045 } 1046 catch (Exception e) 1047 { 1048 e.printStackTrace(); 1049 } 1050 finally 1051 { 1052 Tools.safeClose(in); 1053 } 1054 } 1055 1056 1058 1061 public static void loadInterceptorSetMetaData(InterceptorListMetaData interceptorListMD, Element interceptorsElt) 1062 { 1063 NodeList interceptorElts = interceptorsElt.getElementsByTagName("interceptor"); 1064 for (int i = 0; i < interceptorElts.getLength(); i++) 1065 { 1066 Element interceptorElt = (Element )interceptorElts.item(i); 1067 Element interceptorClassElt = XML.getUniqueChild(interceptorElt, 1068 "interceptor-class", 1069 true); 1070 String className = XML.asString(interceptorClassElt); 1071 InterceptorMetaData interceptorMD = new InterceptorMetaData(className); 1072 NodeList interceptorParamElts = interceptorElt.getElementsByTagName("interceptor-param"); 1073 for (int j = 0; j < interceptorParamElts.getLength(); j++) 1074 { 1075 Element interceptorParamElt = (Element )interceptorParamElts.item(j); 1076 String paramName = XML.asString(XML.getUniqueChild(interceptorParamElt, 1077 "param-name", 1078 true)); 1079 String paramValue = XML.asString(XML.getUniqueChild(interceptorParamElt, 1080 "param-value", 1081 true)); 1082 interceptorMD.setParamValue(paramName, paramValue); 1083 } 1084 interceptorListMD.add(interceptorMD); 1085 } 1086 } 1087} 1088 | Popular Tags |