@@ -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 ));
0 commit comments