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