// 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; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import fi.hsl.parkandride.core.domain.validation.MinElement; import fi.hsl.parkandride.core.domain.validation.NotNullElement; import org.joda.time.DateTime; import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; import static com.google.common.collect.Maps.newHashMap; public class FacilityCapacityHistory implements HasInterval { public Long facilityId; public DateTime startDate; public DateTime endDate; @NotNullElement @MinElement(1) @NotNull public Map<CapacityType, Integer> builtCapacity = newHashMap(); public List<UnavailableCapacity> unavailableCapacities; public FacilityCapacityHistory() { } public FacilityCapacityHistory(Long facilityId, DateTime startDate, DateTime endDate, Map<CapacityType, Integer> builtCapacity) { this.facilityId = facilityId; this.startDate = startDate; this.endDate = endDate; this.builtCapacity = builtCapacity; } public FacilityCapacityHistory(Long facilityId, DateTime startDate, DateTime endDate, Map<CapacityType, Integer> builtCapacity, List<UnavailableCapacity> unavailableCapacities) { this(facilityId, startDate, endDate, builtCapacity); this.unavailableCapacities = unavailableCapacities; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof FacilityCapacityHistory)) { return false; } FacilityCapacityHistory that = (FacilityCapacityHistory) o; return Objects.equal(facilityId, that.facilityId) && Objects.equal(startDate, that.startDate) && Objects.equal(endDate, that.endDate) && Objects.equal(builtCapacity, that.builtCapacity) && Objects.equal(unavailableCapacities, that.unavailableCapacities); } @Override public int hashCode() { return Objects.hashCode(facilityId, startDate, endDate, builtCapacity, unavailableCapacities); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("facilityId", facilityId) .add("startDate", startDate) .add("endDate", endDate) .add("builtCapacity", builtCapacity) .add("unavailableCapacities", unavailableCapacities) .toString(); } @Override public DateTime getStart() { return startDate; } @Override public DateTime getEnd() { return endDate; } }