Merge "Added support for annotations in generated APIs."
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-util / src / main / java / org / opendaylight / controller / yang / model / util / YangTypesConverter.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.controller.yang.model.util;\r
9 \r
10 import java.net.URI;\r
11 import java.util.Date;\r
12 import java.util.HashMap;\r
13 import java.util.HashSet;\r
14 import java.util.List;\r
15 import java.util.Map;\r
16 import java.util.Set;\r
17 \r
18 import org.opendaylight.controller.yang.common.QName;\r
19 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
20 import org.opendaylight.controller.yang.model.api.type.BinaryTypeDefinition;\r
21 import org.opendaylight.controller.yang.model.api.type.BitsTypeDefinition;\r
22 import org.opendaylight.controller.yang.model.api.type.BooleanTypeDefinition;\r
23 import org.opendaylight.controller.yang.model.api.type.EmptyTypeDefinition;\r
24 import org.opendaylight.controller.yang.model.api.type.InstanceIdentifierTypeDefinition;\r
25 \r
26 public class YangTypesConverter {\r
27 \r
28     private static final Map<String, TypeDefinition<? extends TypeDefinition<?>>> baseYangTypeMap = new HashMap<String, TypeDefinition<? extends TypeDefinition<?>>>();\r
29     private static final Set<String> baseYangTypes = new HashSet<String>();\r
30 \r
31     private static final TypeDefinition<BinaryTypeDefinition> BINARY = new BinaryType();\r
32     private static final TypeDefinition<BitsTypeDefinition> BITS = new BitsType();\r
33     private static final TypeDefinition<BooleanTypeDefinition> BOOLEAN_TYPE = new BooleanType();\r
34     private static final TypeDefinition<EmptyTypeDefinition> EMPTY_TYPE = new EmptyType();\r
35     private static final TypeDefinition<InstanceIdentifierTypeDefinition> INST_ID_TYPE = new InstanceIdentifier(\r
36             null, true);\r
37 \r
38     static {\r
39         baseYangTypeMap.put("binary", BINARY);\r
40         baseYangTypeMap.put("bits", BITS);\r
41         baseYangTypeMap.put("boolean", BOOLEAN_TYPE);\r
42         baseYangTypeMap.put("empty", EMPTY_TYPE);\r
43         baseYangTypeMap.put("instance-identifier", INST_ID_TYPE);\r
44 \r
45         baseYangTypes.add("binary");\r
46         baseYangTypes.add("bits");\r
47         baseYangTypes.add("boolean");\r
48         baseYangTypes.add("decimal64");\r
49         baseYangTypes.add("empty");\r
50         baseYangTypes.add("enumeration");\r
51         baseYangTypes.add("identityref");\r
52         baseYangTypes.add("instance-identifier");\r
53         baseYangTypes.add("int8");\r
54         baseYangTypes.add("int16");\r
55         baseYangTypes.add("int32");\r
56         baseYangTypes.add("int64");\r
57         baseYangTypes.add("leafref");\r
58         baseYangTypes.add("string");\r
59         baseYangTypes.add("uint8");\r
60         baseYangTypes.add("uint16");\r
61         baseYangTypes.add("uint32");\r
62         baseYangTypes.add("uint64");\r
63         baseYangTypes.add("union");\r
64     }\r
65 \r
66     public static boolean isBaseYangType(String type) {\r
67         return baseYangTypes.contains(type);\r
68     }\r
69 \r
70     public static TypeDefinition<?> javaTypeForBaseYangType(QName typeQName) {\r
71         TypeDefinition<?> type = baseYangTypeMap.get(typeQName.getLocalName());\r
72         return type;\r
73     }\r
74 \r
75     public static TypeDefinition<?> javaTypeForBaseYangType(\r
76             List<String> actualPath, URI namespace, Date revision,\r
77             String typeName) {\r
78 \r
79         if (typeName.startsWith("int")) {\r
80             if (typeName.equals("int8")) {\r
81                 return new Int8(actualPath, namespace, revision);\r
82             } else if (typeName.equals("int16")) {\r
83                 return new Int16(actualPath, namespace, revision);\r
84             } else if (typeName.equals("int32")) {\r
85                 return new Int32(actualPath, namespace, revision);\r
86             } else if (typeName.equals("int64")) {\r
87                 return new Int64(actualPath, namespace, revision);\r
88             }\r
89         } else if (typeName.startsWith("uint")) {\r
90             if (typeName.equals("uint8")) {\r
91                 return new Uint8(actualPath, namespace, revision);\r
92             } else if (typeName.equals("uint16")) {\r
93                 return new Uint16(actualPath, namespace, revision);\r
94             } else if (typeName.equals("uint32")) {\r
95                 return new Uint32(actualPath, namespace, revision);\r
96             } else if (typeName.equals("uint64")) {\r
97                 return new Uint64(actualPath, namespace, revision);\r
98             }\r
99         } else if (typeName.equals("string")) {\r
100             return new StringType(actualPath, namespace, revision);\r
101         }\r
102 \r
103         TypeDefinition<?> type = baseYangTypeMap.get(typeName);\r
104         return type;\r
105     }\r
106 \r
107 }\r