@Override public final GenericRecord getConfigurationByName(String name, String namespace) throws ConfigurationGenerationException { if (name == null || namespace == null) { return null; } if (processedTypes.containsKey(namespace + "." + name)) { return processedTypes.get(namespace + "." + name); } Schema schema = avroSchemaParser.getTypes().get(namespace + "." + name); if (schema != null) { return (GenericRecord) processType(schema, null); } return null; } }
private Schema getSchemaByName(String fullName) { return baseSchemaParser.getTypes().get(fullName); }
final public Schema ImportSchema() throws ParseException { String importFile; jj_consume_token(SCHEMA); importFile = JsonString(); jj_consume_token(SEMICOLON); try { Parser parser = new Schema.Parser(); parser.addTypes(names); // inherit names InputStream stream = findFile(importFile).openStream(); try { Schema value = parser.parse(stream); names = parser.getTypes(); // update names {if (true) return value;} } finally { stream.close(); } } catch (IOException e) { {if (true) throw error("Error importing "+importFile+": "+e, token);} } throw new Error("Missing return statement in function"); }
Map<String, Schema> typesDefinedInFile = asymmetricDifference(parser.getTypes(), parserTypes); processingState.processTypeDefinitions(fileState, typesDefinedInFile); if (getLogger().isDebugEnabled()) {
public static String combineSchemas(File[] sources, String topLevelType) { try { Schema.Parser parser = new Schema.Parser(); for (File source : sources) { parser.parse(source); } Schema top = parser.getTypes().get(topLevelType); if (top == null) { throw new SchemagenException("Could not find top level type '"+topLevelType+"'."); } return top.toString(true); } catch (Exception ex) { throw new SchemagenException("An error occurred while compiling.", ex); } } }
Schema avroSchema = schemaParser.parse(configuraionSchema.getRawSchema()); GenericRecord recordNew1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew1.put("intField", 4); GenericFixed uuidNew1 = AvroUtils.generateUuidObject(); recordNew1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordNew2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew2.put("intField", 5); GenericFixed uuidNew2 = AvroUtils.generateUuidObject(); rootNew.put(CommonConstants.UUID_FIELD, uuidNew2); GenericRecord recordOld1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld1.put("intField", 6); recordOld1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordOld2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld2.put("intField", 7); GenericFixed uuidOld2 = AvroUtils.generateUuidObject();
Schema avroSchema = schemaParser.parse(configuraionSchema.getRawSchema()); GenericRecord recordNew1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew1.put("intField", 4); GenericFixed uuidNew1 = AvroUtils.generateUuidObject(); recordNew1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordNew2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew2.put("intField", 5); GenericFixed uuidNew2 = AvroUtils.generateUuidObject(); rootNew.put("complexArrayField", arrayNew); GenericRecord recordOld1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld1.put("intField", 6); recordOld1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordOld2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld2.put("intField", 7); GenericFixed uuidOld2 = AvroUtils.generateUuidObject();
baseSchemaParser.getTypes()); for (OverrideData entry : overrideConfigurations) { String configurationToApply = entry.getRawData();
Schema avroSchema = schemaParser.parse(configuraionSchema.getRawSchema()); GenericRecord recordNew1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew1.put("intField", 4); GenericFixed uuidNew1 = AvroUtils.generateUuidObject(); recordNew1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordNew2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew2.put("intField", 5); recordNew2.put(CommonConstants.UUID_FIELD, uuidNew1); rootNew.put("complexArrayField", arrayNew); GenericRecord recordOld1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld1.put("intField", 6); recordOld1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord recordOld2 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld2.put("intField", 7); GenericFixed uuidOld2 = AvroUtils.generateUuidObject();
@Test public void testValidationOfComplexTypes() throws Exception { // Read Configuration Schema Path schemaPath = Paths.get(Thread.currentThread().getContextClassLoader().getResource("generation/simpleComplexSchema.json").toURI()); BaseSchema configuraionSchema = new BaseSchema(new String(Files.readAllBytes(schemaPath))); Schema.Parser schemaParser = new Schema.Parser(); Schema avroSchema = schemaParser.parse(configuraionSchema.getRawSchema()); GenericRecord recordNew1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew1.put("intField", 4); GenericFixed uuidNew1 = AvroUtils.generateUuidObject(); recordNew1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord rootNew = new GenericData.Record(avroSchema); rootNew.put("recordField", recordNew1); GenericRecord recordOld1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordOld1.put("intField", 6); recordOld1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord rootOld = new GenericData.Record(avroSchema); rootOld.put("recordField", recordOld1); rootOld.put(CommonConstants.UUID_FIELD, AvroUtils.generateUuidObject()); GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(avroSchema); String configurationBodyNew = converter.encodeToJson(rootNew); String configurationBodyOld = converter.encodeToJson(rootOld); DefaultUuidValidator uuidGenerator = new DefaultUuidValidator(configuraionSchema, new BaseDataFactory()); KaaData processedConfigurationBody = uuidGenerator.validateUuidFields(rootNew, rootOld); GenericRecord processedConfiguration = converter.decodeJson(processedConfigurationBody.getRawData()); GenericRecord processedRecord = (GenericRecord) processedConfiguration.get("recordField"); Assert.assertEquals(uuidNew1, processedRecord.get(CommonConstants.UUID_FIELD)); Assert.assertNotNull(processedConfiguration.get(CommonConstants.UUID_FIELD)); }
@Test public void testValidationOfComplexWithoutOldConfiguration() throws Exception { // Read Configuration Schema Path schemaPath = Paths.get(Thread.currentThread().getContextClassLoader().getResource("generation/simpleComplexSchema.json").toURI()); BaseSchema configuraionSchema = new BaseSchema(new String(Files.readAllBytes(schemaPath))); Schema.Parser schemaParser = new Schema.Parser(); Schema avroSchema = schemaParser.parse(configuraionSchema.getRawSchema()); GenericRecord recordNew1 = new GenericData.Record(schemaParser.getTypes().get("org.kaaproject.recordT")); recordNew1.put("intField", 4); GenericFixed uuidNew1 = AvroUtils.generateUuidObject(); recordNew1.put(CommonConstants.UUID_FIELD, uuidNew1); GenericRecord rootNew = new GenericData.Record(avroSchema); rootNew.put("recordField", recordNew1); GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(avroSchema); String configurationBodyNew = converter.encodeToJson(rootNew); DefaultUuidValidator uuidGenerator = new DefaultUuidValidator(configuraionSchema, new BaseDataFactory()); KaaData processedConfigurationBody = uuidGenerator.validateUuidFields(rootNew, null); GenericRecord processedConfiguration = converter.decodeJson(processedConfigurationBody.getRawData()); GenericRecord processedRecord = (GenericRecord) processedConfiguration.get("recordField"); Assert.assertNotEquals(uuidNew1, processedRecord.get(CommonConstants.UUID_FIELD)); Assert.assertNotNull(processedConfiguration.get(CommonConstants.UUID_FIELD)); }
@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); } }
@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(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"); }