net.intelie.pipes.time.UnionSpan Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
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;
import static net.intelie.pipes.util.Preconditions.checkState;
public class UnionSpan extends TimeSpanBase {
private static final long serialVersionUID = 1L;
private final List spans;
public UnionSpan(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 "union of " + Iterables.joinWithLast(", ", " and ",
IntStream.rangeClosed(1, spans.size()).mapToObj(x -> "$" + x).collect(Collectors.toList()));
}
@Override
public UnionSpan forceZone(ZoneId zone) {
return new UnionSpan(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)).min().orElse(reference);
}
@Override
public long end(long reference) {
return spans.stream().mapToLong(x -> x.end(reference)).max().orElse(reference);
}
@Override
public boolean isFixed() {
return spans.stream().allMatch(TimeSpan::isFixed);
}
@Override
public boolean isPoint() {
return spans.stream().allMatch(TimeSpan::isPoint);
}
@Override
public boolean includesPresent() {
return spans.stream().anyMatch(TimeSpan::includesPresent);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof UnionSpan)) return false;
UnionSpan that = (UnionSpan) o;
return Objects.equals(this.spans, that.spans);
}
@Override
public int hashCode() {
return Objects.hash(this.spans);
}
}