public static NeptuneCsvUserDefinedColumn parse()

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);
	}