[richfaces-svn-commits] JBoss Rich Faces SVN: r19034 - in branches/RFPL-434/core: impl/src/main/java/org/richfaces/application and 1 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Tue Aug 31 08:12:13 EDT 2010
Author: nbelaevski
Date: 2010-08-31 08:12:12 -0400 (Tue, 31 Aug 2010)
New Revision: 19034
Modified:
branches/RFPL-434/core/api/src/main/java/org/richfaces/application/MessageFactory.java
branches/RFPL-434/core/impl/src/main/java/org/richfaces/application/MessageFactoryImpl.java
branches/RFPL-434/core/impl/src/test/java/org/richfaces/application/MessageFactoryImplTest.java
Log:
Added getMessageText method to MessageFactory
Modified: branches/RFPL-434/core/api/src/main/java/org/richfaces/application/MessageFactory.java
===================================================================
--- branches/RFPL-434/core/api/src/main/java/org/richfaces/application/MessageFactory.java 2010-08-31 11:26:53 UTC (rev 19033)
+++ branches/RFPL-434/core/api/src/main/java/org/richfaces/application/MessageFactory.java 2010-08-31 12:12:12 UTC (rev 19034)
@@ -35,4 +35,6 @@
public FacesMessage createMessage(FacesContext facesContext, Severity severity, Enum<?> messageKey, Object... args);
+ public String getMessageText(FacesContext facesContext, Enum<?> messageKey, Object... args);
+
}
Modified: branches/RFPL-434/core/impl/src/main/java/org/richfaces/application/MessageFactoryImpl.java
===================================================================
--- branches/RFPL-434/core/impl/src/main/java/org/richfaces/application/MessageFactoryImpl.java 2010-08-31 11:26:53 UTC (rev 19033)
+++ branches/RFPL-434/core/impl/src/main/java/org/richfaces/application/MessageFactoryImpl.java 2010-08-31 12:12:12 UTC (rev 19034)
@@ -40,6 +40,53 @@
*/
public class MessageFactoryImpl implements MessageFactory {
+ protected static interface Factory<T> {
+
+ public T create(ResourceBundle bundle, Enum<?> messageKey, Object... args) throws MissingResourceException;
+
+ }
+
+ private static final Factory<FacesMessage> MESSAGE_FACTORY = new Factory<FacesMessage>() {
+
+ public FacesMessage create(ResourceBundle bundle, Enum<?> messageKey, Object... args)
+ throws MissingResourceException {
+
+ String messageId = messageKey.toString();
+
+ String summary = null;
+ String detail = null;
+
+ try {
+ summary = bundle.getString(messageId);
+ detail = bundle.getString(messageId + "_detail");
+ } catch (MissingResourceException e) {
+ // do nothing
+ }
+
+ if (summary != null) {
+ String formattedSummary = MessageFormat.format(summary, args);
+ String formattedDetail = null;
+
+ if (detail != null) {
+ formattedDetail = MessageFormat.format(detail, args);
+ }
+
+ return new FacesMessage(formattedSummary, formattedDetail);
+ }
+
+ return null;
+ }
+ };
+
+ private static final Factory<String> LABEL_FACTORY = new Factory<String>() {
+
+ public String create(ResourceBundle bundle, Enum<?> messageKey, Object... args) throws MissingResourceException {
+ String pattern = bundle.getString(messageKey.toString());
+ return MessageFormat.format(pattern, args);
+ }
+
+ };
+
private BundleLoader bundleLoader;
public MessageFactoryImpl(BundleLoader bundleLoader) {
@@ -73,26 +120,46 @@
throw new NullPointerException("messageKey");
}
- FacesMessage result = null;
+ FacesMessage result = detectLocalesAndCreate(facesContext, MESSAGE_FACTORY, messageKey, args);
- Locale locale = detectLocale(facesContext);
+ if (result != null) {
+ result.setSeverity(severity);
+ }
+
+ return result;
+ }
+
+ public String getMessageText(FacesContext facesContext, Enum<?> messageKey, Object... args) {
+ String text = detectLocalesAndCreate(facesContext, LABEL_FACTORY, messageKey, args);
+ if (text == null) {
+ text = "???" + messageKey + "???";
+ }
+
+ return text;
+ }
+
+ protected <T> T detectLocalesAndCreate(FacesContext context, Factory<T> factory, Enum<?> messageKey, Object... args) {
+
+ T result = null;
+
+ Locale locale = detectLocale(context);
if (locale != null) {
- result = createMessage(facesContext, severity, locale, messageKey, args);
+ result = create(context, factory, locale, messageKey, args);
}
if (result == null) {
Locale defaultLocale = Locale.getDefault();
if (!defaultLocale.equals(locale)) {
- result = createMessage(facesContext, severity, defaultLocale, messageKey, args);
+ result = create(context, factory, defaultLocale, messageKey, args);
}
}
-
+
return result;
}
-
- protected FacesMessage createMessage(FacesContext context, Severity severity, Locale locale, Enum<?> messageKey,
+
+ protected <T> T create(FacesContext context, Factory<T> factory, Locale locale, Enum<?> messageKey,
Object... args) {
MessageBundle messageBundle = messageKey.getClass().getAnnotation(MessageBundle.class);
@@ -101,41 +168,25 @@
return null;
}
- String messageId = messageKey.toString();
+ T result = null;
- String summary = null;
- String detail = null;
-
try {
ResourceBundle bundle = bundleLoader.getApplicationBundle(context, messageKey, locale);
- summary = bundle.getString(messageId);
- detail = bundle.getString(messageId + "_detail");
+ result = factory.create(bundle, messageKey, args);
} catch (MissingResourceException e) {
// do nothing
}
- if (summary == null) {
+ if (result == null) {
try {
ResourceBundle bundle = bundleLoader.getBundle(messageKey, locale);
- summary = bundle.getString(messageId);
- detail = bundle.getString(messageId + "_detail");
+ result = factory.create(bundle, messageKey, args);
} catch (MissingResourceException e) {
// do nothing
}
}
- if (summary == null) {
- return null;
- }
-
- String formattedSummary = MessageFormat.format(summary, args);
- String formattedDetail = null;
-
- if (detail != null) {
- formattedDetail = MessageFormat.format(detail, args);
- }
-
- return new FacesMessage(severity, formattedSummary, formattedDetail);
+ return result;
}
}
Modified: branches/RFPL-434/core/impl/src/test/java/org/richfaces/application/MessageFactoryImplTest.java
===================================================================
--- branches/RFPL-434/core/impl/src/test/java/org/richfaces/application/MessageFactoryImplTest.java 2010-08-31 11:26:53 UTC (rev 19033)
+++ branches/RFPL-434/core/impl/src/test/java/org/richfaces/application/MessageFactoryImplTest.java 2010-08-31 12:12:12 UTC (rev 19034)
@@ -92,6 +92,19 @@
}
@Test
+ public void testGetMessageTextFromFacesBundle() throws Exception {
+ expect(facesEnvironment.getFacesContext().getViewRoot()).andStubReturn(null);
+ expect(facesEnvironment.getApplication().getMessageBundle()).andStubReturn(null);
+ facesEnvironment.replay();
+
+ // {1}: Could not convert ''{0}'' to a string.
+ String message = messageFactory.getMessageText(facesEnvironment.getFacesContext(),
+ FacesMessages.CONVERTER_STRING, "something", "Message");
+
+ assertEquals("Message: Could not convert 'something' to a string.", message);
+ }
+
+ @Test
public void testCreateMessageFromApplicationBundle() throws Exception {
UIViewRoot mockViewRoot = facesEnvironment.createMock(UIViewRoot.class);
expect(mockViewRoot.getLocale()).andStubReturn(new Locale("ru", "RU"));
@@ -126,4 +139,24 @@
assertEquals(FacesMessage.SEVERITY_INFO, inputConversionMessage.getSeverity());
assertEquals("Failure message: Conversion error occurred.", inputConversionMessage.getSummary());
}
+
+ @Test
+ public void testGetMessageTextFromApplicationBundle() throws Exception {
+ UIViewRoot mockViewRoot = facesEnvironment.createMock(UIViewRoot.class);
+ expect(mockViewRoot.getLocale()).andStubReturn(new Locale("ru", "RU"));
+ expect(facesEnvironment.getFacesContext().getViewRoot()).andStubReturn(mockViewRoot);
+ expect(facesEnvironment.getApplication().getMessageBundle()).andStubReturn("org.richfaces.application.MessageFactoryImplTest");
+ facesEnvironment.replay();
+
+ // {1}: ''{0}'' ne konvertiruyetsia v stroku.
+ String message = messageFactory.getMessageText(facesEnvironment.getFacesContext(),
+ FacesMessages.CONVERTER_STRING, "something", "Message");
+
+ assertEquals("Message: 'something' ne konvertiruyetsia v stroku.", message);
+
+ // javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
+ String otherMessage = messageFactory.getMessageText(facesEnvironment.getFacesContext(),
+ FacesMessages.UIINPUT_CONVERSION, "Failure message");
+ assertEquals("Failure message: Conversion error occurred.", otherMessage);
+ }
}
More information about the richfaces-svn-commits
mailing list