Speed up BaseYangTypesProvider
[mdsal.git] / binding / mdsal-binding-generator-util / src / main / java / org / opendaylight / mdsal / binding / generator / util / BaseYangTypesProvider.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.mdsal.binding.generator.util;
9
10 import com.google.common.annotations.Beta;
11 import java.math.BigDecimal;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
14 import org.opendaylight.mdsal.binding.model.api.Restrictions;
15 import org.opendaylight.mdsal.binding.model.api.Type;
16 import org.opendaylight.mdsal.binding.model.util.BaseYangTypes;
17 import org.opendaylight.mdsal.binding.model.util.Types;
18 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
19 import org.opendaylight.yangtools.yang.common.Uint16;
20 import org.opendaylight.yangtools.yang.common.Uint32;
21 import org.opendaylight.yangtools.yang.common.Uint64;
22 import org.opendaylight.yangtools.yang.common.Uint8;
23 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
26
27 @Beta
28 public final class BaseYangTypesProvider implements TypeProvider {
29     public static final @NonNull BaseYangTypesProvider INSTANCE = new BaseYangTypesProvider();
30
31     private BaseYangTypesProvider() {
32         // Hidden on purpose
33     }
34
35     /**
36      * Searches <code>Type</code> value to which is YANG <code>type</code>
37      * mapped.
38      *
39      * @param type
40      *            type definition representation of YANG type
41      * @return java <code>Type</code> representation of <code>type</code>.
42      *         If <code>type</code> isn't found then <code>null</code> is
43      *         returned.
44      */
45     @Override
46     public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
47             final boolean lenientRelativeLeafrefs) {
48         return type == null ? null : BaseYangTypes.javaTypeForYangType(type.getQName().getLocalName());
49     }
50
51     @Override
52     public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
53             final Restrictions restrictions, final boolean lenientRelativeLeafrefs) {
54         final String typeName = type.getQName().getLocalName();
55         if (restrictions != null) {
56             switch (typeName) {
57                 case "binary":
58                     return Types.typeForClass(byte[].class, restrictions);
59                 case "decimal64":
60                     return Types.typeForClass(BigDecimal.class, restrictions);
61                 case "enumeration":
62                     return Types.typeForClass(Enum.class, restrictions);
63                 case "int8":
64                     return Types.typeForClass(Byte.class, restrictions);
65                 case "int16":
66                     return Types.typeForClass(Short.class, restrictions);
67                 case "int32":
68                     return Types.typeForClass(Integer.class, restrictions);
69                 case "int64":
70                     return Types.typeForClass(Long.class, restrictions);
71                 case "string":
72                     return Types.typeForClass(String.class, restrictions);
73                 case "uint8":
74                     return Types.typeForClass(Uint8.class, restrictions);
75                 case "uint16":
76                     return Types.typeForClass(Uint16.class, restrictions);
77                 case "uint32":
78                     return Types.typeForClass(Uint32.class, restrictions);
79                 case "uint64":
80                     return Types.typeForClass(Uint64.class, restrictions);
81                 default:
82                     break;
83             }
84         }
85
86         return BaseYangTypes.javaTypeForYangType(typeName);
87     }
88
89     @Override
90     public String getTypeDefaultConstruction(final LeafSchemaNode node) {
91         return null;
92     }
93
94     @Override
95     public String getConstructorPropertyName(final SchemaNode node) {
96         return null;
97     }
98
99     @Override
100     public String getParamNameFromType(final TypeDefinition<?> type) {
101         return "_" + BindingMapping.getPropertyName(type.getQName().getLocalName());
102     }
103 }