X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FModuleBuilder.java;h=52454a01991980e09dde1622ee78aef58957d8ab;hb=16aecfbc7dd5fb07ff09c3104e57095fb8377540;hp=c434f3397549f3f42b9ca493b0d2da60fc95c74a;hpb=d6220bf224a4576041c4112c40c97b2f771bd88a;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java index c434f33975..52454a0199 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java @@ -1,29 +1,30 @@ /* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2013 Cisco Systems, Inc. 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, * and is available at http://www.eclipse.org/legal/epl-v10.html */ + package org.opendaylight.yangtools.yang.parser.builder.impl; +import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; - import java.io.IOException; -import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.Deque; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TreeSet; - -import org.apache.commons.io.IOUtils; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -61,13 +62,15 @@ import org.opendaylight.yangtools.yang.parser.util.YangParseException; * otherwise result may not be valid. */ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DocumentedNodeBuilder { - + private static final QNameModule EMPTY_QNAME_MODULE = QNameModule.cachedReference(QNameModule.create(null, null)); + private static final String GROUPING_STR = "Grouping"; + private static final String TYPEDEF_STR = "typedef"; private ModuleImpl instance; private final String name; private final String sourcePath; private static final SchemaPath SCHEMA_PATH = SchemaPath.create(Collections. emptyList(), true); private String prefix; - private QNameModule qnameModule = QNameModule.create(null, null); + private QNameModule qnameModule = EMPTY_QNAME_MODULE; private final boolean submodule; private String belongsTo; @@ -76,7 +79,12 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im private final Deque actualPath = new LinkedList<>(); private final Set dirtyNodes = new HashSet<>(); - final Set imports = new HashSet<>(); + final Map imports = new HashMap<>(); + final Map importedModules = new HashMap<>(); + + final Set addedSubmodules = new HashSet<>(); + final Set submodules = new HashSet<>(); + final Map includedModules = new HashMap<>(); private final Set augments = new LinkedHashSet<>(); private final List augmentBuilders = new ArrayList<>(); @@ -126,7 +134,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public ModuleBuilder(final Module base) { - super(base.getName(), 0, new QName(base.getNamespace(), base.getRevision(), base.getPrefix(), base.getName()), + super(base.getName(), 0, QName.create(base.getQNameModule(), base.getName()), SCHEMA_PATH, base); this.name = base.getName(); this.sourcePath = base.getModuleSourcePath(); @@ -168,6 +176,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im buildChildren(); + // SUBMODULES + for (ModuleBuilder submodule : addedSubmodules) { + submodules.add(submodule.build()); + } + // FEATURES for (FeatureBuilder fb : addedFeatures) { features.add(fb.build()); @@ -335,7 +348,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setNamespace(final URI namespace) { - this.qnameModule = QNameModule.create(namespace, qnameModule.getRevision()); + this.qnameModule = QNameModule.cachedReference(QNameModule.create(namespace, qnameModule.getRevision())); } public String getPrefix() { @@ -346,10 +359,35 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return qnameModule.getRevision(); } - protected Set getImports() { + public ModuleImport getImport(final String prefix) { + return imports.get(prefix); + } + + public Map getImports() { return imports; } + public ModuleBuilder getImportedModule(final String prefix) { + return importedModules.get(prefix); + } + + public void addImportedModule(final String prefix, final ModuleBuilder module) { + checkPrefix(prefix); + importedModules.put(prefix, module); + } + + public Map getIncludedModules() { + return includedModules; + } + + public void addInclude(final String name, final Date revision) { + includedModules.put(name, revision); + } + + public void addSubmodule(final ModuleBuilder submodule) { + addedSubmodules.add(submodule); + } + protected String getSource() { return source; } @@ -372,7 +410,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setRevision(final Date revision) { - this.qnameModule = QNameModule.create(qnameModule.getNamespace(), revision); + this.qnameModule = QNameModule.cachedReference(QNameModule.create(qnameModule.getNamespace(), revision)); } public void setPrefix(final String prefix) { @@ -391,20 +429,26 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im this.contact = contact; } - public boolean addModuleImport(final String moduleName, final Date revision, final String prefix) { + public void addModuleImport(final String moduleName, final Date revision, final String prefix) { + checkPrefix(prefix); checkNotSealed(); - final ModuleImport moduleImport = createModuleImport(moduleName, revision, prefix); - return imports.add(moduleImport); + final ModuleImport moduleImport = new ModuleImportImpl(moduleName, revision, prefix); + imports.put(prefix, moduleImport); } - public Set getModuleImports() { - return imports; + private void checkPrefix(final String prefix) { + if (prefix == null || prefix.isEmpty()) { + throw new IllegalArgumentException("Cannot add imported module with undefined prefix"); + } + if (prefix.equals(this.prefix)) { + throw new IllegalArgumentException("Cannot add imported module with prefix equals to module prefix"); + } } public ExtensionBuilder addExtension(final QName qname, final int line, final SchemaPath path) { checkNotSealed(); - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "extension can be defined only in module or submodule"); } @@ -415,7 +459,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } final ExtensionBuilder builder = new ExtensionBuilderImpl(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedExtensions.add(builder); return builder; } @@ -424,9 +468,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final ContainerSchemaNodeBuilder builder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -435,9 +479,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final ListSchemaNodeBuilder builder = new ListSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); allLists.add(builder); return builder; @@ -447,9 +491,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final LeafSchemaNodeBuilder builder = new LeafSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -458,9 +502,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final LeafListSchemaNodeBuilder builder = new LeafListSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -469,31 +513,31 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final GroupingBuilder builder = new GroupingBuilderImpl(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); String groupingName = qname.getLocalName(); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { for (GroupingBuilder addedGrouping : getGroupingBuilders()) { if (addedGrouping.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, addedGrouping.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, addedGrouping.getLine()); } } addGrouping(builder); } else { - if (parent instanceof DataNodeContainerBuilder) { - DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parent; + if (parentBuilder instanceof DataNodeContainerBuilder) { + DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parentBuilder; for (GroupingBuilder addedGrouping : parentNode.getGroupingBuilders()) { if (addedGrouping.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, addedGrouping.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, addedGrouping.getLine()); } } parentNode.addGrouping(builder); - } else if (parent instanceof RpcDefinitionBuilder) { - RpcDefinitionBuilder parentNode = (RpcDefinitionBuilder) parent; + } else if (parentBuilder instanceof RpcDefinitionBuilder) { + RpcDefinitionBuilder parentNode = (RpcDefinitionBuilder) parentBuilder; for (GroupingBuilder child : parentNode.getGroupings()) { if (child.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, child.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, child.getLine()); } } parentNode.addGrouping(builder); @@ -506,14 +550,16 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return builder; } - public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, final int order) { + public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, + final SchemaPath targetPath, final int order) { checkNotSealed(); - final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, order); + final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, + targetPath, order); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { // augment can be declared only under 'module' ... if (!(augmentTargetStr.startsWith("/"))) { throw new YangParseException( @@ -524,13 +570,13 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im augmentBuilders.add(builder); } else { // ... or 'uses' statement - if (parent instanceof UsesNodeBuilder) { + if (parentBuilder instanceof UsesNodeBuilder) { if (augmentTargetStr.startsWith("/")) { throw new YangParseException(name, line, "If 'augment' statement is a substatement to the 'uses' statement, it cannot contain absolute path (" + augmentTargetStr + ")"); } - ((UsesNodeBuilder) parent).addAugment(builder); + ((UsesNodeBuilder) parentBuilder).addAugment(builder); } else { throw new YangParseException(name, line, "Augment can be declared only under module or uses statement."); } @@ -540,22 +586,22 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return builder; } - public UsesNodeBuilder addUsesNode(final int line, final String groupingPathStr) { + public UsesNodeBuilder addUsesNode(final int line, final SchemaPath grouping) { checkNotSealed(); - final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, groupingPathStr); + final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, grouping); - Builder parent = getActualNode(); - usesBuilder.setParent(parent); + Builder parentBuilder = getActualNode(); + usesBuilder.setParent(parentBuilder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addUsesNode(usesBuilder); } else { - if (!(parent instanceof DataNodeContainerBuilder)) { - throw new YangParseException(name, line, "Unresolved parent of uses '" + groupingPathStr + "'."); + if (!(parentBuilder instanceof DataNodeContainerBuilder)) { + throw new YangParseException(name, line, "Unresolved parent of uses '" + grouping + "'."); } - ((DataNodeContainerBuilder) parent).addUsesNode(usesBuilder); + ((DataNodeContainerBuilder) parentBuilder).addUsesNode(usesBuilder); } - if (parent instanceof AugmentationSchemaBuilder) { + if (parentBuilder instanceof AugmentationSchemaBuilder) { usesBuilder.setAugmenting(true); } @@ -565,23 +611,23 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public void addRefine(final RefineHolderImpl refine) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof UsesNodeBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof UsesNodeBuilder)) { throw new YangParseException(name, refine.getLine(), "refine can be defined only in uses statement"); } - ((UsesNodeBuilder) parent).addRefine(refine); - refine.setParent(parent); + ((UsesNodeBuilder) parentBuilder).addRefine(refine); + refine.setParent(parentBuilder); } public RpcDefinitionBuilder addRpc(final int line, final QName qname, final SchemaPath path) { checkNotSealed(); - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "rpc can be defined only in module or submodule"); } final RpcDefinitionBuilder rpcBuilder = new RpcDefinitionBuilder(name, line, qname, path); - rpcBuilder.setParent(parent); + rpcBuilder.setParent(parentBuilder); String rpcName = qname.getLocalName(); checkNotConflictingInDataNamespace(rpcName, line); @@ -609,11 +655,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ContainerSchemaNodeBuilder addRpcInput(final int line, final QName qname, final SchemaPath schemaPath) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof RpcDefinitionBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof RpcDefinitionBuilder)) { throw new YangParseException(name, line, "input can be defined only in rpc statement"); } - final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parent; + final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parentBuilder; final ContainerSchemaNodeBuilder inputBuilder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); inputBuilder.setParent(rpc); @@ -624,11 +670,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ContainerSchemaNodeBuilder addRpcOutput(final SchemaPath schemaPath, final QName qname, final int line) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof RpcDefinitionBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof RpcDefinitionBuilder)) { throw new YangParseException(name, line, "output can be defined only in rpc statement"); } - final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parent; + final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parentBuilder; final ContainerSchemaNodeBuilder outputBuilder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); outputBuilder.setParent(rpc); @@ -644,8 +690,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public NotificationBuilder addNotification(final int line, final QName qname, final SchemaPath path) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent.equals(this))) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "notification can be defined only in module or submodule"); } @@ -653,20 +699,20 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotConflictingInDataNamespace(notificationName, line); final NotificationBuilder builder = new NotificationBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedNotifications.add(builder); return builder; } public FeatureBuilder addFeature(final int line, final QName qname, final SchemaPath path) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "feature can be defined only in module or submodule"); } final FeatureBuilder builder = new FeatureBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); String featureName = qname.getLocalName(); for (FeatureBuilder addedFeature : addedFeatures) { @@ -681,26 +727,26 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ChoiceBuilder addChoice(final int line, final QName qname, final SchemaPath path) { final ChoiceBuilder builder = new ChoiceBuilder(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } public ChoiceCaseBuilder addCase(final int line, final QName qname, final SchemaPath path) { - Builder parent = getActualNode(); - if (parent == null || parent.equals(this)) { + Builder parentBuilder = getActualNode(); + if (parentBuilder == null || parentBuilder.equals(this)) { throw new YangParseException(name, line, "'case' parent not found"); } final ChoiceCaseBuilder builder = new ChoiceCaseBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); - if (parent instanceof ChoiceBuilder) { - ((ChoiceBuilder) parent).addCase(builder); - } else if (parent instanceof AugmentationSchemaBuilder) { - ((AugmentationSchemaBuilder) parent).addChildNode(builder); + if (parentBuilder instanceof ChoiceBuilder) { + ((ChoiceBuilder) parentBuilder).addCase(builder); + } else if (parentBuilder instanceof AugmentationSchemaBuilder) { + ((AugmentationSchemaBuilder) parentBuilder).addChildNode(builder); } else { throw new YangParseException(name, line, "Unresolved parent of 'case' " + qname.getLocalName()); } @@ -711,9 +757,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public AnyXmlBuilder addAnyXml(final int line, final QName qname, final SchemaPath schemaPath) { final AnyXmlBuilder builder = new AnyXmlBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -723,7 +769,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im String nodeName = typedefBuilder.getQName().getLocalName(); for (TypeDefinitionBuilder tdb : getTypeDefinitionBuilders()) { if (tdb.getQName().getLocalName().equals(nodeName)) { - raiseYangParserException("", "typedef", nodeName, typedefBuilder.getLine(), tdb.getLine()); + raiseYangParserException("", TYPEDEF_STR, nodeName, typedefBuilder.getLine(), tdb.getLine()); } } super.addTypedef(typedefBuilder); @@ -732,26 +778,26 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public TypeDefinitionBuilderImpl addTypedef(final int line, final QName qname, final SchemaPath path) { final TypeDefinitionBuilderImpl builder = new TypeDefinitionBuilderImpl(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); String typedefName = qname.getLocalName(); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addTypedef(builder); } else { - if (parent instanceof DataNodeContainerBuilder) { - DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parent; + if (parentBuilder instanceof DataNodeContainerBuilder) { + DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parentBuilder; for (TypeDefinitionBuilder child : parentNode.getTypeDefinitionBuilders()) { if (child.getQName().getLocalName().equals(typedefName)) { - raiseYangParserException("", "typedef", typedefName, line, child.getLine()); + raiseYangParserException("", TYPEDEF_STR, typedefName, line, child.getLine()); } } parentNode.addTypedef(builder); - } else if (parent instanceof RpcDefinitionBuilder) { - RpcDefinitionBuilder rpcParent = (RpcDefinitionBuilder) parent; + } else if (parentBuilder instanceof RpcDefinitionBuilder) { + RpcDefinitionBuilder rpcParent = (RpcDefinitionBuilder) parentBuilder; for (TypeDefinitionBuilder tdb : rpcParent.getTypeDefinitions()) { if (tdb.getQName().getLocalName().equals(builder.getQName().getLocalName())) { - raiseYangParserException("", "typedef", typedefName, line, tdb.getLine()); + raiseYangParserException("", TYPEDEF_STR, typedefName, line, tdb.getLine()); } } rpcParent.addTypedef(builder); @@ -764,22 +810,22 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setType(final TypeDefinition type) { - Builder parent = getActualNode(); - if (!(parent instanceof TypeAwareBuilder)) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof TypeAwareBuilder)) { throw new YangParseException("Failed to set type '" + type.getQName().getLocalName() - + "'. Invalid parent node: " + parent); + + "'. Invalid parent node: " + parentBuilder); } - ((TypeAwareBuilder) parent).setType(type); + ((TypeAwareBuilder) parentBuilder).setType(type); } public UnionTypeBuilder addUnionType(final int line, final QNameModule module) { - final Builder parent = getActualNode(); - if (parent == null) { + final Builder parentBuilder = getActualNode(); + if (parentBuilder == null) { throw new YangParseException(name, line, "Unresolved parent of union type"); } else { final UnionTypeBuilder union = new UnionTypeBuilder(name, line); - if (parent instanceof TypeAwareBuilder) { - ((TypeAwareBuilder) parent).setTypedef(union); + if (parentBuilder instanceof TypeAwareBuilder) { + ((TypeAwareBuilder) parentBuilder).setTypedef(union); return union; } else { throw new YangParseException(name, line, "Invalid parent of union type."); @@ -790,12 +836,12 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public void addIdentityrefType(final int line, final SchemaPath schemaPath, final String baseString) { final IdentityrefTypeBuilder identityref = new IdentityrefTypeBuilder(name, line, baseString, schemaPath); - final Builder parent = getActualNode(); - if (parent == null) { + final Builder parentBuilder = getActualNode(); + if (parentBuilder == null) { throw new YangParseException(name, line, "Unresolved parent of identityref type."); } else { - if (parent instanceof TypeAwareBuilder) { - final TypeAwareBuilder typeParent = (TypeAwareBuilder) parent; + if (parentBuilder instanceof TypeAwareBuilder) { + final TypeAwareBuilder typeParent = (TypeAwareBuilder) parentBuilder; typeParent.setTypedef(identityref); dirtyNodes.add(typeParent); } else { @@ -804,21 +850,21 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } - public DeviationBuilder addDeviation(final int line, final String targetPath) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + public DeviationBuilder addDeviation(final int line, final SchemaPath targetPath) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "deviation can be defined only in module or submodule"); } final DeviationBuilder builder = new DeviationBuilder(name, line, targetPath); - builder.setParent(parent); + builder.setParent(parentBuilder); deviationBuilders.add(builder); return builder; } public IdentitySchemaNodeBuilder addIdentity(final QName qname, final int line, final SchemaPath path) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "identity can be defined only in module or submodule"); } String identityName = qname.getLocalName(); @@ -829,7 +875,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } final IdentitySchemaNodeBuilder builder = new IdentitySchemaNodeBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedIdentities.add(builder); return builder; } @@ -841,20 +887,20 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public UnknownSchemaNodeBuilderImpl addUnknownSchemaNode(final int line, final QName qname, final SchemaPath path) { - final Builder parent = getActualNode(); + final Builder parentBuilder = getActualNode(); final UnknownSchemaNodeBuilderImpl builder = new UnknownSchemaNodeBuilderImpl(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); allUnknownNodes.add(builder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addedUnknownNodes.add(builder); } else { - if (parent instanceof SchemaNodeBuilder) { - parent.addUnknownNodeBuilder(builder); - } else if (parent instanceof DataNodeContainerBuilder) { - parent.addUnknownNodeBuilder(builder); - } else if (parent instanceof RefineHolderImpl) { - parent.addUnknownNodeBuilder(builder); + if (parentBuilder instanceof SchemaNodeBuilder) { + parentBuilder.addUnknownNodeBuilder(builder); + } else if (parentBuilder instanceof DataNodeContainerBuilder) { + parentBuilder.addUnknownNodeBuilder(builder); + } else if (parentBuilder instanceof RefineHolderImpl) { + parentBuilder.addUnknownNodeBuilder(builder); } else { throw new YangParseException(name, line, "Unresolved parent of unknown node '" + qname.getLocalName() + "'"); @@ -886,9 +932,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setSource(final ByteSource byteSource) throws IOException { - try (InputStream stream = byteSource.openStream()) { - setSource(IOUtils.toString(stream)); - } + setSource(byteSource.asCharSource(Charsets.UTF_8).read()); } public void setSource(final String source) { @@ -1007,10 +1051,6 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } - private ModuleImport createModuleImport(final String moduleName, final Date revision, final String prefix) { - return new ModuleImportImpl(moduleName, revision, prefix); - } - private void raiseYangParserException(final String cantAddType, final String type, final String name, final int currentLine, final int duplicateLine) {