From: Martin Vitez Date: Thu, 2 May 2013 09:23:07 +0000 (+0200) Subject: Fixed parsing of unknown nodes for identity statemens. X-Git-Tag: releasepom-0.1.0~502 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F81%2F281%2F1;p=controller.git Fixed parsing of unknown nodes for identity statemens. Signed-off-by: Martin Vitez --- diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceBuilder.java index eb8819657b..946ba4ae05 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceBuilder.java @@ -31,22 +31,26 @@ import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder, AugmentationTargetBuilder { + private final ChoiceNodeImpl instance; + // SchemaNode args private final QName qname; private SchemaPath schemaPath; - private final ConstraintsBuilder constraints; - private final ChoiceNodeImpl instance; private String description; private String reference; private Status status = Status.CURRENT; + private final List addedUnknownNodes = new ArrayList(); + // DataSchemaNode args private boolean augmenting; private boolean configuration; - private String defaultCase; - - private final Set cases = new HashSet(); + private final ConstraintsBuilder constraints; + // DataNodeContainer args private final Set addedTypedefs = new HashSet(); private final Set addedUsesNodes = new HashSet(); + // AugmentationTarget args private final Set addedAugmentations = new HashSet(); - private final List addedUnknownNodes = new ArrayList(); + // ChoiceNode args + private final Set cases = new HashSet(); + private String defaultCase; public ChoiceBuilder(QName qname) { this.qname = qname; @@ -62,6 +66,7 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder, instance.setStatus(status); instance.setAugmenting(augmenting); instance.setConfiguration(configuration); + instance.setConstraints(constraints.build()); instance.setDefaultCase(defaultCase); // CASES @@ -85,8 +90,6 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder, } instance.setUnknownSchemaNodes(unknownNodes); - instance.setConstraints(constraints.build()); - return instance; } @@ -97,7 +100,8 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder, @Override public void addChildNode(DataSchemaNodeBuilder childNode) { if (!(childNode instanceof ChoiceCaseBuilder)) { - ChoiceCaseBuilder caseBuilder = new ChoiceCaseBuilder(childNode.getQName()); + ChoiceCaseBuilder caseBuilder = new ChoiceCaseBuilder( + childNode.getQName()); caseBuilder.addChildNode(childNode); cases.add(caseBuilder); } else { diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceCaseBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceCaseBuilder.java index 73d7e3dc0c..27cead10f1 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceCaseBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ChoiceCaseBuilder.java @@ -24,18 +24,18 @@ import org.opendaylight.controller.yang.model.parser.builder.api.DataSchemaNodeB import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder; -public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataSchemaNodeBuilder { - +public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements + DataSchemaNodeBuilder { private final ChoiceCaseNodeImpl instance; - private final ConstraintsBuilder constraints; private SchemaPath schemaPath; private String description; private String reference; private Status status = Status.CURRENT; + private final List addedUnknownNodes = new ArrayList(); private boolean augmenting; + private final ConstraintsBuilder constraints; private final Set addedUsesNodes = new HashSet(); private final Set augmentations = new HashSet(); - private final List addedUnknownNodes = new ArrayList(); ChoiceCaseBuilder(QName qname) { super(qname); @@ -110,7 +110,7 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS @Override public void setStatus(Status status) { - if(status != null) { + if (status != null) { this.status = status; } } @@ -144,12 +144,14 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS @Override public void addTypedef(TypeDefinitionBuilder typedefBuilder) { - throw new UnsupportedOperationException("Can not add type definition to choice case."); + throw new UnsupportedOperationException( + "Can not add type definition to choice case."); } @Override public void setConfiguration(boolean configuration) { - throw new UnsupportedOperationException("Can not add config definition to choice case."); + throw new UnsupportedOperationException( + "Can not add config definition to choice case."); } @Override @@ -161,8 +163,7 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS return augmentations; } - - private static class ChoiceCaseNodeImpl implements ChoiceCaseNode { + private class ChoiceCaseNodeImpl implements ChoiceCaseNode { private final QName qname; private SchemaPath path; private String description; @@ -217,7 +218,7 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS } private void setStatus(Status status) { - if(status != null) { + if (status != null) { this.status = status; } } @@ -251,7 +252,7 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS } private void setUnknownSchemaNodes(List unknownNodes) { - if(unknownNodes != null) { + if (unknownNodes != null) { this.unknownNodes = unknownNodes; } } @@ -317,7 +318,6 @@ public class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements DataS } } - @Override public int hashCode() { final int prime = 31; diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/IdentitySchemaNodeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/IdentitySchemaNodeBuilder.java index 906afd97a0..5cfde8e7a0 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/IdentitySchemaNodeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/IdentitySchemaNodeBuilder.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.yang.model.parser.builder.impl; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -17,13 +18,13 @@ import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder; -public class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { - +public final class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { + private final IdentitySchemaNodeImpl instance; private final QName qname; private SchemaPath schemaPath; - private final IdentitySchemaNodeImpl instance; private IdentitySchemaNodeBuilder baseIdentity; private String baseIdentityName; + private final List addedUnknownNodes = new ArrayList(); IdentitySchemaNodeBuilder(final QName qname) { this.qname = qname; @@ -33,11 +34,17 @@ public class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { @Override public IdentitySchemaNode build() { instance.setPath(schemaPath); - if (baseIdentity != null) { - final IdentitySchemaNode base = baseIdentity.build(); - instance.setBaseIdentity(base); + instance.setBaseIdentity(baseIdentity.build()); + } + + // UNKNOWN NODES + final List unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); } + instance.setUnknownSchemaNodes(unknownNodes); + return instance; } @@ -75,8 +82,7 @@ public class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { @Override public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) { - throw new IllegalStateException( - "Can not add schema node to identity statement"); + addedUnknownNodes.add(unknownNode); } public String getBaseIdentityName() { @@ -91,13 +97,14 @@ public class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { this.baseIdentity = baseType; } - private class IdentitySchemaNodeImpl implements IdentitySchemaNode { + private final class IdentitySchemaNodeImpl implements IdentitySchemaNode { private final QName qname; private IdentitySchemaNode baseIdentity; private String description; private String reference; private Status status = Status.CURRENT; private SchemaPath path; + private List unknownNodes = Collections.emptyList(); private IdentitySchemaNodeImpl(final QName qname) { this.qname = qname; @@ -157,7 +164,14 @@ public class IdentitySchemaNodeBuilder implements SchemaNodeBuilder { @Override public List getUnknownSchemaNodes() { - return Collections.emptyList(); + return unknownNodes; + } + + private void setUnknownSchemaNodes( + List unknownSchemaNodes) { + if (unknownSchemaNodes != null) { + this.unknownNodes = unknownSchemaNodes; + } } @Override 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 e0ba03adfb..cca505e985 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 @@ -96,6 +96,8 @@ public class ModuleBuilder implements Builder { */ @Override public Module build() { + instance.setPrefix(prefix); + instance.setRevision(revision); instance.setImports(imports); instance.setNamespace(namespace); @@ -247,12 +249,10 @@ public class ModuleBuilder implements Builder { public void setRevision(final Date revision) { this.revision = revision; - instance.setRevision(revision); } public void setPrefix(final String prefix) { this.prefix = prefix; - instance.setPrefix(prefix); } public void setYangVersion(final String yangVersion) { @@ -295,10 +295,8 @@ public class ModuleBuilder implements Builder { public ContainerSchemaNodeBuilder addContainerNode( final QName containerName, final List parentPath) { final List pathToNode = new ArrayList(parentPath); - final ContainerSchemaNodeBuilder containerBuilder = new ContainerSchemaNodeBuilder( containerName); - final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToNode); if (parent != null) { @@ -318,10 +316,8 @@ public class ModuleBuilder implements Builder { public ListSchemaNodeBuilder addListNode(final QName listName, final List parentPath) { final List pathToNode = new ArrayList(parentPath); - final ListSchemaNodeBuilder listBuilder = new ListSchemaNodeBuilder( listName); - final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToNode); if (parent != null) { @@ -341,10 +337,8 @@ public class ModuleBuilder implements Builder { public LeafSchemaNodeBuilder addLeafNode(final QName leafName, final List parentPath) { final List pathToNode = new ArrayList(parentPath); - final LeafSchemaNodeBuilder leafBuilder = new LeafSchemaNodeBuilder( leafName); - final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToNode); if (parent != null) { @@ -364,7 +358,6 @@ public class ModuleBuilder implements Builder { public LeafListSchemaNodeBuilder addLeafListNode(final QName leafListName, final List parentPath) { final List pathToNode = new ArrayList(parentPath); - final LeafListSchemaNodeBuilder leafListBuilder = new LeafListSchemaNodeBuilder( leafListName); final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes @@ -386,7 +379,6 @@ public class ModuleBuilder implements Builder { public GroupingBuilder addGrouping(final QName qname, final List parentPath) { final List pathToGroup = new ArrayList(parentPath); - final GroupingBuilder builder = new GroupingBuilderImpl(qname); final ChildNodeBuilder parentNodeBuilder = (ChildNodeBuilder) moduleNodes .get(pathToGroup); @@ -405,7 +397,6 @@ public class ModuleBuilder implements Builder { public AugmentationSchemaBuilder addAugment(final String name, final List parentPath) { final List pathToAugment = new ArrayList(parentPath); - final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl( name); diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UsesNodeBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UsesNodeBuilderImpl.java index 7d3e929357..05d2faa409 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UsesNodeBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/UsesNodeBuilderImpl.java @@ -26,8 +26,7 @@ import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuild import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder; import org.opendaylight.controller.yang.model.parser.util.RefineHolder; -public class UsesNodeBuilderImpl implements UsesNodeBuilder, Builder { - +final class UsesNodeBuilderImpl implements UsesNodeBuilder, Builder { private final UsesNodeImpl instance; private final SchemaPath groupingPath; private final Set addedAugments = new HashSet(); @@ -89,8 +88,8 @@ public class UsesNodeBuilderImpl implements UsesNodeBuilder, Builder { refines.add(refine); } - private SchemaPath parseUsesPath(final String augmentPath) { - final String[] splittedPath = augmentPath.split("/"); + private SchemaPath parseUsesPath(final String groupingPathStr) { + final String[] splittedPath = groupingPathStr.split("/"); final List path = new ArrayList(); QName name; for (String pathElement : splittedPath) { @@ -103,11 +102,11 @@ public class UsesNodeBuilderImpl implements UsesNodeBuilder, Builder { } path.add(name); } - final boolean absolute = augmentPath.startsWith("/"); + final boolean absolute = groupingPathStr.startsWith("/"); return new SchemaPath(path, absolute); } - private static class UsesNodeImpl implements UsesNode { + private final class UsesNodeImpl implements UsesNode { private final SchemaPath groupingPath; private Set augmentations = Collections.emptySet(); private boolean augmenting; 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 2023b47de3..98b81bd958 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 @@ -652,7 +652,7 @@ public final class YangModelParserListenerImpl extends YangParserBaseListener { final String nodeTypeStr = ctx.getChild(0).getText(); final String[] splittedElement = nodeTypeStr.split(":"); if (splittedElement.length == 1) { - nodeType = new QName(null, null, null, splittedElement[0]); + nodeType = new QName(null, null, yangModelPrefix, splittedElement[0]); } else { nodeType = new QName(null, null, splittedElement[0], splittedElement[1]); diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/TypesResolutionTest.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/TypesResolutionTest.java index 7acf7cbbe4..4a48a4e2da 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/TypesResolutionTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/model/parser/impl/TypesResolutionTest.java @@ -19,7 +19,6 @@ import org.opendaylight.controller.yang.common.QName; import org.opendaylight.controller.yang.model.api.IdentitySchemaNode; import org.opendaylight.controller.yang.model.api.LeafSchemaNode; import org.opendaylight.controller.yang.model.api.Module; -import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.TypeDefinition; import org.opendaylight.controller.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.controller.yang.model.api.type.EnumTypeDefinition.EnumPair;