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");