All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.pipes.cron.FieldList Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
package net.intelie.pipes.cron;

import java.time.temporal.Temporal;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class FieldList implements Field {
    private static final long serialVersionUID = 1L;
    private final List fields;

    public FieldList(Field... fields) {
        this(Arrays.asList(fields));
    }

    public FieldList(List fields) {
        this.fields = fields;
    }

    @Override
    public > T nextOrSame(T date) {
        T next = null;
        for (Field field : fields) {
            T candidate = field.nextOrSame(date);
            if (next == null || candidate != null && candidate.compareTo(next) < 0)
                next = candidate;
        }
        return next;
    }

    @Override
    public boolean matches(Temporal date) {
        for (Field field : fields) {
            if (field.matches(date))
                return true;
        }

        return false;
    }

    @Override
    public > T prevOrSame(T date) {
        T next = null;
        for (Field field : fields) {
            T candidate = field.prevOrSame(date);
            if (next == null || candidate != null && candidate.compareTo(next) > 0)
                next = candidate;
        }
        return next;
    }

    @Override
    public String toString() {
        return fields.stream().map(Object::toString).collect(Collectors.joining(","));
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        FieldList that = (FieldList) o;

        return Objects.equals(this.fields, that.fields);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(fields);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy