2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.yang.parser.builder.api;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
16 import org.opendaylight.controller.yang.common.QName;
17 import org.opendaylight.controller.yang.model.api.DataSchemaNode;
18 import org.opendaylight.controller.yang.model.api.GroupingDefinition;
19 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
20 import org.opendaylight.controller.yang.parser.builder.impl.UnknownSchemaNodeBuilder;
21 import org.opendaylight.controller.yang.parser.util.YangParseException;
24 * Basic implementation of DataNodeContainerBuilder.
26 public abstract class AbstractDataNodeContainerBuilder implements DataNodeContainerBuilder {
27 protected final int line;
28 protected final QName qname;
29 protected Builder parent;
31 protected Set<DataSchemaNode> childNodes;
32 protected final Set<DataSchemaNodeBuilder> addedChildNodes = new HashSet<DataSchemaNodeBuilder>();
34 protected Set<GroupingDefinition> groupings;
35 protected final Set<GroupingBuilder> addedGroupings = new HashSet<GroupingBuilder>();
37 protected List<UnknownSchemaNode> unknownNodes;
38 protected final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
40 protected AbstractDataNodeContainerBuilder(final int line, final QName qname) {
46 public int getLine() {
51 public Builder getParent() {
56 public void setParent(final Builder parent) {
61 public QName getQName() {
66 public Set<DataSchemaNode> getChildNodes() {
67 if (childNodes == null) {
68 return Collections.emptySet();
73 public void setChildNodes(Set<DataSchemaNode> childNodes) {
74 this.childNodes = childNodes;
78 public Set<DataSchemaNodeBuilder> getChildNodeBuilders() {
79 return addedChildNodes;
83 public DataSchemaNodeBuilder getDataChildByName(final String name) {
84 for (DataSchemaNodeBuilder child : addedChildNodes) {
85 if (child.getQName().getLocalName().equals(name)) {
93 public void addChildNode(DataSchemaNodeBuilder child) {
94 for (DataSchemaNodeBuilder childNode : addedChildNodes) {
95 if (childNode.getQName().getLocalName().equals(child.getQName().getLocalName())) {
96 throw new YangParseException(child.getLine(), "Duplicate node found at line " + childNode.getLine());
99 addedChildNodes.add(child);
103 public Set<GroupingDefinition> getGroupings() {
104 if (groupings == null) {
105 return Collections.emptySet();
110 public void setGroupings(final Set<GroupingDefinition> groupings) {
111 this.groupings = groupings;
114 public Set<GroupingBuilder> getGroupingBuilders() {
115 return addedGroupings;
119 public void addGrouping(GroupingBuilder groupingBuilder) {
120 for (GroupingBuilder gb : addedGroupings) {
121 if (gb.getQName().getLocalName().equals(groupingBuilder.getQName().getLocalName())) {
122 throw new YangParseException(groupingBuilder.getLine(), "Duplicate node found at line " + gb.getLine());
125 addedGroupings.add(groupingBuilder);
129 public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
130 return addedUnknownNodes;
134 public void addUnknownNodeBuilder(UnknownSchemaNodeBuilder unknownNode) {
135 addedUnknownNodes.add(unknownNode);
138 public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
139 this.unknownNodes = unknownNodes;