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