From be6d2cfbf462fc44301309b872ca8eeae6e2eb97 Mon Sep 17 00:00:00 2001 From: Martin Vitez Date: Tue, 30 Apr 2013 16:02:15 +0200 Subject: [PATCH] Expanded UnknownSchemaNode implementation, refactored java source code generation. Signed-off-by: Martin Vitez --- .../java/api/generator/GeneratorJavaFile.java | 109 ++++++------ .../generator/test/GeneratorJavaFileTest.java | 4 +- .../sal/api/gen/plugin/CodeGeneratorImpl.java | 10 +- .../plugin/YangToSourcesMojo.java | 3 +- .../yang2sources/spi/CodeGenerator.java | 5 +- .../parser/builder/impl/ModuleBuilder.java | 15 +- .../impl/UnknownSchemaNodeBuilder.java | 43 ++++- .../parser/impl/YangModelParserImpl.java | 24 +++ .../impl/YangModelParserListenerImpl.java | 22 ++- .../parser/impl/YangModelParserTest.java | 3 + .../src/test/resources/abstract-topology.yang | 92 ---------- .../src/test/resources/test-model.yang | 163 ------------------ .../yang/model/api/UnknownSchemaNode.java | 5 + 13 files changed, 162 insertions(+), 336 deletions(-) delete mode 100644 opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/abstract-topology.yang delete mode 100644 opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/test-model.yang diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java index 32b3fa03eb..be115c9a45 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java @@ -44,75 +44,68 @@ public class GeneratorJavaFile { this.genTransferObjects = genTransferObjects; } - public boolean generateToFile() { + public List generateToFile() throws IOException { return generateToFile(null); } - public boolean generateToFile(String path) { - try { - for (GeneratedType type : types) { - String parentPath = generateParentPath(path, - type.getPackageName()); + public List generateToFile(String path) throws IOException { + final List result = new ArrayList(); - File file = new File(parentPath, type.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } + for (GeneratedType type : types) { + String parentPath = generateParentPath(path, + type.getPackageName()); - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = interfaceGenerator.generate(type); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } - } + File file = new File(parentPath, type.getName() + ".java"); + File parent = file.getParentFile(); + if (!parent.exists()) { + parent.mkdirs(); } - for (GeneratedTransferObject transferObject : genTransferObjects) { - String parentPath = generateParentPath(path, - transferObject.getPackageName()); - - File file = new File(parentPath, transferObject.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); + + if (!file.exists()) { + FileWriter fw = null; + BufferedWriter bw = null; + + file.createNewFile(); + fw = new FileWriter(file); + bw = new BufferedWriter(fw); + Writer writer = interfaceGenerator.generate(type); + bw.write(writer.toString()); + + if (bw != null) { + bw.close(); } + result.add(file); + } + } - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = classGenerator.generate(transferObject); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } + for (GeneratedTransferObject transferObject : genTransferObjects) { + String parentPath = generateParentPath(path, + transferObject.getPackageName()); + + File file = new File(parentPath, transferObject.getName() + ".java"); + File parent = file.getParentFile(); + if (!parent.exists()) { + parent.mkdirs(); + } + + if (!file.exists()) { + FileWriter fw = null; + BufferedWriter bw = null; + + file.createNewFile(); + fw = new FileWriter(file); + bw = new BufferedWriter(fw); + Writer writer = classGenerator.generate(transferObject); + bw.write(writer.toString()); + + if (bw != null) { + bw.close(); } + result.add(file); } - return true; - } catch (IOException e) { - // TODO: log? - return false; } + + return result; } private String generateParentPath(String path, String pkg) { diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java index 5b5d503192..4ae8cc1275 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/controller/sal/java/api/generator/test/GeneratorJavaFileTest.java @@ -11,6 +11,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -64,7 +65,7 @@ public class GeneratorJavaFileTest { } @Test - public void test() { + public void test() throws IOException { final Set types = new HashSet(); GeneratedType t1 = createGeneratedType( "org.opendaylight.controller.gen", "Type1"); @@ -79,7 +80,6 @@ public class GeneratorJavaFileTest { new InterfaceGenerator(), types); generator.generateToFile(PATH); - // path: test-dir/com/cisco/yang String[] files = new File(PATH + FS + "org" + FS + "opendaylight" + FS + "controller" + FS + "gen").list(); List filesList = Arrays.asList(files); diff --git a/opendaylight/sal/yang-prototype/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/controller/maven/sal/api/gen/plugin/CodeGeneratorImpl.java b/opendaylight/sal/yang-prototype/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/controller/maven/sal/api/gen/plugin/CodeGeneratorImpl.java index 40b8e43043..c9b43d838e 100644 --- a/opendaylight/sal/yang-prototype/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/controller/maven/sal/api/gen/plugin/CodeGeneratorImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/controller/maven/sal/api/gen/plugin/CodeGeneratorImpl.java @@ -8,7 +8,7 @@ package org.opendaylight.controller.maven.sal.api.gen.plugin; import java.io.File; -import java.util.Arrays; +import java.io.IOException; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -27,7 +27,7 @@ public class CodeGeneratorImpl implements CodeGenerator { @Override public Collection generateSources(SchemaContext context, - File outputBaseDir) { + File outputBaseDir) throws IOException { final BindingGenerator bindingGenerator = new BindingGeneratorImpl(); final List types = bindingGenerator.generateTypes(context); @@ -40,13 +40,11 @@ public class CodeGeneratorImpl implements CodeGenerator { typesToGenerate.add((GeneratedType) type); } - + } final GeneratorJavaFile generator = new GeneratorJavaFile(typesToGenerate, tosToGenerate); - generator.generateToFile(outputBaseDir.getAbsolutePath()); - - return Arrays.asList(outputBaseDir.listFiles()); + return generator.generateToFile(outputBaseDir.getAbsolutePath()); } } diff --git a/opendaylight/sal/yang-prototype/code-generator/maven-yang-plugin/src/main/java/org/opendaylight/controller/yang2sources/plugin/YangToSourcesMojo.java b/opendaylight/sal/yang-prototype/code-generator/maven-yang-plugin/src/main/java/org/opendaylight/controller/yang2sources/plugin/YangToSourcesMojo.java index 2b7dc33845..41f3ae4a65 100644 --- a/opendaylight/sal/yang-prototype/code-generator/maven-yang-plugin/src/main/java/org/opendaylight/controller/yang2sources/plugin/YangToSourcesMojo.java +++ b/opendaylight/sal/yang-prototype/code-generator/maven-yang-plugin/src/main/java/org/opendaylight/controller/yang2sources/plugin/YangToSourcesMojo.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.yang2sources.plugin; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -167,7 +168,7 @@ public final class YangToSourcesMojo extends AbstractMojo { */ private void generateSourcesWithOneGenerator(SchemaContext context, CodeGeneratorArg codeGeneratorCfg) throws ClassNotFoundException, - InstantiationException, IllegalAccessException { + InstantiationException, IllegalAccessException, IOException { codeGeneratorCfg.check(); diff --git a/opendaylight/sal/yang-prototype/code-generator/maven-yang/src/main/java/org/opendaylight/controller/yang2sources/spi/CodeGenerator.java b/opendaylight/sal/yang-prototype/code-generator/maven-yang/src/main/java/org/opendaylight/controller/yang2sources/spi/CodeGenerator.java index 534c37de10..f90c7ef7e4 100644 --- a/opendaylight/sal/yang-prototype/code-generator/maven-yang/src/main/java/org/opendaylight/controller/yang2sources/spi/CodeGenerator.java +++ b/opendaylight/sal/yang-prototype/code-generator/maven-yang/src/main/java/org/opendaylight/controller/yang2sources/spi/CodeGenerator.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.yang2sources.spi; import java.io.File; +import java.io.IOException; import java.util.Collection; import org.opendaylight.controller.yang.model.api.SchemaContext; @@ -20,7 +21,7 @@ public interface CodeGenerator { /** * Generate sources from provided {@link SchemaContext} - * + * * @param context * parsed from yang files * @param outputBaseDir @@ -28,5 +29,5 @@ public interface CodeGenerator { * user * @return collection of files that were generated from schema context */ - Collection generateSources(SchemaContext context, File outputBaseDir); + Collection generateSources(SchemaContext context, File outputBaseDir) throws IOException; } diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java index 7cb51db6a6..e0ba03adfb 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java @@ -82,6 +82,7 @@ public class ModuleBuilder implements Builder { private final Map addedDeviations = new HashMap(); private final Map, TypeDefinitionBuilder> addedTypedefs = new HashMap, TypeDefinitionBuilder>(); private final List addedExtensions = new ArrayList(); + private final Set addedUnknownNodes = new HashSet(); private final Map, TypeAwareBuilder> dirtyNodes = new HashMap, TypeAwareBuilder>(); @@ -126,7 +127,6 @@ public class ModuleBuilder implements Builder { instance.setNotifications(notifications); // AUGMENTATIONS - // instance.setAugmentations(augmentations); final Set augmentations = new HashSet(); for (AugmentationSchemaBuilder builder : addedAugments) { augmentations.add(builder.build()); @@ -195,6 +195,10 @@ public class ModuleBuilder implements Builder { return addedUsesNodes; } + public Set getAddedUnknownNodes() { + return addedUnknownNodes; + } + public Set getModuleTypedefs() { Set typedefs = new HashSet(); for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs @@ -528,7 +532,7 @@ public class ModuleBuilder implements Builder { List pathToCase = new ArrayList(parentPath); ChoiceCaseBuilder builder = new ChoiceCaseBuilder(caseName); - final ChoiceBuilder parent = (ChoiceBuilder) moduleNodes + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToCase); if (parent != null) { if (parent instanceof AugmentationSchemaBuilder) { @@ -538,7 +542,6 @@ public class ModuleBuilder implements Builder { } pathToCase.add(caseName.getLocalName()); - addedChilds.put(pathToCase, builder); moduleNodes.put(pathToCase, builder); return builder; @@ -609,12 +612,13 @@ public class ModuleBuilder implements Builder { public void addIdentityrefType(String baseString, List parentPath, SchemaPath schemaPath) { + List pathToIdentityref = new ArrayList(parentPath); TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes - .get(parentPath); + .get(pathToIdentityref); IdentityrefTypeBuilder identityref = new IdentityrefTypeBuilder( baseString, schemaPath); parent.setType(identityref); - dirtyNodes.put(parentPath, parent); + dirtyNodes.put(pathToIdentityref, parent); } public DeviationBuilder addDeviation(String targetPath, @@ -658,6 +662,7 @@ public class ModuleBuilder implements Builder { } else if (parent instanceof SchemaNodeBuilder) { ((SchemaNodeBuilder) parent).addUnknownSchemaNode(builder); } + addedUnknownNodes.add(builder); return builder; } diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UnknownSchemaNodeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UnknownSchemaNodeBuilder.java index ddbc927e51..f24502bab2 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UnknownSchemaNodeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UnknownSchemaNodeBuilder.java @@ -18,11 +18,12 @@ import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder; public class UnknownSchemaNodeBuilder implements SchemaNodeBuilder { - + private final UnknownSchemaNodeImpl instance; private final QName qname; private SchemaPath schemaPath; - private final UnknownSchemaNodeImpl instance; private final List addedUnknownNodes = new ArrayList(); + private QName nodeType; + private String nodeParameter; UnknownSchemaNodeBuilder(final QName qname) { this.qname = qname; @@ -32,6 +33,8 @@ public class UnknownSchemaNodeBuilder implements SchemaNodeBuilder { @Override public UnknownSchemaNode build() { instance.setPath(schemaPath); + instance.setNodeType(nodeType); + instance.setNodeParameter(nodeParameter); // UNKNOWN NODES final List unknownNodes = new ArrayList(); @@ -77,6 +80,22 @@ public class UnknownSchemaNodeBuilder implements SchemaNodeBuilder { addedUnknownNodes.add(unknownNode); } + public QName getNodeType() { + return nodeType; + } + + public void setNodeType(final QName nodeType) { + this.nodeType = nodeType; + } + + public String getNodeParameter() { + return nodeParameter; + } + + public void setNodeParameter(final String nodeParameter) { + this.nodeParameter = nodeParameter; + } + private static class UnknownSchemaNodeImpl implements UnknownSchemaNode { private final QName qname; private SchemaPath path; @@ -84,6 +103,8 @@ public class UnknownSchemaNodeBuilder implements SchemaNodeBuilder { private String reference; private Status status = Status.CURRENT; private List unknownNodes = Collections.emptyList(); + private QName nodeType; + private String nodeParameter; private UnknownSchemaNodeImpl(final QName qname) { this.qname = qname; @@ -143,6 +164,24 @@ public class UnknownSchemaNodeBuilder implements SchemaNodeBuilder { this.unknownNodes = unknownNodes; } } + + @Override + public QName getNodeType() { + return nodeType; + } + + private void setNodeType(final QName nodeType) { + this.nodeType = nodeType; + } + + @Override + public String getNodeParameter() { + return nodeParameter; + } + + private void setNodeParameter(final String nodeParameter) { + this.nodeParameter = nodeParameter; + } } } diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserImpl.java index 60937fff22..50943fa740 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserImpl.java @@ -209,6 +209,7 @@ public class YangModelParserImpl implements YangModelParser { resolveDirtyNodes(modules, builder); resolveIdentities(modules, builder); resolveUses(modules, builder); + resolveUnknownNodes(modules, builder); } /** @@ -979,6 +980,29 @@ public class YangModelParserImpl implements YangModelParser { return result; } + private void resolveUnknownNodes( + final Map> modules, + final ModuleBuilder module) { + for (UnknownSchemaNodeBuilder usnb : module.getAddedUnknownNodes()) { + QName nodeType = usnb.getNodeType(); + if (nodeType.getNamespace() == null + || nodeType.getRevision() == null) { + try { + ModuleBuilder dependentModule = findDependentModule( + modules, module, nodeType.getPrefix()); + QName newNodeType = new QName( + dependentModule.getNamespace(), + dependentModule.getRevision(), + nodeType.getPrefix(), nodeType.getLocalName()); + usnb.setNodeType(newNodeType); + } catch (YangParseException e) { + logger.debug("Failed to find unknown node type: " + + nodeType); + } + } + } + } + /** * Find dependent module based on given prefix * diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java index 11b655b4a1..2023b47de3 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java @@ -646,11 +646,21 @@ public final class YangModelParserListenerImpl extends YangParserBaseListener { // Unknown types @Override public void enterIdentifier_stmt(YangParser.Identifier_stmtContext ctx) { - final String name = stringFromNode(ctx); + final String nodeParameter = stringFromNode(ctx); + QName nodeType = null; + + final String nodeTypeStr = ctx.getChild(0).getText(); + final String[] splittedElement = nodeTypeStr.split(":"); + if (splittedElement.length == 1) { + nodeType = new QName(null, null, null, splittedElement[0]); + } else { + nodeType = new QName(null, null, splittedElement[0], + splittedElement[1]); + } QName qname; - if (name != null) { - String[] splittedName = name.split(":"); + if (nodeParameter != null) { + String[] splittedName = nodeParameter.split(":"); if (splittedName.length == 2) { qname = new QName(null, null, splittedName[0], splittedName[1]); } else { @@ -658,12 +668,14 @@ public final class YangModelParserListenerImpl extends YangParserBaseListener { splittedName[0]); } } else { - qname = new QName(namespace, revision, yangModelPrefix, name); + qname = new QName(namespace, revision, yangModelPrefix, nodeParameter); } UnknownSchemaNodeBuilder builder = moduleBuilder.addUnknownSchemaNode( qname, actualPath); - updatePath(name); + builder.setNodeType(nodeType); + builder.setNodeParameter(nodeParameter); + updatePath(nodeParameter); builder.setPath(createActualSchemaPath(actualPath, namespace, revision, yangModelPrefix)); parseSchemaNodeArgs(ctx, builder); diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserTest.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserTest.java index 736efe7efe..6f792a3246 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserTest.java @@ -601,6 +601,9 @@ public class YangModelParserTest { ContainerSchemaNode network = (ContainerSchemaNode)testModule.getDataChildByName("network"); List unknownNodes = network.getUnknownSchemaNodes(); assertEquals(1, unknownNodes.size()); + UnknownSchemaNode unknownNode = unknownNodes.get(0); + assertNotNull(unknownNode.getNodeType()); + assertEquals("point", unknownNode.getNodeParameter()); } @Test diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/abstract-topology.yang b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/abstract-topology.yang deleted file mode 100644 index dc7d0a9832..0000000000 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/abstract-topology.yang +++ /dev/null @@ -1,92 +0,0 @@ -module abstract-topology { - yang-version 1; - namespace ""; - prefix "tp"; - - import ietf-inet-types { - prefix "inet"; - revision-date 2010-09-24; - } - - organization "OPEN DAYLIGHT"; - contact "http://www.opendaylight.org/"; - - description - "This module contains the definitions of elements that creates network - topology i.e. definition of network nodes and links. This module is not designed to be used solely for network representation. This module SHOULD be used as base module in defining the network topology."; - - revision "2013-02-08" { - reference "~~~ WILL BE DEFINED LATER"; - } - - typedef node-id-ref { - type leafref { - path "/tp:topology/tp:network-nodes/tp:network-node/tp:node-id"; - } - description "This type is used for leafs that reference network node instance."; - } - - typedef link-id-ref { - type leafref { - path "/tp:topology/tp:network-links/tp:network-link/tp:link-id"; - } - description "This type is used for leafs that reference network link instance."; - } - - container topology { - description "This is the model of abstract topology which contains only Network Nodes and Network Links. Each topology MUST be identified by unique topology-id for reason that the store could contain many topologies."; - - leaf topology-id { - type inet:uri; - description "It is presumed that datastore will contain many topologies. To distinguish between topologies it is vital to have - UNIQUE topology identifier."; - } - - container network-nodes { - list network-node { - key "node-id"; - - leaf node-id { - type inet:uri; - description "The Topology identifier of network-node."; - } - - container attributes { - description "Aditional attributes that can Network Node contains."; - } - description "The list of network nodes defined for topology."; - } - } - - container network-links { - list network-link { - key "link-id"; - - leaf link-id { - type inet:uri; - description ""; - } - - container source-node { - leaf id { - type node-id-ref; - description "Source node identifier."; - } - } - - container destination-node { - leaf id { - type node-id-ref; - description "Destination node identifier."; - } - } - - container attributes { - description "Aditional attributes that can Network Link contains."; - } - description "The Network Link which is defined by Local (Source) and Remote (Destination) Network Nodes. Every link MUST be defined either by identifier and - his local and remote Network Nodes (In real applications it is common that many links are originated from one node and end up in same remote node). To ensure that we would always know to distinguish between links, every link SHOULD have identifier."; - } - } - } -} \ No newline at end of file diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/test-model.yang b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/test-model.yang deleted file mode 100644 index 8127320289..0000000000 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/resources/test-model.yang +++ /dev/null @@ -1,163 +0,0 @@ -module test-model { - yang-version 1; - namespace "urn:cisco:params:xml:ns:yang:controller:network"; - prefix "topos"; - - import ietf-inet-types { prefix "inet"; } - import iana-if-type {prefix "if-type";} - import mount {prefix "mnt";} - - organization "OPEN DAYLIGHT"; - contact "http://www.opendaylight.org/"; - - description "module description"; - reference "module reference"; - - typedef topology-id { - type inet:uri; - } - - typedef node-id { - type inet:uri; - } - - typedef link-id { - type inet:uri; - } - - typedef tp-id { - type inet:uri; - description "identifier for termination points on a port"; - } - - typedef tp-ref { - type leafref { - path "/network/topologies/topology/nodes/node/termination-points/termination-point/tp-id"; - } - } - typedef topology-ref { - type leafref { - path "/network/topologies/topology/topology-id"; - } - description "This type is used for leafs that reference topology identifier instance."; - // currently not used - } - - typedef node-ref { - type leafref { - path "/network/topologies/topology/nodes/node/node-id"; - } - description "This type is used for leafs that reference a node instance."; - } - - typedef link-ref { - type leafref { - path "/network/topologies/topology/links/link/link-id"; - } - description "This type is used for leafs that reference a link instance."; - // currently not used - } - - typedef network-element-ref { - type leafref { - path "/network/network-elements/network-element/element-id"; - } - } - - - typedef element-id { - type string; - } - - - container network { - description "network-description"; - reference "network-reference"; - status obsolete; - config true; - presence "some presence text"; - - mnt:mountpoint point { - mnt:target-ref target; - } - - leaf-list locked-node { - type instance-identifier; - min-elements 1; - when "a/b/c"; - description "List of locked nodes in the running datastore"; - } - - leaf locked-test { - mandatory true; - } - - container topologies { - list topology { - description "Test description of list 'topology'."; - key "topology-id"; - leaf topology-id { - type topology-id; - description "Test description of leaf 'topology-id'"; - } - - container nodes { - list node { - description "The list of network nodes defined for topology."; - - key "node-id"; - leaf node-id { - type node-id; - description "The Topology identifier of network-node."; - } - - leaf supporting-ne { - type network-element-ref; - } - - container termination-points { - list termination-point { - key "tp-id"; - leaf tp-id { - type tp-id; - } - } - } - } - } - - container links { - list link { - description "Test description of list 'link'."; - key "link-id"; - leaf link-id { - type link-id; - description ""; - } - - container source { - leaf source-node { - type node-ref; - description "Source node identifier."; - } - leaf source-tp { - type tp-ref; - } - } - - container destination { - leaf dest-node { - type node-ref; - description "Destination node identifier."; - } - leaf dest-tp { - type tp-ref; - } - } - } - } - } - } - } - -} diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-api/src/main/java/org/opendaylight/controller/yang/model/api/UnknownSchemaNode.java b/opendaylight/sal/yang-prototype/yang/yang-model-api/src/main/java/org/opendaylight/controller/yang/model/api/UnknownSchemaNode.java index f6f4ac7141..0430b7ab45 100644 --- a/opendaylight/sal/yang-prototype/yang/yang-model-api/src/main/java/org/opendaylight/controller/yang/model/api/UnknownSchemaNode.java +++ b/opendaylight/sal/yang-prototype/yang/yang-model-api/src/main/java/org/opendaylight/controller/yang/model/api/UnknownSchemaNode.java @@ -7,6 +7,11 @@ */ package org.opendaylight.controller.yang.model.api; +import org.opendaylight.controller.yang.common.QName; + public interface UnknownSchemaNode extends SchemaNode { + QName getNodeType(); + String getNodeParameter(); + } -- 2.36.6