package com.aol.micro.server.async.data.writer;
import cyclops.async.Future;
import cyclops.collections.ListX;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class MultiDataWriter<T> implements DataWriter<T> {
private final ListX<DataWriter<T>> comparators;
@Override
public Future<T> loadAndGet() {
return comparators.map(c -> c.loadAndGet())
.reduce((acc, next) -> acc.combine(next, (v1, v2) -> v1))
.orElse(Future.ofResult(null));
}
@Override
public Future<Void> saveAndIncrement(T data) {
return comparators.map(c -> c.saveAndIncrement(data))
.reduce((acc, next) -> acc.combine(next, (v1, v2) -> v1))
.orElse(Future.ofResult(null));
}
@Override
public Future<Boolean> isOutOfDate() {
return comparators.map(c -> c.isOutOfDate())
.reduce((acc, next) -> acc.combine(next, (v1, v2) -> v1 || v2))
.orElse(Future.ofResult(false));
}
}