Skip to content

Commit 17d4624

Browse files
authored
Merge pull request #2 from jmrozanec/master
Update from upstream
2 parents f09570e + e46c94d commit 17d4624

27 files changed

Lines changed: 520 additions & 48 deletions

.travis.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
language: java
2+
jobs:
3+
fast_finish: true
24

35
branches:
46
only:
@@ -7,8 +9,6 @@ branches:
79
jdk:
810
- oraclejdk9
911

10-
before_install: "git clone -b travis `git config --get remote.origin.url` target/travis"
11-
1212
addons:
1313
sonarcloud:
1414
organization: "jmrozanec-github"
@@ -17,15 +17,13 @@ addons:
1717
script:
1818
- >
1919
if [ "$TRAVIS_PULL_REQUEST" != "false" ];then
20-
mvn org.jacoco:jacoco-maven-plugin:prepare-agent package --settings target/travis/settings.xml -Dsettings.security=target/travis/settings-security.xml -Dmaven.javadoc.skip=true;
20+
mvn org.jacoco:jacoco-maven-plugin:prepare-agent clean compile test -Dmaven.javadoc.skip=true;
2121
sonar-scanner
2222
fi
2323
- >
2424
if [ "$TRAVIS_PULL_REQUEST" = "false" ];then
2525
mvn org.jacoco:jacoco-maven-plugin:prepare-agent package -Dmaven.javadoc.skip=true;
2626
sonar-scanner
27-
# mvn org.jacoco:jacoco-maven-plugin:prepare-agent package deploy --settings target/travis/settings.xml -Dsettings.security=target/travis/settings-security.xml -Dmaven.javadoc.skip=true;
28-
# sonar-scanner
2927
fi
3028
3129
cache:

.travis.yml.old

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
language: java
2+
jobs:
3+
fast_finish: true
4+
5+
branches:
6+
only:
7+
- master
8+
9+
jdk:
10+
- oraclejdk9
11+
12+
before_install: "git clone -b travis `git config --get remote.origin.url` target/travis"
13+
14+
addons:
15+
sonarcloud:
16+
organization: "jmrozanec-github"
17+
token:
18+
secure: "ZmVdpiC5ivHP72R7NZsv3s9XM9WuZQ//psUbpxJf+HLJGes+dAUppkiIBBICLwGstCCdyfTx1XaW56Gh2zTohrNBhv2S7OmrWwp8+o+dCIb1k6B4PsQ3b6h5bplcorAItMstoBZB8EowG875QENwlrZuB/qBHGy61vgERiNzPgA="
19+
script:
20+
- >
21+
if [ "$TRAVIS_PULL_REQUEST" != "false" ];then
22+
mvn org.jacoco:jacoco-maven-plugin:prepare-agent package --settings target/travis/settings.xml -Dsettings.security=target/travis/settings-security.xml -Dmaven.javadoc.skip=true;
23+
sonar-scanner
24+
fi
25+
- >
26+
if [ "$TRAVIS_PULL_REQUEST" = "false" ];then
27+
mvn org.jacoco:jacoco-maven-plugin:prepare-agent package -Dmaven.javadoc.skip=true;
28+
sonar-scanner
29+
fi
30+
31+
cache:
32+
directories:
33+
- '$HOME/.m2/repository'
34+
- '$HOME/.sonar/cache'
35+
36+
after_success:
37+
- mvn cobertura:cobertura coveralls:cobertura
38+
- bash <(curl -s https://codecov.io/bash)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ cron-utils is available on [Maven central](http://search.maven.org/#search%7Cga%
2020
<dependency>
2121
<groupId>com.cronutils</groupId>
2222
<artifactId>cron-utils</artifactId>
23-
<version>9.0.2</version>
23+
<version>9.1.0</version>
2424
</dependency>
2525

2626
For Android developers, cron-utils 7.0.0 assumes Android 26+. For earlier Android versions consider using cron-utils 6.0.6.

pom.xml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<groupId>com.cronutils</groupId>
1212
<artifactId>cron-utils</artifactId>
13-
<version>9.0.3-SNAPSHOT</version>
13+
<version>9.1.2-SNAPSHOT</version>
1414

1515
<name>cron-utils</name>
1616
<description>A Java library to parse, migrate and validate crons as well as describe them in human readable
@@ -59,7 +59,7 @@
5959
</distributionManagement>
6060

6161
<properties>
62-
<slf4j.version>1.7.12</slf4j.version>
62+
<slf4j.version>1.7.30</slf4j.version>
6363
<junit.version>4.12</junit.version>
6464
<mockito.version>1.10.19</mockito.version>
6565
<powermock.version>1.6.2</powermock.version>
@@ -84,6 +84,12 @@
8484
</dependency>
8585

8686
<!--test dependencies-->
87+
<dependency>
88+
<groupId>org.slf4j</groupId>
89+
<artifactId>slf4j-simple</artifactId>
90+
<version>${slf4j.version}</version>
91+
<scope>test</scope>
92+
</dependency>
8793
<dependency>
8894
<groupId>junit</groupId>
8995
<artifactId>junit</artifactId>
@@ -111,20 +117,28 @@
111117
<dependency>
112118
<groupId>org.quartz-scheduler</groupId>
113119
<artifactId>quartz</artifactId>
114-
<version>2.2.3</version>
120+
<version>2.3.2</version>
115121
<scope>test</scope>
116122
</dependency>
117123
<dependency>
118124
<groupId>org.hibernate</groupId>
119125
<artifactId>hibernate-validator</artifactId>
120-
<version>5.2.4.Final</version>
126+
<!-- https://stackoverflow.com/questions/48323244/java-lang-nosuchmethoderror-javax-validation-bootstrapconfiguration-getclockproExecutionTimeQuartzIntegrationTest -->
127+
<!-- https://stackoverflow.com/questions/24386771/javax-validation-validationexception-hv000183-unable-to-load-javax-el-express -->
128+
<version>5.3.6.Final</version>
121129
<scope>test</scope>
122130
</dependency>
123131
<dependency>
124132
<groupId>javax.el</groupId>
125133
<artifactId>javax.el-api</artifactId>
126134
<version>2.2.5</version>
127-
<scope>test</scope>
135+
<scope>provided</scope>
136+
</dependency>
137+
<dependency>
138+
<groupId>org.glassfish.web</groupId>
139+
<artifactId>javax.el</artifactId>
140+
<version>2.2.4</version>
141+
<scope>provided</scope>
128142
</dependency>
129143
<dependency>
130144
<groupId>org.apache.commons</groupId>
@@ -135,6 +149,7 @@
135149
<groupId>org.projectlombok</groupId>
136150
<artifactId>lombok</artifactId>
137151
<version>1.18.10</version>
152+
<scope>provided</scope>
138153
</dependency>
139154
</dependencies>
140155

src/main/java/com/cronutils/builder/CronBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.cronutils.model.field.CronField;
2424
import com.cronutils.model.field.CronFieldName;
2525
import com.cronutils.model.field.constraint.FieldConstraints;
26+
import com.cronutils.model.field.definition.FieldDefinition;
2627
import com.cronutils.model.field.expression.FieldExpression;
2728
import com.cronutils.model.field.expression.visitor.ValidationFieldExpressionVisitor;
2829
import com.cronutils.utils.VisibleForTesting;
@@ -90,7 +91,10 @@ public Cron instance() {
9091
CronBuilder addField(final CronFieldName name, final FieldExpression expression) {
9192
checkState(definition != null, "CronBuilder not initialized.");
9293

93-
final FieldConstraints constraints = definition.getFieldDefinition(name).getConstraints();
94+
final FieldDefinition fieldDefinition = definition.getFieldDefinition(name);
95+
checkState(fieldDefinition != null, "Cron field definition does not exist: %s", name);
96+
97+
final FieldConstraints constraints = fieldDefinition.getConstraints();
9498
expression.accept(new ValidationFieldExpressionVisitor(constraints));
9599
fields.put(name, new CronField(name, expression, constraints));
96100

src/main/java/com/cronutils/descriptor/CronDescriptor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ public class CronDescriptor {
3232
private static final String BUNDLE = "CronUtilsI18N";
3333
private final ResourceBundle resourceBundle;
3434

35+
/**
36+
* Constructor creating a descriptor for given ResourceBundle.
37+
*
38+
* @param resourceBundle - ResourceBundle which contains descriptions
39+
*/
40+
public CronDescriptor(final ResourceBundle resourceBundle) {
41+
this.resourceBundle = resourceBundle;
42+
}
43+
3544
/**
3645
* Constructor creating a descriptor for given Locale.
3746
*

src/main/java/com/cronutils/descriptor/DescriptionStrategyFactory.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package com.cronutils.descriptor;
1515

16+
import com.cronutils.model.field.expression.Every;
1617
import java.time.DayOfWeek;
1718
import java.time.Month;
1819
import java.time.format.TextStyle;
@@ -102,7 +103,13 @@ public static DescriptionStrategy daysOfMonthInstance(final ResourceBundle bundl
102103
* @return - DescriptionStrategy instance, never null
103104
*/
104105
public static DescriptionStrategy monthsInstance(final ResourceBundle bundle, final FieldExpression expression) {
105-
return new NominalDescriptionStrategy(bundle, integer -> Month.of(integer).getDisplayName(TextStyle.FULL, bundle.getLocale()), expression);
106+
Function<Integer, String> mappingFunction;
107+
if (expression instanceof Every) {
108+
mappingFunction = Object::toString;
109+
} else {
110+
mappingFunction = integer -> Month.of(integer).getDisplayName(TextStyle.FULL, bundle.getLocale());
111+
}
112+
return new NominalDescriptionStrategy(bundle, mappingFunction, expression);
106113
}
107114

108115
/**

src/main/java/com/cronutils/model/definition/CronConstraintsFactory.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@ public static CronConstraint ensureEitherDayOfWeekOrDayOfMonth() {
5353
@Override
5454
public boolean validate(Cron cron) {
5555
CronField dayOfYearField = cron.retrieve(CronFieldName.DAY_OF_YEAR);
56+
CronField dayOfMonthField = cron.retrieve(CronFieldName.DAY_OF_MONTH);
57+
CronField dayOfWeekField = cron.retrieve(CronFieldName.DAY_OF_WEEK);
5658
if (dayOfYearField == null || dayOfYearField.getExpression() instanceof QuestionMark) {
57-
if (!(cron.retrieve(CronFieldName.DAY_OF_MONTH).getExpression() instanceof QuestionMark)) {
58-
return cron.retrieve(CronFieldName.DAY_OF_WEEK).getExpression() instanceof QuestionMark;
59+
if (dayOfMonthField != null && !(dayOfMonthField.getExpression() instanceof QuestionMark)) {
60+
return dayOfWeekField != null && dayOfWeekField.getExpression() instanceof QuestionMark;
5961
} else {
60-
return !(cron.retrieve(CronFieldName.DAY_OF_WEEK).getExpression() instanceof QuestionMark);
62+
return dayOfWeekField != null && !(dayOfWeekField.getExpression() instanceof QuestionMark);
6163
}
6264
}
6365

src/main/java/com/cronutils/model/definition/CronDefinitionBuilder.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,10 @@ public CronDefinition instance() {
182182
*/
183183
private static CronDefinition cron4j() {
184184
return CronDefinitionBuilder.defineCron()
185-
.withMinutes().withStrictRange().and()
186-
.withHours().withStrictRange().and()
187-
.withDayOfMonth().supportsL().withStrictRange().and()
188-
.withMonth().withStrictRange().and()
185+
.withMinutes().withValidRange(0, 59).withStrictRange().and()
186+
.withHours().withValidRange(0, 23).withStrictRange().and()
187+
.withDayOfMonth().withValidRange(0, 31).supportsL().withStrictRange().and()
188+
.withMonth().withValidRange(1, 12).withStrictRange().and()
189189
.withDayOfWeek().withValidRange(0, 6).withMondayDoWValue(1).withStrictRange().and()
190190
.matchDayOfWeekAndDayOfMonth()
191191
.instance();
@@ -258,11 +258,11 @@ private static CronDefinition cron4j() {
258258
*/
259259
private static CronDefinition quartz() {
260260
return CronDefinitionBuilder.defineCron()
261-
.withSeconds().and()
262-
.withMinutes().and()
263-
.withHours().and()
264-
.withDayOfMonth().withValidRange(1, 32).supportsL().supportsW().supportsLW().supportsQuestionMark().and()
265-
.withMonth().withValidRange(1, 13).and()
261+
.withSeconds().withValidRange(0, 59).and()
262+
.withMinutes().withValidRange(0, 59).and()
263+
.withHours().withValidRange(0, 23).and()
264+
.withDayOfMonth().withValidRange(1, 31).supportsL().supportsW().supportsLW().supportsQuestionMark().and()
265+
.withMonth().withValidRange(1, 12).and()
266266
.withDayOfWeek().withValidRange(1, 7).withMondayDoWValue(2).supportsHash().supportsL().supportsQuestionMark().and()
267267
.withYear().withValidRange(1970, 2099).withStrictRange().optional().and()
268268
.withCronValidation(CronConstraintsFactory.ensureEitherDayOfWeekOrDayOfMonth())
@@ -317,7 +317,7 @@ private static CronDefinition quartz() {
317317
* <tr>
318318
* <td>Day of week</td>
319319
* <td>YES</td>
320-
* <td>1-7 or SUN-SAT</td>
320+
* <td>0-7 or SUN-SAT</td>
321321
* <td>* ? , - /</td>
322322
* </tr>
323323
* </table>
@@ -330,12 +330,12 @@ private static CronDefinition quartz() {
330330
*/
331331
private static CronDefinition spring() {
332332
return CronDefinitionBuilder.defineCron()
333-
.withSeconds().withStrictRange().and()
334-
.withMinutes().withStrictRange().and()
335-
.withHours().withStrictRange().and()
336-
.withDayOfMonth().supportsQuestionMark().and()
337-
.withMonth().and()
338-
.withDayOfWeek().withValidRange(1, 7).withMondayDoWValue(2).supportsQuestionMark().and()
333+
.withSeconds().withValidRange(0, 59).withStrictRange().and()
334+
.withMinutes().withValidRange(0, 59).withStrictRange().and()
335+
.withHours().withValidRange(0, 23).withStrictRange().and()
336+
.withDayOfMonth().withValidRange(1, 31).supportsQuestionMark().and()
337+
.withMonth().withValidRange(1, 12).and()
338+
.withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7,0).supportsQuestionMark().and()
339339
.instance();
340340
}
341341

@@ -346,10 +346,10 @@ private static CronDefinition spring() {
346346
*/
347347
private static CronDefinition unixCrontab() {
348348
return CronDefinitionBuilder.defineCron()
349-
.withMinutes().withStrictRange().and()
350-
.withHours().withStrictRange().and()
351-
.withDayOfMonth().withStrictRange().and()
352-
.withMonth().withStrictRange().and()
349+
.withMinutes().withValidRange(0, 59).withStrictRange().and()
350+
.withHours().withValidRange(0, 23).withStrictRange().and()
351+
.withDayOfMonth().withValidRange(1, 31).withStrictRange().and()
352+
.withMonth().withValidRange(1, 12).withStrictRange().and()
353353
.withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7, 0).withStrictRange().and()
354354
.instance();
355355
}

src/main/java/com/cronutils/model/field/constraint/FieldConstraints.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public boolean isInRange(final int value) {
8282
* @return {@code true} if period is compatible, {@code false} otherwise.
8383
*/
8484
public boolean isPeriodInRange(final int period) {
85-
return period > 0 && period <= getEndRange() - getStartRange();
85+
return period > 0 && period <= (getEndRange() - getStartRange() +1) && period <= getEndRange();
8686
}
8787

8888
public Set<String> getStringMappingKeySet() {

0 commit comments

Comments
 (0)