diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/CronSequenceGenerator.java b/spring-context/src/main/java/org/springframework/scheduling/support/CronSequenceGenerator.java index 607c9241b1e..a088205d438 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/CronSequenceGenerator.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/CronSequenceGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -95,7 +95,6 @@ public class CronSequenceGenerator { parse(expression); } - /** * Return the cron pattern that this sequence generator has been built for. */ @@ -149,22 +148,6 @@ public class CronSequenceGenerator { return calendar.getTime(); } - /** - * Indicates whether the specified cron expression can be parsed into a - * valid cron sequence generator - * @param cronExpression the expression to evaluate - * @return a boolean indicating whether the given expression is a valid cron - * expression - */ - public static boolean isValidExpression(String cronExpression) { - String[] fields = StringUtils.tokenizeToStringArray(cronExpression, " "); - return validateCronFields(fields); - } - - private static boolean validateCronFields(String[] fields) { - return fields != null && fields.length == 6; - } - private void doNext(Calendar calendar, int dot) { List resets = new ArrayList(); @@ -278,7 +261,7 @@ public class CronSequenceGenerator { */ private void parse(String expression) throws IllegalArgumentException { String[] fields = StringUtils.tokenizeToStringArray(expression, " "); - if (!validateCronFields(fields)) { + if (!areValidCronFields(fields)) { throw new IllegalArgumentException(String.format( "Cron expression must consist of 6 fields (found %d in \"%s\")", fields.length, expression)); } @@ -399,6 +382,23 @@ public class CronSequenceGenerator { } + /** + * Determine whether the specified expression represents a valid cron pattern. + *

Specifically, this method verifies that the expression contains six + * fields separated by single spaces. + * @param expression the expression to evaluate + * @return {@code true} if the given expression is a valid cron expression + */ + public static boolean isValidExpression(String expression) { + String[] fields = StringUtils.tokenizeToStringArray(expression, " "); + return areValidCronFields(fields); + } + + private static boolean areValidCronFields(String[] fields) { + return (fields != null && fields.length == 6); + } + + @Override public boolean equals(Object other) { if (this == other) { diff --git a/spring-context/src/test/java/org/springframework/scheduling/support/CronSequenceGeneratorTests.java b/spring-context/src/test/java/org/springframework/scheduling/support/CronSequenceGeneratorTests.java index ee5f0800225..8c558a22456 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/support/CronSequenceGeneratorTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/support/CronSequenceGeneratorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,45 +29,46 @@ import static org.junit.Assert.*; public class CronSequenceGeneratorTests { @Test - public void testAt50Seconds() { + public void at50Seconds() { assertEquals(new Date(2012, 6, 2, 1, 0), new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53, 50))); } @Test - public void testAt0Seconds() { + public void at0Seconds() { assertEquals(new Date(2012, 6, 2, 1, 0), new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53))); } @Test - public void testAt0Minutes() { + public void at0Minutes() { assertEquals(new Date(2012, 6, 2, 1, 0), new CronSequenceGenerator("0 */2 1-4 * * *").next(new Date(2012, 6, 1, 9, 0))); } @Test(expected = IllegalArgumentException.class) - public void testWith0Increment() { + public void with0Increment() { new CronSequenceGenerator("*/0 * * * * *").next(new Date(2012, 6, 1, 9, 0)); } @Test(expected = IllegalArgumentException.class) - public void testWithNegativeIncrement() { + public void withNegativeIncrement() { new CronSequenceGenerator("*/-1 * * * * *").next(new Date(2012, 6, 1, 9, 0)); } @Test - public void testValidExpression() { + public void validExpression() { assertTrue(CronSequenceGenerator.isValidExpression("0 */2 1-4 * * *")); } @Test - public void testNotValidExpression() { + public void invalidExpression() { assertFalse(CronSequenceGenerator.isValidExpression("0 */2 1-4 * * * *")); } @Test - public void testNullExpression() { + public void nullExpression() { assertFalse(CronSequenceGenerator.isValidExpression(null)); } + }