Fix enum members' name
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / Rfc6020Mapping.java
1 /*
2  * Copyright (c) 2015 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.model.api;
9
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import javax.annotation.Nonnull;
13 import javax.annotation.Nullable;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.common.YangConstants;
16 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
17 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
18 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
28 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
29 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
30 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
32 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
33 import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
36 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
37 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
38 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
39 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
40 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
41 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
42 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
43 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
44 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
45 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
46 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
47 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
48 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
49 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
50 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
51 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
52 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
53 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
54 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
55 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
56 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
57 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
58 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
59 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
60 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
61 import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
62 import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
63 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
64 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
65 import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
66 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
67 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
68 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
69 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
70 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
71 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
72 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
73 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
74 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
75 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
76 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
77 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
78 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
79 import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
80 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
81 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
82 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
83
84 @Beta
85 public enum Rfc6020Mapping implements StatementDefinition {
86     ANYXML(AnyxmlStatement.class, "anyxml", "name"),
87     ARGUMENT(ArgumentStatement.class, "argument", "name"),
88     AUGMENT(AugmentStatement.class, "augment", "target-node"),
89     BASE(BaseStatement.class, "base", "name"),
90     BELONGS_TO(BelongsToStatement.class, "belongs-to", "module"),
91     BIT(BitStatement.class, "bit", "name"),
92     CASE(CaseStatement.class, "case", "name"),
93     CHOICE(ChoiceStatement.class, "choice", "name"),
94     CONFIG(ConfigStatement.class, "config", "value"),
95     CONTACT(ContactStatement.class, "contact", "text", true),
96     CONTAINER(ContainerStatement.class, "container", "name"),
97     DEFAULT(DefaultStatement.class, "default", "value"),
98     DESCRIPTION(DescriptionStatement.class, "description", "text", true),
99     DEVIATE(DeviateStatement.class, "deviate", "value"),
100     DEVIATION(DeviationStatement.class, "deviation", "target-node"),
101     ENUM(EnumStatement.class, "enum", "name"),
102     ERROR_APP_TAG(ErrorAppTagStatement.class, "error-app-tag", "value"),
103     ERROR_MESSAGE(ErrorMessageStatement.class, "error-message", "value", true),
104     EXTENSION(ExtensionStatement.class, "extension", "name"),
105     FEATURE(FeatureStatement.class, "feature", "name"),
106     FRACTION_DIGITS(FractionDigitsStatement.class, "fraction-digits", "value"),
107     GROUPING(GroupingStatement.class, "grouping", "name"),
108     IDENTITY(IdentityStatement.class, "identity", "name"),
109     IF_FEATURE(IfFeatureStatement.class, "if-feature", "name"),
110     IMPORT(ImportStatement.class, "import", "module"),
111     INCLUDE(IncludeStatement.class, "include", "module"),
112     INPUT(InputStatement.class, "input"),
113     KEY(KeyStatement.class, "key", "value"),
114     LEAF(LeafStatement.class, "leaf", "name"),
115     LEAF_LIST(LeafListStatement.class, "leaf-list", "name"),
116     LENGTH(LengthStatement.class, "length", "value"),
117     LIST(ListStatement.class, "list", "name"),
118     MANDATORY(MandatoryStatement.class, "mandatory", "value"),
119     MAX_ELEMENTS(MaxElementsStatement.class, "max-elements", "value"),
120     MIN_ELEMENTS(MinElementsStatement.class, "min-elements", "value"),
121     MODULE(ModuleStatement.class, "module", "name"),
122     MUST(MustStatement.class, "must", "condition"),
123     NAMESPACE(NamespaceStatement.class, "namespace", "uri"),
124     NOTIFICATION(NotificationStatement.class, "notification", "name"),
125     ORDERED_BY(OrderedByStatement.class, "ordered-by", "value"),
126     ORGANIZATION(OrganizationStatement.class, "organization", "text", true),
127     OUTPUT(OutputStatement.class, "output"),
128     PATH(PathStatement.class, "path", "value"),
129     PATTERN(PatternStatement.class, "pattern", "value"),
130     POSITION(PositionStatement.class, "position", "value"),
131     PREFIX(PrefixStatement.class, "prefix", "value"),
132     PRESENCE(PresenceStatement.class, "presence", "value"),
133     RANGE(RangeStatement.class, "range", "value"),
134     REFERENCE(ReferenceStatement.class, "reference", "text", true),
135     REFINE(RefineStatement.class, "refine", "target-node"),
136     REQUIRE_INSTANCE(RequireInstanceStatement.class, "require-instance", "value"),
137     REVISION(RevisionStatement.class, "revision", "date"),
138     REVISION_DATE(RevisionDateStatement.class, "revision-date", "date"),
139     RPC(RpcStatement.class, "rpc", "name"),
140     STATUS(StatusStatement.class, "status", "value"),
141     SUBMODULE(SubmoduleStatement.class, "submodule", "name"),
142     TYPE(TypeStatement.class, "type", "name"),
143     TYPEDEF(TypedefStatement.class, "typedef", "name"),
144     UNIQUE(UniqueStatement.class, "unique", "tag"),
145     UNITS(UnitsStatement.class, "units", "name"),
146     USES(UsesStatement.class, "uses", "name"),
147     VALUE(ValueStatement.class, "value", "value"),
148     WHEN(WhenStatement.class, "when", "condition"),
149     YANG_VERSION(YangVersionStatement.class, "yang-version", "value"),
150     YIN_ELEMENT(YinElementStatement.class, "yin-element", "value");
151
152     private final Class<? extends DeclaredStatement<?>> type;
153     private final QName name;
154     private final QName argument;
155     private final boolean yinElement;
156
157     private Rfc6020Mapping(Class<? extends DeclaredStatement<?>> clz, final String nameStr) {
158         type = Preconditions.checkNotNull(clz);
159         name = yinQName(nameStr);
160         argument = null;
161         yinElement = false;
162     }
163
164     private Rfc6020Mapping(Class<? extends DeclaredStatement<?>> clz, final String nameStr, final String argumentStr) {
165         type = Preconditions.checkNotNull(clz);
166         name = yinQName(nameStr);
167         argument = yinQName(argumentStr);
168         this.yinElement = false;
169     }
170
171     private Rfc6020Mapping(Class<? extends DeclaredStatement<?>> clz, final String nameStr, final String argumentStr,
172             final boolean yinElement) {
173         type = Preconditions.checkNotNull(clz);
174         name = yinQName(nameStr);
175         argument = yinQName(argumentStr);
176         this.yinElement = yinElement;
177     }
178
179     @Nonnull private static QName yinQName(String nameStr) {
180         return QName.cachedReference(QName.create(YangConstants.RFC6020_YIN_MODULE, nameStr));
181     }
182
183     @Override
184     public QName getStatementName() {
185         return name;
186     }
187
188     @Override
189     @Nullable public QName getArgumentName() {
190         return argument;
191     }
192
193     @Override
194     @Nonnull public Class<? extends DeclaredStatement<?>> getDeclaredRepresentationClass() {
195         return type;
196     }
197
198     @Override
199     public Class<? extends DeclaredStatement<?>> getEffectiveRepresentationClass() {
200         // FIXME: Add support once these interfaces are defined.
201         throw new UnsupportedOperationException("Not defined yet.");
202     }
203
204     public boolean isArgumentYinElement() {
205         return yinElement;
206     }
207 }
208