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,10 +33,7 @@ import org.thingsboard.server.common.data.device.profile.SimpleAlarmConditionSpe | ||
33 | import org.thingsboard.server.common.data.device.profile.SpecificTimeSchedule; | 33 | import org.thingsboard.server.common.data.device.profile.SpecificTimeSchedule; |
34 | import org.thingsboard.server.common.data.query.BooleanFilterPredicate; | 34 | import org.thingsboard.server.common.data.query.BooleanFilterPredicate; |
35 | import org.thingsboard.server.common.data.query.ComplexFilterPredicate; | 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 | import org.thingsboard.server.common.data.query.FilterPredicateValue; | 36 | import org.thingsboard.server.common.data.query.FilterPredicateValue; |
39 | -import org.thingsboard.server.common.data.query.KeyFilter; | ||
40 | import org.thingsboard.server.common.data.query.KeyFilterPredicate; | 37 | import org.thingsboard.server.common.data.query.KeyFilterPredicate; |
41 | import org.thingsboard.server.common.data.query.NumericFilterPredicate; | 38 | import org.thingsboard.server.common.data.query.NumericFilterPredicate; |
42 | import org.thingsboard.server.common.data.query.StringFilterPredicate; | 39 | import org.thingsboard.server.common.data.query.StringFilterPredicate; |
@@ -275,7 +272,7 @@ class AlarmRuleState { | @@ -275,7 +272,7 @@ class AlarmRuleState { | ||
275 | if (value == null) { | 272 | if (value == null) { |
276 | return false; | 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 | return eval; | 277 | return eval; |
281 | } | 278 | } |
@@ -300,33 +297,33 @@ class AlarmRuleState { | @@ -300,33 +297,33 @@ class AlarmRuleState { | ||
300 | return value; | 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 | switch (predicate.getType()) { | 301 | switch (predicate.getType()) { |
305 | case STRING: | 302 | case STRING: |
306 | - return evalStrPredicate(data, value, (StringFilterPredicate) predicate); | 303 | + return evalStrPredicate(data, value, (StringFilterPredicate) predicate, filter); |
307 | case NUMERIC: | 304 | case NUMERIC: |
308 | - return evalNumPredicate(data, value, (NumericFilterPredicate) predicate); | 305 | + return evalNumPredicate(data, value, (NumericFilterPredicate) predicate, filter); |
309 | case BOOLEAN: | 306 | case BOOLEAN: |
310 | - return evalBoolPredicate(data, value, (BooleanFilterPredicate) predicate); | 307 | + return evalBoolPredicate(data, value, (BooleanFilterPredicate) predicate, filter); |
311 | case COMPLEX: | 308 | case COMPLEX: |
312 | - return evalComplexPredicate(data, value, (ComplexFilterPredicate) predicate); | 309 | + return evalComplexPredicate(data, value, (ComplexFilterPredicate) predicate, filter); |
313 | default: | 310 | default: |
314 | return false; | 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 | switch (predicate.getOperation()) { | 316 | switch (predicate.getOperation()) { |
320 | case OR: | 317 | case OR: |
321 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { | 318 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { |
322 | - if (eval(data, ekv, kfp)) { | 319 | + if (eval(data, ekv, kfp, filter)) { |
323 | return true; | 320 | return true; |
324 | } | 321 | } |
325 | } | 322 | } |
326 | return false; | 323 | return false; |
327 | case AND: | 324 | case AND: |
328 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { | 325 | for (KeyFilterPredicate kfp : predicate.getPredicates()) { |
329 | - if (!eval(data, ekv, kfp)) { | 326 | + if (!eval(data, ekv, kfp, filter)) { |
330 | return false; | 327 | return false; |
331 | } | 328 | } |
332 | } | 329 | } |
@@ -336,12 +333,15 @@ class AlarmRuleState { | @@ -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 | Boolean val = getBoolValue(ekv); | 337 | Boolean val = getBoolValue(ekv); |
341 | if (val == null) { | 338 | if (val == null) { |
342 | return false; | 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 | switch (predicate.getOperation()) { | 345 | switch (predicate.getOperation()) { |
346 | case EQUAL: | 346 | case EQUAL: |
347 | return val.equals(predicateValue); | 347 | return val.equals(predicateValue); |
@@ -352,12 +352,15 @@ class AlarmRuleState { | @@ -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 | Double val = getDblValue(ekv); | 356 | Double val = getDblValue(ekv); |
357 | if (val == null) { | 357 | if (val == null) { |
358 | return false; | 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 | switch (predicate.getOperation()) { | 364 | switch (predicate.getOperation()) { |
362 | case NOT_EQUAL: | 365 | case NOT_EQUAL: |
363 | return !val.equals(predicateValue); | 366 | return !val.equals(predicateValue); |
@@ -376,12 +379,15 @@ class AlarmRuleState { | @@ -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 | String val = getStrValue(ekv); | 383 | String val = getStrValue(ekv); |
381 | if (val == null) { | 384 | if (val == null) { |
382 | return false; | 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 | if (predicate.isIgnoreCase()) { | 391 | if (predicate.isIgnoreCase()) { |
386 | val = val.toLowerCase(); | 392 | val = val.toLowerCase(); |
387 | predicateValue = predicateValue.toLowerCase(); | 393 | predicateValue = predicateValue.toLowerCase(); |
@@ -404,7 +410,7 @@ class AlarmRuleState { | @@ -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 | EntityKeyValue ekv = getDynamicPredicateValue(data, value); | 414 | EntityKeyValue ekv = getDynamicPredicateValue(data, value); |
409 | if (ekv != null) { | 415 | if (ekv != null) { |
410 | T result = transformFunction.apply(ekv); | 416 | T result = transformFunction.apply(ekv); |
@@ -412,7 +418,11 @@ class AlarmRuleState { | @@ -412,7 +418,11 @@ class AlarmRuleState { | ||
412 | return result; | 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 | private <T> EntityKeyValue getDynamicPredicateValue(DataSnapshot data, FilterPredicateValue<T> value) { | 428 | private <T> EntityKeyValue getDynamicPredicateValue(DataSnapshot data, FilterPredicateValue<T> value) { |