2 * Copyright (c) 2013 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.util;
10 import com.google.common.base.Optional;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.ImmutableSet;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.QNameModule;
17 import org.opendaylight.yangtools.yang.common.YangConstants;
18 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
21 * Utility methods and constants to work with built-in YANG types
25 public final class BaseTypes {
31 * @deprecated Use {@link YangConstants#RFC6020_YANG_NAMESPACE} instead. To be removed in Boron release.
34 public static final URI BASE_TYPES_NAMESPACE = YangConstants.RFC6020_YANG_NAMESPACE;
36 * @deprecated Use {@link YangConstants#RFC6020_YANG_MODULE} instead. To be removed in Boron release.
39 public static final QNameModule BASE_TYPES_MODULE = YangConstants.RFC6020_YANG_MODULE;
41 public static final QName BINARY_QNAME = constructQName("binary");
42 public static final QName BITS_QNAME = constructQName("bits");
43 public static final QName BOOLEAN_QNAME = constructQName("boolean");
44 public static final QName DECIMAL64_QNAME = constructQName("decimal64");
45 public static final QName EMPTY_QNAME = constructQName("empty");
46 public static final QName ENUMERATION_QNAME = constructQName("enumeration");
47 public static final QName IDENTITYREF_QNAME = constructQName("identityref");
48 public static final QName INSTANCE_IDENTIFIER_QNAME = constructQName("instance-identifier");
49 public static final QName INT8_QNAME = constructQName("int8");
50 public static final QName INT16_QNAME = constructQName("int16");
51 public static final QName INT32_QNAME = constructQName("int32");
52 public static final QName INT64_QNAME = constructQName("int64");
53 public static final QName LEAFREF_QNAME = constructQName("leafref");
54 public static final QName STRING_QNAME = constructQName("string");
55 public static final QName UINT8_QNAME = constructQName("uint8");
56 public static final QName UINT16_QNAME = constructQName("uint16");
57 public static final QName UINT32_QNAME = constructQName("uint32");
58 public static final QName UINT64_QNAME = constructQName("uint64");
59 public static final QName UNION_QNAME = constructQName("union");
61 private static final Set<String> BUILT_IN_TYPES = ImmutableSet.<String>builder()
62 .add(BINARY_QNAME.getLocalName())
63 .add(BITS_QNAME.getLocalName())
64 .add(BOOLEAN_QNAME.getLocalName())
65 .add(DECIMAL64_QNAME.getLocalName())
66 .add(EMPTY_QNAME.getLocalName())
67 .add(ENUMERATION_QNAME.getLocalName())
68 .add(IDENTITYREF_QNAME.getLocalName())
69 .add(INSTANCE_IDENTIFIER_QNAME.getLocalName())
70 .add(INT8_QNAME.getLocalName())
71 .add(INT16_QNAME.getLocalName())
72 .add(INT32_QNAME.getLocalName())
73 .add(INT64_QNAME.getLocalName())
74 .add(LEAFREF_QNAME.getLocalName())
75 .add(STRING_QNAME.getLocalName())
76 .add(UINT8_QNAME.getLocalName())
77 .add(UINT16_QNAME.getLocalName())
78 .add(UINT32_QNAME.getLocalName())
79 .add(UINT64_QNAME.getLocalName())
80 .add(UNION_QNAME.getLocalName())
84 * Construct QName for Built-in base Yang type. The namespace for built-in
85 * base yang types is defined as: urn:ietf:params:xml:ns:yang:1
89 * @return built-in base yang type QName.
91 public static QName constructQName(final String typeName) {
92 return QName.cachedReference(QName.create(YangConstants.RFC6020_YANG_MODULE, typeName));
96 * Returns true if supplied type is representation of built-in YANG type as
99 * See package documentation for description of base types.
102 * @return true if type is built-in YANG Types.
104 public static boolean isYangBuildInType(final String type) {
105 return BUILT_IN_TYPES.contains(type);
109 * Returns default instance of built-in for supplied type
111 * See package documentation for description of base build-in types
112 * with default instance.
115 * @return Returns default instance or {@link Optional#absent()} if default
116 * instance does not exists
118 * @deprecated Use parser-specific lookup tables.
121 public static Optional<TypeDefinition<?>> defaultBaseTypeFor(final String typeName) {
122 return Optional.<TypeDefinition<?>> fromNullable(defaultBaseTypeForImpl(typeName));
126 private static TypeDefinition<?> defaultBaseTypeForImpl(final String typeName) {
127 Preconditions.checkNotNull(typeName, "typeName must not be null.");
129 if (typeName.startsWith("int")) {
130 if ("int8".equals(typeName)) {
131 return Int8.getInstance();
132 } else if ("int16".equals(typeName)) {
133 return Int16.getInstance();
134 } else if ("int32".equals(typeName)) {
135 return Int32.getInstance();
136 } else if ("int64".equals(typeName)) {
137 return Int64.getInstance();
139 } else if (typeName.startsWith("uint")) {
140 if ("uint8".equals(typeName)) {
141 return Uint8.getInstance();
142 } else if ("uint16".equals(typeName)) {
143 return Uint16.getInstance();
144 } else if ("uint32".equals(typeName)) {
145 return Uint32.getInstance();
146 } else if ("uint64".equals(typeName)) {
147 return Uint64.getInstance();
149 } else if ("string".equals(typeName)) {
150 return StringType.getInstance();
151 } else if ("binary".equals(typeName)) {
152 return BinaryType.getInstance();
153 } else if ("boolean".equals(typeName)) {
154 return BooleanType.getInstance();
155 } else if ("empty".equals(typeName)) {
156 return EmptyType.getInstance();
157 } else if ("instance-identifier".equals(typeName)) {
158 return InstanceIdentifierType.getInstance();