r1588 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty
Author: bpoussin Date: 2014-07-30 18:25:48 +0200 (Wed, 30 Jul 2014) New Revision: 1588 Url: http://forge.nuiton.org/projects/wikitty/repository/revisions/1588 Log: add support for math date for NOW and TODAY Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2014-07-30 13:50:45 UTC (rev 1587) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2014-07-30 16:25:48 UTC (rev 1588) @@ -707,12 +707,30 @@ // try to convert to Date String v = String.valueOf(value); if (StringUtils.startsWithIgnoreCase(v, DATE_NOW)) { - result = new Date(); - v = StringUtils.substringAfter(v, DATE_NOW); + try { + Date tryDate = new Date(); + v = StringUtils.substringAfter(v, DATE_NOW); + result = dateModifier(tryDate, v); + } catch (ParseException eee) { + if (log.isDebugEnabled()) { + log.debug(String.format( + "Can't convert value '%s' of type '%s' to Date because math date is wrong", + value, getClass(value)), eee); + } + } } else if (StringUtils.startsWithIgnoreCase(v, DATE_TODAY)) { - result = new Date(); - result = DateUtil.setMinTimeOfDay(result); - v = StringUtils.substringAfter(v, DATE_TODAY); + try { + Date tryDate = new Date(); + tryDate = DateUtil.setMinTimeOfDay(tryDate); + v = StringUtils.substringAfter(v, DATE_TODAY); + result = dateModifier(tryDate, v); + } catch (ParseException eee) { + if (log.isDebugEnabled()) { + log.debug(String.format( + "Can't convert value '%s' of type '%s' to Date because math date is wrong", + value, getClass(value)), eee); + } + } } else { for (String pattern : DATE_FORMAT_ALLOWED) { // remove ' from pattern because 'T' is 3 char in patten and 1 in value @@ -722,16 +740,12 @@ } String tmp = StringUtils.substring(v, 0, pattern.length()); try { - result = DateUtils.parseDate(tmp, pattern); + Date tryDate = DateUtils.parseDate(tmp, pattern); // parse success String ajust = StringUtils.substring(v, pattern.length()); // try to interpret and of date (ex: +3Years) - if (StringUtils.length(ajust) > 0) { - DateMathParser parser = new DateMathParser(TimeZone.getDefault(), Locale.getDefault()); - parser.setNow(result); - result = parser.parseMath(ajust); - } + result = dateModifier(tryDate, ajust); break; } catch (ParseException eee) { if (log.isDebugEnabled()) { @@ -757,6 +771,19 @@ return result; } + static private Date dateModifier(Date date, String modifier) throws ParseException { + Date result = date; + + // try to interpret and of date (ex: +3Years) + if (StringUtils.length(modifier) > 0) { + DateMathParser parser = new DateMathParser(TimeZone.getDefault(), Locale.getDefault()); + parser.setNow(result); + result = parser.parseMath(modifier); + } + + return result; + } + /** * Return wikitty id and not wikitty objet because this method can be call * on server or client side and it's better to keep conversion between id
participants (1)
-
bpoussin@users.nuiton.org