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=79e992028dc52f7e2ee3f299393f9b9e7e9c7f19;hb=42abb28b99a02f9580f4676ce5c315628e5bcd24;hp=0ca1eb88f62c859efcf31bd24a6aa5706a732cc8;hpb=93e8c16d8deff8cd2935d09c445d2d7082503cb4;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 0ca1eb88f6..79e992028d 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,27 +1,33 @@ /* - * 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.Objects; 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; import org.opendaylight.yangtools.yang.model.api.Deviation; import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; @@ -55,16 +61,20 @@ import org.opendaylight.yangtools.yang.parser.util.YangParseException; * Builder of Module object. If this module is dependent on external * module/modules, these dependencies must be resolved before module is built, * otherwise result may not be valid. + * + * @deprecated Pre-Beryllium implementation, scheduled for removal. */ +@Deprecated public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DocumentedNodeBuilder { - + private static final QNameModule EMPTY_QNAME_MODULE = QNameModule.create(null, null).intern(); + 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 URI namespace; private String prefix; - private Date revision; + private QNameModule qnameModule = EMPTY_QNAME_MODULE; private final boolean submodule; private String belongsTo; @@ -73,7 +83,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<>(); @@ -123,7 +138,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(); @@ -131,9 +146,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im submodule = false; yangVersion = base.getYangVersion(); actualPath.push(this);//FIXME: this escapes constructor - namespace = base.getNamespace(); prefix = base.getPrefix(); - revision = base.getRevision(); + qnameModule = base.getQNameModule(); augments.addAll(base.getAugmentations()); rpcs.addAll(base.getRpcs()); @@ -166,6 +180,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()); @@ -321,11 +340,19 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public URI getNamespace() { - return namespace; + return qnameModule.getNamespace(); + } + + public QNameModule getQNameModule() { + return qnameModule; + } + + public void setQNameModule(final QNameModule qnameModule) { + this.qnameModule = Preconditions.checkNotNull(qnameModule); } public void setNamespace(final URI namespace) { - this.namespace = namespace; + this.qnameModule = QNameModule.create(namespace, qnameModule.getRevision()).intern(); } public String getPrefix() { @@ -333,13 +360,38 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public Date getRevision() { - return revision; + 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; } @@ -362,7 +414,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setRevision(final Date revision) { - this.revision = revision; + this.qnameModule = QNameModule.create(qnameModule.getNamespace(), revision).intern(); } public void setPrefix(final String prefix) { @@ -381,20 +433,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"); } @@ -405,7 +463,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; } @@ -414,9 +472,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; } @@ -425,9 +483,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; @@ -437,9 +495,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; } @@ -448,9 +506,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; } @@ -459,31 +517,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); @@ -496,14 +554,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( @@ -514,13 +574,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."); } @@ -530,22 +590,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); } @@ -555,23 +615,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); @@ -599,11 +659,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); @@ -614,11 +674,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); @@ -634,8 +694,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"); } @@ -643,20 +703,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) { @@ -671,26 +731,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()); } @@ -701,9 +761,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; } @@ -713,7 +773,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); @@ -722,26 +782,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); @@ -754,22 +814,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 URI namespace, final Date revision) { - final Builder parent = getActualNode(); - if (parent == null) { + public UnionTypeBuilder addUnionType(final int line, final QNameModule module) { + 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."); @@ -780,12 +840,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 { @@ -794,21 +854,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(); @@ -819,7 +879,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; } @@ -831,20 +891,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() + "'"); @@ -875,10 +935,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return "module " + name; } - public void setSource(ByteSource byteSource) throws IOException { - try (InputStream stream = byteSource.openStream()) { - setSource(IOUtils.toString(stream)); - } + public void setSource(final ByteSource byteSource) throws IOException { + setSource(byteSource.asCharSource(Charsets.UTF_8).read()); } public void setSource(final String source) { @@ -997,10 +1055,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) { @@ -1020,10 +1074,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((namespace == null) ? 0 : namespace.hashCode()); - result = prime * result + ((revision == null) ? 0 : revision.hashCode()); - result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); + result = prime * result + Objects.hashCode(name); + result = prime * result + qnameModule.hashCode(); + result = prime * result + Objects.hashCode(prefix); return result; } @@ -1047,11 +1100,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } else if (!name.equals(other.name)) { return false; } - if (namespace == null) { - if (other.namespace != null) { - return false; - } - } else if (!namespace.equals(other.namespace)) { + if (!qnameModule.equals(other.qnameModule)) { return false; } if (prefix == null) { @@ -1061,13 +1110,6 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } else if (!prefix.equals(other.prefix)) { return false; } - if (revision == null) { - if (other.revision != null) { - return false; - } - } else if (!revision.equals(other.revision)) { - return false; - } return true; }