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%2FUsesNodeBuilderImpl.java;h=6e4e2909524d7d7abdccfa432ed3893534b32707;hb=42abb28b99a02f9580f4676ce5c315628e5bcd24;hp=7da9c5edffb5a45545e646a2f015ca12d3b3798b;hpb=32a3e022c270af8a7173de9ac82321af99143116;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/UsesNodeBuilderImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/UsesNodeBuilderImpl.java index 7da9c5edff..6e4e290952 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/UsesNodeBuilderImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/UsesNodeBuilderImpl.java @@ -1,418 +1,248 @@ -/* - * 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 java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; -import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; -import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -import org.opendaylight.yangtools.yang.model.api.UsesNode; -import org.opendaylight.yangtools.yang.parser.builder.api.AbstractBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.Builder; -import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder; -import org.opendaylight.yangtools.yang.parser.util.RefineHolder; -import org.opendaylight.yangtools.yang.parser.util.YangParseException; - -public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder { - private boolean isBuilt; - private UsesNodeImpl instance; - private DataNodeContainerBuilder parent; - private final String groupingName; - private SchemaPath groupingPath; - private GroupingDefinition groupingDefinition; - private GroupingBuilder groupingBuilder; - private boolean augmenting; - private boolean addedByUses; - private final Set addedAugments = new HashSet(); - private final List refineBuilders = new ArrayList(); - private final List refines = new ArrayList(); - - private Set targetChildren = new HashSet<>(); - private Set targetGroupings = new HashSet<>(); - private Set targetTypedefs = new HashSet<>(); - private List targetUnknownNodes = new ArrayList<>(); - - private boolean dataCollected; - private boolean parentUpdated; - - @Override - public boolean isDataCollected() { - return dataCollected; - } - - @Override - public void setDataCollected(boolean dataCollected) { - this.dataCollected = dataCollected; - } - - @Override - public boolean isParentUpdated() { - return parentUpdated; - } - - @Override - public void setParentUpdated(boolean parentUpdated) { - this.parentUpdated = parentUpdated; - } - - public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName) { - super(moduleName, line); - this.groupingName = groupingName; - } - - @Override - public UsesNode build() { - if (!isBuilt) { - instance = new UsesNodeImpl(groupingPath); - instance.setAugmenting(augmenting); - instance.setAddedByUses(addedByUses); - - // AUGMENTATIONS - final Set augments = new HashSet(); - for (AugmentationSchemaBuilder builder : addedAugments) { - augments.add(builder.build()); - } - instance.setAugmentations(augments); - - // REFINES - final Map refineNodes = new HashMap(); - for (SchemaNodeBuilder refineBuilder : refineBuilders) { - SchemaNode refineNode = refineBuilder.build(); - refineNodes.put(refineNode.getPath(), refineNode); - } - instance.setRefines(refineNodes); - - // UNKNOWN NODES - List unknownNodes = new ArrayList(); - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); - } - instance.setUnknownSchemaNodes(unknownNodes); - - isBuilt = true; - } - - return instance; - } - - @Override - public DataNodeContainerBuilder getParent() { - return parent; - } - - @Override - public void setParent(Builder parent) { - if (!(parent instanceof DataNodeContainerBuilder)) { - throw new YangParseException(moduleName, line, "Unresolved parent of uses '" + groupingName + "'."); - } - this.parent = (DataNodeContainerBuilder) parent; - } - - @Override - public SchemaPath getGroupingPath() { - return groupingPath; - } - - @Override - public void setGroupingPath(SchemaPath groupingPath) { - this.groupingPath = groupingPath; - } - - @Override - public GroupingDefinition getGroupingDefinition() { - return groupingDefinition; - } - - @Override - public void setGroupingDefinition(GroupingDefinition groupingDefinition) { - this.groupingDefinition = groupingDefinition; - } - - @Override - public GroupingBuilder getGroupingBuilder() { - return groupingBuilder; - } - - @Override - public void setGrouping(GroupingBuilder grouping) { - this.groupingBuilder = grouping; - } - - @Override - public String getGroupingName() { - return groupingName; - } - - @Override - public Set getAugmentations() { - return addedAugments; - } - - @Override - public void addAugment(final AugmentationSchemaBuilder augmentBuilder) { - addedAugments.add(augmentBuilder); - } - - @Override - public boolean isAugmenting() { - return augmenting; - } - - @Override - public void setAugmenting(final boolean augmenting) { - this.augmenting = augmenting; - } - - @Override - public boolean isAddedByUses() { - return addedByUses; - } - - @Override - public void setAddedByUses(final boolean addedByUses) { - this.addedByUses = addedByUses; - } - - @Override - public List getRefineNodes() { - return refineBuilders; - } - - @Override - public void addRefineNode(DataSchemaNodeBuilder refineNode) { - refineBuilders.add(refineNode); - } - - @Override - public List getRefines() { - return refines; - } - - @Override - public void addRefine(RefineHolder refine) { - refines.add(refine); - } - - @Override - public Set getTargetChildren() { - return targetChildren; - } - - @Override - public void setTargetChildren(Set targetChildren) { - this.targetChildren = targetChildren; - } - - @Override - public Set getTargetGroupings() { - return targetGroupings; - } - - @Override - public void setTargetGroupings(Set targetGroupings) { - this.targetGroupings = targetGroupings; - } - - @Override - public Set getTargetTypedefs() { - return targetTypedefs; - } - - @Override - public void setTargetTypedefs(Set targetTypedefs) { - this.targetTypedefs = targetTypedefs; - } - - @Override - public List getTargetUnknownNodes() { - return targetUnknownNodes; - } - - @Override - public void setTargetUnknownNodes(List targetUnknownNodes) { - this.targetUnknownNodes = targetUnknownNodes; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((groupingName == null) ? 0 : groupingName.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj; - if (groupingName == null) { - if (other.groupingName != null) - return false; - } else if (!groupingName.equals(other.groupingName)) - return false; - - if (parent == null) { - if (other.parent != null) - return false; - } else if (!parent.equals(other.parent)) - return false; - if (refines == null) { - if (other.refines != null) - return false; - } else if (!refines.equals(other.refines)) - return false; - return true; - } - - @Override - public String toString() { - return "uses '" + groupingName + "'"; - } - - public final class UsesNodeImpl implements UsesNode { - private final SchemaPath groupingPath; - private Set augmentations = Collections.emptySet(); - private boolean augmenting; - private boolean addedByUses; - private Map refines = Collections.emptyMap(); - private List unknownNodes = Collections.emptyList(); - - private UsesNodeImpl(final SchemaPath groupingPath) { - this.groupingPath = groupingPath; - } - - @Override - public SchemaPath getGroupingPath() { - return groupingPath; - } - - @Override - public Set getAugmentations() { - return augmentations; - } - - private void setAugmentations(final Set augmentations) { - if (augmentations != null) { - this.augmentations = augmentations; - } - } - - @Override - public boolean isAugmenting() { - return augmenting; - } - - private void setAugmenting(final boolean augmenting) { - this.augmenting = augmenting; - } - - @Override - public boolean isAddedByUses() { - return addedByUses; - } - - private void setAddedByUses(final boolean addedByUses) { - this.addedByUses = addedByUses; - } - - @Override - public Map getRefines() { - return refines; - } - - private void setRefines(Map refines) { - if (refines != null) { - this.refines = refines; - } - } - - public List getUnknownSchemaNodes() { - return unknownNodes; - } - - private void setUnknownSchemaNodes(List unknownSchemaNodes) { - if (unknownSchemaNodes != null) { - this.unknownNodes = unknownSchemaNodes; - } - } - - public UsesNodeBuilder toBuilder() { - return UsesNodeBuilderImpl.this; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode()); - result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode()); - result = prime * result + (augmenting ? 1231 : 1237); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final UsesNodeImpl other = (UsesNodeImpl) obj; - if (groupingPath == null) { - if (other.groupingPath != null) { - return false; - } - } else if (!groupingPath.equals(other.groupingPath)) { - return false; - } - if (augmentations == null) { - if (other.augmentations != null) { - return false; - } - } else if (!augmentations.equals(other.augmentations)) { - return false; - } - if (augmenting != other.augmenting) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(UsesNodeImpl.class.getSimpleName()); - sb.append("[groupingPath=" + groupingPath + "]"); - return sb.toString(); - } - } - -} +/* + * 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.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.Builder; +import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.RefineBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.util.AbstractBuilder; +import org.opendaylight.yangtools.yang.parser.util.YangParseException; + +/** + * @deprecated Pre-Beryllium implementation, scheduled for removal. + */ +@Deprecated +public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder { + private UsesNodeImpl instance; + private DataNodeContainerBuilder parentBuilder; + private final SchemaPath targetGroupingPath; + private SchemaPath groupingPath; + private GroupingDefinition groupingDefinition; + private GroupingBuilder groupingBuilder; + private boolean addedByUses; + private boolean augmenting; + private boolean resolved; + private final Set augmentationBuilders = new HashSet<>(); + private final List refineBuilders = new ArrayList<>(); + private final List refines = new ArrayList<>(); + + public UsesNodeBuilderImpl(final String moduleName, final int line, final SchemaPath targetGroupingPath) { + super(moduleName, line); + this.targetGroupingPath = targetGroupingPath; + } + + @Override + public UsesNode build() { + if (instance != null) { + return instance; + } + + instance = new UsesNodeImpl(groupingPath); + instance.setAddedByUses(addedByUses); + + // AUGMENTATIONS + final Set augments = new HashSet<>(); + for (AugmentationSchemaBuilder builder : augmentationBuilders) { + if (!builder.isUnsupportedTarget()) { + augments.add(builder.build()); + } + } + instance.augmentations = ImmutableSet.copyOf(augments); + + // REFINES + final Map refineNodes = new HashMap<>(); + for (SchemaNodeBuilder refineBuilder : refineBuilders) { + SchemaNode refineNode = refineBuilder.build(); + refineNodes.put(refineNode.getPath(), refineNode); + } + instance.refines = ImmutableMap.copyOf(refineNodes); + + // UNKNOWN NODES + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + instance.unknownNodes = ImmutableList.copyOf(unknownNodes); + + return instance; + } + + @Override + public DataNodeContainerBuilder getParent() { + return parentBuilder; + } + + @Override + public void setParent(final Builder parent) { + if (!(parent instanceof DataNodeContainerBuilder)) { + throw new YangParseException(getModuleName(), getLine(), + "Parent of 'uses' has to be instance of DataNodeContainerBuilder, but was: '" + parent + "'."); + } + this.parentBuilder = (DataNodeContainerBuilder) parent; + } + + @Override + public SchemaPath getGroupingPath() { + return groupingPath; + } + + @Override + public GroupingDefinition getGroupingDefinition() { + return groupingDefinition; + } + + @Override + public void setGroupingDefinition(final GroupingDefinition groupingDefinition) { + this.groupingDefinition = groupingDefinition; + if (groupingDefinition != null) { + this.groupingPath = groupingDefinition.getPath(); + } + } + + @Override + public GroupingBuilder getGroupingBuilder() { + return groupingBuilder; + } + + @Override + public void setGrouping(final GroupingBuilder grouping) { + this.groupingBuilder = grouping; + if (groupingBuilder != null) { + this.groupingPath = groupingBuilder.getPath(); + } + } + + @Override + public SchemaPath getTargetGroupingPath() { + return targetGroupingPath; + } + + @Override + public Set getAugmentations() { + return augmentationBuilders; + } + + @Override + public void addAugment(final AugmentationSchemaBuilder augmentBuilder) { + augmentationBuilders.add(augmentBuilder); + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public void setAugmenting(final boolean augmenting) { + this.augmenting = augmenting; + } + + @Override + public boolean isResolved() { + return resolved; + } + + @Override + public void setResolved(final boolean resolved) { + this.resolved = resolved; + } + + @Override + public List getRefineNodes() { + return refineBuilders; + } + + @Override + public void addRefineNode(final DataSchemaNodeBuilder refineNode) { + refineBuilders.add(refineNode); + } + + @Override + public List getRefines() { + return refines; + } + + @Override + public void addRefine(final RefineBuilder refine) { + refines.add(refine); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Objects.hashCode(groupingPath); + result = prime * result + Objects.hashCode(parentBuilder); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj; + if (groupingPath == null) { + if (other.groupingPath != null) { + return false; + } + } else if (!groupingPath.equals(other.groupingPath)) { + return false; + } + if (parentBuilder == null) { + if (other.parentBuilder != null) { + return false; + } + } else if (!parentBuilder.equals(other.parentBuilder)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "uses '" + groupingPath + "'"; + } + +}