in src/main/java/software/amazon/neptune/csv2rdf/NeptuneCsvUserDefinedColumn.java [279:330]
public static NeptuneCsvUserDefinedColumn parse(@NonNull String fieldNameAndDatatype) {
String trimmed = fieldNameAndDatatype.trim();
// split column name and type definition
Matcher matcher = USER_HEADER_PATTERN.matcher(trimmed);
if (!matcher.matches() || matcher.groupCount() < GROUPS_IN_HEADER_PATTERN) {
throw new Csv2RdfException("Invalid column encountered while parsing header: " + trimmed);
}
String columnName = matcher.group(1);
if (columnName.isEmpty()) {
throw new Csv2RdfException("Column name is not present for header field: " + trimmed);
}
String typeString = matcher.group(2);
if (typeString == null || typeString.isEmpty()) {
return new NeptuneCsvUserDefinedColumn(columnName, DataType.STRING);
}
// split type name, cardinality, and array declaration
Matcher typeMatcher = USER_TYPE_PATTERN.matcher(typeString.toLowerCase());
if (!typeMatcher.matches() || typeMatcher.groupCount() < GROUPS_IN_TYPE_PATTERN) {
throw new Csv2RdfException("Invalid column encountered while parsing header: " + trimmed);
}
// Parse type from first group
DataType dataType = DataType.fromName(typeMatcher.group(1));
if (dataType == null) {
throw new Csv2RdfException("Invalid data type encountered for header: " + trimmed);
}
Cardinality cardinality = Cardinality.fromName(typeMatcher.group(3));
boolean isArray = ARRAY_DECLARATION.equals(typeMatcher.group(4));
if (cardinality == null) {
return new NeptuneCsvUserDefinedColumn(columnName, dataType, isArray);
}
if (isArray && cardinality == Cardinality.SINGLE) {
throw new Csv2RdfException("Type definition cannot be single cardinality but array: " + columnName);
}
if (isArray) {
return new NeptuneCsvUserDefinedColumn(columnName, dataType, isArray);
}
return new NeptuneCsvUserDefinedColumn(columnName, dataType, cardinality);
}