/** * Instantiates a new default configuration processor. * * @param kaaSchema the base schema * @throws ConfigurationGenerationException the configuration processing exception */ public DefaultRecordGenerationAlgorithmImpl(U kaaSchema, KaaDataFactory<U, T> factory) throws ConfigurationGenerationException { LOG.debug("Generating default configuration for configuration schema: " + kaaSchema.getRawSchema()); this.rootSchema = kaaSchema; this.dataFactory = factory; this.avroSchemaParser = new Schema.Parser(); this.avroBaseSchema = this.avroSchemaParser.parse(kaaSchema.getRawSchema()); }
@Override public T validateUuidFields(GenericRecord configurationToValidate, GenericRecord previousConfiguration) throws IOException { processedUuids.clear(); String config = null; GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>( schema.getRawSchema()); validateRecord(configurationToValidate, previousConfiguration, previousConfiguration); if (configurationToValidate != null) { config = converter.encodeToJson(configurationToValidate); } LOG.trace("Generated uuid fields for records {}", configurationToValidate); return dataFactory.createData(schema, config); }
@Test public void createSchemaTest() throws Exception { DataSchema schema = new DataSchema(readSchemaFileAsString("dao/schema/dataSchema.json")); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(schema); KaaSchema protocolSchema = generator.getProtocolSchema(); KaaSchema baseSchema = generator.getBaseSchema(); KaaSchema overrideSchema = generator.getOverrideSchema(); LOG.debug("Created Override schema JSON {} ", overrideSchema.getRawSchema()); LOG.debug("Created Base schema JSON {} ", baseSchema.getRawSchema()); LOG.debug("Created Protocol schema JSON {} ", protocolSchema.getRawSchema()); }
@Test(expected = OverrideException.class) public void testResolveFailsWhenSchemaForParentIsNotFound() throws Exception { Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema.json").toURI()); DataSchema configurationSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configurationSchema); KaaSchema baseSchemaString = generator.getBaseSchema(); Schema.Parser baseParser = new Schema.Parser(); baseParser.parse(baseSchemaString.getRawSchema()); ArrayOverrideStrategyResolver arrayMergeStrategyResolver = new ArrayOverrideStrategyResolver(baseParser.getTypes()); arrayMergeStrategyResolver.resolve("wrong_parent_name", "org.kaa.config", "child_name"); }
@Override public T validateUuidFields(T configurationToValidate, T previousConfiguration) throws IOException { processedUuids.clear(); String config = null; GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>( schema.getRawSchema()); GenericRecord currentRecord = converter.decodeJson(configurationToValidate.getRawData()); GenericRecord previousRecord = null; if (previousConfiguration != null) { previousRecord = converter.decodeJson(previousConfiguration.getRawData()); } validateRecord(currentRecord, previousRecord, previousRecord); if (currentRecord != null) { config = converter.encodeToJson(currentRecord); } LOG.trace("Generated uuid fields for records {}", currentRecord); return dataFactory.createData(schema, config); }
@Test public void testStrategyIsResolvedToOverrideWhenFieldsDefinitionIsEmpty() throws Exception { Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema_for_array_merge_strategy_resolver_with_empty_fields_definition.json").toURI()); DataSchema configurationSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configurationSchema); KaaSchema baseSchemaString = generator.getBaseSchema(); Schema.Parser baseParser = new Schema.Parser(); baseParser.parse(baseSchemaString.getRawSchema()); ArrayOverrideStrategyResolver arrayMergeStrategyResolver = new ArrayOverrideStrategyResolver(baseParser.getTypes()); ArrayOverrideStrategy actualArrayMergeStrategy = arrayMergeStrategyResolver.resolve("testT", "org.kaa.config", "child_name"); Assert.assertTrue(ArrayOverrideStrategy.REPLACE == actualArrayMergeStrategy); }
@Test public void testResolveSuccessForUnionWithArrayType() throws Exception { Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema_for_array_merge_strategy_resolver_with_array_in_union_type.json").toURI()); DataSchema configurationSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configurationSchema); KaaSchema baseSchemaString = generator.getBaseSchema(); Schema.Parser baseParser = new Schema.Parser(); baseParser.parse(baseSchemaString.getRawSchema()); ArrayOverrideStrategyResolver arrayMergeStrategyResolver = new ArrayOverrideStrategyResolver(baseParser.getTypes()); ArrayOverrideStrategy actualArrayMergeStrategy = arrayMergeStrategyResolver.resolve("testT", "org.kaa.config", "field1"); Assert.assertTrue(ArrayOverrideStrategy.APPEND == actualArrayMergeStrategy); } }
data.getSchema().getRawSchema(), userConfHash, epsConfHash);