Author: thomas.heute(a)jboss.com
Date: 2007-11-23 07:55:40 -0500 (Fri, 23 Nov 2007)
New Revision: 9082
Added:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/MetaDataResourceBundleFactory.java
Modified:
branches/JBoss_Portal_Branch_2_6/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/instances.xhtml
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_fr.properties
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet-instances.xml
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/impl/model/instance/persistent/PersistentInstanceDefinition.java
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/instance/metadata/InstanceMetaData.java
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/portal/metadata/PortalObjectMetaData.java
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/test/core/deployment/PortletInstancesMetaDataFactoryTestCase.java
Log:
- Let instances display-names be set in Resource bundles
- Improved portal object display-name i18n code
Modified:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -22,6 +22,17 @@
******************************************************************************/
package org.jboss.portal.core.deployment.jboss;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.xml.parsers.DocumentBuilder;
+
import org.jboss.deployment.DeploymentException;
import org.jboss.mx.util.MBeanProxyExt;
import org.jboss.portal.common.io.IOTools;
@@ -54,16 +65,6 @@
import org.w3c.dom.Element;
import org.xml.sax.EntityResolver;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.xml.parsers.DocumentBuilder;
-import java.io.File;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision$
@@ -286,7 +287,7 @@
Element instanceElt = XMLTools.getUniqueChild(deploymentElt,
"instance", true);
//
- InstanceMetaData metaData =
InstanceMetaData.buildMetaData(instanceElt);
+ InstanceMetaData metaData = InstanceMetaData.buildMetaData(instanceElt,
pwa);
//
Element ifExistsElt = XMLTools.getUniqueChild(deploymentElt,
"if-exists", false);
@@ -455,7 +456,8 @@
// Configure
configureInstance(instance, metaData);
}
-
+
+
private String resolvePortletRef(String ref)
{
return "local." + pwa.getId() + "." + ref;
Modified:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/impl/model/instance/persistent/PersistentInstanceDefinition.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/impl/model/instance/persistent/PersistentInstanceDefinition.java 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/impl/model/instance/persistent/PersistentInstanceDefinition.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -88,14 +88,13 @@
this.mutable = false;
this.portletRef = instanceMD.getPortletRef();
this.instanceId = instanceMD.getId();
- this.displayNames = setDisplayNames(instanceMD.getDisplayName());
+ this.displayNames = getDisplayNamesMap(instanceMD.getDisplayName());
this.relatedSecurityBindings = new HashMap();
this.relatedCustomizations = new HashMap();
- this.displayNames = new HashMap();
this.state = null;
}
- private Map setDisplayNames(LocalizedStringMetaData displayName)
+ private Map getDisplayNamesMap(LocalizedStringMetaData displayName)
{
Map map = new HashMap();
if (displayName == null)
Added:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/MetaDataResourceBundleFactory.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/MetaDataResourceBundleFactory.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/MetaDataResourceBundleFactory.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -0,0 +1,101 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.core.model;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.jboss.logging.Logger;
+import org.jboss.portal.common.i18n.ResourceBundleFactory;
+import org.jboss.portal.common.i18n.ResourceBundleManager;
+import org.jboss.portal.common.util.EmptyResourceBundle;
+
+/**
+ * @author <a href="mailto:theute@jboss.org">Thomas Heute</a>
+ * @version $Revision$
+ */
+public class MetaDataResourceBundleFactory implements ResourceBundleFactory
+{
+
+ private Logger logger = Logger.getLogger(MetaDataResourceBundleFactory.class);
+
+ public static ResourceBundleManager createResourceBundleManager(ClassLoader
classLoader, List supportedLocales, String baseName)
+ {
+ if (classLoader == null)
+ {
+ throw new IllegalArgumentException("Need a non null classloader");
+ }
+ if (supportedLocales == null)
+ {
+ throw new IllegalArgumentException("Supported locales cannot be
null");
+ }
+
+ // Create factory
+ MetaDataResourceBundleFactory factory = new
MetaDataResourceBundleFactory(classLoader, baseName);
+
+ // Create manager
+ ResourceBundleManager manager = new
ResourceBundleManager(EmptyResourceBundle.INSTANCE, factory);
+
+ // Preload declared locales
+ for (Iterator i = supportedLocales.iterator();i.hasNext();)
+ {
+ Locale locale = (Locale)i.next();
+ manager.getResourceBundle(locale);
+ }
+
+ //
+ return manager;
+ }
+
+ private ClassLoader classLoader;
+ private String baseName;
+
+ public MetaDataResourceBundleFactory(ClassLoader classLoader, String baseName)
+ {
+ this.classLoader = classLoader;
+ this.baseName = baseName;
+ }
+
+ public ResourceBundle getBundle(Locale locale) throws IllegalArgumentException
+ {
+ if (locale == null)
+ {
+ throw new IllegalArgumentException("Locale cannot be null");
+ }
+
+ try
+ {
+ return ResourceBundle.getBundle(baseName, locale, classLoader);
+ }
+ catch (MissingResourceException e)
+ {
+ logger.warn("Could not find resource bundle: " + baseName + " for
locale: " + locale);
+ }
+ return EmptyResourceBundle.INSTANCE;
+ }
+
+}
+
Modified:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/instance/metadata/InstanceMetaData.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/instance/metadata/InstanceMetaData.java 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/instance/metadata/InstanceMetaData.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -24,14 +24,19 @@
import org.apache.log4j.Logger;
import org.jboss.portal.common.i18n.LocaleFormat;
+import org.jboss.portal.common.i18n.LocalizedString;
+import org.jboss.portal.common.i18n.ResourceBundleManager;
import org.jboss.portal.common.util.ConversionException;
import org.jboss.portal.common.xml.XMLTools;
+import org.jboss.portal.core.model.MetaDataResourceBundleFactory;
import org.jboss.portal.portlet.impl.jsr168.metadata.DisplayNameMetaData;
import org.jboss.portal.portlet.impl.jsr168.metadata.LocalizedStringMetaData;
import org.jboss.portal.portlet.impl.jsr168.metadata.PreferenceMetaData;
import org.jboss.portal.security.metadata.SecurityConstraintsMetaData;
+import org.jboss.portal.server.deployment.PortalWebApp;
import org.w3c.dom.Element;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -62,7 +67,14 @@
/** The security constraints. */
private SecurityConstraintsMetaData securityConstraints;
+ /** Localized display name */
private LocalizedStringMetaData displayName;
+
+ /** Resource bundle name */
+ private String resourceBundle;
+
+ /** Supported locales */
+ private List supportedLocales;
public InstanceMetaData()
{
@@ -118,10 +130,16 @@
this.securityConstraints = securityConstraints;
}
- public static InstanceMetaData buildMetaData(Element instanceElt)
+ public static InstanceMetaData buildMetaData(Element instanceElt, PortalWebApp pwa)
{
String instanceName = XMLTools.asString(XMLTools.getUniqueChild(instanceElt,
"instance-id", true));
String componentRef = XMLTools.asString(XMLTools.getUniqueChild(instanceElt,
"portlet-ref", true));
+ Element resourceBundleElement = XMLTools.getUniqueChild(instanceElt,
"resource-bundle", false);
+ String resourceBundle = null;
+ if (resourceBundleElement != null)
+ {
+ resourceBundle = XMLTools.asString(resourceBundleElement);
+ }
Iterator displayNamesIt = XMLTools.getChildrenIterator(instanceElt,
"display-name");
// Configure preferences override
@@ -157,13 +175,40 @@
}
}
+ Iterator supportedLocalesIt = XMLTools.getChildrenIterator(instanceElt,
"supported-locale");
+ List supportedLocales = new ArrayList();
+ while (supportedLocalesIt.hasNext())
+ {
+ String localeName = ((Element)supportedLocalesIt.next()).getTextContent();
+ supportedLocales.add(new Locale(localeName));
+ }
+
+ // Set display name
+ if (pwa != null)
+ {
+ ResourceBundleManager bundleMgr =
MetaDataResourceBundleFactory.createResourceBundleManager(pwa.getClassLoader(),
supportedLocales, resourceBundle);
+ LocalizedString localizedString =
bundleMgr.getLocalizedValue("org.jboss.portal.instance.name." + instanceName,
instanceName);
+ Map map = localizedString.getValues();
+ Iterator localeIt = map.values().iterator();
+ while (localeIt.hasNext())
+ {
+ LocalizedString.Value value = (LocalizedString.Value)localeIt.next();
+ DisplayNameMetaData displayNameMD = new DisplayNameMetaData();
+ displayNameMD.setLocale(value.getLocale());
+ displayNameMD.setValue(value.getString());
+ localizedStringMD.getValues().add(displayNameMD);
+ }
+ }
+
// Create the meta data
InstanceMetaData instanceMD = new InstanceMetaData();
instanceMD.setId(instanceName);
instanceMD.setPortletRef(componentRef);
instanceMD.setPreferences(preferencesMD);
instanceMD.setDisplayName(localizedStringMD);
-
+ instanceMD.setResourceBundle(resourceBundle);
+ instanceMD.setSupportedLocales(supportedLocales);
+
// Add the security constraints
Element securityConstraintElt = XMLTools.getUniqueChild(instanceElt,
"security-constraint", false);
if (securityConstraintElt != null)
@@ -300,4 +345,24 @@
preferenceMD.setValues(values);
return preferenceMD;
}
+
+ public String getResourceBundle()
+ {
+ return resourceBundle;
+ }
+
+ public void setResourceBundle(String resourceBundle)
+ {
+ this.resourceBundle = resourceBundle;
+ }
+
+ public List getSupportedLocales()
+ {
+ return supportedLocales;
+ }
+
+ public void setSupportedLocales(List supportedLocales)
+ {
+ this.supportedLocales = supportedLocales;
+ }
}
Modified:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/portal/metadata/PortalObjectMetaData.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/portal/metadata/PortalObjectMetaData.java 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/core/model/portal/metadata/PortalObjectMetaData.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -36,13 +36,12 @@
import org.jboss.portal.common.util.ConversionException;
import org.jboss.portal.common.util.Tools;
import org.jboss.portal.common.xml.XMLTools;
+import org.jboss.portal.core.model.MetaDataResourceBundleFactory;
import org.jboss.portal.core.model.content.spi.ContentProviderRegistry;
import org.jboss.portal.core.model.portal.PortalObject;
import org.jboss.portal.core.model.portal.PortalObjectContainer;
import org.jboss.portal.core.model.portal.PortalObjectPath;
import org.jboss.portal.core.model.portal.PortalObjectPermission;
-import org.jboss.portal.portlet.impl.jsr168.PortletResourceBundleFactory;
-import org.jboss.portal.portlet.impl.jsr168.metadata.LanguagesMetaData;
import org.jboss.portal.security.RoleSecurityBinding;
import org.jboss.portal.security.SecurityConstants;
import org.jboss.portal.security.metadata.SecurityConstraintsMetaData;
@@ -186,16 +185,7 @@
if (resourceBundle != null)
{
- LanguagesMetaData md = new LanguagesMetaData();
- md.setResourceBundle(resourceBundle);
- Iterator it = supportedLocales.iterator();
- while (it.hasNext())
- {
- Locale locale = (Locale)it.next();
- md.getSupportedLocales().add(locale);
- }
-
- ResourceBundleManager bundleMgr =
PortletResourceBundleFactory.createResourceBundleManager(buildContext.getPortalWebApp().getClassLoader(),
md);
+ ResourceBundleManager bundleMgr =
MetaDataResourceBundleFactory.createResourceBundleManager(buildContext.getPortalWebApp().getClassLoader(),
supportedLocales, resourceBundle);
object.setDisplayName(bundleMgr.getLocalizedValue("org.jboss.portal.object.name."
+ object.getId().getPath().toString(PortalObjectPath.LEGACY_FORMAT), object.getName()));
}
Modified:
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/test/core/deployment/PortletInstancesMetaDataFactoryTestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/test/core/deployment/PortletInstancesMetaDataFactoryTestCase.java 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core/src/main/org/jboss/portal/test/core/deployment/PortletInstancesMetaDataFactoryTestCase.java 2007-11-23
12:55:40 UTC (rev 9082)
@@ -88,7 +88,7 @@
Element instanceElt = XMLTools.getUniqueChild(deploymentElt,
"instance", true);
//
- InstanceMetaData metaData = InstanceMetaData.buildMetaData(instanceElt);
+ InstanceMetaData metaData = InstanceMetaData.buildMetaData(instanceElt,
null);
instancesMetadata.add(metaData);
}
}
Modified:
branches/JBoss_Portal_Branch_2_6/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/instances.xhtml
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/instances.xhtml 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/instances.xhtml 2007-11-23
12:55:40 UTC (rev 9082)
@@ -15,6 +15,7 @@
<table id="instancesTable2" width="100%">
<thead class="portlet-section-header">
<tr>
+ <th>Id</th>
<th>Name</th>
<th>Actions</th>
</tr>
@@ -25,11 +26,14 @@
class="#{instance.id == instancemgr.selectedId ?
'portlet-section-selected' : (status.index % 2 == 0 ?
'portlet-section-body' : 'portlet-section-alternate')}">
<td>
<h:commandLink
action="#{instancemgr.selectInstance}">
- <h:outputText value="#{instance.displayName}"
title="#{instance.id}"/>
+ <h:outputText value="#{instance.id}"/>
<f:param name="id"
value="#{instance.id}"/>
<f:param name="plugin" value="info"/>
</h:commandLink>
</td>
+ <td>
+ <h:outputText value="#{instance.displayName}"/>
+ </td>
<td><h:commandLink
action="#{instancemgr.selectInstance}"
styleClass="actionSecurity">
<f:param name="id"
value="#{instance.id}"/>
<f:param name="plugin" value="security"/>
Modified:
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_fr.properties
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_fr.properties 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_fr.properties 2007-11-23
12:55:40 UTC (rev 9082)
@@ -23,4 +23,5 @@
javax.portlet.preference.name.RssXml=URL du flux RSS
javax.portlet.preference.name.expires=Temps d'expiration
-org.jboss.portal.object.name.default.Weather=M\u00E9t\u00E9o
\ No newline at end of file
+org.jboss.portal.object.name.default.Weather=M\u00E9t\u00E9o
+org.jboss.portal.instance.name.WeatherPortletInstance=Portlet M\u00E9t\u00E9o
\ No newline at end of file
Modified:
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet-instances.xml
===================================================================
---
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet-instances.xml 2007-11-23
12:07:22 UTC (rev 9081)
+++
branches/JBoss_Portal_Branch_2_6/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet-instances.xml 2007-11-23
12:55:40 UTC (rev 9082)
@@ -28,9 +28,11 @@
<deployments>
<deployment>
+ <if-exists>overwrite</if-exists>
<instance>
- <display-name xml:lang="en">Weather
portlet</display-name>
- <display-name xml:lang="fr">Portlet météo</display-name>
+ <resource-bundle>WeatherResource</resource-bundle>
+ <supported-locale>fr</supported-locale>
+ <supported-locale>en</supported-locale>
<instance-id>WeatherPortletInstance</instance-id>
<portlet-ref>WeatherPortlet</portlet-ref>
</instance>