Search in sources :

Example 1 with DayOfWeekFieldDefinition

use of com.cronutils.model.field.definition.DayOfWeekFieldDefinition in project cron-utils by jmrozanec.

the class DescriptionStrategyFactory method daysOfWeekInstance.

/**
 * Creates description strategy for days of week.
 *
 * @param bundle     - locale
 * @param expression - CronFieldExpression
 * @return - DescriptionStrategy instance, never null
 */
public static DescriptionStrategy daysOfWeekInstance(final ResourceBundle bundle, final FieldExpression expression, final FieldDefinition definition) {
    final Function<Integer, String> nominal = integer -> {
        final int diff = definition instanceof DayOfWeekFieldDefinition ? DayOfWeek.MONDAY.getValue() - ((DayOfWeekFieldDefinition) definition).getMondayDoWValue().getMondayDoWValue() : 0;
        return DayOfWeek.of(integer + diff < 1 ? 7 : integer + diff).getDisplayName(TextStyle.FULL, bundle.getLocale());
    };
    final NominalDescriptionStrategy dow = new NominalDescriptionStrategy(bundle, nominal, expression);
    dow.addDescription(fieldExpression -> {
        if (fieldExpression instanceof On) {
            final On on = (On) fieldExpression;
            switch(on.getSpecialChar().getValue()) {
                case HASH:
                    return String.format("%s %s %s ", nominal.apply(on.getTime().getValue()), on.getNth(), bundle.getString("of_every_month"));
                case L:
                    return String.format("%s %s %s ", bundle.getString("last"), nominal.apply(on.getTime().getValue()), bundle.getString("of_every_month"));
                default:
                    return "";
            }
        }
        return "";
    });
    return dow;
}
Also used : Every(com.cronutils.model.field.expression.Every) FieldDefinition(com.cronutils.model.field.definition.FieldDefinition) DayOfWeekFieldDefinition(com.cronutils.model.field.definition.DayOfWeekFieldDefinition) ResourceBundle(java.util.ResourceBundle) Month(java.time.Month) TextStyle(java.time.format.TextStyle) DayOfWeek(java.time.DayOfWeek) FieldExpression(com.cronutils.model.field.expression.FieldExpression) On(com.cronutils.model.field.expression.On) Function(com.cronutils.Function) MessageFormat(java.text.MessageFormat) DayOfWeekFieldDefinition(com.cronutils.model.field.definition.DayOfWeekFieldDefinition) On(com.cronutils.model.field.expression.On)

Example 2 with DayOfWeekFieldDefinition

use of com.cronutils.model.field.definition.DayOfWeekFieldDefinition in project cron-utils by jmrozanec.

the class CronMapper method buildMappings.

/**
 * Builds functions that map the fields from source CronDefinition to target.
 *
 * @param from - source CronDefinition
 * @param to   - target CronDefinition
 */
private void buildMappings(final CronDefinition from, final CronDefinition to) {
    final Map<CronFieldName, FieldDefinition> sourceFieldDefinitions = getFieldDefinitions(from);
    final Map<CronFieldName, FieldDefinition> destFieldDefinitions = getFieldDefinitions(to);
    boolean startedDestMapping = false;
    boolean startedSourceMapping = false;
    for (final CronFieldName name : CronFieldName.values()) {
        final FieldDefinition destinationFieldDefinition = destFieldDefinitions.get(name);
        final FieldDefinition sourceFieldDefinition = sourceFieldDefinitions.get(name);
        if (destinationFieldDefinition != null) {
            startedDestMapping = true;
        }
        if (sourceFieldDefinition != null) {
            startedSourceMapping = true;
        }
        if (startedDestMapping && destinationFieldDefinition == null) {
            break;
        }
        // destination has fields before source definition starts. We default them to zero.
        if (!startedSourceMapping && destinationFieldDefinition != null) {
            mappings.put(name, returnOnZeroExpression(name));
        }
        // destination has fields after source definition was processed. We default them to always.
        if (startedSourceMapping && sourceFieldDefinition == null && destinationFieldDefinition != null) {
            mappings.put(name, returnAlwaysExpression(name));
        }
        if (sourceFieldDefinition == null || destinationFieldDefinition == null) {
            continue;
        }
        if (CronFieldName.DAY_OF_WEEK.equals(name)) {
            mappings.put(name, dayOfWeekMapping((DayOfWeekFieldDefinition) sourceFieldDefinition, (DayOfWeekFieldDefinition) destinationFieldDefinition));
        } else if (CronFieldName.DAY_OF_MONTH.equals(name)) {
            mappings.put(name, dayOfMonthMapping(sourceFieldDefinition, destinationFieldDefinition));
        } else {
            mappings.put(name, returnSameExpression());
        }
    }
}
Also used : CronFieldName(com.cronutils.model.field.CronFieldName) DayOfWeekFieldDefinition(com.cronutils.model.field.definition.DayOfWeekFieldDefinition) FieldDefinition(com.cronutils.model.field.definition.FieldDefinition) DayOfWeekFieldDefinition(com.cronutils.model.field.definition.DayOfWeekFieldDefinition)

Aggregations

DayOfWeekFieldDefinition (com.cronutils.model.field.definition.DayOfWeekFieldDefinition)2 FieldDefinition (com.cronutils.model.field.definition.FieldDefinition)2 Function (com.cronutils.Function)1 CronFieldName (com.cronutils.model.field.CronFieldName)1 Every (com.cronutils.model.field.expression.Every)1 FieldExpression (com.cronutils.model.field.expression.FieldExpression)1 On (com.cronutils.model.field.expression.On)1 MessageFormat (java.text.MessageFormat)1 DayOfWeek (java.time.DayOfWeek)1 Month (java.time.Month)1 TextStyle (java.time.format.TextStyle)1 ResourceBundle (java.util.ResourceBundle)1