// 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.back.PredictionRepository;
import fi.hsl.parkandride.core.back.UtilizationRepository;
import fi.hsl.parkandride.core.domain.Utilization;
import fi.hsl.parkandride.core.domain.UtilizationKey;
import org.joda.time.DateTime;
import java.util.List;
import java.util.Optional;
import java.util.Set;
public class UtilizationHistoryImpl implements UtilizationHistory {
private final UtilizationRepository utilizationRepository;
private final UtilizationKey utilizationKey;
public UtilizationHistoryImpl(UtilizationRepository utilizationRepository, UtilizationKey utilizationKey) {
this.utilizationRepository = utilizationRepository;
this.utilizationKey = utilizationKey;
}
@Override
public Optional<Utilization> getLatest() {
Set<Utilization> utilizations = utilizationRepository.findLatestUtilization(utilizationKey.facilityId);
return utilizations.stream()
.filter(u -> u.getUtilizationKey().equals(utilizationKey))
.findAny();
}
@Override
public List<Utilization> getRange(DateTime startInclusive, DateTime endInclusive) {
return utilizationRepository.findUtilizationsWithResolution(utilizationKey, startInclusive, endInclusive, PredictionRepository.PREDICTION_RESOLUTION);
}
@Override
public CloseableIterator<Utilization> getUpdatesSince(DateTime startExclusive) {
DateTime start = startExclusive.plusMillis(1);
DateTime end = new DateTime().plusYears(1);
return utilizationRepository.findUtilizationsBetween(utilizationKey, start, end);
}
@Override
public Optional<Utilization> getAt(DateTime instant) {
return utilizationRepository.findUtilizationAtInstant(utilizationKey, instant);
}
}