Bug 6859 - Binding generator v1 refactoring
[controller.git] / opendaylight / config / yang-jmx-generator / src / main / java / org / opendaylight / controller / config / yangjmxgenerator / TypeProviderWrapper.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.config.yangjmxgenerator;
9
10 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
11 import org.opendaylight.mdsal.binding.generator.util.BindingGeneratorUtil;
12 import org.opendaylight.mdsal.binding.model.api.Type;
13 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
14 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
16 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
17 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.yangtools.yang.model.util.type.CompatUtils;
19
20 public class TypeProviderWrapper {
21     private final TypeProvider typeProvider;
22
23     public TypeProviderWrapper(final TypeProvider typeProvider) {
24         this.typeProvider = typeProvider;
25     }
26
27     /**
28      * For input node, find if it contains config:java-name-prefix extension. If
29      * not found, convert local name of node converted to cammel case.
30      */
31     public static String findJavaNamePrefix(final SchemaNode schemaNode) {
32         return convertToJavaName(schemaNode, true);
33     }
34
35     public static String findJavaParameter(final SchemaNode schemaNode) {
36         return convertToJavaName(schemaNode, false);
37     }
38
39     public static String convertToJavaName(final SchemaNode schemaNode,
40                                            final boolean capitalizeFirstLetter) {
41         for (final UnknownSchemaNode unknownNode : schemaNode.getUnknownSchemaNodes()) {
42             if (ConfigConstants.JAVA_NAME_PREFIX_EXTENSION_QNAME
43                     .equals(unknownNode.getNodeType())) {
44                 final String value = unknownNode.getNodeParameter();
45                 return convertToJavaName(value, capitalizeFirstLetter);
46             }
47         }
48         return convertToJavaName(schemaNode.getQName().getLocalName(),
49                 capitalizeFirstLetter);
50     }
51
52     public static String convertToJavaName(final String localName,
53                                            final boolean capitalizeFirstLetter) {
54         if (capitalizeFirstLetter) {
55             return BindingGeneratorUtil.parseToClassName(localName);
56         } else {
57             return BindingGeneratorUtil.parseToValidParamName(localName);
58         }
59     }
60
61     public Type getType(final LeafSchemaNode leaf) {
62         final TypeDefinition<?> type = CompatUtils.compatLeafType(leaf);
63         return getType(leaf, type);
64     }
65
66     public String getDefault(final LeafSchemaNode node) {
67         return this.typeProvider.getTypeDefaultConstruction(node);
68     }
69
70     public Type getType(final SchemaNode leaf, final TypeDefinition<?> type) {
71         Type javaType;
72         try {
73             javaType = this.typeProvider.javaTypeForSchemaDefinitionType(
74                     type, leaf);
75             if (javaType == null) {
76                 throw new IllegalArgumentException("Unknown type received for "
77                         + leaf.toString());
78             }
79         } catch (final IllegalArgumentException e) {
80             throw new IllegalArgumentException("Error while resolving type of "
81                     + leaf, e);
82         }
83         return javaType;
84     }
85
86     // there is no getType in common interface
87     public Type getType(final LeafListSchemaNode leaf) {
88         Type javaType;
89         try {
90             javaType = this.typeProvider.javaTypeForSchemaDefinitionType(
91                     leaf.getType(), leaf);
92             if (javaType == null) {
93                 throw new IllegalArgumentException(
94                         "Unknown type received for  " + leaf.toString());
95             }
96         } catch (final IllegalArgumentException e) {
97             throw new IllegalArgumentException("Error while resolving type of "
98                     + leaf, e);
99         }
100         return javaType;
101     }
102
103     public String getJMXParamForBaseType(final TypeDefinition<?> baseType) {
104         return this.typeProvider.getConstructorPropertyName(baseType);
105     }
106
107     public String getJMXParamForUnionInnerType(final TypeDefinition<?> unionInnerType) {
108         return this.typeProvider.getParamNameFromType(unionInnerType);
109     }
110 }