r220 - in trunk/wikitty-api/src: main/java/org/nuiton/wikitty test/java/org/nuiton/wikitty/api test/java/org/nuiton/wikitty/conform test/java/org/nuiton/wikitty/memory
Author: bleny Date: 2010-08-04 10:04:58 +0200 (Wed, 04 Aug 2010) New Revision: 220 Url: http://nuiton.org/repositories/revision/wikitty/220 Log: #780 adding parseDate and formatDate with tests Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-08-03 13:37:36 UTC (rev 219) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-08-04 08:04:58 UTC (rev 220) @@ -19,7 +19,6 @@ import java.lang.reflect.Constructor; import java.math.BigDecimal; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -36,6 +35,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +52,12 @@ public static final String DEFAULT_VERSION = "0.0"; - public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'Z"; + public static final String[] DATE_FORMAT_ALLOWED = { + DATE_FORMAT, + new SimpleDateFormat().toPattern(), + "dd/MM/yy" + }; /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyUtil.class); @@ -60,24 +66,21 @@ protected static TimeZone CANONICAL_TZ = TimeZone.getTimeZone("UTC"); protected static final Locale CANONICAL_LOCALE = Locale.US; - static final public SimpleDateFormat solrDateFormat = new SolrDateFormat(); + // FastDateFormat is thread-safe + static final public FastDateFormat solrDateFormat = FastDateFormat.getInstance( + DATE_FORMAT, CANONICAL_TZ, CANONICAL_LOCALE); - public static class SolrDateFormat extends SimpleDateFormat { - /** serialVersionUID. */ - private static final long serialVersionUID = 8840047015546468704L; + +// /** All date format parser used to convert string to date */ +// static final protected DateFormat[] parserDateFormats = new DateFormat[] { +// solrDateFormat, DateFormat.getInstance(), +// // TODO poussin 20090813: add other date syntax +// }; - public SolrDateFormat() { - super(DATE_FORMAT, CANONICAL_LOCALE); - setTimeZone(CANONICAL_TZ); - } + static public Date parseDate(String dateAsString) throws ParseException { + return DateUtils.parseDate(dateAsString, DATE_FORMAT_ALLOWED); } - - /** All date format parser used to convert string to date */ - static final protected DateFormat[] parserDateFormats = new DateFormat[] { - solrDateFormat, DateFormat.getInstance(), - // TODO poussin 20090813: add other date syntax - }; - + // TODO poussin 20090902 use spring configuration to add mapping in this // variable /** contains mapping between interface and concret class that must be used */ @@ -432,7 +435,7 @@ if (value != null) { if (value instanceof String) { result = (String) value; - } else if (value instanceof Wikitty) { + } else if (value instanceof WikittyImpl) { result = ((Wikitty) value).getId(); } else if (value instanceof BusinessEntity) { result = ((BusinessEntity) value).getWikittyId(); @@ -454,7 +457,7 @@ } else { // try to convert to Date try { - result = solrDateFormat.parse(value.toString()); + result = parseDate(value.toString()); } catch (ParseException eee) { if (log.isDebugEnabled()) { log.debug("Can't parse date, i try with next parser", eee); @@ -484,7 +487,7 @@ if (value != null) { if (value instanceof String) { result = (String) value; - } else if (value instanceof Wikitty) { + } else if (value instanceof WikittyImpl) { result = ((Wikitty) value).getId(); } else if (value instanceof BusinessEntity) { result = ((BusinessEntity) value).getWikittyId(); @@ -625,10 +628,10 @@ } /** - * Create new instance of WikittyDto with Wikitty object passed in argument. - * If arguement is Interface try to add 'Impl' to find instanciable class. + * Create new instance of BusinessEntity from Wikitty object passed in argument. + * If argument is Interface try to add 'Impl' to find instanciable class. * <p> - * clazz parameter must be child of WikittyDto or business interface + * clazz parameter must be child of Business interface * * * @param <E> entity type @@ -665,7 +668,7 @@ try { // try to find constructor with wikitty argument Constructor<?> cons = clazzInstanciable - .getConstructor(Wikitty.class); + .getConstructor(WikittyImpl.class); Object[] parms = { null }; result = (E) cons.newInstance(parms); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-08-03 13:37:36 UTC (rev 219) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-08-04 08:04:58 UTC (rev 220) @@ -419,4 +419,13 @@ assertNull(label); } */ + + /** check that a date is the same after parse and format */ + @Test + public void testDateConsistency() throws Exception { + Date date = WikittyUtil.parseDate( "30/01/2009" ); + Date dateFormatedAndParsed = WikittyUtil.parseDate( + WikittyUtil.solrDateFormat.format(date)); + assertEquals(date, dateFormatedAndParsed); + } } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java 2010-08-03 13:37:36 UTC (rev 219) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java 2010-08-04 08:04:58 UTC (rev 220) @@ -41,6 +41,7 @@ WikittyExtension ext = ExtensionFactory.create("testExt", "1") .addField("name", TYPE.STRING) .addField("age", TYPE.NUMERIC) + .addField("birth", TYPE.DATE) .extension(); List<Wikitty> wikitties = new LinkedList<Wikitty>(); @@ -48,23 +49,45 @@ w.addExtension(ext); w.setField(ext.getName(), "name", "Guillaume"); w.setField(ext.getName(), "age", "27"); + w.setField(ext.getName(), "birth", "19/04/1968"); wikitties.add( w ); w = new WikittyImpl(); w.addExtension(ext); w.setField(ext.getName(), "name", "Toto"); w.setField(ext.getName(), "age", "125"); + w.setField(ext.getName(), "birth", "19/04/1968 15:12"); wikitties.add( w ); ws.store(null, wikitties); - + + // Testing search on a date criteria Criteria criteria = Search.query() - .eq("testExt.name", "Guillaume") - .criteria(); + .gt("testExt.birth", "19/04/1968 15:00") + .criteria(); PagedResult<String> result = ws.findAllByCriteria(null, criteria); List<String> found = result.getAll(); assertEquals(1, found.size()); Wikitty wikittyFound = ws.restore(null, found.get(0)); + log.info( wikittyFound.getFieldAsString(ext.getName(), "birth") ); + + // Testing search on a date criteria + criteria = Search.query() + .ge("testExt.birth", "19/04/1968") + .criteria(); + result = ws.findAllByCriteria(null, criteria); + found = result.getAll(); + assertEquals(2, found.size()); + wikittyFound = ws.restore(null, found.get(0)); + log.info( wikittyFound.getFieldAsString(ext.getName(), "birth") ); + + criteria = Search.query() + .eq("testExt.name", "Guillaume") + .criteria(); + result = ws.findAllByCriteria(null, criteria); + found = result.getAll(); + assertEquals(1, found.size()); + wikittyFound = ws.restore(null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); criteria = Search.query() Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-08-03 13:37:36 UTC (rev 219) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-08-04 08:04:58 UTC (rev 220) @@ -35,6 +35,7 @@ @Test public void testFilePersistance() throws Exception { File tempPersistFile = File.createTempFile(InMemoryStorageTest.class.getName(), ".tmp"); + tempPersistFile.delete(); tempPersistFile.deleteOnExit(); wikittyService = new WikittyServiceInMemory( tempPersistFile ); @@ -45,6 +46,7 @@ .addField("fieldName2", TYPE.DATE) .extension(); Date date = dateFormater.parse( "30/01/2009" ); + Wikitty w = createWikitty( "MyExtName.fieldName0 = 123," + "MyExtName.fieldName1 = 12.3," +
participants (1)
-
bleny@users.nuiton.org