From 4002219dfee07bb25a98bb123a3192a7f3791212 Mon Sep 17 00:00:00 2001 From: Andreas Billmann Date: Mon, 12 Sep 2016 04:48:22 +0200 Subject: [PATCH] reorganize validation package --- .../javafx/smartcsv/export/ErrorExport.java | 6 +- .../smartcsv/fx/SmartCSVController.java | 3 +- .../javafx/smartcsv/fx/list/ErrorSideBar.java | 4 +- .../smartcsv/fx/table/model/CSVModel.java | 2 +- .../smartcsv/fx/util/I18nValidationUtil.java | 9 +- .../ValidationEditorController.java | 232 +++++++++++------- .../validation/ValidationFileReader.java | 2 +- .../validation/ValidationFileWriter.java | 1 + .../javafx/smartcsv/validation/Validator.java | 5 +- .../{ => checker}/DateValidation.java | 4 +- .../{ => checker}/DoubleValidation.java | 4 +- .../{ => checker}/EmptyValueIsValid.java | 2 +- .../{ => checker}/GroovyValidation.java | 3 +- .../{ => checker}/IntegerValidation.java | 4 +- .../{ => checker}/MaxLengthValidation.java | 4 +- .../{ => checker}/MinLengthValidation.java | 4 +- .../{ => checker}/NotEmptyValidation.java | 4 +- .../{ => checker}/RegExpValidation.java | 4 +- .../{ => checker}/UniqueValidation.java | 3 +- .../validation/{ => checker}/Validation.java | 4 +- .../{ => checker}/ValueOfValidation.java | 4 +- .../ConstraintsConfiguration.java | 2 +- .../FieldConfiguration.java | 45 +++- .../ValidationConfiguration.java | 2 +- .../fx/validation/validationEditor.fxml | 82 +++---- .../validation/HeaderValidationTest.java | 1 + .../smartcsv/validation/ValidatorTest.java | 1 + 27 files changed, 274 insertions(+), 167 deletions(-) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/DateValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/DoubleValidation.java (93%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/EmptyValueIsValid.java (84%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/GroovyValidation.java (96%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/IntegerValidation.java (93%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/MaxLengthValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/MinLengthValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/NotEmptyValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/RegExpValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/UniqueValidation.java (96%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/Validation.java (93%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => checker}/ValueOfValidation.java (94%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => configuration}/ConstraintsConfiguration.java (95%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => configuration}/FieldConfiguration.java (61%) rename src/main/java/ninja/javafx/smartcsv/validation/{ => configuration}/ValidationConfiguration.java (98%) diff --git a/src/main/java/ninja/javafx/smartcsv/export/ErrorExport.java b/src/main/java/ninja/javafx/smartcsv/export/ErrorExport.java index 6ec2107..6837a52 100644 --- a/src/main/java/ninja/javafx/smartcsv/export/ErrorExport.java +++ b/src/main/java/ninja/javafx/smartcsv/export/ErrorExport.java @@ -51,13 +51,13 @@ public class ErrorExport extends Service { format(resourceBundle.getString("log.header.message"), csvFilename, Integer.toString(model.getValidationError().size()))).append("\n\n"); - for (ValidationError error:model.getValidationError()) { + model.getValidationError().forEach(error -> log.append( format(resourceBundle.getString("log.message"), error.getLineNumber().toString(), error.getColumn(), - getI18nValidatioMessage(resourceBundle, error))).append("\n"); - } + getI18nValidatioMessage(resourceBundle, error))).append("\n") + ); Files.write(file.toPath(), log.toString().getBytes()); } catch (Throwable ex) { diff --git a/src/main/java/ninja/javafx/smartcsv/fx/SmartCSVController.java b/src/main/java/ninja/javafx/smartcsv/fx/SmartCSVController.java index 30af0ff..9f46d26 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/SmartCSVController.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/SmartCSVController.java @@ -56,7 +56,7 @@ import ninja.javafx.smartcsv.fx.util.SaveFileService; import ninja.javafx.smartcsv.fx.validation.ValidationEditorController; import ninja.javafx.smartcsv.preferences.PreferencesFileReader; import ninja.javafx.smartcsv.preferences.PreferencesFileWriter; -import ninja.javafx.smartcsv.validation.ValidationConfiguration; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import ninja.javafx.smartcsv.validation.ValidationError; import ninja.javafx.smartcsv.validation.ValidationFileReader; import ninja.javafx.smartcsv.validation.ValidationFileWriter; @@ -425,6 +425,7 @@ public class SmartCSVController extends FXMLController { public void showValidationEditor(String column) { validationEditorController.setSelectedColumn(column); + validationEditorController.updateForm(); Alert alert = new Alert(Alert.AlertType.CONFIRMATION); alert.setGraphic(null); diff --git a/src/main/java/ninja/javafx/smartcsv/fx/list/ErrorSideBar.java b/src/main/java/ninja/javafx/smartcsv/fx/list/ErrorSideBar.java index 9d89011..5bbcb7f 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/list/ErrorSideBar.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/list/ErrorSideBar.java @@ -137,9 +137,7 @@ public class ErrorSideBar extends Region { int rows = model.get().getRows().size(); double space = (double)heightWithoutStatusBlock() / rows; - for (ValidationError error : errorList) { - errorMarkerList.add(generateErrorMarker(space, error)); - } + errorList.forEach(error -> errorMarkerList.add(generateErrorMarker(space, error))); } } getChildren().setAll(errorMarkerList); diff --git a/src/main/java/ninja/javafx/smartcsv/fx/table/model/CSVModel.java b/src/main/java/ninja/javafx/smartcsv/fx/table/model/CSVModel.java index 9f15502..0ef5be8 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/table/model/CSVModel.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/table/model/CSVModel.java @@ -29,7 +29,7 @@ package ninja.javafx.smartcsv.fx.table.model; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import ninja.javafx.smartcsv.validation.RevalidationService; -import ninja.javafx.smartcsv.validation.ValidationConfiguration; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import ninja.javafx.smartcsv.validation.ValidationError; import ninja.javafx.smartcsv.validation.Validator; import org.apache.logging.log4j.LogManager; 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 5fa81fe..9ee425e 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/util/I18nValidationUtil.java @@ -43,9 +43,8 @@ public class I18nValidationUtil { public static String getI18nValidatioMessage(ResourceBundle resourceBundle, List errors) { StringWriter message = new StringWriter(); - for (ValidationError validationError: errors) { - message.append(getI18nValidatioMessage(resourceBundle, validationError)).append("\n"); - } + errors.forEach(error -> message.append(getI18nValidatioMessage(resourceBundle, error)).append("\n")); + if (message.toString().length() != 0) { return cutOffLastLineBreak(message.toString()); @@ -66,7 +65,7 @@ public class I18nValidationUtil { List validationMessages = error.getMessages(); StringWriter message = new StringWriter(); - for (ValidationMessage validationMessage: validationMessages) { + validationMessages.forEach(validationMessage -> { message.append(prefix); if (resourceBundle.containsKey(validationMessage.getKey())) { String resourceText = resourceBundle.getString(validationMessage.getKey()); @@ -78,7 +77,7 @@ public class I18nValidationUtil { } else { message.append(validationMessage.getKey()).append("\n"); } - } + }); if (!validationMessages.isEmpty()) { return cutOffLastLineBreak(message.toString()); diff --git a/src/main/java/ninja/javafx/smartcsv/fx/validation/ValidationEditorController.java b/src/main/java/ninja/javafx/smartcsv/fx/validation/ValidationEditorController.java index 6882648..2df9405 100644 --- a/src/main/java/ninja/javafx/smartcsv/fx/validation/ValidationEditorController.java +++ b/src/main/java/ninja/javafx/smartcsv/fx/validation/ValidationEditorController.java @@ -32,9 +32,9 @@ import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory; import ninja.javafx.smartcsv.fx.FXMLController; -import ninja.javafx.smartcsv.validation.ConstraintsConfiguration; -import ninja.javafx.smartcsv.validation.FieldConfiguration; -import ninja.javafx.smartcsv.validation.ValidationConfiguration; +import ninja.javafx.smartcsv.validation.configuration.ConstraintsConfiguration; +import ninja.javafx.smartcsv.validation.configuration.FieldConfiguration; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import org.fxmisc.richtext.CodeArea; import org.fxmisc.richtext.LineNumberFactory; import org.fxmisc.richtext.StyleSpans; @@ -50,9 +50,12 @@ import java.util.ResourceBundle; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static java.lang.Boolean.FALSE; import static java.util.Arrays.asList; import static java.util.stream.Collectors.joining; import static javafx.beans.binding.Bindings.when; +import static javafx.collections.FXCollections.observableList; +import static ninja.javafx.smartcsv.validation.configuration.FieldConfiguration.*; /** * controller for editing column validations @@ -102,6 +105,12 @@ public class ValidationEditorController extends FXMLController { @FXML private ComboBox typeComboBox; + @FXML + private ComboBox formatComboBox; + + @FXML + private TextField formatTextField; + @FXML private Spinner minLengthSpinner; @@ -147,27 +156,112 @@ public class ValidationEditorController extends FXMLController { @Override public void initialize(URL location, ResourceBundle resources) { - - typeComboBox.getItems().addAll(FieldConfiguration.Type.STRING, - FieldConfiguration.Type.INTEGER, - FieldConfiguration.Type.NUMBER, - FieldConfiguration.Type.DATE, - FieldConfiguration.Type.DATETIME, - FieldConfiguration.Type.TIME); - typeComboBox.setValue(FieldConfiguration.Type.STRING); - + initTypeAndFormatInput(); initMinMaxSpinner(); - initSpinner(minLengthSpinner, enableMinLengthRule); initSpinner(maxLengthSpinner, enableMaxLengthRule); initTextInputControl(regexpRuleTextField, enableRegexpRule); initTextInputControl(valueOfRuleTextField, enableValueOfRule); initCodeAreaControl(groovyRuleTextArea, enableGroovyRule); + } + public String getSelectedColumn() { + return selectedColumn.get(); + } - selectedColumn.addListener(observable -> { - updateForm(); - }); + public StringProperty selectedColumnProperty() { + return selectedColumn; + } + + public void setSelectedColumn(String selectedColumn) { + this.selectedColumn.set(selectedColumn); + } + + public void setValidationConfiguration(ValidationConfiguration validationConfiguration) { + this.validationConfiguration = validationConfiguration; + } + + private void initTypeAndFormatInput() { + typeComboBox.getItems().addAll(Type.STRING, + Type.INTEGER, + Type.NUMBER, + Type.DATE, + Type.DATETIME, + Type.TIME); + formatComboBox.setDisable(true); + formatTextField.setDisable(true); + typeComboBox.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> clearFormatComboBox()); + formatComboBox.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> clearFormatTextField()); + } + + private void updateFormatTextField() { + FieldConfiguration config = getCurrentFieldConfig(); + switch (config.getType()) { + case DATE: + case DATETIME: + case TIME: + if (config.getFormat().startsWith("fmt:")) { + formatTextField.setText(config.getFormat().substring(4)); + } else { + formatTextField.setText(config.getFormat()); + } + break; + default: + formatTextField.setText(null); + break; + } + } + + private void clearFormatTextField() { + FieldConfiguration config = getCurrentFieldConfig(); + formatTextField.setText(null); + switch (config.getType()) { + case DATE: + case DATETIME: + case TIME: + formatTextField.setDisable(false); + break; + default: + formatTextField.setDisable(true); + break; + } + } + + private void clearFormatComboBox() { + formatTextField.setText(null); + formatTextField.setDisable(true); + changeFormat(); + + if (!formatComboBox.isDisable()) { + formatComboBox.getSelectionModel().selectFirst(); + } else { + formatComboBox.getSelectionModel().clearSelection(); + } + } + + private void updateFormInput() { + FieldConfiguration config = getCurrentFieldConfig(); + if (!formatComboBox.isDisable()) { + if (config.getFormat() == null) { + formatComboBox.getSelectionModel().selectFirst(); + } else { + switch (config.getType()) { + case STRING: + case NUMBER: + formatComboBox.getSelectionModel().select(config.getFormat()); + break; + case DATE: + case DATETIME: + case TIME: + if (config.getFormat().startsWith("fmt:")) { + formatComboBox.getSelectionModel().select(DateFormat.FMT_PATTERN.toString()); + } else { + formatComboBox.getSelectionModel().select(DateFormat.ANY.toString()); + } + break; + } + } + } } private void initMinMaxSpinner() { @@ -188,94 +282,44 @@ public class ValidationEditorController extends FXMLController { } - public String getSelectedColumn() { - return selectedColumn.get(); - } - - public StringProperty selectedColumnProperty() { - return selectedColumn; - } - - public void setSelectedColumn(String selectedColumn) { - this.selectedColumn.set(selectedColumn); - } - - public void setValidationConfiguration(ValidationConfiguration validationConfiguration) { - this.validationConfiguration = validationConfiguration; - } - - private void changeFormatInput() { + private void changeFormat() { + formatComboBox.getItems().clear(); + formatComboBox.getSelectionModel().clearSelection(); switch (typeComboBox.getValue()) { case STRING: - /* - default: any valid string. - email: A valid email address. - uri: A valid URI. - binary: A base64 encoded string representing binary data. - uuid: A string that is a uuid - */ + updateFormatComboBox(getStringFormats()); break; case NUMBER: - /* - decimalChar: A string whose value is used to represent a decimal point within the number. The default value is ".". - groupChar: A string whose value is used to group digits within the number. The default value is null. A common value is "," e.g. "100,000". - currency - */ - break; + updateFormatComboBox(getNumberFormats()); + break; case DATE: - /* - default: An ISO8601 format string. - This MUST be in ISO8601 format YYYY-MM-DD - any: Any parsable representation of the type. The implementing library can attempt to parse the datetime via a range of strategies. - An example is dateutil.parser.parse from the python-dateutils library. - fmt:PATTERN: date/time values in this field conform to PATTERN where [PATTERN] follows the syntax of standard Python / C strptime. - */ - break; case DATETIME: - /* - default: An ISO8601 format string. - datetime: a date-time. This MUST be in ISO 8601 format of YYYY-MM-DDThhssZ in UTC time - any: Any parsable representation of the type. The implementing library can attempt to parse the datetime via a range of strategies. - An example is dateutil.parser.parse from the python-dateutils library. - fmt:PATTERN: date/time values in this field conform to PATTERN where [PATTERN] follows the syntax of standard Python / C strptime. - */ - break; case TIME: - /* - default: An ISO8601 format string. - time: a time without a date - any: Any parsable representation of the type. The implementing library can attempt to parse the datetime via a range of strategies. - An example is dateutil.parser.parse from the python-dateutils library. - fmt:PATTERN: date/time values in this field conform to PATTERN where [PATTERN] follows the syntax of standard Python / C strptime. - */ + updateFormatComboBox(getDateFormats()); break; -// case GEOPOINT: -// /* -// default: A string of the pattern "lon, lat", where lon is the longitude and lat is the latitude. -// array: An array of exactly two items, where each item is either a number, or a string parsable as a number, and the first item is lon and the second item is lat. -// object: A JSON object with exactly two keys, lat and lon -// */ -// break; -// case GEOJSON: -// /* -// default: A geojson object as per the GeoJSON spec. -// topojson: A topojson object as per the TopoJSON spec -// */ -// case DURATION: -// case OBJECT: -// case ARRAY: case INTEGER: default: // format: no options + formatComboBox.setDisable(true); + formatTextField.setDisable(true); + formatTextField.setText(null); break; } + updateFormInput(); } + private void updateFormatComboBox(List values) { + formatComboBox.getItems().setAll(observableList(values)); + formatComboBox.setEditable(false); + formatComboBox.setDisable(false); + formatTextField.setDisable(true); + formatTextField.setText(null); + } public void updateConfiguration() { - FieldConfiguration config = validationConfiguration.getFieldConfiguration(getSelectedColumn()); + FieldConfiguration config = getCurrentFieldConfig(); config.setType(typeComboBox.getValue()); if (enableGroovyRule.isSelected()) { @@ -289,9 +333,6 @@ public class ValidationEditorController extends FXMLController { constraints = new ConstraintsConfiguration(); } - - - if (enableNotEmptyRule.isSelected()) { constraints.setRequired(enableNotEmptyRule.isSelected()); } else { @@ -330,6 +371,10 @@ public class ValidationEditorController extends FXMLController { } + private FieldConfiguration getCurrentFieldConfig() { + return validationConfiguration.getFieldConfiguration(getSelectedColumn()); + } + private void addDependencyListener(CheckBox rule, CheckBox... dependentRules) { rule.selectedProperty().addListener((observable, oldValue, newValue) -> { if (newValue) { @@ -340,9 +385,9 @@ public class ValidationEditorController extends FXMLController { }); } - private void updateForm() { + public void updateForm() { - FieldConfiguration config = validationConfiguration.getFieldConfiguration(getSelectedColumn()); + FieldConfiguration config = getCurrentFieldConfig(); if (config.getType() != null) { typeComboBox.setValue(config.getType()); @@ -350,6 +395,9 @@ public class ValidationEditorController extends FXMLController { typeComboBox.setValue(FieldConfiguration.Type.STRING); } + updateFormInput(); + updateFormatTextField(); + updateCodeAreaControl( groovyRuleTextArea, config.getGroovy(), @@ -357,8 +405,8 @@ public class ValidationEditorController extends FXMLController { ); ConstraintsConfiguration constraints = config.getConstraints(); - updateCheckBox(constraints != null ? constraints.getRequired() : false, enableNotEmptyRule); - updateCheckBox(constraints != null ? constraints.getUnique() : false, enableUniqueRule); + updateCheckBox(constraints != null ? constraints.getRequired() : FALSE, enableNotEmptyRule); + updateCheckBox(constraints != null ? constraints.getUnique() : FALSE, enableUniqueRule); updateSpinner( minLengthSpinner, diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileReader.java b/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileReader.java index c51e256..b81f1cc 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileReader.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileReader.java @@ -28,6 +28,7 @@ package ninja.javafx.smartcsv.validation; import com.google.gson.GsonBuilder; import ninja.javafx.smartcsv.FileReader; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import java.io.File; import java.io.IOException; @@ -42,7 +43,6 @@ public class ValidationFileReader implements FileReader @Override public void read(File file) throws IOException { config = new GsonBuilder().create().fromJson(new java.io.FileReader(file), ValidationConfiguration.class); - System.out.println("brechpunkt"); } public ValidationConfiguration getContent() { diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileWriter.java b/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileWriter.java index 328fcb9..d6efea7 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileWriter.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/ValidationFileWriter.java @@ -29,6 +29,7 @@ package ninja.javafx.smartcsv.validation; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import ninja.javafx.smartcsv.FileWriter; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import java.io.File; import java.io.IOException; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java index dbca6c9..9f32adb 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java @@ -27,13 +27,16 @@ package ninja.javafx.smartcsv.validation; import ninja.javafx.smartcsv.fx.table.model.ColumnValueProvider; +import ninja.javafx.smartcsv.validation.checker.*; +import ninja.javafx.smartcsv.validation.configuration.ConstraintsConfiguration; +import ninja.javafx.smartcsv.validation.configuration.FieldConfiguration; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import java.util.HashMap; import java.util.List; import java.util.Map; import static ninja.javafx.smartcsv.validation.ValidationFormatHelper.dateFormat; -import static ninja.javafx.smartcsv.validation.ValidationFormatHelper.doubleToInteger; /** * This class checks all the validations defined in the diff --git a/src/main/java/ninja/javafx/smartcsv/validation/DateValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/DateValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/DateValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/DateValidation.java index eae88e9..342c3e9 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/DateValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/DateValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.isDate; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/DoubleValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/DoubleValidation.java similarity index 93% rename from src/main/java/ninja/javafx/smartcsv/validation/DoubleValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/DoubleValidation.java index 39864b9..13a879e 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/DoubleValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/DoubleValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.isDouble; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/EmptyValueIsValid.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/EmptyValueIsValid.java similarity index 84% rename from src/main/java/ninja/javafx/smartcsv/validation/EmptyValueIsValid.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/EmptyValueIsValid.java index 3757a05..f7e0420 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/EmptyValueIsValid.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/EmptyValueIsValid.java @@ -1,4 +1,4 @@ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; /** * validations based on this are not validated when the value is null or empty diff --git a/src/main/java/ninja/javafx/smartcsv/validation/GroovyValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/GroovyValidation.java similarity index 96% rename from src/main/java/ninja/javafx/smartcsv/validation/GroovyValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/GroovyValidation.java index f169f0a..f806f5d 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/GroovyValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/GroovyValidation.java @@ -23,11 +23,12 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; import groovy.lang.Binding; import groovy.lang.GroovyShell; import groovy.lang.Script; +import ninja.javafx.smartcsv.validation.ValidationError; import org.codehaus.groovy.control.CompilationFailedException; /** diff --git a/src/main/java/ninja/javafx/smartcsv/validation/IntegerValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/IntegerValidation.java similarity index 93% rename from src/main/java/ninja/javafx/smartcsv/validation/IntegerValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/IntegerValidation.java index 83ef7f9..84f0aff 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/IntegerValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/IntegerValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.isInt; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/MaxLengthValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/MaxLengthValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/MaxLengthValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/MaxLengthValidation.java index 8e97eb3..32924e2 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/MaxLengthValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/MaxLengthValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.maxLength; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/MinLengthValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/MinLengthValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/MinLengthValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/MinLengthValidation.java index 2cbf4b0..dde032f 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/MinLengthValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/MinLengthValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.minLength; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/NotEmptyValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/NotEmptyValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/NotEmptyValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/NotEmptyValidation.java index 809fbb2..c17aa87 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/NotEmptyValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/NotEmptyValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.isBlankOrNull; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/RegExpValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/RegExpValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/RegExpValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/RegExpValidation.java index aa9bb27..0557708 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/RegExpValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/RegExpValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import static org.apache.commons.validator.GenericValidator.matchRegexp; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/UniqueValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/UniqueValidation.java similarity index 96% rename from src/main/java/ninja/javafx/smartcsv/validation/UniqueValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/UniqueValidation.java index 3a62d19..5af91a6 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/UniqueValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/UniqueValidation.java @@ -23,9 +23,10 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; import ninja.javafx.smartcsv.fx.table.model.ColumnValueProvider; +import ninja.javafx.smartcsv.validation.ValidationError; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/Validation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/Validation.java similarity index 93% rename from src/main/java/ninja/javafx/smartcsv/validation/Validation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/Validation.java index 957d3bb..a37fddf 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/Validation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/Validation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; /** * Interface for all validations diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ValueOfValidation.java b/src/main/java/ninja/javafx/smartcsv/validation/checker/ValueOfValidation.java similarity index 94% rename from src/main/java/ninja/javafx/smartcsv/validation/ValueOfValidation.java rename to src/main/java/ninja/javafx/smartcsv/validation/checker/ValueOfValidation.java index cf5edb4..80a88ec 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ValueOfValidation.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/checker/ValueOfValidation.java @@ -23,7 +23,9 @@ THE SOFTWARE. */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.checker; + +import ninja.javafx.smartcsv.validation.ValidationError; import java.util.List; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ConstraintsConfiguration.java b/src/main/java/ninja/javafx/smartcsv/validation/configuration/ConstraintsConfiguration.java similarity index 95% rename from src/main/java/ninja/javafx/smartcsv/validation/ConstraintsConfiguration.java rename to src/main/java/ninja/javafx/smartcsv/validation/configuration/ConstraintsConfiguration.java index be6e7cb..0007ba7 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ConstraintsConfiguration.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/configuration/ConstraintsConfiguration.java @@ -1,4 +1,4 @@ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.configuration; import com.google.gson.annotations.SerializedName; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/FieldConfiguration.java b/src/main/java/ninja/javafx/smartcsv/validation/configuration/FieldConfiguration.java similarity index 61% rename from src/main/java/ninja/javafx/smartcsv/validation/FieldConfiguration.java rename to src/main/java/ninja/javafx/smartcsv/validation/configuration/FieldConfiguration.java index 521133f..3ebedff 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/FieldConfiguration.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/configuration/FieldConfiguration.java @@ -1,7 +1,11 @@ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.configuration; import com.google.gson.annotations.SerializedName; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + /** * @author abi */ @@ -22,6 +26,45 @@ public class FieldConfiguration { // @SerializedName("geojson") GEOJSON } + public enum StringFormat { + @SerializedName("default") DEFAULT, + @SerializedName("email") EMAIL, + @SerializedName("uri") URI, + @SerializedName("binary") BINARY, + @SerializedName("uuid") UUID + } + + public static List getStringFormats() { + return Stream.of(StringFormat.values()) + .map(StringFormat::name) + .collect(Collectors.toList()); + } + + public enum NumberFormat { + @SerializedName("decimalChar") DECIMAL_CHAR, + @SerializedName("groupChar") GROUP_CHAR, + @SerializedName("currency") CURRENCY + } + + public static List getNumberFormats() { + return Stream.of(NumberFormat.values()) + .map(NumberFormat::name) + .collect(Collectors.toList()); + } + + + public enum DateFormat { + @SerializedName("default") DEFAULT, + @SerializedName("any") ANY, + @SerializedName("fmtPattern") FMT_PATTERN + } + + public static List getDateFormats() { + return Stream.of(DateFormat.values()) + .map(DateFormat::name) + .collect(Collectors.toList()); + } + private String name; private String title; private Type type; diff --git a/src/main/java/ninja/javafx/smartcsv/validation/ValidationConfiguration.java b/src/main/java/ninja/javafx/smartcsv/validation/configuration/ValidationConfiguration.java similarity index 98% rename from src/main/java/ninja/javafx/smartcsv/validation/ValidationConfiguration.java rename to src/main/java/ninja/javafx/smartcsv/validation/configuration/ValidationConfiguration.java index 08dc1b6..31895c6 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/ValidationConfiguration.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/configuration/ValidationConfiguration.java @@ -24,7 +24,7 @@ */ -package ninja.javafx.smartcsv.validation; +package ninja.javafx.smartcsv.validation.configuration; import com.google.gson.annotations.SerializedName; diff --git a/src/main/resources/ninja/javafx/smartcsv/fx/validation/validationEditor.fxml b/src/main/resources/ninja/javafx/smartcsv/fx/validation/validationEditor.fxml index 9699436..b8fa926 100644 --- a/src/main/resources/ninja/javafx/smartcsv/fx/validation/validationEditor.fxml +++ b/src/main/resources/ninja/javafx/smartcsv/fx/validation/validationEditor.fxml @@ -13,65 +13,57 @@ - + - - - - + + + + - - - - - - - - - + + + + + + + + + - - + - + diff --git a/src/test/java/ninja/javafx/smartcsv/validation/HeaderValidationTest.java b/src/test/java/ninja/javafx/smartcsv/validation/HeaderValidationTest.java index 7a0c673..7d42588 100644 --- a/src/test/java/ninja/javafx/smartcsv/validation/HeaderValidationTest.java +++ b/src/test/java/ninja/javafx/smartcsv/validation/HeaderValidationTest.java @@ -28,6 +28,7 @@ package ninja.javafx.smartcsv.validation; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java b/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java index 0a833f6..521c3d4 100644 --- a/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java +++ b/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java @@ -2,6 +2,7 @@ package ninja.javafx.smartcsv.validation; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith;