Fixed bugs in naming conventions of packages.
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-util / src / main / java / org / opendaylight / controller / yang / model / util / YangTypesConverter.java
1 /*
2  * Copyright (c) 2013 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.controller.yang.model.util;
9
10 import java.util.HashMap;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Set;
15
16 import org.opendaylight.controller.yang.common.QName;
17 import org.opendaylight.controller.yang.model.api.TypeDefinition;
18 import org.opendaylight.controller.yang.model.api.type.BinaryTypeDefinition;
19 import org.opendaylight.controller.yang.model.api.type.BitsTypeDefinition;
20 import org.opendaylight.controller.yang.model.api.type.BooleanTypeDefinition;
21 import org.opendaylight.controller.yang.model.api.type.DecimalTypeDefinition;
22 import org.opendaylight.controller.yang.model.api.type.IntegerTypeDefinition;
23 import org.opendaylight.controller.yang.model.api.type.RangeConstraint;
24 import org.opendaylight.controller.yang.model.api.type.StringTypeDefinition;
25 import org.opendaylight.controller.yang.model.api.type.UnsignedIntegerTypeDefinition;
26
27 public class YangTypesConverter {
28
29     private static final Map<String, TypeDefinition<? extends TypeDefinition<?>>> baseYangTypeMap = new HashMap<String, TypeDefinition<? extends TypeDefinition<?>>>();
30     private static final Set<String> baseYangTypes = new HashSet<String>();
31
32     private static final TypeDefinition<BinaryTypeDefinition> BINARY = new BinaryType();
33     private static final TypeDefinition<BitsTypeDefinition> BITS = new BitsType();
34     private static final TypeDefinition<BooleanTypeDefinition> BOOLEAN_TYPE = new BooleanType();
35     private static final TypeDefinition<IntegerTypeDefinition> INT8_TYPE = new Int8();
36     private static final TypeDefinition<IntegerTypeDefinition> INT16_TYPE = new Int16();
37     private static final TypeDefinition<IntegerTypeDefinition> INT32_TYPE = new Int32();
38     private static final TypeDefinition<IntegerTypeDefinition> INT64_TYPE = new Int64();
39     private static final TypeDefinition<StringTypeDefinition> STRING_TYPE = new StringType();
40     private static final TypeDefinition<UnsignedIntegerTypeDefinition> UINT8_TYPE = new Uint8();
41     private static final TypeDefinition<UnsignedIntegerTypeDefinition> UINT16_TYPE = new Uint16();
42     private static final TypeDefinition<UnsignedIntegerTypeDefinition> UINT32_TYPE = new Uint32();
43     private static final TypeDefinition<UnsignedIntegerTypeDefinition> UINT64_TYPE = new Uint64();
44
45     static {
46         baseYangTypeMap.put("binary", BINARY);
47         baseYangTypeMap.put("bits", BITS);
48         baseYangTypeMap.put("boolean", BOOLEAN_TYPE);
49         baseYangTypeMap.put("int8", INT8_TYPE);
50         baseYangTypeMap.put("int16", INT16_TYPE);
51         baseYangTypeMap.put("int32", INT32_TYPE);
52         baseYangTypeMap.put("int64", INT64_TYPE);
53         baseYangTypeMap.put("string", STRING_TYPE);
54         baseYangTypeMap.put("uint8", UINT8_TYPE);
55         baseYangTypeMap.put("uint16", UINT16_TYPE);
56         baseYangTypeMap.put("uint32", UINT32_TYPE);
57         baseYangTypeMap.put("uint64", UINT64_TYPE);
58
59         baseYangTypes.add("binary");
60         baseYangTypes.add("bits");
61         baseYangTypes.add("boolean");
62         baseYangTypes.add("decimal64");
63         baseYangTypes.add("empty");
64         baseYangTypes.add("enumeration");
65         baseYangTypes.add("identityref");
66         baseYangTypes.add("instance-identifier");
67         baseYangTypes.add("int8");
68         baseYangTypes.add("int16");
69         baseYangTypes.add("int32");
70         baseYangTypes.add("int64");
71         baseYangTypes.add("leafref");
72         baseYangTypes.add("string");
73         baseYangTypes.add("uint8");
74         baseYangTypes.add("uint16");
75         baseYangTypes.add("uint32");
76         baseYangTypes.add("uint64");
77         baseYangTypes.add("union");
78     }
79
80     public static boolean isBaseYangType(String type) {
81         return baseYangTypes.contains(type);
82     }
83
84     public static TypeDefinition<?> javaTypeForBaseYangType(QName typeQName) {
85         TypeDefinition<?> type = baseYangTypeMap.get(typeQName.getLocalName());
86         return type;
87     }
88
89     public static TypeDefinition<?> javaTypeForBaseYangType(String typeName) {
90         TypeDefinition<?> type = baseYangTypeMap.get(typeName);
91         return type;
92     }
93
94     public static TypeDefinition<IntegerTypeDefinition> javaTypeForBaseYangSignedIntegerType(
95             String typeName, List<RangeConstraint> ranges) {
96         if (typeName.equals("int8")) {
97             return new Int8(ranges, null, null);
98         } else if (typeName.equals("int16")) {
99             return new Int16(ranges, null, null);
100         } else if (typeName.equals("int32")) {
101             return new Int32(ranges, null, null);
102         } else if (typeName.equals("int64")) {
103             return new Int64(ranges, null, null);
104         }
105         return null;
106     }
107
108     public static TypeDefinition<UnsignedIntegerTypeDefinition> javaTypeForBaseYangUnsignedIntegerType(
109             final String typeName, List<RangeConstraint> ranges) {
110         if (typeName.equals("uint8")) {
111             return new Uint8(ranges, null, null);
112         } else if (typeName.equals("uint16")) {
113             return new Uint16(ranges, null, null);
114         } else if (typeName.equals("uint32")) {
115             return new Uint32(ranges, null, null);
116         } else if (typeName.equals("uint64")) {
117             return new Uint64(ranges, null, null);
118         }
119         return null;
120     }
121
122     public static TypeDefinition<DecimalTypeDefinition> javaTypeForBaseYangDecimal64Type(
123             List<RangeConstraint> rangeStatements, int fractionDigits) {
124         return new Decimal64(rangeStatements, fractionDigits);
125     }
126
127 }