Skip to content

Commit e24fb1f

Browse files
committed
fixes
Signed-off-by: Mark Herwege <mark.herwege@telenet.be>
1 parent 3712559 commit e24fb1f

2 files changed

Lines changed: 41 additions & 45 deletions

File tree

bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/sitemaps/YamlWidgetDTO.java

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,10 @@ public boolean isValid(@NonNull List<@NonNull String> errors, @NonNull List<@Non
178178
.formatted(minValue.doubleValue(), maxValue.doubleValue()));
179179
}
180180

181-
ok &= isValidRule(errors, warnings, visibility, "visibility", true);
181+
ok &= isValidRules(errors, warnings, visibility, "visibility", true);
182182
ok &= isValidField("confirmCmd", confirmCmd, errors, warnings); // Check if field is allowed for the widget type
183183
if (!(confirmCmd instanceof Boolean)) {
184-
ok &= isValidRule(errors, warnings, confirmCmd, "confirmCmd", false); // Check if valid rule
184+
ok &= isValidRules(errors, warnings, confirmCmd, "confirmCmd", false); // Check if valid rule
185185
}
186186

187187
if (widgets != null) {
@@ -305,68 +305,64 @@ private boolean isValidField(String field, @Nullable Object value, @NonNull List
305305
return ok;
306306
}
307307

308-
private boolean isValidRule(@NonNull List<@NonNull String> errors, @NonNull List<@NonNull String> warnings,
308+
private boolean isValidRules(@NonNull List<@NonNull String> errors, @NonNull List<@NonNull String> warnings,
309309
Object parameter, String parameterName, boolean ignoreValue) {
310310
boolean ok = true;
311-
List<String> ruleErrors = new ArrayList<>();
312-
List<String> ruleWarnings = new ArrayList<>();
313311
if (parameter instanceof List<?> rules) {
314312
for (Object r : rules) {
315-
if (r instanceof YamlRuleWithAndConditionsDTO rule) {
316-
ok &= rule.isValid(ruleErrors, ruleWarnings);
317-
if (ignoreValue && rule.value != null) {
318-
addToList(warnings,
319-
"rule in \"%s\" field: unexpected \"value\" field is ignored".formatted(parameterName));
320-
}
321-
} else if (r instanceof YamlRuleWithUniqueConditionDTO rule) {
322-
ok &= rule.isValid(ruleErrors, ruleWarnings);
323-
if (ignoreValue) {
324-
if (rule.item == null && rule.operator == null && rule.argument == null) {
325-
addToList(errors,
326-
"invalid rule in \"%s\" field: \"argument\" field missing while mandatory in condition"
327-
.formatted(parameterName));
328-
ok = false;
329-
} else if (rule.value != null) {
330-
addToList(warnings, "rule in \"%s\" field: unexpected \"value\" field is ignored"
313+
ok &= isValidRule(errors, warnings, r, parameterName, ignoreValue);
314+
}
315+
} else {
316+
ok &= isValidRule(errors, warnings, parameter, parameterName, ignoreValue);
317+
}
318+
return ok;
319+
}
320+
321+
private boolean isValidRule(List<@NonNull String> errors, List<@NonNull String> warnings, Object rule,
322+
String parameterName, boolean ignoreValue) {
323+
boolean ok = true;
324+
List<String> ruleErrors = new ArrayList<>();
325+
List<String> ruleWarnings = new ArrayList<>();
326+
if (rule instanceof YamlRuleWithAndConditionsDTO andConditionRule) {
327+
ok &= andConditionRule.isValid(ruleErrors, ruleWarnings);
328+
if (ignoreValue) {
329+
if (andConditionRule.and == null || andConditionRule.and.isEmpty()) {
330+
addToList(errors,
331+
"invalid rule in \"%s\" field: \"and\" empty, no conditions defined while mandatory in condition"
331332
.formatted(parameterName));
332-
}
333-
} else if (rule.item == null && rule.operator == null && rule.argument == null
334-
&& rule.value == null) {
335-
addToList(errors,
336-
"invalid rule in \"%s\" field: \"argument\" field and \"value\" field should not both be empty"
337-
.formatted(parameterName));
338-
ok = false;
339-
}
340-
} else {
341-
addToList(errors, "invalid type for rule in \"%s\" field".formatted(parameterName));
342333
ok = false;
334+
} else if (andConditionRule.value != null) {
335+
addToList(warnings,
336+
"rule in \"%s\" field: unexpected \"value\" field is ignored".formatted(parameterName));
343337
}
338+
} else if ((andConditionRule.and == null || andConditionRule.and.isEmpty())
339+
&& andConditionRule.value == null) {
340+
addToList(errors,
341+
"invalid rule in \"%s\" field: \"and\" field and \"value\" field should not both be empty"
342+
.formatted(parameterName));
343+
ok = false;
344344
}
345-
} else if (parameter instanceof YamlRuleWithAndConditionsDTO rule) {
346-
ok &= rule.isValid(ruleErrors, ruleWarnings);
347-
if (ignoreValue && rule.value != null) {
348-
addToList(warnings,
349-
"rule in \"%s\" field: unexpected \"value\" field is ignored".formatted(parameterName));
350-
}
351-
} else if (parameter instanceof YamlRuleWithUniqueConditionDTO rule) {
352-
ok &= rule.isValid(ruleErrors, ruleWarnings);
345+
} else if (rule instanceof YamlRuleWithUniqueConditionDTO uniqueCondtionRule) {
346+
ok &= uniqueCondtionRule.isValid(ruleErrors, ruleWarnings);
353347
if (ignoreValue) {
354-
if (rule.item == null && rule.operator == null && rule.argument == null) {
348+
if (uniqueCondtionRule.argument == null) {
355349
addToList(errors,
356350
"invalid rule in \"%s\" field: \"argument\" field missing while mandatory in condition"
357351
.formatted(parameterName));
358352
ok = false;
359-
}
360-
if (rule.value != null) {
353+
} else if (uniqueCondtionRule.value != null) {
361354
addToList(warnings,
362355
"rule in \"%s\" field: unexpected \"value\" field is ignored".formatted(parameterName));
363356
}
364-
} else if (rule.item == null && rule.operator == null && rule.argument == null && rule.value == null) {
357+
} else if (uniqueCondtionRule.argument == null && uniqueCondtionRule.value == null) {
365358
addToList(errors,
366359
"invalid rule in \"%s\" field: \"argument\" field and \"value\" field should not both be empty"
367360
.formatted(parameterName));
368361
ok = false;
369362
}
363+
} else {
364+
addToList(errors, "invalid type for rule in \"%s\" field".formatted(parameterName));
365+
ok = false;
370366
}
371367
ruleErrors.forEach(error -> {
372368
addToList(errors, "invalid rule in \"%s\" field: %s".formatted(parameterName, error));

bundles/org.openhab.core.ui/src/main/java/org/openhab/core/ui/internal/components/UIComponentSitemapProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,8 @@ List<Condition> getConditions(List<String> conditionsString, UIComponent compone
423423
String strippedRule = null;
424424
int lastEqualsIndex = rule.lastIndexOf("=");
425425
String charBeforeEquals = lastEqualsIndex > 0 ? rule.substring(lastEqualsIndex - 1, lastEqualsIndex) : null;
426-
if (!("=".equals(charBeforeEquals) && "!".equals(charBeforeEquals) && "<".equals(charBeforeEquals)
427-
&& ">".equals(charBeforeEquals))) {
426+
if (!("=".equals(charBeforeEquals) || "!".equals(charBeforeEquals) || "<".equals(charBeforeEquals)
427+
|| ">".equals(charBeforeEquals))) {
428428
strippedRule = stripQuotes(rule.substring(lastEqualsIndex + 1).trim());
429429
}
430430
return strippedRule;

0 commit comments

Comments
 (0)