Propagate EffectiveModelContext for codegen plugins 46/86546/2
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 22 Dec 2019 13:07:51 +0000 (14:07 +0100)
committerRobert Varga <nite@hq.sk>
Mon, 23 Dec 2019 16:48:34 +0000 (16:48 +0000)
yang-maven-plugin infra is giving us EffectiveModelContext, which
allows us to eventually switch code generation to work on
EffectiveStatements rather than on SchemaNodes. This propagates
EffectiveModelContext closer to actual users.

Change-Id: I90dd2aa983e05748c0ac838731580adbe5055003
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java
binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend
binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoTemplate.xtend
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java

index 98036d61654578937dacdd08c60e2e03a9b3fdc5..5a0aa38ffc58f27e592803613e89e4fbc597ebd4 100644 (file)
@@ -40,7 +40,6 @@ import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
 import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware;
 import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
@@ -127,7 +126,7 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
     }
 
     private Collection<? extends File> generateModuleInfos(final File outputBaseDir, final Set<Module> yangModules,
-            final SchemaContext context, final Function<Module, Optional<String>> moduleResourcePathResolver) {
+            final EffectiveModelContext context, final Function<Module, Optional<String>> moduleResourcePathResolver) {
         Builder<File> result = ImmutableSet.builder();
         Builder<String> bindingProviders = ImmutableSet.builder();
         for (Module module : yangModules) {
@@ -193,8 +192,8 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
         this.buildContext = requireNonNull(buildContext);
     }
 
-    private Set<File> generateYangModuleInfo(final File outputBaseDir, final Module module, final SchemaContext ctx,
-            final Function<Module, Optional<String>> moduleResourcePathResolver,
+    private Set<File> generateYangModuleInfo(final File outputBaseDir, final Module module,
+            final EffectiveModelContext ctx, final Function<Module, Optional<String>> moduleResourcePathResolver,
             final Builder<String> providerSourceSet) {
         Builder<File> generatedFiles = ImmutableSet.builder();
 
index 6a3bbf8517ba35fe31fa87456f32f956a80714fc..dfe3adc4a4dd02d97a14c4d86fa18d3b16b84b49 100644 (file)
@@ -34,6 +34,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraintAware
 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition
@@ -42,7 +43,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode
 import org.opendaylight.yangtools.yang.model.api.Module
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition
-import org.opendaylight.yangtools.yang.model.api.SchemaContext
 import org.opendaylight.yangtools.yang.model.api.SchemaNode
 import org.opendaylight.yangtools.yang.model.api.SchemaPath
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition
@@ -71,14 +71,14 @@ class GeneratorImpl {
 
     val Map<String, String> imports = new HashMap();
     var Module currentModule;
-    var SchemaContext ctx;
+    var EffectiveModelContext ctx;
     var File path
 
     StringBuilder augmentChildNodesAsString
 
     DataSchemaNode lastNodeInTargetPath = null
 
-    def generate(BuildContext buildContext, SchemaContext context, File targetPath, Set<Module> modulesToGen)
+    def generate(BuildContext buildContext, EffectiveModelContext context, File targetPath, Set<Module> modulesToGen)
             throws IOException {
         path = targetPath;
         path.mkdirs();
@@ -89,7 +89,7 @@ class GeneratorImpl {
         return it;
     }
 
-    def generateDocumentation(BuildContext buildContext, Module module, SchemaContext ctx) {
+    def generateDocumentation(BuildContext buildContext, Module module, EffectiveModelContext ctx) {
         val destination = new File(path, '''«module.name».html''')
         this.ctx = ctx;
         module.imports.forEach[importModule | this.imports.put(importModule.prefix, importModule.moduleName)]
@@ -106,7 +106,7 @@ class GeneratorImpl {
         return destination;
     }
 
-    def generate(Module module, SchemaContext ctx) '''
+    def generate(Module module, EffectiveModelContext ctx) '''
         <!DOCTYPE html>
         <html lang="en">
           <head>
@@ -118,7 +118,7 @@ class GeneratorImpl {
         </html>
     '''
 
-    def body(Module module, SchemaContext ctx) '''
+    def body(Module module, EffectiveModelContext ctx) '''
         «header(module)»
 
         «typeDefinitionsSummary(module)»
@@ -307,7 +307,7 @@ class GeneratorImpl {
         '''
     }
 
-    def augmentations(Module module, SchemaContext context) {
+    def augmentations(Module module, EffectiveModelContext context) {
         if (module.augmentations.empty) {
             return '';
         }
@@ -488,7 +488,7 @@ class GeneratorImpl {
         '''
     }
 
-    private def augmentationsSummary(Module module, SchemaContext context) {
+    private def augmentationsSummary(Module module, EffectiveModelContext context) {
         if (module.augmentations.empty) {
             return '';
         }
@@ -1209,7 +1209,7 @@ class GeneratorImpl {
         return it.toString;
     }
 
-    private def String schemaPathToString(Module module, SchemaPath schemaPath, SchemaContext ctx, DataNodeContainer dataNode) {
+    private def String schemaPathToString(Module module, SchemaPath schemaPath, EffectiveModelContext ctx, DataNodeContainer dataNode) {
             val List<QName> path = Lists.newArrayList(schemaPath.pathFromRoot);
         val StringBuilder pathString = new StringBuilder()
         if (schemaPath.absolute) {
index d85916982c11fcaacdf30a502939c9801999bbfe..7cbdcec13bca9f4d07fdc8405f03062031bd9781 100644 (file)
@@ -19,10 +19,10 @@ import java.util.Set
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode
 import org.opendaylight.yangtools.yang.model.api.Module
-import org.opendaylight.yangtools.yang.model.api.SchemaContext
 import org.sonatype.plexus.build.incremental.BuildContext
 
 class WadlRestconfGenerator {
@@ -30,7 +30,7 @@ class WadlRestconfGenerator {
     static val PATH_DELIMETER = '/'
     val BuildContext buildContext;
     val File path
-    var SchemaContext context;
+    var EffectiveModelContext context;
     var List<DataSchemaNode> configData;
     var List<DataSchemaNode> operationalData;
     var Module module;
@@ -42,7 +42,7 @@ class WadlRestconfGenerator {
         this.buildContext = buildContext
     }
 
-    def generate(SchemaContext context, Set<Module> modules) {
+    def generate(EffectiveModelContext context, Set<Module> modules) {
         val result = new HashSet;
         this.context = context
         for (module : modules) {
index e27d7cdec40739144a2e14a38e251c9d6c01f110..4b73b6a4f413a71d00dbed27b720e4178adb83de 100644 (file)
@@ -25,8 +25,8 @@ import org.eclipse.xtend.lib.annotations.Accessors
 import org.gaul.modernizer_maven_annotations.SuppressModernizer
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo
 import org.opendaylight.yangtools.yang.common.Revision
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext
 import org.opendaylight.yangtools.yang.model.api.Module
-import org.opendaylight.yangtools.yang.model.api.SchemaContext
 
 /**
  * Template for {@link YangModuleInfo} implementation for a particular module. Aside from fulfilling that contract,
@@ -62,7 +62,7 @@ class YangModuleInfoTemplate {
     '''
 
     val Module module
-    val SchemaContext ctx
+    val EffectiveModelContext ctx
     val Function<Module, Optional<String>> moduleFilePathResolver
 
     var importedTypes = CORE_IMPORT_STR
@@ -73,7 +73,7 @@ class YangModuleInfoTemplate {
     @Accessors
     val String modelBindingProviderName
 
-    new(Module module, SchemaContext ctx, Function<Module, Optional<String>> moduleFilePathResolver) {
+    new(Module module, EffectiveModelContext ctx, Function<Module, Optional<String>> moduleFilePathResolver) {
         Preconditions.checkArgument(module !== null, "Module must not be null.")
         this.module = module
         this.ctx = ctx
index c0ca8d4263e36be239ad5250d2a20d9cc45f3150..00e6a43fa02a8261d4516a8a2fa65892b7e5368e 100644 (file)
@@ -28,8 +28,8 @@ import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile;
 import org.opendaylight.mdsal.binding.java.api.generator.YangModuleInfoTemplate;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public abstract class BaseCompilationTest {
@@ -66,7 +66,7 @@ public abstract class BaseCompilationTest {
     protected final List<Type> generateTestSources(final String resourceDirPath, final File sourcesOutputDir)
             throws IOException, URISyntaxException {
         final List<File> sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath);
-        final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
+        final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
         generateTestSources(types, sourcesOutputDir);