mirror of
https://github.com/frosch95/SmartCSV.fx.git
synced 2026-04-11 13:38:23 +02:00
the editor can handle the support subset of JSON Table Schema
This commit is contained in:
@@ -28,12 +28,14 @@ package ninja.javafx.smartcsv.validation;
|
||||
|
||||
import com.google.gson.GsonBuilder;
|
||||
import ninja.javafx.smartcsv.FileReader;
|
||||
import ninja.javafx.smartcsv.validation.configuration.FieldConfiguration;
|
||||
import ninja.javafx.smartcsv.validation.configuration.Field;
|
||||
import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static ninja.javafx.smartcsv.validation.configuration.Type.*;
|
||||
|
||||
/**
|
||||
* This class loads the constraints as json config
|
||||
*/
|
||||
@@ -48,23 +50,23 @@ public class ValidationFileReader implements FileReader<ValidationConfiguration>
|
||||
}
|
||||
|
||||
private void setDefaults() {
|
||||
for (FieldConfiguration fieldConfiguration: config.getFieldConfigurations()) {
|
||||
if (fieldConfiguration.getType() == null) {
|
||||
fieldConfiguration.setType(FieldConfiguration.Type.STRING);
|
||||
for (Field field : config.getFields()) {
|
||||
if (field.getType() == null) {
|
||||
field.setType(STRING);
|
||||
}
|
||||
if (fieldConfiguration.getType() == FieldConfiguration.Type.DATE) {
|
||||
if (fieldConfiguration.getFormat() == null) {
|
||||
fieldConfiguration.setFormat("yyyy-MM-dd");
|
||||
if (field.getType() == DATE) {
|
||||
if (field.getFormat() == null) {
|
||||
field.setFormat("yyyy-MM-dd");
|
||||
}
|
||||
}
|
||||
if (fieldConfiguration.getType() == FieldConfiguration.Type.DATETIME) {
|
||||
if (fieldConfiguration.getFormat() == null) {
|
||||
fieldConfiguration.setFormat("yyyy-MM-ddThh:mm:ssZ");
|
||||
if (field.getType() == DATETIME) {
|
||||
if (field.getFormat() == null) {
|
||||
field.setFormat("yyyy-MM-ddThh:mm:ssZ");
|
||||
}
|
||||
}
|
||||
if (fieldConfiguration.getType() == FieldConfiguration.Type.TIME) {
|
||||
if (fieldConfiguration.getFormat() == null) {
|
||||
fieldConfiguration.setFormat("hh:mm:ss");
|
||||
if (field.getType() == TIME) {
|
||||
if (field.getFormat() == null) {
|
||||
field.setFormat("hh:mm:ss");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@ 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.Constraints;
|
||||
import ninja.javafx.smartcsv.validation.configuration.Field;
|
||||
import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -37,6 +37,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static ninja.javafx.smartcsv.validation.ValidationFormatHelper.dateFormat;
|
||||
import static ninja.javafx.smartcsv.validation.configuration.Type.*;
|
||||
|
||||
/**
|
||||
* This class checks all the validations defined in the
|
||||
@@ -140,7 +141,7 @@ public class Validator {
|
||||
|
||||
private void initColumnValidations() {
|
||||
if (hasConfig()) {
|
||||
for (FieldConfiguration column : validationConfig.getFieldConfigurations()) {
|
||||
for (Field column : validationConfig.getFields()) {
|
||||
initializeColumnWithRules(column);
|
||||
}
|
||||
}
|
||||
@@ -148,7 +149,7 @@ public class Validator {
|
||||
|
||||
private void initializeColumnWithRules(String columnName) {
|
||||
if (hasConfig()) {
|
||||
for (FieldConfiguration column : validationConfig.getFieldConfigurations()) {
|
||||
for (Field column : validationConfig.getFields()) {
|
||||
if (column.getName().equals(columnName)) {
|
||||
initializeColumnWithRules(column);
|
||||
break;
|
||||
@@ -158,28 +159,28 @@ public class Validator {
|
||||
|
||||
}
|
||||
|
||||
private void initializeColumnWithRules(FieldConfiguration column) {
|
||||
private void initializeColumnWithRules(Field column) {
|
||||
|
||||
if (column.getType() != null) {
|
||||
if (column.getType() == FieldConfiguration.Type.NUMBER) {
|
||||
if (column.getType() == NUMBER) {
|
||||
add(column.getName(), new DoubleValidation());
|
||||
}
|
||||
|
||||
if (column.getType() == FieldConfiguration.Type.INTEGER) {
|
||||
if (column.getType() == INTEGER) {
|
||||
add(column.getName(), new IntegerValidation());
|
||||
}
|
||||
|
||||
if (column.getType() == FieldConfiguration.Type.DATE) {
|
||||
if (column.getType() == DATE) {
|
||||
String format = dateFormat(column.getFormat(), "YYYY-MM-DD");
|
||||
add(column.getName(), new DateValidation(format));
|
||||
}
|
||||
|
||||
if (column.getType() == FieldConfiguration.Type.DATETIME) {
|
||||
if (column.getType() == DATETIME) {
|
||||
String format = dateFormat(column.getFormat(), "YYYY-MM-DDThh:mm:ssZ");
|
||||
add(column.getName(), new DateValidation(format));
|
||||
}
|
||||
|
||||
if (column.getType() == FieldConfiguration.Type.TIME) {
|
||||
if (column.getType() == TIME) {
|
||||
String format = dateFormat(column.getFormat(), "hh:mm:ss");
|
||||
add(column.getName(), new DateValidation(format));
|
||||
}
|
||||
@@ -190,7 +191,7 @@ public class Validator {
|
||||
add(column.getName(), new GroovyValidation(groovy));
|
||||
}
|
||||
|
||||
ConstraintsConfiguration constraints = column.getConstraints();
|
||||
Constraints constraints = column.getConstraints();
|
||||
if (constraints != null) {
|
||||
Boolean notEmptyRule = constraints.getRequired();
|
||||
if (notEmptyRule != null && notEmptyRule) {
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
package ninja.javafx.smartcsv.validation.configuration;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* contraints defined in JSON Table Schema
|
||||
* @see <a href="http://specs.frictionlessdata.io/json-table-schema/">JSON Table Schema</a>
|
||||
*/
|
||||
public class Constraints {
|
||||
private Boolean required;
|
||||
private Boolean unique;
|
||||
private Integer minLength;
|
||||
private Integer maxLength;
|
||||
|
||||
private String pattern;
|
||||
|
||||
@SerializedName("enum")
|
||||
private List<String> enumeration;
|
||||
|
||||
public Boolean getRequired() {
|
||||
return required;
|
||||
}
|
||||
|
||||
public void setRequired(Boolean required) {
|
||||
this.required = required;
|
||||
}
|
||||
|
||||
public Boolean getUnique() {
|
||||
return unique;
|
||||
}
|
||||
|
||||
public void setUnique(Boolean unique) {
|
||||
this.unique = unique;
|
||||
}
|
||||
|
||||
public Integer getMinLength() {
|
||||
return minLength;
|
||||
}
|
||||
|
||||
public void setMinLength(Integer minLength) {
|
||||
this.minLength = minLength;
|
||||
}
|
||||
|
||||
public Integer getMaxLength() {
|
||||
return maxLength;
|
||||
}
|
||||
|
||||
public void setMaxLength(Integer maxLength) {
|
||||
this.maxLength = maxLength;
|
||||
}
|
||||
|
||||
public String getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public void setPattern(String pattern) {
|
||||
this.pattern = pattern;
|
||||
}
|
||||
|
||||
public List<String> getEnumeration() {
|
||||
return enumeration;
|
||||
}
|
||||
|
||||
public void setEnumeration(List<String> enumeration) {
|
||||
this.enumeration = enumeration;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
package ninja.javafx.smartcsv.validation.configuration;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by PC on 04.09.2016.
|
||||
*/
|
||||
public class ConstraintsConfiguration {
|
||||
private Boolean required;
|
||||
private Boolean unique;
|
||||
private Integer minLength;
|
||||
private Integer maxLength;
|
||||
|
||||
private String pattern;
|
||||
|
||||
@SerializedName("enum")
|
||||
private List<String> enumeration;
|
||||
|
||||
public Boolean getRequired() {
|
||||
return required;
|
||||
}
|
||||
|
||||
public void setRequired(Boolean required) {
|
||||
this.required = required;
|
||||
}
|
||||
|
||||
public Boolean getUnique() {
|
||||
return unique;
|
||||
}
|
||||
|
||||
public void setUnique(Boolean unique) {
|
||||
this.unique = unique;
|
||||
}
|
||||
|
||||
public Integer getMinLength() {
|
||||
return minLength;
|
||||
}
|
||||
|
||||
public void setMinLength(Integer minLength) {
|
||||
this.minLength = minLength;
|
||||
}
|
||||
|
||||
public Integer getMaxLength() {
|
||||
return maxLength;
|
||||
}
|
||||
|
||||
public void setMaxLength(Integer maxLength) {
|
||||
this.maxLength = maxLength;
|
||||
}
|
||||
|
||||
public String getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public void setPattern(String pattern) {
|
||||
this.pattern = pattern;
|
||||
}
|
||||
|
||||
public List<String> getEnumeration() {
|
||||
return enumeration;
|
||||
}
|
||||
|
||||
public void setEnumeration(List<String> enumeration) {
|
||||
this.enumeration = enumeration;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
package ninja.javafx.smartcsv.validation.configuration;
|
||||
|
||||
/**
|
||||
* this class represents a field in the configuration
|
||||
* @see <a href="http://specs.frictionlessdata.io/json-table-schema/">JSON Table Schema</a>
|
||||
*/
|
||||
public class Field {
|
||||
|
||||
private String name;
|
||||
private String title;
|
||||
private Type type;
|
||||
private String description;
|
||||
private String format;
|
||||
private Object missingValue;
|
||||
private Constraints constraints;
|
||||
private String groovy;
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public Object getMissingValue() {
|
||||
return missingValue;
|
||||
}
|
||||
|
||||
public void setMissingValue(Object missingValue) {
|
||||
this.missingValue = missingValue;
|
||||
}
|
||||
|
||||
public Constraints getConstraints() {
|
||||
return constraints;
|
||||
}
|
||||
|
||||
public void setConstraints(Constraints constraints) {
|
||||
this.constraints = constraints;
|
||||
}
|
||||
|
||||
public String getGroovy() {
|
||||
return groovy;
|
||||
}
|
||||
|
||||
public void setGroovy(String groovy) {
|
||||
this.groovy = groovy;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,129 +0,0 @@
|
||||
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
|
||||
*/
|
||||
public class FieldConfiguration {
|
||||
|
||||
public enum Type {
|
||||
@SerializedName("string") STRING,
|
||||
@SerializedName("integer") INTEGER,
|
||||
@SerializedName("number") NUMBER,
|
||||
@SerializedName("date") DATE,
|
||||
@SerializedName("datetime") DATETIME,
|
||||
@SerializedName("time") TIME
|
||||
// TODO: currently not supported
|
||||
// @SerializedName("object") OBJECT,
|
||||
// @SerializedName("array") ARRAY,
|
||||
// @SerializedName("duration") DURATION,
|
||||
// @SerializedName("geopoint") GEOPOINT,
|
||||
// @SerializedName("geojson") GEOJSON
|
||||
}
|
||||
|
||||
public enum StringFormat {
|
||||
@SerializedName("default") DEFAULT,
|
||||
@SerializedName("email") EMAIL,
|
||||
@SerializedName("uri") URI,
|
||||
@SerializedName("binary") BINARY,
|
||||
@SerializedName("uuid") UUID
|
||||
}
|
||||
|
||||
public static List<String> getStringFormats() {
|
||||
return Stream.of(StringFormat.values())
|
||||
.map(StringFormat::name)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public enum DateFormat {
|
||||
@SerializedName("default") DEFAULT,
|
||||
@SerializedName("any") ANY,
|
||||
@SerializedName("fmtPattern") FMT_PATTERN
|
||||
}
|
||||
|
||||
public static List<String> getDateFormats() {
|
||||
return Stream.of(DateFormat.values())
|
||||
.map(DateFormat::name)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String name;
|
||||
private String title;
|
||||
private Type type;
|
||||
private String description;
|
||||
private String format;
|
||||
private Object missingValue;
|
||||
private ConstraintsConfiguration constraints;
|
||||
private String groovy;
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public Object getMissingValue() {
|
||||
return missingValue;
|
||||
}
|
||||
|
||||
public void setMissingValue(Object missingValue) {
|
||||
this.missingValue = missingValue;
|
||||
}
|
||||
|
||||
public ConstraintsConfiguration getConstraints() {
|
||||
return constraints;
|
||||
}
|
||||
|
||||
public void setConstraints(ConstraintsConfiguration constraints) {
|
||||
this.constraints = constraints;
|
||||
}
|
||||
|
||||
public String getGroovy() {
|
||||
return groovy;
|
||||
}
|
||||
|
||||
public void setGroovy(String groovy) {
|
||||
this.groovy = groovy;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
package ninja.javafx.smartcsv.validation.configuration;
|
||||
|
||||
/**
|
||||
* Enumeration for format values for type string in JSON Table Schema
|
||||
* @see <a href="http://specs.frictionlessdata.io/json-table-schema/">JSON Table Schema</a>
|
||||
*/
|
||||
public enum StringFormat {
|
||||
DEFAULT(null),
|
||||
EMAIL("email"),
|
||||
URI("uri"),
|
||||
BINARY("binary"),
|
||||
UUID("uuid");
|
||||
|
||||
private String externalValue;
|
||||
|
||||
StringFormat(String externalValue) {
|
||||
this.externalValue = externalValue;
|
||||
}
|
||||
|
||||
public String getExternalValue() {
|
||||
return externalValue;
|
||||
}
|
||||
|
||||
public static StringFormat fromExternalValue(String externalValue) {
|
||||
for (StringFormat value: StringFormat.values()) {
|
||||
if (value.name().equals(externalValue)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return DEFAULT;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
package ninja.javafx.smartcsv.validation.configuration;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
/**
|
||||
* Types of JSON Table Schema
|
||||
* @see <a href="http://specs.frictionlessdata.io/json-table-schema/">JSON Table Schema</a>
|
||||
*/
|
||||
public enum Type {
|
||||
@SerializedName("string")STRING,
|
||||
@SerializedName("integer")INTEGER,
|
||||
@SerializedName("number")NUMBER,
|
||||
@SerializedName("date")DATE,
|
||||
@SerializedName("datetime")DATETIME,
|
||||
@SerializedName("time")TIME
|
||||
// TODO: currently not supported
|
||||
// @SerializedName("object") OBJECT,
|
||||
// @SerializedName("array") ARRAY,
|
||||
// @SerializedName("duration") DURATION,
|
||||
// @SerializedName("geopoint") GEOPOINT,
|
||||
// @SerializedName("geojson") GEOJSON
|
||||
}
|
||||
@@ -32,35 +32,36 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* validation configuration
|
||||
* Configuration based on JSON Table Schema
|
||||
* @see <a href="http://specs.frictionlessdata.io/json-table-schema/">JSON Table Schema</a>
|
||||
*/
|
||||
public class ValidationConfiguration {
|
||||
|
||||
@SerializedName("fields")
|
||||
private FieldConfiguration[] fieldConfigurations;
|
||||
private Field[] fields;
|
||||
|
||||
public FieldConfiguration[] getFieldConfigurations() {
|
||||
return fieldConfigurations;
|
||||
public Field[] getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
public void setFieldConfigurations(FieldConfiguration[] fieldConfigurations) {
|
||||
this.fieldConfigurations = fieldConfigurations;
|
||||
public void setFields(Field[] fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
public FieldConfiguration getFieldConfiguration(String column) {
|
||||
for (FieldConfiguration fieldConfiguration: fieldConfigurations) {
|
||||
if (fieldConfiguration.getName().equals(column)) {
|
||||
return fieldConfiguration;
|
||||
public Field getFieldConfiguration(String column) {
|
||||
for (Field field : fields) {
|
||||
if (field.getName().equals(column)) {
|
||||
return field;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String[] headerNames() {
|
||||
if (fieldConfigurations != null) {
|
||||
if (fields != null) {
|
||||
List<String> headerNames = new ArrayList<>();
|
||||
for (FieldConfiguration fieldConfiguration: fieldConfigurations) {
|
||||
headerNames.add(fieldConfiguration.getName());
|
||||
for (Field field : fields) {
|
||||
headerNames.add(field.getName());
|
||||
}
|
||||
return headerNames.toArray(new String[headerNames.size()]);
|
||||
}
|
||||
@@ -69,11 +70,11 @@ public class ValidationConfiguration {
|
||||
}
|
||||
|
||||
public void setHeaderNames(String[] header) {
|
||||
fieldConfigurations = new FieldConfiguration[header.length];
|
||||
fields = new Field[header.length];
|
||||
int i = 0;
|
||||
for (String headerName: header) {
|
||||
fieldConfigurations[i] = new FieldConfiguration();
|
||||
fieldConfigurations[i].setName(headerName);
|
||||
fields[i] = new Field();
|
||||
fields[i].setName(headerName);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user