[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