/* * 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.mdsal.binding.yang.types; import com.google.common.collect.ImmutableMap; import java.math.BigDecimal; import org.opendaylight.mdsal.binding.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.util.Types; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; public final class BaseYangTypes { /** * Type representation of boolean YANG type. */ public static final Type BOOLEAN_TYPE = Types.BOOLEAN; /** * Type representation of empty YANG type. */ public static final Type EMPTY_TYPE = Types.typeForClass(Empty.class); public static final Type ENUM_TYPE = Types.typeForClass(Enum.class); /** * Type representation of int8 YANG type. */ public static final Type INT8_TYPE = Types.typeForClass(Byte.class); /** * Type representation of int16 YANG type. */ public static final Type INT16_TYPE = Types.typeForClass(Short.class); /** * Type representation of int32 YANG type. */ public static final Type INT32_TYPE = Types.typeForClass(Integer.class); /** * Type representation of int64 YANG type. */ public static final Type INT64_TYPE = Types.typeForClass(Long.class); /** * Type representation of string YANG type. */ public static final Type STRING_TYPE = Types.STRING; /** * Type representation of decimal64 YANG type. */ public static final Type DECIMAL64_TYPE = Types.typeForClass(BigDecimal.class); /** * Type representation of uint8 YANG type. */ public static final Type UINT8_TYPE = Types.typeForClass(Uint8.class); /** * Type representation of uint16 YANG type. */ public static final Type UINT16_TYPE = Types.typeForClass(Uint16.class); /** * Type representation of uint32 YANG type. */ public static final Type UINT32_TYPE = Types.typeForClass(Uint32.class); /** * Type representation of uint64 YANG type. */ public static final Type UINT64_TYPE = Types.typeForClass(Uint64.class); /** * Type representation of binary YANG type. */ public static final Type BINARY_TYPE = Types.typeForClass(byte[].class); public static final Type INSTANCE_IDENTIFIER = Types.parameterizedTypeFor(Types .typeForClass(InstanceIdentifier.class)); /** * mapping of basic built-in YANG types (keys) to JAVA {@link org.opendaylight.mdsal.binding.model.api.Type Type}. * This map is filled with mapping data in static initialization block. */ private static final ImmutableMap TYPE_MAP = ImmutableMap.builder() .put("boolean", BOOLEAN_TYPE) .put("empty", EMPTY_TYPE) .put("enumeration", ENUM_TYPE) .put("int8", INT8_TYPE) .put("int16", INT16_TYPE) .put("int32", INT32_TYPE) .put("int64", INT64_TYPE) .put("string", STRING_TYPE) .put("decimal64", DECIMAL64_TYPE) .put("uint8", UINT8_TYPE) .put("uint16", UINT16_TYPE) .put("uint32", UINT32_TYPE) .put("uint64", UINT64_TYPE) .put("binary", BINARY_TYPE) .put("instance-identifier", INSTANCE_IDENTIFIER) .build(); /** * It is undesirable to create instance of this class. */ private BaseYangTypes() { throw new UnsupportedOperationException(); } /** * Searches Type value to which is YANG type * mapped. * * @param type * string with YANG type name * @return java Type representation of type */ public static Type javaTypeForYangType(final String type) { return TYPE_MAP.get(type); } public static final TypeProvider BASE_YANG_TYPES_PROVIDER = new TypeProvider() { /** * Searches Type value to which is YANG type * mapped. * * @param type * type definition representation of YANG type * @return java Type representation of type. * If type isn't found then null is * returned. */ @Override public Type javaTypeForSchemaDefinitionType(final TypeDefinition type, final SchemaNode parentNode, final boolean lenientRelativeLeafrefs) { if (type != null) { return TYPE_MAP.get(type.getQName().getLocalName()); } return null; } @Override public Type javaTypeForSchemaDefinitionType(final TypeDefinition type, final SchemaNode parentNode, final Restrictions restrictions, final boolean lenientRelativeLeafrefs) { String typeName = type.getQName().getLocalName(); switch (typeName) { case "binary": return restrictions == null ? Types.BYTE_ARRAY : Types.typeForClass(byte[].class, restrictions); case "decimal64": return Types.typeForClass(BigDecimal.class, restrictions); case "enumeration": return Types.typeForClass(Enum.class, restrictions); case "int8": return Types.typeForClass(Byte.class, restrictions); case "int16": return Types.typeForClass(Short.class, restrictions); case "int32": return Types.typeForClass(Integer.class, restrictions); case "int64": return Types.typeForClass(Long.class, restrictions); case "string": return Types.typeForClass(String.class, restrictions); case "uint8": return Types.typeForClass(Uint8.class, restrictions); case "uint16": return Types.typeForClass(Uint16.class, restrictions); case "uint32": return Types.typeForClass(Uint32.class, restrictions); case "uint64": return Types.typeForClass(Uint64.class, restrictions); default: return javaTypeForSchemaDefinitionType(type, parentNode, lenientRelativeLeafrefs); } } @Override public String getTypeDefaultConstruction(final LeafSchemaNode node) { return null; } @Override public String getConstructorPropertyName(final SchemaNode node) { return null; } @Override public String getParamNameFromType(final TypeDefinition type) { return "_" + BindingMapping.getPropertyName(type.getQName().getLocalName()); } }; }