BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UnionTypeBuilder.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.yangtools.yang.parser.builder.impl;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
15 import org.opendaylight.yangtools.yang.model.api.Status;
16 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
17 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
18 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
19 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
20 import org.opendaylight.yangtools.yang.model.util.BaseTypes;
21 import org.opendaylight.yangtools.yang.model.util.UnionType;
22 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractTypeAwareBuilder;
25 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
26
27 /**
28  * Builder for YANG union type. User can add type to this union as
29  * TypeDefinition object (resolved type) or in form of TypeDefinitionBuilder.
30  * When build is called, types in builder form will be built and add to resolved
31  * types.
32  *
33  * @deprecated Pre-Beryllium implementation, scheduled for removal.
34  */
35 @Deprecated
36 public final class UnionTypeBuilder extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
37     private static final SchemaPath SCHEMA_PATH = SchemaPath.create(true, BaseTypes.UNION_QNAME);
38     private static final String NAME = "union";
39
40     private final List<TypeDefinition<?>> types;
41     private final List<TypeDefinitionBuilder> typedefs;
42     private UnionType instance;
43     private boolean isBuilt;
44
45     private final List<QName> baseTypesQNames = new ArrayList<>();
46
47     public UnionTypeBuilder(final String moduleName, final int line) {
48         super(moduleName, line, BaseTypes.UNION_QNAME);
49         types = new ArrayList<>();
50         typedefs = new ArrayList<>();
51     }
52
53     public List<QName> getBaseTypeQNames() {
54         return baseTypesQNames;
55     }
56
57     @Override
58     public void setTypeQName(final QName qname) {
59         baseTypesQNames.add(qname);
60     }
61
62     public List<TypeDefinition<?>> getTypes() {
63         return types;
64     }
65
66     @Override
67     public void setQName(final QName qname) {
68         throw new UnsupportedOperationException("Can not set qname to union type");
69     }
70
71     @Override
72     public TypeDefinition<?> getType() {
73         return null;
74     }
75
76     public List<TypeDefinitionBuilder> getTypedefs() {
77         return typedefs;
78     }
79
80     @Override
81     public TypeDefinitionBuilder getTypedef() {
82         return null;
83     }
84
85     @Override
86     public void setType(final TypeDefinition<?> type) {
87         types.add(type);
88     }
89
90     @Override
91     public void setTypedef(final TypeDefinitionBuilder tdb) {
92         typedefs.add(tdb);
93     }
94
95     @Override
96     public UnionType build() {
97         if (!isBuilt) {
98             for (TypeDefinitionBuilder tdb : typedefs) {
99                 types.add(tdb.build());
100             }
101             instance = UnionType.create(types);
102             isBuilt = true;
103         }
104         return instance;
105     }
106
107     @Override
108     public void setDescription(final String description) {
109         throw new YangParseException(getModuleName(), getLine(), "Can not set description to " + NAME);
110     }
111
112     @Override
113     public void setReference(final String reference) {
114         throw new YangParseException(getModuleName(), getLine(), "Can not set reference to " + NAME);
115     }
116
117     @Override
118     public void setStatus(final Status status) {
119         throw new YangParseException(getModuleName(), getLine(), "Can not set status to " + NAME);
120     }
121
122     @Override
123     public boolean isAddedByUses() {
124         return false;
125     }
126
127     @Override
128     public void setAddedByUses(final boolean addedByUses) {
129         throw new YangParseException(getModuleName(), getLine(), "Union type can not be added by uses.");
130     }
131
132     @Override
133     public void addUnknownNodeBuilder(final UnknownSchemaNodeBuilder unknownNode) {
134         // not yet supported
135     }
136
137     @Override
138     public SchemaPath getPath() {
139         return SCHEMA_PATH;
140     }
141
142     @Override
143     public void setPath(final SchemaPath path) {
144         throw new YangParseException(getModuleName(), getLine(), "Can not set path to " + NAME);
145     }
146
147     @Override
148     public String getDescription() {
149         return null;
150     }
151
152     @Override
153     public String getReference() {
154         return null;
155     }
156
157     @Override
158     public Status getStatus() {
159         return null;
160     }
161
162     @Override
163     public List<RangeConstraint> getRanges() {
164         return Collections.emptyList();
165     }
166
167     @Override
168     public void setRanges(final List<RangeConstraint> ranges) {
169         throw new YangParseException(getModuleName(), getLine(), "Can not set ranges to " + NAME);
170     }
171
172     @Override
173     public List<LengthConstraint> getLengths() {
174         return Collections.emptyList();
175     }
176
177     @Override
178     public void setLengths(final List<LengthConstraint> lengths) {
179         throw new YangParseException(getModuleName(), getLine(), "Can not set lengths to " + NAME);
180     }
181
182     @Override
183     public List<PatternConstraint> getPatterns() {
184         return Collections.emptyList();
185     }
186
187     @Override
188     public void setPatterns(final List<PatternConstraint> patterns) {
189         throw new YangParseException(getModuleName(), getLine(), "Can not set patterns to " + NAME);
190     }
191
192     @Override
193     public Integer getFractionDigits() {
194         return null;
195     }
196
197     @Override
198     public void setFractionDigits(final Integer fractionDigits) {
199         throw new YangParseException(getModuleName(), getLine(), "Can not set fraction digits to " + NAME);
200     }
201
202     @Override
203     public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
204         return Collections.emptyList();
205     }
206
207     @Override
208     public Object getDefaultValue() {
209         return null;
210     }
211
212     @Override
213     public void setDefaultValue(final Object defaultValue) {
214         throw new YangParseException(getModuleName(), getLine(), "Can not set default value to " + NAME);
215     }
216
217     @Override
218     public String getUnits() {
219         return null;
220     }
221
222     @Override
223     public void setUnits(final String units) {
224         throw new YangParseException(getModuleName(), getLine(), "Can not set units to " + NAME);
225     }
226
227     @Override
228     public String toString() {
229         final StringBuilder result = new StringBuilder(UnionTypeBuilder.class.getSimpleName());
230         result.append("[");
231         result.append("types=");
232         result.append(types);
233         result.append(", typedefs=");
234         result.append(typedefs);
235         result.append("]");
236         return result.toString();
237     }
238
239 }