[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Tue Jul 10 12:46:57 EDT 2007
User: gavin
Date: 07/07/10 12:46:57
Modified: src/main/org/jboss/seam/core ResourceBundle.java
ResourceLoader.java Validators.java
Added: src/main/org/jboss/seam/core SeamResourceBundle.java
Log:
redesigned resource bundle handling
Revision Changes Path
1.37 +9 -195 jboss-seam/src/main/org/jboss/seam/core/ResourceBundle.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ResourceBundle.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/ResourceBundle.java,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -b -r1.36 -r1.37
--- ResourceBundle.java 10 Jul 2007 10:23:20 -0000 1.36
+++ ResourceBundle.java 10 Jul 2007 16:46:57 -0000 1.37
@@ -1,214 +1,32 @@
package org.jboss.seam.core;
-import static org.jboss.seam.ScopeType.EVENT;
import static org.jboss.seam.annotations.Install.BUILT_IN;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.MissingResourceException;
-
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.log.LogProvider;
-import org.jboss.seam.log.Logging;
-import org.jboss.seam.navigation.Pages;
-import org.jboss.seam.util.EnumerationEnumeration;
-import org.jboss.seam.util.Strings;
/**
- * Factory for a session-scoped localized resource bundle
- * that searches for resources in delegate resource bundles
- * specified in pages.xml, and a configurable list of
- * delegate resource bundles.
+ * Manager component for the Seam resource bundle
+ *
+ * @see SeamResourceBundle
*
* @author Gavin King
*/
@Scope(ScopeType.STATELESS)
@BypassInterceptors
- at Name("org.jboss.seam.core.resourceBundleFactory")
+ at Name("org.jboss.seam.core.resourceBundle")
@Install(precedence=BUILT_IN)
public class ResourceBundle
{
-
- private static final long serialVersionUID = -3236251335438092538L;
- private static final LogProvider log = Logging.getLogProvider(ResourceBundle.class);
-
- private String[] bundleNames = {"messages"};
-
- public class UberResourceBundle extends java.util.ResourceBundle
- {
- private final List<java.util.ResourceBundle> bundles;
-
- public UberResourceBundle(List<java.util.ResourceBundle> bundles)
- {
- this.bundles = bundles;
- }
-
- @Override
- public java.util.Locale getLocale()
- {
- return org.jboss.seam.core.Locale.instance();
- }
-
- @Override
- public Enumeration<String> getKeys()
- {
- List<java.util.ResourceBundle> pageBundles = getPageResourceBundles();
- Enumeration<String>[] enumerations = new Enumeration[ bundles.size() + pageBundles.size() ];
- int i=0;
- for (; i<pageBundles.size(); i++)
+ @Unwrap
+ public java.util.ResourceBundle getResourceBundle()
{
- enumerations[i++] = pageBundles.get(i).getKeys();
- }
- for (; i<bundles.size(); i++)
- {
- enumerations[i] = bundles.get(i).getKeys();
- }
- return new EnumerationEnumeration<String>(enumerations);
- }
-
- @Override
- protected Object handleGetObject(String key)
- {
- List<java.util.ResourceBundle> pageBundles = getPageResourceBundles();
- for (java.util.ResourceBundle pageBundle: pageBundles)
- {
- try
- {
- return pageBundle.getObject(key);
- }
- catch (MissingResourceException mre) {}
- }
-
- for (java.util.ResourceBundle littleBundle: bundles)
- {
- if (littleBundle!=null)
- {
- try
- {
- return littleBundle.getObject(key);
- }
- catch (MissingResourceException mre) {}
- }
- }
-
- return null; //superclass is responsible for throwing MRE
- }
-
- private List<java.util.ResourceBundle> getPageResourceBundles()
- {
- String viewId = Pages.getCurrentViewId();
- if (viewId!=null)
- {
- //we can't cache these bundles, since the viewId
- //may change in the middle of a request
- return Pages.instance().getResourceBundles(viewId);
- }
- else
- {
- return Collections.EMPTY_LIST;
- }
- }
- }
-
- /**
- * The configurable list of delegate resource bundle names
- *
- * @return an array of resource bundle names
- */
- public String[] getBundleNames()
- {
- return bundleNames;
- }
-
- public void setBundleNames(String[] bundleNames)
- {
- this.bundleNames = bundleNames;
- }
-
- @Deprecated
- public void setBundleName(String bundleName)
- {
- bundleNames = bundleName==null ? null : new String[] { bundleName };
- }
-
- @Deprecated
- public String getBundleName()
- {
- return bundleNames==null || bundleNames.length==0 ? null : bundleNames[0];
- }
-
- /**
- * Load a resource bundle by name (may be overridden by subclasses
- * who want to use non-standard resource bundle types).
- *
- * @param bundleName the name of the resource bundle
- * @return an instance of java.util.ResourceBundle
- */
- protected java.util.ResourceBundle loadBundle(String bundleName)
- {
- try
- {
- java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle(
- bundleName,
- org.jboss.seam.core.Locale.instance(),
- Thread.currentThread().getContextClassLoader()
- );
- log.debug("loaded resource bundle: " + bundleName);
- return bundle;
- }
- catch (MissingResourceException mre)
- {
- log.debug("resource bundle missing: " + bundleName);
- return null;
- }
- }
-
- protected java.util.ResourceBundle createUberBundle()
- {
- final List<java.util.ResourceBundle> littleBundles = new ArrayList<java.util.ResourceBundle>();
- if (bundleNames!=null)
- {
- for (String bundleName: bundleNames)
- {
- java.util.ResourceBundle littleBundle = loadBundle(bundleName);
- if (littleBundle!=null) littleBundles.add(littleBundle);
- }
- }
-
- java.util.ResourceBundle validatorBundle = loadBundle("ValidatorMessages");
- if (validatorBundle!=null) littleBundles.add(validatorBundle);
- java.util.ResourceBundle validatorDefaultBundle = loadBundle("org/hibernate/validator/resources/DefaultValidatorMessages");
- if (validatorDefaultBundle!=null) littleBundles.add(validatorDefaultBundle);
-
- return new UberResourceBundle(littleBundles);
- }
-
- /**
- * Create a ResourceBundle in the event scope. When the Locale is changed, LocaleSelector
- * is responsible for removing the ResourceBundle from the event context.
- *
- * @return a ResourceBundle that wraps all the delegate bundles
- */
- @Factory(value="org.jboss.seam.core.resourceBundle", autoCreate=true, scope=EVENT)
- public java.util.ResourceBundle getBundle()
- {
- return createUberBundle();
- }
-
- @Override
- public String toString()
- {
- String concat = bundleNames==null ? "" : Strings.toString( ", ", (Object[]) bundleNames );
- return "ResourceBundle(" + concat + ")";
+ return SeamResourceBundle.getBundle();
}
/**
@@ -216,11 +34,7 @@
*/
public static java.util.ResourceBundle instance()
{
- if ( !Contexts.isSessionContextActive() )
- {
- throw new IllegalStateException("no session context active");
- }
- return (java.util.ResourceBundle) Component.getInstance("org.jboss.seam.core.resourceBundle", true);
+ return (java.util.ResourceBundle) Component.getInstance(ResourceBundle.class);
}
}
1.3 +57 -1 jboss-seam/src/main/org/jboss/seam/core/ResourceLoader.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ResourceLoader.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/ResourceLoader.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- ResourceLoader.java 21 Jun 2007 05:27:27 -0000 1.2
+++ ResourceLoader.java 10 Jul 2007 16:46:57 -0000 1.3
@@ -4,6 +4,7 @@
import java.io.InputStream;
import java.net.URL;
+import java.util.MissingResourceException;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
@@ -12,10 +13,13 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.ServletLifecycle;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
import org.jboss.seam.util.Resources;
+import org.jboss.seam.util.Strings;
/**
- * Access to application resources.
+ * Access to application resources and resource bundles.
*
* @author Gavin King
*
@@ -26,6 +30,25 @@
@Name("org.jboss.seam.core.resourceLoader")
public class ResourceLoader
{
+ private static final LogProvider log = Logging.getLogProvider(ResourceLoader.class);
+
+ private String[] bundleNames = {"messages"};
+
+ /**
+ * The configurable list of delegate resource bundle names
+ *
+ * @return an array of resource bundle names
+ */
+ public String[] getBundleNames()
+ {
+ return bundleNames;
+ }
+
+ public void setBundleNames(String[] bundleNames)
+ {
+ this.bundleNames = bundleNames;
+ }
+
public InputStream getResourceAsStream(String resource)
{
return Resources.getResourceAsStream( resource, ServletLifecycle.getServletContext() );
@@ -36,6 +59,39 @@
return Resources.getResource( resource, ServletLifecycle.getServletContext() );
}
+ /**
+ * Load a resource bundle by name (may be overridden by subclasses
+ * who want to use non-standard resource bundle types).
+ *
+ * @param bundleName the name of the resource bundle
+ * @return an instance of java.util.ResourceBundle
+ */
+ public java.util.ResourceBundle loadBundle(String bundleName)
+ {
+ try
+ {
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle(
+ bundleName,
+ Locale.instance(),
+ Thread.currentThread().getContextClassLoader()
+ );
+ log.debug("loaded resource bundle: " + bundleName);
+ return bundle;
+ }
+ catch (MissingResourceException mre)
+ {
+ log.debug("resource bundle missing: " + bundleName);
+ return null;
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ String concat = bundleNames==null ? "" : Strings.toString( ", ", (Object[]) bundleNames );
+ return "ResourceBundle(" + concat + ")";
+ }
+
public static ResourceLoader instance()
{
return (ResourceLoader) Component.getInstance(ResourceLoader.class, ScopeType.STATELESS);
1.13 +3 -3 jboss-seam/src/main/org/jboss/seam/core/Validators.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Validators.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Validators.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- Validators.java 26 Jun 2007 00:59:34 -0000 1.12
+++ Validators.java 10 Jul 2007 16:46:57 -0000 1.13
@@ -75,9 +75,9 @@
*/
public <T> ClassValidator<T> getValidator(Class<T> modelClass)
{
- java.util.ResourceBundle bundle = ResourceBundle.instance();
+ java.util.ResourceBundle bundle = SeamResourceBundle.getBundle();
Locale none = bundle==null ? new Locale("NONE") : bundle.getLocale();
- Key key = new Key( modelClass, none );
+ Key key = new Key(modelClass, none);
ClassValidator result = classValidators.get(key);
if (result==null)
{
@@ -96,7 +96,7 @@
*/
protected <T> ClassValidator<T> createValidator(Class<T> modelClass)
{
- java.util.ResourceBundle bundle = ResourceBundle.instance();
+ java.util.ResourceBundle bundle = SeamResourceBundle.getBundle();
return bundle==null ?
new ClassValidator(modelClass) :
new ClassValidator(modelClass, bundle);
1.1 date: 2007/07/10 16:46:57; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/core/SeamResourceBundle.java
Index: SeamResourceBundle.java
===================================================================
package org.jboss.seam.core;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.MissingResourceException;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.navigation.Pages;
import org.jboss.seam.util.EnumerationEnumeration;
/**
* The Seam resource bundle which searches for resources in delegate
* resource bundles specified in pages.xml, and a configurable list of
* delegate resource bundles specified in components.xml.
*
* @see ResourceLoader
* @author Gavin King
*
*/
public class SeamResourceBundle extends java.util.ResourceBundle
{
private final List<java.util.ResourceBundle> bundles = new ArrayList<java.util.ResourceBundle>();
private boolean initialized;
/**
* Get an instance for the current Seam Locale
*
* @see Locale
*
* @return a SeamResourceBundle
*/
public static java.util.ResourceBundle getBundle()
{
return java.util.ResourceBundle.getBundle( SeamResourceBundle.class.getName(), Locale.instance() );
}
private void init()
{
if ( !initialized && Contexts.isApplicationContextActive() )
{
ResourceLoader instance = ResourceLoader.instance();
if (instance.getBundleNames()!=null)
{
for ( String bundleName: instance.getBundleNames() )
{
java.util.ResourceBundle littleBundle = instance.loadBundle(bundleName);
if (littleBundle!=null) bundles.add(littleBundle);
}
}
java.util.ResourceBundle validatorBundle = instance.loadBundle("ValidatorMessages");
if (validatorBundle!=null) bundles.add(validatorBundle);
java.util.ResourceBundle validatorDefaultBundle = instance.loadBundle("org/hibernate/validator/resources/DefaultValidatorMessages");
if (validatorDefaultBundle!=null) bundles.add(validatorDefaultBundle);
java.util.ResourceBundle facesBundle = instance.loadBundle("javax.faces.Messages"); //ie. FacesMessage.FACES_MESSAGES;
if (facesBundle!=null) bundles.add(facesBundle);
initialized = true;
}
}
@Override
public Enumeration<String> getKeys()
{
init();
List<java.util.ResourceBundle> pageBundles = getPageResourceBundles();
Enumeration<String>[] enumerations = new Enumeration[ bundles.size() + pageBundles.size() ];
int i=0;
for (; i<pageBundles.size(); i++)
{
enumerations[i++] = pageBundles.get(i).getKeys();
}
for (; i<bundles.size(); i++)
{
enumerations[i] = bundles.get(i).getKeys();
}
return new EnumerationEnumeration<String>(enumerations);
}
@Override
protected Object handleGetObject(String key)
{
init();
List<java.util.ResourceBundle> pageBundles = getPageResourceBundles();
for (java.util.ResourceBundle pageBundle: pageBundles)
{
try
{
return interpolate( pageBundle.getObject(key) );
}
catch (MissingResourceException mre) {}
}
for (java.util.ResourceBundle littleBundle: bundles)
{
if (littleBundle!=null)
{
try
{
return interpolate( littleBundle.getObject(key) );
}
catch (MissingResourceException mre) {}
}
}
return null; //superclass is responsible for throwing MRE
}
private Object interpolate(Object message)
{
return message!=null && message instanceof String ?
Interpolator.instance().interpolate( (String) message ) :
message;
}
private List<java.util.ResourceBundle> getPageResourceBundles()
{
//TODO: oops! A hard dependency to JSF!
String viewId = Pages.getCurrentViewId();
if (viewId!=null)
{
//we can't cache these bundles, since the viewId
//may change in the middle of a request
return Pages.instance().getResourceBundles(viewId);
}
else
{
return Collections.EMPTY_LIST;
}
}
}
More information about the jboss-cvs-commits
mailing list