Merge "Moved parsing of unknown nodes from implementation to abstract classes."
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / api / AbstractDataNodeContainerBuilder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.yang.parser.builder.api;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Set;
15
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;
22
23 /**
24  * Basic implementation of DataNodeContainerBuilder.
25  */
26 public abstract class AbstractDataNodeContainerBuilder implements DataNodeContainerBuilder {
27     protected final int line;
28     protected final QName qname;
29     protected Builder parent;
30
31     protected Set<DataSchemaNode> childNodes;
32     protected final Set<DataSchemaNodeBuilder> addedChildNodes = new HashSet<DataSchemaNodeBuilder>();
33
34     protected Set<GroupingDefinition> groupings;
35     protected final Set<GroupingBuilder> addedGroupings = new HashSet<GroupingBuilder>();
36
37     protected List<UnknownSchemaNode> unknownNodes;
38     protected final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
39
40     protected AbstractDataNodeContainerBuilder(final int line, final QName qname) {
41         this.line = line;
42         this.qname = qname;
43     }
44
45     @Override
46     public int getLine() {
47         return line;
48     }
49
50     @Override
51     public Builder getParent() {
52         return parent;
53     }
54
55     @Override
56     public void setParent(final Builder parent) {
57         this.parent = parent;
58     }
59
60     @Override
61     public QName getQName() {
62         return qname;
63     }
64
65     @Override
66     public Set<DataSchemaNode> getChildNodes() {
67         if (childNodes == null) {
68             return Collections.emptySet();
69         }
70         return childNodes;
71     }
72
73     public void setChildNodes(Set<DataSchemaNode> childNodes) {
74         this.childNodes = childNodes;
75     }
76
77     @Override
78     public Set<DataSchemaNodeBuilder> getChildNodeBuilders() {
79         return addedChildNodes;
80     }
81
82     @Override
83     public DataSchemaNodeBuilder getDataChildByName(final String name) {
84         for (DataSchemaNodeBuilder child : addedChildNodes) {
85             if (child.getQName().getLocalName().equals(name)) {
86                 return child;
87             }
88         }
89         return null;
90     }
91
92     @Override
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());
97             }
98         }
99         addedChildNodes.add(child);
100     }
101
102     @Override
103     public Set<GroupingDefinition> getGroupings() {
104         if (groupings == null) {
105             return Collections.emptySet();
106         }
107         return groupings;
108     }
109
110     public void setGroupings(final Set<GroupingDefinition> groupings) {
111         this.groupings = groupings;
112     }
113
114     public Set<GroupingBuilder> getGroupingBuilders() {
115         return addedGroupings;
116     }
117
118     @Override
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());
123             }
124         }
125         addedGroupings.add(groupingBuilder);
126     }
127
128     @Override
129     public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
130         return addedUnknownNodes;
131     }
132
133     @Override
134     public void addUnknownNodeBuilder(UnknownSchemaNodeBuilder unknownNode) {
135         addedUnknownNodes.add(unknownNode);
136     }
137
138     public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
139         this.unknownNodes = unknownNodes;
140     }
141
142 }