new feature: clickable error list

This commit is contained in:
Andreas Billmann
2015-12-07 22:41:59 +01:00
parent 873a880971
commit 11fb9b1094
13 changed files with 226 additions and 79 deletions

View File

@@ -64,12 +64,12 @@ public class EditableValidationCell extends TableCell<CSVRow, CSVValue> {
protected void updateItem(CSVValue item, boolean empty) {
super.updateItem(item, empty);
if (item == null || item.getValid().isValid() || isEditing()) {
if (item == null || item.getValidationError() == null || isEditing()) {
setStyle("");
setTooltip(null);
} else if (!item.getValid().isValid()) {
} else if (item.getValidationError() != null) {
setStyle("-fx-background-color: #ff8888");
setTooltip(new Tooltip(item.getValid().error()));
setTooltip(new Tooltip(item.getValidationError().getMessage()));
}
if (item == null || empty) {

View File

@@ -28,7 +28,7 @@ package ninja.javafx.smartcsv.fx.table.model;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import ninja.javafx.smartcsv.validation.ValidationState;
import ninja.javafx.smartcsv.validation.ValidationError;
import ninja.javafx.smartcsv.validation.Validator;
/**
@@ -41,6 +41,7 @@ public class CSVModel {
private ObservableList<CSVRow> rows = FXCollections.observableArrayList();
private String[] header;
private String filepath;
private ObservableList<ValidationError> validationError = FXCollections.observableArrayList();
public CSVModel(String filepath) {
this.filepath = filepath;
@@ -71,6 +72,10 @@ public class CSVModel {
return rows;
}
public ObservableList<ValidationError> getValidationError() {
return validationError;
}
/**
* adds a new and empty row
* @return the new row
@@ -105,22 +110,37 @@ public class CSVModel {
* walks through the data and validates each value
*/
private void revalidate() {
validationError.clear();
if (header != null && validator != null) {
validator.isHeaderValid(header);
addValidationError(validator.isHeaderValid(header));
}
for (CSVRow row: rows) {
for (int lineNumber = 0; lineNumber < rows.size(); lineNumber++) {
CSVRow row = rows.get(lineNumber);
row.setValidator(validator);
for (String column: row.getColumns().keySet()) {
CSVValue value = row.getColumns().get(column).getValue();
value.setValidator(validator);
if (validator != null) {
value.setValid(validator.isValid(column, value.getValue()));
ValidationError validationError = validator.isValid(column, value.getValue(), lineNumber);
if (validationError != null) {
addValidationError(validationError);
value.setValidationError(validationError);
} else {
value.setValidationError(null);
}
} else {
value.setValid(new ValidationState());
value.setValidationError(null);
}
}
}
}
private void addValidationError(ValidationError validationError) {
if (validationError != null) {
this.validationError.add(validationError);
}
}
}

View File

@@ -28,7 +28,7 @@ package ninja.javafx.smartcsv.fx.table.model;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import ninja.javafx.smartcsv.validation.ValidationState;
import ninja.javafx.smartcsv.validation.ValidationError;
import ninja.javafx.smartcsv.validation.Validator;
/**
@@ -41,7 +41,7 @@ public class CSVValue {
private int rowNumber;
private String column;
private StringProperty value = new SimpleStringProperty();
private ValidationState valid = new ValidationState();
private ValidationError valid;
/**
* single value of a cell
@@ -89,7 +89,7 @@ public class CSVValue {
*/
public void setValue(String value) {
if (validator != null) {
valid = validator.isValid(column, value);
valid = validator.isValid(column, value, rowNumber);
}
this.value.set(value);
}
@@ -98,7 +98,7 @@ public class CSVValue {
* returns if the value is valid to the rules of the validator
* @return
*/
public ValidationState getValid() {
public ValidationError getValidationError() {
return valid;
}
@@ -106,7 +106,7 @@ public class CSVValue {
* sets the state if a value is valid or not
* @param valid the validation state
*/
protected void setValid(ValidationState valid) {
protected void setValidationError(ValidationError valid) {
this.valid = valid;
}
}