diff --git a/src/main/java/ninja/javafx/smartcsv/fx/list/ValidationErrorListCell.java b/src/main/java/ninja/javafx/smartcsv/fx/list/ValidationErrorListCell.java index 14b5166..9865cf9 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/list/ValidationErrorListCell.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/list/ValidationErrorListCell.java @@ -63,7 +63,7 @@ public class ValidationErrorListCell extends ListCell { private void addContent(ValidationError validationError) { setText(null); - Text text = new Text(getI18nValidatioMessage(resourceBundle, validationError.getMessages())); + Text text = new Text(getI18nValidatioMessage(resourceBundle, validationError)); text.setWrappingWidth(180); setGraphic(text); } diff --git a/src/main/java/ninja/javafx/smartcsv/fx/table/EditableValidationCell.java b/src/main/java/ninja/javafx/smartcsv/fx/table/EditableValidationCell.java index 93c0a5d..c80e861 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/table/EditableValidationCell.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/table/EditableValidationCell.java @@ -77,7 +77,7 @@ public class EditableValidationCell extends TableCell { setTooltip(null); } else if (item.getValidationError() != null) { setStyle("-fx-background-color: #ff8888"); - setTooltip(new Tooltip(getI18nValidatioMessage(resourceBundle, item.getValidationError().getMessages()))); + setTooltip(new Tooltip(getI18nValidatioMessage(resourceBundle, item.getValidationError()))); } if (item == null || empty) { diff --git a/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java b/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java index 581a510..1fdd15d 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java @@ -26,23 +26,32 @@ package ninja.javafx.smartcsv.fx.util; +import ninja.javafx.smartcsv.validation.ValidationError; import ninja.javafx.smartcsv.validation.ValidationMessage; import java.io.StringWriter; import java.util.List; import java.util.ResourceBundle; +import static java.text.MessageFormat.format; + /** * This class makes validation messages readable in supported languages */ public class I18nValidationUtil { - public static String getI18nValidatioMessage(ResourceBundle resourceBundle, List validationMessages) { + public static String getI18nValidatioMessage(ResourceBundle resourceBundle, ValidationError error) { + List validationMessages = error.getMessages(); StringWriter message = new StringWriter(); for (ValidationMessage validationMessage: validationMessages) { if (resourceBundle.containsKey(validationMessage.getKey())) { - message.append(resourceBundle.getString(validationMessage.getKey())).append("\n"); + String resourceText = resourceBundle.getString(validationMessage.getKey()); + if (validationMessage.getParameters().length > 0) { + message.append(format(resourceText, validationMessage.getParameters())).append("\n"); + } else { + message.append(resourceText).append("\n"); + } } else { message.append(validationMessage.getKey()).append("\n"); } diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ValidationMessage.java b/src/main/java/ninja/javafx/smartcsv/validation/ValidationMessage.java index c57a5b2..fea0678 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ValidationMessage.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/ValidationMessage.java @@ -68,4 +68,12 @@ public class ValidationMessage { result = 31 * result + Arrays.hashCode(parameters); return result; } + + @Override + public String toString() { + return "ValidationMessage{" + + "key='" + key + '\'' + + ", parameters=" + Arrays.toString(parameters) + + '}'; + } } diff --git a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java index fba5c49..94dc53b 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java @@ -128,11 +128,11 @@ public class Validator { try { groovyResult = script.run(); } catch (CompilationFailedException e) { - error.add("groovy script '"+groovyScript+"' throws exception: "+e.getMessage()); + error.add("validation.message.groovy.exception", groovyScript, e.getMessage()); e.printStackTrace(); } if (groovyResult == null) { - error.add("groovy script '"+groovyScript+"' returns null"); + error.add("validation.message.groovy.return.null", groovyScript); } if (!isScriptResultTrue(groovyResult)) { @@ -166,7 +166,7 @@ public class Validator { Integer minLength = getInteger(columnConfig, "minlength"); if (minLength != null) { if (!minLength(value, minLength)) { - error.add("has not min length of " + minLength); + error.add("validation.message.min.length", minLength.toString()); } } } @@ -175,7 +175,7 @@ public class Validator { Integer maxLength = getInteger(columnConfig, "maxlength"); if (maxLength != null) { if (!maxLength(value, maxLength)) { - error.add("has not max length of " + maxLength); + error.add("validation.message.max.length", maxLength.toString()); } } } @@ -184,7 +184,7 @@ public class Validator { String dateformat = getString(columnConfig, "date"); if (dateformat != null && !dateformat.trim().isEmpty()) { if (!isDate(value, dateformat, true)) { - error.add("is not a date of format " + dateformat); + error.add("validation.message.date.format", dateformat); } } } @@ -201,7 +201,7 @@ public class Validator { String regexp = getString(columnConfig, "regexp"); if (regexp != null && !regexp.trim().isEmpty()) { if (!matchRegexp(value, regexp)) { - error.add("does not match " + regexp); + error.add("validation.message.regexp", regexp); } } } @@ -237,10 +237,9 @@ public class Validator { List headerConfig = headerSectionConfig.getStringList("list"); if (headerConfig != null) { if (headerNames.length != headerConfig.size()) { - result = ValidationError.withoutLineNumber().add("number of headers is not correct! there are " + - headerNames.length + - " but there should be " + - headerConfig.size()); + result = ValidationError.withoutLineNumber().add("validation.message.header.length", + Integer.toString(headerNames.length), + Integer.toString(headerConfig.size())); return result; } @@ -249,13 +248,10 @@ public class Validator { for(int i=0; i