/* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.model.util; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** * Utility methods and constants to work with built-in YANG types * * */ public final class BaseTypes { private BaseTypes() { } public static final QName BINARY_QNAME = constructQName("binary"); public static final QName BITS_QNAME = constructQName("bits"); public static final QName BOOLEAN_QNAME = constructQName("boolean"); public static final QName DECIMAL64_QNAME = constructQName("decimal64"); public static final QName EMPTY_QNAME = constructQName("empty"); public static final QName ENUMERATION_QNAME = constructQName("enumeration"); public static final QName IDENTITYREF_QNAME = constructQName("identityref"); public static final QName INSTANCE_IDENTIFIER_QNAME = constructQName("instance-identifier"); public static final QName INT8_QNAME = constructQName("int8"); public static final QName INT16_QNAME = constructQName("int16"); public static final QName INT32_QNAME = constructQName("int32"); public static final QName INT64_QNAME = constructQName("int64"); public static final QName LEAFREF_QNAME = constructQName("leafref"); public static final QName STRING_QNAME = constructQName("string"); public static final QName UINT8_QNAME = constructQName("uint8"); public static final QName UINT16_QNAME = constructQName("uint16"); public static final QName UINT32_QNAME = constructQName("uint32"); public static final QName UINT64_QNAME = constructQName("uint64"); public static final QName UNION_QNAME = constructQName("union"); private static final Set<QName> BUILT_IN_TYPES = ImmutableSet.<QName>builder() .add(BINARY_QNAME) .add(BITS_QNAME) .add(BOOLEAN_QNAME) .add(DECIMAL64_QNAME) .add(EMPTY_QNAME) .add(ENUMERATION_QNAME) .add(IDENTITYREF_QNAME) .add(INSTANCE_IDENTIFIER_QNAME) .add(INT8_QNAME) .add(INT16_QNAME) .add(INT32_QNAME) .add(INT64_QNAME) .add(LEAFREF_QNAME) .add(STRING_QNAME) .add(UINT8_QNAME) .add(UINT16_QNAME) .add(UINT32_QNAME) .add(UINT64_QNAME) .add(UNION_QNAME) .build(); /** * Construct QName for Built-in base Yang type. The namespace for built-in * base yang types is defined as: urn:ietf:params:xml:ns:yang:1 * * @param typeName * yang type name * @return built-in base yang type QName. */ public static QName constructQName(final String typeName) { return QName.create(YangConstants.RFC6020_YANG_MODULE, typeName).intern(); } /** * Returns true if supplied type is representation of built-in YANG type as * per RFC 6020. * * See package documentation for description of base types. * * @param type * @return true if type is built-in YANG Types. */ public static boolean isYangBuildInType(final String type) { return !Strings.isNullOrEmpty(type) && BUILT_IN_TYPES.contains( QName.create(YangConstants.RFC6020_YANG_MODULE, type)); } /** * Returns true if supplied type is representation of built-in YANG type as * per RFC 6020. * * See package documentation for description of base types. * * @param type * @return true if type is built-in YANG Types. */ public static boolean isYangBuildInType(final TypeDefinition<?> type) { return type != null && BUILT_IN_TYPES.contains(type.getQName()); } }