Skip to content

Commit 6528e84

Browse files
cliniquelsiepel
authored andcommitted
[netatmo] Prevent IndexOutOfBoundsException (openhab#17448)
* Preventing IndexOutOfBoundsException Signed-off-by: Gaël L'hopital <[email protected]>
1 parent b61a205 commit 6528e84

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/SecurityApi.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,20 @@ private List<HomeEvent> getEvents(@Nullable Object... params) throws NetatmoExce
8181
throw new NetatmoException("home should not be null");
8282
}
8383

84-
public List<HomeEvent> getHomeEvents(String homeId, @Nullable ZonedDateTime freshestEventTime)
85-
throws NetatmoException {
84+
public List<HomeEvent> getHomeEvents(String homeId, ZonedDateTime freshestEventTime) throws NetatmoException {
8685
List<HomeEvent> events = getEvents(PARAM_HOME_ID, homeId);
8786

88-
// we have to rewind to the latest event just after oldestKnown
89-
HomeEvent oldestRetrieved = events.get(events.size() - 1);
90-
while (freshestEventTime != null && oldestRetrieved.getTime().isAfter(freshestEventTime)) {
91-
events.addAll(getEvents(PARAM_HOME_ID, homeId, PARAM_EVENT_ID, oldestRetrieved.getId()));
92-
oldestRetrieved = events.get(events.size() - 1);
87+
// we have to rewind to the latest event just after freshestEventTime
88+
if (events.size() > 0) {
89+
HomeEvent oldestRetrieved = events.get(events.size() - 1);
90+
while (oldestRetrieved.getTime().isAfter(freshestEventTime)) {
91+
events.addAll(getEvents(PARAM_HOME_ID, homeId, PARAM_EVENT_ID, oldestRetrieved.getId()));
92+
oldestRetrieved = events.get(events.size() - 1);
93+
}
9394
}
9495

95-
// Remove unneeded events being before oldestKnown
96-
return events.stream().filter(event -> freshestEventTime == null || event.getTime().isAfter(freshestEventTime))
96+
// Remove unneeded events being before freshestEventTime
97+
return events.stream().filter(event -> event.getTime().isAfter(freshestEventTime))
9798
.sorted(Comparator.comparing(HomeEvent::getTime).reversed()).toList();
9899
}
99100

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/SecurityCapability.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package org.openhab.binding.netatmo.internal.handler.capability;
1414

15+
import java.time.Instant;
16+
import java.time.ZoneId;
1517
import java.time.ZonedDateTime;
1618
import java.util.ArrayList;
1719
import java.util.Collection;
@@ -48,11 +50,13 @@
4850
*/
4951
@NonNullByDefault
5052
class SecurityCapability extends RestCapability<SecurityApi> {
51-
private final Logger logger = LoggerFactory.getLogger(SecurityCapability.class);
53+
private final static ZonedDateTime ZDT_REFERENCE = ZonedDateTime.ofInstant(Instant.ofEpochMilli(0),
54+
ZoneId.systemDefault());
5255

56+
private final Logger logger = LoggerFactory.getLogger(SecurityCapability.class);
5357
private final Map<String, HomeEvent> eventBuffer = new HashMap<>();
54-
private @Nullable ZonedDateTime freshestEventTime;
5558

59+
private ZonedDateTime freshestEventTime = ZDT_REFERENCE;
5660
private NAObjectMap<HomeDataPerson> persons = new NAObjectMap<>();
5761
private NAObjectMap<HomeDataModule> modules = new NAObjectMap<>();
5862
private String securityId = "";
@@ -64,7 +68,7 @@ class SecurityCapability extends RestCapability<SecurityApi> {
6468
@Override
6569
public void initialize() {
6670
super.initialize();
67-
freshestEventTime = null;
71+
freshestEventTime = ZDT_REFERENCE;
6872
securityId = handler.getThingConfigAs(HomeConfiguration.class).getIdForArea(FeatureArea.SECURITY);
6973
}
7074

@@ -132,7 +136,7 @@ protected List<NAObject> updateReadings(SecurityApi api) {
132136
eventBuffer.put(personId, event);
133137
}
134138
}
135-
if (freshestEventTime == null || event.getTime().isAfter(freshestEventTime)) {
139+
if (event.getTime().isAfter(freshestEventTime)) {
136140
freshestEventTime = event.getTime();
137141
}
138142
}

0 commit comments

Comments
 (0)