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:
return true;
case SPECIFIC_TIME: {
SpecificTimeSchedule originalSchedule = (SpecificTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, originalSchedule.getDynamicValue());
SpecificTimeSchedule defaultSchedule = (SpecificTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, defaultSchedule.getDynamicValue());
if (dynamicValue != null) {
SpecificTimeSchedule schedule = JsonConverter.parse(dynamicValue.getJsonValue(), SpecificTimeSchedule.class);
originalSchedule = schedule == null ? originalSchedule : schedule;
SpecificTimeSchedule schedule;
try {
schedule = JsonConverter.parse(dynamicValue.getJsonValue(), SpecificTimeSchedule.class);
} catch (Exception e) {
schedule = defaultSchedule;
}
return isActiveSpecific(originalSchedule, eventTs);
return isActiveSpecific(schedule, eventTs);
}
case CUSTOM: {
CustomTimeSchedule originalSchedule = (CustomTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, originalSchedule.getDynamicValue());
CustomTimeSchedule defaultSchedule = (CustomTimeSchedule) alarmRule.getSchedule();
EntityKeyValue dynamicValue = getDynamicValue(data, defaultSchedule.getDynamicValue());
if (dynamicValue != null) {
CustomTimeSchedule schedule = JsonConverter.parse(dynamicValue.getJsonValue(), CustomTimeSchedule.class);
originalSchedule = schedule == null ? originalSchedule : schedule;
CustomTimeSchedule schedule;
try {
schedule = JsonConverter.parse(dynamicValue.getJsonValue(), CustomTimeSchedule.class);
} catch (Exception e) {
schedule = defaultSchedule;
}
return isActiveCustom(originalSchedule, eventTs);
return isActiveCustom(schedule, eventTs);
}
default:
throw new RuntimeException("Unsupported schedule type: " + alarmRule.getSchedule().getType());

View File

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