+ private void resolveAugment(
+ final Map<String, TreeMap<Date, ModuleBuilder>> modules,
+ final ModuleBuilder module) {
+ if (module.getAugmentsResolved() < module.getAddedAugments().size()) {
+ for (AugmentationSchemaBuilder augmentBuilder : module
+ .getAddedAugments()) {
+ final SchemaPath augmentTargetSchemaPath = augmentBuilder
+ .getTargetPath();
+ final List<QName> path = augmentTargetSchemaPath.getPath();
+
+ int i = 0;
+ final QName qname = path.get(i);
+ String prefix = qname.getPrefix();
+ if (prefix == null) {
+ prefix = module.getPrefix();
+ }
+
+ DataSchemaNodeBuilder currentParent = null;
+ final ModuleBuilder dependentModule = findDependentModule(
+ modules, module, prefix);
+ for (DataSchemaNodeBuilder child : dependentModule
+ .getChildNodes()) {
+ final QName childQName = child.getQName();
+ if (childQName.getLocalName().equals(qname.getLocalName())) {
+ currentParent = child;
+ i++;
+ break;
+ }
+ }
+
+ for (; i < path.size(); i++) {
+ final QName currentQName = path.get(i);
+ DataSchemaNodeBuilder newParent = null;
+ for (DataSchemaNodeBuilder child : ((ChildNodeBuilder) currentParent)
+ .getChildNodes()) {
+ final QName childQName = child.getQName();
+ if (childQName.getLocalName().equals(
+ currentQName.getLocalName())) {
+ newParent = child;
+ break;
+ }
+ }
+ if (newParent == null) {
+ break; // node not found, quit search
+ } else {
+ currentParent = newParent;
+ }
+ }
+
+ final QName currentQName = currentParent.getQName();
+ final QName lastAugmentPathElement = path.get(path.size() - 1);
+ if (currentQName.getLocalName().equals(
+ lastAugmentPathElement.getLocalName())) {
+ ParserUtils.fillAugmentTarget(augmentBuilder,
+ (ChildNodeBuilder) currentParent);
+ ((AugmentationTargetBuilder) currentParent)
+ .addAugmentation(augmentBuilder);
+ module.augmentResolved();
+ }
+ }