Merge changes I296b2805,Iee01f474,I13dab228
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ModuleBuilder.java
index db1babd6dc08ef8242c4aa37c81232224ebbc8e8..5c4afe6ae17b49e99535784d7e4ab2a74c28f26a 100644 (file)
@@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 
 import com.google.common.base.Preconditions;
 import com.google.common.io.ByteSource;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -24,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
-
 import org.apache.commons.io.IOUtils;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
@@ -81,6 +79,10 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
     final Map<String, ModuleImport> imports = new HashMap<>();
     final Map<String, ModuleBuilder> importedModules = new HashMap<>();
 
+    final Set<ModuleBuilder> addedSubmodules = new HashSet<>();
+    final Set<Module> submodules = new HashSet<>();
+    final Map<String, Date> includedModules = new HashMap<>();
+
     private final Set<AugmentationSchema> augments = new LinkedHashSet<>();
     private final List<AugmentationSchemaBuilder> augmentBuilders = new ArrayList<>();
     private final List<AugmentationSchemaBuilder> allAugments = new ArrayList<>();
@@ -171,6 +173,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
 
         buildChildren();
 
+        // SUBMODULES
+        for (ModuleBuilder submodule : addedSubmodules) {
+            submodules.add(submodule.build());
+        }
+
         // FEATURES
         for (FeatureBuilder fb : addedFeatures) {
             features.add(fb.build());
@@ -366,6 +373,18 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
         importedModules.put(prefix, module);
     }
 
+    public Map<String, Date> getIncludedModules() {
+        return includedModules;
+    }
+
+    public void addInclude(final String name, final Date revision) {
+        includedModules.put(name, revision);
+    }
+
+    public void addSubmodule(final ModuleBuilder submodule) {
+        addedSubmodules.add(submodule);
+    }
+
     protected String getSource() {
         return source;
     }
@@ -528,9 +547,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
         return builder;
     }
 
-    public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, final int order) {
+    public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr,
+            final SchemaPath targetPath, final int order) {
         checkNotSealed();
-        final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, order);
+        final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr,
+                targetPath, order);
 
         Builder parent = getActualNode();
         builder.setParent(parent);
@@ -562,9 +583,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
         return builder;
     }
 
-    public UsesNodeBuilder addUsesNode(final int line, final String groupingPathStr) {
+    public UsesNodeBuilder addUsesNode(final int line, final SchemaPath grouping) {
         checkNotSealed();
-        final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, groupingPathStr);
+        final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, grouping);
 
         Builder parent = getActualNode();
         usesBuilder.setParent(parent);
@@ -573,7 +594,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
             addUsesNode(usesBuilder);
         } else {
             if (!(parent instanceof DataNodeContainerBuilder)) {
-                throw new YangParseException(name, line, "Unresolved parent of uses '" + groupingPathStr + "'.");
+                throw new YangParseException(name, line, "Unresolved parent of uses '" + grouping + "'.");
             }
             ((DataNodeContainerBuilder) parent).addUsesNode(usesBuilder);
         }
@@ -826,7 +847,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im
         }
     }
 
-    public DeviationBuilder addDeviation(final int line, final String targetPath) {
+    public DeviationBuilder addDeviation(final int line, final SchemaPath targetPath) {
         Builder parent = getActualNode();
         if (!(parent.equals(this))) {
             throw new YangParseException(name, line, "deviation can be defined only in module or submodule");