Browse Source

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

pull/5818/head
desoliture 5 years ago
parent
commit
2b203bfdd5
  1. 28
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmRuleState.java
  2. 14
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/ProfileState.java

28
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmRuleState.java

@ -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());

14
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/ProfileState.java

@ -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) {

Loading…
Cancel
Save