- /**
- * Traverse through modules and resolve their deviation statements.
- *
- * @param modules
- * all loaded modules
- */
- private void resolveDeviations(final Map<String, TreeMap<Date, ModuleBuilder>> modules) {
- for (Map.Entry<String, TreeMap<Date, ModuleBuilder>> entry : modules.entrySet()) {
- for (Map.Entry<Date, ModuleBuilder> inner : entry.getValue().entrySet()) {
- ModuleBuilder b = inner.getValue();
- resolveDeviation(modules, b);
- }
- }
- }
-
- /**
- * Traverse through module and resolve its deviation statements.
- *
- * @param modules
- * all loaded modules
- * @param module
- * module in which resolve deviations
- */
- private void resolveDeviation(final Map<String, TreeMap<Date, ModuleBuilder>> modules, final ModuleBuilder module) {
- for (DeviationBuilder dev : module.getDeviationBuilders()) {
- SchemaPath targetPath = dev.getTargetPath();
- Iterable<QName> path = targetPath.getPathFromRoot();
- QName q0 = path.iterator().next();
- String prefix = q0.getPrefix();
- if (prefix == null) {
- prefix = module.getPrefix();
- }
-
- ModuleBuilder dependentModuleBuilder = BuilderUtils.getModuleByPrefix(module, prefix);
- processDeviation(dev, dependentModuleBuilder, path, module);
- }
- }
-
- /**
- * Correct deviation target path in deviation builder.
- *
- * @param dev
- * deviation
- * @param dependentModuleBuilder
- * module containing deviation target
- * @param path
- * current deviation target path
- * @param module
- * current module
- */
- private void processDeviation(final DeviationBuilder dev, final ModuleBuilder dependentModuleBuilder,
- final Iterable<QName> path, final ModuleBuilder module) {
- final int line = dev.getLine();
- Builder currentParent = dependentModuleBuilder;
-
- for (QName q : path) {
- if (currentParent == null) {
- throw new YangParseException(module.getName(), line, FAIL_DEVIATION_TARGET);
- }
- String name = q.getLocalName();
- if (currentParent instanceof DataNodeContainerBuilder) {
- currentParent = ((DataNodeContainerBuilder) currentParent).getDataChildByName(name);
- }
- }
-
- if (!(currentParent instanceof SchemaNodeBuilder)) {
- throw new YangParseException(module.getName(), line, FAIL_DEVIATION_TARGET);
- }
- dev.setTargetPath(((SchemaNodeBuilder) currentParent).getPath());
- }
-