private boolean validateDataGenerator( Stage.Context context, DataFormat dataFormat, String groupName, List<Stage.ConfigIssue> issues) { boolean valid = true; DataGeneratorFactoryBuilder builder = new DataGeneratorFactoryBuilder(context, dataFormat.getGeneratorFormat()); if (charset == null || charset.trim().isEmpty()) { charset = CHARSET_UTF8; } Charset cSet; try { cSet = Charset.forName(charset); } catch (UnsupportedCharsetException ex) { // setting it to a valid one so the parser factory can be configured and tested for more // errors cSet = StandardCharsets.UTF_8; issues.add( context.createConfigIssue( groupName, "charset", DataFormatErrors.DATA_FORMAT_05, charset)); valid &= false; } builder.setCharset(cSet); switch (dataFormat) { case SDC_JSON: break; case DELIMITED: builder.setMode(csvFileFormat); builder.setMode(csvHeader); builder.setConfig(DelimitedDataGeneratorFactory.REPLACE_NEWLINES_KEY, csvReplaceNewLines); builder.setConfig(DelimitedDataConstants.DELIMITER_CONFIG, csvCustomDelimiter); builder.setConfig(DelimitedDataConstants.ESCAPE_CONFIG, csvCustomEscape); builder.setConfig(DelimitedDataConstants.QUOTE_CONFIG, csvCustomQuote); break; case TEXT: builder.setConfig(TextDataGeneratorFactory.FIELD_PATH_KEY, textFieldPath); builder.setConfig(TextDataGeneratorFactory.EMPTY_LINE_IF_NULL_KEY, textEmptyLineIfNull); break; case JSON: builder.setMode(jsonMode); break; case AVRO: Schema schema = null; Map<String, Object> defaultValues = new HashMap<>(); try { schema = new Schema.Parser().setValidate(true).setValidateDefaults(true).parse(avroSchema); } catch (Exception e) { issues.add( context.createConfigIssue( DataFormatGroups.AVRO.name(), "avroSchema", DataFormatErrors.DATA_FORMAT_300, e.toString(), e)); valid &= false; } if (schema != null) { try { defaultValues.putAll( AvroTypeUtil.getDefaultValuesFromSchema(schema, new HashSet<String>())); } catch (IOException e) { issues.add( context.createConfigIssue( DataFormatGroups.AVRO.name(), "avroSchema", DataFormatErrors.DATA_FORMAT_301, e.toString(), e)); valid &= false; } } builder.setConfig(AvroDataGeneratorFactory.SCHEMA_KEY, avroSchema); builder.setConfig(AvroDataGeneratorFactory.INCLUDE_SCHEMA_KEY, includeSchema); builder.setConfig(AvroDataGeneratorFactory.DEFAULT_VALUES_KEY, defaultValues); break; case BINARY: builder.setConfig(BinaryDataGeneratorFactory.FIELD_PATH_KEY, binaryFieldPath); break; case PROTOBUF: builder .setConfig(ProtobufConstants.PROTO_DESCRIPTOR_FILE_KEY, protoDescriptorFile) .setConfig(ProtobufConstants.MESSAGE_TYPE_KEY, messageType); break; default: // no action needed break; } if (valid) { try { dataGeneratorFactory = builder.build(); } catch (Exception ex) { issues.add( context.createConfigIssue( null, null, DataFormatErrors.DATA_FORMAT_201, ex.toString(), ex)); valid &= false; } } return valid; }