Commit 68a73caada309f8bb4a66a1b93c9cdc440b40551
Committed by
Andrew Shvayka
1 parent
fa462467
Ignore default value for filters with constant key type
Showing
1 changed file
with
30 additions
and
20 deletions
... | ... | @@ -33,10 +33,7 @@ import org.thingsboard.server.common.data.device.profile.SimpleAlarmConditionSpe |
33 | 33 | import org.thingsboard.server.common.data.device.profile.SpecificTimeSchedule; |
34 | 34 | import org.thingsboard.server.common.data.query.BooleanFilterPredicate; |
35 | 35 | import org.thingsboard.server.common.data.query.ComplexFilterPredicate; |
36 | -import org.thingsboard.server.common.data.query.EntityKey; | |
37 | -import org.thingsboard.server.common.data.query.EntityKeyType; | |
38 | 36 | import org.thingsboard.server.common.data.query.FilterPredicateValue; |
39 | -import org.thingsboard.server.common.data.query.KeyFilter; | |
40 | 37 | import org.thingsboard.server.common.data.query.KeyFilterPredicate; |
41 | 38 | import org.thingsboard.server.common.data.query.NumericFilterPredicate; |
42 | 39 | import org.thingsboard.server.common.data.query.StringFilterPredicate; |
... | ... | @@ -275,7 +272,7 @@ class AlarmRuleState { |
275 | 272 | if (value == null) { |
276 | 273 | return false; |
277 | 274 | } |
278 | - eval = eval && eval(data, value, filter.getPredicate()); | |
275 | + eval = eval && eval(data, value, filter.getPredicate(), filter); | |
279 | 276 | } |
280 | 277 | return eval; |
281 | 278 | } |
... | ... | @@ -300,33 +297,33 @@ class AlarmRuleState { |
300 | 297 | return value; |
301 | 298 | } |
302 | 299 | |
303 | - private boolean eval(DataSnapshot data, EntityKeyValue value, KeyFilterPredicate predicate) { | |
300 | + private boolean eval(DataSnapshot data, EntityKeyValue value, KeyFilterPredicate predicate, AlarmConditionFilter filter) { | |
304 | 301 | switch (predicate.getType()) { |
305 | 302 | case STRING: |
306 | - return evalStrPredicate(data, value, (StringFilterPredicate) predicate); | |
303 | + return evalStrPredicate(data, value, (StringFilterPredicate) predicate, filter); | |
307 | 304 | case NUMERIC: |
308 | - return evalNumPredicate(data, value, (NumericFilterPredicate) predicate); | |
305 | + return evalNumPredicate(data, value, (NumericFilterPredicate) predicate, filter); | |
309 | 306 | case BOOLEAN: |
310 | - return evalBoolPredicate(data, value, (BooleanFilterPredicate) predicate); | |
307 | + return evalBoolPredicate(data, value, (BooleanFilterPredicate) predicate, filter); | |
311 | 308 | case COMPLEX: |
312 | - return evalComplexPredicate(data, value, (ComplexFilterPredicate) predicate); | |
309 | + return evalComplexPredicate(data, value, (ComplexFilterPredicate) predicate, filter); | |
313 | 310 | default: |
314 | 311 | return false; |
315 | 312 | } |
316 | 313 | } |
317 | 314 | |
318 | - private boolean evalComplexPredicate(DataSnapshot data, EntityKeyValue ekv, ComplexFilterPredicate predicate) { | |
315 | + private boolean evalComplexPredicate(DataSnapshot data, EntityKeyValue ekv, ComplexFilterPredicate predicate, AlarmConditionFilter filter) { | |
319 | 316 | switch (predicate.getOperation()) { |
320 | 317 | case OR: |
321 | 318 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { |
322 | - if (eval(data, ekv, kfp)) { | |
319 | + if (eval(data, ekv, kfp, filter)) { | |
323 | 320 | return true; |
324 | 321 | } |
325 | 322 | } |
326 | 323 | return false; |
327 | 324 | case AND: |
328 | 325 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { |
329 | - if (!eval(data, ekv, kfp)) { | |
326 | + if (!eval(data, ekv, kfp, filter)) { | |
330 | 327 | return false; |
331 | 328 | } |
332 | 329 | } |
... | ... | @@ -336,12 +333,15 @@ class AlarmRuleState { |
336 | 333 | } |
337 | 334 | } |
338 | 335 | |
339 | - private boolean evalBoolPredicate(DataSnapshot data, EntityKeyValue ekv, BooleanFilterPredicate predicate) { | |
336 | + private boolean evalBoolPredicate(DataSnapshot data, EntityKeyValue ekv, BooleanFilterPredicate predicate, AlarmConditionFilter filter) { | |
340 | 337 | Boolean val = getBoolValue(ekv); |
341 | 338 | if (val == null) { |
342 | 339 | return false; |
343 | 340 | } |
344 | - Boolean predicateValue = getPredicateValue(data, predicate.getValue(), AlarmRuleState::getBoolValue); | |
341 | + Boolean predicateValue = getPredicateValue(data, predicate.getValue(), filter, AlarmRuleState::getBoolValue); | |
342 | + if (predicateValue == null) { | |
343 | + return false; | |
344 | + } | |
345 | 345 | switch (predicate.getOperation()) { |
346 | 346 | case EQUAL: |
347 | 347 | return val.equals(predicateValue); |
... | ... | @@ -352,12 +352,15 @@ class AlarmRuleState { |
352 | 352 | } |
353 | 353 | } |
354 | 354 | |
355 | - private boolean evalNumPredicate(DataSnapshot data, EntityKeyValue ekv, NumericFilterPredicate predicate) { | |
355 | + private boolean evalNumPredicate(DataSnapshot data, EntityKeyValue ekv, NumericFilterPredicate predicate, AlarmConditionFilter filter) { | |
356 | 356 | Double val = getDblValue(ekv); |
357 | 357 | if (val == null) { |
358 | 358 | return false; |
359 | 359 | } |
360 | - Double predicateValue = getPredicateValue(data, predicate.getValue(), AlarmRuleState::getDblValue); | |
360 | + Double predicateValue = getPredicateValue(data, predicate.getValue(), filter, AlarmRuleState::getDblValue); | |
361 | + if (predicateValue == null) { | |
362 | + return false; | |
363 | + } | |
361 | 364 | switch (predicate.getOperation()) { |
362 | 365 | case NOT_EQUAL: |
363 | 366 | return !val.equals(predicateValue); |
... | ... | @@ -376,12 +379,15 @@ class AlarmRuleState { |
376 | 379 | } |
377 | 380 | } |
378 | 381 | |
379 | - private boolean evalStrPredicate(DataSnapshot data, EntityKeyValue ekv, StringFilterPredicate predicate) { | |
382 | + private boolean evalStrPredicate(DataSnapshot data, EntityKeyValue ekv, StringFilterPredicate predicate, AlarmConditionFilter filter) { | |
380 | 383 | String val = getStrValue(ekv); |
381 | 384 | if (val == null) { |
382 | 385 | return false; |
383 | 386 | } |
384 | - String predicateValue = getPredicateValue(data, predicate.getValue(), AlarmRuleState::getStrValue); | |
387 | + String predicateValue = getPredicateValue(data, predicate.getValue(), filter, AlarmRuleState::getStrValue); | |
388 | + if (predicateValue == null) { | |
389 | + return false; | |
390 | + } | |
385 | 391 | if (predicate.isIgnoreCase()) { |
386 | 392 | val = val.toLowerCase(); |
387 | 393 | predicateValue = predicateValue.toLowerCase(); |
... | ... | @@ -404,7 +410,7 @@ class AlarmRuleState { |
404 | 410 | } |
405 | 411 | } |
406 | 412 | |
407 | - private <T> T getPredicateValue(DataSnapshot data, FilterPredicateValue<T> value, Function<EntityKeyValue, T> transformFunction) { | |
413 | + private <T> T getPredicateValue(DataSnapshot data, FilterPredicateValue<T> value, AlarmConditionFilter filter, Function<EntityKeyValue, T> transformFunction) { | |
408 | 414 | EntityKeyValue ekv = getDynamicPredicateValue(data, value); |
409 | 415 | if (ekv != null) { |
410 | 416 | T result = transformFunction.apply(ekv); |
... | ... | @@ -412,7 +418,11 @@ class AlarmRuleState { |
412 | 418 | return result; |
413 | 419 | } |
414 | 420 | } |
415 | - return value.getDefaultValue(); | |
421 | + if (filter.getKey().getType() != AlarmConditionKeyType.CONSTANT) { | |
422 | + return value.getDefaultValue(); | |
423 | + } else { | |
424 | + return null; | |
425 | + } | |
416 | 426 | } |
417 | 427 | |
418 | 428 | private <T> EntityKeyValue getDynamicPredicateValue(DataSnapshot data, FilterPredicateValue<T> value) { | ... | ... |