2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.energidataservice.internal.api.dto;
15 import java.math.BigDecimal;
16 import java.time.LocalDateTime;
17 import java.time.LocalTime;
18 import java.util.HashMap;
20 import java.util.Objects;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import com.google.gson.annotations.SerializedName;
27 * Record as part of {@link DatahubPricelistRecords} from Energi Data Service.
29 * @author Jacob Laursen - Initial contribution
32 public record DatahubPricelistRecord(@SerializedName("ValidFrom") LocalDateTime validFrom,
33 @SerializedName("ValidTo") LocalDateTime validTo, @SerializedName("ChargeTypeCode") String chargeTypeCode,
34 @SerializedName("Price1") BigDecimal price1, @SerializedName("Price2") BigDecimal price2,
35 @SerializedName("Price3") BigDecimal price3, @SerializedName("Price4") BigDecimal price4,
36 @SerializedName("Price5") BigDecimal price5, @SerializedName("Price6") BigDecimal price6,
37 @SerializedName("Price7") BigDecimal price7, @SerializedName("Price8") BigDecimal price8,
38 @SerializedName("Price9") BigDecimal price9, @SerializedName("Price10") BigDecimal price10,
39 @SerializedName("Price11") BigDecimal price11, @SerializedName("Price12") BigDecimal price12,
40 @SerializedName("Price13") BigDecimal price13, @SerializedName("Price14") BigDecimal price14,
41 @SerializedName("Price15") BigDecimal price15, @SerializedName("Price16") BigDecimal price16,
42 @SerializedName("Price17") BigDecimal price17, @SerializedName("Price18") BigDecimal price18,
43 @SerializedName("Price19") BigDecimal price19, @SerializedName("Price20") BigDecimal price20,
44 @SerializedName("Price21") BigDecimal price21, @SerializedName("Price22") BigDecimal price22,
45 @SerializedName("Price23") BigDecimal price23, @SerializedName("Price24") BigDecimal price24) {
48 public LocalDateTime validTo() {
49 return Objects.isNull(validTo) ? LocalDateTime.MAX : validTo;
53 public BigDecimal price2() {
54 return Objects.requireNonNullElse(price2, price1());
58 public BigDecimal price3() {
59 return Objects.requireNonNullElse(price3, price1());
63 public BigDecimal price4() {
64 return Objects.requireNonNullElse(price4, price1());
68 public BigDecimal price5() {
69 return Objects.requireNonNullElse(price5, price1());
73 public BigDecimal price6() {
74 return Objects.requireNonNullElse(price6, price1());
78 public BigDecimal price7() {
79 return Objects.requireNonNullElse(price7, price1());
83 public BigDecimal price8() {
84 return Objects.requireNonNullElse(price8, price1());
88 public BigDecimal price9() {
89 return Objects.requireNonNullElse(price9, price1());
93 public BigDecimal price10() {
94 return Objects.requireNonNullElse(price10, price1());
98 public BigDecimal price11() {
99 return Objects.requireNonNullElse(price11, price1());
103 public BigDecimal price12() {
104 return Objects.requireNonNullElse(price12, price1());
108 public BigDecimal price13() {
109 return Objects.requireNonNullElse(price13, price1());
113 public BigDecimal price14() {
114 return Objects.requireNonNullElse(price14, price1());
118 public BigDecimal price15() {
119 return Objects.requireNonNullElse(price15, price1());
123 public BigDecimal price16() {
124 return Objects.requireNonNullElse(price16, price1());
128 public BigDecimal price17() {
129 return Objects.requireNonNullElse(price17, price1());
133 public BigDecimal price18() {
134 return Objects.requireNonNullElse(price18, price1());
138 public BigDecimal price19() {
139 return Objects.requireNonNullElse(price19, price1());
143 public BigDecimal price20() {
144 return Objects.requireNonNullElse(price20, price1());
148 public BigDecimal price21() {
149 return Objects.requireNonNullElse(price21, price1());
153 public BigDecimal price22() {
154 return Objects.requireNonNullElse(price22, price1());
158 public BigDecimal price23() {
159 return Objects.requireNonNullElse(price23, price1());
163 public BigDecimal price24() {
164 return Objects.requireNonNullElse(price24, price1());
168 * Get {@link Map} of tariffs with hour start as key.
170 * @return map with hourly tariffs
172 public Map<LocalTime, BigDecimal> getTariffMap() {
173 Map<LocalTime, BigDecimal> tariffMap = new HashMap<>();
175 tariffMap.put(LocalTime.of(0, 0), price1());
176 tariffMap.put(LocalTime.of(1, 0), price2());
177 tariffMap.put(LocalTime.of(2, 0), price3());
178 tariffMap.put(LocalTime.of(3, 0), price4());
179 tariffMap.put(LocalTime.of(4, 0), price5());
180 tariffMap.put(LocalTime.of(5, 0), price6());
181 tariffMap.put(LocalTime.of(6, 0), price7());
182 tariffMap.put(LocalTime.of(7, 0), price8());
183 tariffMap.put(LocalTime.of(8, 0), price9());
184 tariffMap.put(LocalTime.of(9, 0), price10());
185 tariffMap.put(LocalTime.of(10, 0), price11());
186 tariffMap.put(LocalTime.of(11, 0), price12());
187 tariffMap.put(LocalTime.of(12, 0), price13());
188 tariffMap.put(LocalTime.of(13, 0), price14());
189 tariffMap.put(LocalTime.of(14, 0), price15());
190 tariffMap.put(LocalTime.of(15, 0), price16());
191 tariffMap.put(LocalTime.of(16, 0), price17());
192 tariffMap.put(LocalTime.of(17, 0), price18());
193 tariffMap.put(LocalTime.of(18, 0), price19());
194 tariffMap.put(LocalTime.of(19, 0), price20());
195 tariffMap.put(LocalTime.of(20, 0), price21());
196 tariffMap.put(LocalTime.of(21, 0), price22());
197 tariffMap.put(LocalTime.of(22, 0), price23());
198 tariffMap.put(LocalTime.of(23, 0), price24());