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

net.intelie.pipes.time.IntersectionSpan Maven / Gradle / Ivy

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


import net.intelie.pipes.util.Iterables;

import java.time.ZoneId;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static net.intelie.pipes.util.Preconditions.checkArgument;

public class IntersectionSpan extends TimeSpanBase {
    private static final long serialVersionUID = 1L;
    private final List spans;

    public IntersectionSpan(List spans) {
        super(makeRepr(spans), spans.toArray(new TimeSpan[0]));
        checkArgument(spans.size() > 0, "Must have at least one span.");

        this.spans = spans;
    }

    private static String makeRepr(List spans) {
        return "intersection of " + Iterables.joinWithLast(", ", " and ",
                IntStream.rangeClosed(1, spans.size()).mapToObj(x -> "$" + x).collect(Collectors.toList()));
    }

    @Override
    public IntersectionSpan forceZone(ZoneId zone) {
        return new IntersectionSpan(spans.stream().map(x -> x.forceZone(zone)).collect(Collectors.toList()));
    }

    public List spans() {
        return Collections.unmodifiableList(spans);
    }

    @Override
    public long start(long reference) {
        return spans.stream().mapToLong(x -> x.start(reference)).max().orElse(reference);
    }

    @Override
    public long end(long reference) {
        return spans.stream().mapToLong(x -> x.end(reference)).min().orElse(reference);
    }

    @Override
    public boolean isFixed() {
        return spans.stream().allMatch(TimeSpan::isFixed);
    }

    @Override
    public boolean isPoint() {
        return spans.stream().anyMatch(TimeSpan::isPoint);
    }

    @Override
    public boolean includesPresent() {
        return spans.stream().allMatch(TimeSpan::includesPresent);
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof IntersectionSpan)) return false;

        IntersectionSpan that = (IntersectionSpan) o;

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

    @Override
    public int hashCode() {
        return Objects.hash(this.spans);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy