From: Robert Varga Date: Thu, 23 Jan 2020 07:01:07 +0000 (+0100) Subject: Bump yangtools to 5.0.0-SNAPSHOT X-Git-Tag: v6.0.0~136 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=6cea51a1b795a222bb611b7a9501d1bc0308c3b8;p=mdsal.git Bump yangtools to 5.0.0-SNAPSHOT This adopts yangtools-5.0.0 at snapshots, so we can shake out integation issues and base our development on yt-5.0.0 changes. This forces us to refactor mdsal-binding-dom-codec-osgi, which is done in this patch. We adopt OSGi DS for tracking services. JIRA: MDSAL-392 Change-Id: Ib5f7cb9817869ca5fc9053af4620d9536a27dcbf Signed-off-by: Robert Varga --- diff --git a/binding/binding-parent/pom.xml b/binding/binding-parent/pom.xml index fef8f01402..068431a9e6 100644 --- a/binding/binding-parent/pom.xml +++ b/binding/binding-parent/pom.xml @@ -58,7 +58,7 @@ org.opendaylight.yangtools yang-maven-plugin - 4.0.7 + 5.0.0-SNAPSHOT org.opendaylight.mdsal diff --git a/binding/maven-sal-api-gen-plugin/pom.xml b/binding/maven-sal-api-gen-plugin/pom.xml index 381b9eedc8..36a01e5b48 100644 --- a/binding/maven-sal-api-gen-plugin/pom.xml +++ b/binding/maven-sal-api-gen-plugin/pom.xml @@ -39,7 +39,7 @@ org.opendaylight.yangtools yangtools-artifacts - 4.0.7 + 5.0.0-SNAPSHOT pom import diff --git a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend index 06d55edf78..e8fc818c11 100644 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend +++ b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend @@ -7,8 +7,6 @@ */ package org.opendaylight.mdsal.binding.yang.unified.doc.generator -import com.google.common.collect.Iterables -import com.google.common.collect.Lists import java.io.BufferedWriter import java.io.File import java.io.IOException @@ -47,6 +45,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode import org.opendaylight.yangtools.yang.model.api.SchemaPath import org.opendaylight.yangtools.yang.model.api.TypeDefinition import org.opendaylight.yangtools.yang.model.api.UsesNode +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition @@ -318,7 +318,7 @@ class GeneratorImpl { «FOR augment : module.augmentations»
  • - Target [«typeAnchorLink(augment.targetPath,schemaPathToString(module, augment.targetPath, context, augment))»]

    + Target [«typeAnchorLink(augment.targetPath.asSchemaPath, schemaPathToString(module, augment.targetPath, context, augment))»] «augment.description» Status: «strong(String.valueOf(augment.status))» «IF augment.reference !== null» @@ -346,9 +346,9 @@ class GeneratorImpl { return '' } - private def parseTargetPath(SchemaPath path) { - val List nodes = new ArrayList(); - for (QName pathElement : path.pathFromRoot) { + private def parseTargetPath(SchemaNodeIdentifier path) { + val nodes = new ArrayList(); + for (QName pathElement : path.nodeIdentifiers) { val module = ctx.findModule(pathElement.module) if (module.isPresent) { var foundNode = module.get.getDataChildByName(pathElement) @@ -368,7 +368,7 @@ class GeneratorImpl { lastNodeInTargetPath = nodes.get(nodes.size() - 1) } - val List targetPathNodes = new ArrayList(); + val targetPathNodes = new ArrayList(); targetPathNodes.add(lastNodeInTargetPath) return targetPathNodes @@ -435,10 +435,10 @@ class GeneratorImpl { } private def printChoiceNode(ChoiceSchemaNode child) { - val List cases = new ArrayList(child.cases.values); - if(!cases.empty) { + val cases = new ArrayList(child.cases) + if (!cases.empty) { val CaseSchemaNode aCase = cases.get(0) - for(caseChildNode : aCase.childNodes) + for (caseChildNode : aCase.childNodes) printAugmentedNode(caseChildNode) } } @@ -767,10 +767,10 @@ class GeneratorImpl { private def dispatch CharSequence tree(ChoiceSchemaNode node,YangInstanceIdentifier path) ''' «node.nodeName» (choice) - «casesTree(node.cases.values, path)» + «casesTree(node.cases, path)» ''' - def casesTree(Collection nodes, YangInstanceIdentifier path) ''' + def casesTree(Collection nodes, YangInstanceIdentifier path) '''
      «FOR node : nodes»
    • @@ -839,7 +839,7 @@ class GeneratorImpl { def String typeAnchorLink(SchemaPath path, CharSequence text) { if(path !== null) { - val lastElement = Iterables.getLast(path.pathFromRoot) + val lastElement = path.lastComponent val ns = lastElement.namespace if (ns == this.currentModule.namespace) { return '''«text»''' @@ -878,7 +878,7 @@ class GeneratorImpl { return ''' «printInfo(node, "choice")» «listItem("default case", node.defaultCase.map([ CaseSchemaNode n | n.getQName.localName]).orElse(null))» - «FOR caseNode : node.cases.values» + «FOR caseNode : node.cases» «caseNode.printSchemaNodeInfo» «ENDFOR»
    @@ -934,7 +934,7 @@ class GeneratorImpl { def CharSequence printUses(UsesNode usesNode) { return ''' - «strong(listItem("uses", typeAnchorLink(usesNode.groupingPath, usesNode.groupingPath.pathTowardsRoot.iterator.next.localName)))» + «strong(listItem("uses", typeAnchorLink(usesNode.sourceGrouping.path, usesNode.sourceGrouping.path.pathTowardsRoot.iterator.next.localName)))»
    • refines:
        @@ -944,7 +944,7 @@ class GeneratorImpl {
    • «FOR augment : usesNode.augmentations» - «typeAnchorLink(augment.targetPath,schemaPathToString(currentModule, augment.targetPath, ctx, augment))» + «typeAnchorLink(augment.targetPath.asSchemaPath, schemaPathToString(currentModule, augment.targetPath, ctx, augment))» «ENDFOR»
    ''' @@ -1092,7 +1092,7 @@ class GeneratorImpl { ''' private def dispatch CharSequence printInfo(ChoiceSchemaNode node, int level, YangInstanceIdentifier path) ''' - «val Set choiceCases = new HashSet(node.cases.values)» + «val Set choiceCases = new HashSet(node.cases)» «choiceCases.printChildren(level, path)» ''' @@ -1208,10 +1208,11 @@ class GeneratorImpl { return it.toString; } - private def String schemaPathToString(Module module, SchemaPath schemaPath, EffectiveModelContext ctx, DataNodeContainer dataNode) { - val List path = Lists.newArrayList(schemaPath.pathFromRoot); + private def String schemaPathToString(Module module, SchemaNodeIdentifier schemaPath, EffectiveModelContext ctx, + DataNodeContainer dataNode) { + val path = schemaPath.nodeIdentifiers val StringBuilder pathString = new StringBuilder() - if (schemaPath.absolute) { + if (schemaPath instanceof Absolute) { pathString.append('/') } @@ -1449,7 +1450,7 @@ class GeneratorImpl { result.append('/') } if (path !== null && !path.empty) { - val List actual = new ArrayList() + val actual = new ArrayList() var i = 0; for (pathElement : path) { actual.add(pathElement) @@ -1474,15 +1475,11 @@ class GeneratorImpl { ''' private def dispatch isAddedBy(SchemaNode node) { - return false; + return false } private def dispatch isAddedBy(DataSchemaNode node) { - if (node.augmenting || node.addedByUses) { - return true - } else { - return false; - } + return node.augmenting || node.addedByUses } private def dispatch nodeName(SchemaNode node) ''' diff --git a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend index 7cbdcec13b..b9237e0bab 100644 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend +++ b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend @@ -13,9 +13,9 @@ import java.io.OutputStreamWriter import java.net.URI import java.nio.charset.StandardCharsets import java.util.ArrayList +import java.util.Collection import java.util.HashSet import java.util.List -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 @@ -42,7 +42,7 @@ class WadlRestconfGenerator { this.buildContext = buildContext } - def generate(EffectiveModelContext context, Set modules) { + def generate(EffectiveModelContext context, Collection modules) { val result = new HashSet; this.context = context for (module : modules) { diff --git a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/DocGenTest.java b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/DocGenTest.java index 6d94bdea4d..9e54aebdaf 100644 --- a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/DocGenTest.java +++ b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/DocGenTest.java @@ -23,7 +23,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.sonatype.plexus.build.incremental.DefaultBuildContext; @@ -51,11 +50,10 @@ public class DocGenTest { public void testListGeneration() throws Exception { final List sourceFiles = getSourceFiles("/doc-gen"); final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - final Set modules = context.getModules(); final DocumentationGeneratorImpl generator = new DocumentationGeneratorImpl(); generator.setBuildContext(new DefaultBuildContext()); - Collection generatedFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modules, - module -> Optional.empty()); + Collection generatedFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, + Set.copyOf(context.getModules()), module -> Optional.empty()); assertEquals(4, generatedFiles.size()); } diff --git a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java index daa07c673d..cee5dfd251 100644 --- a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java +++ b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java @@ -148,7 +148,7 @@ public class YangModuleInfoCompilationTest { final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); CodeGeneratorImpl codegen = new CodeGeneratorImpl(); codegen.setBuildContext(new DefaultBuildContext()); - codegen.generateSources(context, sourcesOutputDir, context.getModules(), + codegen.generateSources(context, sourcesOutputDir, Set.copyOf(context.getModules()), module -> Optional.of(resourceDirPath + File.separator + module.getName() + YangConstants.RFC6020_YANG_FILE_EXTENSION)); } @@ -162,7 +162,7 @@ public class YangModuleInfoCompilationTest { codegen.setResourceBaseDir(null); codegen.setMavenProject(new MavenProject()); codegen.setAdditionalConfig(ImmutableMap.of("test", "test")); - Collection files = codegen.generateSources(context, null, context.getModules(), + Collection files = codegen.generateSources(context, null, Set.copyOf(context.getModules()), module -> Optional.of(module.getName())); assertFalse(files.isEmpty()); files.forEach(file -> { diff --git a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/wadl/generator/maven/WadlGenTest.java b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/wadl/generator/maven/WadlGenTest.java index d19d5e20c2..ae95922cfa 100644 --- a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/wadl/generator/maven/WadlGenTest.java +++ b/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/wadl/generator/maven/WadlGenTest.java @@ -24,7 +24,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.sonatype.plexus.build.incremental.DefaultBuildContext; @@ -53,11 +52,10 @@ public class WadlGenTest { public void testListGeneration() throws Exception { final List sourceFiles = getSourceFiles("/wadl-gen"); final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - final Set modules = context.getModules(); final WadlGenerator generator = new WadlGenerator(); generator.setBuildContext(new DefaultBuildContext()); - Collection generatedWadlFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modules, - module -> Optional.empty()); + Collection generatedWadlFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, + Set.copyOf(context.getModules()), module -> Optional.empty()); assertEquals(3, generatedWadlFiles.size()); generatedWadlFiles.forEach(file -> assertTrue(file.exists())); } @@ -66,10 +64,9 @@ public class WadlGenTest { public void testListGenerationWithoutPath() throws Exception { final List sourceFiles = getSourceFiles("/wadl-gen"); final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - final Set modules = context.getModules(); final WadlGenerator generator = new WadlGenerator(); generator.setBuildContext(new DefaultBuildContext()); - Collection generatedWadlFiles = generator.generateSources(context, null, modules, + Collection generatedWadlFiles = generator.generateSources(context, null, Set.copyOf(context.getModules()), module -> Optional.empty()); assertEquals(3, generatedWadlFiles.size()); generatedWadlFiles.forEach(file -> { diff --git a/binding/mdsal-binding-dom-codec-osgi/pom.xml b/binding/mdsal-binding-dom-codec-osgi/pom.xml index 104a21ccc9..7311fa5761 100644 --- a/binding/mdsal-binding-dom-codec-osgi/pom.xml +++ b/binding/mdsal-binding-dom-codec-osgi/pom.xml @@ -24,13 +24,15 @@ org.opendaylight.mdsal mdsal-binding-dom-codec + + - org.opendaylight.mdsal mdsal-binding-generator-impl + org.opendaylight.mdsal mdsal-binding-runtime-spi @@ -39,6 +41,10 @@ org.osgi org.osgi.core + + org.osgi + osgi.cmpn + org.opendaylight.yangtools @@ -59,7 +65,6 @@ ${project.groupId}.${project.artifactId} - org.opendaylight.mdsal.binding.dom.codec.osgi.impl.Activator diff --git a/binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/Activator.java b/binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/BindingClassLoadingStrategy.java similarity index 50% rename from binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/Activator.java rename to binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/BindingClassLoadingStrategy.java index 98e9735d39..2d5e3e2494 100644 --- a/binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/Activator.java +++ b/binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/BindingClassLoadingStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved. + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -7,29 +7,33 @@ */ package org.opendaylight.mdsal.binding.dom.codec.osgi.impl; -import java.util.ArrayList; -import java.util.List; import org.opendaylight.binding.runtime.api.ClassLoadingStrategy; import org.opendaylight.binding.runtime.spi.GeneratedClassLoadingStrategy; import org.opendaylight.binding.runtime.spi.ModuleInfoBackedContext; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class Activator implements BundleActivator { - private static final Logger LOG = LoggerFactory.getLogger(Activator.class); +@Component(immediate = true) +public final class BindingClassLoadingStrategy implements ClassLoadingStrategy { + private static final Logger LOG = LoggerFactory.getLogger(BindingClassLoadingStrategy.class); - private final List> registrations = new ArrayList<>(2); + @Reference + YangParserFactory factory = null; private ModuleInfoBundleTracker bundleTracker = null; + private ModuleInfoBackedContext moduleInfoBackedContext = null; - @Override - public void start(final BundleContext context) { + @Activate + void activate(final ComponentContext ctx) { LOG.info("Binding-DOM codec starting"); - final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create( + moduleInfoBackedContext = ModuleInfoBackedContext.create("binding-dom-codec", factory, // FIXME: This is the fallback strategy, it should not be needed GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()); @@ -37,26 +41,24 @@ public final class Activator implements BundleActivator { moduleInfoBackedContext); LOG.debug("Starting Binding-DOM codec bundle tracker"); - bundleTracker = new ModuleInfoBundleTracker(context, registry); + bundleTracker = new ModuleInfoBundleTracker(ctx.getBundleContext(), registry); bundleTracker.open(); - LOG.debug("Registering Binding-DOM codec services"); - registrations.add(context.registerService(ClassLoadingStrategy.class, moduleInfoBackedContext, null)); - LOG.info("Binding-DOM codec started"); } - @Override - public void stop(final BundleContext context) { + @Deactivate + void deactivate() { LOG.info("Binding-DOM codec stopping"); - - LOG.debug("Unregistering Binding-DOM codec services"); - registrations.forEach(ServiceRegistration::unregister); - registrations.clear(); - LOG.debug("Stopping Binding-DOM codec bundle tracker"); bundleTracker.close(); - + moduleInfoBackedContext = null; + bundleTracker = null; LOG.info("Binding-DOM codec stopped"); } + + @Override + public Class loadClass(final String fullyQualifiedName) throws ClassNotFoundException { + return moduleInfoBackedContext.loadClass(fullyQualifiedName); + } } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java index 85c4d61001..73a52cfd12 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java @@ -146,7 +146,7 @@ final class DataContainerCodecPrototype implements NodeCon } else if (nodeSchema instanceof ChoiceSchemaNode) { boolean haveAddressable = false; boolean haveUnaddressable = false; - for (CaseSchemaNode child : ((ChoiceSchemaNode) nodeSchema).getCases().values()) { + for (CaseSchemaNode child : ((ChoiceSchemaNode) nodeSchema).getCases()) { switch (computeChildAddressabilitySummary(child)) { case ADDRESSABLE: haveAddressable = true; diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java index 7ecd4b1604..8246669480 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java @@ -120,6 +120,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; @@ -141,8 +142,8 @@ abstract class AbstractTypeGenerator { * Comparator based on augment target path. */ private static final Comparator AUGMENT_COMP = (o1, o2) -> { - final Iterator thisIt = o1.getTargetPath().getPathFromRoot().iterator(); - final Iterator otherIt = o2.getTargetPath().getPathFromRoot().iterator(); + final Iterator thisIt = o1.getTargetPath().getNodeIdentifiers().iterator(); + final Iterator otherIt = o2.getTargetPath().getNodeIdentifiers().iterator(); while (thisIt.hasNext()) { if (!otherIt.hasNext()) { @@ -478,7 +479,7 @@ abstract class AbstractTypeGenerator { private Optional findOrigAction(final DataNodeContainer parent, final ActionDefinition action) { for (UsesNode uses : parent.getUses()) { - final GroupingDefinition grp = findUsedGrouping(uses); + final GroupingDefinition grp = uses.getSourceGrouping(); final Optional found = grp.findAction(action.getQName()); if (found.isPresent()) { final ActionDefinition result = found.get(); @@ -823,10 +824,11 @@ abstract class AbstractTypeGenerator { "Augmentation Schema does not contain Target Path (Target Path is NULL)."); processUsesAugments(augSchema, context, false); - final SchemaPath targetPath = augSchema.getTargetPath(); + final SchemaNodeIdentifier targetPath = augSchema.getTargetPath(); SchemaNode targetSchemaNode = null; - targetSchemaNode = findDataSchemaNode(schemaContext, targetPath); + // FIXME: can we use findDataSchemaNode() instead? + targetSchemaNode = findDataSchemaNode(schemaContext, targetPath.getNodeIdentifiers()); if (targetSchemaNode instanceof DataSchemaNode && ((DataSchemaNode) targetSchemaNode).isAddedByUses()) { if (targetSchemaNode instanceof DerivableSchemaNode) { targetSchemaNode = ((DerivableSchemaNode) targetSchemaNode).getOriginal().orElse(null); @@ -864,7 +866,7 @@ abstract class AbstractTypeGenerator { "Augmentation Schema does not contain Target Path (Target Path is NULL)."); processUsesAugments(augSchema, context, inGrouping); - final SchemaPath targetPath = augSchema.getTargetPath(); + final SchemaNodeIdentifier targetPath = augSchema.getTargetPath(); final SchemaNode targetSchemaNode = findOriginalTargetFromGrouping(targetPath, usesNode); if (targetSchemaNode == null) { throw new IllegalArgumentException("augment target not found: " + targetPath); @@ -893,16 +895,6 @@ abstract class AbstractTypeGenerator { } } - private GroupingDefinition findUsedGrouping(final UsesNode uses) { - final SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, uses.getGroupingPath() - .getPathFromRoot()); - if (targetGrouping instanceof GroupingDefinition) { - return (GroupingDefinition) targetGrouping; - } - - throw new IllegalArgumentException("Failed to resolve used grouping for " + uses); - } - /** * Convenient method to find node added by uses statement. * @@ -910,11 +902,12 @@ abstract class AbstractTypeGenerator { * @param parentUsesNode parent of uses node * @return node from its original location in grouping */ - private DataSchemaNode findOriginalTargetFromGrouping(final SchemaPath targetPath, final UsesNode parentUsesNode) { - SchemaNode result = findUsedGrouping(parentUsesNode); - for (final QName node : targetPath.getPathFromRoot()) { + private static DataSchemaNode findOriginalTargetFromGrouping(final SchemaNodeIdentifier targetPath, + final UsesNode parentUsesNode) { + SchemaNode result = parentUsesNode.getSourceGrouping(); + for (final QName node : targetPath.getNodeIdentifiers()) { if (result instanceof DataNodeContainer) { - final QName resultNode = node.withModule(result.getQName().getModule()); + final QName resultNode = node.bindTo(result.getQName().getModule()); result = ((DataNodeContainer) result).getDataChildByName(resultNode); } else if (result instanceof ChoiceSchemaNode) { result = findNamedCase((ChoiceSchemaNode) result, node.getLocalName()); @@ -1188,7 +1181,7 @@ abstract class AbstractTypeGenerator { checkArgument(refChoiceType != null, "Referenced Choice Type cannot be NULL."); checkArgument(choiceNode != null, "ChoiceNode cannot be NULL."); - for (final CaseSchemaNode caseNode : choiceNode.getCases().values()) { + for (final CaseSchemaNode caseNode : choiceNode.getCases()) { if (caseNode != null && !caseNode.isAddedByUses() && !caseNode.isAugmenting()) { final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(context, caseNode); caseTypeBuilder.addImplementsType(refChoiceType); @@ -1205,8 +1198,10 @@ abstract class AbstractTypeGenerator { if (parent instanceof AugmentationSchemaNode) { final AugmentationSchemaNode augSchema = (AugmentationSchemaNode) parent; - final SchemaPath targetPath = augSchema.getTargetPath(); - SchemaNode targetSchemaNode = findDataSchemaNode(schemaContext, targetPath); + final SchemaNodeIdentifier targetPath = augSchema.getTargetPath(); + // FIXME: can we use findDataSchemaNode? + SchemaNode targetSchemaNode = findNodeInSchemaContext(schemaContext, + targetPath.getNodeIdentifiers()); if (targetSchemaNode instanceof DataSchemaNode && ((DataSchemaNode) targetSchemaNode).isAddedByUses()) { if (targetSchemaNode instanceof DerivableSchemaNode) { @@ -1324,7 +1319,7 @@ abstract class AbstractTypeGenerator { } private static CaseSchemaNode findNamedCase(final ChoiceSchemaNode choice, final String caseName) { - final List cases = choice.findCaseNodes(caseName); + final List cases = choice.findCaseNodes(caseName); return cases.isEmpty() ? null : cases.get(0); } @@ -1926,10 +1921,10 @@ abstract class AbstractTypeGenerator { private GeneratedTypeBuilder addImplementedInterfaceFromUses(final DataNodeContainer dataNodeContainer, final GeneratedTypeBuilder builder) { for (final UsesNode usesNode : dataNodeContainer.getUses()) { - final GeneratedTypeBuilder genType = findGroupingByPath(usesNode.getGroupingPath()); + final GeneratedTypeBuilder genType = findGrouping(usesNode.getSourceGrouping()); if (genType == null) { - throw new IllegalStateException("Grouping " + usesNode.getGroupingPath() + "is not resolved for " - + builder.getName()); + throw new IllegalStateException("Grouping " + usesNode.getSourceGrouping().getQName() + + " is not resolved for " + builder.getName()); } builder.addImplementsType(genType.build()); @@ -1947,6 +1942,16 @@ abstract class AbstractTypeGenerator { return null; } + private GeneratedTypeBuilder findGrouping(final GroupingDefinition grouping) { + for (final ModuleContext ctx : genCtx.values()) { + final GeneratedTypeBuilder result = ctx.getGrouping(grouping.getPath()); + if (result != null) { + return result; + } + } + return null; + } + private GeneratedTypeBuilder findGroupingByPath(final SchemaPath path) { for (final ModuleContext ctx : genCtx.values()) { final GeneratedTypeBuilder result = ctx.getGrouping(path); diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySort.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySort.java index 59aba315b6..f3a910af42 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySort.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/GroupingDefinitionDependencySort.java @@ -26,7 +26,6 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UsesNode; public class GroupingDefinitionDependencySort { @@ -72,12 +71,12 @@ public class GroupingDefinitionDependencySort { * @return set of nodes where every one contains wrapped grouping definition */ private Set groupingDefinitionsToNodes(final Collection groupingDefinitions) { - final Map nodeMap = new HashMap<>(); + final Map nodeMap = new HashMap<>(); final Set resultNodes = new HashSet<>(); for (final GroupingDefinition groupingDefinition : groupingDefinitions) { final Node node = new NodeWrappedType(groupingDefinition); - nodeMap.put(groupingDefinition.getPath(), node); + nodeMap.put(groupingDefinition, node); resultNodes.add(node); } @@ -88,12 +87,9 @@ public class GroupingDefinitionDependencySort { Set usesNodes = getAllUsesNodes(groupingDefinition); for (UsesNode usesNode : usesNodes) { - SchemaPath schemaPath = usesNode.getGroupingPath(); - if (schemaPath != null) { - Node nodeTo = nodeMap.get(schemaPath); - if (nodeTo != null) { - nodeWrappedType.addEdge(nodeTo); - } + Node nodeTo = nodeMap.get(usesNode.getSourceGrouping()); + if (nodeTo != null) { + nodeWrappedType.addEdge(nodeTo); } } } @@ -125,7 +121,7 @@ public class GroupingDefinitionDependencySort { if (childNode instanceof DataNodeContainer) { ret.addAll(getAllUsesNodes((DataNodeContainer) childNode)); } else if (childNode instanceof ChoiceSchemaNode) { - for (CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) childNode).getCases().values()) { + for (CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) childNode).getCases()) { ret.addAll(getAllUsesNodes(choiceCaseNode)); } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypedefResolver.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypedefResolver.java index 8988b97ce8..9874be5e25 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypedefResolver.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypedefResolver.java @@ -55,7 +55,7 @@ final class TypedefResolver { } else if (childNode instanceof ListSchemaNode) { fillRecursively(list, (ListSchemaNode) childNode); } else if (childNode instanceof ChoiceSchemaNode) { - for (final CaseSchemaNode caseNode : ((ChoiceSchemaNode) childNode).getCases().values()) { + for (CaseSchemaNode caseNode : ((ChoiceSchemaNode) childNode).getCases()) { fillRecursively(list, caseNode); } } diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/binding/runtime/api/AbstractBindingRuntimeContext.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/binding/runtime/api/AbstractBindingRuntimeContext.java index cf36fad9a9..e14538fd31 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/binding/runtime/api/AbstractBindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/binding/runtime/api/AbstractBindingRuntimeContext.java @@ -358,7 +358,7 @@ public abstract class AbstractBindingRuntimeContext implements BindingRuntimeCon private static @NonNull Optional findInstantiatedCase(final ChoiceSchemaNode instantiatedChoice, final CaseSchemaNode originalDefinition) { - CaseSchemaNode potential = instantiatedChoice.getCaseNodeByName(originalDefinition.getQName()); + CaseSchemaNode potential = instantiatedChoice.findCase(originalDefinition.getQName()).orElse(null); if (originalDefinition.equals(potential)) { return Optional.of(potential); } diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/binding/runtime/spi/ModuleInfoBackedContext.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/binding/runtime/spi/ModuleInfoBackedContext.java index 02666536ac..afb2afb3c2 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/binding/runtime/spi/ModuleInfoBackedContext.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/binding/runtime/spi/ModuleInfoBackedContext.java @@ -44,6 +44,7 @@ import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; @@ -61,7 +62,8 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy private static final class WithFallback extends ModuleInfoBackedContext { private final @NonNull ClassLoadingStrategy fallback; - WithFallback(final ClassLoadingStrategy fallback) { + WithFallback(final YangTextSchemaContextResolver resolver, final ClassLoadingStrategy fallback) { + super(resolver); this.fallback = requireNonNull(fallback); } @@ -146,7 +148,7 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy } }); - private final YangTextSchemaContextResolver ctxResolver = YangTextSchemaContextResolver.create("binding-context"); + private final YangTextSchemaContextResolver ctxResolver; @GuardedBy("this") private final ListMultimap packageToInfoReg = @@ -155,8 +157,8 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy private final ListMultimap sourceToInfoReg = MultimapBuilder.hashKeys().arrayListValues().build(); - ModuleInfoBackedContext() { - // Hidden on purpose + ModuleInfoBackedContext(final YangTextSchemaContextResolver resolver) { + this.ctxResolver = requireNonNull(resolver); } @Beta @@ -166,11 +168,28 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy } public static ModuleInfoBackedContext create() { - return new ModuleInfoBackedContext(); + return create("unnamed"); + } + + public static ModuleInfoBackedContext create(final String id) { + return new ModuleInfoBackedContext(YangTextSchemaContextResolver.create(id)); } public static ModuleInfoBackedContext create(final ClassLoadingStrategy loadingStrategy) { - return new WithFallback(loadingStrategy); + return create("unnamed", loadingStrategy); + } + + public static ModuleInfoBackedContext create(final String id, final ClassLoadingStrategy loadingStrategy) { + return new WithFallback(YangTextSchemaContextResolver.create(id), loadingStrategy); + } + + public static ModuleInfoBackedContext create(final String id, final YangParserFactory factory) { + return new ModuleInfoBackedContext(YangTextSchemaContextResolver.create(id, factory)); + } + + public static ModuleInfoBackedContext create(final String id, final YangParserFactory factory, + final ClassLoadingStrategy loadingStrategy) { + return new WithFallback(YangTextSchemaContextResolver.create(id, factory), loadingStrategy); } @Override diff --git a/docs/pom.xml b/docs/pom.xml index 8f59477f57..7f7b49e9af 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -462,6 +462,11 @@ org.osgi.core provided + + org.osgi + osgi.cmpn + provided + org.apache.aries.blueprint blueprint-maven-plugin-annotation @@ -613,7 +618,7 @@ https://commons.apache.org/proper/commons-lang/javadocs/api-3.9/ https://commons.apache.org/proper/commons-codec/apidocs/ - https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/4.0.7/ + https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/5.0.0-SNAPSHOT/ diff --git a/dom/dom-parent/pom.xml b/dom/dom-parent/pom.xml index 3cc4da70eb..c7ed1e6abf 100644 --- a/dom/dom-parent/pom.xml +++ b/dom/dom-parent/pom.xml @@ -29,7 +29,7 @@ org.opendaylight.yangtools yangtools-artifacts - 4.0.7 + 5.0.0-SNAPSHOT pom import diff --git a/features/feature-parent/pom.xml b/features/feature-parent/pom.xml index 8745f630ab..2e33b51b93 100644 --- a/features/feature-parent/pom.xml +++ b/features/feature-parent/pom.xml @@ -27,7 +27,7 @@ org.opendaylight.yangtools yangtools-artifacts - 4.0.7 + 5.0.0-SNAPSHOT pom import diff --git a/features/odl-mdsal-binding-api/src/main/feature/feature.xml b/features/odl-mdsal-binding-api/src/main/feature/feature.xml index 29aba2d51c..ecb2c4d397 100644 --- a/features/odl-mdsal-binding-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-binding-base/src/main/feature/feature.xml b/features/odl-mdsal-binding-base/src/main/feature/feature.xml index ee7db4d885..068e0e0fd1 100644 --- a/features/odl-mdsal-binding-base/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-base/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-common + odl-yangtools-common diff --git a/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml b/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml index b730ef3586..7ab803defb 100644 --- a/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml @@ -1,7 +1,7 @@ - odl-yangtools-data - odl-yangtools-parser + odl-yangtools-data + odl-yangtools-parser diff --git a/features/odl-mdsal-common/src/main/feature/feature.xml b/features/odl-mdsal-common/src/main/feature/feature.xml index 320a4a483a..416e93bad4 100644 --- a/features/odl-mdsal-common/src/main/feature/feature.xml +++ b/features/odl-mdsal-common/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-common + odl-yangtools-common diff --git a/features/odl-mdsal-dom-api/src/main/feature/feature.xml b/features/odl-mdsal-dom-api/src/main/feature/feature.xml index 5222412bfe..91241ed709 100644 --- a/features/odl-mdsal-dom-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-dom-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-dom-broker/src/main/feature/feature.xml b/features/odl-mdsal-dom-broker/src/main/feature/feature.xml index 40d8083956..36e24ded02 100644 --- a/features/odl-mdsal-dom-broker/src/main/feature/feature.xml +++ b/features/odl-mdsal-dom-broker/src/main/feature/feature.xml @@ -2,7 +2,7 @@ odl-lmax-3 - odl-yangtools-data - odl-yangtools-parser + odl-yangtools-data + odl-yangtools-parser diff --git a/features/odl-mdsal-eos-common/src/main/feature/feature.xml b/features/odl-mdsal-eos-common/src/main/feature/feature.xml index ee18c07c66..a5e489b33e 100644 --- a/features/odl-mdsal-eos-common/src/main/feature/feature.xml +++ b/features/odl-mdsal-eos-common/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml b/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml index 1b6996da43..0461deea9b 100644 --- a/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-uint24-netty/src/main/feature/feature.xml b/features/odl-mdsal-uint24-netty/src/main/feature/feature.xml index 542c2e60f6..47dacdc94f 100644 --- a/features/odl-mdsal-uint24-netty/src/main/feature/feature.xml +++ b/features/odl-mdsal-uint24-netty/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-netty + odl-yangtools-netty