From b0f551db341b85ba3eff00ed10b5990f906735e2 Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Thu, 17 Sep 2009 22:04:22 +0000 Subject: [PATCH] Added some protection to Period handling in the data dictionary when invalid period expressions are passed i.e. empty strings or non-numeric strings git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16355 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../AbstractCalendarPeriodProvider.java | 20 +++++++++++++++++-- .../dictionary/types/period/PeriodTest.java | 15 ++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/repo/dictionary/types/period/AbstractCalendarPeriodProvider.java b/source/java/org/alfresco/repo/dictionary/types/period/AbstractCalendarPeriodProvider.java index 0c906219bc..eb751f3e20 100644 --- a/source/java/org/alfresco/repo/dictionary/types/period/AbstractCalendarPeriodProvider.java +++ b/source/java/org/alfresco/repo/dictionary/types/period/AbstractCalendarPeriodProvider.java @@ -29,6 +29,8 @@ import java.util.Date; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * Support for calendar based periods @@ -37,7 +39,9 @@ import org.alfresco.service.namespace.QName; */ public abstract class AbstractCalendarPeriodProvider extends AbstractPeriodProvider { - + /** Logger */ + private static Log logger = LogFactory.getLog(AbstractCalendarPeriodProvider.class); + public String getDefaultExpression() { return "1"; @@ -50,7 +54,19 @@ public abstract class AbstractCalendarPeriodProvider extends AbstractPeriodProvi public Date getNextDate(Date date, String expression) { - int value = Integer.parseInt(expression); + int value = 1; + try + { + value = Integer.parseInt(expression); + } + catch (NumberFormatException nfe) + { + // default to 1 and log warning + value = 1; + + if (logger.isWarnEnabled()) + logger.warn("\"" + expression + "\" is not a valid period expression!"); + } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); diff --git a/source/java/org/alfresco/repo/dictionary/types/period/PeriodTest.java b/source/java/org/alfresco/repo/dictionary/types/period/PeriodTest.java index d38a4ef36a..f77b4edc74 100644 --- a/source/java/org/alfresco/repo/dictionary/types/period/PeriodTest.java +++ b/source/java/org/alfresco/repo/dictionary/types/period/PeriodTest.java @@ -882,4 +882,19 @@ public class PeriodTest extends TestCase assertEquals("2011-12-07T13:37:33.104", df.format(period.getNextDate(date))); } + /** + * Test a missing expression, ensure 1 is used as the default + */ + public void testMissingExpression() + { + assertTrue(Period.getProviderNames().contains(Days.PERIOD_TYPE)); + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + + Period period = new Period(Days.PERIOD_TYPE + "|"); + assertNotNull(period.getNextDate(now)); + calendar.setTime(now); + calendar.add(Calendar.DAY_OF_YEAR, 1); + assertEquals(period.getNextDate(now), calendar.getTime()); + } }