2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.binding.java.api.generator
10 import static extension org.opendaylight.mdsal.binding.generator.BindingGeneratorUtil.encodeAngleBrackets
11 import static org.opendaylight.mdsal.binding.model.ri.Types.STRING;
13 import com.google.common.collect.ImmutableMap
14 import com.google.common.collect.ImmutableMap.Builder
15 import org.opendaylight.mdsal.binding.model.api.Enumeration
16 import org.opendaylight.mdsal.binding.model.api.GeneratedType
19 * Template for generating JAVA enumeration type.
21 class EnumTemplate extends BaseTemplate {
23 * Enumeration which will be transformed to JAVA source code for enumeration
28 * Constructs instance of this class with concrete <code>enums</code>.
30 * @param enums enumeration which will be transformed to JAVA source code
32 new(AbstractJavaGeneratedType javaType, Enumeration enums) {
33 super(javaType, enums as GeneratedType)
38 * Constructs instance of this class with concrete <code>enums</code>.
40 * @param enums enumeration which will be transformed to JAVA source code
42 new(Enumeration enums) {
43 super(enums as GeneratedType)
48 * Generates only JAVA enumeration source code.
50 * @return string with JAVA enumeration source code
52 def generateAsInnerClass() {
56 def writeEnumItem(String name, String mappedName, int value, String description) '''
57 «IF description !== null»
58 «description.trim.encodeAngleBrackets.encodeJavadocSymbols.wrapToDocumentation»
60 «mappedName»(«value», "«name»")
64 * Template method which generates enumeration body (declaration + enumeration items).
66 * @return string with the enumeration body
69 «enums.formatDataForJavaDoc.wrapToDocumentation»
71 public enum «enums.name» implements «org.opendaylight.yangtools.yang.binding.Enumeration.importedName» {
72 «writeEnumeration(enums)»
74 private static final «JU_MAP.importedName»<«STRING.importedName», «enums.name»> NAME_MAP;
75 private static final «JU_MAP.importedName»<«Integer.importedName», «enums.name»> VALUE_MAP;
78 final «Builder.importedName»<«STRING.importedName», «enums.name»> nb = «ImmutableMap.importedName».builder();
79 final «Builder.importedName»<«Integer.importedName», «enums.name»> vb = «ImmutableMap.importedName».builder();
80 for («enums.name» enumItem : «enums.name».values()) {
81 vb.put(enumItem.value, enumItem);
82 nb.put(enumItem.name, enumItem);
85 NAME_MAP = nb.build();
86 VALUE_MAP = vb.build();
89 private final «STRING.importedNonNull» name;
90 private final int value;
92 private «enums.name»(int value, «STRING.importedNonNull» name) {
97 @«OVERRIDE.importedName»
98 public «STRING.importedNonNull» getName() {
102 @«OVERRIDE.importedName»
103 public int getIntValue() {
108 * Return the enumeration member whose {@link #getName()} matches specified assigned name.
110 * @param name YANG assigned name
111 * @return corresponding «enums.name» item, or {@code null} if no such item exists
112 * @throws NullPointerException if {@code name} is null
114 public static «enums.importedNullable» forName(«STRING.importedName» name) {
115 return NAME_MAP.get(«JU_OBJECTS.importedName».requireNonNull(name));
119 * Return the enumeration member whose {@link #getIntValue()} matches specified value.
121 * @param intValue integer value
122 * @return corresponding «enums.name» item, or {@code null} if no such item exists
124 public static «enums.importedNullable» forValue(int intValue) {
125 return VALUE_MAP.get(intValue);
129 * Return the enumeration member whose {@link #getName()} matches specified assigned name.
131 * @param name YANG assigned name
132 * @return corresponding «enums.name» item
133 * @throws NullPointerException if {@code name} is null
134 * @throws IllegalArgumentException if {@code name} does not match any item
136 public static «enums.importedNonNull» ofName(«STRING.importedName» name) {
137 return «CODEHELPERS.importedName».checkEnum(forName(name), name);
141 * Return the enumeration member whose {@link #getIntValue()} matches specified value.
143 * @param intValue integer value
144 * @return corresponding «enums.name» item
145 * @throws IllegalArgumentException if {@code intValue} does not match any item
147 public static «enums.importedNonNull» ofValue(int intValue) {
148 return «CODEHELPERS.importedName».checkEnum(forValue(intValue), intValue);
153 def writeEnumeration(Enumeration enumeration)
155 «FOR v : enumeration.values SEPARATOR ",\n" AFTER ";"»
156 «writeEnumItem(v.name, v.mappedName, v.value, v.description.orElse(null))»«