YANGTOOLS-706: split out rfc8040-model-api
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / SupportedExtensionsMapping.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.parser.stmt.rfc6020;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import javax.annotation.Nonnull;
14 import javax.annotation.Nullable;
15 import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
16 import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
19 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
21 import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationEffectiveStatement;
22 import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationStatement;
23 import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionEffectiveStatement;
24 import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionStatement;
25
26 @Beta
27 public enum SupportedExtensionsMapping implements StatementDefinition {
28     ANYXML_SCHEMA_LOCATION("urn:opendaylight:yang:extension:yang-ext", "2013-07-09",
29         AnyxmlSchemaLocationStatement.class, AnyxmlSchemaLocationEffectiveStatement.class,
30         "anyxml-schema-location", "target-node", false),
31     OPENCONFIG_VERSION("http://openconfig.net/yang/openconfig-ext",
32         OpenconfigVersionStatement.class, OpenconfigVersionEffectiveStatement.class,
33         "openconfig-version", "semver", false),
34     YANG_DATA("urn:ietf:params:xml:ns:yang:ietf-restconf", "2017-01-26", YangDataStatement.class,
35             YangDataEffectiveStatement.class, "yang-data", "name", true);
36
37     private final Class<? extends DeclaredStatement<?>> type;
38     private final Class<? extends EffectiveStatement<?, ?>> effectiveType;
39     private final QName name;
40     private final QName argument;
41     private final boolean yinElement;
42
43     SupportedExtensionsMapping(final String namespace, final String revision,
44             final Class<? extends DeclaredStatement<?>> declared,
45             final Class<? extends EffectiveStatement<?, ?>> effective, final String nameStr, final String argumentStr,
46             final boolean yinElement) {
47         type = requireNonNull(declared);
48         effectiveType = requireNonNull(effective);
49         name = createQName(namespace, revision, nameStr);
50         argument = createQName(namespace, revision, argumentStr);
51         this.yinElement = yinElement;
52     }
53
54     SupportedExtensionsMapping(final String namespace, final Class<? extends DeclaredStatement<?>> declared,
55             final Class<? extends EffectiveStatement<?, ?>> effective, final String nameStr, final String argumentStr,
56             final boolean yinElement) {
57         type = requireNonNull(declared);
58         effectiveType = requireNonNull(effective);
59         name = createQName(namespace, nameStr);
60         argument = createQName(namespace, argumentStr);
61         this.yinElement = yinElement;
62     }
63
64     @Nonnull
65     private static QName createQName(final String namespace, final String localName) {
66         return QName.create(namespace, localName).intern();
67     }
68
69     @Nonnull
70     private static QName createQName(final String namespace, final String revision, final String localName) {
71         return QName.create(namespace, revision, localName).intern();
72     }
73
74     @Nonnull
75     @Override
76     public QName getStatementName() {
77         return name;
78     }
79
80     @Override
81     @Nullable
82     public QName getArgumentName() {
83         return argument;
84     }
85
86     @Override
87     @Nonnull
88     public Class<? extends DeclaredStatement<?>> getDeclaredRepresentationClass() {
89         return type;
90     }
91
92     @Nonnull
93     @Override
94     public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
95         return effectiveType;
96     }
97
98     @Override
99     public boolean isArgumentYinElement() {
100         return yinElement;
101     }
102 }