package water.api.schemas3; import hex.ModelBuilder; import hex.ModelBuilder.ValidationMessage; import water.api.API; import water.util.Log; import water.util.PojoUtils; import java.util.HashMap; import java.util.Map; /** * Model builder parameter validation message schema. */ public final class ValidationMessageV3 extends SchemaV3<ValidationMessage, ValidationMessageV3> { @API(help = "Type of validation message (ERROR, WARN, INFO, HIDE)", direction = API.Direction.OUTPUT) public String message_type; @API(help = "Field to which the message applies", direction = API.Direction.OUTPUT) public String field_name; @API(help = "Message text", direction = API.Direction.OUTPUT) public String message; /** * Map impl field names in the validation messages to schema field names, * called <i>after</i> behavior of stripping leading _ characters. */ public static void mapValidationMessageFieldNames(ValidationMessageV3[] validation_messages, String[] from, String[] to) { if (from == null && to == null) return; if (from == null || to == null) throw new IllegalArgumentException("Bad parameter name translation arrays; one is null and the other isn't."); Map<String, String> translations = new HashMap<>(); for (int i = 0; i < from.length; i++) { translations.put(from[i], to[i]); } for (ValidationMessageV3 vm : validation_messages) { if (null == vm) { Log.err("Null ValidationMessageV3 for ModelBuilderSchema."); continue; } if (null == vm.field_name) { Log.err("Null field_name: " + vm); continue; } if (translations.containsKey(vm.field_name)) vm.field_name = translations.get(vm.field_name); } } public ValidationMessage createImpl() { return new ModelBuilder.ValidationMessage(Log.valueOf(message_type), field_name, message); } // Version&Schema-specific filling from the implementation object public ValidationMessageV3 fillFromImpl(ValidationMessage vm) { PojoUtils.copyProperties(this, vm, PojoUtils.FieldNaming.ORIGIN_HAS_UNDERSCORES); this.message_type = Log.LVLS[vm.log_level()]; // field name changed if (this.field_name != null) { if (this.field_name.startsWith("_")) this.field_name = this.field_name.substring(1); else Log.warn("Expected all ValidationMessage field_name values to have leading underscores; ignoring: " + field_name); } return this; } }