@Override public OverrideAlgorithm createConfigurationOverrideAlgorithm() { return new DefaultOverrideAlgorithm(); } }
getSchemaByName(sourceRecord.getSchema().getFullName())); destinationRoot.put(field.pos(), destinationRecord); applyNode(destinationRecord, sourceRecord, arrayMergeStrategyResolver); } else if (sourceChild instanceof GenericArray) { GenericRecord recordItem = (GenericRecord) item; GenericRecord destRecord = new GenericData.Record( getSchemaByName(recordItem.getSchema().getFullName())); applyNode(destRecord, recordItem, arrayMergeStrategyResolver); destArray.add(destRecord); GenericRecord recordItem = (GenericRecord) item; GenericRecord destRecord = new GenericData.Record( getSchemaByName(recordItem.getSchema().getFullName())); applyNode(destRecord, recordItem, arrayMergeStrategyResolver); destArray.add(destRecord);
GenericRecord nodeToApply = overrideConverter.decodeJson(configurationToApply); LOG.info("configurationToApply: {}", nodeToApply); applyNode(mergedConfiguration, nodeToApply, arrayMergeStrategyResolver);
@Test public void testMergeWhenConfigurationsIsEmpty() throws Exception { Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema.json").toURI()); DataSchema configuraionSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configuraionSchema); List<OverrideData> configurations = new ArrayList<>(); OverrideAlgorithm merger = new DefaultOverrideAlgorithm(); BaseData mergeResult = merger.override(null, configurations); Assert.assertNull(mergeResult); }
@Test public void testMergeOf3Configurations() throws Exception { // Create Configuration Schema Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema.json").toURI()); DataSchema configuraionSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configuraionSchema); BaseSchema baseSchemaString = generator.getBaseSchema(); OverrideSchema overrideSchemaString = generator.getOverrideSchema(); // Create Configuration weight 0 Path configuraionWeight0Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_0.json").toURI()); BaseData baseData = new BaseData(baseSchemaString, new String(Files.readAllBytes(configuraionWeight0Path))); // Create Configuration weight 1 Path configuraionWeight1Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_1.json").toURI()); OverrideData data1 = new OverrideData(overrideSchemaString, new String(Files.readAllBytes(configuraionWeight1Path))); // Create Configuration weight 2 Path configuraionWeight2Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_2.json").toURI()); OverrideData data2 = new OverrideData(overrideSchemaString, new String(Files.readAllBytes(configuraionWeight2Path))); List<OverrideData> configurations = new ArrayList<>(); configurations.add(data1); configurations.add(data2); Path mergedConfiguraionPath = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/merged_config.json").toURI()); String mergedConfiguraionBody = new String(Files.readAllBytes(mergedConfiguraionPath)); OverrideAlgorithm merger = new DefaultOverrideAlgorithm(); BaseData mergeResult = merger.override(baseData, configurations); GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(baseSchemaString.getRawSchema()); GenericRecord mergeResultGenericRecord = converter.decodeJson(mergeResult.getRawData()); GenericRecord expectedMergedConfiguraionGenericRecord = converter.decodeJson(mergedConfiguraionBody); Assert.assertTrue(mergeResultGenericRecord.equals(expectedMergedConfiguraionGenericRecord)); }