82849891f9b42b64c9043237598986b007d78403
[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.ArrayList;\r
12 import java.util.Date;\r
13 import java.util.HashSet;\r
14 import java.util.List;\r
15 import java.util.Set;\r
16 \r
17 import org.opendaylight.controller.yang.common.QName;\r
18 import org.opendaylight.controller.yang.model.api.SchemaPath;\r
19 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
20 \r
21 public final class YangTypesConverter {\r
22     private static final Set<String> baseYangTypes = new HashSet<String>();\r
23 \r
24     static {\r
25         baseYangTypes.add("binary");\r
26         baseYangTypes.add("bits");\r
27         baseYangTypes.add("boolean");\r
28         baseYangTypes.add("decimal64");\r
29         baseYangTypes.add("empty");\r
30         baseYangTypes.add("enumeration");\r
31         baseYangTypes.add("identityref");\r
32         baseYangTypes.add("instance-identifier");\r
33         baseYangTypes.add("int8");\r
34         baseYangTypes.add("int16");\r
35         baseYangTypes.add("int32");\r
36         baseYangTypes.add("int64");\r
37         baseYangTypes.add("leafref");\r
38         baseYangTypes.add("string");\r
39         baseYangTypes.add("uint8");\r
40         baseYangTypes.add("uint16");\r
41         baseYangTypes.add("uint32");\r
42         baseYangTypes.add("uint64");\r
43         baseYangTypes.add("union");\r
44     }\r
45 \r
46     public static boolean isBaseYangType(String type) {\r
47         return baseYangTypes.contains(type);\r
48     }\r
49 \r
50     public static TypeDefinition<?> javaTypeForBaseYangType(\r
51             List<String> actualPath, URI namespace, Date revision,\r
52             String typeName) {\r
53         TypeDefinition<?> type = null;\r
54 \r
55         SchemaPath path = createSchemaPath(actualPath, namespace, revision);\r
56         if (typeName.startsWith("int")) {\r
57             if (typeName.equals("int8")) {\r
58                 type = new Int8(path);\r
59             } else if (typeName.equals("int16")) {\r
60                 type = new Int16(path);\r
61             } else if (typeName.equals("int32")) {\r
62                 type = new Int32(path);\r
63             } else if (typeName.equals("int64")) {\r
64                 type = new Int64(path);\r
65             }\r
66         } else if (typeName.startsWith("uint")) {\r
67             if (typeName.equals("uint8")) {\r
68                 type = new Uint8(path);\r
69             } else if (typeName.equals("uint16")) {\r
70                 type = new Uint16(path);\r
71             } else if (typeName.equals("uint32")) {\r
72                 type = new Uint32(path);\r
73             } else if (typeName.equals("uint64")) {\r
74                 type = new Uint64(path);\r
75             }\r
76         } else if ("string".equals(typeName)) {\r
77             type = new StringType(path);\r
78         } else if("binary".equals(typeName)) {\r
79             type = new BinaryType(path);\r
80         } else if("boolean".equals(typeName)) {\r
81             type = new BooleanType(path);\r
82         } else if("empty".equals(typeName)) {\r
83             type = new EmptyType(path);\r
84         } else if("instance-identifier".equals(typeName)) {\r
85             type = new InstanceIdentifier(path, null, true);\r
86         }\r
87 \r
88         return type;\r
89     }\r
90 \r
91     private static SchemaPath createSchemaPath(List<String> actualPath, URI namespace, Date revision) {\r
92         List<QName> path = new ArrayList<QName>();\r
93         for(String element : actualPath) {\r
94             path.add(new QName(namespace, revision, element));\r
95         }\r
96         return new SchemaPath(path, true);\r
97     }\r
98 \r
99 }\r