- /**
- * Traverse through modules and resolve their deviation statements with
- * given context.
- *
- * @param modules
- * all loaded modules
- * @param context
- * already resolved context
- */
- private void resolveDeviationsWithContext(final Map<String, TreeMap<Date, ModuleBuilder>> modules,
- final SchemaContext context) {
- for (Map.Entry<String, TreeMap<Date, ModuleBuilder>> entry : modules.entrySet()) {
- for (Map.Entry<Date, ModuleBuilder> inner : entry.getValue().entrySet()) {
- ModuleBuilder b = inner.getValue();
- resolveDeviationWithContext(modules, b, context);
- }
- }
- }
-
- /**
- * Traverse through module and resolve its deviation statements with given
- * context.
- *
- * @param modules
- * all loaded modules
- * @param module
- * module in which resolve deviations
- * @param context
- * already resolved context
- */
- private void resolveDeviationWithContext(final Map<String, TreeMap<Date, ModuleBuilder>> modules,
- final ModuleBuilder module, final SchemaContext context) {
- for (DeviationBuilder dev : module.getDeviationBuilders()) {
- int line = dev.getLine();
- SchemaPath targetPath = dev.getTargetPath();
- List<QName> path = targetPath.getPath();
- QName q0 = path.get(0);
- String prefix = q0.getPrefix();
- if (prefix == null) {
- prefix = module.getPrefix();
- }
-
- ModuleBuilder dependentModuleBuilder = findModuleFromBuilders(modules, module, prefix, line);
- if (dependentModuleBuilder == null) {
- Object currentParent = findModuleFromContext(context, module, prefix, line);
-
- for (QName q : path) {
- if (currentParent == null) {
- throw new YangParseException(module.getName(), line, FAIL_DEVIATION_TARGET);
- }
- String name = q.getLocalName();
- if (currentParent instanceof DataNodeContainer) {
- currentParent = ((DataNodeContainer) currentParent).getDataChildByName(name);
- }
- }
-
- if (currentParent == null) {
- throw new YangParseException(module.getName(), line, FAIL_DEVIATION_TARGET);
- }
- if (currentParent instanceof SchemaNode) {
- dev.setTargetPath(((SchemaNode) currentParent).getPath());
- }
-
- } else {
- processDeviation(dev, dependentModuleBuilder, path, module);
- }
- }
- }
-