@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"); }
/** * Resolve. * * @param name the parent name * @param namespace the namespace * @param childName the child name * @return the array merge strategy * @throws OverrideException the merge exception */ public ArrayOverrideStrategy resolve(String name, String namespace, String childName) throws OverrideException { Schema schemaForParent = schemaTypes.get(namespace + "." + name); if (schemaForParent == null) { throw new OverrideException(MessageFormat.format( "Failed to find Schema with Name ''{0}'' and namespace ''{1}''", name, namespace)); } String mergeStrategyName = findMergeStrategy(schemaForParent, childName); ArrayOverrideStrategy mergeStrategy = null; if (mergeStrategyName != null) { mergeStrategy = ArrayOverrideStrategy.getByName(mergeStrategyName); } if (mergeStrategy == null) { mergeStrategy = ArrayOverrideStrategy.REPLACE; } return mergeStrategy; }
ArrayOverrideStrategyResolver arrayMergeStrategyResolver = new ArrayOverrideStrategyResolver( baseSchemaParser.getTypes()); for (OverrideData entry : overrideConfigurations) {
mergeStrategy = arrayMergeStrategyResolver.resolve( sourceRootSchema.getName(), sourceRootSchema.getNamespace(), sourceChildname);
@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); } }