fix notNull checking for schedule in ProfileState, rename variables and fix logic for parsing dynamicValues in AlarmRuleState

This commit is contained in:
desoliture 2022-01-05 13:24:53 +02:00
parent 3351ced60a
commit 2b203bfdd5
2 changed files with 25 additions and 17 deletions

View File

@ -140,26 +140,30 @@ class AlarmRuleState {
case ANY_TIME: case ANY_TIME:
return true; return true;
case SPECIFIC_TIME: { case SPECIFIC_TIME: {
SpecificTimeSchedule originalSchedule = (SpecificTimeSchedule) alarmRule.getSchedule(); SpecificTimeSchedule defaultSchedule = (SpecificTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, originalSchedule.getDynamicValue()); EntityKeyValue dynamicValue = getDynamicValue(data, defaultSchedule.getDynamicValue());
if (dynamicValue != null) { SpecificTimeSchedule schedule;
SpecificTimeSchedule schedule = JsonConverter.parse(dynamicValue.getJsonValue(), SpecificTimeSchedule.class); try {
originalSchedule = schedule == null ? originalSchedule : schedule; schedule = JsonConverter.parse(dynamicValue.getJsonValue(), SpecificTimeSchedule.class);
} catch (Exception e) {
schedule = defaultSchedule;
} }
return isActiveSpecific(originalSchedule, eventTs); return isActiveSpecific(schedule, eventTs);
} }
case CUSTOM: { case CUSTOM: {
CustomTimeSchedule originalSchedule = (CustomTimeSchedule) alarmRule.getSchedule(); CustomTimeSchedule defaultSchedule = (CustomTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, originalSchedule.getDynamicValue()); EntityKeyValue dynamicValue = getDynamicValue(data, defaultSchedule.getDynamicValue());
if (dynamicValue != null) { CustomTimeSchedule schedule;
CustomTimeSchedule schedule = JsonConverter.parse(dynamicValue.getJsonValue(), CustomTimeSchedule.class); try {
originalSchedule = schedule == null ? originalSchedule : schedule; schedule = JsonConverter.parse(dynamicValue.getJsonValue(), CustomTimeSchedule.class);
} catch (Exception e) {
schedule = defaultSchedule;
} }
return isActiveCustom(originalSchedule, eventTs); return isActiveCustom(schedule, eventTs);
} }
default: default:
throw new RuntimeException("Unsupported schedule type: " + alarmRule.getSchedule().getType()); throw new RuntimeException("Unsupported schedule type: " + alarmRule.getSchedule().getType());

View File

@ -80,7 +80,10 @@ class ProfileState {
addDynamicValuesRecursively(keyFilter.getPredicate(), entityKeys, ruleKeys); addDynamicValuesRecursively(keyFilter.getPredicate(), entityKeys, ruleKeys);
} }
addEntityKeysFromAlarmConditionSpec(alarmRule); addEntityKeysFromAlarmConditionSpec(alarmRule);
addScheduleDynamicValues(alarmRule.getSchedule()); AlarmSchedule schedule = alarmRule.getSchedule();
if (schedule != null) {
addScheduleDynamicValues(schedule);
}
})); }));
if (alarm.getClearRule() != null) { if (alarm.getClearRule() != null) {
var clearAlarmKeys = alarmClearKeys.computeIfAbsent(alarm.getId(), id -> new HashSet<>()); var clearAlarmKeys = alarmClearKeys.computeIfAbsent(alarm.getId(), id -> new HashSet<>());
@ -99,12 +102,13 @@ class ProfileState {
DynamicValue<String> dynamicValue = null; DynamicValue<String> dynamicValue = null;
switch (schedule.getType()) { switch (schedule.getType()) {
case SPECIFIC_TIME: case SPECIFIC_TIME:
SpecificTimeSchedule specSchedule = (SpecificTimeSchedule) schedule; SpecificTimeSchedule specificTimeSchedule = (SpecificTimeSchedule) schedule;
dynamicValue = specSchedule.getDynamicValue(); dynamicValue = specificTimeSchedule.getDynamicValue();
break; break;
case CUSTOM: case CUSTOM:
CustomTimeSchedule custSchedule = (CustomTimeSchedule) schedule; CustomTimeSchedule customTimeSchedule = (CustomTimeSchedule) schedule;
dynamicValue = custSchedule.getDynamicValue(); dynamicValue = customTimeSchedule.getDynamicValue();
break;
} }
if (dynamicValue != null) { if (dynamicValue != null) {