diff --git a/CREDITS.txt b/NOTICE.txt similarity index 100% rename from CREDITS.txt rename to NOTICE.txt diff --git a/build.gradle b/build.gradle index 0311bf1..c750a0b 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ wrapper { } ext { - user = 'xbib' + user = 'jprante' name = 'time' description = 'A bundle of Chronic, Prettytime, and org.joda.time.format optimized for Java 8 Time API' inceptionYear = '2016' diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml deleted file mode 100644 index 52fe33c..0000000 --- a/config/checkstyle/checkstyle.xml +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gradle.properties b/gradle.properties index 05b4867..529a10f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,8 @@ group = org.xbib name = time -version = 2.1.1 +version = 2.2.0 -gradle.wrapper.version = 6.6.1 +org.gradle.warning.mode = ALL +gradle.wrapper.version = 7.3 quartz.version = 2.3.2 caliper.version = 1.0-beta-2 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c..7454180 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 33682bb..fbce071 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..1b6c787 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/src/main/java/org/xbib/time/chronic/Options.java b/src/main/java/org/xbib/time/chronic/Options.java index 6945431..156c0bf 100644 --- a/src/main/java/org/xbib/time/chronic/Options.java +++ b/src/main/java/org/xbib/time/chronic/Options.java @@ -1,6 +1,6 @@ package org.xbib.time.chronic; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -9,15 +9,21 @@ import java.time.ZonedDateTime; * */ public class Options { + private ZonedDateTime now; + private ZoneId zoneId; - private Pointer.PointerType context; + + private PointerType context; + private boolean guess; + private int ambiguousTimeRange; + private boolean compatibilityMode; public Options() { - setContext(Pointer.PointerType.FUTURE); + setContext(PointerType.FUTURE); setNow(ZonedDateTime.now()); setZoneId(ZoneId.of("GMT")); setGuess(true); @@ -33,11 +39,11 @@ public class Options { return this; } - public Pointer.PointerType getContext() { + public PointerType getContext() { return context; } - public Options setContext(Pointer.PointerType context) { + public Options setContext(PointerType context) { this.context = context; return this; } diff --git a/src/main/java/org/xbib/time/chronic/Range.java b/src/main/java/org/xbib/time/chronic/Range.java index 0bd6239..e626c8f 100644 --- a/src/main/java/org/xbib/time/chronic/Range.java +++ b/src/main/java/org/xbib/time/chronic/Range.java @@ -4,8 +4,10 @@ package org.xbib.time.chronic; * */ public class Range { - private Long begin; - private Long end; + + private final Long begin; + + private final Long end; public Range(long begin, long end) { this.begin = begin; diff --git a/src/main/java/org/xbib/time/chronic/Tick.java b/src/main/java/org/xbib/time/chronic/Tick.java index 4bb12d8..a5f7c7c 100644 --- a/src/main/java/org/xbib/time/chronic/Tick.java +++ b/src/main/java/org/xbib/time/chronic/Tick.java @@ -4,8 +4,10 @@ package org.xbib.time.chronic; * */ public class Tick { + private int time; - private boolean ambiguous; + + private final boolean ambiguous; public Tick(int time, boolean ambiguous) { this.time = time; diff --git a/src/main/java/org/xbib/time/chronic/Token.java b/src/main/java/org/xbib/time/chronic/Token.java index c202cb8..9bce09f 100644 --- a/src/main/java/org/xbib/time/chronic/Token.java +++ b/src/main/java/org/xbib/time/chronic/Token.java @@ -10,8 +10,10 @@ import java.util.List; * */ public class Token { - private String word; - private List> tags; + + private final String word; + + private final List> tags; public Token(String word) { this.word = word; @@ -35,13 +37,7 @@ public class Token { * @param tagClass tag class */ public void untag(Class tagClass) { - Iterator> tagIter = tags.iterator(); - while (tagIter.hasNext()) { - Tag tag = tagIter.next(); - if (tagClass.isInstance(tag)) { - tagIter.remove(); - } - } + tags.removeIf(tagClass::isInstance); } /** @@ -58,7 +54,6 @@ public class Token { * @param type parameter * @return tag */ - @SuppressWarnings("unchecked") public > T getTag(Class tagClass) { List matches = getTags(tagClass); T matchingTag = null; diff --git a/src/main/java/org/xbib/time/chronic/handlers/Handler.java b/src/main/java/org/xbib/time/chronic/handlers/Handler.java index 9876fc1..f6a2996 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/Handler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/Handler.java @@ -3,6 +3,7 @@ package org.xbib.time.chronic.handlers; import org.xbib.time.chronic.Options; import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; +import org.xbib.time.chronic.repeaters.DayPortion; import org.xbib.time.chronic.repeaters.EnumRepeaterDayPortion; import org.xbib.time.chronic.repeaters.IntegerRepeaterDayPortion; import org.xbib.time.chronic.repeaters.Repeater; @@ -14,7 +15,8 @@ import org.xbib.time.chronic.tags.Grabber; import org.xbib.time.chronic.tags.Ordinal; import org.xbib.time.chronic.tags.OrdinalDay; import org.xbib.time.chronic.tags.Pointer; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; +import org.xbib.time.chronic.tags.Relative; import org.xbib.time.chronic.tags.Scalar; import org.xbib.time.chronic.tags.ScalarDay; import org.xbib.time.chronic.tags.ScalarMonth; @@ -202,7 +204,7 @@ public class Handler { } public static Span getAnchor(List tokens, Options options) { - Grabber grabber = new Grabber(Grabber.Relative.THIS); + Grabber grabber = new Grabber(Relative.THIS); PointerType pointer = PointerType.FUTURE; List> repeaters = getRepeaters(tokens); @@ -219,16 +221,16 @@ public class Handler { head.setNow(options.getNow()); Span outerSpan; - Grabber.Relative grabberType = grabber.getType(); - if (grabberType == Grabber.Relative.LAST) { + Relative grabberType = grabber.getType(); + if (grabberType == Relative.LAST) { outerSpan = head.nextSpan(PointerType.PAST); - } else if (grabberType == Grabber.Relative.THIS) { + } else if (grabberType == Relative.THIS) { if (!repeaters.isEmpty()) { outerSpan = head.thisSpan(PointerType.NONE); } else { outerSpan = head.thisSpan(options.getContext()); } - } else if (grabberType == Grabber.Relative.NEXT) { + } else if (grabberType == Relative.NEXT) { outerSpan = head.nextSpan(PointerType.FUTURE); } else { throw new IllegalArgumentException("Invalid grabber type " + grabberType + "."); @@ -296,14 +298,14 @@ public class Handler { Tag> t1Tag = t1.getTag(RepeaterDayPortion.class); Object t1TagType = t1Tag.getType(); - if (RepeaterDayPortion.DayPortion.MORNING.equals(t1TagType)) { + if (DayPortion.MORNING.equals(t1TagType)) { t1.untag(RepeaterDayPortion.class); - t1.tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.AM)); - } else if (RepeaterDayPortion.DayPortion.AFTERNOON.equals(t1TagType) || - RepeaterDayPortion.DayPortion.EVENING.equals(t1TagType) || - RepeaterDayPortion.DayPortion.NIGHT.equals(t1TagType)) { + t1.tag(new EnumRepeaterDayPortion(DayPortion.AM)); + } else if (DayPortion.AFTERNOON.equals(t1TagType) || + DayPortion.EVENING.equals(t1TagType) || + DayPortion.NIGHT.equals(t1TagType)) { t1.untag(RepeaterDayPortion.class); - t1.tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.PM)); + t1.tag(new EnumRepeaterDayPortion(DayPortion.PM)); } } diff --git a/src/main/java/org/xbib/time/chronic/handlers/HandlerPattern.java b/src/main/java/org/xbib/time/chronic/handlers/HandlerPattern.java index 1aa1584..3700e5a 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/HandlerPattern.java +++ b/src/main/java/org/xbib/time/chronic/handlers/HandlerPattern.java @@ -4,7 +4,8 @@ package org.xbib.time.chronic.handlers; * */ public class HandlerPattern { - private boolean optional; + + private final boolean optional; public HandlerPattern(boolean optional) { this.optional = optional; diff --git a/src/main/java/org/xbib/time/chronic/handlers/HandlerTypePattern.java b/src/main/java/org/xbib/time/chronic/handlers/HandlerTypePattern.java index 0778db6..51ed90e 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/HandlerTypePattern.java +++ b/src/main/java/org/xbib/time/chronic/handlers/HandlerTypePattern.java @@ -4,7 +4,8 @@ package org.xbib.time.chronic.handlers; * */ public class HandlerTypePattern extends HandlerPattern { - private Handler.HandlerType type; + + private final Handler.HandlerType type; public HandlerTypePattern(Handler.HandlerType type) { this(type, false); diff --git a/src/main/java/org/xbib/time/chronic/handlers/IHandler.java b/src/main/java/org/xbib/time/chronic/handlers/IHandler.java index bdbc990..5e1070a 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/IHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/IHandler.java @@ -11,5 +11,6 @@ import java.util.List; */ @FunctionalInterface public interface IHandler { + Span handle(List tokens, Options options); } diff --git a/src/main/java/org/xbib/time/chronic/handlers/ORGRHandler.java b/src/main/java/org/xbib/time/chronic/handlers/ORGRHandler.java index 52a8e86..76c8249 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/ORGRHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/ORGRHandler.java @@ -16,5 +16,4 @@ public class ORGRHandler extends ORRHandler { Span outerSpan = Handler.getAnchor(tokens.subList(2, 4), options); return handle(tokens.subList(0, 2), outerSpan, options); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/ORRHandler.java b/src/main/java/org/xbib/time/chronic/handlers/ORRHandler.java index cd59cb9..c36a454 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/ORRHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/ORRHandler.java @@ -5,7 +5,7 @@ import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; import org.xbib.time.chronic.repeaters.Repeater; import org.xbib.time.chronic.tags.Ordinal; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.temporal.ChronoUnit; import java.util.List; @@ -21,7 +21,7 @@ public abstract class ORRHandler implements IHandler { Integer ordinalValue = tokens.get(0).getTag(Ordinal.class).getType(); Span span = null; for (int i = 0; i < ordinalValue; i++) { - span = repeater.nextSpan(Pointer.PointerType.FUTURE); + span = repeater.nextSpan(PointerType.FUTURE); if (span.getBegin() > outerSpan.getEnd()) { span = null; break; diff --git a/src/main/java/org/xbib/time/chronic/handlers/ORSRHandler.java b/src/main/java/org/xbib/time/chronic/handlers/ORSRHandler.java index cf48eb6..a502fa9 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/ORSRHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/ORSRHandler.java @@ -16,5 +16,4 @@ public class ORSRHandler extends ORRHandler { Span outerSpan = Handler.getAnchor(tokens.subList(3, 4), options); return handle(tokens.subList(0, 2), outerSpan, options); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/RHandler.java b/src/main/java/org/xbib/time/chronic/handlers/RHandler.java index 25f8cbc..2f5da94 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/RHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/RHandler.java @@ -16,5 +16,4 @@ public class RHandler implements IHandler { List ddTokens = Handler.dealiasAndDisambiguateTimes(tokens, options); return Handler.getAnchor(ddTokens, options); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/RmnSdSyHandler.java b/src/main/java/org/xbib/time/chronic/handlers/RmnSdSyHandler.java index 9b23d01..ab9c675 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/RmnSdSyHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/RmnSdSyHandler.java @@ -30,5 +30,4 @@ public class RmnSdSyHandler implements IHandler { } return span; } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/RmnSyHandler.java b/src/main/java/org/xbib/time/chronic/handlers/RmnSyHandler.java index f9a164f..9670479 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/RmnSyHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/RmnSyHandler.java @@ -29,5 +29,4 @@ public class RmnSyHandler implements IHandler { } return span; } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SRPAHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SRPAHandler.java index b373a77..30104b5 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SRPAHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SRPAHandler.java @@ -16,5 +16,4 @@ public class SRPAHandler extends SRPHandler { Span anchorSpan = Handler.getAnchor(tokens.subList(3, tokens.size()), options); return super.handle(tokens, anchorSpan, options); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SRPHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SRPHandler.java index 5eca74d..6acbd9b 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SRPHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SRPHandler.java @@ -6,6 +6,7 @@ import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; import org.xbib.time.chronic.repeaters.Repeater; import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import org.xbib.time.chronic.tags.Scalar; import java.text.ParseException; @@ -19,7 +20,7 @@ public class SRPHandler implements IHandler { public Span handle(List tokens, Span span, Options options) { int distance = tokens.get(0).getTag(Scalar.class).getType(); Repeater repeater = tokens.get(1).getTag(Repeater.class); - Pointer.PointerType pointer = tokens.get(2).getTag(Pointer.class).getType(); + PointerType pointer = tokens.get(2).getTag(Pointer.class).getType(); return repeater.getOffset(span, distance, pointer); } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SdRmnSyHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SdRmnSyHandler.java index e7c36ed..180cbf5 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SdRmnSyHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SdRmnSyHandler.java @@ -21,5 +21,4 @@ public class SdRmnSyHandler extends RmnSdSyHandler { newTokens.addAll(tokens.subList(3, tokens.size())); return super.handle(newTokens, options); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SmSdHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SmSdHandler.java index 399a809..c292d80 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SmSdHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SmSdHandler.java @@ -23,5 +23,4 @@ public class SmSdHandler implements IHandler { ZonedDateTime end = start.plus(1, ChronoUnit.MONTHS); return new Span(start, end); } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SmSdSyHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SmSdSyHandler.java index 7ea64d2..2df38fc 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SmSdSyHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SmSdSyHandler.java @@ -30,5 +30,4 @@ public class SmSdSyHandler implements IHandler { } return span; } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/SmSyHandler.java b/src/main/java/org/xbib/time/chronic/handlers/SmSyHandler.java index 7144d82..d2faefa 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/SmSyHandler.java +++ b/src/main/java/org/xbib/time/chronic/handlers/SmSyHandler.java @@ -29,5 +29,4 @@ public class SmSyHandler implements IHandler { } return span; } - } diff --git a/src/main/java/org/xbib/time/chronic/handlers/TagPattern.java b/src/main/java/org/xbib/time/chronic/handlers/TagPattern.java index fc06b5f..51d8ab2 100644 --- a/src/main/java/org/xbib/time/chronic/handlers/TagPattern.java +++ b/src/main/java/org/xbib/time/chronic/handlers/TagPattern.java @@ -7,7 +7,8 @@ import org.xbib.time.chronic.tags.Tag; */ @SuppressWarnings("rawtypes") public class TagPattern extends HandlerPattern { - private Class tagClass; + + private final Class tagClass; public TagPattern(Class tagClass) { this(tagClass, false); diff --git a/src/main/java/org/xbib/time/chronic/numerizer/Numerizer.java b/src/main/java/org/xbib/time/chronic/numerizer/Numerizer.java index 6380623..39355f0 100644 --- a/src/main/java/org/xbib/time/chronic/numerizer/Numerizer.java +++ b/src/main/java/org/xbib/time/chronic/numerizer/Numerizer.java @@ -48,7 +48,7 @@ public class Numerizer { directNums.add(new DirectNum("nine(\\W|$)", "9$1")); directNums.add(new DirectNum("ten", "10")); directNums.add(new DirectNum("\\ba\\b", "1")); - DIRECT_NUMS = directNums.toArray(new DirectNum[directNums.size()]); + DIRECT_NUMS = directNums.toArray(new DirectNum[0]); List tenPrefixes = new LinkedList<>(); tenPrefixes.add(new TenPrefix("twenty", 20)); @@ -60,7 +60,7 @@ public class Numerizer { tenPrefixes.add(new TenPrefix("eighty", 80)); tenPrefixes.add(new TenPrefix("ninety", 90)); tenPrefixes.add(new TenPrefix("ninty", 90)); - TEN_PREFIXES = tenPrefixes.toArray(new TenPrefix[tenPrefixes.size()]); + TEN_PREFIXES = tenPrefixes.toArray(new TenPrefix[0]); List bigPrefixes = new LinkedList<>(); bigPrefixes.add(new BigPrefix("hundred", 100L)); @@ -68,7 +68,7 @@ public class Numerizer { bigPrefixes.add(new BigPrefix("million", 1000000L)); bigPrefixes.add(new BigPrefix("billion", 1000000000L)); bigPrefixes.add(new BigPrefix("trillion", 1000000000000L)); - BIG_PREFIXES = bigPrefixes.toArray(new BigPrefix[bigPrefixes.size()]); + BIG_PREFIXES = bigPrefixes.toArray(new BigPrefix[0]); } public static String numerize(String str) { @@ -81,7 +81,7 @@ public class Numerizer { for (Prefix tp : Numerizer.TEN_PREFIXES) { Matcher matcher = tp.getName().matcher(numerizedStr); if (matcher.find()) { - StringBuffer matcherBuffer = new StringBuffer(); + StringBuilder matcherBuffer = new StringBuilder(); do { if (matcher.group(1) == null) { matcher.appendReplacement(matcherBuffer, String.valueOf(tp.getNumber())); @@ -97,7 +97,7 @@ public class Numerizer { for (Prefix bp : Numerizer.BIG_PREFIXES) { Matcher matcher = bp.getName().matcher(numerizedStr); if (matcher.find()) { - StringBuffer matcherBuffer = new StringBuffer(); + StringBuilder matcherBuffer = new StringBuilder(); do { if (matcher.group(1) == null) { matcher.appendReplacement(matcherBuffer, String.valueOf(bp.getNumber())); @@ -113,7 +113,7 @@ public class Numerizer { } Matcher matcher = Numerizer.DEHAALFER.matcher(numerizedStr); if (matcher.find()) { - StringBuffer matcherBuffer = new StringBuffer(); + StringBuilder matcherBuffer = new StringBuilder(); do { matcher.appendReplacement(matcherBuffer, String.valueOf(Float.parseFloat(matcher.group(1).trim()) + 0.5f)); @@ -142,8 +142,10 @@ public class Numerizer { * */ private static class DirectNum { - private Pattern name; - private String number; + + private final Pattern name; + + private final String number; DirectNum(String name, String number) { this.name = Pattern.compile(name, Pattern.CASE_INSENSITIVE); @@ -163,8 +165,10 @@ public class Numerizer { * */ static class Prefix { - private Pattern name; - private long number; + + private final Pattern name; + + private final long number; Prefix(Pattern name, long number) { this.name = name; diff --git a/src/main/java/org/xbib/time/chronic/repeaters/DayName.java b/src/main/java/org/xbib/time/chronic/repeaters/DayName.java new file mode 100644 index 0000000..75dc09e --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/repeaters/DayName.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.repeaters; + +/** + * + */ +public enum DayName { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY +} diff --git a/src/main/java/org/xbib/time/chronic/repeaters/DayPortion.java b/src/main/java/org/xbib/time/chronic/repeaters/DayPortion.java new file mode 100644 index 0000000..cf8b34f --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/repeaters/DayPortion.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.repeaters; + +/** + * + */ +public enum DayPortion { + AM, PM, MORNING, AFTERNOON, EVENING, NIGHT +} diff --git a/src/main/java/org/xbib/time/chronic/repeaters/EnumRepeaterDayPortion.java b/src/main/java/org/xbib/time/chronic/repeaters/EnumRepeaterDayPortion.java index 212a12e..581b8c7 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/EnumRepeaterDayPortion.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/EnumRepeaterDayPortion.java @@ -5,12 +5,18 @@ import org.xbib.time.chronic.Range; /** * */ -public class EnumRepeaterDayPortion extends RepeaterDayPortion { +public class EnumRepeaterDayPortion extends RepeaterDayPortion { + private static final Range AM_RANGE = new Range(0, 12 * 60 * 60); // 12am-12pm + private static final Range PM_RANGE = new Range(12 * 60 * 60, 24 * 60 * 60 - 1); // 12pm-12am + private static final Range MORNING_RANGE = new Range(6 * 60 * 60, 12 * 60 * 60); // 6am-12pm + private static final Range AFTERNOON_RANGE = new Range(13 * 60 * 60, 17 * 60 * 60); // 1pm-5pm + private static final Range EVENING_RANGE = new Range(17 * 60 * 60, 20 * 60 * 60); // 5pm-8pm + private static final Range NIGHT_RANGE = new Range(20 * 60 * 60, 24 * 60 * 60); // 8pm-12pm public EnumRepeaterDayPortion(DayPortion type) { diff --git a/src/main/java/org/xbib/time/chronic/repeaters/IntegerRepeaterDayPortion.java b/src/main/java/org/xbib/time/chronic/repeaters/IntegerRepeaterDayPortion.java index 21e1811..ef0aea0 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/IntegerRepeaterDayPortion.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/IntegerRepeaterDayPortion.java @@ -6,6 +6,7 @@ import org.xbib.time.chronic.Range; * */ public class IntegerRepeaterDayPortion extends RepeaterDayPortion { + public IntegerRepeaterDayPortion(Integer type) { super(type); } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/MonthName.java b/src/main/java/org/xbib/time/chronic/repeaters/MonthName.java new file mode 100644 index 0000000..48143f8 --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/repeaters/MonthName.java @@ -0,0 +1,9 @@ +package org.xbib.time.chronic.repeaters; + +/** + * + */ +public enum MonthName { + ZEROMONTH_DO_NOT_REMOVE, + JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER +} diff --git a/src/main/java/org/xbib/time/chronic/repeaters/Repeater.java b/src/main/java/org/xbib/time/chronic/repeaters/Repeater.java index 40bb080..90baae5 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/Repeater.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/Repeater.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Options; import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import org.xbib.time.chronic.tags.Tag; import java.util.List; @@ -65,25 +65,25 @@ public abstract class Repeater extends Tag implements Comparable { +public class RepeaterDayName extends Repeater { + private static final int DAY_SECONDS = 86400; + private static final Pattern MON_PATTERN = Pattern.compile("^m[ou]n(day)?$"); + private static final Pattern TUE_PATTERN = Pattern.compile("^t(ue|eu|oo|u|)s(day)?$"); + private static final Pattern TUE_PATTERN_1 = Pattern.compile("^tue$"); + private static final Pattern WED_PATTERN_1 = Pattern.compile("^we(dnes|nds|nns)day$"); + private static final Pattern WED_PATTERN_2 = Pattern.compile("^wed$"); + private static final Pattern THU_PATTERN_1 = Pattern.compile("^th(urs|ers)day$"); + private static final Pattern THU_PATTERN_2 = Pattern.compile("^thu$"); + private static final Pattern FRI_PATTERN = Pattern.compile("^fr[iy](day)?$"); + private static final Pattern SAT_PATTERN = Pattern.compile("^sat(t?[ue]rday)?$"); + private static final Pattern SUN_PATTERN = Pattern.compile("^su[nm](day)?$"); + private ZonedDateTime currentDayStart; public RepeaterDayName(DayName type) { @@ -106,10 +118,4 @@ public class RepeaterDayName extends Repeater { return super.toString() + "-dayname-" + getType(); } - /** - * - */ - public enum DayName { - MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY - } } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterDayPortion.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterDayPortion.java index 6054dba..18ca47e 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterDayPortion.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterDayPortion.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Range; import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -18,14 +18,21 @@ import java.util.regex.Pattern; public abstract class RepeaterDayPortion extends Repeater { private static final Pattern AM_PATTERN = Pattern.compile("^ams?$"); + private static final Pattern PM_PATTERN = Pattern.compile("^pms?$"); + private static final Pattern MORNING_PATTERN = Pattern.compile("^mornings?$"); + private static final Pattern AFTERNOON_PATTERN = Pattern.compile("^afternoons?$"); + private static final Pattern EVENING_PATTERN = Pattern.compile("^evenings?$"); + private static final Pattern NIGHT_PATTERN = Pattern.compile("^(night|nite)s?$"); private static final int FULL_DAY_SECONDS = 60 * 60 * 24; - private Range range; + + private final Range range; + private Span currentSpan; public RepeaterDayPortion(T type) { @@ -149,10 +156,4 @@ public abstract class RepeaterDayPortion extends Repeater { return super.toString() + "-dayportion-" + getType(); } - /** - * - */ - public enum DayPortion { - AM, PM, MORNING, AFTERNOON, EVENING, NIGHT - } } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterFortnight.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterFortnight.java index 982905f..da9d212 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterFortnight.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterFortnight.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterFortnight extends RepeaterUnit { + public static final int FORTNIGHT_SECONDS = 1209600; // (14 * 24 * 60 * 60) private ZonedDateTime currentFortnightStart; @@ -23,12 +24,12 @@ public class RepeaterFortnight extends RepeaterUnit { protected Span internalNextSpan(PointerType pointer) { if (currentFortnightStart == null) { if (pointer == PointerType.FUTURE) { - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span nextSundaySpan = sundayRepeater.nextSpan(PointerType.FUTURE); currentFortnightStart = nextSundaySpan.getBeginCalendar(); } else if (pointer == PointerType.PAST) { - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow().plus(RepeaterDay.DAY_SECONDS, ChronoUnit.SECONDS)); sundayRepeater.nextSpan(PointerType.PAST); sundayRepeater.nextSpan(PointerType.PAST); @@ -55,7 +56,7 @@ public class RepeaterFortnight extends RepeaterUnit { Span span; if (pointer == PointerType.FUTURE) { ZonedDateTime thisFortnightStart = ymdh(getNow()).plus(RepeaterHour.HOUR_SECONDS, ChronoUnit.SECONDS); - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); sundayRepeater.thisSpan(PointerType.FUTURE); Span thisSundaySpan = sundayRepeater.thisSpan(PointerType.FUTURE); @@ -63,7 +64,7 @@ public class RepeaterFortnight extends RepeaterUnit { span = new Span(thisFortnightStart, thisFortnightEnd); } else if (pointer == PointerType.PAST) { ZonedDateTime thisFortnightEnd = ymdh(getNow()); - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); ZonedDateTime thisFortnightStart = lastSundaySpan.getBeginCalendar(); diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterHour.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterHour.java index d44e78c..5880ad5 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterHour.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterHour.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterHour extends RepeaterUnit { + public static final int HOUR_SECONDS = 3600; private ZonedDateTime currentDayStart; diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMinute.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMinute.java index 8e704a2..7523e4d 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMinute.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMinute.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterMinute extends RepeaterUnit { + public static final int MINUTE_SECONDS = 60; private ZonedDateTime currentMinuteStart; diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonth.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonth.java index 608c700..a87f955 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonth.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonth.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterMonth extends RepeaterUnit { + private static final int MONTH_SECONDS = 2592000; // 30 * 24 * 60 * 60 private ZonedDateTime currentMonthStart; diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonthName.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonthName.java index 2ecb5fd..397af5c 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonthName.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterMonthName.java @@ -2,7 +2,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Token; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -13,21 +13,34 @@ import java.util.regex.Pattern; /** * */ -public class RepeaterMonthName extends Repeater { +public class RepeaterMonthName extends Repeater { + private static final Pattern JAN_PATTERN = Pattern.compile("^jan\\.?(uary)?$"); + private static final Pattern FEB_PATTERN = Pattern.compile("^feb\\.?(ruary)?$"); + private static final Pattern MAR_PATTERN = Pattern.compile("^mar\\.?(ch)?$"); + private static final Pattern APR_PATTERN = Pattern.compile("^apr\\.?(il)?$"); + private static final Pattern MAY_PATTERN = Pattern.compile("^may$"); + private static final Pattern JUN_PATTERN = Pattern.compile("^jun\\.?e?$"); + private static final Pattern JUL_PATTERN = Pattern.compile("^jul\\.?y?$"); + private static final Pattern AUG_PATTERN = Pattern.compile("^aug\\.?(ust)?$"); + private static final Pattern SEP_PATTERN = Pattern.compile("^sep\\.?(t\\.?|tember)?$"); + private static final Pattern OCT_PATTERN = Pattern.compile("^oct\\.?(ober)?$"); + private static final Pattern NOV_PATTERN = Pattern.compile("^nov\\.?(ember)?$"); + private static final Pattern DEC_PATTERN = Pattern.compile("^dec\\.?(ember)?$"); private static final int MONTH_SECONDS = 2592000; // 30 * 24 * 60 * 60 + private ZonedDateTime currentMonthBegin; public RepeaterMonthName(MonthName type) { @@ -146,12 +159,4 @@ public class RepeaterMonthName extends Repeater { return super.toString() + "-monthname-" + getType(); } - /** - * - */ - public enum MonthName { - ZEROMONTH_DO_NOT_REMOVE, - JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER - } - } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterSecond.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterSecond.java index 12685d1..2b2ba81 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterSecond.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterSecond.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterSecond extends RepeaterUnit { + private static final int SECOND_SECONDS = 1; private ZonedDateTime secondStart; @@ -22,7 +23,6 @@ public class RepeaterSecond extends RepeaterUnit { } else { secondStart = secondStart.plus(direction, ChronoUnit.SECONDS); } - return new Span(secondStart, ChronoUnit.SECONDS, 1); } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterTime.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterTime.java index fad681d..bcf43f9 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterTime.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterTime.java @@ -4,7 +4,7 @@ import org.xbib.time.chronic.Options; import org.xbib.time.chronic.Span; import org.xbib.time.chronic.Tick; import org.xbib.time.chronic.Token; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -16,13 +16,17 @@ import java.util.regex.Pattern; * */ public class RepeaterTime extends Repeater { + private static final Pattern TIME_PATTERN = Pattern.compile("^\\d{1,2}(:?\\d{2})?([\\.:]?\\d{2})?$"); + private ZonedDateTime currentTime; public RepeaterTime(String time) { super(null); String t = time.replaceAll(":", ""); Tick type; + boolean ambiguous = time.contains(":") && Integer.parseInt(t.substring(0, 1)) != 0 && + Integer.parseInt(t.substring(0, 2)) <= 12; int length = t.length(); if (length <= 2) { int hours = Integer.parseInt(t); @@ -37,8 +41,6 @@ public class RepeaterTime extends Repeater { int minutesInSeconds = Integer.parseInt(t.substring(1)) * 60; type = new Tick(hoursInSeconds + minutesInSeconds, true); } else if (length == 4) { - boolean ambiguous = time.contains(":") && Integer.parseInt(t.substring(0, 1)) != 0 && - Integer.parseInt(t.substring(0, 2)) <= 12; int hours = Integer.parseInt(t.substring(0, 2)); int hoursInSeconds = hours * 60 * 60; int minutesInSeconds = Integer.parseInt(t.substring(2)) * 60; @@ -53,8 +55,6 @@ public class RepeaterTime extends Repeater { int seconds = Integer.parseInt(t.substring(3)); type = new Tick(hoursInSeconds + minutesInSeconds + seconds, true); } else if (length == 6) { - boolean ambiguous = time.contains(":") && Integer.parseInt(t.substring(0, 1)) != 0 && - Integer.parseInt(t.substring(0, 2)) <= 12; int hours = Integer.parseInt(t.substring(0, 2)); int hoursInSeconds = hours * 60 * 60; int minutesInSeconds = Integer.parseInt(t.substring(2, 4)) * 60; @@ -84,30 +84,31 @@ public class RepeaterTime extends Repeater { private static Integer integerValue(String str) { if (str != null) { String s = str.toLowerCase(); - if ("one".equals(s)) { - return 1; - } else if ("two".equals(s)) { - return 2; - } else if ("three".equals(s)) { - return 3; - } else if ("four".equals(s)) { - return 4; - } else if ("five".equals(s)) { - return 5; - } else if ("six".equals(s)) { - return 6; - } else if ("seven".equals(s)) { - return 7; - } else if ("eight".equals(s)) { - return 8; - } else if ("nine".equals(s)) { - return 9; - } else if ("ten".equals(s)) { - return 10; - } else if ("eleven".equals(s)) { - return 11; - } else if ("twelve".equals(s)) { - return 12; + switch (s) { + case "one": + return 1; + case "two": + return 2; + case "three": + return 3; + case "four": + return 4; + case "five": + return 5; + case "six": + return 6; + case "seven": + return 7; + case "eight": + return 8; + case "nine": + return 9; + case "ten": + return 10; + case "eleven": + return 11; + case "twelve": + return 12; } } return null; @@ -158,8 +159,8 @@ public class RepeaterTime extends Repeater { } } } else { + List pastDates = new LinkedList<>(); if (tick.isAmbiguous()) { - List pastDates = new LinkedList<>(); pastDates.add(midnight.plus(halfDay + (long) tick.intValue(), ChronoUnit.SECONDS)); pastDates.add(midnight.plus(tick.intValue(), ChronoUnit.SECONDS)); pastDates.add(yesterdayMidnight.plus(tick.intValue() * 2L, ChronoUnit.SECONDS)); @@ -171,7 +172,6 @@ public class RepeaterTime extends Repeater { } } } else { - List pastDates = new LinkedList<>(); pastDates.add(midnight.plus(tick.intValue(), ChronoUnit.SECONDS)); pastDates.add(yesterdayMidnight.plus(tick.intValue(), ChronoUnit.SECONDS)); for (ZonedDateTime pastDate : pastDates) { @@ -183,18 +183,15 @@ public class RepeaterTime extends Repeater { } } } - if (!done && currentTime == null) { throw new IllegalStateException("Current time cannot be null at this point."); } } - if (!first) { int increment = tick.isAmbiguous() ? halfDay : fullDay; long direction = pointer == PointerType.FUTURE ? 1L : -1L; currentTime = currentTime.plus(direction * increment, ChronoUnit.SECONDS); } - return new Span(currentTime, currentTime.plus(getWidth(), ChronoUnit.SECONDS)); } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterUnit.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterUnit.java index d758ce5..d32e08f 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterUnit.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterUnit.java @@ -10,14 +10,23 @@ import java.util.regex.Pattern; * */ public abstract class RepeaterUnit extends Repeater { + private static final Pattern YEAR_PATTERN = Pattern.compile("^years?$"); + private static final Pattern MONTH_PATTERN = Pattern.compile("^months?$"); + private static final Pattern FORTNIGHT_PATTERN = Pattern.compile("^fortnights?$"); + private static final Pattern WEEK_PATTERN = Pattern.compile("^weeks?$"); + private static final Pattern WEEKEND_PATTERN = Pattern.compile("^weekends?$"); + private static final Pattern DAY_PATTERN = Pattern.compile("^days?$"); + private static final Pattern HOUR_PATTERN = Pattern.compile("^hours?$"); + private static final Pattern MINUTE_PATTERN = Pattern.compile("^minutes?$"); + private static final Pattern SECOND_PATTERN = Pattern.compile("^seconds?$"); public RepeaterUnit() { @@ -66,10 +75,4 @@ public abstract class RepeaterUnit extends Repeater { ((Repeater) other).getNow().equals(getNow()); } - /** - * - */ - private enum UnitName { - YEAR, MONTH, FORTNIGHT, WEEK, WEEKEND, DAY, HOUR, MINUTE, SECOND - } } diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeek.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeek.java index 6022c5e..09a5462 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeek.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeek.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,7 +10,9 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterWeek extends RepeaterUnit { + public static final int WEEK_SECONDS = 604800; + public static final int WEEK_DAYS = 7; private ZonedDateTime currentWeekStart; @@ -24,12 +26,12 @@ public class RepeaterWeek extends RepeaterUnit { protected Span internalNextSpan(PointerType pointer) { if (currentWeekStart == null) { if (pointer == PointerType.FUTURE) { - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span nextSundaySpan = sundayRepeater.nextSpan(PointerType.FUTURE); currentWeekStart = nextSundaySpan.getBeginCalendar(); } else if (pointer == PointerType.PAST) { - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow().plus(1, ChronoUnit.DAYS)); sundayRepeater.nextSpan(PointerType.PAST); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); @@ -52,20 +54,20 @@ public class RepeaterWeek extends RepeaterUnit { ZonedDateTime thisWeekEnd; if (pointer == PointerType.FUTURE) { thisWeekStart = ymdh(getNow()).plus(1, ChronoUnit.HOURS); - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span thisSundaySpan = sundayRepeater.thisSpan(PointerType.FUTURE); thisWeekEnd = thisSundaySpan.getBeginCalendar(); thisWeekSpan = new Span(thisWeekStart, thisWeekEnd); } else if (pointer == PointerType.PAST) { thisWeekEnd = ymdh(getNow()); - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); thisWeekStart = lastSundaySpan.getBeginCalendar(); thisWeekSpan = new Span(thisWeekStart, thisWeekEnd); } else if (pointer == PointerType.NONE) { - RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); + RepeaterDayName sundayRepeater = new RepeaterDayName(DayName.SUNDAY); sundayRepeater.setNow(getNow()); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); thisWeekStart = lastSundaySpan.getBeginCalendar(); diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeekend.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeekend.java index 8e460f8..913797d 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeekend.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterWeekend.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,7 +10,8 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterWeekend extends RepeaterUnit { - public static final long WEEKEND_SECONDS = 172800L; // (2 * 24 * 60 * 60); + + private static final long WEEKEND_SECONDS = 172800L; // (2 * 24 * 60 * 60); private ZonedDateTime currentWeekStart; @@ -25,7 +26,7 @@ public class RepeaterWeekend extends RepeaterUnit { ZonedDateTime c; switch (pointer) { case PAST: { - RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); + RepeaterDayName saturdayRepeater = new RepeaterDayName(DayName.SATURDAY); saturdayRepeater.setNow(getNow().plus(RepeaterDay.DAY_SECONDS, ChronoUnit.SECONDS)); Span lastSaturdaySpan = saturdayRepeater.nextSpan(PointerType.PAST); currentWeekStart = lastSaturdaySpan.getBeginCalendar(); @@ -33,7 +34,7 @@ public class RepeaterWeekend extends RepeaterUnit { return new Span(currentWeekStart, c); } case FUTURE: { - RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); + RepeaterDayName saturdayRepeater = new RepeaterDayName(DayName.SATURDAY); saturdayRepeater.setNow(getNow()); Span nextSaturdaySpan = saturdayRepeater.nextSpan(PointerType.FUTURE); currentWeekStart = nextSaturdaySpan.getBeginCalendar(); @@ -50,13 +51,13 @@ public class RepeaterWeekend extends RepeaterUnit { protected Span internalThisSpan(PointerType pointer) { Span thisSpan; if (pointer == PointerType.FUTURE || pointer == PointerType.NONE) { - RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); + RepeaterDayName saturdayRepeater = new RepeaterDayName(DayName.SATURDAY); saturdayRepeater.setNow(getNow()); Span thisSaturdaySpan = saturdayRepeater.nextSpan(PointerType.FUTURE); thisSpan = new Span(thisSaturdaySpan.getBeginCalendar(), thisSaturdaySpan.getBeginCalendar() .plus(RepeaterWeekend.WEEKEND_SECONDS, ChronoUnit.SECONDS)); } else if (pointer == PointerType.PAST) { - RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); + RepeaterDayName saturdayRepeater = new RepeaterDayName(DayName.SATURDAY); saturdayRepeater.setNow(getNow()); Span lastSaturdaySpan = saturdayRepeater.nextSpan(PointerType.PAST); thisSpan = new Span(lastSaturdaySpan.getBeginCalendar(), lastSaturdaySpan.getBeginCalendar() diff --git a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterYear.java b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterYear.java index f0e269e..c237f2b 100644 --- a/src/main/java/org/xbib/time/chronic/repeaters/RepeaterYear.java +++ b/src/main/java/org/xbib/time/chronic/repeaters/RepeaterYear.java @@ -1,7 +1,7 @@ package org.xbib.time.chronic.repeaters; import org.xbib.time.chronic.Span; -import org.xbib.time.chronic.tags.Pointer.PointerType; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -10,6 +10,7 @@ import java.time.temporal.ChronoUnit; * */ public class RepeaterYear extends RepeaterUnit { + private ZonedDateTime currentYearStart; private static ZonedDateTime ymd(ZonedDateTime zonedDateTime) { diff --git a/src/main/java/org/xbib/time/chronic/repeaters/UnitName.java b/src/main/java/org/xbib/time/chronic/repeaters/UnitName.java new file mode 100644 index 0000000..ef07a97 --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/repeaters/UnitName.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.repeaters; + +/** + * + */ +enum UnitName { + YEAR, MONTH, FORTNIGHT, WEEK, WEEKEND, DAY, HOUR, MINUTE, SECOND +} diff --git a/src/main/java/org/xbib/time/chronic/tags/Grabber.java b/src/main/java/org/xbib/time/chronic/tags/Grabber.java index 75ef3d1..4e46037 100644 --- a/src/main/java/org/xbib/time/chronic/tags/Grabber.java +++ b/src/main/java/org/xbib/time/chronic/tags/Grabber.java @@ -11,9 +11,12 @@ import java.util.regex.Pattern; /** * */ -public class Grabber extends Tag { +public class Grabber extends Tag { + private static final Pattern THIS_PATTERN = Pattern.compile("this"); + private static final Pattern NEXT_PATTERN = Pattern.compile("next"); + private static final Pattern LAST_PATTERN = Pattern.compile("last"); public Grabber(Relative type) { @@ -49,10 +52,4 @@ public class Grabber extends Tag { return "grabber-" + getType(); } - /** - * - */ - public enum Relative { - LAST, NEXT, THIS - } } diff --git a/src/main/java/org/xbib/time/chronic/tags/Ordinal.java b/src/main/java/org/xbib/time/chronic/tags/Ordinal.java index 07839e6..28a2546 100644 --- a/src/main/java/org/xbib/time/chronic/tags/Ordinal.java +++ b/src/main/java/org/xbib/time/chronic/tags/Ordinal.java @@ -14,7 +14,7 @@ public class Ordinal extends Tag { static final Pattern ORDINAL_PATTERN = Pattern.compile("^(\\d*)(st|nd|rd|th)$"); - Ordinal(Integer type) { + protected Ordinal(Integer type) { super(type); } diff --git a/src/main/java/org/xbib/time/chronic/tags/OrdinalDay.java b/src/main/java/org/xbib/time/chronic/tags/OrdinalDay.java index 7998c66..dc8750d 100644 --- a/src/main/java/org/xbib/time/chronic/tags/OrdinalDay.java +++ b/src/main/java/org/xbib/time/chronic/tags/OrdinalDay.java @@ -8,7 +8,8 @@ import java.util.regex.Matcher; * */ public class OrdinalDay extends Ordinal { - public OrdinalDay(Integer type) { + + private OrdinalDay(Integer type) { super(type); } diff --git a/src/main/java/org/xbib/time/chronic/tags/Pointer.java b/src/main/java/org/xbib/time/chronic/tags/Pointer.java index c5524c6..8f98d46 100644 --- a/src/main/java/org/xbib/time/chronic/tags/Pointer.java +++ b/src/main/java/org/xbib/time/chronic/tags/Pointer.java @@ -11,7 +11,7 @@ import java.util.regex.Pattern; /** * */ -public class Pointer extends Tag { +public class Pointer extends Tag { private static final Pattern IN_PATTERN = Pattern.compile("\\bin\\b"); @@ -52,10 +52,4 @@ public class Pointer extends Tag { return "pointer-" + getType(); } - /** - * - */ - public enum PointerType { - PAST, FUTURE, NONE - } } diff --git a/src/main/java/org/xbib/time/chronic/tags/PointerType.java b/src/main/java/org/xbib/time/chronic/tags/PointerType.java new file mode 100644 index 0000000..edea5f8 --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/tags/PointerType.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.tags; + +/** + * + */ +public enum PointerType { + PAST, FUTURE, NONE +} diff --git a/src/main/java/org/xbib/time/chronic/tags/Relative.java b/src/main/java/org/xbib/time/chronic/tags/Relative.java new file mode 100644 index 0000000..d5697b3 --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/tags/Relative.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.tags; + +/** + * + */ +public enum Relative { + LAST, NEXT, THIS +} diff --git a/src/main/java/org/xbib/time/chronic/tags/Scalar.java b/src/main/java/org/xbib/time/chronic/tags/Scalar.java index a4b6177..e9aa89d 100644 --- a/src/main/java/org/xbib/time/chronic/tags/Scalar.java +++ b/src/main/java/org/xbib/time/chronic/tags/Scalar.java @@ -13,8 +13,9 @@ import java.util.regex.Pattern; * */ public class Scalar extends Tag { - static final Set TIMES = - new HashSet<>(Arrays.asList("am", "pm", "morning", "afternoon", "evening", "night")); + + protected static final Set TIMES = new HashSet<>(Arrays.asList("am", "pm", "morning", "afternoon", "evening", "night")); + private static final Pattern SCALAR_PATTERN = Pattern.compile("^\\d*$"); public Scalar(Integer type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/ScalarDay.java b/src/main/java/org/xbib/time/chronic/tags/ScalarDay.java index d85d2f5..ba1bdec 100644 --- a/src/main/java/org/xbib/time/chronic/tags/ScalarDay.java +++ b/src/main/java/org/xbib/time/chronic/tags/ScalarDay.java @@ -9,6 +9,7 @@ import java.util.regex.Pattern; * */ public class ScalarDay extends Scalar { + private static final Pattern DAY_PATTERN = Pattern.compile("^\\d\\d?$"); public ScalarDay(Integer type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/ScalarMonth.java b/src/main/java/org/xbib/time/chronic/tags/ScalarMonth.java index 8e4eb47..7171c88 100644 --- a/src/main/java/org/xbib/time/chronic/tags/ScalarMonth.java +++ b/src/main/java/org/xbib/time/chronic/tags/ScalarMonth.java @@ -9,6 +9,7 @@ import java.util.regex.Pattern; * */ public class ScalarMonth extends Scalar { + private static final Pattern MONTH_PATTERN = Pattern.compile("^\\d\\d?$"); public ScalarMonth(Integer type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/ScalarYear.java b/src/main/java/org/xbib/time/chronic/tags/ScalarYear.java index cf056a0..d7d5e63 100644 --- a/src/main/java/org/xbib/time/chronic/tags/ScalarYear.java +++ b/src/main/java/org/xbib/time/chronic/tags/ScalarYear.java @@ -9,6 +9,7 @@ import java.util.regex.Pattern; * */ public class ScalarYear extends Scalar { + private static final Pattern YEAR_PATTERN = Pattern.compile("^([1-9]\\d)?\\d\\d?$"); private ScalarYear(Integer type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/Separator.java b/src/main/java/org/xbib/time/chronic/tags/Separator.java index 971e6f4..252c1ed 100644 --- a/src/main/java/org/xbib/time/chronic/tags/Separator.java +++ b/src/main/java/org/xbib/time/chronic/tags/Separator.java @@ -8,9 +8,9 @@ import java.util.List; /** * */ -public class Separator extends Tag { +public class Separator extends Tag { - Separator(SeparatorType type) { + public Separator(SeparatorType type) { super(type); } @@ -42,10 +42,4 @@ public class Separator extends Tag { return "separator"; } - /** - * - */ - enum SeparatorType { - COMMA, DASH, SLASH, AT, IN - } } diff --git a/src/main/java/org/xbib/time/chronic/tags/SeparatorAt.java b/src/main/java/org/xbib/time/chronic/tags/SeparatorAt.java index ddf93b7..775a1b2 100644 --- a/src/main/java/org/xbib/time/chronic/tags/SeparatorAt.java +++ b/src/main/java/org/xbib/time/chronic/tags/SeparatorAt.java @@ -11,6 +11,7 @@ import java.util.regex.Pattern; * */ public class SeparatorAt extends Separator { + private static final Pattern AT_PATTERN = Pattern.compile("^(at|@)$"); private SeparatorAt(SeparatorType type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/SeparatorComma.java b/src/main/java/org/xbib/time/chronic/tags/SeparatorComma.java index 58b93ce..8ce367e 100644 --- a/src/main/java/org/xbib/time/chronic/tags/SeparatorComma.java +++ b/src/main/java/org/xbib/time/chronic/tags/SeparatorComma.java @@ -11,6 +11,7 @@ import java.util.regex.Pattern; * */ public class SeparatorComma extends Separator { + private static final Pattern COMMA_PATTERN = Pattern.compile("^,$"); private SeparatorComma(SeparatorType type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/SeparatorSlashOrDash.java b/src/main/java/org/xbib/time/chronic/tags/SeparatorSlashOrDash.java index 4740455..c268337 100644 --- a/src/main/java/org/xbib/time/chronic/tags/SeparatorSlashOrDash.java +++ b/src/main/java/org/xbib/time/chronic/tags/SeparatorSlashOrDash.java @@ -11,7 +11,9 @@ import java.util.regex.Pattern; * */ public class SeparatorSlashOrDash extends Separator { + private static final Pattern SLASH_PATTERN = Pattern.compile("^/$"); + private static final Pattern DASH_PATTERN = Pattern.compile("^-$"); public SeparatorSlashOrDash(SeparatorType type) { diff --git a/src/main/java/org/xbib/time/chronic/tags/SeparatorType.java b/src/main/java/org/xbib/time/chronic/tags/SeparatorType.java new file mode 100644 index 0000000..e6b6ae6 --- /dev/null +++ b/src/main/java/org/xbib/time/chronic/tags/SeparatorType.java @@ -0,0 +1,8 @@ +package org.xbib.time.chronic.tags; + +/** + * + */ +public enum SeparatorType { + COMMA, DASH, SLASH, AT, IN +} diff --git a/src/main/java/org/xbib/time/chronic/tags/StringTag.java b/src/main/java/org/xbib/time/chronic/tags/StringTag.java index 6d546a6..a530c18 100644 --- a/src/main/java/org/xbib/time/chronic/tags/StringTag.java +++ b/src/main/java/org/xbib/time/chronic/tags/StringTag.java @@ -4,6 +4,7 @@ package org.xbib.time.chronic.tags; * */ public class StringTag extends Tag { + public StringTag(String type) { super(type); } diff --git a/src/main/java/org/xbib/time/chronic/tags/TimeZone.java b/src/main/java/org/xbib/time/chronic/tags/TimeZone.java index 93edc72..ff03afa 100644 --- a/src/main/java/org/xbib/time/chronic/tags/TimeZone.java +++ b/src/main/java/org/xbib/time/chronic/tags/TimeZone.java @@ -12,6 +12,7 @@ import java.util.regex.Pattern; * */ public class TimeZone extends Tag { + private static final Pattern TIMEZONE_PATTERN = Pattern.compile("[pmce][ds]t"); private TimeZone() { diff --git a/src/main/java/org/xbib/time/format/Composite.java b/src/main/java/org/xbib/time/format/Composite.java index e15df8b..884e4bd 100644 --- a/src/main/java/org/xbib/time/format/Composite.java +++ b/src/main/java/org/xbib/time/format/Composite.java @@ -11,27 +11,25 @@ import java.util.Locale; /** * Composite implementation that merges other fields to create a full pattern. */ -class Composite implements PeriodPrinter, PeriodParser { +public class Composite implements PeriodPrinter, PeriodParser { private final PeriodPrinter[] iPrinters; + private final PeriodParser[] iParsers; - Composite(List elementPairs) { - List printerList = new ArrayList<>(); - List parserList = new ArrayList<>(); - + public Composite(List elementPairs) { + List printerList = new ArrayList<>(); + List parserList = new ArrayList<>(); decompose(elementPairs, printerList, parserList); - if (printerList.isEmpty()) { iPrinters = null; } else { - iPrinters = printerList.toArray(new PeriodPrinter[printerList.size()]); + iPrinters = printerList.toArray(new PeriodPrinter[0]); } - if (parserList.isEmpty()) { iParsers = null; } else { - iParsers = parserList.toArray(new PeriodParser[parserList.size()]); + iParsers = parserList.toArray(new PeriodParser[0]); } } @@ -83,32 +81,31 @@ class Composite implements PeriodPrinter, PeriodParser { return position; } - private void decompose(List elementPairs, List printerList, List parserList) { + private void decompose(List elementPairs, List printerList, List parserList) { int size = elementPairs.size(); for (int i = 0; i < size; i += 2) { Object element = elementPairs.get(i); if (element instanceof PeriodPrinter) { if (element instanceof Composite) { - addArrayToList(printerList, ((Composite) element).iPrinters); + PeriodPrinter[] periodPrinters = ((Composite) element).iPrinters; + if (periodPrinters != null) { + Collections.addAll(printerList, periodPrinters); + } } else { - printerList.add(element); + printerList.add((PeriodPrinter) element); } } - element = elementPairs.get(i + 1); if (element instanceof PeriodParser) { if (element instanceof Composite) { - addArrayToList(parserList, ((Composite) element).iParsers); + PeriodParser[] periodParsers = ((Composite) element).iParsers; + if (periodParsers != null) { + Collections.addAll(parserList, periodParsers); + } } else { - parserList.add(element); + parserList.add((PeriodParser) element); } } } } - - private void addArrayToList(List list, Object[] array) { - if (array != null) { - Collections.addAll(list, array); - } - } -} \ No newline at end of file +} diff --git a/src/main/java/org/xbib/time/format/CompositeAffix.java b/src/main/java/org/xbib/time/format/CompositeAffix.java index c3a485f..6a30db4 100644 --- a/src/main/java/org/xbib/time/format/CompositeAffix.java +++ b/src/main/java/org/xbib/time/format/CompositeAffix.java @@ -8,30 +8,31 @@ import java.util.Set; /** * Builds a composite affix by merging two other affix implementations. */ -class CompositeAffix extends IgnorableAffix { +public class CompositeAffix extends IgnorableAffix { + private final PeriodFieldAffix iLeft; + private final PeriodFieldAffix iRight; + private final String[] iLeftRightCombinations; - CompositeAffix(PeriodFieldAffix left, PeriodFieldAffix right) { + public CompositeAffix(PeriodFieldAffix left, PeriodFieldAffix right) { iLeft = left; iRight = right; - // We need to construct all possible combinations of left and right. // We are doing it once in constructor so that getAffixes() is quicker. - Set result = new HashSet(); + Set result = new HashSet<>(); for (String leftText : iLeft.getAffixes()) { for (String rightText : iRight.getAffixes()) { result.add(leftText + rightText); } } - iLeftRightCombinations = result.toArray(new String[result.size()]); + iLeftRightCombinations = result.toArray(new String[0]); } @Override public int calculatePrintedLength(int value) { - return iLeft.calculatePrintedLength(value) - + iRight.calculatePrintedLength(value); + return iLeft.calculatePrintedLength(value) + iRight.calculatePrintedLength(value); } @Override diff --git a/src/main/java/org/xbib/time/format/FieldFormatter.java b/src/main/java/org/xbib/time/format/FieldFormatter.java index d0a3405..25ed038 100644 --- a/src/main/java/org/xbib/time/format/FieldFormatter.java +++ b/src/main/java/org/xbib/time/format/FieldFormatter.java @@ -11,10 +11,12 @@ import java.util.Set; /** * Formats the numeric value of a field, potentially with prefix/suffix. */ -class FieldFormatter implements PeriodPrinter, PeriodParser { +public class FieldFormatter implements PeriodPrinter, PeriodParser { + private final int iMinPrintedDigits; - //private final int iPrintZeroSetting; + private final int iMaxParsedDigits; + private final boolean iRejectSignedValues; /** @@ -30,10 +32,10 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { private final PeriodFieldAffix iPrefix; private final PeriodFieldAffix iSuffix; - FieldFormatter(int minPrintedDigits, - int maxParsedDigits, boolean rejectSignedValues, - ChronoUnit chronoUnit, - PeriodFieldAffix prefix, PeriodFieldAffix suffix) { + public FieldFormatter(int minPrintedDigits, + int maxParsedDigits, boolean rejectSignedValues, + ChronoUnit chronoUnit, + PeriodFieldAffix prefix, PeriodFieldAffix suffix) { iMinPrintedDigits = minPrintedDigits; iMaxParsedDigits = maxParsedDigits; iRejectSignedValues = rejectSignedValues; @@ -42,7 +44,7 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { iSuffix = suffix; } - FieldFormatter(FieldFormatter field, PeriodFieldAffix periodFieldAffix) { + public FieldFormatter(FieldFormatter field, PeriodFieldAffix periodFieldAffix) { PeriodFieldAffix suffix = periodFieldAffix; iMinPrintedDigits = field.iMinPrintedDigits; iMaxParsedDigits = field.iMaxParsedDigits; @@ -91,17 +93,14 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { if (valueLong == Long.MAX_VALUE) { return 0; } - int sum = Math.max(FormatUtils.calculateDigitCount(valueLong), iMinPrintedDigits); int value = (int) valueLong; - if (iPrefix != null) { sum += iPrefix.calculatePrintedLength(value); } if (iSuffix != null) { sum += iSuffix.calculatePrintedLength(value); } - return sum; } @@ -152,7 +151,6 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { if (position >= text.length()) { return ~position; } - if (iPrefix != null) { position = iPrefix.parse(text, position); if (position < 0) { @@ -187,7 +185,6 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { } length++; } - if (!hasDigits) { return ~position; } @@ -236,7 +233,7 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { /** * @return Long.MAX_VALUE if nothing to print, otherwise value */ - long getFieldValue(Period period) { + private long getFieldValue(Period period) { long value; switch (unit) { default: @@ -270,7 +267,7 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { return value; } - void setFieldValue(PeriodAmount period, ChronoUnit field, long value) { + private void setFieldValue(PeriodAmount period, ChronoUnit field, long value) { switch (field) { default: break; @@ -300,8 +297,4 @@ class FieldFormatter implements PeriodPrinter, PeriodParser { break; } } - - ChronoUnit getFieldType() { - return unit; - } } diff --git a/src/main/java/org/xbib/time/format/FormatUtils.java b/src/main/java/org/xbib/time/format/FormatUtils.java index fe05c46..ef17fa8 100644 --- a/src/main/java/org/xbib/time/format/FormatUtils.java +++ b/src/main/java/org/xbib/time/format/FormatUtils.java @@ -53,7 +53,6 @@ public class FormatUtils { appenadble.append('0'); } appenadble.append(Long.toString(Integer.MIN_VALUE)); - //.append("" + -(long) Integer.MIN_VALUE) return; } } diff --git a/src/main/java/org/xbib/time/format/IgnorableAffix.java b/src/main/java/org/xbib/time/format/IgnorableAffix.java index 96a0b9a..e5e4f24 100644 --- a/src/main/java/org/xbib/time/format/IgnorableAffix.java +++ b/src/main/java/org/xbib/time/format/IgnorableAffix.java @@ -6,7 +6,8 @@ import java.util.Set; /** * An affix that can be ignored. */ -abstract class IgnorableAffix implements PeriodFieldAffix { +public abstract class IgnorableAffix implements PeriodFieldAffix { + private volatile String[] iOtherAffixes; public void finish(Set periodFieldAffixesToIgnore) { @@ -20,7 +21,6 @@ abstract class IgnorableAffix implements PeriodFieldAffix { shortestAffix = affix; } } - // Pick only affixes that are longer than the shortest affix in this instance. // This will reduce the number of parse operations and thus speed up the PeriodFormatter. // also need to pick affixes that differ only in case (but not those that are identical) diff --git a/src/main/java/org/xbib/time/format/Literal.java b/src/main/java/org/xbib/time/format/Literal.java index 88c2455..b92b3c4 100644 --- a/src/main/java/org/xbib/time/format/Literal.java +++ b/src/main/java/org/xbib/time/format/Literal.java @@ -8,11 +8,13 @@ import java.util.Locale; /** * Handles a simple literal piece of text. */ -class Literal implements PeriodPrinter, PeriodParser { - static final Literal EMPTY = new Literal(""); +public class Literal implements PeriodPrinter, PeriodParser { + + public static final Literal EMPTY = new Literal(""); + private final String iText; - Literal(String text) { + public Literal(String text) { iText = text; } diff --git a/src/main/java/org/xbib/time/format/PeriodAmount.java b/src/main/java/org/xbib/time/format/PeriodAmount.java index 06a6bb4..33908f7 100644 --- a/src/main/java/org/xbib/time/format/PeriodAmount.java +++ b/src/main/java/org/xbib/time/format/PeriodAmount.java @@ -13,7 +13,7 @@ import java.util.Map; */ public class PeriodAmount implements TemporalAmount { - private Map amounts = new HashMap<>(); + private final Map amounts = new HashMap<>(); public void set(TemporalUnit unit, Long value) { amounts.put(unit, value); diff --git a/src/main/java/org/xbib/time/format/PeriodFieldAffix.java b/src/main/java/org/xbib/time/format/PeriodFieldAffix.java index d336d87..d0f709c 100644 --- a/src/main/java/org/xbib/time/format/PeriodFieldAffix.java +++ b/src/main/java/org/xbib/time/format/PeriodFieldAffix.java @@ -8,7 +8,7 @@ import java.util.Set; * Defines a formatted field's prefix or suffix text. * This can be used for fields such as 'n hours' or 'nH' or 'Hour:n'. */ -interface PeriodFieldAffix { +public interface PeriodFieldAffix { int calculatePrintedLength(int value); @@ -17,11 +17,15 @@ interface PeriodFieldAffix { void printTo(Writer out, int value) throws IOException; /** + * @param periodStr period string + * @param position position * @return new position after parsing affix, or ~position of failure */ int parse(String periodStr, int position); /** + * @param periodStr period string + * @param position position * @return position where affix starts, or original ~position if not found */ int scan(String periodStr, int position); diff --git a/src/main/java/org/xbib/time/format/PeriodFormatter.java b/src/main/java/org/xbib/time/format/PeriodFormatter.java index c1ac73e..086f993 100644 --- a/src/main/java/org/xbib/time/format/PeriodFormatter.java +++ b/src/main/java/org/xbib/time/format/PeriodFormatter.java @@ -75,7 +75,7 @@ public class PeriodFormatter { * @param parser the internal parser, null if cannot parse * @param locale the locale to use */ - PeriodFormatter(PeriodPrinter printer, PeriodParser parser, Locale locale) { + public PeriodFormatter(PeriodPrinter printer, PeriodParser parser, Locale locale) { super(); iPrinter = printer; iParser = parser; diff --git a/src/main/java/org/xbib/time/format/PeriodFormatterBuilder.java b/src/main/java/org/xbib/time/format/PeriodFormatterBuilder.java index 3d5e349..8132663 100644 --- a/src/main/java/org/xbib/time/format/PeriodFormatterBuilder.java +++ b/src/main/java/org/xbib/time/format/PeriodFormatterBuilder.java @@ -33,12 +33,13 @@ import java.util.List; public class PeriodFormatterBuilder { private int iMinPrintedDigits; + private int iMaxParsedDigits; + private boolean iRejectSignedValues; private PeriodFieldAffix iPrefix; - // List of Printers and Parsers used to build a final formatter. private List iElementPairs; /** * Set to true if the formatter is not a printer. @@ -49,9 +50,6 @@ public class PeriodFormatterBuilder { */ private boolean iNotParser; - // Last PeriodFormatter appended of each field type. - //private FieldFormatter[] iFieldFormatters; - public PeriodFormatterBuilder() { clear(); } @@ -80,15 +78,11 @@ public class PeriodFormatterBuilder { } private static Object[] createComposite(List elementPairs) { - switch (elementPairs.size()) { - case 0: - return new Object[]{Literal.EMPTY, Literal.EMPTY}; - case 1: - return new Object[]{elementPairs.get(0), elementPairs.get(1)}; - default: - Composite comp = new Composite(elementPairs); - return new Object[]{comp, comp}; + if (elementPairs.size() == 0) { + return new Object[]{Literal.EMPTY, Literal.EMPTY}; } + Composite comp = new Composite(elementPairs); + return new Object[]{comp, comp}; } /** @@ -108,8 +102,7 @@ public class PeriodFormatterBuilder { * @throws IllegalStateException if the builder can produce neither a printer nor a parser */ public PeriodFormatter toFormatter() { - PeriodFormatter formatter = toFormatter(iElementPairs, iNotPrinter, iNotParser); - return formatter; + return toFormatter(iElementPairs, iNotPrinter, iNotParser); } /** @@ -155,7 +148,6 @@ public class PeriodFormatterBuilder { */ public void clear() { iMinPrintedDigits = 1; - //iPrintZeroSetting = PRINT_ZERO_RARELY_LAST; iMaxParsedDigits = 10; iRejectSignedValues = false; iPrefix = null; @@ -451,16 +443,6 @@ public class PeriodFormatterBuilder { return this; } - private void appendField(ChronoUnit unit) { - appendField(unit, iMinPrintedDigits); - } - - private void appendField(ChronoUnit unit, int minPrinted) { - FieldFormatter field = new FieldFormatter(minPrinted, - iMaxParsedDigits, iRejectSignedValues, unit, iPrefix, null); - append0(field, field); - iPrefix = null; - } /** * Append a field suffix which applies only to the last appended field. If @@ -538,39 +520,6 @@ public class PeriodFormatterBuilder { return appendSuffix(new RegExAffix(regularExpressions, suffixes)); } - /** - * Append a field suffix which applies only to the last appended field. If - * the field is not printed, neither is the suffix. - * - * @param suffix custom suffix - * @return this PeriodFormatterBuilder - * @throws IllegalStateException if no field exists to append to - * @see #appendPrefix - */ - private PeriodFormatterBuilder appendSuffix(PeriodFieldAffix suffix) { - final Object originalPrinter; - final Object originalParser; - if (!iElementPairs.isEmpty()) { - originalPrinter = iElementPairs.get(iElementPairs.size() - 2); - originalParser = iElementPairs.get(iElementPairs.size() - 1); - } else { - originalPrinter = null; - originalParser = null; - } - - if (originalPrinter == null || originalParser == null || - originalPrinter != originalParser || - !(originalPrinter instanceof FieldFormatter)) { - throw new IllegalStateException("No field to apply suffix to"); - } - - clearPrefix(); - FieldFormatter newField = new FieldFormatter((FieldFormatter) originalPrinter, suffix); - iElementPairs.set(iElementPairs.size() - 2, newField); - iElementPairs.set(iElementPairs.size() - 1, newField); - return this; - } - /** * Append a separator, which is output if fields are printed both before * and after the separator. @@ -670,10 +619,7 @@ public class PeriodFormatterBuilder { if (text == null || finalText == null) { throw new IllegalArgumentException(); } - clearPrefix(); - - // optimise zero formatter case List pairs = iElementPairs; if (pairs.isEmpty()) { if (useAfter && !useBefore) { @@ -683,8 +629,6 @@ public class PeriodFormatterBuilder { } return this; } - - // find the last separator added int i; Separator lastSeparator = null; for (i = pairs.size(); --i >= 0; ) { @@ -693,10 +637,8 @@ public class PeriodFormatterBuilder { pairs = pairs.subList(i + 1, pairs.size()); break; } - i--; // element pairs + i--; } - - // merge formatters if (lastSeparator != null && pairs.isEmpty()) { throw new IllegalStateException("Cannot have two adjacent separators"); } else { @@ -709,7 +651,6 @@ public class PeriodFormatterBuilder { pairs.add(separator); pairs.add(separator); } - return this; } @@ -717,7 +658,6 @@ public class PeriodFormatterBuilder { if (iPrefix != null) { throw new IllegalStateException("Prefix not followed by field"); } - iPrefix = null; } private PeriodFormatterBuilder append0(PeriodPrinter printer, PeriodParser parser) { @@ -727,4 +667,44 @@ public class PeriodFormatterBuilder { iNotParser |= (parser == null); return this; } + + private void appendField(ChronoUnit unit) { + appendField(unit, iMinPrintedDigits); + } + + private void appendField(ChronoUnit unit, int minPrinted) { + FieldFormatter field = new FieldFormatter(minPrinted, + iMaxParsedDigits, iRejectSignedValues, unit, iPrefix, null); + append0(field, field); + iPrefix = null; + } + + /** + * Append a field suffix which applies only to the last appended field. If + * the field is not printed, neither is the suffix. + * + * @param suffix custom suffix + * @return this PeriodFormatterBuilder + * @throws IllegalStateException if no field exists to append to + * @see #appendPrefix + */ + private PeriodFormatterBuilder appendSuffix(PeriodFieldAffix suffix) { + final Object originalPrinter; + final Object originalParser; + if (!iElementPairs.isEmpty()) { + originalPrinter = iElementPairs.get(iElementPairs.size() - 2); + originalParser = iElementPairs.get(iElementPairs.size() - 1); + } else { + originalPrinter = null; + originalParser = null; + } + if (originalPrinter != originalParser || !(originalPrinter instanceof FieldFormatter)) { + throw new IllegalStateException("No field to apply suffix to"); + } + clearPrefix(); + FieldFormatter newField = new FieldFormatter((FieldFormatter) originalPrinter, suffix); + iElementPairs.set(iElementPairs.size() - 2, newField); + iElementPairs.set(iElementPairs.size() - 1, newField); + return this; + } } diff --git a/src/main/java/org/xbib/time/format/PluralAffix.java b/src/main/java/org/xbib/time/format/PluralAffix.java index 7d598f1..0fcd230 100644 --- a/src/main/java/org/xbib/time/format/PluralAffix.java +++ b/src/main/java/org/xbib/time/format/PluralAffix.java @@ -7,11 +7,13 @@ import java.io.Writer; * Implements an affix where the text varies by the amount of the field. * Only singular (1) and plural (not 1) are supported. */ -class PluralAffix extends IgnorableAffix { +public class PluralAffix extends IgnorableAffix { + private final String iSingularText; + private final String iPluralText; - PluralAffix(String singularText, String pluralText) { + public PluralAffix(String singularText, String pluralText) { iSingularText = singularText; iPluralText = pluralText; } diff --git a/src/main/java/org/xbib/time/format/RegExAffix.java b/src/main/java/org/xbib/time/format/RegExAffix.java index c3782c3..53ee40e 100644 --- a/src/main/java/org/xbib/time/format/RegExAffix.java +++ b/src/main/java/org/xbib/time/format/RegExAffix.java @@ -12,7 +12,7 @@ import java.util.regex.Pattern; * Implements an affix where the text varies by the amount of the field. * Different amounts are supported based on the provided parameters. */ -class RegExAffix extends IgnorableAffix { +public class RegExAffix extends IgnorableAffix { private static final ConcurrentMap PATTERNS = new ConcurrentHashMap<>(); @@ -25,7 +25,7 @@ class RegExAffix extends IgnorableAffix { // Otherwise it might consume not enough characters. private final String[] iSuffixesSortedDescByLength; - RegExAffix(String[] regExes, String[] texts) { + public RegExAffix(String[] regExes, String[] texts) { iSuffixes = texts.clone(); iPatterns = new Pattern[regExes.length]; for (int i = 0; i < regExes.length; i++) { diff --git a/src/main/java/org/xbib/time/format/Separator.java b/src/main/java/org/xbib/time/format/Separator.java index fd7ff3f..63e0d19 100644 --- a/src/main/java/org/xbib/time/format/Separator.java +++ b/src/main/java/org/xbib/time/format/Separator.java @@ -12,32 +12,37 @@ import java.util.TreeSet; * Handles a separator, that splits the fields into multiple parts. * For example, the 'T' in the ISO8601 standard. */ -class Separator implements PeriodPrinter, PeriodParser { +public class Separator implements PeriodPrinter, PeriodParser { + private final String iText; + private final String iFinalText; + private final String[] iParsedForms; private final boolean iUseBefore; + private final boolean iUseAfter; private final PeriodPrinter iBeforePrinter; - private final PeriodParser iBeforeParser; - volatile PeriodPrinter iAfterPrinter; - volatile PeriodParser iAfterParser; - Separator(String text, String finalText, String[] variants, - PeriodPrinter beforePrinter, PeriodParser beforeParser, - boolean useBefore, boolean useAfter) { + private final PeriodParser iBeforeParser; + + protected volatile PeriodPrinter iAfterPrinter; + + protected volatile PeriodParser iAfterParser; + + public Separator(String text, String finalText, String[] variants, + PeriodPrinter beforePrinter, PeriodParser beforeParser, + boolean useBefore, boolean useAfter) { iText = text; iFinalText = finalText; - if ((finalText == null || text.equals(finalText)) && (variants == null || variants.length == 0)) { iParsedForms = new String[]{text}; } else { - // Filter and reverse sort the parsed forms. - TreeSet parsedSet = new TreeSet(String.CASE_INSENSITIVE_ORDER); + TreeSet parsedSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); parsedSet.add(text); parsedSet.add(finalText); if (variants != null) { @@ -47,9 +52,8 @@ class Separator implements PeriodPrinter, PeriodParser { } ArrayList parsedList = new ArrayList(parsedSet); Collections.reverse(parsedList); - iParsedForms = parsedList.toArray(new String[parsedList.size()]); + iParsedForms = parsedList.toArray(new String[0]); } - iBeforePrinter = beforePrinter; iBeforeParser = beforeParser; iUseBefore = useBefore; @@ -67,10 +71,8 @@ class Separator implements PeriodPrinter, PeriodParser { public int calculatePrintedLength(Period period, Locale locale) { PeriodPrinter before = iBeforePrinter; PeriodPrinter after = iAfterPrinter; - int sum = before.calculatePrintedLength(period, locale) + after.calculatePrintedLength(period, locale); - if (iUseBefore) { if (before.countFieldsToPrint(period, 1, locale) > 0) { if (iUseAfter) { @@ -85,7 +87,6 @@ class Separator implements PeriodPrinter, PeriodParser { } else if (iUseAfter && after.countFieldsToPrint(period, 1, locale) > 0) { sum += iText.length(); } - return sum; } @@ -113,7 +114,6 @@ class Separator implements PeriodPrinter, PeriodParser { public void printTo(Writer out, Period period, Locale locale) throws IOException { PeriodPrinter before = iBeforePrinter; PeriodPrinter after = iAfterPrinter; - before.printTo(out, period, locale); if (iUseBefore) { if (before.countFieldsToPrint(period, 1, locale) > 0) { @@ -132,8 +132,7 @@ class Separator implements PeriodPrinter, PeriodParser { after.printTo(out, period, locale); } - public int parseInto(PeriodAmount period, String periodStr, - int pos, Locale locale) { + public int parseInto(PeriodAmount period, String periodStr, int pos, Locale locale) { int position = pos; int oldPos = position; position = iBeforeParser.parseInto(period, periodStr, position, locale); @@ -162,16 +161,14 @@ class Separator implements PeriodPrinter, PeriodParser { // Separator should not have been supplied. return ~oldPos; } - if (position > oldPos && !found && !iUseBefore) { // Separator was required. return ~oldPos; } - return position; } - Separator finish(PeriodPrinter afterPrinter, PeriodParser afterParser) { + protected Separator finish(PeriodPrinter afterPrinter, PeriodParser afterParser) { iAfterPrinter = afterPrinter; iAfterParser = afterParser; return this; diff --git a/src/main/java/org/xbib/time/format/SimpleAffix.java b/src/main/java/org/xbib/time/format/SimpleAffix.java index 342dc32..aed0775 100644 --- a/src/main/java/org/xbib/time/format/SimpleAffix.java +++ b/src/main/java/org/xbib/time/format/SimpleAffix.java @@ -6,25 +6,30 @@ import java.io.Writer; /** * Implements an affix where the text does not vary by the amount. */ -class SimpleAffix extends IgnorableAffix { +public class SimpleAffix extends IgnorableAffix { + private final String iText; - SimpleAffix(String text) { + public SimpleAffix(String text) { iText = text; } + @Override public int calculatePrintedLength(int value) { return iText.length(); } + @Override public void printTo(StringBuilder buf, int value) { buf.append(iText); } + @Override public void printTo(Writer out, int value) throws IOException { out.write(iText); } + @Override public int parse(String periodStr, int position) { String text = iText; int textLength = text.length(); @@ -35,6 +40,7 @@ class SimpleAffix extends IgnorableAffix { return ~position; } + @Override public int scan(String periodStr, final int position) { String text = iText; int textLength = text.length(); @@ -69,6 +75,7 @@ class SimpleAffix extends IgnorableAffix { return ~position; } + @Override public String[] getAffixes() { return new String[]{iText}; } diff --git a/src/main/java/org/xbib/time/pretty/PrettyTime.java b/src/main/java/org/xbib/time/pretty/PrettyTime.java index e98bddd..9891c07 100644 --- a/src/main/java/org/xbib/time/pretty/PrettyTime.java +++ b/src/main/java/org/xbib/time/pretty/PrettyTime.java @@ -51,7 +51,7 @@ public class PrettyTime { private Locale locale; - private Map units = new LinkedHashMap<>(); + private final Map units = new LinkedHashMap<>(); public PrettyTime() { this(LocalDateTime.now()); @@ -118,8 +118,7 @@ public class PrettyTime { public TimeUnitQuantity calculateDuration(final long difference) { long absoluteDifference = Math.abs(difference); - List units = new ArrayList<>(); - units.addAll(getUnits()); + List units = new ArrayList<>(getUnits()); TimeUnitQuantity result = new TimeUnitQuantity(); for (int i = 0; i < units.size(); i++) { TimeUnit unit = units.get(i); @@ -394,7 +393,6 @@ public class PrettyTime { if (unit == null) { throw new IllegalArgumentException("Unit to remove must not be null."); } - return units.remove(unit); } diff --git a/src/main/java/org/xbib/time/pretty/SimpleTimeFormat.java b/src/main/java/org/xbib/time/pretty/SimpleTimeFormat.java index ba255c2..1ab5d67 100644 --- a/src/main/java/org/xbib/time/pretty/SimpleTimeFormat.java +++ b/src/main/java/org/xbib/time/pretty/SimpleTimeFormat.java @@ -4,21 +4,37 @@ package org.xbib.time.pretty; * Represents a simple method of formatting a specific {@link TimeUnitQuantity} of time. */ public class SimpleTimeFormat implements TimeFormat { + private static final String SIGN = "%s"; + private static final String QUANTITY = "%n"; + private static final String UNIT = "%u"; + private static final String NEGATIVE = "-"; + private String singularName = ""; + private String pluralName = ""; + private String futureSingularName = ""; + private String futurePluralName = ""; + private String pastSingularName = ""; + private String pastPluralName = ""; + private String pattern = ""; + private String futurePrefix = ""; + private String futureSuffix = ""; + private String pastPrefix = ""; + private String pastSuffix = ""; + private int roundingTolerance = 50; @Override diff --git a/src/main/java/org/xbib/time/pretty/TimeFormat.java b/src/main/java/org/xbib/time/pretty/TimeFormat.java index ae59195..203f465 100644 --- a/src/main/java/org/xbib/time/pretty/TimeFormat.java +++ b/src/main/java/org/xbib/time/pretty/TimeFormat.java @@ -1,7 +1,5 @@ package org.xbib.time.pretty; -/** - */ public interface TimeFormat { /** * Given a populated {@link TimeUnitQuantity} object. Apply formatting (with rounding) and output the result. diff --git a/src/main/java/org/xbib/time/pretty/i18n/MapResourceBundle.java b/src/main/java/org/xbib/time/pretty/i18n/MapResourceBundle.java index 7bc1775..9ece56f 100644 --- a/src/main/java/org/xbib/time/pretty/i18n/MapResourceBundle.java +++ b/src/main/java/org/xbib/time/pretty/i18n/MapResourceBundle.java @@ -18,6 +18,7 @@ public abstract class MapResourceBundle extends ResourceBundle { public MapResourceBundle() { } + @Override public final Object handleGetObject(String key) { if (lookup == null) { loadLookup(); @@ -25,6 +26,7 @@ public abstract class MapResourceBundle extends ResourceBundle { return lookup.get(key); } + @Override public Enumeration getKeys() { if (lookup == null) { loadLookup(); @@ -33,6 +35,7 @@ public abstract class MapResourceBundle extends ResourceBundle { return new ResourceBundleEnumeration(lookup.keySet(), parent != null ? parent.getKeys() : null); } + @Override protected Set handleKeySet() { if (lookup == null) { loadLookup(); @@ -60,10 +63,14 @@ public abstract class MapResourceBundle extends ResourceBundle { } private static class ResourceBundleEnumeration implements Enumeration { - private Set set; - private Iterator iterator; - private Enumeration enumeration; - private String next = null; + + private final Set set; + + private final Iterator iterator; + + private final Enumeration enumeration; + + private String next; ResourceBundleEnumeration(Set var1, Enumeration var2) { this.set = var1; diff --git a/src/main/java/org/xbib/time/pretty/i18n/Resources.java b/src/main/java/org/xbib/time/pretty/i18n/Resources.java index 5edf989..e778a69 100644 --- a/src/main/java/org/xbib/time/pretty/i18n/Resources.java +++ b/src/main/java/org/xbib/time/pretty/i18n/Resources.java @@ -7,6 +7,7 @@ import java.util.Map; * */ public class Resources extends MapResourceBundle { + private static final Map map = new HashMap<>(); static { diff --git a/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeFormat.java b/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeFormat.java index 513fbf8..eddefac 100644 --- a/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeFormat.java +++ b/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeFormat.java @@ -13,7 +13,9 @@ import java.util.ResourceBundle; * Represents a simple method of formatting a specific {@link TimeUnitQuantity} of time. */ public class ResourcesTimeFormat extends SimpleTimeFormat implements TimeFormat, LocaleAware { + private final ResourcesTimeUnit unit; + private TimeFormat override; public ResourcesTimeFormat(ResourcesTimeUnit unit) { @@ -31,17 +33,14 @@ public class ResourcesTimeFormat extends SimpleTimeFormat implements TimeFormat, } else { override = null; } - if (override == null) { setPattern(bundle.getString(unit.getResourceKeyPrefix() + "Pattern")); setFuturePrefix(bundle.getString(unit.getResourceKeyPrefix() + "FuturePrefix")); setFutureSuffix(bundle.getString(unit.getResourceKeyPrefix() + "FutureSuffix")); setPastPrefix(bundle.getString(unit.getResourceKeyPrefix() + "PastPrefix")); setPastSuffix(bundle.getString(unit.getResourceKeyPrefix() + "PastSuffix")); - setSingularName(bundle.getString(unit.getResourceKeyPrefix() + "SingularName")); setPluralName(bundle.getString(unit.getResourceKeyPrefix() + "PluralName")); - String key = unit.getResourceKeyPrefix() + "FuturePluralName"; if (bundle.containsKey(key)) { setFuturePluralName(bundle.getString(key)); diff --git a/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeUnit.java b/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeUnit.java index ae9d3a7..b28f703 100644 --- a/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeUnit.java +++ b/src/main/java/org/xbib/time/pretty/i18n/ResourcesTimeUnit.java @@ -6,7 +6,9 @@ import org.xbib.time.pretty.TimeUnit; * */ public abstract class ResourcesTimeUnit implements TimeUnit { + private long maxQuantity = 0; + private long millisPerUnit = 1; protected abstract String getResourceKeyPrefix(); diff --git a/src/main/java/org/xbib/time/pretty/units/TimeUnitComparator.java b/src/main/java/org/xbib/time/pretty/units/TimeUnitComparator.java index 808fb41..f0eac58 100644 --- a/src/main/java/org/xbib/time/pretty/units/TimeUnitComparator.java +++ b/src/main/java/org/xbib/time/pretty/units/TimeUnitComparator.java @@ -9,6 +9,7 @@ import java.util.Comparator; */ public class TimeUnitComparator implements Comparator { + @Override public int compare(final TimeUnit left, final TimeUnit right) { if (left.getMillisPerUnit() < right.getMillisPerUnit()) { return -1; diff --git a/src/main/java/org/xbib/time/schedule/CronExpression.java b/src/main/java/org/xbib/time/schedule/CronExpression.java index 4ae3d89..1eb2cb9 100644 --- a/src/main/java/org/xbib/time/schedule/CronExpression.java +++ b/src/main/java/org/xbib/time/schedule/CronExpression.java @@ -8,33 +8,6 @@ import java.util.regex.Pattern; public abstract class CronExpression { - public abstract boolean matches(ZonedDateTime t); - - public abstract ZonedDateTime nextExecution(ZonedDateTime from, ZonedDateTime to); - - private static final String YEARLY = "0 0 1 1 *", - MONTHLY = "0 0 1 * *", - WEEKLY = "0 0 * * 7", - DAILY = "0 0 * * *", - HOURLY = "0 * * * *"; - - private static final Map ALIASES = Map.ofEntries( - Map.entry("yearly", YEARLY), - Map.entry("annually", YEARLY), - Map.entry("monthly", MONTHLY), - Map.entry("weekly", WEEKLY), - Map.entry("daily", DAILY), - Map.entry("midnight", DAILY), - Map.entry("hourly", HOURLY)); - - private static final Pattern ALIAS_PATTERN = Pattern.compile("[a-z]+"); - - private static final boolean DEFAULT_ONE_BASED_DAY_OF_WEEK = false; - - private static final boolean DEFAULT_SECONDS = false; - - private static final boolean DEFAULT_ALLOW_BOTH_DAYS = true; - public static CronExpression yearly() { return parse(YEARLY); } @@ -63,6 +36,37 @@ public abstract class CronExpression { return parse(s, DEFAULT_ONE_BASED_DAY_OF_WEEK, DEFAULT_SECONDS, DEFAULT_ALLOW_BOTH_DAYS); } + public static Parser parser() { + return new Parser(); + } + + public abstract boolean matches(ZonedDateTime t); + + public abstract ZonedDateTime nextExecution(ZonedDateTime from, ZonedDateTime to); + + private static final Pattern ALIAS_PATTERN = Pattern.compile("[a-z]+"); + + private static final boolean DEFAULT_ONE_BASED_DAY_OF_WEEK = false; + + private static final boolean DEFAULT_SECONDS = false; + + private static final boolean DEFAULT_ALLOW_BOTH_DAYS = true; + + private static final String YEARLY = "0 0 1 1 *", + MONTHLY = "0 0 1 * *", + WEEKLY = "0 0 * * 7", + DAILY = "0 0 * * *", + HOURLY = "0 * * * *"; + + private static final Map ALIASES = Map.ofEntries( + Map.entry("yearly", YEARLY), + Map.entry("annually", YEARLY), + Map.entry("monthly", MONTHLY), + Map.entry("weekly", WEEKLY), + Map.entry("daily", DAILY), + Map.entry("midnight", DAILY), + Map.entry("hourly", HOURLY)); + private static boolean isValid(String s, boolean oneBasedDayOfWeek, boolean seconds, boolean allowBothDays) { boolean valid; try { @@ -91,17 +95,18 @@ public abstract class CronExpression { return new DefaultCronExpression(s, seconds, oneBasedDayOfWeek, allowBothDays); } - public static Parser parser() { - return new Parser(); - } - public static class Parser { - private boolean oneBasedDayOfWeek, seconds, allowBothDays; + + private boolean oneBasedDayOfWeek; + + private boolean seconds; + + private boolean allowBothDays; private Parser() { - oneBasedDayOfWeek = DEFAULT_ONE_BASED_DAY_OF_WEEK; - seconds = DEFAULT_SECONDS; - allowBothDays = DEFAULT_ALLOW_BOTH_DAYS; + this.oneBasedDayOfWeek = DEFAULT_ONE_BASED_DAY_OF_WEEK; + this.seconds = DEFAULT_SECONDS; + this.allowBothDays = DEFAULT_ALLOW_BOTH_DAYS; } public boolean isValid(String s) { diff --git a/src/main/java/org/xbib/time/schedule/DayOfMonthField.java b/src/main/java/org/xbib/time/schedule/DayOfMonthField.java index a0f1c25..6ed5e5c 100644 --- a/src/main/java/org/xbib/time/schedule/DayOfMonthField.java +++ b/src/main/java/org/xbib/time/schedule/DayOfMonthField.java @@ -12,14 +12,14 @@ public class DayOfMonthField extends DefaultField { private final boolean unspecified; - private DayOfMonthField(Builder b) { + protected DayOfMonthField(Builder b) { super(b); this.lastDay = b.lastDay; this.nearestWeekday = b.nearestWeekday; this.unspecified = b.unspecified; } - boolean isUnspecified() { + public boolean isUnspecified() { return unspecified; } @@ -80,15 +80,10 @@ public class DayOfMonthField extends DefaultField { private boolean unspecified; - Builder() { + protected Builder() { super(1, 31); } - @Override - public DayOfMonthField build() { - return new DayOfMonthField(this); - } - @Override protected Builder parse(Tokens tokens) { super.parse(tokens); @@ -118,5 +113,10 @@ public class DayOfMonthField extends DefaultField { return super.parseNumber(tokens, token, first, last); } } + + @Override + protected DayOfMonthField build() { + return new DayOfMonthField(this); + } } } diff --git a/src/main/java/org/xbib/time/schedule/DayOfWeekField.java b/src/main/java/org/xbib/time/schedule/DayOfWeekField.java index 4451868..9ebaa42 100644 --- a/src/main/java/org/xbib/time/schedule/DayOfWeekField.java +++ b/src/main/java/org/xbib/time/schedule/DayOfWeekField.java @@ -20,7 +20,7 @@ public class DayOfWeekField extends DefaultField { private final boolean unspecified; - private DayOfWeekField(Builder b) { + protected DayOfWeekField(Builder b) { super(b); this.nth = b.nth; hasNth = !nth.isEmpty(); @@ -38,7 +38,6 @@ public class DayOfWeekField extends DefaultField { return true; } final DayOfWeek dayOfWeek = time.getDayOfWeek(); - //int number = dayOfWeek.getValue() % 7; int number = dayOfWeek.getValue(); if (hasLast) { return last.contains(number) && time.getMonth() != time.plusWeeks(1).getMonth(); @@ -55,10 +54,6 @@ public class DayOfWeekField extends DefaultField { return contains(number); } - private int number(int dayOfWeek) { - return dayOfWeek % 7; - } - @Override public boolean equals(Object o) { if (this == o) { @@ -98,7 +93,8 @@ public class DayOfWeekField extends DefaultField { } public static class Builder extends DefaultField.Builder { - static final Keywords KEYWORDS = new Keywords(); + + protected static final Keywords KEYWORDS = new Keywords(); static { KEYWORDS.put("MON", 1); @@ -110,7 +106,7 @@ public class DayOfWeekField extends DefaultField { KEYWORDS.put("SUN", 7); } - private boolean oneBased; + private final boolean oneBased; private boolean unspecified; @@ -118,7 +114,7 @@ public class DayOfWeekField extends DefaultField { private final MultiMap nth; - Builder(boolean oneBased) { + protected Builder(boolean oneBased) { super(1, 7); this.oneBased = oneBased; last = new LinkedHashSet<>(); @@ -166,7 +162,7 @@ public class DayOfWeekField extends DefaultField { } @Override - public DayOfWeekField build() { + protected DayOfWeekField build() { return new DayOfWeekField(this); } } diff --git a/src/main/java/org/xbib/time/schedule/DefaultCronExpression.java b/src/main/java/org/xbib/time/schedule/DefaultCronExpression.java index 4f11b8a..ff837e6 100644 --- a/src/main/java/org/xbib/time/schedule/DefaultCronExpression.java +++ b/src/main/java/org/xbib/time/schedule/DefaultCronExpression.java @@ -25,7 +25,7 @@ public class DefaultCronExpression extends CronExpression { private final DayOfMonthField dayOfMonth; - DefaultCronExpression(String string, boolean seconds, boolean oneBasedDayOfWeek, boolean allowBothDayFields) { + public DefaultCronExpression(String string, boolean seconds, boolean oneBasedDayOfWeek, boolean allowBothDayFields) { this.string = string; if (string.isEmpty()) { throw new IllegalArgumentException("empty spec not allowed"); diff --git a/src/main/java/org/xbib/time/schedule/DefaultField.java b/src/main/java/org/xbib/time/schedule/DefaultField.java index c7a1715..f1fbf45 100644 --- a/src/main/java/org/xbib/time/schedule/DefaultField.java +++ b/src/main/java/org/xbib/time/schedule/DefaultField.java @@ -10,15 +10,11 @@ public class DefaultField implements TimeField { private final NavigableSet numbers; - DefaultField(Builder b) { + protected DefaultField(Builder b) { fullRange = b.fullRange; numbers = fullRange ? null : b.numbers; } - public static DefaultField parse(Tokens s, int min, int max) { - return new Builder(min, max).parse(s).build(); - } - @Override public boolean contains(int number) { return fullRange || numbers.contains(number); @@ -34,6 +30,10 @@ public class DefaultField implements TimeField { return fullRange; } + public static DefaultField parse(Tokens s, int min, int max) { + return new Builder(min, max).parse(s).build(); + } + @Override public boolean equals(Object o) { if (this == o) { @@ -71,7 +71,7 @@ public class DefaultField implements TimeField { private boolean fullRange; - Builder(int min, int max) { + protected Builder(int min, int max) { this.min = min; this.max = max; numbers = new TreeSet<>(); @@ -137,18 +137,18 @@ public class DefaultField implements TimeField { return false; } - int nextNumber(Tokens tokens) { + protected int nextNumber(Tokens tokens) { if (tokens.next() == Token.NUMBER) { return tokens.number(); } throw new IllegalStateException("Expected number"); } - private boolean endOfField(Token token) { + protected boolean endOfField(Token token) { return token == Token.FIELD_SEPARATOR || token == Token.END_OF_INPUT; } - void rangeSkip(int first, int last, int skip) { + protected void rangeSkip(int first, int last, int skip) { for (int i = first; i <= last; i++) { if ((i - min) % skip == 0) { add(i); @@ -170,7 +170,7 @@ public class DefaultField implements TimeField { numbers.add(value); } - public DefaultField build() { + protected DefaultField build() { return new DefaultField(this); } } diff --git a/src/main/java/org/xbib/time/schedule/Entry.java b/src/main/java/org/xbib/time/schedule/Entry.java index 776498d..2d75290 100644 --- a/src/main/java/org/xbib/time/schedule/Entry.java +++ b/src/main/java/org/xbib/time/schedule/Entry.java @@ -3,19 +3,19 @@ package org.xbib.time.schedule; import java.time.ZonedDateTime; import java.util.concurrent.Callable; -class Entry { +public class Entry { - private String name; + private final String name; - private CronExpression cronExpression; + private final CronExpression cronExpression; - private Callable callable; + private final Callable callable; private ZonedDateTime lastCalled; private ZonedDateTime nextCall; - Entry(String name, CronExpression cronExpression, Callable callable) { + public Entry(String name, CronExpression cronExpression, Callable callable) { this.name = name; this.cronExpression = cronExpression; this.callable = callable; diff --git a/src/main/java/org/xbib/time/schedule/Keywords.java b/src/main/java/org/xbib/time/schedule/Keywords.java index ed6fa29..924c3de 100644 --- a/src/main/java/org/xbib/time/schedule/Keywords.java +++ b/src/main/java/org/xbib/time/schedule/Keywords.java @@ -2,7 +2,8 @@ package org.xbib.time.schedule; import java.util.Arrays; -final class Keywords { +public final class Keywords { + private final int[][][] keywords = new int[26][26][26]; public Keywords() { diff --git a/src/main/java/org/xbib/time/schedule/MonthField.java b/src/main/java/org/xbib/time/schedule/MonthField.java index 8dc91a8..11cb56c 100644 --- a/src/main/java/org/xbib/time/schedule/MonthField.java +++ b/src/main/java/org/xbib/time/schedule/MonthField.java @@ -11,6 +11,7 @@ public class MonthField extends DefaultField { } public static class Builder extends DefaultField.Builder { + protected static final Keywords KEYWORDS = new Keywords(); static { diff --git a/src/main/java/org/xbib/time/schedule/RebootCronExpression.java b/src/main/java/org/xbib/time/schedule/RebootCronExpression.java index 311d854..045181a 100644 --- a/src/main/java/org/xbib/time/schedule/RebootCronExpression.java +++ b/src/main/java/org/xbib/time/schedule/RebootCronExpression.java @@ -6,11 +6,11 @@ import java.util.concurrent.atomic.AtomicBoolean; /** * Matches once only. */ -final class RebootCronExpression extends CronExpression { +public final class RebootCronExpression extends CronExpression { private final AtomicBoolean matchOnce; - RebootCronExpression() { + public RebootCronExpression() { matchOnce = new AtomicBoolean(true); } diff --git a/src/main/java/org/xbib/time/schedule/Token.java b/src/main/java/org/xbib/time/schedule/Token.java index c5eb584..ccd645e 100644 --- a/src/main/java/org/xbib/time/schedule/Token.java +++ b/src/main/java/org/xbib/time/schedule/Token.java @@ -1,6 +1,6 @@ package org.xbib.time.schedule; -enum Token { +public enum Token { END_OF_INPUT, FIELD_SEPARATOR, LAST, diff --git a/src/main/java/org/xbib/time/schedule/Tokens.java b/src/main/java/org/xbib/time/schedule/Tokens.java index ad950f0..07b97fe 100644 --- a/src/main/java/org/xbib/time/schedule/Tokens.java +++ b/src/main/java/org/xbib/time/schedule/Tokens.java @@ -1,6 +1,10 @@ package org.xbib.time.schedule; -final class Tokens { +public final class Tokens { + + private final String source; + + private final int length; private int number; @@ -8,8 +12,6 @@ final class Tokens { private Keywords keywords; - private final String source; - private final int length; private int position; public Tokens(String s) { diff --git a/src/main/java/org/xbib/time/util/TreeMultiMap.java b/src/main/java/org/xbib/time/util/TreeMultiMap.java deleted file mode 100644 index 89ef157..0000000 --- a/src/main/java/org/xbib/time/util/TreeMultiMap.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.xbib.time.util; - -import java.util.Collection; -import java.util.Comparator; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.TreeMap; - -/** - * A {@link TreeMap} based multi map. The keys ore ordered by a comparator. - * @param te key type - * @param the value type - */ -public class TreeMultiMap extends AbstractMultiMap { - - private final Comparator comparator; - - public TreeMultiMap(Comparator comparator) { - this.comparator = comparator; - } - - @Override - Map> newMap() { - return new TreeMap<>(comparator); - } - - @Override - Collection newValues() { - return new LinkedHashSet<>(); - } -} diff --git a/src/test/java/org/xbib/time/chronic/ChronicTest.java b/src/test/java/org/xbib/time/chronic/ChronicTest.java index ddf6c31..44d0753 100644 --- a/src/test/java/org/xbib/time/chronic/ChronicTest.java +++ b/src/test/java/org/xbib/time/chronic/ChronicTest.java @@ -3,10 +3,10 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.handlers.Handler; +import org.xbib.time.chronic.repeaters.DayPortion; import org.xbib.time.chronic.repeaters.EnumRepeaterDayPortion; import org.xbib.time.chronic.repeaters.RepeaterDayName; -import org.xbib.time.chronic.repeaters.RepeaterDayName.DayName; -import org.xbib.time.chronic.repeaters.RepeaterDayPortion; +import org.xbib.time.chronic.repeaters.DayName; import org.xbib.time.chronic.repeaters.RepeaterTime; import java.time.ZoneId; @@ -46,13 +46,13 @@ public class ChronicTest { tokens.add(new Token("5:00")); tokens.add(new Token("morning")); tokens.get(0).tag(new RepeaterTime("5:00")); - tokens.get(1).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.MORNING)); + tokens.get(1).tag(new EnumRepeaterDayPortion(DayPortion.MORNING)); - assertEquals(RepeaterDayPortion.DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); + assertEquals(DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); tokens = Handler.dealiasAndDisambiguateTimes(tokens, new Options()); - assertEquals(RepeaterDayPortion.DayPortion.AM, tokens.get(1).getTags().get(0).getType()); + assertEquals(DayPortion.AM, tokens.get(1).getTags().get(0).getType()); assertEquals(2, tokens.size()); // don't affect unwanted patterns @@ -60,13 +60,13 @@ public class ChronicTest { tokens.add(new Token("friday")); tokens.add(new Token("morning")); tokens.get(0).tag(new RepeaterDayName(DayName.FRIDAY)); - tokens.get(1).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.MORNING)); + tokens.get(1).tag(new EnumRepeaterDayPortion(DayPortion.MORNING)); - assertEquals(RepeaterDayPortion.DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); + assertEquals(DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); tokens = Handler.dealiasAndDisambiguateTimes(tokens, new Options()); - assertEquals(RepeaterDayPortion.DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); + assertEquals(DayPortion.MORNING, tokens.get(1).getTags().get(0).getType()); assertEquals(2, tokens.size()); } diff --git a/src/test/java/org/xbib/time/chronic/HandlerTest.java b/src/test/java/org/xbib/time/chronic/HandlerTest.java index 3a3862b..467e924 100644 --- a/src/test/java/org/xbib/time/chronic/HandlerTest.java +++ b/src/test/java/org/xbib/time/chronic/HandlerTest.java @@ -7,14 +7,17 @@ import org.xbib.time.chronic.handlers.DummyHandler; import org.xbib.time.chronic.handlers.Handler; import org.xbib.time.chronic.handlers.HandlerTypePattern; import org.xbib.time.chronic.handlers.TagPattern; +import org.xbib.time.chronic.repeaters.DayName; +import org.xbib.time.chronic.repeaters.DayPortion; import org.xbib.time.chronic.repeaters.EnumRepeaterDayPortion; +import org.xbib.time.chronic.repeaters.MonthName; import org.xbib.time.chronic.repeaters.Repeater; import org.xbib.time.chronic.repeaters.RepeaterDayName; -import org.xbib.time.chronic.repeaters.RepeaterDayPortion; import org.xbib.time.chronic.repeaters.RepeaterMonthName; import org.xbib.time.chronic.repeaters.RepeaterTime; import org.xbib.time.chronic.repeaters.RepeaterYear; import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import org.xbib.time.chronic.tags.Scalar; import org.xbib.time.chronic.tags.ScalarDay; @@ -28,10 +31,10 @@ public class HandlerTest { Handler handler = new Handler(new DummyHandler(), new TagPattern(Repeater.class)); List tokens = new LinkedList<>(); tokens.add(new Token("friday")); - tokens.get(0).tag(new RepeaterDayName(RepeaterDayName.DayName.FRIDAY)); + tokens.get(0).tag(new RepeaterDayName(DayName.FRIDAY)); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("afternoon")); - tokens.get(1).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.AFTERNOON)); + tokens.get(1).tag(new EnumRepeaterDayPortion(DayPortion.AFTERNOON)); assertFalse(handler.match(tokens, Handler.definitions())); } @@ -40,13 +43,13 @@ public class HandlerTest { Handler handler = new Handler(new DummyHandler(), new TagPattern(Repeater.class), new TagPattern(Repeater.class, true)); List tokens = new LinkedList<>(); tokens.add(new Token("friday")); - tokens.get(0).tag(new RepeaterDayName(RepeaterDayName.DayName.FRIDAY)); + tokens.get(0).tag(new RepeaterDayName(DayName.FRIDAY)); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("afternoon")); - tokens.get(1).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.AFTERNOON)); + tokens.get(1).tag(new EnumRepeaterDayPortion(DayPortion.AFTERNOON)); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("afternoon")); - tokens.get(2).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.AFTERNOON)); + tokens.get(2).tag(new EnumRepeaterDayPortion(DayPortion.AFTERNOON)); assertFalse(handler.match(tokens, Handler.definitions())); } @@ -55,10 +58,10 @@ public class HandlerTest { Handler handler = new Handler(new DummyHandler(), new TagPattern(Repeater.class), new HandlerTypePattern(Handler.HandlerType.TIME, true)); List tokens = new LinkedList<>(); tokens.add(new Token("friday")); - tokens.get(0).tag(new RepeaterDayName(RepeaterDayName.DayName.FRIDAY)); + tokens.get(0).tag(new RepeaterDayName(DayName.FRIDAY)); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("afternoon")); - tokens.get(1).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.AFTERNOON)); + tokens.get(1).tag(new EnumRepeaterDayPortion(DayPortion.AFTERNOON)); assertFalse(handler.match(tokens, Handler.definitions())); } @@ -67,7 +70,7 @@ public class HandlerTest { Handler handler = new Handler(new DummyHandler(), new TagPattern(RepeaterMonthName.class), new TagPattern(ScalarDay.class), new HandlerTypePattern(Handler.HandlerType.TIME, true)); List tokens = new LinkedList<>(); tokens.add(new Token("may")); - tokens.get(0).tag(new RepeaterMonthName(RepeaterMonthName.MonthName.MAY)); + tokens.get(0).tag(new RepeaterMonthName(MonthName.MAY)); assertFalse(handler.match(tokens, Handler.definitions())); tokens.add(new Token("27")); tokens.get(1).tag(new ScalarDay(27)); @@ -79,13 +82,13 @@ public class HandlerTest { Handler handler = new Handler(new DummyHandler(), new TagPattern(Repeater.class), new HandlerTypePattern(Handler.HandlerType.TIME, true)); List tokens = new LinkedList<>(); tokens.add(new Token("friday")); - tokens.get(0).tag(new RepeaterDayName(RepeaterDayName.DayName.FRIDAY)); + tokens.get(0).tag(new RepeaterDayName(DayName.FRIDAY)); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("5:00")); tokens.get(1).tag(new RepeaterTime("5:00")); assertTrue(handler.match(tokens, Handler.definitions())); tokens.add(new Token("pm")); - tokens.get(2).tag(new EnumRepeaterDayPortion(RepeaterDayPortion.DayPortion.PM)); + tokens.get(2).tag(new EnumRepeaterDayPortion(DayPortion.PM)); assertTrue(handler.match(tokens, Handler.definitions())); } @@ -98,7 +101,7 @@ public class HandlerTest { tokens.add(new Token("past")); tokens.get(0).tag(new Scalar(3)); tokens.get(1).tag(new RepeaterYear()); - tokens.get(2).tag(new Pointer(Pointer.PointerType.PAST)); + tokens.get(2).tag(new Pointer(PointerType.PAST)); assertTrue(handler.match(tokens, Handler.definitions())); } } diff --git a/src/test/java/org/xbib/time/chronic/ParserTest.java b/src/test/java/org/xbib/time/chronic/ParserTest.java index f57b58c..fce0190 100644 --- a/src/test/java/org/xbib/time/chronic/ParserTest.java +++ b/src/test/java/org/xbib/time/chronic/ParserTest.java @@ -2,7 +2,7 @@ package org.xbib.time.chronic; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.text.ParseException; import java.time.ZoneId; @@ -48,16 +48,16 @@ public class ParserTest { time = parse_now("may 27"); assertEquals(construct(2007, 5, 27, 12), time); - time = parse_now("may 28", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 28", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 28, 12), time); - time = parse_now("may 28 5pm", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 28 5pm", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 28, 17), time); - time = parse_now("may 28 at 5pm", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 28 at 5pm", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 28, 17), time); - time = parse_now("may 28 at 5:32.19pm", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 28 at 5:32.19pm", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 28, 17, 32, 19), time); // rm_od @@ -65,13 +65,13 @@ public class ParserTest { time = parse_now("may 27th"); assertEquals(construct(2007, 5, 27, 12), time); - time = parse_now("may 27th", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 27th", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 27, 12), time); - time = parse_now("may 27th 5:00 pm", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 27th 5:00 pm", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 27, 17), time); - time = parse_now("may 27th at 5pm", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("may 27th at 5pm", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 5, 27, 17), time); time = parse_now("may 27th at 5", new Options().setAmbiguousTimeRange(0)); @@ -300,7 +300,7 @@ public class ParserTest { //assertEquals(construct(2006, 10, 24, 12, 30), time); assertEquals(construct(2006, 10, 24, 12), time); - time = parse_now("this year", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this year", new Options().setContext(PointerType.PAST)); //assertEquals(construct(2006, 4, 24, 12, 30), time); assertEquals(construct(2006, 4, 24, 12), time); @@ -309,7 +309,7 @@ public class ParserTest { time = parse_now("this month"); assertEquals(construct(2006, 8, 24, 12), time); - time = parse_now("this month", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this month", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 8, 12), time); Options options = new Options(); @@ -328,7 +328,7 @@ public class ParserTest { time = parse_now("this fortnight"); assertEquals(construct(2006, 8, 21, 19, 30), time); - time = parse_now("this fortnight", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this fortnight", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 14, 19), time); // week @@ -336,7 +336,7 @@ public class ParserTest { time = parse_now("this week"); assertEquals(construct(2006, 8, 18, 7, 30), time); - time = parse_now("this week", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this week", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 14, 19), time); // week @@ -344,7 +344,7 @@ public class ParserTest { time = parse_now("this weekend"); assertEquals(construct(2006, 8, 20), time); - time = parse_now("this weekend", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this weekend", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 13), time); time = parse_now("last weekend"); @@ -355,7 +355,7 @@ public class ParserTest { time = parse_now("this day"); assertEquals(construct(2006, 8, 16, 19, 30), time); - time = parse_now("this day", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this day", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 16, 7), time); time = parse_now("today"); @@ -405,7 +405,7 @@ public class ParserTest { time = parse_now("this second"); assertEquals(construct(2006, 8, 16, 14), time); - time = parse_now("this second", new Options().setContext(Pointer.PointerType.PAST)); + time = parse_now("this second", new Options().setContext(PointerType.PAST)); assertEquals(construct(2006, 8, 16, 14), time); time = parse_now("next second"); diff --git a/src/test/java/org/xbib/time/chronic/RepeaterDayNameTest.java b/src/test/java/org/xbib/time/chronic/RepeaterDayNameTest.java index 880ef4f..156c67c 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterDayNameTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterDayNameTest.java @@ -2,8 +2,9 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.xbib.time.chronic.repeaters.DayName; import org.xbib.time.chronic.repeaters.RepeaterDayName; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -26,24 +27,24 @@ public class RepeaterDayNameTest { public void testMatch() { Token token = new Token("saturday"); RepeaterDayName repeater = RepeaterDayName.scan(token); - assertEquals(RepeaterDayName.DayName.SATURDAY, repeater.getType()); + assertEquals(DayName.SATURDAY, repeater.getType()); token = new Token("sunday"); repeater = RepeaterDayName.scan(token); - assertEquals(RepeaterDayName.DayName.SUNDAY, repeater.getType()); + assertEquals(DayName.SUNDAY, repeater.getType()); } @Test public void testNextFuture() { Span span; - RepeaterDayName mondays = new RepeaterDayName(RepeaterDayName.DayName.MONDAY); + RepeaterDayName mondays = new RepeaterDayName(DayName.MONDAY); mondays.setNow(now); - span = mondays.nextSpan(Pointer.PointerType.FUTURE); + span = mondays.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 21), span.getBeginCalendar()); assertEquals(construct(2006, 8, 22), span.getEndCalendar()); - span = mondays.nextSpan(Pointer.PointerType.FUTURE); + span = mondays.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 28), span.getBeginCalendar()); assertEquals(construct(2006, 8, 29), span.getEndCalendar()); } @@ -52,13 +53,13 @@ public class RepeaterDayNameTest { public void testNextPast() { Span span; - RepeaterDayName mondays = new RepeaterDayName(RepeaterDayName.DayName.MONDAY); + RepeaterDayName mondays = new RepeaterDayName(DayName.MONDAY); mondays.setNow(now); - span = mondays.nextSpan(Pointer.PointerType.PAST); + span = mondays.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 14), span.getBeginCalendar()); assertEquals(construct(2006, 8, 15), span.getEndCalendar()); - span = mondays.nextSpan(Pointer.PointerType.PAST); + span = mondays.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 7), span.getBeginCalendar()); assertEquals(construct(2006, 8, 8), span.getEndCalendar()); } diff --git a/src/test/java/org/xbib/time/chronic/RepeaterFortnightTest.java b/src/test/java/org/xbib/time/chronic/RepeaterFortnightTest.java index 7fb6352..3e4b220 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterFortnightTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterFortnightTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterFortnight; import org.xbib.time.chronic.repeaters.RepeaterWeek; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -37,11 +37,11 @@ public class RepeaterFortnightTest { RepeaterFortnight fortnights = new RepeaterFortnight(); fortnights.setNow(now); - Span nextFortnight = fortnights.nextSpan(Pointer.PointerType.FUTURE); + Span nextFortnight = fortnights.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 20), nextFortnight.getBeginCalendar()); assertEquals(construct(2006, 9, 3), nextFortnight.getEndCalendar()); - Span nextNextFortnight = fortnights.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextFortnight = fortnights.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 9, 3), nextNextFortnight.getBeginCalendar()); assertEquals(construct(2006, 9, 17), nextNextFortnight.getEndCalendar()); } @@ -50,11 +50,11 @@ public class RepeaterFortnightTest { public void testNextPast() { RepeaterFortnight fortnights = new RepeaterFortnight(); fortnights.setNow(now); - Span lastFortnight = fortnights.nextSpan(Pointer.PointerType.PAST); + Span lastFortnight = fortnights.nextSpan(PointerType.PAST); assertEquals(construct(2006, 7, 30), lastFortnight.getBeginCalendar()); assertEquals(construct(2006, 8, 13), lastFortnight.getEndCalendar()); - Span lastLastFortnight = fortnights.nextSpan(Pointer.PointerType.PAST); + Span lastLastFortnight = fortnights.nextSpan(PointerType.PAST); assertEquals(construct(2006, 7, 16), lastLastFortnight.getBeginCalendar()); assertEquals(construct(2006, 7, 30), lastLastFortnight.getEndCalendar()); } @@ -64,7 +64,7 @@ public class RepeaterFortnightTest { RepeaterFortnight fortnights = new RepeaterFortnight(); fortnights.setNow(now); - Span thisFortnight = fortnights.thisSpan(Pointer.PointerType.FUTURE); + Span thisFortnight = fortnights.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 15), thisFortnight.getBeginCalendar()); assertEquals(construct(2006, 8, 27), thisFortnight.getEndCalendar()); } @@ -74,7 +74,7 @@ public class RepeaterFortnightTest { RepeaterFortnight fortnights = new RepeaterFortnight(); fortnights.setNow(now); - Span thisFortnight = fortnights.thisSpan(Pointer.PointerType.PAST); + Span thisFortnight = fortnights.thisSpan(PointerType.PAST); assertEquals(construct(2006, 8, 13, 0), thisFortnight.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 14), thisFortnight.getEndCalendar()); } @@ -83,7 +83,7 @@ public class RepeaterFortnightTest { public void testOffset() { Span span = new Span(now, ChronoUnit.SECONDS, 1); - Span offsetSpan = new RepeaterWeek().getOffset(span, 3, Pointer.PointerType.FUTURE); + Span offsetSpan = new RepeaterWeek().getOffset(span, 3, PointerType.FUTURE); assertEquals(construct(2006, 9, 6, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 9, 6, 14, 0, 1), offsetSpan.getEndCalendar()); diff --git a/src/test/java/org/xbib/time/chronic/RepeaterHourTest.java b/src/test/java/org/xbib/time/chronic/RepeaterHourTest.java index b5845ae..2372de4 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterHourTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterHourTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterHour; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -31,11 +31,11 @@ public class RepeaterHourTest { RepeaterHour hours = new RepeaterHour(); hours.setNow(now); - Span nextHour = hours.nextSpan(Pointer.PointerType.FUTURE); + Span nextHour = hours.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 15), nextHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 16), nextHour.getEndCalendar()); - Span nextNextHour = hours.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextHour = hours.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 16), nextNextHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 17), nextNextHour.getEndCalendar()); } @@ -44,11 +44,11 @@ public class RepeaterHourTest { public void testNextPast() { RepeaterHour hours = new RepeaterHour(); hours.setNow(now); - Span lastHour = hours.nextSpan(Pointer.PointerType.PAST); + Span lastHour = hours.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 16, 13), lastHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 14), lastHour.getEndCalendar()); - Span lastLastHour = hours.nextSpan(Pointer.PointerType.PAST); + Span lastLastHour = hours.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 16, 12), lastLastHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 13), lastLastHour.getEndCalendar()); } @@ -61,11 +61,11 @@ public class RepeaterHourTest { hours.setNow(now); Span thisHour; - thisHour = hours.thisSpan(Pointer.PointerType.FUTURE); + thisHour = hours.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 14, 31), thisHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 15), thisHour.getEndCalendar()); - thisHour = hours.thisSpan(Pointer.PointerType.PAST); + thisHour = hours.thisSpan(PointerType.PAST); assertEquals(construct(2006, 8, 16, 14), thisHour.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 14, 30), thisHour.getEndCalendar()); } @@ -75,12 +75,12 @@ public class RepeaterHourTest { Span span = new Span(now, ChronoUnit.SECONDS, 1); Span offsetSpan; - offsetSpan = new RepeaterHour().getOffset(span, 3, Pointer.PointerType.FUTURE); + offsetSpan = new RepeaterHour().getOffset(span, 3, PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 17), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 17, 0, 1), offsetSpan.getEndCalendar()); - offsetSpan = new RepeaterHour().getOffset(span, 24, Pointer.PointerType.PAST); + offsetSpan = new RepeaterHour().getOffset(span, 24, PointerType.PAST); assertEquals(construct(2006, 8, 15, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 8, 15, 14, 0, 1), offsetSpan.getEndCalendar()); diff --git a/src/test/java/org/xbib/time/chronic/RepeaterMonthNameTest.java b/src/test/java/org/xbib/time/chronic/RepeaterMonthNameTest.java index 30f01fd..96d5f26 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterMonthNameTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterMonthNameTest.java @@ -2,8 +2,9 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.xbib.time.chronic.repeaters.MonthName; import org.xbib.time.chronic.repeaters.RepeaterMonthName; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -24,42 +25,42 @@ public class RepeaterMonthNameTest { @Test public void testNext() { - RepeaterMonthName mays = new RepeaterMonthName(RepeaterMonthName.MonthName.MAY); + RepeaterMonthName mays = new RepeaterMonthName(MonthName.MAY); mays.setNow(now); - Span nextMay = mays.nextSpan(Pointer.PointerType.FUTURE); + Span nextMay = mays.nextSpan(PointerType.FUTURE); assertEquals(construct(2007, 5), nextMay.getBeginCalendar()); assertEquals(construct(2007, 6), nextMay.getEndCalendar()); - Span nextNextMay = mays.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextMay = mays.nextSpan(PointerType.FUTURE); assertEquals(construct(2008, 5), nextNextMay.getBeginCalendar()); assertEquals(construct(2008, 6), nextNextMay.getEndCalendar()); - RepeaterMonthName decembers = new RepeaterMonthName(RepeaterMonthName.MonthName.DECEMBER); + RepeaterMonthName decembers = new RepeaterMonthName(MonthName.DECEMBER); decembers.setNow(now); - Span nextDecember = decembers.nextSpan(Pointer.PointerType.FUTURE); + Span nextDecember = decembers.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 12), nextDecember.getBeginCalendar()); assertEquals(construct(2007, 1), nextDecember.getEndCalendar()); - mays = new RepeaterMonthName(RepeaterMonthName.MonthName.MAY); + mays = new RepeaterMonthName(MonthName.MAY); mays.setNow(now); - assertEquals(construct(2006, 5), mays.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); - assertEquals(construct(2005, 5), mays.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2006, 5), mays.nextSpan(PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2005, 5), mays.nextSpan(PointerType.PAST).getBeginCalendar()); } @Test public void testThis() { - RepeaterMonthName octobers = new RepeaterMonthName(RepeaterMonthName.MonthName.MAY); + RepeaterMonthName octobers = new RepeaterMonthName(MonthName.MAY); octobers.setNow(now); - Span nextMay = octobers.nextSpan(Pointer.PointerType.FUTURE); + Span nextMay = octobers.nextSpan(PointerType.FUTURE); assertEquals(construct(2007, 5), nextMay.getBeginCalendar()); assertEquals(construct(2007, 6), nextMay.getEndCalendar()); - Span nextNextMay = octobers.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextMay = octobers.nextSpan(PointerType.FUTURE); assertEquals(construct(2008, 5), nextNextMay.getBeginCalendar()); assertEquals(construct(2008, 6), nextNextMay.getEndCalendar()); } diff --git a/src/test/java/org/xbib/time/chronic/RepeaterMonthTest.java b/src/test/java/org/xbib/time/chronic/RepeaterMonthTest.java index 03378cf..d4e159a 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterMonthTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterMonthTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterMonth; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -32,12 +32,12 @@ public class RepeaterMonthTest { Span span = new Span(now, ChronoUnit.SECONDS, 60); Span offsetSpan; - offsetSpan = new RepeaterMonth().getOffset(span, 1, Pointer.PointerType.FUTURE); + offsetSpan = new RepeaterMonth().getOffset(span, 1, PointerType.FUTURE); assertEquals(construct(2006, 9, 16, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 9, 16, 14, 1), offsetSpan.getEndCalendar()); - offsetSpan = new RepeaterMonth().getOffset(span, 1, Pointer.PointerType.PAST); + offsetSpan = new RepeaterMonth().getOffset(span, 1, PointerType.PAST); assertEquals(construct(2006, 7, 16, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 7, 16, 14, 1), offsetSpan.getEndCalendar()); diff --git a/src/test/java/org/xbib/time/chronic/RepeaterTimeTest.java b/src/test/java/org/xbib/time/chronic/RepeaterTimeTest.java index e00b656..e062aa1 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterTimeTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterTimeTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterTime; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -33,20 +33,20 @@ public class RepeaterTimeTest { t = new RepeaterTime("4:00"); t.setNow(now); - assertEquals(construct(2006, 8, 16, 16), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); - assertEquals(construct(2006, 8, 17, 4), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 16, 16), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 17, 4), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); t = new RepeaterTime("13:00"); t.setNow(now); - assertEquals(construct(2006, 8, 17, 13), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); - assertEquals(construct(2006, 8, 18, 13), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 17, 13), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 18, 13), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); t = new RepeaterTime("0400"); t.setNow(now); - assertEquals(construct(2006, 8, 17, 4), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); - assertEquals(construct(2006, 8, 18, 4), t.nextSpan(Pointer.PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 17, 4), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); + assertEquals(construct(2006, 8, 18, 4), t.nextSpan(PointerType.FUTURE).getBeginCalendar()); } @Test @@ -55,14 +55,14 @@ public class RepeaterTimeTest { t = new RepeaterTime("4:00"); t.setNow(now); - assertEquals(construct(2006, 8, 16, 4), t.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); - assertEquals(construct(2006, 8, 15, 16), t.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2006, 8, 16, 4), t.nextSpan(PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2006, 8, 15, 16), t.nextSpan(PointerType.PAST).getBeginCalendar()); t = new RepeaterTime("13:00"); t.setNow(now); - assertEquals(construct(2006, 8, 16, 13), t.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); - assertEquals(construct(2006, 8, 15, 13), t.nextSpan(Pointer.PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2006, 8, 16, 13), t.nextSpan(PointerType.PAST).getBeginCalendar()); + assertEquals(construct(2006, 8, 15, 13), t.nextSpan(PointerType.PAST).getBeginCalendar()); } @Test diff --git a/src/test/java/org/xbib/time/chronic/RepeaterWeekTest.java b/src/test/java/org/xbib/time/chronic/RepeaterWeekTest.java index 446d581..39e5f38 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterWeekTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterWeekTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterWeek; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -32,11 +32,11 @@ public class RepeaterWeekTest { RepeaterWeek weeks = new RepeaterWeek(); weeks.setNow(now); - Span nextWeek = weeks.nextSpan(Pointer.PointerType.FUTURE); + Span nextWeek = weeks.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 20), nextWeek.getBeginCalendar()); assertEquals(construct(2006, 8, 27), nextWeek.getEndCalendar()); - Span nextNextWeek = weeks.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextWeek = weeks.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 27), nextNextWeek.getBeginCalendar()); assertEquals(construct(2006, 9, 3), nextNextWeek.getEndCalendar()); } @@ -45,11 +45,11 @@ public class RepeaterWeekTest { public void testNextPast() { RepeaterWeek weeks = new RepeaterWeek(); weeks.setNow(now); - Span lastWeek = weeks.nextSpan(Pointer.PointerType.PAST); + Span lastWeek = weeks.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 6), lastWeek.getBeginCalendar()); assertEquals(construct(2006, 8, 13), lastWeek.getEndCalendar()); - Span lastLastWeek = weeks.nextSpan(Pointer.PointerType.PAST); + Span lastLastWeek = weeks.nextSpan(PointerType.PAST); assertEquals(construct(2006, 7, 30), lastLastWeek.getBeginCalendar()); assertEquals(construct(2006, 8, 6), lastLastWeek.getEndCalendar()); } @@ -59,7 +59,7 @@ public class RepeaterWeekTest { RepeaterWeek weeks = new RepeaterWeek(); weeks.setNow(now); - Span thisWeek = weeks.thisSpan(Pointer.PointerType.FUTURE); + Span thisWeek = weeks.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 16, 15), thisWeek.getBeginCalendar()); assertEquals(construct(2006, 8, 20), thisWeek.getEndCalendar()); } @@ -69,7 +69,7 @@ public class RepeaterWeekTest { RepeaterWeek weeks = new RepeaterWeek(); weeks.setNow(now); - Span thisWeek = weeks.thisSpan(Pointer.PointerType.PAST); + Span thisWeek = weeks.thisSpan(PointerType.PAST); assertEquals(construct(2006, 8, 13, 0), thisWeek.getBeginCalendar()); assertEquals(construct(2006, 8, 16, 14), thisWeek.getEndCalendar()); } @@ -78,7 +78,7 @@ public class RepeaterWeekTest { public void testOffset() { Span span = new Span(now, ChronoUnit.SECONDS, 1); - Span offsetSpan = new RepeaterWeek().getOffset(span, 3, Pointer.PointerType.FUTURE); + Span offsetSpan = new RepeaterWeek().getOffset(span, 3, PointerType.FUTURE); assertEquals(construct(2006, 9, 6, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 9, 6, 14, 0, 1), offsetSpan.getEndCalendar()); diff --git a/src/test/java/org/xbib/time/chronic/RepeaterWeekendTest.java b/src/test/java/org/xbib/time/chronic/RepeaterWeekendTest.java index ab4ef77..ca500cf 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterWeekendTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterWeekendTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterWeekend; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -28,7 +28,7 @@ public class RepeaterWeekendTest { RepeaterWeekend weekends = new RepeaterWeekend(); weekends.setNow(now); - Span nextWeekend = weekends.nextSpan(Pointer.PointerType.FUTURE); + Span nextWeekend = weekends.nextSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 19), nextWeekend.getBeginCalendar()); assertEquals(construct(2006, 8, 21), nextWeekend.getEndCalendar()); } @@ -37,7 +37,7 @@ public class RepeaterWeekendTest { public void testNextPast() { RepeaterWeekend weekends = new RepeaterWeekend(); weekends.setNow(now); - Span lastWeekend = weekends.nextSpan(Pointer.PointerType.PAST); + Span lastWeekend = weekends.nextSpan(PointerType.PAST); assertEquals(construct(2006, 8, 12), lastWeekend.getBeginCalendar()); assertEquals(construct(2006, 8, 14), lastWeekend.getEndCalendar()); } @@ -47,7 +47,7 @@ public class RepeaterWeekendTest { RepeaterWeekend weekends = new RepeaterWeekend(); weekends.setNow(now); - Span thisWeekend = weekends.thisSpan(Pointer.PointerType.FUTURE); + Span thisWeekend = weekends.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 19), thisWeekend.getBeginCalendar()); assertEquals(construct(2006, 8, 21), thisWeekend.getEndCalendar()); } @@ -57,7 +57,7 @@ public class RepeaterWeekendTest { RepeaterWeekend weekends = new RepeaterWeekend(); weekends.setNow(now); - Span thisWeekend = weekends.thisSpan(Pointer.PointerType.PAST); + Span thisWeekend = weekends.thisSpan(PointerType.PAST); assertEquals(construct(2006, 8, 12), thisWeekend.getBeginCalendar()); assertEquals(construct(2006, 8, 14), thisWeekend.getEndCalendar()); } @@ -67,7 +67,7 @@ public class RepeaterWeekendTest { RepeaterWeekend weekends = new RepeaterWeekend(); weekends.setNow(now); - Span thisWeekend = weekends.thisSpan(Pointer.PointerType.FUTURE); + Span thisWeekend = weekends.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 19), thisWeekend.getBeginCalendar()); assertEquals(construct(2006, 8, 21), thisWeekend.getEndCalendar()); } @@ -78,15 +78,15 @@ public class RepeaterWeekendTest { Span offsetSpan; - offsetSpan = new RepeaterWeekend().getOffset(span, 3, Pointer.PointerType.FUTURE); + offsetSpan = new RepeaterWeekend().getOffset(span, 3, PointerType.FUTURE); assertEquals(construct(2006, 9, 2), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 9, 2, 0, 0, 1), offsetSpan.getEndCalendar()); - offsetSpan = new RepeaterWeekend().getOffset(span, 1, Pointer.PointerType.PAST); + offsetSpan = new RepeaterWeekend().getOffset(span, 1, PointerType.PAST); assertEquals(construct(2006, 8, 12), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 8, 12, 0, 0, 1), offsetSpan.getEndCalendar()); - offsetSpan = new RepeaterWeekend().getOffset(span, 0, Pointer.PointerType.FUTURE); + offsetSpan = new RepeaterWeekend().getOffset(span, 0, PointerType.FUTURE); assertEquals(construct(2006, 8, 12), offsetSpan.getBeginCalendar()); assertEquals(construct(2006, 8, 12, 0, 0, 1), offsetSpan.getEndCalendar()); } diff --git a/src/test/java/org/xbib/time/chronic/RepeaterYearTest.java b/src/test/java/org/xbib/time/chronic/RepeaterYearTest.java index 31d4026..3bc9a83 100644 --- a/src/test/java/org/xbib/time/chronic/RepeaterYearTest.java +++ b/src/test/java/org/xbib/time/chronic/RepeaterYearTest.java @@ -3,7 +3,7 @@ package org.xbib.time.chronic; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.xbib.time.chronic.repeaters.RepeaterYear; -import org.xbib.time.chronic.tags.Pointer; +import org.xbib.time.chronic.tags.PointerType; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -32,11 +32,11 @@ public class RepeaterYearTest { RepeaterYear years = new RepeaterYear(); years.setNow(now); - Span nextYear = years.nextSpan(Pointer.PointerType.FUTURE); + Span nextYear = years.nextSpan(PointerType.FUTURE); assertEquals(construct(2007, 1, 1), nextYear.getBeginCalendar()); assertEquals(construct(2008, 1, 1), nextYear.getEndCalendar()); - Span nextNextYear = years.nextSpan(Pointer.PointerType.FUTURE); + Span nextNextYear = years.nextSpan(PointerType.FUTURE); assertEquals(construct(2008, 1, 1), nextNextYear.getBeginCalendar()); assertEquals(construct(2009, 1, 1), nextNextYear.getEndCalendar()); } @@ -45,11 +45,11 @@ public class RepeaterYearTest { public void testNextPast() { RepeaterYear years = new RepeaterYear(); years.setNow(now); - Span lastYear = years.nextSpan(Pointer.PointerType.PAST); + Span lastYear = years.nextSpan(PointerType.PAST); assertEquals(construct(2005, 1, 1), lastYear.getBeginCalendar()); assertEquals(construct(2006, 1, 1), lastYear.getEndCalendar()); - Span lastLastYear = years.nextSpan(Pointer.PointerType.PAST); + Span lastLastYear = years.nextSpan(PointerType.PAST); assertEquals(construct(2004, 1, 1), lastLastYear.getBeginCalendar()); assertEquals(construct(2005, 1, 1), lastLastYear.getEndCalendar()); } @@ -60,11 +60,11 @@ public class RepeaterYearTest { years.setNow(now); Span thisYear; - thisYear = years.thisSpan(Pointer.PointerType.FUTURE); + thisYear = years.thisSpan(PointerType.FUTURE); assertEquals(construct(2006, 8, 17), thisYear.getBeginCalendar()); assertEquals(construct(2007, 1, 1), thisYear.getEndCalendar()); - thisYear = years.thisSpan(Pointer.PointerType.PAST); + thisYear = years.thisSpan(PointerType.PAST); assertEquals(construct(2006, 1, 1), thisYear.getBeginCalendar()); assertEquals(construct(2006, 8, 16), thisYear.getEndCalendar()); } @@ -74,12 +74,12 @@ public class RepeaterYearTest { Span span = new Span(now, ChronoUnit.SECONDS, 1); Span offsetSpan; - offsetSpan = new RepeaterYear().getOffset(span, 3, Pointer.PointerType.FUTURE); + offsetSpan = new RepeaterYear().getOffset(span, 3, PointerType.FUTURE); assertEquals(construct(2009, 8, 16, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(2009, 8, 16, 14, 0, 1), offsetSpan.getEndCalendar()); - offsetSpan = new RepeaterYear().getOffset(span, 10, Pointer.PointerType.PAST); + offsetSpan = new RepeaterYear().getOffset(span, 10, PointerType.PAST); assertEquals(construct(1996, 8, 16, 14), offsetSpan.getBeginCalendar()); assertEquals(construct(1996, 8, 16, 14, 0, 1), offsetSpan.getEndCalendar());