// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.domain.prediction;
import com.mysema.commons.lang.CloseableIterator;
import fi.hsl.parkandride.core.domain.Utilization;
import java.util.ArrayList;
import java.util.List;
import static java.util.Spliterator.IMMUTABLE;
import static java.util.Spliterator.NONNULL;
import static java.util.Spliterators.spliteratorUnknownSize;
import static java.util.stream.StreamSupport.stream;
public class SameAsLatestPredictor implements Predictor {
public static final String TYPE = "same-as-latest";
@Override
public String getType() {
return TYPE;
}
@Override
public List<Prediction> predict(PredictorState state, UtilizationHistory history, int maxCapacity) {
List<Prediction> predictions = new ArrayList<>();
try (CloseableIterator<Utilization> utilizations = history.getUpdatesSince(state.latestUtilization)) {
stream(spliteratorUnknownSize(utilizations, NONNULL | IMMUTABLE), false)
.reduce((older, newer) -> newer)
.ifPresent(lastUpdate -> {
state.latestUtilization = lastUpdate.timestamp;
predictions.add(new Prediction(lastUpdate.timestamp, lastUpdate.spacesAvailable));
predictions.add(new Prediction(lastUpdate.timestamp.plusDays(1), lastUpdate.spacesAvailable));
});
}
return predictions;
}
}