You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2007/12/18 08:51:28 UTC

svn commit: r605123 - in /myfaces/trinidad/trunk/trinidad/trinidad-api/src: main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java

Author: matzew
Date: Mon Dec 17 23:51:28 2007
New Revision: 605123

URL: http://svn.apache.org/viewvc?rev=605123&view=rev
Log:
TRINIDAD-859

Modified:
    myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java
    myfaces/trinidad/trunk/trinidad/trinidad-api/src/test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java

Modified: myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java?rev=605123&r1=605122&r2=605123&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/DateTimeConverter.java Mon Dec 17 23:51:28 2007
@@ -681,6 +681,14 @@
     }
   }
 
+  private void _addConveniencePattern(Set<String> patterns)
+  {
+    //see TRINIDAD-859
+    patterns.add("MMMM dd, yy");
+    patterns.add("dd-MMMM-yy");
+    patterns.add("MMMM/dd/yy");
+  }
+  
   private Date _doLenientParse(
     FacesContext context,
     UIComponent component,
@@ -705,12 +713,25 @@
       // Let us save this exception to throw, if in case we have exhausted
       // all possible patterns
       ce = convException;
-      String[] lenientPatterns = _getLenientPatterns(pattern);
-      for (int i = 0; i < lenientPatterns.length; i++)
+      
+      Set<String> patterns = new HashSet<String>();
+      Set<String> lenientPatterns = new HashSet<String>();
+      patterns.add(pattern);
+      
+      // we apply some patterns for convenience reasons 
+      // (see TRINIDAD-859)
+      _addConveniencePattern(patterns);
+      
+      for (String tmpPattern : patterns)
+      {
+        lenientPatterns.addAll(_getLenientPatterns(tmpPattern));
+      }
+
+      for (String lenientPattern : lenientPatterns)
       {
         try
         {
-          return _parse(context, component, value, lenientPatterns[i]);
+          return _parse(context, component, value, lenientPattern);
         }
         catch (ConverterException e)
         {
@@ -1242,7 +1263,7 @@
     return obj == null? 0 : obj.hashCode();
   }
 
-  private static String[] _getLenientPatterns(String pattern)
+  private static Set<String> _getLenientPatterns(String pattern)
   {
     //Create patterns so as to be lenient.
     // allow for
@@ -1271,7 +1292,7 @@
       patterns.add(str2);
     }
 
-    //Apply the leninecy to the above obtained patterns which was obtained
+    // Apply the leninecy to the above obtained patterns which was obtained
     // after replacing MMM -> MM and MMM -> M and the actual pattern
     for (int i = 0; i < leniencyApplicablePatterns.length ; i++)
     {
@@ -1291,7 +1312,7 @@
         patterns.add(leniencyApplicablePatterns[i].replaceAll("\\.", "-"));
       }
     }
-    return patterns.toArray(_EMTPTY_ARRAY);
+    return patterns;
   }
 
   private Object[] _getPlaceHolderParameters(
@@ -1798,8 +1819,6 @@
 
   private boolean _isTransient;
 
-  private static final String[] _EMTPTY_ARRAY = new String[0];
-
   private static final TimeZone _DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT");
 
   private static final int _SHORTISH       = -2;
@@ -1822,4 +1841,4 @@
     dateFactory.set(1998, 10, 29, 15, 45);
     _EXAMPLE_DATE = dateFactory.getTime();
   }
-}
+}
\ No newline at end of file

Modified: myfaces/trinidad/trunk/trinidad/trinidad-api/src/test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-api/src/test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java?rev=605123&r1=605122&r2=605123&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-api/src/test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-api/src/test/java/org/apache/myfaces/trinidad/convert/TrinidadDateTimeConverterTest.java Mon Dec 17 23:51:28 2007
@@ -66,6 +66,63 @@
     return new TestSuite(TrinidadDateTimeConverterTest.class);
   }
   
+  public void testConveniencePatterns()
+  {
+    DateTimeConverter dtConv   = new DateTimeConverter();
+    dtConv.setLocale(Locale.US);
+    
+    //this is what SimpleInputDateRenderer does
+    if(dtConv.getTimeZone() == null)
+    {
+      TimeZone tz = null;
+      tz = _mafct.getTimeZone();
+      if(tz == null)
+        tz = TimeZone.getDefault();
+      dtConv.setTimeZone(tz);
+    }
+    
+    Mock mock = buildMockUIComponent();
+    UIComponent component = (UIComponent) mock.proxy();
+    String[] inputValue = {"15/2/2002", "January 4, 2004", "4-JAnuARY-2004", "JANUARY/4/2007", "Jan 4, 2004",
+        "01/4/2004", "01-4-2004", "01.4.2004", "1/4/2004", "1-4-2004", "1.4.2004", "Jan/4/2004", "Jan-4-2004",
+        "Jan.4.2004", "04-jan-2004", "4-jan-04", "4-jan-2004", "04-jAn-04", "04-JAN-04", "04-JAN-2004",
+        "4-JAN-04", "4-JAN-2004", "January 4, 2004", "Jan 4, 2004"};
+
+    for(int i = 0; i < inputValue.length; i++)
+    {
+      dtConv.getAsObject(facesContext, component, inputValue[i]);
+    }
+  }
+
+  public void testFormatedPatterns()
+  {
+    DateTimeConverter dtConv   = new DateTimeConverter();
+    dtConv.setLocale(Locale.US);
+    
+    //this is what SimpleInputDateRenderer does
+    if(dtConv.getTimeZone() == null)
+    {
+      TimeZone tz = null;
+      tz = _mafct.getTimeZone();
+      if(tz == null)
+        tz = TimeZone.getDefault();
+      dtConv.setTimeZone(tz);
+    }
+    
+    Mock mock = buildMockUIComponent();
+    UIComponent component = (UIComponent) mock.proxy();
+    String[] inputValue = {"15/2/2002", "January 4, 2004", "4-JAnuARY-2004", "JANUARY/4/2007"};
+    String[] formatedStrings = {"2/15/2002", "1/4/2004", "1/4/2004", "1/4/2007"};
+
+    Date convertedDate = null;
+    String returnedString = null;
+    for(int i = 0; i < inputValue.length; i++)
+    {
+      convertedDate = (Date) dtConv.getAsObject(facesContext, component, inputValue[i]);
+      returnedString = dtConv.getAsString(facesContext, component, convertedDate);
+      assertEquals(returnedString, formatedStrings[i]);
+    }
+  }
 
   /**
    * @todo move this to the parent class once JSF fixes the bug
@@ -126,6 +183,7 @@
     dtConv.setDateStyle("Let us unset it ");
     dtConv.setType("Let us un set it");
     dtConv.setSecondaryPattern(secondaryPattern);
+
     // This should work fine
     Date dt = (Date) dtConv.getAsObject(facesContext, component, inputValue);
     assertEquals(true, isEqual(date, dt));
@@ -271,7 +329,7 @@
     //default time is short hh:m A.M/P.M
     //default both
     //let us choose pattern as M/d/yyyy
-    String[] failingValues = {"15/2/2002", "02;30 A.M,", "15/2/2002 22:22 A*M.", "M/d/yyyy"};
+    String[] failingValues = {"15/15/2002", "02;30 A.M,", "15/15/2002 22:22 A*M.", "M/d/yyyy"};
     String[] types         = {"date",   "time",  "both", "pattern"};
     String[] customMessage = {"date",   "time",  "both", "pattern"};
 
@@ -306,7 +364,9 @@
           converter.setMessageDetailConvertDate(customMessage[3]);
         }
         else
+        {
           converter.setType(types[i]);
+        }
 
         converter.getAsObject(facesContext, component, failingValues[i]);
         fail("Expected converter exception");