com.cronutils.descriptor.refactor.TimeDescriptor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cron-utils Show documentation
Show all versions of cron-utils Show documentation
A Java library to parse, migrate and validate crons as well as describe them in human readable
language
package com.cronutils.descriptor.refactor;
import java.text.ChoiceFormat;
import java.text.Format;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import com.cronutils.model.Cron;
import com.cronutils.model.field.CronField;
import com.cronutils.model.field.CronFieldName;
import com.cronutils.model.field.expression.Always;
import com.cronutils.model.field.expression.Every;
import com.cronutils.model.field.expression.On;
import com.cronutils.utils.Preconditions;
import com.cronutils.utils.StringUtils;
public class TimeDescriptor {
private final ResourceBundle resourceBundle;
public TimeDescriptor(final ResourceBundle resourceBundle) {
this.resourceBundle = Preconditions.checkNotNull(resourceBundle, "The resource bundle must not be null");
}
public String describe(final Cron cron) {
return describe(cron.retrieveFieldsAsMap());
}
private String describe(final Map expressions) {
if (expressions.containsKey(CronFieldName.SECOND)) {
final CronField cronField = expressions.get(CronFieldName.SECOND);
if (cronField.getExpression() instanceof Always) {
return describeEverySecond(1);
} else if (cronField.getExpression() instanceof On) {
return describeAtSecond(((On)cronField.getExpression()).getTime().getValue());
} else if (cronField.getExpression() instanceof Every) {
return describeEverySecond(((Every)cronField.getExpression()).getPeriod().getValue());
}
}
return StringUtils.EMPTY;
}
private String describeEverySecond(final int second) {
final double[] secondsLimit = {1, 2};
final String[] secondsStrings = {
resourceBundle.getString("oneSecond"),
resourceBundle.getString("multipleSeconds")
};
final double[] everyLimit = {1,2};
final String[] everyStrings = {
resourceBundle.getString("every_one"),
resourceBundle.getString("every_multi")
};
final ChoiceFormat secondsChoiceFormat = new ChoiceFormat(secondsLimit, secondsStrings);
final ChoiceFormat everyChoiceFormat = new ChoiceFormat(everyLimit, everyStrings);
final String pattern = resourceBundle.getString("pattern_every_seconds");
final MessageFormat messageFormat = new MessageFormat(pattern, Locale.UK);
final Format[] formats = { everyChoiceFormat, secondsChoiceFormat, NumberFormat.getInstance() };
messageFormat.setFormats(formats);
final Object[] messageArguments = {second, second, second };
final String result = messageFormat.format(messageArguments);
return result;
}
private String describeAtSecond(final int second) {
final String pattern = resourceBundle.getString("pattern_at_second");
final MessageFormat messageFormat = new MessageFormat(pattern, Locale.UK);
final Format[] formats = {NumberFormat.getInstance()};
messageFormat.setFormats(formats);
final Object[] messageArguments = { second };
final String result = messageFormat.format(messageArguments);
return result;
}
}