Commit 68a73caada309f8bb4a66a1b93c9cdc440b40551

Authored by Viacheslav Klimov
Committed by Andrew Shvayka
1 parent fa462467

Ignore default value for filters with constant key type

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